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="title"; | ||
local b=" | local b="regex3"; | ||
local c="prefix"; | local c="prefix"; | ||
local d=" | local d="type"; | ||
local e=" | local e="message"; | ||
local f=" | local f="regex1"; | ||
local g=" | local g="category"; | ||
local h=" | local h="regex2"; | ||
local i="commit"; | local i="commit"; | ||
local j="source"; | local j="source"; | ||
local k="tests2"; | local k="tests2"; | ||
local l=" | local l="maingroup"; | ||
local m=" | local m="groups"; | ||
local n="Semantic Issue"; | local n="Semantic Issue"; | ||
local o=" | local o="warning: "; | ||
local p="(?:warning|error|fatal error)\\: "; | local p="(?:warning|error|fatal error)\\: "; | ||
local q=" | local q="Warning"; | ||
local r=""; | local r=""; | ||
local s="error: "; | local s="error: "; | ||
Line 29: | Line 29: | ||
local C="Implement P2361 Unevaluated string literals"; | local C="Implement P2361 Unevaluated string literals"; | ||
local D="Lexical or Preprocessor Issue"; | local D="Lexical or Preprocessor Issue"; | ||
local E="The basic representation of diagnostics information in tablegen format, plus (uncommented and | local E="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp..."; | ||
local F="The basic representation of diagnostics information in tablegen format, plus (uncommented and | local F="b1c4d5507fad"; | ||
local G="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomplete) test conversions of the existing def files to this format."; | |||
local H="c++11-extensions"; | local H="c++11-extensions"; | ||
local I="clang/lib/Sema/SemaTemplate.cpp"; | local I="clang/lib/Sema/SemaTemplate.cpp"; | ||
Line 42: | Line 42: | ||
local P="95f50964fbf5"; | local P="95f50964fbf5"; | ||
local Q="c++17-extensions"; | local Q="c++17-extensions"; | ||
local R="(?:error|warning|fatal error)\\: | local R="Downgradable Error"; | ||
local S="(?:error|warning|fatal error)\\: "; | |||
local T="PR20356: Fix all Sema warnings with mismatched ext_/warn_ versus"; | local T="PR20356: Fix all Sema warnings with mismatched ext_/warn_ versus"; | ||
local U="clang/lib/Sema/SemaType.cpp"; | local U="clang/lib/Sema/SemaType.cpp"; | ||
local V="c++0x-extensions"; | local V="c++0x-extensions"; | ||
local W="clang/lib/Sema/SemaInit.cpp"; | local W="clang/lib/Sema/SemaInit.cpp"; | ||
local X=" | local X="c99-extensions"; | ||
local Y="[C++20][Modules][3/8] Initial handling for module partitions."; | local Y=" \\[(?:\\-Werror,)?\\-Wpedantic[^\\]]*\\]"; | ||
local | local Z="[C++20][Modules][3/8] Initial handling for module partitions."; | ||
local ab="clang/lib/Sema/SemaExprCXX.cpp"; | |||
local bb=" | local bb="clang/lib/Lex/PPDirectives.cpp"; | ||
local cb=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-extensions[^\\]]*\\]"; | local cb=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-extensions[^\\]]*\\]"; | ||
local db="clang/lib/Lex/Lexer.cpp"; | local db="clang/lib/Lex/Lexer.cpp"; | ||
local eb | local eb="clang/lib/Sema/SemaChecking.cpp"; | ||
local fb="c++2a-extensions"; | |||
local gb="clang/lib/Lex/LiteralSupport.cpp"; | local gb="clang/lib/Lex/LiteralSupport.cpp"; | ||
local hb="microsoft-template"; | local hb="microsoft-template"; | ||
local ib=" \\[(?:\\-Werror,)?\\-Wc\\+\\+20\\-extensions[^\\]]*\\] | local ib="c++23-extensions"; | ||
local jb=" \\[(?:\\-Werror,)?\\-Wc\\+\\+20\\-extensions[^\\]]*\\]"; | |||
local kb | local kb="c++1z-extensions"; | ||
local lb=" \\[(?:\\-Werror,)?\\-Wc\\+\\+17\\-extensions[^\\]]*\\]"; | |||
local | local mb="CL4"; | ||
local | local nb="c++14-extensions"; | ||
local | local ob="1b98ccc4e957"; | ||
local pb="clang/lib/ | local pb="clang/lib/Frontend/VerifyDiagnosticConsumer.cpp"; | ||
local qb="clang/lib/ | local qb="clang/lib/Lex/Pragma.cpp"; | ||
local rb | local rb="clang/lib/Sema/SemaDeclObjC.cpp"; | ||
local sb="most"; | |||
local tb=" | local tb="c2x-extensions"; | ||
local ub="[clang] New __attribute__((__clang_arm_mve_alias))."; | local ub="[clang] New __attribute__((__clang_arm_mve_alias))."; | ||
local vb=" | local vb="all"; | ||
local wb | local wb="clang/lib/Parse/ParseExpr.cpp"; | ||
local xb="69350e569dc4"; | |||
local | local yb="[c++20] Implement semantic restrictions for C++20 designated"; | ||
local | local zb="Reland [clang] Check unsupported types in expressions"; | ||
local | local Ab="clang/lib/Parse/ParseExprCXX.cpp"; | ||
local Bb=" | local Bb="clang/lib/Parse/ParseStmt.cpp"; | ||
local Cb="clang/lib/Parse/Parser.cpp"; | local Cb="clang/lib/Parse/Parser.cpp"; | ||
local Db=" | local Db="c99-designator"; | ||
local Eb=" | local Eb="[OpenMP][Part 2] Use reusable OpenMP context/traits handling"; | ||
local Fb="clang/ | local Fb="clang/lib/Sema/SemaCast.cpp"; | ||
local Gb="[ | local Gb=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-template[^\\]]*\\]"; | ||
local Hb | local Hb="clang/test/Sema/wasm-refs-and-tables.c"; | ||
local Ib="clang/lib/Sema/SemaExceptionSpec.cpp"; | |||
local | local Jb=" \\[(?:\\-Werror,)?\\-Wc99\\-extensions[^\\]]*\\]"; | ||
local | local Kb="microsoft-exception-spec"; | ||
local | local Lb=" \\[(?:\\-Werror,)?\\-Wc\\+\\+23\\-extensions[^\\]]*\\]"; | ||
local | local Mb="[WebAssembly] Improve clang diagnostics for wasm attributes"; | ||
local Nb=" | local Nb="c++2b-extensions"; | ||
local Ob=" | local Ob="c++1y-extensions"; | ||
local Pb="(?: \\[(?:\\-Werror)?[^\\]]*\\])?"; | local Pb="(?: \\[(?:\\-Werror)?[^\\]]*\\])?"; | ||
local Qb="clang/lib/Sema/SemaOverload.cpp"; | local Qb="clang/lib/Sema/SemaOverload.cpp"; | ||
local Rb="c++ | local Rb="c++11-narrowing"; | ||
local Sb=" | local Sb="Support warn_unused_result on typedefs"; | ||
local Tb=" | local Tb="#error"; | ||
local Ub=" | local Ub="g++ is more permissive regarding flexible arrays."; | ||
local Vb="Rather than duplicating extension diagnostics to allow them to cause a"; | local Vb="Rather than duplicating extension diagnostics to allow them to cause a"; | ||
local Wb=" | local Wb="clang/lib/Sema/SemaStmt.cpp"; | ||
local Xb=" | local Xb="More __unknown_anytype work."; | ||
local Yb=" | local Yb="c11-extensions"; | ||
local Zb=" | local Zb="C++1y constexpr extensions, round 1: Allow most forms of declaration and"; | ||
local ac=" | local ac="excess-initializers"; | ||
local bc=" | local bc="clang/lib/Sema/SemaDeclAttr.cpp"; | ||
local cc=" | local cc="pointer-arith"; | ||
local dc=" \\[(?:\\-Werror,)?\\- | local dc=" \\[(?:\\-Werror,)?\\-Wc2x\\-extensions[^\\]]*\\]"; | ||
local ec=" | local ec="7c11da0cfd33"; | ||
local fc=" | local fc="clang/test/Sema/vla.c"; | ||
local gc=" | local gc="c++11-compat"; | ||
local hc | local hc="c++11-compat-pedantic"; | ||
local ic="clang/test/Parser/declarators.c"; | |||
local | local jc="clang/lib/Parse/ParseObjc.cpp"; | ||
local | local kc=" \\[(?:\\-Werror,)?\\-Wc\\+\\+14\\-extensions[^\\]]*\\]"; | ||
local | local lc="clang/lib/Sema/SemaExprObjC.cpp"; | ||
local mc="gnu- | local mc="gnu-empty-struct"; | ||
local nc=" | local nc="gnu-folding-constant"; | ||
local oc="gnu- | local oc="gnu-pointer-arith"; | ||
local pc=" | local pc="clang/test/SemaCXX/unknown-anytype.cpp"; | ||
local qc=" | local qc="clang/test/Parser/MicrosoftExtensions.cpp"; | ||
local rc=" | local rc="implicit-function-declaration"; | ||
local sc=" | local sc="[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)"; | ||
local tc=" | local tc="Parsing and AST support for using declarations, from John Thompson!"; | ||
local uc=" | local uc="unknown-pragmas"; | ||
local vc="clang/ | local vc="Fix bugs checking va_start in lambdas and erroneous contexts"; | ||
local | local wc="clang/lib/Sema/SemaAccess.cpp"; | ||
local | local xc="comment"; | ||
local | local yc="Add diagnostics for comma at end of enum and for extra semicolon at namespace"; | ||
local | local zc="c++0x-compat"; | ||
local | local Ac="clang/lib/AST/ASTImporter.cpp"; | ||
local | local Bc="Switch parsing of using declarations over to ParseUnqualifiedId."; | ||
local Cc="Let clang atomic builtins fetch add/sub support floating point types"; | |||
local Dc="[c++1z] P0195R2: Support pack-expansion of using-declarations."; | |||
local Ec=" | local Ec="variadic-macros"; | ||
local Fc=" | local Fc="Implement typo correction for a variety of Objective-C-specific"; | ||
local Gc=" | local Gc="clang/lib/Sema/DeclSpec.cpp"; | ||
local Hc=" | local Hc="dtor-name"; | ||
local Ic=" | local Ic="gcc-compat"; | ||
local Jc=" | local Jc="Improve handling of friend types in several ways:"; | ||
local Kc="gnu- | local Kc="gnu-designator"; | ||
local Lc=" | local Lc="Allow a using directive to refer to the implicitly-defined namespace"; | ||
local Mc=" | local Mc="missing-declarations"; | ||
local Nc="clang/lib/ | local Nc="3dbcea8b957a"; | ||
local | local Oc="clang/lib/Lex/PPExpressions.cpp"; | ||
local | local Pc="Correctly implement the C++03 and 0x restrictions on class-member using"; | ||
local | local Qc="main"; | ||
local | local Rc="Add VerifyDiagnosticsClient, to replace old -verify."; | ||
local Sc="clang/test/Sema/c89.c"; | |||
local Tc="5030928d60a1"; | local Tc="5030928d60a1"; | ||
local Uc=" | local Uc="After some discussion with Doug, we decided that it made a lot more sense"; | ||
local Vc=" | local Vc="incompatible-pointer-types"; | ||
local Wc | local Wc="clang/lib/Basic/DiagnosticIDs.cpp"; | ||
local Xc=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-exception\\-spec[^\\]]*\\]"; | |||
local Yc="1228d42ddab8"; | |||
local Zc="clang/lib/Parse/ParseInit.cpp"; | |||
local | local ad="clang/test/SemaCXX/MicrosoftExtensions.cpp"; | ||
local bd="Modules Issue"; | |||
local | local cd="clang/lib/Sema/SemaTemplateInstantiateDecl.cpp"; | ||
local | local dd="931fcd3ba011"; | ||
local ed=" | local ed="clang/lib/Sema/SemaOpenMP.cpp"; | ||
local fd=" | local fd="clang/lib/Sema/SemaObjCProperty.cpp"; | ||
local gd=" \\[(?:\\-Werror,)?\\- | local gd=" \\[(?:\\-Werror,)?\\-Wc99\\-designator[^\\]]*\\]"; | ||
local hd=" | local hd="implicit"; | ||
local id="clang/ | local id="clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp"; | ||
return { | return { | ||
["err_typename_missing_template"]={ | ["err_typename_missing_template"]={ | ||
[ | [a]="missing \'typename\' prior to dependent type template name \'AB\'", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="missing \'typename\' prior to dependent type template name \'%0%1\'", | ||
[ | [f]=t, | ||
[ | [h]="missing \'typename\' prior to dependent type template name \'(.*?)(.*?)\'", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"62559bd7ce0c",1485984998,"Fix hole in our enforcement of rule requiring \'typename\' prior to a dependent","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","Fix hole in our enforcement of rule requiring \'typename\' prior to a dependent"}, | ||
[j]={{I,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();"}} | [j]={{I,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 // ...\n if (!IsCtorOrDtorName && !IsClassName && SS.isSet()) {\n // ...\n // C++ [temp.res]p3:\n // A qualified-id that refers to a type and in which the\n // nested-name-specifier depends on a template-parameter (14.6.2)\n // shall be prefixed by the keyword typename to indicate that the\n // qualified-id denotes a type, forming an\n // elaborated-type-specifier (7.1.5.3).\n if (!LookupCtx && isDependentScopeSpecifier(SS)) {\n // C++2a relaxes some of those restrictions in [temp.res]p5.\n if (AllowImplicitTypename == ImplicitTypenameContext::Yes) {\n // ...\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"]={ | ||
[ | [a]="no type named A in B", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="no type named %0 in %1", | ||
[ | [f]=t, | ||
[ | [h]="no type named (.*?) in (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template","Initial implementation of parsing, semantic analysis, and template"}, | [i]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template","Initial implementation of parsing, semantic analysis, and template"}, | ||
[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();"},{I,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;"}}, | [j]={{x,813,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n // ...\n if (!SS || (!SS->isSet() && !SS->isInvalid()))\n // ...\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();"},{I,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 // ...\n case LookupResult::NotFound: {\n // ...\n DiagID = Ctx ? diag::err_typename_nested_not_found : diag::err_unknown_typename;"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 195: | Line 194: | ||
}, | }, | ||
["err_typename_nested_not_found_enable_if"]={ | ["err_typename_nested_not_found_enable_if"]={ | ||
[ | [a]="no type named \'type\' in A; \'enable_if\' cannot be used to disable this declaration", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="no type named \'type\' in %0; \'enable_if\' cannot be used to disable this declaration", | ||
[ | [f]=t, | ||
[ | [h]="no type named \'type\' in (.*?); \'enable_if\' cannot be used to disable this declaration", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"6f8d2c6c9c34",1336540620,"A little tweak to the SFINAE condition reporting. Don\'t say:","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:","A little tweak to the SFINAE condition reporting. Don\'t say:"}, | ||
[j]={{Qb,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) {"},{I,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) {"},{I,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;"}} | [j]={{Qb,11263,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n // ...\n case Sema::TDK_SubstitutionFailure: {\n // ...\n if (PDiag && PDiag->second.getDiagID() == diag::err_typename_nested_not_found_enable_if) {"},{I,3941,"QualType Sema::CheckTemplateIdType(TemplateName Name, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n // ...\n if (TypeAliasTemplateDecl *AliasTemplate = dyn_cast<TypeAliasTemplateDecl>(Template)) {\n // ...\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) {"},{I,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 // ...\n case LookupResult::NotFound: {\n // ...\n if (Ctx && isEnableIf(QualifierLoc, II, CondRange, Cond)) {\n // ...\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"]={ | ||
[ | [a]="failed requirement \'A\'; \'enable_if\' cannot be used to disable this declaration", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="failed requirement \'%0\'; \'enable_if\' cannot be used to disable this declaration", | ||
[ | [f]=t, | ||
[ | [h]="failed requirement \'(.*?)\'; \'enable_if\' cannot be used to disable this declaration", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"00fa10b43f25",1499286014,"Customize the SFINAE diagnostics for enable_if to provide the failed condition.","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.","Customize the SFINAE diagnostics for enable_if to provide the failed condition."}, | ||
[j]={{Qb,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) {"},{I,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());"},{I,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();"}}, | [j]={{Qb,11273,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n // ...\n case Sema::TDK_SubstitutionFailure: {\n // ...\n if (PDiag && PDiag->second.getDiagID() == diag::err_typename_nested_not_found_requirement) {"},{I,3958,"QualType Sema::CheckTemplateIdType(TemplateName Name, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n // ...\n if (TypeAliasTemplateDecl *AliasTemplate = dyn_cast<TypeAliasTemplateDecl>(Template)) {\n // ...\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 // ...\n (*DeductionInfo)->addSFINAEDiagnostic(OldDiag.first, PDiag(diag::err_typename_nested_not_found_requirement) << FailedDescription << FailedCond->getSourceRange());"},{I,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 // ...\n case LookupResult::NotFound: {\n // ...\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 // ...\n Diag(FailedCond->getExprLoc(), diag::err_typename_nested_not_found_requirement) << FailedDescription << FailedCond->getSourceRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 222: | Line 221: | ||
}, | }, | ||
["err_typename_nested_not_type"]={ | ["err_typename_nested_not_type"]={ | ||
[ | [a]="typename specifier refers to non-type member A in B", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="typename specifier refers to non-type member %0 in %1", | ||
[ | [f]=t, | ||
[ | [h]="typename specifier refers to non\\-type member (.*?) in (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template","Initial implementation of parsing, semantic analysis, and template"}, | [i]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template","Initial implementation of parsing, semantic analysis, and template"}, | ||
[j]={{I,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;"},{I,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;"}}, | [j]={{I,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 // ...\n case LookupResult::Found:\n // ...\n DiagID = Ctx ? diag::err_typename_nested_not_type : diag::err_typename_not_type;"},{I,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 // ...\n case LookupResult::FoundOverloaded:\n DiagID = Ctx ? diag::err_typename_nested_not_type : diag::err_typename_not_type;"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 237: | Line 236: | ||
}, | }, | ||
["err_typename_not_type"]={ | ["err_typename_not_type"]={ | ||
[ | [a]="typename specifier refers to non-type A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="typename specifier refers to non-type %0", | ||
[ | [f]=t, | ||
[ | [h]="typename specifier refers to non\\-type (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","Improve static checks for sprintf and __builtin___sprintf_chk"}, | [i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","Improve static checks for sprintf and __builtin___sprintf_chk"}, | ||
[j]={{I,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;"},{I,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;"}}, | [j]={{I,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 // ...\n case LookupResult::Found:\n // ...\n DiagID = Ctx ? diag::err_typename_nested_not_type : diag::err_typename_not_type;"},{I,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 // ...\n case LookupResult::FoundOverloaded:\n DiagID = Ctx ? diag::err_typename_nested_not_type : diag::err_typename_not_type;"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 252: | Line 251: | ||
}, | }, | ||
["err_typename_refers_to_non_type_template"]={ | ["err_typename_refers_to_non_type_template"]={ | ||
[ | [a]="typename specifier refers to a non-type template", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="typename specifier refers to a non-type template", | ||
[ | [f]=t, | ||
[ | [h]="typename specifier refers to a non\\-type template", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"dce2b62b7006",1238545739,"Parsing, semantic analysis, and template instantiation for typename","Parsing, semantic analysis, and template instantiation for typename"}, | [i]={"dce2b62b7006",1238545739,"Parsing, semantic analysis, and template instantiation for typename","Parsing, semantic analysis, and template instantiation for typename"}, | ||
[j]={{Cb,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();"}}, | [j]={{Cb,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 // ...\n if (Tok.is(tok::kw_typename)) {\n // ...\n if (Tok.is(tok::identifier)) {\n // ...\n } else if (Tok.is(tok::annot_template_id)) {\n // ...\n if (!TemplateId->mightBeType()) {\n Diag(Tok, diag::err_typename_refers_to_non_type_template) << Tok.getAnnotationRange();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/CXX/drs/dr3xx.cpp"]={"clang/test/CXX/drs/dr3xx.cpp:30:17: error: typename specifier refers to a non-type template"} | ["clang/test/CXX/drs/dr3xx.cpp"]={"clang/test/CXX/drs/dr3xx.cpp:30:17: error: typename specifier refers to a non-type template"} | ||
Line 267: | Line 266: | ||
}, | }, | ||
["err_typename_refers_to_using_value_decl"]={ | ["err_typename_refers_to_using_value_decl"]={ | ||
[ | [a]="typename specifier refers to a dependent using declaration for a value A in B", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="typename specifier refers to a dependent using declaration for a value %0 in %1", | ||
[ | [f]=t, | ||
[ | [h]="typename specifier refers to a dependent using declaration for a value (.*?) in (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"aed2efbbb54f",1291853187,"A typename specifier can end up referring to a unresolved using","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","A typename specifier can end up referring to a unresolved using"}, | ||
[j]={{I,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;"}}, | [j]={{I,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 // ...\n case LookupResult::FoundUnresolvedValue: {\n // ...\n Diag(IILoc, diag::err_typename_refers_to_using_value_decl) << Name << Ctx << FullRange;"}}, | ||
[k]={ | [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>\'"} | ["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>\'"} | ||
Line 282: | Line 281: | ||
}, | }, | ||
["err_typename_requires_specqual"]={ | ["err_typename_requires_specqual"]={ | ||
[ | [a]="type name requires a specifier or qualifier", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="type name requires a specifier or qualifier", | ||
[ | [f]=t, | ||
[ | [h]="type name requires a specifier or qualifier", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{K,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);"}}, | [j]={{K,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 // ...\n if (isTypeSpecifier(DSC) && !DS.hasTypeSpecifier()) {\n // ...\n } else if (Specs == DeclSpec::PQ_None && !DS.hasAttributes()) {\n Diag(Tok, diag::err_typename_requires_specqual);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:117:14: error: type name requires a specifier or qualifier"} | ["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:117:14: error: type name requires a specifier or qualifier"} | ||
Line 297: | Line 296: | ||
}, | }, | ||
["err_ucn_control_character"]={ | ["err_ucn_control_character"]={ | ||
[ | [a]="universal character name refers to a control character", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="universal character name refers to a control character", | ||
[ | [f]=t, | ||
[ | [h]="universal character name refers to a control character", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the","Improve diagnostics for UCNs referring to control characters and members of the"}, | [i]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the","Improve diagnostics for UCNs referring to control characters and members of the"}, | ||
[j]={{db,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);"},{gb,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);"}}, | [j]={{db,3509,"uint32_t Lexer::tryReadUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n // ...\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);"},{gb,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 // ...\n // C2x and C++11 allow UCNs that refer to control characters\n // and basic source characters inside character and string literals\n if (UcnVal < 0xa0 &&\n // ...\n if (Diags) {\n // ...\n if (UcnVal >= 0x20 && UcnVal < 0x7f)\n // ...\n else\n Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, IsError ? diag::err_ucn_control_character : Features.CPlusPlus ? diag::warn_cxx98_compat_literal_ucn_control_character : diag::warn_c2x_compat_literal_ucn_control_character);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/ucn-cstring.c"]={"clang/test/Sema/ucn-cstring.c:14:19: error: universal character name refers to a control character"} | ["clang/test/Sema/ucn-cstring.c"]={"clang/test/Sema/ucn-cstring.c:14:19: error: universal character name refers to a control character"} | ||
Line 312: | Line 311: | ||
}, | }, | ||
["err_ucn_escape_basic_scs"]={ | ["err_ucn_escape_basic_scs"]={ | ||
[ | [a]="character \'A\' cannot be specified by a universal character name", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="character \'%0\' cannot be specified by a universal character name", | ||
[ | [f]=t, | ||
[ | [h]="character \'(.*?)\' cannot be specified by a universal character name", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the","Improve diagnostics for UCNs referring to control characters and members of the"}, | [i]={"2a70e65436c7",1331332071,"Improve diagnostics for UCNs referring to control characters and members of the","Improve diagnostics for UCNs referring to control characters and members of the"}, | ||
[j]={{db,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);"},{gb,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);"}}, | [j]={{db,3512,"uint32_t Lexer::tryReadUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n // ...\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 // ...\n else {\n // ...\n Diag(BufferPtr, diag::err_ucn_escape_basic_scs) << StringRef(&C, 1);"},{gb,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 // ...\n // C2x and C++11 allow UCNs that refer to control characters\n // and basic source characters inside character and string literals\n if (UcnVal < 0xa0 &&\n // ...\n if (Diags) {\n // ...\n if (UcnVal >= 0x20 && UcnVal < 0x7f)\n Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, IsError ? diag::err_ucn_escape_basic_scs : Features.CPlusPlus ? diag::warn_cxx98_compat_literal_ucn_escape_basic_scs : diag::warn_c2x_compat_literal_ucn_escape_basic_scs) << StringRef(&BasicSCSChar, 1);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 327: | Line 326: | ||
}, | }, | ||
["err_ucn_escape_incomplete"]={ | ["err_ucn_escape_incomplete"]={ | ||
[ | [a]="incomplete universal character name", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="incomplete universal character name", | ||
[ | [f]=t, | ||
[ | [h]="incomplete universal character name", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={"7b753d21b54d",1238456763,"Implement UCN support for C string literals (C99 6.4.3) and add some very basic tests. Chris Goller ...","Implement UCN support for C string literals (C99 6.4.3) and add some very basic tests. Chris Goller has graciously offered to write some test to help validate UCN support."}, | [i]={"7b753d21b54d",1238456763,"Implement UCN support for C string literals (C99 6.4.3) and add some very basic tests. Chris Goller ...","Implement UCN support for C string literals (C99 6.4.3) and add some very basic tests. Chris Goller has graciously offered to write some test to help validate UCN support."}, | ||
[j]={{gb,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);"},{gb,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);"}}, | [j]={{gb,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 // ...\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);"},{gb,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 // ...\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]={ | [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"} | ["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"} | ||
Line 342: | Line 341: | ||
}, | }, | ||
["err_ucn_escape_invalid"]={ | ["err_ucn_escape_invalid"]={ | ||
[ | [a]="invalid universal character", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="invalid universal character", | ||
[ | [f]=t, | ||
[ | [h]="invalid universal character", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={"7b753d21b54d",1238456763,"Implement UCN support for C string literals (C99 6.4.3) and add some very basic tests. Chris Goller ...","Implement UCN support for C string literals (C99 6.4.3) and add some very basic tests. Chris Goller has graciously offered to write some test to help validate UCN support."}, | [i]={"7b753d21b54d",1238456763,"Implement UCN support for C string literals (C99 6.4.3) and add some very basic tests. Chris Goller ...","Implement UCN support for C string literals (C99 6.4.3) and add some very basic tests. Chris Goller has graciously offered to write some test to help validate UCN support."}, | ||
[j]={{db,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);"},{gb,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);"}}, | [j]={{db,3525,"uint32_t Lexer::tryReadUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n // ...\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 // ...\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 // ...\n else\n Diag(BufferPtr, diag::err_ucn_escape_invalid);"},{gb,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 // ...\n // Check UCN constraints (C99 6.4.3p2) [C++11 lex.charset p2]\n if ((0xD800 <= UcnVal && UcnVal <= 0xDFFF) || // surrogate codepoints\n // ...\n if (Diags)\n Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, diag::err_ucn_escape_invalid);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 357: | Line 356: | ||
}, | }, | ||
["err_unable_to_make_temp"]={ | ["err_unable_to_make_temp"]={ | ||
[ | [a]="unable to make temporary file: A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unable to make temporary file: %0", | ||
[ | [f]=t, | ||
[ | [h]="unable to make temporary file\\: (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"3ef9c44747fb",1337201758,"Pulls diagnostics for temp file handling into the common diagnostic kinds.","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.","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 // ...\n if (CrashDirectory) {\n // ...\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 // ...\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 // ...\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 // ...\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"]={ | ||
[ | [a]="unable to rename temporary \'A\' to output file \'B\': \'C\'", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unable to rename temporary \'%0\' to output file \'%1\': \'%2\'", | ||
[ | [f]=t, | ||
[ | [h]="unable to rename temporary \'(.*?)\' to output file \'(.*?)\'\\: \'(.*?)\'", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"3ef9c44747fb",1337201758,"Pulls diagnostics for temp file handling into the common diagnostic kinds.","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.","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 // ...\n // Ignore errors that occur when trying to discard the temp file.\n for (OutputFile &OF : OutputFiles) {\n // ...\n getDiagnostics().Report(diag::err_unable_to_rename_temp) << OF.File->TmpName << OF.Filename << std::move(E);"}} | ||
}, | }, | ||
["err_unavailable"]={ | ["err_unavailable"]={ | ||
[ | [a]="A is unavailable", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%0 is unavailable", | ||
[ | [f]=t, | ||
[ | [h]="(.*?) is unavailable", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"1ddd6d2b6b80",1279744991,"Upgrade \"\'X\' is unavailable\" from a warning to an error. This matches GCC\'s behavior. Note that","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","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 // ...\n bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n // ...\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 // ...\n bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n // ...\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 // ...\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 // ...\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 // ...\n bool VisitCallExpr(CallExpr *E) {\n // ...\n if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CEE)) {\n if (FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(DRE->getDecl())) {\n // ...\n if (FD->getIdentifier() == NSMakeCollectableII) {\n // ...\n TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message,"},{"clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp",391,"class RetainReleaseDeallocRemover : public RecursiveASTVisitor<RetainReleaseDeallocRemover> {\n // ...\n void clearDiagnostics(SourceLocation loc) const { Pass.TA.clearDiagnostic(diag::err_arc_illegal_explicit_message, diag::err_unavailable, diag::err_unavailable_message, loc); }"},{Wc,844,"bool DiagnosticIDs::isUnrecoverable(unsigned DiagID) const {\n // ...\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 // ...\n case AR_Unavailable:\n diag = !ObjCPropertyAccess ? diag::err_unavailable : diag::err_property_method_unavailable;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 396: | Line 395: | ||
}, | }, | ||
["err_unavailable_in_arc"]={ | ["err_unavailable_in_arc"]={ | ||
[ | [a]="A is unavailable in ARC", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%0 is unavailable in ARC", | ||
[ | [f]=t, | ||
[ | [h]="(.*?) is unavailable in ARC", | ||
[ | [b]=r, | ||
[ | [g]="ARC Restrictions", | ||
[i]={"c6af8c606dae",1446008599,"Refine r251469 to give better (and more localizable) diagnostics","Refine r251469 to give better (and more localizable) diagnostics"}, | [i]={"c6af8c606dae",1446008599,"Refine r251469 to give better (and more localizable) diagnostics","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 // ...\n case AR_Unavailable:\n // ...\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]={ | [k]={ | ||
["clang/test/SemaObjC/arc-unavailable-system-function.m"]={"arc-unavailable-system-function.m:2:3: error: \'foo\' is unavailable in ARC"} | ["clang/test/SemaObjC/arc-unavailable-system-function.m"]={"arc-unavailable-system-function.m:2:3: error: \'foo\' is unavailable in ARC"} | ||
Line 411: | Line 410: | ||
}, | }, | ||
["err_unavailable_message"]={ | ["err_unavailable_message"]={ | ||
[ | [a]="A is unavailable: B", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%0 is unavailable: %1", | ||
[ | [f]=t, | ||
[ | [h]="(.*?) is unavailable\\: (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"c74073cd2045",1286406752,"Patch for adding message to unavailable attribute.","Patch for adding message to unavailable attribute."}, | [i]={"c74073cd2045",1286406752,"Patch for adding message to unavailable attribute.","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 // ...\n bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n // ...\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 // ...\n bool VisitObjCMessageExpr(ObjCMessageExpr *E) {\n // ...\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 // ...\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 // ...\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 // ...\n bool VisitCallExpr(CallExpr *E) {\n // ...\n if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CEE)) {\n if (FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(DRE->getDecl())) {\n // ...\n if (FD->getIdentifier() == NSMakeCollectableII) {\n // ...\n TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message,"},{"clang/lib/ARCMigrate/TransRetainReleaseDealloc.cpp",392,"class RetainReleaseDeallocRemover : public RecursiveASTVisitor<RetainReleaseDeallocRemover> {\n // ...\n void clearDiagnostics(SourceLocation loc) const { Pass.TA.clearDiagnostic(diag::err_arc_illegal_explicit_message, diag::err_unavailable, diag::err_unavailable_message, loc); }"},{Wc,845,"bool DiagnosticIDs::isUnrecoverable(unsigned DiagID) const {\n // ...\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 // ...\n case AR_Unavailable:\n // ...\n diag_message = diag::err_unavailable_message;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/attr-c2x.c"]={"clang/test/Sema/attr-c2x.c:27:3: error: \'foo2\' is unavailable: not available - replaced"} | ["clang/test/Sema/attr-c2x.c"]={"clang/test/Sema/attr-c2x.c:27:3: error: \'foo2\' is unavailable: not available - replaced"} | ||
Line 426: | Line 425: | ||
}, | }, | ||
["err_uncasted_call_of_unknown_any"]={ | ["err_uncasted_call_of_unknown_any"]={ | ||
[ | [a]="A has unknown return type; cast the call to its declared return type", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%0 has unknown return type; cast the call to its declared return type", | ||
[ | [f]=t, | ||
[ | [h]="(.*?) has unknown return type; cast the call to its declared return type", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"2d2e870745c2",1302505370, | [i]={"2d2e870745c2",1302505370,Xb,Xb}, | ||
[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;"}}, | [j]={{z,21484,"static ExprResult diagnoseUnknownAnyExpr(Sema &S, Expr *E) {\n // ...\n while (true) {\n // ...\n if (CallExpr *call = dyn_cast<CallExpr>(E)) {\n // ...\n diagID = diag::err_uncasted_call_of_unknown_any;"},{z,21488,"static ExprResult diagnoseUnknownAnyExpr(Sema &S, Expr *E) {\n // ...\n if (DeclRefExpr *ref = dyn_cast<DeclRefExpr>(E)) {\n // ...\n } else if (MemberExpr *mem = dyn_cast<MemberExpr>(E)) {\n // ...\n } else if (ObjCMessageExpr *msg = dyn_cast<ObjCMessageExpr>(E)) {\n diagID = diag::err_uncasted_call_of_unknown_any;"}}, | ||
[k]={ | [k]={ | ||
[ | [pc]={"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"]={ | ||
[ | [a]="no known method ...; cast the message send to the method\'s return type", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="no known method %select{%objcinstance1|%objcclass1}0; cast the message send to the method\'s return type", | ||
[ | [f]=t, | ||
[ | [h]="no known method (?:(.*?)|(.*?)); cast the message send to the method\'s return type", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"fa6f5d6ab8c3",1314824256,"Don\'t assert when diagnosing a missing cast of an unknown-anytype","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","Don\'t assert when diagnosing a missing cast of an unknown-anytype"}, | ||
[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();"}}, | [j]={{z,21494,"static ExprResult diagnoseUnknownAnyExpr(Sema &S, Expr *E) {\n // ...\n if (DeclRefExpr *ref = dyn_cast<DeclRefExpr>(E)) {\n // ...\n } else if (MemberExpr *mem = dyn_cast<MemberExpr>(E)) {\n // ...\n } else if (ObjCMessageExpr *msg = dyn_cast<ObjCMessageExpr>(E)) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 456: | Line 455: | ||
}, | }, | ||
["err_uncasted_use_of_unknown_any"]={ | ["err_uncasted_use_of_unknown_any"]={ | ||
[ | [a]="A has unknown type; cast it to its declared type to use it", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%0 has unknown type; cast it to its declared type to use it", | ||
[ | [f]=t, | ||
[ | [h]="(.*?) has unknown type; cast it to its declared type to use it", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"2d2e870745c2",1302505370, | [i]={"2d2e870745c2",1302505370,Xb,Xb}, | ||
[j]={{z,21469,"static ExprResult diagnoseUnknownAnyExpr(Sema &S, Expr *E) {\n unsigned diagID = diag::err_uncasted_use_of_unknown_any;"}}, | [j]={{z,21469,"static ExprResult diagnoseUnknownAnyExpr(Sema &S, Expr *E) {\n // ...\n unsigned diagID = diag::err_uncasted_use_of_unknown_any;"}}, | ||
[k]={ | [k]={ | ||
[ | [pc]={"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"]={ | ||
[ | [a]="declaration of A is missing in B class", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="declaration of %0 is missing in %1 class", | ||
[ | [f]=t, | ||
[ | [h]="declaration of (.*?) is missing in (.*?) class", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"890f4577b11a",1336838021,"Don\'t crash on boxed strings when +stringWithUTF8String: is missing.","Don\'t crash on boxed strings when +stringWithUTF8String: is missing."}, | [i]={"890f4577b11a",1336838021,"Don\'t crash on boxed strings when +stringWithUTF8String: is missing.","Don\'t crash on boxed strings when +stringWithUTF8String: is missing."}, | ||
[j]={{ | [j]={{lc,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 // ...\n S.Diag(Loc, diag::err_undeclared_boxing_method) << Sel << Class->getName();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 486: | Line 485: | ||
}, | }, | ||
["err_undeclared_destructor_name"]={ | ["err_undeclared_destructor_name"]={ | ||
[ | [a]="undeclared identifier A in destructor name", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="undeclared identifier %0 in destructor name", | ||
[ | [f]=t, | ||
[ | [h]="undeclared identifier (.*?) in destructor name", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={ | [i]={Yc,1576809732,Eb,Eb}, | ||
[j]={{ | [j]={{ab,438,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n // ...\n if (FoundDecls.empty()) {\n // ...\n Diag(NameLoc, diag::err_undeclared_destructor_name) << &II << MakeFixItHint();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 501: | Line 500: | ||
}, | }, | ||
["err_undeclared_label_use"]={ | ["err_undeclared_label_use"]={ | ||
[ | [a]="use of undeclared label A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="use of undeclared label %0", | ||
[ | [f]=t, | ||
[ | [h]="use of undeclared label (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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);"}}, | [j]={{x,2222,"static void CheckPoppedLabel(LabelDecl *L, Sema &S, Sema::DiagReceiverTy DiagReceiver) {\n // ...\n if (Diagnose)\n DiagReceiver(L->getLocation(), S.PDiag(diag::err_undeclared_label_use) << L);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Misc/explicit.cpp"]={"clang/test/Misc/explicit.cpp:5:16: error: use of undeclared label \'b\'"} | ["clang/test/Misc/explicit.cpp"]={"clang/test/Misc/explicit.cpp:5:16: error: use of undeclared label \'b\'"} | ||
Line 516: | Line 515: | ||
}, | }, | ||
["err_undeclared_objc_literal_class"]={ | ["err_undeclared_objc_literal_class"]={ | ||
[ | [a]="definition of class A must be available to use Objective-C ...", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="definition of class %0 must be available to use Objective-C %select{array literals|dictionary literals|numeric literals|boxed expressions|string literals}1", | ||
[ | [f]=t, | ||
[ | [h]="definition of class (.*?) must be available to use Objective\\-C (?:array literals|dictionary literals|numeric literals|boxed expressions|string literals)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"b7d8563973fe",1437714580,"Cleanup ObjCInterfaceDecl lookup for ObjC literals","Cleanup ObjCInterfaceDecl lookup for ObjC literals"}, | [i]={"b7d8563973fe",1437714580,"Cleanup ObjCInterfaceDecl lookup for ObjC literals","Cleanup ObjCInterfaceDecl lookup for ObjC literals"}, | ||
[j]={{ | [j]={{lc,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 // ...\n S.Diag(Loc, diag::err_undeclared_objc_literal_class) << II->getName() << LiteralKind;"},{lc,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 // ...\n } else if (!Decl->hasDefinition() && !S.getLangOpts().DebuggerObjCLiteral) {\n S.Diag(Loc, diag::err_undeclared_objc_literal_class) << Decl->getName() << LiteralKind;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 531: | Line 530: | ||
}, | }, | ||
["err_undeclared_protocol"]={ | ["err_undeclared_protocol"]={ | ||
[ | [a]="cannot find protocol declaration for A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot find protocol declaration for %0", | ||
[ | [f]=t, | ||
[ | [h]="cannot find protocol declaration for (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{rb,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 // ...\n if (!PDecl) {\n Diag(Pair.second, diag::err_undeclared_protocol) << Pair.first;"},{rb,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 // ...\n for (unsigned i = 0, n = identifiers.size(); i != n; ++i) {\n // ...\n Diag(identifierLocs[i], (lookupKind == LookupAnyName ? diag::err_objc_type_arg_missing : lookupKind == LookupObjCProtocolName ? diag::err_undeclared_protocol : diag::err_unknown_typename)) << identifiers[i];"},{lc,1393,"ExprResult Sema::ParseObjCProtocolExpression(IdentifierInfo *ProtocolId, SourceLocation AtLoc, SourceLocation ProtoLoc, SourceLocation LParenLoc, SourceLocation ProtoIdLoc, SourceLocation RParenLoc) {\n // ...\n if (!PDecl) {\n Diag(ProtoLoc, diag::err_undeclared_protocol) << ProtocolId;"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 546: | Line 545: | ||
}, | }, | ||
["err_undeclared_protocol_suggest"]={ | ["err_undeclared_protocol_suggest"]={ | ||
[ | [a]="cannot find protocol declaration for A; did you mean B?", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot find protocol declaration for %0; did you mean %1?", | ||
[ | [f]=t, | ||
[ | [h]="cannot find protocol declaration for (.*?); did you mean (.*?)\\?", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"35b0bac8c51a",1262541717, | [i]={"35b0bac8c51a",1262541717,Fc,Fc}, | ||
[j]={{ | [j]={{rb,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 // ...\n if (!PDecl) {\n // ...\n if ((PDecl = Corrected.getCorrectionDeclAs<ObjCProtocolDecl>()))\n diagnoseTypo(Corrected, PDiag(diag::err_undeclared_protocol_suggest) << Pair.first);"},{rb,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 // ...\n for (unsigned i = 0, n = identifiers.size(); i != n; ++i) {\n // ...\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]={ | [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\'?"} | ["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\'?"} | ||
Line 561: | Line 560: | ||
}, | }, | ||
["err_undeclared_use"]={ | ["err_undeclared_use"]={ | ||
[ | [a]="use of undeclared A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="use of undeclared %0", | ||
[ | [f]=t, | ||
[ | [h]="use of undeclared (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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;"},{I,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();"}}, | [j]={{"clang/lib/Sema/SemaAttr.cpp",805,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n // ...\n for (auto &Function : Functions) {\n // ...\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 // ...\n if (Name.getNameKind() == DeclarationName::CXXOperatorName || Name.getNameKind() == DeclarationName::CXXLiteralOperatorName || Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n diagnostic = diag::err_undeclared_use;"},{I,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 // ...\n if (!MemberOfUnknownSpecialization) {\n // ...\n if (!LookupTemplateName(R, S, SS, ObjectType.get(), EnteringContext, MOUS, RTK, nullptr, /*AllowTypoCorrection=*/false) && !R.isAmbiguous()) {\n if (LookupCtx)\n // ...\n else\n Diag(Name.getBeginLoc(), diag::err_undeclared_use) << DNI.getName() << SS.getRange();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:6:23: error: use of undeclared a"} | ["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:6:23: error: use of undeclared a"} | ||
Line 576: | Line 575: | ||
}, | }, | ||
["err_undeclared_use_of_module"]={ | ["err_undeclared_use_of_module"]={ | ||
[ | [a]="module A does not depend on a module exporting \'B\'", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="module %0 does not depend on a module exporting \'%1\'", | ||
[ | [f]=t, | ||
[ | [h]="module (.*?) does not depend on a module exporting \'(.*?)\'", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={"11152dd55f7a",1424304628,"Allow errors on use of a private module header to be disabled, to better support incremental transit...","Allow errors on use of a private module header to be disabled, to better support incremental transition to modules."}, | [i]={"11152dd55f7a",1424304628,"Allow errors on use of a private module header to be disabled, to better support incremental transit...","Allow errors on use of a private module header to be disabled, to better support incremental transition to modules."}, | ||
[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 // ...\n if (RequestingModule && LangOpts.ModulesStrictDeclUse) {\n Diags.Report(FilenameLoc, diag::err_undeclared_use_of_module) << RequestingModule->getTopLevelModule()->Name << Filename;"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 591: | Line 590: | ||
}, | }, | ||
["err_undeclared_use_of_module_indirect"]={ | ["err_undeclared_use_of_module_indirect"]={ | ||
[ | [a]="module A does not directly depend on a module exporting \'B\', which is part of indirectly-used module C", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="module %0 does not directly depend on a module exporting \'%1\', which is part of indirectly-used module %2", | ||
[ | [f]=t, | ||
[ | [h]="module (.*?) does not directly depend on a module exporting \'(.*?)\', which is part of indirectly\\-used module (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[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;"}}, | [j]={{"clang/lib/Lex/ModuleMap.cpp",528,"void ModuleMap::diagnoseHeaderInclusion(Module *RequestingModule, bool RequestingModuleIsModuleInterface, SourceLocation FilenameLoc, StringRef Filename, FileEntryRef File) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 606: | Line 605: | ||
}, | }, | ||
["err_undeclared_use_suggest"]={ | ["err_undeclared_use_suggest"]={ | ||
[ | [a]="use of undeclared A; did you mean B?", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="use of undeclared %0; did you mean %1?", | ||
[ | [f]=t, | ||
[ | [h]="use of undeclared (.*?); did you mean (.*?)\\?", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"598b08f8182e",1262236813,"Implement typo correction for id-expressions, e.g.,","Implement typo correction for id-expressions, e.g.,"}, | [i]={"598b08f8182e",1262236813,"Implement typo correction for id-expressions, e.g.,","Implement typo correction for id-expressions, e.g.,"}, | ||
[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;"}} | [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 // ...\n if (Name.getNameKind() == DeclarationName::CXXOperatorName || Name.getNameKind() == DeclarationName::CXXLiteralOperatorName || Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n // ...\n diagnostic_suggest = diag::err_undeclared_use_suggest;"}} | ||
}, | }, | ||
["err_undeclared_var_use"]={ | ["err_undeclared_var_use"]={ | ||
[ | [a]="use of undeclared identifier A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="use of undeclared identifier %0", | ||
[ | [f]=t, | ||
[ | [h]="use of undeclared identifier (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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;"},{ | [j]={{"clang/lib/Sema/SemaCUDA.cpp",56,"ExprResult Sema::ActOnCUDAExecConfigExpr(Scope *S, SourceLocation LLLLoc, MultiExprArg ExecConfig, SourceLocation GGGLoc) {\n // ...\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 // ...\n if (!Found.empty()) {\n // ...\n } else if (SS.isSet())\n // ...\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 // ...\n unsigned diagnostic = diag::err_undeclared_var_use;"},{fd,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 // ...\n if (IC) {\n // ...\n if (getLangOpts().ObjCDefaultSynthProperties && getLangOpts().ObjCRuntime.isNonFragile() && !IDecl->isObjCRequiresPropertyDefs()) {\n // ...\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;"},{ed,3053,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n // ...\n if (!Lookup.isSingleResult()) {\n // ...\n if (TypoCorrection Corrected = CorrectTypo(Id, LookupOrdinaryName, CurScope, nullptr, CCC, CTK_ErrorRecovery)) {\n // ...\n } else {\n Diag(Id.getLoc(), Lookup.empty() ? diag::err_undeclared_var_use : diag::err_omp_expected_var_arg) << Id.getName();"},{ed,23037,"NamedDecl *Sema::lookupOpenMPDeclareTargetName(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id) {\n // ...\n if (!Lookup.isSingleResult()) {\n // ...\n Diag(Id.getLoc(), diag::err_undeclared_var_use) << Id.getName();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaTemplate/nss-recovery.cpp"]={"clang/test/SemaTemplate/nss-recovery.cpp:5:12: error: use of undeclared identifier \'undef\'"} | ["clang/test/SemaTemplate/nss-recovery.cpp"]={"clang/test/SemaTemplate/nss-recovery.cpp:5:12: error: use of undeclared identifier \'undef\'"} | ||
Line 633: | Line 632: | ||
}, | }, | ||
["err_undeclared_var_use_suggest"]={ | ["err_undeclared_var_use_suggest"]={ | ||
[ | [a]="use of undeclared identifier A; did you mean B?", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="use of undeclared identifier %0; did you mean %1?", | ||
[ | [f]=t, | ||
[ | [h]="use of undeclared identifier (.*?); did you mean (.*?)\\?", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"598b08f8182e",1262236813,"Implement typo correction for id-expressions, e.g.,","Implement typo correction for id-expressions, e.g.,"}, | [i]={"598b08f8182e",1262236813,"Implement typo correction for id-expressions, e.g.,","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);"},{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;"},{ | [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 // ...\n if (Found.empty() && !ErrorRecoveryLookup && !getLangOpts().MSVCCompat) {\n // ...\n if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery, LookupCtx, EnteringContext)) {\n if (LookupCtx) {\n // ...\n } else\n diagnoseTypo(Corrected, PDiag(diag::err_undeclared_var_use_suggest) << Name);"},{x,1009,"Corrected:\n // ...\n case LookupResult::NotFound:\n // ...\n // Perform typo correction to determine if there is another name that is\n // close to this name.\n if (!SecondTry && CCC) {\n // ...\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 // ...\n unsigned diagnostic_suggest = diag::err_undeclared_var_use_suggest;"},{ed,3048,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n // ...\n if (!Lookup.isSingleResult()) {\n // ...\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());"},{ed,23031,"NamedDecl *Sema::lookupOpenMPDeclareTargetName(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id) {\n // ...\n if (!Lookup.isSingleResult()) {\n // ...\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]={ | [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\'?"} | ["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\'?"} | ||
Line 648: | Line 647: | ||
}, | }, | ||
["err_undef_interface"]={ | ["err_undef_interface"]={ | ||
[ | [a]="cannot find interface declaration for A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot find interface declaration for %0", | ||
[ | [f]=t, | ||
[ | [h]="cannot find interface declaration for (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{rb,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 // ...\n if (!IDecl || RequireCompleteType(ClassLoc, Context.getObjCInterfaceType(IDecl), diag::err_category_forward_interface, CategoryName == nullptr)) {\n // ...\n if (!IDecl)\n Diag(ClassLoc, diag::err_undef_interface) << ClassName;"},{rb,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 // ...\n /// Check that class of this category is already completely declared.\n if (!IDecl) {\n Diag(ClassLoc, diag::err_undef_interface) << ClassName;"},{rb,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 // ...\n } else if (RequireCompleteType(ClassLoc, Context.getObjCInterfaceType(IDecl), diag::err_undef_interface)) {"},{rb,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 // ...\n if (!Class) {\n Diag(DeclStart, diag::err_undef_interface) << ClassName;"}} | ||
}, | }, | ||
["err_undef_interface_suggest"]={ | ["err_undef_interface_suggest"]={ | ||
[ | [a]="cannot find interface declaration for A; did you mean B?", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot find interface declaration for %0; did you mean %1?", | ||
[ | [f]=t, | ||
[ | [h]="cannot find interface declaration for (.*?); did you mean (.*?)\\?", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"35b0bac8c51a",1262541717, | [i]={"35b0bac8c51a",1262541717,Fc,Fc}, | ||
[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);"}}, | [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 // ...\n if (!IDecl && DoTypoCorrection) {\n // ...\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]={ | [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\'?"} | ["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\'?"} | ||
Line 675: | Line 674: | ||
}, | }, | ||
["err_undef_superclass"]={ | ["err_undef_superclass"]={ | ||
[ | [a]="cannot find interface declaration for A, superclass of B", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot find interface declaration for %0, superclass of %1", | ||
[ | [f]=t, | ||
[ | [h]="cannot find interface declaration for (.*?), superclass of (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{rb,617,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n // ...\n if (declaresSameEntity(PrevDecl, IDecl)) {\n // ...\n } else {\n // ...\n if (!isa_and_nonnull<TypedefNameDecl>(PrevDecl)) {\n if (!SuperClassDecl)\n Diag(SuperLoc, diag::err_undef_superclass) << SuperName << ClassName << SourceRange(AtInterfaceLoc, ClassLoc);"},{rb,2034,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n // ...\n if (SuperClassname) {\n // ...\n if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n // ...\n } else {\n // ...\n if (!SDecl)\n Diag(SuperClassLoc, diag::err_undef_superclass) << SuperClassname << ClassName;"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 690: | Line 689: | ||
}, | }, | ||
["err_undef_superclass_suggest"]={ | ["err_undef_superclass_suggest"]={ | ||
[ | [a]="cannot find interface declaration for A, superclass of B; did you mean C?", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot find interface declaration for %0, superclass of %1; did you mean %2?", | ||
[ | [f]=t, | ||
[ | [h]="cannot find interface declaration for (.*?), superclass of (.*?); did you mean (.*?)\\?", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"35b0bac8c51a",1262541717, | [i]={"35b0bac8c51a",1262541717,Fc,Fc}, | ||
[j]={{ | [j]={{rb,563,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n // ...\n if (!PrevDecl) {\n // ...\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]={ | [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\'?"} | ["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\'?"} | ||
Line 705: | Line 704: | ||
}, | }, | ||
["err_undefined_inline_var"]={ | ["err_undefined_inline_var"]={ | ||
[ | [a]="inline variable A is not defined", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="inline variable %q0 is not defined", | ||
[ | [f]=t, | ||
[ | [h]="inline variable (.*?) is not defined", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a","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","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 // ...\n for (const auto &Undef : Undefined) {\n // ...\n if (S.isExternalWithNoLinkageType(VD)) {\n // ...\n } else if (!VD->isExternallyVisible()) {\n // ...\n } else if (auto *FD = dyn_cast<FunctionDecl>(VD)) {\n // ...\n } else {\n // ...\n S.Diag(VD->getLocation(), diag::err_undefined_inline_var) << VD;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 720: | Line 719: | ||
}, | }, | ||
["err_undefined_internal_type"]={ | ["err_undefined_internal_type"]={ | ||
[ | [a]="... 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", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%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", | ||
[ | [f]=t, | ||
[ | [h]="(?: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", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"405e2dbf3767",1505892120,"Implement C++ [basic.link]p8.","Implement C++ [basic.link]p8."}, | [i]={"405e2dbf3767",1505892120,"Implement C++ [basic.link]p8.","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 // ...\n for (const auto &Undef : Undefined) {\n // ...\n if (S.isExternalWithNoLinkageType(VD)) {\n // ...\n S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage()) ? diag::ext_undefined_internal_type : diag::err_undefined_internal_type) << isa<VarDecl>(VD) << VD;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 735: | Line 734: | ||
}, | }, | ||
["err_underlying_type_of_incomplete_enum"]={ | ["err_underlying_type_of_incomplete_enum"]={ | ||
[ | [a]="cannot determine underlying type of incomplete enumeration type A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot determine underlying type of incomplete enumeration type %0", | ||
[ | [f]=t, | ||
[ | [h]="cannot determine underlying type of incomplete enumeration type (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"29d0e6b60116",1402531305,"PR19966: don\'t crash/assert when __underlying_type is applied to an incomplete","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","PR19966: don\'t crash/assert when __underlying_type is applied to an incomplete"}, | ||
[j]={{U,9530,"QualType Sema::BuiltinEnumUnderlyingType(QualType BaseType, SourceLocation Loc) {\n if (BaseType->isIncompleteType(&FwdDecl)) {\n Diag(Loc, diag::err_underlying_type_of_incomplete_enum) << BaseType;"}}, | [j]={{U,9530,"QualType Sema::BuiltinEnumUnderlyingType(QualType BaseType, SourceLocation Loc) {\n // ...\n if (BaseType->isIncompleteType(&FwdDecl)) {\n Diag(Loc, diag::err_underlying_type_of_incomplete_enum) << BaseType;"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 750: | Line 749: | ||
}, | }, | ||
["err_unevaluated_string_invalid_escape_sequence"]={ | ["err_unevaluated_string_invalid_escape_sequence"]={ | ||
[ | [a]="invalid escape sequence \'A\' in an unevaluated string literal", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="invalid escape sequence \'%0\' in an unevaluated string literal", | ||
[ | [f]=t, | ||
[ | [h]="invalid escape sequence \'(.*?)\' in an unevaluated string literal", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{gb,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);"}}, | [j]={{gb,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 // ...\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]={ | [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"} | ["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"} | ||
Line 765: | Line 764: | ||
}, | }, | ||
["err_unevaluated_string_prefix"]={ | ["err_unevaluated_string_prefix"]={ | ||
[ | [a]="an unevaluated string literal cannot have an encoding prefix", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="an unevaluated string literal cannot have an encoding prefix", | ||
[ | [f]=t, | ||
[ | [h]="an unevaluated string literal cannot have an encoding prefix", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{gb,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);"}}, | [j]={{gb,1953,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n // ...\n /// (C99 5.1.1.2p1). The common case is only one string fragment.\n for (const Token &Tok : StringToks) {\n // ...\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 // ...\n Diags->Report(Tok.getLocation(), Features.CPlusPlus26 ? diag::err_unevaluated_string_prefix : diag::warn_unevaluated_string_prefix) << Prefix << Features.CPlusPlus << FixItHint::CreateRemoval(Range);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 780: | Line 779: | ||
}, | }, | ||
["err_unevaluated_string_udl"]={ | ["err_unevaluated_string_udl"]={ | ||
[ | [a]="an unevaluated string literal cannot be a user-defined literal", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="an unevaluated string literal cannot be a user-defined literal", | ||
[ | [f]=t, | ||
[ | [h]="an unevaluated string literal cannot be a user\\-defined literal", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{gb,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);"}} | [j]={{gb,2047,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n // ...\n for (unsigned i = 0, e = StringToks.size(); i != e; ++i) {\n // ...\n // Remove an optional ud-suffix.\n if (ThisTokEnd[-1] != \'\"\') {\n // ...\n if (UDSuffixBuf.empty()) {\n // ...\n } else {\n // ...\n if (UDSuffixBuf != UDSuffix || UnevaluatedStringHasUDL) {\n if (Diags) {\n // ...\n if (UnevaluatedStringHasUDL) {\n Diags->Report(TokLoc, diag::err_unevaluated_string_udl) << SourceRange(TokLoc, TokLoc);"}} | ||
}, | }, | ||
["err_unexpanded_parameter_pack"]={ | ["err_unexpanded_parameter_pack"]={ | ||
[ | [a]="... contains an unexpanded parameter pack", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%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", | ||
[ | [f]=t, | ||
[ | [h]="(?: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 (.*?), (.*?), \\.\\.\\.)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"506bd56484a5",1292280562,"Variadic templates: extend Type, NestedNameSpecifier, TemplateName,","Variadic templates: extend Type, NestedNameSpecifier, TemplateName,"}, | [i]={"506bd56484a5",1292280562,"Variadic templates: extend Type, NestedNameSpecifier, TemplateName,","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 // ...\n auto DB = Diag(Loc, diag::err_unexpanded_parameter_pack) << (int)UPPC << (int)Names.size();"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 807: | Line 806: | ||
}, | }, | ||
["err_unexpected_at"]={ | ["err_unexpected_at"]={ | ||
[ | [a]="unexpected \'@\' in program", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unexpected \'@\' in program", | ||
[ | [f]=t, | ||
[ | [h]="unexpected \'@\' in program", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{K,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);"},{ | [j]={{K,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 // ...\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 // ...\n if (!Tok.is(tok::at)) {\n // ...\n } else { // Handle @defs\n // ...\n if (!Tok.isObjCAtKeyword(tok::objc_defs)) {\n Diag(Tok, diag::err_unexpected_at);"},{jc,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 // ...\n default:\n Diag(AtLoc, diag::err_unexpected_at);"},{jc,2902,"ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {\n // ...\n default:\n if (Tok.getIdentifierInfo() == nullptr)\n return ExprError(Diag(AtLoc, diag::err_unexpected_at));"},{jc,2928,"ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {\n // ...\n default:\n // ...\n default: {\n // ...\n if (str) {\n // ...\n return ExprError(Diag(AtLoc, diag::err_unexpected_at) << FixItHint::CreateReplacement(kwLoc, str));"},{jc,2932,"ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {\n // ...\n default:\n // ...\n default: {\n // ...\n if (str) {\n // ...\n } else\n return ExprError(Diag(AtLoc, diag::err_unexpected_at));"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaObjC/invalid-code.m"]={"clang/test/SemaObjC/invalid-code.m:6:13: error: unexpected \'@\' in program"} | ["clang/test/SemaObjC/invalid-code.m"]={"clang/test/SemaObjC/invalid-code.m:6:13: error: unexpected \'@\' in program"} | ||
Line 822: | Line 821: | ||
}, | }, | ||
["err_unexpected_colon_in_nested_name_spec"]={ | ["err_unexpected_colon_in_nested_name_spec"]={ | ||
[ | [a]="unexpected \':\' in nested name specifier; did you mean \'::\'?", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unexpected \':\' in nested name specifier; did you mean \'::\'?", | ||
[ | [f]=t, | ||
[ | [h]="unexpected \'\\:\' in nested name specifier; did you mean \'\\:\\:\'\\?", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"6a7ffbed8ab4",1397407923,"Improve error recovery around colon.","Improve error recovery around colon."}, | [i]={"6a7ffbed8ab4",1397407923,"Improve error recovery around colon.","Improve error recovery around colon."}, | ||
[j]={{ | [j]={{Ab,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 // ...\n while (true) {\n // ...\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 // ...\n Diag(Next, diag::err_unexpected_colon_in_nested_name_spec) << FixItHint::CreateReplacement(Next.getLocation(), \"::\");"}}, | ||
[k]={ | [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 \'::\'?"} | ["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 \'::\'?"} | ||
Line 837: | Line 836: | ||
}, | }, | ||
["err_unexpected_friend"]={ | ["err_unexpected_friend"]={ | ||
[ | [a]="friends can only be classes or functions", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="friends can only be classes or functions", | ||
[ | [f]=t, | ||
[ | [h]="friends can only be classes or functions", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"07e91c04ba33",1249524943,"First pass at friend semantics.","First pass at friend semantics."}, | [i]={"07e91c04ba33",1249524943,"First pass at friend semantics.","First pass at friend semantics."}, | ||
[j]={{B,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);"}}, | [j]={{B,17499,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 852: | Line 851: | ||
}, | }, | ||
["err_unexpected_interface"]={ | ["err_unexpected_interface"]={ | ||
[ | [a]="unexpected interface name A: expected expression", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unexpected interface name %0: expected expression", | ||
[ | [f]=t, | ||
[ | [h]="unexpected interface name (.*?)\\: expected expression", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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();"}}, | [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 // ...\n if (isa<ObjCInterfaceDecl>(D)) {\n S.Diag(Loc, diag::err_unexpected_interface) << D->getDeclName();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 867: | Line 866: | ||
}, | }, | ||
["err_unexpected_module_decl"]={ | ["err_unexpected_module_decl"]={ | ||
[ | [a]="module declaration can only appear at the top level", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="module declaration can only appear at the top level", | ||
[ | [f]=t, | ||
[ | [h]="module declaration can only appear at the top level", | ||
[ | [b]=r, | ||
[ | [g]=bd, | ||
[i]={"bbcc9f0462c1",1472170478,"C++ Modules TS: add frontend support for building pcm files from module","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","C++ Modules TS: add frontend support for building pcm files from module"}, | ||
[j]={{Cb,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);"}} | [j]={{Cb,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 // ...\n case tok::kw_module:\n Diag(Tok, diag::err_unexpected_module_decl);"}} | ||
}, | }, | ||
["err_unexpected_namespace"]={ | ["err_unexpected_namespace"]={ | ||
[ | [a]="unexpected namespace name A: expected expression", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unexpected namespace name %0: expected expression", | ||
[ | [f]=t, | ||
[ | [h]="unexpected namespace name (.*?)\\: expected expression", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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();"}}, | [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 // ...\n if (isa<NamespaceDecl>(D)) {\n S.Diag(Loc, diag::err_unexpected_namespace) << D->getDeclName();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/attr-musttail.cpp"]={"clang/test/SemaCXX/attr-musttail.cpp:268:30: error: unexpected namespace name \'ns\': expected expression"} | ["clang/test/SemaCXX/attr-musttail.cpp"]={"clang/test/SemaCXX/attr-musttail.cpp:268:30: error: unexpected namespace name \'ns\': expected expression"} | ||
Line 894: | Line 893: | ||
}, | }, | ||
["err_unexpected_namespace_attributes_alias"]={ | ["err_unexpected_namespace_attributes_alias"]={ | ||
[ | [a]="attributes cannot be specified on namespace alias", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="attributes cannot be specified on namespace alias", | ||
[ | [f]=t, | ||
[ | [h]="attributes cannot be specified on namespace alias", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"6b6bba4a2087",1245268140,"Diagnose the use of attributes on namespace aliases, from Anis Ahmad","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","Diagnose the use of attributes on namespace aliases, from Anis Ahmad"}, | ||
[j]={{O,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);"}}, | [j]={{O,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 // ...\n if (Tok.is(tok::equal)) {\n // ...\n if (attrLoc.isValid())\n Diag(attrLoc, diag::err_unexpected_namespace_attributes_alias);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Parser/cxx1z-attributes.cpp"]={"clang/test/Parser/cxx1z-attributes.cpp:5:11: error: attributes cannot be specified on namespace alias"} | ["clang/test/Parser/cxx1z-attributes.cpp"]={"clang/test/Parser/cxx1z-attributes.cpp:5:11: error: attributes cannot be specified on namespace alias"} | ||
Line 909: | Line 908: | ||
}, | }, | ||
["err_unexpected_nested_namespace_attribute"]={ | ["err_unexpected_nested_namespace_attribute"]={ | ||
[ | [a]="attributes cannot be specified on a nested namespace definition", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="attributes cannot be specified on a nested namespace definition", | ||
[ | [f]=t, | ||
[ | [h]="attributes cannot be specified on a nested namespace definition", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"c0ae7dfe75e5",1415466435,"Updated the wording for a diagnostic to be more grammatically correct, and use a %select. Also ensur...","Updated the wording for a diagnostic to be more grammatically correct, and use a %select. Also ensure that nested namespace definitions are diagnosed properly. Both changes are motivated by post-commit feedback from r221580."}, | [i]={"c0ae7dfe75e5",1415466435,"Updated the wording for a diagnostic to be more grammatically correct, and use a %select. Also ensur...","Updated the wording for a diagnostic to be more grammatically correct, and use a %select. Also ensure that nested namespace definitions are diagnosed properly. Both changes are motivated by post-commit feedback from r221580."}, | ||
[j]={{O,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);"}}, | [j]={{O,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 // ...\n // A nested namespace definition cannot have attributes.\n if (!ExtraNSs.empty() && attrLoc.isValid())\n Diag(attrLoc, diag::err_unexpected_nested_namespace_attribute);"}}, | ||
[k]={ | [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"} | ["clang/test/Parser/cxx1z-attributes.cpp"]={"clang/test/Parser/cxx1z-attributes.cpp:7:11: error: attributes cannot be specified on a nested namespace definition"} | ||
Line 924: | Line 923: | ||
}, | }, | ||
["err_unexpected_protocol_qualifier"]={ | ["err_unexpected_protocol_qualifier"]={ | ||
[ | [a]="@implementation declaration cannot be protocol qualified", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="@implementation declaration cannot be protocol qualified", | ||
[ | [f]=t, | ||
[ | [h]="@implementation declaration cannot be protocol qualified", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"46ed4d978e1c",1366845827,"Objective-C parsing [qoi]: Recover gracefully with good diagnostic","Objective-C parsing [qoi]: Recover gracefully with good diagnostic"}, | [i]={"46ed4d978e1c",1366845827,"Objective-C parsing [qoi]: Recover gracefully with good diagnostic","Objective-C parsing [qoi]: Recover gracefully with good diagnostic"}, | ||
[j]={{ | [j]={{jc,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 // ...\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 // ...\n if (parseObjCTypeParamListOrProtocolRefs(typeParamScope, lAngleLoc, protocolIdents, rAngleLoc)) {\n // ...\n } else if (lAngleLoc.isValid()) {\n Diag(lAngleLoc, diag::err_unexpected_protocol_qualifier) << FixItHint::CreateRemoval(SourceRange(lAngleLoc, rAngleLoc));"},{jc,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 // ...\n if (Tok.is(tok::l_paren)) {\n // ...\n if (Tok.is(tok::less)) { // we have illegal \'<\' try to recover\n Diag(Tok, diag::err_unexpected_protocol_qualifier);"},{jc,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 // ...\n if (Tok.is(tok::l_paren)) {\n // ...\n } else {\n // ...\n if (Tok.is(tok::l_brace)) // we have ivars\n // ...\n else if (Tok.is(tok::less)) { // we have illegal \'<\' try to recover\n Diag(Tok, diag::err_unexpected_protocol_qualifier);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaObjC/parameterized_classes.m"]={"clang/test/SemaObjC/parameterized_classes.m:168:20: error: @implementation declaration cannot be protocol qualified"} | ["clang/test/SemaObjC/parameterized_classes.m"]={"clang/test/SemaObjC/parameterized_classes.m:168:20: error: @implementation declaration cannot be protocol qualified"} | ||
Line 939: | Line 938: | ||
}, | }, | ||
["err_unexpected_scope_on_base_decltype"]={ | ["err_unexpected_scope_on_base_decltype"]={ | ||
[ | [a]="unexpected namespace scope prior to decltype", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unexpected namespace scope prior to decltype", | ||
[ | [f]=t, | ||
[ | [h]="unexpected namespace scope prior to decltype", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"afa155fb8879",1319566678,"Fix erroneous name-specifiers prior to decltypes better/correctly as per Doug\'s feedback.","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.","Fix erroneous name-specifiers prior to decltypes better/correctly as per Doug\'s feedback."}, | ||
[j]={{O,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());"}}, | [j]={{O,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 // ...\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]={ | [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"} | ["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"} | ||
Line 954: | Line 953: | ||
}, | }, | ||
["err_unexpected_semi"]={ | ["err_unexpected_semi"]={ | ||
[ | [a]="unexpected \';\' before A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unexpected \';\' before %0", | ||
[ | [f]=t, | ||
[ | [h]="unexpected \';\' before (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"1d3b58e31796",1431466595,"Add a new error for unexpected semi-colon before closing delimiter.","Add a new error for unexpected semi-colon before closing delimiter."}, | [i]={"1d3b58e31796",1431466595,"Add a new error for unexpected semi-colon before closing delimiter.","Add a new error for unexpected semi-colon before closing delimiter."}, | ||
[k]={ | [k]={ | ||
Line 968: | Line 967: | ||
}, | }, | ||
["err_unexpected_template_after_using"]={ | ["err_unexpected_template_after_using"]={ | ||
[ | [a]="\'template\' keyword not permitted after \'using\' keyword", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'template\' keyword not permitted after \'using\' keyword", | ||
[ | [f]=t, | ||
[ | [h]="\'template\' keyword not permitted after \'using\' keyword", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"2efd30571bcc",1556753629,"Consume unexpected \"template\" keywords after \"using\"","Consume unexpected \"template\" keywords after \"using\""}, | [i]={"2efd30571bcc",1556753629,"Consume unexpected \"template\" keywords after \"using\"","Consume unexpected \"template\" keywords after \"using\""}, | ||
[j]={{O,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);"},{O,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);"}}, | [j]={{O,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 // ...\n // Consume unexpected \'template\' keywords.\n while (Tok.is(tok::kw_template)) {\n // ...\n Diag(TemplateLoc, diag::err_unexpected_template_after_using) << FixItHint::CreateRemoval(TemplateLoc);"},{O,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 // ...\n if (Tok.is(tok::kw_using)) {\n // ...\n // Consume unexpected \'template\' keywords.\n while (Tok.is(tok::kw_template)) {\n // ...\n Diag(TemplateLoc, diag::err_unexpected_template_after_using) << FixItHint::CreateRemoval(TemplateLoc);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 983: | Line 982: | ||
}, | }, | ||
["err_unexpected_template_in_destructor_name"]={ | ["err_unexpected_template_in_destructor_name"]={ | ||
[ | [a]="\'template\' keyword not permitted in destructor name", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'template\' keyword not permitted in destructor name", | ||
[ | [f]=t, | ||
[ | [h]="\'template\' keyword not permitted in destructor name", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator.","[OPENMP50]Add initial support for OpenMP 5.0 iterator."}, | [i]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator.","[OPENMP50]Add initial support for OpenMP 5.0 iterator."}, | ||
[j]={{ | [j]={{Ab,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 // ...\n if (getLangOpts().CPlusPlus && (AllowDestructorName || SS.isSet()) && Tok.is(tok::tilde)) {\n // ...\n if (TemplateSpecified) {\n // ...\n Diag(*TemplateKWLoc, diag::err_unexpected_template_in_destructor_name) << Tok.getLocation();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 998: | Line 997: | ||
}, | }, | ||
["err_unexpected_template_in_unqualified_id"]={ | ["err_unexpected_template_in_unqualified_id"]={ | ||
[ | [a]="\'template\' keyword not permitted here", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'template\' keyword not permitted here", | ||
[ | [f]=t, | ||
[ | [h]="\'template\' keyword not permitted here", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"c08b693e309b",1524794413,"Parse A::template B as an identifier rather than as a template-id with no","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","Parse A::template B as an identifier rather than as a template-id with no"}, | ||
[j]={{ | [j]={{Ab,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 // ...\n if (Tok.is(tok::kw_template)) {\n if (TemplateKWLoc && (ObjectType || SS.isSet())) {\n // ...\n } else {\n // ...\n Diag(TemplateLoc, diag::err_unexpected_template_in_unqualified_id) << FixItHint::CreateRemoval(TemplateLoc);"},{Ab,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 // ...\n // unqualified-id:\n // template-id (already parsed and annotated)\n if (Tok.is(tok::annot_template_id)) {\n // ...\n if (TemplateLoc.isValid()) {\n if (TemplateKWLoc && (ObjectType || SS.isSet()))\n // ...\n else\n Diag(TemplateLoc, diag::err_unexpected_template_in_unqualified_id) << FixItHint::CreateRemoval(TemplateLoc);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,013: | Line 1,012: | ||
}, | }, | ||
["err_unexpected_token_in_nested_name_spec"]={ | ["err_unexpected_token_in_nested_name_spec"]={ | ||
[ | [a]="\'A\' cannot be a part of nested name specifier; did you mean \':\'?", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'%0\' cannot be a part of nested name specifier; did you mean \':\'?", | ||
[ | [f]=t, | ||
[ | [h]="\'(.*?)\' cannot be a part of nested name specifier; did you mean \'\\:\'\\?", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"6a7ffbed8ab4",1397407923,"Improve error recovery around colon.","Improve error recovery around colon."}, | [i]={"6a7ffbed8ab4",1397407923,"Improve error recovery around colon.","Improve error recovery around colon."}, | ||
[j]={{ | [j]={{Ab,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 // ...\n while (true) {\n // ...\n if (Next.is(tok::coloncolon)) {\n // ...\n if (ColonIsSacred) {\n // ...\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]={ | [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 \':\'?"} | ["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 \':\'?"} | ||
Line 1,028: | Line 1,027: | ||
}, | }, | ||
["err_unexpected_typedef"]={ | ["err_unexpected_typedef"]={ | ||
[ | [a]="unexpected type name A: expected expression", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unexpected type name %0: expected expression", | ||
[ | [f]=t, | ||
[ | [h]="unexpected type name (.*?)\\: expected expression", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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();"}}, | [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 // ...\n if (isa<TypedefNameDecl>(D)) {\n S.Diag(Loc, diag::err_unexpected_typedef) << D->getDeclName();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,043: | Line 1,042: | ||
}, | }, | ||
["err_unexpected_typedef_ident"]={ | ["err_unexpected_typedef_ident"]={ | ||
[ | [a]="unexpected type name A: expected identifier", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unexpected type name %0: expected identifier", | ||
[ | [f]=t, | ||
[ | [h]="unexpected type name (.*?)\\: expected identifier", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{K,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;"}}, | [j]={{K,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 // ...\n do {\n // ...\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]={ | [k]={ | ||
[ | [ic]={"clang/test/Parser/declarators.c:31:12: error: unexpected type name \'atype\': expected identifier"} | ||
} | } | ||
}, | }, | ||
["err_unexpected_unqualified_id"]={ | ["err_unexpected_unqualified_id"]={ | ||
[ | [a]="type-id cannot have a name", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="type-id cannot have a name", | ||
[ | [f]=t, | ||
[ | [h]="type\\-id cannot have a name", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"9ce302ed9c29",1373519421,"PR5066: If a declarator cannot have an identifier, and cannot possibly be","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","PR5066: If a declarator cannot have an identifier, and cannot possibly be"}, | ||
[j]={{K,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());"}}, | [j]={{K,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 // ...\n if (getLangOpts().CPlusPlus && D.mayHaveIdentifier()) {\n // ...\n } else if (Tok.is(tok::identifier) && D.mayHaveIdentifier()) {\n // ...\n } else if (Tok.is(tok::identifier) && !D.mayHaveIdentifier()) {\n // ...\n if (DiagnoseIdentifier) {\n Diag(Tok.getLocation(), diag::err_unexpected_unqualified_id) << FixItHint::CreateRemoval(Tok.getLocation());"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/block-args.c"]={"clang/test/Sema/block-args.c:40:23: error: type-id cannot have a name"} | ["clang/test/Sema/block-args.c"]={"clang/test/Sema/block-args.c:40:23: error: type-id cannot have a name"} | ||
Line 1,073: | Line 1,072: | ||
}, | }, | ||
["err_unimplemented_conversion_with_fixed_point_type"]={ | ["err_unimplemented_conversion_with_fixed_point_type"]={ | ||
[ | [a]="conversion between fixed point and A is not yet supported", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="conversion between fixed point and %0 is not yet supported", | ||
[ | [f]=t, | ||
[ | [h]="conversion between fixed point and (.*?) is not yet supported", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"99bda375a14e",1539619622,"[Fixed Point Arithmetic] FixedPointCast","[Fixed Point Arithmetic] FixedPointCast"}, | [i]={"99bda375a14e",1539619622,"[Fixed Point Arithmetic] FixedPointCast","[Fixed Point Arithmetic] FixedPointCast"}, | ||
[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;"}}, | [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 // ...\n case Type::STK_FixedPoint:\n // ...\n case Type::STK_IntegralComplex:\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 // ...\n case Type::STK_FloatingComplex:\n // ...\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 // ...\n case Type::STK_IntegralComplex:\n // ...\n case Type::STK_FixedPoint:\n Diag(Src.get()->getExprLoc(), diag::err_unimplemented_conversion_with_fixed_point_type) << SrcTy;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,088: | Line 1,087: | ||
}, | }, | ||
["err_uninitialized_member_for_assign"]={ | ["err_uninitialized_member_for_assign"]={ | ||
[ | [a]="cannot define the implicit copy assignment operator for A, because non-static ... member B cannot use copy assignment operator", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot define the implicit copy assignment operator for %0, because non-static %select{reference|const}1 member %2 cannot use copy assignment operator", | ||
[ | [f]=t, | ||
[ | [h]="cannot define the implicit copy assignment operator for (.*?), because non\\-static (?:reference|const) member (.*?) cannot use copy assignment operator", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"24a175b37c87",1246060156,"Patch to mark destructors when they are used.","Patch to mark destructors when they are used."}, | [i]={"24a175b37c87",1246060156,"Patch to mark destructors when they are used.","Patch to mark destructors when they are used."}, | ||
[j]={{B,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();"},{B,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();"},{B,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();"},{B,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();"}}, | [j]={{B,14859,"void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation, CXXMethodDecl *CopyAssignOperator) {\n // ...\n // Assign non-static members.\n for (auto *Field : ClassDecl->fields()) {\n // ...\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();"},{B,14869,"void Sema::DefineImplicitCopyAssignment(SourceLocation CurrentLocation, CXXMethodDecl *CopyAssignOperator) {\n // ...\n // Assign non-static members.\n for (auto *Field : ClassDecl->fields()) {\n // ...\n if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {\n Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign) << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();"},{B,15234,"void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation, CXXMethodDecl *MoveAssignOperator) {\n // ...\n // Assign non-static members.\n for (auto *Field : ClassDecl->fields()) {\n // ...\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();"},{B,15244,"void Sema::DefineImplicitMoveAssignment(SourceLocation CurrentLocation, CXXMethodDecl *MoveAssignOperator) {\n // ...\n // Assign non-static members.\n for (auto *Field : ClassDecl->fields()) {\n // ...\n if (!BaseType->getAs<RecordType>() && BaseType.isConstQualified()) {\n Diag(ClassDecl->getLocation(), diag::err_uninitialized_member_for_assign) << Context.getTagDeclType(ClassDecl) << 1 << Field->getDeclName();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,103: | Line 1,102: | ||
}, | }, | ||
["err_uninitialized_member_in_ctor"]={ | ["err_uninitialized_member_in_ctor"]={ | ||
[ | [a]="... must explicitly initialize the ... member A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%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", | ||
[ | [f]=t, | ||
[ | [h]="(?:constructor for (.*?)|implicit default constructor for (.*?)|cannot use constructor inherited from (.*?)\\:) must explicitly initialize the (?:reference|const) member (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several","Rework base and member initialization in constructors, with several"}, | [i]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several","Rework base and member initialization in constructors, with several"}, | ||
[j]={{B,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();"},{B,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();"},{W,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();"}}, | [j]={{B,5048,"static bool BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor, ImplicitInitializerKind ImplicitInitKind, FieldDecl *Field, IndirectFieldDecl *Indirect, CXXCtorInitializer *&CXXMemberInit) {\n // ...\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();"},{B,5058,"static bool BuildImplicitMemberInitializer(Sema &SemaRef, CXXConstructorDecl *Constructor, ImplicitInitializerKind ImplicitInitKind, FieldDecl *Field, IndirectFieldDecl *Indirect, CXXCtorInitializer *&CXXMemberInit) {\n // ...\n if (!Field->getParent()->isUnion()) {\n // ...\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();"},{W,9956,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_DefaultInitOfConst:\n if (Entity.getKind() == InitializedEntity::EK_Member && isa<CXXConstructorDecl>(S.CurContext)) {\n // ...\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]={ | [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\'"} | ["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\'"} | ||
Line 1,118: | Line 1,117: | ||
}, | }, | ||
["err_union_as_base_class"]={ | ["err_union_as_base_class"]={ | ||
[ | [a]="unions cannot be base classes", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unions cannot be base classes", | ||
[ | [f]=t, | ||
[ | [h]="unions cannot be base classes", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[j]={{B,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;"}}, | [j]={{B,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 // ...\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]={ | [k]={ | ||
["clang/test/SemaCXX/inherit.cpp"]={"clang/test/SemaCXX/inherit.cpp:25:18: error: unions cannot be base classes"} | ["clang/test/SemaCXX/inherit.cpp"]={"clang/test/SemaCXX/inherit.cpp:25:18: error: unions cannot be base classes"} | ||
Line 1,133: | Line 1,132: | ||
}, | }, | ||
["err_union_member_of_reference_type"]={ | ["err_union_member_of_reference_type"]={ | ||
[ | [a]="union member A has reference type B", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="union member %0 has reference type %1", | ||
[ | [f]=t, | ||
[ | [h]="union member (.*?) has reference type (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"2ceb347e8bce",1289157235,"A union cannot contain static data members or data members of reference type.","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.","A union cannot contain static data members or data members of reference type."}, | ||
[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;"}}, | [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 // ...\n if (!InvalidDecl && getLangOpts().CPlusPlus) {\n if (Record->isUnion()) {\n // ...\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]={ | [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 &\'"} | ["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 &\'"} | ||
Line 1,148: | Line 1,147: | ||
}, | }, | ||
["err_unknown_analyzer_checker_or_package"]={ | ["err_unknown_analyzer_checker_or_package"]={ | ||
[ | [a]="no analyzer checkers or packages are associated with \'A\'", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="no analyzer checkers or packages are associated with \'%0\'", | ||
[ | [f]=t, | ||
[ | [h]="no analyzer checkers or packages are associated with \'(.*?)\'", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"a079a4270851",1565920394,"[analyzer] Analysis: Silence checkers","[analyzer] Analysis: Silence checkers"}, | [i]={"a079a4270851",1565920394,"[analyzer] Analysis: Silence checkers","[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 // ...\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 // ...\n for (const StringRef &CheckerOrPackage : CheckersAndPackages) {\n if (Diags) {\n // ...\n if (!IsValidName)\n Diags->Report(diag::err_unknown_analyzer_checker_or_package) << CheckerOrPackage;"},{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",178,"#endif\n // ...\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 // ...\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 // ...\n Diags.Report(diag::err_unknown_analyzer_checker_or_package) << SuppliedCheckerOrPackage;"}} | ||
}, | }, | ||
["err_unknown_any_addrof"]={ | ["err_unknown_any_addrof"]={ | ||
[ | [a]="the address of a declaration with unknown type can only be cast to a pointer type", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="the address of a declaration with unknown type can only be cast to a pointer type", | ||
[ | [f]=t, | ||
[ | [h]="the address of a declaration with unknown type can only be cast to a pointer type", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"2979fe01da2c",1302568968, | [i]={"2979fe01da2c",1302568968,Uc,Uc}, | ||
[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();"}} | [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 // ...\n ExprResult VisitUnaryAddrOf(UnaryOperator *E) {\n // ...\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"]={ | ||
[ | [a]="address-of operator cannot be applied to a call to a function with unknown return type", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="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]=r, | ||
[ | [g]=n, | ||
[i]={"f7d563c76c40",1479514383,"[Sema] Don\'t allow applying address-of operator to a call to a function","[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","[Sema] Don\'t allow applying address-of operator to a call to a function"}, | ||
[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();"}}, | [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 // ...\n ExprResult VisitUnaryAddrOf(UnaryOperator *E) {\n // ...\n if (isa<CallExpr>(E->getSubExpr())) {\n S.Diag(E->getOperatorLoc(), diag::err_unknown_any_addrof_call) << E->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
[ | [pc]={"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"]={ | ||
[ | [a]="function A with unknown type must be given a function type", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="function %0 with unknown type must be given a function type", | ||
[ | [f]=t, | ||
[ | [h]="function (.*?) with unknown type must be given a function type", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"9a877fef910f",1312949543,"Change an assert into a check. I\'m pretty sure there was a point","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","Change an assert into a check. I\'m pretty sure there was a point"}, | ||
[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();"}}, | [j]={{z,21393,"ExprResult RebuildUnknownAnyExpr::resolveDecl(Expr *E, ValueDecl *VD) {\n // ...\n // - functions\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(VD)) {\n // ...\n if (!Type->isFunctionType()) {\n S.Diag(E->getExprLoc(), diag::err_unknown_any_function) << VD << E->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
[ | [pc]={"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"]={ | ||
[ | [a]="variable A with unknown type cannot be given a function type", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="variable %0 with unknown type cannot be given a function type", | ||
[ | [f]=t, | ||
[ | [h]="variable (.*?) with unknown type cannot be given a function type", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"2979fe01da2c",1302568968, | [i]={"2979fe01da2c",1302568968,Uc,Uc}, | ||
[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();"}}, | [j]={{z,21400,"ExprResult RebuildUnknownAnyExpr::resolveDecl(Expr *E, ValueDecl *VD) {\n // ...\n // - functions\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(VD)) {\n // ...\n } else if (isa<VarDecl>(VD)) {\n if (const ReferenceType *RefTy = Type->getAs<ReferenceType>()) {\n // ...\n } else if (Type->isFunctionType()) {\n S.Diag(E->getExprLoc(), diag::err_unknown_any_var_function_type) << VD << E->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
[ | [pc]={"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"]={ | ||
[ | [a]="unknown HLSL semantic A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unknown HLSL semantic %0", | ||
[ | [f]=t, | ||
[ | [h]="unknown HLSL semantic (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"1fdf952deeb9",1648668015,"[HLSL] Add Semantic syntax, and SV_GroupIndex","[HLSL] Add Semantic syntax, and SV_GroupIndex"}, | [i]={"1fdf952deeb9",1648668015,"[HLSL] Add Semantic syntax, and SV_GroupIndex","[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 // ...\n case ParsedAttr::UnknownAttribute:\n Diag(Loc, diag::err_unknown_hlsl_semantic) << II;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/ParserHLSL/semantic_parsing.hlsl"]={"clang/test/ParserHLSL/semantic_parsing.hlsl:7:20: error: unknown HLSL semantic \'SV_IWantAPony\'"} | ["clang/test/ParserHLSL/semantic_parsing.hlsl"]={"clang/test/ParserHLSL/semantic_parsing.hlsl:7:20: error: unknown HLSL semantic \'SV_IWantAPony\'"} | ||
Line 1,232: | Line 1,231: | ||
}, | }, | ||
["err_unknown_nested_typename_suggest"]={ | ["err_unknown_nested_typename_suggest"]={ | ||
[ | [a]="no type named A in B; did you mean ...C?", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="no type named %0 in %1; did you mean %select{|simply }2%3?", | ||
[ | [f]=t, | ||
[ | [h]="no type named (.*?) in (.*?); did you mean (?:|simply )(.*?)\\?", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"2d435306e524",1262192684,"Typo correction for type names when they appear in declarations, e.g., given","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","Typo correction for type names when they appear in declarations, e.g., given"}, | ||
[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;"}}, | [j]={{x,765,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n // ...\n if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n // ...\n if (Corrected.isKeyword()) {\n // ...\n } else {\n // We found a similarly-named type or interface; suggest that.\n if (!SS || !SS->isSet()) {\n // ...\n } else if (DeclContext *DC = computeDeclContext(*SS, false)) {\n // ...\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 // ...\n case LookupResult::NotFound:\n // ...\n // Perform typo correction to determine if there is another name that is\n // close to this name.\n if (!SecondTry && CCC) {\n // ...\n if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, &SS, *CCC, CTK_ErrorRecovery)) {\n // ...\n if (getLangOpts().CPlusPlus && NextToken.is(tok::less) && UnderlyingFirstDecl && isa<TemplateDecl>(UnderlyingFirstDecl)) {\n // ...\n } else if (UnderlyingFirstDecl && (isa<TypeDecl>(UnderlyingFirstDecl) || isa<ObjCInterfaceDecl>(UnderlyingFirstDecl) || isa<ObjCCompatibleAliasDecl>(UnderlyingFirstDecl))) {\n // ...\n QualifiedDiag = diag::err_unknown_nested_typename_suggest;"}}, | ||
[k]={ | [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\'?"} | ["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\'?"} | ||
Line 1,247: | Line 1,246: | ||
}, | }, | ||
["err_unknown_receiver_suggest"]={ | ["err_unknown_receiver_suggest"]={ | ||
[ | [a]="unknown receiver A; did you mean B?", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unknown receiver %0; did you mean %1?", | ||
[ | [f]=t, | ||
[ | [h]="unknown receiver (.*?); did you mean (.*?)\\?", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"8aa4ebf0bcf7",1271213197,"Implement typo correction for Objective-C message sends when the","Implement typo correction for Objective-C message sends when the"}, | [i]={"8aa4ebf0bcf7",1271213197,"Implement typo correction for Objective-C message sends when the","Implement typo correction for Objective-C message sends when the"}, | ||
[j]={{ | [j]={{lc,2362,"Sema::ObjCMessageKind Sema::getObjCMessageKind(Scope *S, IdentifierInfo *Name, SourceLocation NameLoc, bool IsSuper, bool HasTrailingDot, ParsedType &ReceiverType) {\n // ...\n if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery, nullptr, false, nullptr, false)) {\n if (Corrected.isKeyword()) {\n // ...\n diagnoseTypo(Corrected, PDiag(diag::err_unknown_receiver_suggest) << Name);"},{lc,2369,"Sema::ObjCMessageKind Sema::getObjCMessageKind(Scope *S, IdentifierInfo *Name, SourceLocation NameLoc, bool IsSuper, bool HasTrailingDot, ParsedType &ReceiverType) {\n // ...\n if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery, nullptr, false, nullptr, false)) {\n if (Corrected.isKeyword()) {\n // ...\n } else if (ObjCInterfaceDecl *Class = Corrected.getCorrectionDeclAs<ObjCInterfaceDecl>()) {\n // ...\n diagnoseTypo(Corrected, PDiag(diag::err_unknown_receiver_suggest) << Name);"}}, | ||
[k]={ | [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\'?"} | ["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\'?"} | ||
Line 1,262: | Line 1,261: | ||
}, | }, | ||
["err_unknown_template_name"]={ | ["err_unknown_template_name"]={ | ||
[ | [a]="unknown template name A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unknown template name %0", | ||
[ | [f]=t, | ||
[ | [h]="unknown template name (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"18473f329dbd",1263331724,"Improve recovery for template-ids whose template-name doesn\'t actually","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","Improve recovery for template-ids whose template-name doesn\'t actually"}, | ||
[j]={{O,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;"}}, | [j]={{O,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 // ...\n if (Tok.is(tok::less)) {\n // ...\n if (!Actions.DiagnoseUnknownTemplateName(*Id, IdLoc, getCurScope(), &SS, Template, TNK)) {\n Diag(IdLoc, diag::err_unknown_template_name) << Id;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/injected-class-name-crash.cpp"]={"clang/test/SemaCXX/injected-class-name-crash.cpp:4:19: error: unknown template name \'Foo\'"} | ["clang/test/SemaCXX/injected-class-name-crash.cpp"]={"clang/test/SemaCXX/injected-class-name-crash.cpp:4:19: error: unknown template name \'Foo\'"} | ||
Line 1,277: | Line 1,276: | ||
}, | }, | ||
["err_unknown_type_or_class_name_suggest"]={ | ["err_unknown_type_or_class_name_suggest"]={ | ||
[ | [a]="unknown ... name A; did you mean B?", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unknown %select{type|class}1 name %0; did you mean %2?", | ||
[ | [f]=t, | ||
[ | [h]="unknown (?:type|class) name (.*?); did you mean (.*?)\\?", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"9cb8e9fc89d3",1340408225,"Perform typo correction for base class specifiers.","Perform typo correction for base class specifiers."}, | [i]={"9cb8e9fc89d3",1340408225,"Perform typo correction for base class specifiers.","Perform typo correction for base class specifiers."}, | ||
[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);"},{ | [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 // ...\n case LookupResult::NotFound:\n case LookupResult::NotFoundInCurrentInstantiation:\n if (CorrectedII) {\n // ...\n if (Correction && (NNS || NewII != &II) &&\n // ...\n if (Ty) {\n diagnoseTypo(Correction, PDiag(diag::err_unknown_type_or_class_name_suggest) << Result.getLookupName() << isClassName);"},{rb,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 // ...\n for (unsigned i = 0, n = identifiers.size(); i != n; ++i) {\n // ...\n if (corrected) {\n // ...\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]={ | [k]={ | ||
["clang/test/Parser/recovery.c"]={"clang/test/Parser/recovery.c:86:10: error: unknown type name \'intptr\'; did you mean \'intptr_t\'?"} | ["clang/test/Parser/recovery.c"]={"clang/test/Parser/recovery.c:86:10: error: unknown type name \'intptr\'; did you mean \'intptr_t\'?"} | ||
Line 1,292: | Line 1,291: | ||
}, | }, | ||
["err_unknown_typename"]={ | ["err_unknown_typename"]={ | ||
[ | [a]="unknown type name A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unknown type name %0", | ||
[ | [f]=t, | ||
[ | [h]="unknown type name (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"6cc055af1df1",1239568951,"Implement the first set of changes for PR3963 and rdar://6759604,","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,","Implement the first set of changes for PR3963 and rdar://6759604,"}, | ||
[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;"},{B,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);"},{ | [j]={{x,809,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n // ...\n if (!SS || (!SS->isSet() && !SS->isInvalid()))\n Diag(IILoc, IsTemplateName ? diag::err_no_template : diag::err_unknown_typename) << II;"},{B,12113,"Decl *Sema::ActOnUsingEnumDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation EnumLoc, SourceLocation IdentLoc, IdentifierInfo &II, CXXScopeSpec *SS) {\n // ...\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);"},{rb,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 // ...\n for (unsigned i = 0, n = identifiers.size(); i != n; ++i) {\n // ...\n Diag(identifierLocs[i], (lookupKind == LookupAnyName ? diag::err_objc_type_arg_missing : lookupKind == LookupObjCProtocolName ? diag::err_undeclared_protocol : diag::err_unknown_typename)) << identifiers[i];"},{I,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 // ...\n case LookupResult::NotFound: {\n // ...\n DiagID = Ctx ? diag::err_typename_nested_not_found : diag::err_unknown_typename;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Preprocessor/pragma_poison.c"]={"clang/test/Preprocessor/pragma_poison.c:7:3: error: unknown type name \'XYZW\'"} | ["clang/test/Preprocessor/pragma_poison.c"]={"clang/test/Preprocessor/pragma_poison.c:7:3: error: unknown type name \'XYZW\'"} | ||
Line 1,307: | Line 1,306: | ||
}, | }, | ||
["err_unknown_typename_suggest"]={ | ["err_unknown_typename_suggest"]={ | ||
[ | [a]="unknown type name A; did you mean B?", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unknown type name %0; did you mean %1?", | ||
[ | [f]=t, | ||
[ | [h]="unknown type name (.*?); did you mean (.*?)\\?", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"2d435306e524",1262192684,"Typo correction for type names when they appear in declarations, e.g., given","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","Typo correction for type names when they appear in declarations, e.g., given"}, | ||
[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;"},{ | [j]={{x,748,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n // ...\n if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n // ...\n if (Corrected.isKeyword()) {\n // ...\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 // ...\n if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(II, IILoc), LookupOrdinaryName, S, SS, CCC, CTK_ErrorRecovery)) {\n // ...\n if (Corrected.isKeyword()) {\n // ...\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 // ...\n case LookupResult::NotFound:\n // ...\n // Perform typo correction to determine if there is another name that is\n // close to this name.\n if (!SecondTry && CCC) {\n // ...\n if (TypoCorrection Corrected = CorrectTypo(Result.getLookupNameInfo(), Result.getLookupKind(), S, &SS, *CCC, CTK_ErrorRecovery)) {\n // ...\n if (getLangOpts().CPlusPlus && NextToken.is(tok::less) && UnderlyingFirstDecl && isa<TemplateDecl>(UnderlyingFirstDecl)) {\n // ...\n } else if (UnderlyingFirstDecl && (isa<TypeDecl>(UnderlyingFirstDecl) || isa<ObjCInterfaceDecl>(UnderlyingFirstDecl) || isa<ObjCCompatibleAliasDecl>(UnderlyingFirstDecl))) {\n UnqualifiedDiag = diag::err_unknown_typename_suggest;"},{rb,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 // ...\n for (unsigned i = 0, n = identifiers.size(); i != n; ++i) {\n // ...\n if (corrected) {\n // ...\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"]={ | ||
[ | [a]="\"AltiVec support not enabled\"", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\"AltiVec support not enabled\"", | ||
[ | [f]=t, | ||
[ | [h]="\"AltiVec support not enabled\"", | ||
[ | [b]=r, | ||
[ | [g]=Tb | ||
}, | }, | ||
["err_unofficial_asm_invalid_register_name"]={ | ["err_unofficial_asm_invalid_register_name"]={ | ||
[ | [a]="invalid register name", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="invalid register name", | ||
[ | [f]=t, | ||
[ | [h]="invalid register name", | ||
[ | [b]=r, | ||
[ | [g]=n | ||
}, | }, | ||
["err_unofficial_cannot_compile_this_yet"]={ | ["err_unofficial_cannot_compile_this_yet"]={ | ||
[ | [a]="cannot compile this A yet", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot compile this %0 yet", | ||
[ | [f]=t, | ||
[ | [h]="cannot compile this (.*?) yet", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[k]={ | [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"} | ["clang/test/CodeGenHIP/printf-aggregate.cpp"]={"clang/test/CodeGenHIP/printf-aggregate.cpp:19:3: error: cannot compile this non-scalar arg to printf yet"} | ||
Line 1,352: | Line 1,351: | ||
}, | }, | ||
["err_unofficial_coroutine_requires_fcoroutines"]={ | ["err_unofficial_coroutine_requires_fcoroutines"]={ | ||
[ | [a]="\"the <coroutine> header requires -fcoroutines\"", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\"the <coroutine> header requires -fcoroutines\"", | ||
[ | [f]=t, | ||
[ | [h]="\"the \\<coroutine\\> header requires \\-fcoroutines\"", | ||
[ | [b]=r, | ||
[ | [g]=Tb | ||
}, | }, | ||
["err_unofficial_cuda_unsupported_unified_addressing"]={ | ["err_unofficial_cuda_unsupported_unified_addressing"]={ | ||
[ | [a]="Target architecture A does not support unified addressing", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="Target architecture %0 does not support unified addressing", | ||
[ | [f]=t, | ||
[ | [h]="Target architecture (.*?) does not support unified addressing", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[k]={ | [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"} | ["clang/test/OpenMP/requires_codegen.cpp"]={"clang/test/OpenMP/requires_codegen.cpp:24:22: error: Target architecture sm_53 does not support unified addressing"} | ||
Line 1,375: | Line 1,374: | ||
}, | }, | ||
["err_unofficial_gcov_failed_to_open_coverage_notes_file_for_writing"]={ | ["err_unofficial_gcov_failed_to_open_coverage_notes_file_for_writing"]={ | ||
[ | [a]="failed to open coverage notes file for writing: A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="failed to open coverage notes file for writing: %0", | ||
[ | [f]=t, | ||
[ | [h]="failed to open coverage notes file for writing\\: (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[k]={ | [k]={ | ||
["clang/test/CodeGen/code-coverage-filter.c"]={"error: failed to open coverage notes file for writing: Permission denied"} | ["clang/test/CodeGen/code-coverage-filter.c"]={"error: failed to open coverage notes file for writing: Permission denied"} | ||
Line 1,388: | Line 1,387: | ||
}, | }, | ||
["err_unofficial_header_arm_mve_support_not_enabled"]={ | ["err_unofficial_header_arm_mve_support_not_enabled"]={ | ||
[ | [a]="\"MVE support not enabled\"", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\"MVE support not enabled\"", | ||
[ | [f]=t, | ||
[ | [h]="\"MVE support not enabled\"", | ||
[ | [b]=r, | ||
[ | [g]=Tb | ||
}, | }, | ||
["err_unofficial_header_arm_neon_intrinsics_not_available"]={ | ["err_unofficial_header_arm_neon_intrinsics_not_available"]={ | ||
[ | [a]="\"NEON intrinsics not available with the soft-float ABI. Please use -mfloat-abi=softfp or -mfloat-abi=hard\"", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\"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]=r, | ||
[ | [g]=Tb | ||
}, | }, | ||
["err_unofficial_header_arm_neon_support_not_enabled"]={ | ["err_unofficial_header_arm_neon_support_not_enabled"]={ | ||
[ | [a]="\"NEON support not enabled\"", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\"NEON support not enabled\"", | ||
[ | [f]=t, | ||
[ | [h]="\"NEON support not enabled\"", | ||
[ | [b]=r, | ||
[ | [g]=Tb | ||
}, | }, | ||
["err_unofficial_header_arm_sve_big_endian_not_supported"]={ | ["err_unofficial_header_arm_sve_big_endian_not_supported"]={ | ||
[ | [a]="\"Big endian is currently not supported for A\"", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\"Big endian is currently not supported for %0\"", | ||
[ | [f]=t, | ||
[ | [h]="\"Big endian is currently not supported for (.*?)\"", | ||
[ | [b]=r, | ||
[ | [g]=Tb, | ||
[k]={ | [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\""} | ["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\""} | ||
Line 1,431: | Line 1,430: | ||
}, | }, | ||
["err_unofficial_header_cxx11_required"]={ | ["err_unofficial_header_cxx11_required"]={ | ||
[ | [a]="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]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="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]=r, | ||
[ | [g]=Tb | ||
}, | }, | ||
["err_unofficial_reading_profile"]={ | ["err_unofficial_reading_profile"]={ | ||
[ | [a]="Error in reading profile A: B", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="Error in reading profile %0: %1", | ||
[ | [f]=t, | ||
[ | [h]="Error in reading profile (.*?)\\: (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,454: | Line 1,453: | ||
}, | }, | ||
["err_unofficial_requires_hosted"]={ | ["err_unofficial_requires_hosted"]={ | ||
[ | [a]="\"This header is not available in freestanding mode.\"", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\"This header is not available in freestanding mode.\"", | ||
[ | [f]=t, | ||
[ | [h]="\"This header is not available in freestanding mode\\.\"", | ||
[ | [b]=r, | ||
[ | [g]=Tb | ||
}, | }, | ||
["err_unparenthesized_non_primary_expr_in_requires_clause"]={ | ["err_unparenthesized_non_primary_expr_in_requires_clause"]={ | ||
[ | [a]="parentheses are required around this expression in a requires clause", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="parentheses are required around this expression in a requires clause", | ||
[ | [f]=t, | ||
[ | [h]="parentheses are required around this expression in a requires clause", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"}, | [i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"}, | ||
[j]={{ | [j]={{wb,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 // ...\n auto ParsePrimary = [&]() {\n // ...\n auto RecoverFromNonPrimary = [&](ExprResult E, bool Note) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,479: | Line 1,478: | ||
}, | }, | ||
["err_unqualified_pointer_member_function"]={ | ["err_unqualified_pointer_member_function"]={ | ||
[ | [a]="must explicitly qualify name of member function when taking its address", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="must explicitly qualify name of member function when taking its address", | ||
[ | [f]=t, | ||
[ | [h]="must explicitly qualify name of member function when taking its address", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"9a8dd0db89f7",1263225416,"Make Clang complain about taking the address of an unqualified member function. Fixes PR5985.","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.","Make Clang complain about taking the address of an unqualified member function. Fixes PR5985."}, | ||
[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);"}}, | [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 // ...\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n // ...\n } else if (isa<ObjCSelectorExpr>(op)) {\n // ...\n } else if (lval == Expr::LV_MemberFunction) {\n // ...\n // The id-expression was parenthesized.\n if (OrigOp.get() != DRE) {\n // ...\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 // ...\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n // ...\n } else if (isa<ObjCSelectorExpr>(op)) {\n // ...\n } else if (lval == Expr::LV_MemberFunction) {\n // ...\n // The id-expression was parenthesized.\n if (OrigOp.get() != DRE) {\n // ...\n } else if (!DRE->getQualifier()) {\n if (MD->getParent()->getName().empty())\n // ...\n else {\n // ...\n Diag(OpLoc, diag::err_unqualified_pointer_member_function) << op->getSourceRange() << FixItHint::CreateInsertion(op->getSourceRange().getBegin(), Qual);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,494: | Line 1,493: | ||
}, | }, | ||
["err_unspecified_size_with_static"]={ | ["err_unspecified_size_with_static"]={ | ||
[ | [a]="\'static\' may not be used without an array size", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'static\' may not be used without an array size", | ||
[ | [f]=t, | ||
[ | [h]="\'static\' may not be used without an array size", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"f9834d5fa094",1407482478,"Parser: Array decls with static but without array size are illformed","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","Parser: Array decls with static but without array size are illformed"}, | ||
[j]={{K,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);"}}, | [j]={{K,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 // ...\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 // ...\n } else if (Tok.isNot(tok::r_square)) {\n // ...\n } else {\n if (StaticLoc.isValid()) {\n Diag(StaticLoc, diag::err_unspecified_size_with_static);"}}, | ||
[k]={ | [k]={ | ||
[ | [ic]={"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"]={ | ||
[ | [a]="\'static\' may not be used with an unspecified variable length array size", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'static\' may not be used with an unspecified variable length array size", | ||
[ | [f]=t, | ||
[ | [h]="\'static\' may not be used with an unspecified variable length array size", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{K,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);"}} | [j]={{K,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 // ...\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 // ...\n if (StaticLoc.isValid()) {\n Diag(StaticLoc, diag::err_unspecified_vla_size_with_static);"}} | ||
}, | }, | ||
["err_unsupported_abi_for_opt"]={ | ["err_unsupported_abi_for_opt"]={ | ||
[ | [a]="\'A\' can only be used with the \'B\' ABI", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'%0\' can only be used with the \'%1\' ABI", | ||
[ | [f]=t, | ||
[ | [h]="\'(.*?)\' can only be used with the \'(.*?)\' ABI", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"eb63256095dd",1534929985,"[clang][mips] Set __mips_fpr correctly for -mfpxx","[clang][mips] Set __mips_fpr correctly for -mfpxx"}, | [i]={"eb63256095dd",1534929985,"[clang][mips] Set __mips_fpr correctly for -mfpxx","[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 // ...\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"]={ | ||
[ | [a]="cannot import unsupported AST node A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot import unsupported AST node %0", | ||
[ | [f]=t, | ||
[ | [h]="cannot import unsupported AST node (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"e4c83e4e2e09",1265755713,"Complain about types and declarations that we don\'t know how to import.","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.","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 // ...\n if (isa<RecordDecl>(D) && (FunDecl = dyn_cast<FunctionDecl>(OrigDC)) && FunDecl->hasBody()) {\n // ...\n for (const ParmVarDecl *P : FunDecl->parameters()) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,548: | Line 1,547: | ||
}, | }, | ||
["err_unsupported_bom"]={ | ["err_unsupported_bom"]={ | ||
[ | [a]="A byte order mark detected in \'B\', but encoding is not supported", | ||
[c]="fatal error: ", | [c]="fatal error: ", | ||
[ | [d]="Fatal", | ||
[ | [e]="%0 byte order mark detected in \'%1\', but encoding is not supported", | ||
[ | [f]="fatal error\\: ", | ||
[ | [h]="(.*?) byte order mark detected in \'(.*?)\', but encoding is not supported", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"8fbe98b3b6e4",1271787243,"enhance sourcemgr to detect various UTF BOM\'s and emit a fatal error","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","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 // ...\n if (InvalidBOM) {\n Diag.Report(Loc, diag::err_unsupported_bom) << InvalidBOM << ContentsEntry->getName();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,563: | Line 1,562: | ||
}, | }, | ||
["err_unsupported_cxx_abi"]={ | ["err_unsupported_cxx_abi"]={ | ||
[ | [a]="C++ ABI \'A\' is not supported on target triple \'B\'", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="C++ ABI \'%0\' is not supported on target triple \'%1\'", | ||
[ | [f]=t, | ||
[ | [h]="C\\+\\+ ABI \'(.*?)\' is not supported on target triple \'(.*?)\'", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"0687578728ea",1610286626,"[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.","[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.","[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 // ...\n if (!CXXABI.empty()) {\n if (!TargetCXXABI::isABI(CXXABI)) {\n // ...\n } else {\n // ...\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"]={ | ||
[ | [a]="module partitions are only supported for C++20 onwards", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="module partitions are only supported for C++20 onwards", | ||
[ | [f]=t, | ||
[ | [h]="module partitions are only supported for C\\+\\+20 onwards", | ||
[ | [b]=r, | ||
[ | [g]=bd, | ||
[i]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,"}, | [i]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,"}, | ||
[j]={{Cb,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);"},{Cb,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);"}} | [j]={{Cb,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 // ...\n if (Tok.is(tok::colon)) {\n // ...\n if (!getLangOpts().CPlusPlusModules)\n Diag(ColonLoc, diag::err_unsupported_module_partition) << SourceRange(ColonLoc, Partition.back().second);"},{Cb,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 // ...\n if (Tok.is(tok::header_name)) {\n // ...\n } else if (Tok.is(tok::annot_header_unit)) {\n // ...\n } else if (Tok.is(tok::colon)) {\n // ...\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"]={ | ||
[ | [a]="constrained placeholder types other than simple \'auto\' on non-type template parameters not supported yet", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="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]=r, | ||
[ | [g]=n, | ||
[i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","Improve static checks for sprintf and __builtin___sprintf_chk"}, | [i]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","Improve static checks for sprintf and __builtin___sprintf_chk"}, | ||
[j]={{I,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();"}}, | [j]={{I,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();"}}, | ||
Line 1,602: | Line 1,601: | ||
}, | }, | ||
["err_unsupported_string_concat"]={ | ["err_unsupported_string_concat"]={ | ||
[ | [a]="unsupported non-standard concatenation of string literals", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unsupported non-standard concatenation of string literals", | ||
[ | [f]=t, | ||
[ | [h]="unsupported non\\-standard concatenation of string literals", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={"fb65e592e05a",1311745230,"Add support for C++0x unicode string and character literals, from Craig Topper!","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!","Add support for C++0x unicode string and character literals, from Craig Topper!"}, | ||
[j]={{gb,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);"}}, | [j]={{gb,1964,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n // ...\n /// (C99 5.1.1.2p1). The common case is only one string fragment.\n for (const Token &Tok : StringToks) {\n // ...\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 // ...\n } else if (Tok.isNot(Kind) && Tok.isNot(tok::string_literal)) {\n if (isOrdinary()) {\n // ...\n } else {\n if (Diags)\n Diags->Report(Tok.getLocation(), diag::err_unsupported_string_concat);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,617: | Line 1,616: | ||
}, | }, | ||
["err_unsupported_unknown_any_call"]={ | ["err_unsupported_unknown_any_call"]={ | ||
[ | [a]="call to unsupported expression with unknown type", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="call to unsupported expression with unknown type", | ||
[ | [f]=t, | ||
[ | [h]="call to unsupported expression with unknown type", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"2979fe01da2c",1302568968, | [i]={"2979fe01da2c",1302568968,Uc,Uc}, | ||
[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();"}}, | [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 // ...\n ExprResult VisitExpr(Expr *E) {\n S.Diag(E->getExprLoc(), diag::err_unsupported_unknown_any_call) << E->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
[ | [pc]={"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"]={ | ||
[ | [a]="A has unknown type, which is not supported for this kind of declaration", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%0 has unknown type, which is not supported for this kind of declaration", | ||
[ | [f]=t, | ||
[ | [h]="(.*?) has unknown type, which is not supported for this kind of declaration", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"2d2e870745c2",1302505370, | [i]={"2d2e870745c2",1302505370,Xb,Xb}, | ||
[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();"}} | [j]={{z,21421,"ExprResult RebuildUnknownAnyExpr::resolveDecl(Expr *E, ValueDecl *VD) {\n // ...\n // - functions\n if (FunctionDecl *FD = dyn_cast<FunctionDecl>(VD)) {\n // ...\n } else if (isa<VarDecl>(VD)) {\n // ...\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"]={ | ||
[ | [a]="unsupported expression with unknown type", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unsupported expression with unknown type", | ||
[ | [f]=t, | ||
[ | [h]="unsupported expression with unknown type", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"2d2e870745c2",1302505370, | [i]={"2d2e870745c2",1302505370,Xb,Xb}, | ||
[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();"}} | [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 // ...\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 // ...\n if (DeclRefExpr *ref = dyn_cast<DeclRefExpr>(E)) {\n // ...\n } else if (MemberExpr *mem = dyn_cast<MemberExpr>(E)) {\n // ...\n } else if (ObjCMessageExpr *msg = dyn_cast<ObjCMessageExpr>(E)) {\n // ...\n } else {\n S.Diag(E->getExprLoc(), diag::err_unsupported_unknown_any_expr) << E->getSourceRange();"}} | ||
}, | }, | ||
["err_unterm_macro_invoc"]={ | ["err_unterm_macro_invoc"]={ | ||
[ | [a]="unterminated function-like macro invocation", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unterminated function-like macro invocation", | ||
[ | [f]=t, | ||
[ | [h]="unterminated function\\-like macro invocation", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[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);"}}, | [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 // ...\n while (Tok.isNot(tok::r_paren)) {\n // ...\n while (true) {\n // ...\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 // ...\n already_lexed:\n // ...\n case tok::eof:\n case tok::eod:\n // ...\n PP.Diag(Tok.getLocation(), diag::err_unterm_macro_invoc);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Preprocessor/invalid-__has_warning1.c"]={"clang/test/Preprocessor/invalid-__has_warning1.c:5:23: error: unterminated function-like macro invocation"} | ["clang/test/Preprocessor/invalid-__has_warning1.c"]={"clang/test/Preprocessor/invalid-__has_warning1.c:5:23: error: unterminated function-like macro invocation"} | ||
Line 1,671: | Line 1,670: | ||
}, | }, | ||
["err_unterminated___pragma"]={ | ["err_unterminated___pragma"]={ | ||
[ | [a]="missing terminating \')\' character", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="missing terminating \')\' character", | ||
[ | [f]=t, | ||
[ | [h]="missing terminating \'\\)\' character", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={"49039d4afb3f",1283044194,"Complain if a __pragma isn\'t terminated.","Complain if a __pragma isn\'t terminated."}, | [i]={"49039d4afb3f",1283044194,"Complain if a __pragma isn\'t terminated.","Complain if a __pragma isn\'t terminated."}, | ||
[j]={{ | [j]={{qb,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 // ...\n if (Tok.is(tok::eof)) {\n Diag(PragmaLoc, diag::err_unterminated___pragma);"}} | ||
}, | }, | ||
["err_unterminated_block_comment"]={ | ["err_unterminated_block_comment"]={ | ||
[ | [a]="unterminated /* comment", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unterminated /* comment", | ||
[ | [f]=t, | ||
[ | [h]="unterminated \\/\\* comment", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{db,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);"},{db,2881,"#endif\n FoundSlash:\n } else if (C == 0 && CurPtr == BufferEnd + 1) {\n if (!isLexingRawMode())\n Diag(BufferPtr, diag::err_unterminated_block_comment);"}} | [j]={{db,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 // ...\n if (C == 0 && CurPtr == BufferEnd + 1) {\n if (!isLexingRawMode())\n Diag(BufferPtr, diag::err_unterminated_block_comment);"},{db,2881,"#endif\n // ...\n FoundSlash:\n // ...\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"]={ | ||
[ | [a]="raw string missing terminating delimiter )A\"", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="raw string missing terminating delimiter )%0\"", | ||
[ | [f]=t, | ||
[ | [h]="raw string missing terminating delimiter \\)(.*?)\"", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals.","Add support for C++0x raw string literals."}, | [i]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals.","Add support for C++0x raw string literals."}, | ||
[j]={{db,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);"}} | [j]={{db,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 // ...\n while (true) {\n // ...\n if (C == \')\') {\n // ...\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"]={ | ||
[ | [a]="cannot cast A to its ... base class B", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot cast %0 to its %select{private|protected}2 base class %1", | ||
[ | [f]=t, | ||
[ | [h]="cannot cast (.*?) to its (?:private|protected) base class (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"5b0829a321d5",1265794272,"Improve access control diagnostics. Perform access control on member-pointer","Improve access control diagnostics. Perform access control on member-pointer"}, | [i]={"5b0829a321d5",1265794272,"Improve access control diagnostics. Perform access control on member-pointer","Improve access control diagnostics. Perform access control on member-pointer"}, | ||
[j]={{ | [j]={{Fb,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 // ...\n if (!CStyle) {\n switch (Self.CheckBaseClassAccess(OpRange.getBegin(), DestClass, SrcClass, Paths.front(), diag::err_upcast_to_inaccessible_base)) {"},{B,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); }"},{Qb,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 // ...\n if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {\n if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {\n // ...\n if (FromPointeeType->isRecordType() && ToPointeeType->isRecordType() && !Context.hasSameUnqualifiedType(FromPointeeType, ToPointeeType)) {\n // ...\n if (Diagnose) {\n InaccessibleID = diag::err_upcast_to_inaccessible_base;"}}, | ||
[k]={ | [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\'"} | ["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\'"} | ||
Line 1,722: | Line 1,721: | ||
}, | }, | ||
["err_use_continuation_class"]={ | ["err_use_continuation_class"]={ | ||
[ | [a]="illegal redeclaration of property in class extension A (attribute must be \'readwrite\', while its primary must be \'readonly\')", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="illegal redeclaration of property in class extension %0 (attribute must be \'readwrite\', while its primary must be \'readonly\')", | ||
[ | [f]=t, | ||
[ | [h]="illegal redeclaration of property in class extension (.*?) \\(attribute must be \'readwrite\', while its primary must be \'readonly\'\\)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{fd,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 // ...\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 // ...\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]={ | [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\')"} | ["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\')"} | ||
Line 1,737: | Line 1,736: | ||
}, | }, | ||
["err_use_continuation_class_redeclaration_readwrite"]={ | ["err_use_continuation_class_redeclaration_readwrite"]={ | ||
[ | [a]="illegal redeclaration of \'readwrite\' property in class extension A (perhaps you intended this to be a \'readwrite\' redeclaration of a \'readonly\' public property?)", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="illegal redeclaration of \'readwrite\' property in class extension %0 (perhaps you intended this to be a \'readwrite\' redeclaration of a \'readonly\' public property?)", | ||
[ | [f]=t, | ||
[ | [h]="illegal redeclaration of \'readwrite\' property in class extension (.*?) \\(perhaps you intended this to be a \'readwrite\' redeclaration of a \'readonly\' public property\\?\\)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"5ef9ad9907a7",1287686982,"Tweak diagnostics for redeclaration of a @property in a class extension where the redelcaration and ...","Tweak diagnostics for redeclaration of a @property in a class extension where the redelcaration and original"}, | [i]={"5ef9ad9907a7",1287686982,"Tweak diagnostics for redeclaration of a @property in a class extension where the redelcaration and ...","Tweak diagnostics for redeclaration of a @property in a class extension where the redelcaration and original"}, | ||
[j]={{ | [j]={{fd,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 // ...\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 // ...\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]={ | [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?)"} | ["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?)"} | ||
Line 1,752: | Line 1,751: | ||
}, | }, | ||
["err_use_of_default_argument_to_function_declared_later"]={ | ["err_use_of_default_argument_to_function_declared_later"]={ | ||
[ | [a]="use of default argument to function A that is declared later in class B", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="use of default argument to function %0 that is declared later in class %1", | ||
[ | [f]=t, | ||
[ | [h]="use of default argument to function (.*?) that is declared later in class (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"84613c4eba08",1244825500,"It\'s an error to use a function declared in a class definition as a default argument before the func...","It\'s an error to use a function declared in a class definition as a default argument before the function has been declared."}, | [i]={"84613c4eba08",1244825500,"It\'s an error to use a function declared in a class definition as a default argument before the func...","It\'s an error to use a function declared in a class definition as a default argument before the function has been declared."}, | ||
[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());"}}, | [j]={{z,6035,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n if (Param->hasUnparsedDefaultArg()) {\n // ...\n Diag(CallLoc, diag::err_use_of_default_argument_to_function_declared_later) << FD << cast<CXXRecordDecl>(FD->getDeclContext());"}}, | ||
[k]={ | [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>\'"} | ["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>\'"} | ||
Line 1,767: | Line 1,766: | ||
}, | }, | ||
["err_use_of_empty_using_if_exists"]={ | ["err_use_of_empty_using_if_exists"]={ | ||
[ | [a]="reference to unresolved using declaration", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="reference to unresolved using declaration", | ||
[ | [f]=t, | ||
[ | [h]="reference to unresolved using declaration", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={ | [i]={Nc,1615397021,zb,zb}, | ||
[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);"}}, | [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 // ...\n if (const auto *EmptyD = dyn_cast<UnresolvedUsingIfExistsDecl>(D)) {\n Diag(Loc, diag::err_use_of_empty_using_if_exists);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,782: | Line 1,781: | ||
}, | }, | ||
["err_use_of_tag_name_without_tag"]={ | ["err_use_of_tag_name_without_tag"]={ | ||
[ | [a]="must use \'A\' tag to refer to type B...", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="must use \'%1\' tag to refer to type %0%select{| in this scope}2", | ||
[ | [f]=t, | ||
[ | [h]="must use \'(.*?)\' tag to refer to type (.*?)(?:| in this scope)", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"ffaa0e6919b0",1239572970,"Diagnose invalid uses of tagged types with a missing tag. For example, in:","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:","Diagnose invalid uses of tagged types with a missing tag. For example, in:"}, | ||
[j]={{K,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);"}}, | [j]={{K,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 // ...\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 // ...\n if (TagName) {\n // ...\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 // ...\n if (TagDecl *Tag = R.getAsSingle<TagDecl>()) {\n // ...\n SemaRef.Diag(NameLoc, diag::err_use_of_tag_name_without_tag) << Name << TagName << SemaRef.getLangOpts().CPlusPlus << FixItHint::CreateInsertion(NameLoc, FixItTagName);"}}, | ||
[k]={ | [k]={ | ||
[ | [ic]={"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"]={ | ||
[ | [a]="taking address of non-addressable standard library function", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="taking address of non-addressable standard library function", | ||
[ | [f]=t, | ||
[ | [h]="taking address of non\\-addressable standard library function", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"cb08f4aa4467",1620530452, | [i]={"cb08f4aa4467",1620530452,Sb,Sb}, | ||
[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);"}}, | [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 // ...\n case BuiltinType::BuiltinFn: {\n // ...\n if (DRE) {\n // ...\n if (Context.BuiltinInfo.isInStdNamespace(BuiltinID)) {\n // ...\n Diag(E->getBeginLoc(), getLangOpts().CPlusPlus20 ? diag::err_use_of_unaddressable_function : diag::warn_cxx20_compat_use_of_unaddressable_function);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,812: | Line 1,811: | ||
}, | }, | ||
["err_use_with_wrong_tag"]={ | ["err_use_with_wrong_tag"]={ | ||
[ | [a]="use of A with tag type that does not match previous declaration", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="use of %0 with tag type that does not match previous declaration", | ||
[ | [f]=t, | ||
[ | [h]="use of (.*?) with tag type that does not match previous declaration", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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;"},{I,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());"},{I,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());"},{I,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());"},{I,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());"}}, | [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 // ...\n if (!Previous.empty()) {\n // ...\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 // ...\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 // ...\n if (!Previous.empty()) {\n // ...\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 // ...\n if (SafeToContinue)\n // ...\n else\n Diag(KWLoc, diag::err_use_with_wrong_tag) << Name;"},{I,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 // ...\n if (PrevClassTemplate) {\n // ...\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());"},{I,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 // ...\n // Check the tag kind\n if (const RecordType *RT = Result->getAs<RecordType>()) {\n // ...\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());"},{I,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 // ...\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());"},{I,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 // ...\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 // ...\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 // ...\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]={ | [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"} | ["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"} | ||
Line 1,827: | Line 1,826: | ||
}, | }, | ||
["err_using_attribute_ns_conflict"]={ | ["err_using_attribute_ns_conflict"]={ | ||
[ | [a]="attribute with scope specifier cannot follow default scope specifier", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="attribute with scope specifier cannot follow default scope specifier", | ||
[ | [f]=t, | ||
[ | [h]="attribute with scope specifier cannot follow default scope specifier", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"b7d7a046d8e0",1466770512,"Using for attributes voted into C++17.","Using for attributes voted into C++17."}, | [i]={"b7d7a046d8e0",1466770512,"Using for attributes voted into C++17.","Using for attributes voted into C++17."}, | ||
[j]={{O,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);"}}, | [j]={{O,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 // ...\n while (!Tok.isOneOf(tok::r_square, tok::semi, tok::eof)) {\n // ...\n if (CommonScopeName) {\n if (ScopeName) {\n Diag(ScopeLoc, diag::err_using_attribute_ns_conflict) << SourceRange(CommonScopeLoc);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,842: | Line 1,841: | ||
}, | }, | ||
["err_using_decl_can_not_refer_to_class_member"]={ | ["err_using_decl_can_not_refer_to_class_member"]={ | ||
[ | [a]="using declaration cannot refer to class member", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="using declaration cannot refer to class member", | ||
[ | [f]=t, | ||
[ | [h]="using declaration cannot refer to class member", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"5a9c5acf0f49",1251430518,"More work on using declarations.","More work on using declarations."}, | [i]={"5a9c5acf0f49",1251430518,"More work on using declarations.","More work on using declarations."}, | ||
[j]={{B,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();"}}, | [j]={{B,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 // ...\n if (!CurContext->isRecord()) {\n // ...\n Diag(NameLoc, Cxx20Enumerator ? diag::warn_cxx17_compat_using_decl_class_member_enumerator : diag::err_using_decl_can_not_refer_to_class_member) << SS.getRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,857: | Line 1,856: | ||
}, | }, | ||
["err_using_decl_can_not_refer_to_namespace"]={ | ["err_using_decl_can_not_refer_to_namespace"]={ | ||
[ | [a]="using declaration cannot refer to a namespace", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="using declaration cannot refer to a namespace", | ||
[ | [f]=t, | ||
[ | [h]="using declaration cannot refer to a namespace", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"5a9c5acf0f49",1251430518,"More work on using declarations.","More work on using declarations."}, | [i]={"5a9c5acf0f49",1251430518,"More work on using declarations.","More work on using declarations."}, | ||
[j]={{B,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();"}}, | [j]={{B,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 // ...\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]={ | [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"} | ["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"} | ||
Line 1,872: | Line 1,871: | ||
}, | }, | ||
["err_using_decl_conflict"]={ | ["err_using_decl_conflict"]={ | ||
[ | [a]="target of using declaration conflicts with declaration already in scope", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="target of using declaration conflicts with declaration already in scope", | ||
[ | [f]=t, | ||
[ | [h]="target of using declaration conflicts with declaration already in scope", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"84d8767c1582",1260438112,"Implement redeclaration checking and hiding semantics for using declarations. There","Implement redeclaration checking and hiding semantics for using declarations. There"}, | [i]={"84d8767c1582",1260438112,"Implement redeclaration checking and hiding semantics for using declarations. There","Implement redeclaration checking and hiding semantics for using declarations. There"}, | ||
[j]={{B,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);"},{B,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);"},{B,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);"},{B,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);"},{B,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);"}}, | [j]={{B,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 // ...\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 // ...\n Diag(BUD->getLocation(), diag::err_using_decl_conflict);"},{B,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 // ...\n if (FunctionDecl *FD = Target->getAsFunction()) {\n // ...\n case Ovl_NonFunction:\n Diag(BUD->getLocation(), diag::err_using_decl_conflict);"},{B,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 // ...\n if (FunctionDecl *FD = Target->getAsFunction()) {\n // ...\n // We found a decl with the exact signature.\n case Ovl_Match:\n // ...\n Diag(BUD->getLocation(), diag::err_using_decl_conflict);"},{B,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 // ...\n if (isa<TagDecl>(Target)) {\n // ...\n Diag(BUD->getLocation(), diag::err_using_decl_conflict);"},{B,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 // ...\n Diag(BUD->getLocation(), diag::err_using_decl_conflict);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,887: | Line 1,886: | ||
}, | }, | ||
["err_using_decl_conflict_reverse"]={ | ["err_using_decl_conflict_reverse"]={ | ||
[ | [a]="declaration conflicts with target of using declaration already in scope", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="declaration conflicts with target of using declaration already in scope", | ||
[ | [f]=t, | ||
[ | [h]="declaration conflicts with target of using declaration already in scope", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"e29c5cd2398c",1260474663,"Improve the diagnostic when a new declaration conflicts with a using shadow","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","Improve the diagnostic when a new declaration conflicts with a using shadow"}, | ||
[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);"},{I,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);"}}, | [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 // ...\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 // ...\n if (!Previous.empty()) {\n // ...\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 // ...\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);"},{I,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 // ...\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]={ | [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"} | ["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"} | ||
Line 1,902: | Line 1,901: | ||
}, | }, | ||
["err_using_decl_constructor"]={ | ["err_using_decl_constructor"]={ | ||
[ | [a]="using declaration cannot refer to a constructor", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="using declaration cannot refer to a constructor", | ||
[ | [f]=t, | ||
[ | [h]="using declaration cannot refer to a constructor", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"220f4277bd2a",1257352206, | [i]={"220f4277bd2a",1257352206,Bc,Bc}, | ||
[j]={{B,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();"}} | [j]={{B,12040,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n // ...\n case UnqualifiedIdKind::IK_ConstructorName:\n case UnqualifiedIdKind::IK_ConstructorTemplateId:\n // ...\n Diag(Name.getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_using_decl_constructor : diag::err_using_decl_constructor) << SS.getRange();"}} | ||
}, | }, | ||
["err_using_decl_constructor_not_in_direct_base"]={ | ["err_using_decl_constructor_not_in_direct_base"]={ | ||
[ | [a]="A is not a direct base of B, cannot inherit constructors", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%0 is not a direct base of %1, cannot inherit constructors", | ||
[ | [f]=t, | ||
[ | [h]="(.*?) is not a direct base of (.*?), cannot inherit constructors", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"0890502f44a1",1296933799,"Basic implementation of inherited constructors. Only generates declarations, and probably only works...","Basic implementation of inherited constructors. Only generates declarations, and probably only works for very basic use cases."}, | [i]={"0890502f44a1",1296933799,"Basic implementation of inherited constructors. Only generates declarations, and probably only works...","Basic implementation of inherited constructors. Only generates declarations, and probably only works for very basic use cases."}, | ||
[j]={{B,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;"}}, | [j]={{B,12905,"/// Additional checks for a using declaration referring to a constructor name.\nbool Sema::CheckInheritingConstructorUsingDecl(UsingDecl *UD) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 1,929: | Line 1,928: | ||
}, | }, | ||
["err_using_decl_destructor"]={ | ["err_using_decl_destructor"]={ | ||
[ | [a]="using declaration cannot refer to a destructor", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="using declaration cannot refer to a destructor", | ||
[ | [f]=t, | ||
[ | [h]="using declaration cannot refer to a destructor", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"220f4277bd2a",1257352206, | [i]={"220f4277bd2a",1257352206,Bc,Bc}, | ||
[j]={{B,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();"}} | [j]={{B,12048,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n // ...\n case UnqualifiedIdKind::IK_DestructorName:\n Diag(Name.getBeginLoc(), diag::err_using_decl_destructor) << SS.getRange();"}} | ||
}, | }, | ||
["err_using_decl_friend"]={ | ["err_using_decl_friend"]={ | ||
[ | [a]="cannot befriend target of using declaration", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot befriend target of using declaration", | ||
[ | [f]=t, | ||
[ | [h]="cannot befriend target of using declaration", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"c70fca60dab4",1365023987,"Complain about attempts to befriend declarations via a using","Complain about attempts to befriend declarations via a using"}, | [i]={"c70fca60dab4",1365023987,"Complain about attempts to befriend declarations via a using","Complain about attempts to befriend declarations via a using"}, | ||
[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);"}}, | [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 // ...\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]={ | [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"} | ["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"} | ||
Line 1,956: | Line 1,955: | ||
}, | }, | ||
["err_using_decl_nested_name_specifier_is_current_class"]={ | ["err_using_decl_nested_name_specifier_is_current_class"]={ | ||
[ | [a]="using declaration refers to its own class", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="using declaration refers to its own class", | ||
[ | [f]=t, | ||
[ | [h]="using declaration refers to its own class", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"3969e30d3831",1260258378, | [i]={"3969e30d3831",1260258378,Pc,Pc}, | ||
[j]={{B,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();"},{B,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();"}}, | [j]={{B,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 // ...\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();"},{B,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 // ...\n if (getLangOpts().CPlusPlus11) {\n // ...\n if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(cast<CXXRecordDecl>(NamedContext))) {\n // ...\n if (CurContext == NamedContext) {\n Diag(SS.getBeginLoc(), diag::err_using_decl_nested_name_specifier_is_current_class) << SS.getRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 1,971: | Line 1,970: | ||
}, | }, | ||
["err_using_decl_nested_name_specifier_is_not_base_class"]={ | ["err_using_decl_nested_name_specifier_is_not_base_class"]={ | ||
[ | [a]="using declaration refers into \'A\', which is not a base class of B", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="using declaration refers into \'%0\', which is not a base class of %1", | ||
[ | [f]=t, | ||
[ | [h]="using declaration refers into \'(.*?)\', which is not a base class of (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"3969e30d3831",1260258378, | [i]={"3969e30d3831",1260258378,Pc,Pc}, | ||
[j]={{B,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();"},{B,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();"},{B,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();"}}, | [j]={{B,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 // ...\n if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(OrigRec)) {\n // ...\n Diag(Using->getQualifierLoc().getBeginLoc(), diag::err_using_decl_nested_name_specifier_is_not_base_class) << Using->getQualifier() << cast<CXXRecordDecl>(CurContext) << Using->getQualifierLoc().getSourceRange();"},{B,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 // ...\n if (getLangOpts().CPlusPlus11) {\n // ...\n if (cast<CXXRecordDecl>(CurContext)->isProvablyNotDerivedFrom(cast<CXXRecordDecl>(NamedContext))) {\n // ...\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();"},{B,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 // ...\n Diag(SS.getRange().getBegin(), diag::err_using_decl_nested_name_specifier_is_not_base_class) << SS.getScopeRep() << cast<CXXRecordDecl>(CurContext) << SS.getRange();"}}, | ||
[k]={ | [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>\'"} | ["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>\'"} | ||
Line 1,986: | Line 1,985: | ||
}, | }, | ||
["err_using_decl_nested_name_specifier_is_not_class"]={ | ["err_using_decl_nested_name_specifier_is_not_class"]={ | ||
[ | [a]="using declaration in class refers into \'A\', which is not a class", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="using declaration in class refers into \'%0\', which is not a class", | ||
[ | [f]=t, | ||
[ | [h]="using declaration in class refers into \'(.*?)\', which is not a class", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"3969e30d3831",1260258378, | [i]={"3969e30d3831",1260258378,Pc,Pc}, | ||
[j]={{B,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();"}}, | [j]={{B,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 // ...\n // The current scope is a record.\n if (!NamedContext->isRecord()) {\n // ...\n Diag(SS.getBeginLoc(), Cxx20Enumerator ? diag::warn_cxx17_compat_using_decl_non_member_enumerator : diag::err_using_decl_nested_name_specifier_is_not_class) << SS.getScopeRep() << SS.getRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,001: | Line 2,000: | ||
}, | }, | ||
["err_using_decl_redeclaration"]={ | ["err_using_decl_redeclaration"]={ | ||
[ | [a]="redeclaration of using declaration", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="redeclaration of using declaration", | ||
[ | [f]=t, | ||
[ | [h]="redeclaration of using declaration", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"84d8767c1582",1260438112,"Implement redeclaration checking and hiding semantics for using declarations. There","Implement redeclaration checking and hiding semantics for using declarations. There"}, | [i]={"84d8767c1582",1260438112,"Implement redeclaration checking and hiding semantics for using declarations. There","Implement redeclaration checking and hiding semantics for using declarations. There"}, | ||
[j]={{B,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();"}}, | [j]={{B,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 // ...\n for (LookupResult::iterator I = Prev.begin(), E = Prev.end(); I != E; ++I) {\n // ...\n Diag(NameLoc, diag::err_using_decl_redeclaration) << SS.getRange();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Parser/cxx1z-using-declaration.cpp"]={"clang/test/Parser/cxx1z-using-declaration.cpp:23:12: error: redeclaration of using declaration"} | ["clang/test/Parser/cxx1z-using-declaration.cpp"]={"clang/test/Parser/cxx1z-using-declaration.cpp:23:12: error: redeclaration of using declaration"} | ||
Line 2,016: | Line 2,015: | ||
}, | }, | ||
["err_using_decl_redeclaration_expansion"]={ | ["err_using_decl_redeclaration_expansion"]={ | ||
[ | [a]="using declaration pack expansion at block scope produces multiple values", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="using declaration pack expansion at block scope produces multiple values", | ||
[ | [f]=t, | ||
[ | [h]="using declaration pack expansion at block scope produces multiple values", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"22a250cd5d8e",1482120533, | [i]={"22a250cd5d8e",1482120533,Dc,Dc}, | ||
[j]={{ | [j]={{cd,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 // ...\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]={ | [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"} | ["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"} | ||
Line 2,031: | Line 2,030: | ||
}, | }, | ||
["err_using_decl_template_id"]={ | ["err_using_decl_template_id"]={ | ||
[ | [a]="using declaration cannot refer to a template specialization", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="using declaration cannot refer to a template specialization", | ||
[ | [f]=t, | ||
[ | [h]="using declaration cannot refer to a template specialization", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"220f4277bd2a",1257352206, | [i]={"220f4277bd2a",1257352206,Bc,Bc}, | ||
[j]={{B,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);"}}, | [j]={{B,12052,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n // ...\n case UnqualifiedIdKind::IK_TemplateId:\n Diag(Name.getBeginLoc(), diag::err_using_decl_template_id) << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,046: | Line 2,045: | ||
}, | }, | ||
["err_using_dependent_value_is_type"]={ | ["err_using_dependent_value_is_type"]={ | ||
[ | [a]="dependent using declaration resolved to type without \'typename\'", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="dependent using declaration resolved to type without \'typename\'", | ||
[ | [f]=t, | ||
[ | [h]="dependent using declaration resolved to type without \'typename\'", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"e61f2ba7e44a",1258511779,"Incremental progress on using declarations. Split UnresolvedUsingDecl into","Incremental progress on using declarations. Split UnresolvedUsingDecl into"}, | [i]={"e61f2ba7e44a",1258511779,"Incremental progress on using declarations. Split UnresolvedUsingDecl into","Incremental progress on using declarations. Split UnresolvedUsingDecl into"}, | ||
[j]={{B,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);"}}, | [j]={{B,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 // ...\n if (HasTypenameKeyword) {\n // ...\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]={ | [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\'"} | ["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\'"} | ||
Line 2,061: | Line 2,060: | ||
}, | }, | ||
["err_using_directive_member_suggest"]={ | ["err_using_directive_member_suggest"]={ | ||
[ | [a]="no namespace named A in B; did you mean ...C?", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="no namespace named %0 in %1; did you mean %select{|simply }2%3?", | ||
[ | [f]=t, | ||
[ | [h]="no namespace named (.*?) in (.*?); did you mean (?:|simply )(.*?)\\?", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"cdf87024edb7",1277834026, | [i]={"cdf87024edb7",1277834026,Lc,Lc}, | ||
[j]={{B,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) {"}}, | [j]={{B,11903,"static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n // ...\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 // ...\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 // ...\n void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) override {\n // ...\n if (Info.getID() - 1 == diag::err_using_directive_member_suggest) {"}}, | ||
[k]={ | [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\'?"} | ["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\'?"} | ||
Line 2,076: | Line 2,075: | ||
}, | }, | ||
["err_using_directive_suggest"]={ | ["err_using_directive_suggest"]={ | ||
[ | [a]="no namespace named A; did you mean B?", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="no namespace named %0; did you mean %1?", | ||
[ | [f]=t, | ||
[ | [h]="no namespace named (.*?); did you mean (.*?)\\?", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"cdf87024edb7",1277834026, | [i]={"cdf87024edb7",1277834026,Lc,Lc}, | ||
[j]={{B,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));"}}, | [j]={{B,11908,"static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n // ...\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 // ...\n } else {\n S.diagnoseTypo(Corrected, S.PDiag(diag::err_using_directive_suggest) << Ident, S.PDiag(diag::note_namespace_defined_here));"}}, | ||
[k]={ | [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\'?"} | ["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\'?"} | ||
Line 2,091: | Line 2,090: | ||
}, | }, | ||
["err_using_enum_decl_redeclaration"]={ | ["err_using_enum_decl_redeclaration"]={ | ||
[ | [a]="redeclaration of using-enum declaration", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="redeclaration of using-enum declaration", | ||
[ | [f]=t, | ||
[ | [h]="redeclaration of using\\-enum declaration", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={ | [i]={Nc,1615397021,zb,zb}, | ||
[j]={{B,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);"}}, | [j]={{B,12840,"NamedDecl *Sema::BuildUsingEnumDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation EnumLoc, SourceLocation NameLoc, TypeSourceInfo *EnumType, EnumDecl *ED) {\n // ...\n if (CurContext->getRedeclContext()->isRecord()) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 2,106: | Line 2,105: | ||
}, | }, | ||
["err_using_enum_expect_identifier"]={ | ["err_using_enum_expect_identifier"]={ | ||
[ | [a]="using enum ...", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="using enum %select{requires an enum or typedef name|does not permit an elaborated enum specifier}0", | ||
[ | [f]=t, | ||
[ | [h]="using enum (?:requires an enum or typedef name|does not permit an elaborated enum specifier)", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"3d2080683f1d",1663177354,"[clang][DR2621] using enum NAME lookup fix","[clang][DR2621] using enum NAME lookup fix"}, | [i]={"3d2080683f1d",1663177354,"[clang][DR2621] using enum NAME lookup fix","[clang][DR2621] using enum NAME lookup fix"}, | ||
[j]={{O,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);"}}, | [j]={{O,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 // ...\n if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n // ...\n if (!Tok.is(tok::identifier)) {\n Diag(Tok.getLocation(), diag::err_using_enum_expect_identifier) << Tok.is(tok::kw_enum);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,121: | Line 2,120: | ||
}, | }, | ||
["err_using_enum_is_dependent"]={ | ["err_using_enum_is_dependent"]={ | ||
[ | [a]="using-enum cannot name a dependent type", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="using-enum cannot name a dependent type", | ||
[ | [f]=t, | ||
[ | [h]="using\\-enum cannot name a dependent type", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={ | [i]={Nc,1615397021,zb,zb}, | ||
[j]={{B,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);"}}, | [j]={{B,12112,"Decl *Sema::ActOnUsingEnumDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation EnumLoc, SourceLocation IdentLoc, IdentifierInfo &II, CXXScopeSpec *SS) {\n // ...\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]={ | [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"} | ["clang/test/SemaCXX/cxx20-using-enum.cpp"]={"clang/test/SemaCXX/cxx20-using-enum.cpp:116:22: error: using-enum cannot name a dependent type"} | ||
Line 2,136: | Line 2,135: | ||
}, | }, | ||
["err_using_enum_not_enum"]={ | ["err_using_enum_not_enum"]={ | ||
[ | [a]="A is not an enumerated type", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%0 is not an enumerated type", | ||
[ | [f]=t, | ||
[ | [h]="(.*?) is not an enumerated type", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{B,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;"}}, | [j]={{B,12121,"Decl *Sema::ActOnUsingEnumDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation EnumLoc, SourceLocation IdentLoc, IdentifierInfo &II, CXXScopeSpec *SS) {\n // ...\n if (!Enum) {\n Diag(IdentLoc, diag::err_using_enum_not_enum) << EnumTy;"}}, | ||
[k]={ | [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"} | ["clang/test/SemaCXX/cxx20-using-enum.cpp"]={"clang/test/SemaCXX/cxx20-using-enum.cpp:27:17: error: \'Bob::C\' is not an enumerated type"} | ||
Line 2,151: | Line 2,150: | ||
}, | }, | ||
["err_using_if_exists_on_ctor"]={ | ["err_using_if_exists_on_ctor"]={ | ||
[ | [a]="\'using_if_exists\' attribute cannot be applied to an inheriting constructor", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'using_if_exists\' attribute cannot be applied to an inheriting constructor", | ||
[ | [f]=t, | ||
[ | [h]="\'using_if_exists\' attribute cannot be applied to an inheriting constructor", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={ | [i]={Nc,1615397021,zb,zb}, | ||
[j]={{B,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);"}}, | [j]={{B,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 // ...\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]={ | [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"} | ["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"} | ||
Line 2,166: | Line 2,165: | ||
}, | }, | ||
["err_using_namespace_in_class"]={ | ["err_using_namespace_in_class"]={ | ||
[ | [a]="\'using namespace\' is not allowed in classes", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'using namespace\' is not allowed in classes", | ||
[ | [f]=t, | ||
[ | [h]="\'using namespace\' is not allowed in classes", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"fec52635f0d5",1245459114, | [i]={"fec52635f0d5",1245459114,tc,tc}, | ||
[j]={{O,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);"}}, | [j]={{O,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 // ...\n if (Tok.is(tok::kw_using)) {\n // ...\n if (Tok.is(tok::kw_namespace)) {\n Diag(UsingLoc, diag::err_using_namespace_in_class);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/using-directive.cpp"]={"clang/test/SemaCXX/using-directive.cpp:63:3: error: \'using namespace\' is not allowed in classes"} | ["clang/test/SemaCXX/using-directive.cpp"]={"clang/test/SemaCXX/using-directive.cpp:63:3: error: \'using namespace\' is not allowed in classes"} | ||
Line 2,181: | Line 2,180: | ||
}, | }, | ||
["err_using_pack_expansion_empty"]={ | ["err_using_pack_expansion_empty"]={ | ||
[ | [a]="... using declaration A instantiates to an empty pack", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%select{|member}0 using declaration %1 instantiates to an empty pack", | ||
[ | [f]=t, | ||
[ | [h]="(?:|member) using declaration (.*?) instantiates to an empty pack", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"22a250cd5d8e",1482120533, | [i]={"22a250cd5d8e",1482120533,Dc,Dc}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,195: | Line 2,194: | ||
}, | }, | ||
["err_using_requires_qualname"]={ | ["err_using_requires_qualname"]={ | ||
[ | [a]="using declaration requires a qualified name", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="using declaration requires a qualified name", | ||
[ | [f]=t, | ||
[ | [h]="using declaration requires a qualified name", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"fec52635f0d5",1245459114, | [i]={"fec52635f0d5",1245459114,tc,tc}, | ||
[j]={{B,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);"}}, | [j]={{B,12022,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n // ...\n if (SS.isEmpty()) {\n Diag(Name.getBeginLoc(), diag::err_using_requires_qualname);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/using-decl-1.cpp"]={"clang/test/SemaCXX/using-decl-1.cpp:405:34: error: using declaration requires a qualified name"} | ["clang/test/SemaCXX/using-decl-1.cpp"]={"clang/test/SemaCXX/using-decl-1.cpp:405:34: error: using declaration requires a qualified name"} | ||
Line 2,210: | Line 2,209: | ||
}, | }, | ||
["err_using_typename_non_type"]={ | ["err_using_typename_non_type"]={ | ||
[ | [a]="\'typename\' keyword used on a non-type", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'typename\' keyword used on a non-type", | ||
[ | [f]=t, | ||
[ | [h]="\'typename\' keyword used on a non\\-type", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"fec52635f0d5",1245459114, | [i]={"fec52635f0d5",1245459114,tc,tc}, | ||
[j]={{B,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);"}}, | [j]={{B,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 // ...\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]={ | [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"} | ["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"} | ||
Line 2,225: | Line 2,224: | ||
}, | }, | ||
["err_uuidof_with_multiple_guids"]={ | ["err_uuidof_with_multiple_guids"]={ | ||
[ | [a]="cannot call operator __uuidof on a type with multiple GUIDs", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot call operator __uuidof on a type with multiple GUIDs", | ||
[ | [f]=t, | ||
[ | [h]="cannot call operator __uuidof on a type with multiple GUIDs", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"59c0ec23966a",1378537186,"AST: __uuidof should leak through templated types","AST: __uuidof should leak through templated types"}, | [i]={"59c0ec23966a",1378537186,"AST: __uuidof should leak through templated types","AST: __uuidof should leak through templated types"}, | ||
[j]={{ | [j]={{ab,760,"/// Build a Microsoft __uuidof expression with a type operand.\nExprResult Sema::BuildCXXUuidof(QualType Type, SourceLocation TypeidLoc, TypeSourceInfo *Operand, SourceLocation RParenLoc) {\n // ...\n if (!Operand->getType()->isDependentType()) {\n // ...\n if (UuidAttrs.size() > 1)\n return ExprError(Diag(TypeidLoc, diag::err_uuidof_with_multiple_guids));"},{ab,782,"/// Build a Microsoft __uuidof expression with an expression operand.\nExprResult Sema::BuildCXXUuidof(QualType Type, SourceLocation TypeidLoc, Expr *E, SourceLocation RParenLoc) {\n // ...\n if (!E->getType()->isDependentType()) {\n if (E->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {\n // ...\n } else {\n // ...\n if (UuidAttrs.size() > 1)\n return ExprError(Diag(TypeidLoc, diag::err_uuidof_with_multiple_guids));"}}, | ||
[k]={ | [k]={ | ||
[ | [qc]={"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"]={ | ||
[ | [a]="cannot call operator __uuidof on a type with no GUID", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot call operator __uuidof on a type with no GUID", | ||
[ | [f]=t, | ||
[ | [h]="cannot call operator __uuidof on a type with no GUID", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"9dddd40a1caf",1292817063,"Emit an error if operator __uuidof() is called on a type with no associated GUID.","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.","Emit an error if operator __uuidof() is called on a type with no associated GUID."}, | ||
[j]={{ | [j]={{ab,758,"/// Build a Microsoft __uuidof expression with a type operand.\nExprResult Sema::BuildCXXUuidof(QualType Type, SourceLocation TypeidLoc, TypeSourceInfo *Operand, SourceLocation RParenLoc) {\n // ...\n if (!Operand->getType()->isDependentType()) {\n // ...\n if (UuidAttrs.empty())\n return ExprError(Diag(TypeidLoc, diag::err_uuidof_without_guid));"},{ab,780,"/// Build a Microsoft __uuidof expression with an expression operand.\nExprResult Sema::BuildCXXUuidof(QualType Type, SourceLocation TypeidLoc, Expr *E, SourceLocation RParenLoc) {\n // ...\n if (!E->getType()->isDependentType()) {\n if (E->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) {\n // ...\n } else {\n // ...\n if (UuidAttrs.empty())\n return ExprError(Diag(TypeidLoc, diag::err_uuidof_without_guid));"}}, | ||
[k]={ | [k]={ | ||
[ | [qc]={"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"]={ | ||
[ | [a]="CUDA device code does not support va_arg", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="CUDA device code does not support va_arg", | ||
[ | [f]=t, | ||
[ | [h]="CUDA device code does not support va_arg", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"6644e366b01e",1453249620,"[CUDA] Bail, rather than crash, on va_arg in device code.","[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.","[CUDA] Bail, rather than crash, on va_arg in device code."}, | ||
[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);"}}, | [j]={{z,17165,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n // ...\n // CUDA device code does not support varargs.\n if (getLangOpts().CUDA && getLangOpts().CUDAIsDevice) {\n if (const FunctionDecl *F = dyn_cast<FunctionDecl>(CurContext)) {\n // ...\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 // ...\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]={ | [k]={ | ||
["clang/test/SemaCUDA/vararg.cu"]={"clang/test/SemaCUDA/vararg.cu:15:10: error: CUDA device code does not support va_arg"} | ["clang/test/SemaCUDA/vararg.cu"]={"clang/test/SemaCUDA/vararg.cu:15:10: error: CUDA device code does not support va_arg"} | ||
Line 2,270: | Line 2,269: | ||
}, | }, | ||
["err_va_start_captured_stmt"]={ | ["err_va_start_captured_stmt"]={ | ||
[ | [a]="\'va_start\' cannot be used in a captured statement", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'va_start\' cannot be used in a captured statement", | ||
[ | [f]=t, | ||
[ | [h]="\'va_start\' cannot be used in a captured statement", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"f1deb837eee3",1493927465, | [i]={"f1deb837eee3",1493927465,vc,vc}, | ||
[j]={{ | [j]={{eb,8082,"static bool checkVAStartIsInVariadicFunction(Sema &S, Expr *Fn, ParmVarDecl **LastParam = nullptr) {\n // ...\n if (auto *Block = dyn_cast<BlockDecl>(Caller)) {\n // ...\n } else if (auto *FD = dyn_cast<FunctionDecl>(Caller)) {\n // ...\n } else if (auto *MD = dyn_cast<ObjCMethodDecl>(Caller)) {\n // ...\n } else if (isa<CapturedDecl>(Caller)) {\n // ...\n S.Diag(Fn->getBeginLoc(), diag::err_va_start_captured_stmt);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/OpenMP/varargs.cpp"]={"clang/test/OpenMP/varargs.cpp:9:5: error: \'va_start\' cannot be used in a captured statement"} | ["clang/test/OpenMP/varargs.cpp"]={"clang/test/OpenMP/varargs.cpp:9:5: error: \'va_start\' cannot be used in a captured statement"} | ||
Line 2,285: | Line 2,284: | ||
}, | }, | ||
["err_va_start_fixed_function"]={ | ["err_va_start_fixed_function"]={ | ||
[ | [a]="\'va_start\' used in function with fixed args", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'va_start\' used in function with fixed args", | ||
[ | [f]=t, | ||
[ | [h]="\'va_start\' used in function with fixed args", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"f1deb837eee3",1493927465, | [i]={"f1deb837eee3",1493927465,vc,vc}, | ||
[j]={{ | [j]={{eb,8091,"static bool checkVAStartIsInVariadicFunction(Sema &S, Expr *Fn, ParmVarDecl **LastParam = nullptr) {\n // ...\n if (!IsVariadic) {\n S.Diag(Fn->getBeginLoc(), diag::err_va_start_fixed_function);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,300: | Line 2,299: | ||
}, | }, | ||
["err_va_start_outside_function"]={ | ["err_va_start_outside_function"]={ | ||
[ | [a]="\'va_start\' cannot be used outside a function", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'va_start\' cannot be used outside a function", | ||
[ | [f]=t, | ||
[ | [h]="\'va_start\' cannot be used outside a function", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"f1deb837eee3",1493927465, | [i]={"f1deb837eee3",1493927465,vc,vc}, | ||
[j]={{ | [j]={{eb,8086,"static bool checkVAStartIsInVariadicFunction(Sema &S, Expr *Fn, ParmVarDecl **LastParam = nullptr) {\n // ...\n if (auto *Block = dyn_cast<BlockDecl>(Caller)) {\n // ...\n } else if (auto *FD = dyn_cast<FunctionDecl>(Caller)) {\n // ...\n } else if (auto *MD = dyn_cast<ObjCMethodDecl>(Caller)) {\n // ...\n } else if (isa<CapturedDecl>(Caller)) {\n // ...\n } else {\n // ...\n S.Diag(Fn->getBeginLoc(), diag::err_va_start_outside_function);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,315: | Line 2,314: | ||
}, | }, | ||
["err_va_start_used_in_wrong_abi_function"]={ | ["err_va_start_used_in_wrong_abi_function"]={ | ||
[ | [a]="\'va_start\' used in ... ABI function", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'va_start\' used in %select{System V|Win64}0 ABI function", | ||
[ | [f]=t, | ||
[ | [h]="\'va_start\' used in (?:System V|Win64) ABI function", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"c7d5c94f78c7",1442523333,"Support __builtin_ms_va_list.","Support __builtin_ms_va_list."}, | [i]={"c7d5c94f78c7",1442523333,"Support __builtin_ms_va_list.","Support __builtin_ms_va_list."}, | ||
[j]={{ | [j]={{eb,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 // ...\n if (IsX64 || IsAArch64) {\n // ...\n if (IsMSVAStart) {\n // ...\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]={ | [k]={ | ||
["clang/test/Sema/varargs-aarch64.c"]={"clang/test/Sema/varargs-aarch64.c:10:3: error: \'va_start\' used in Win64 ABI function"} | ["clang/test/Sema/varargs-aarch64.c"]={"clang/test/Sema/varargs-aarch64.c:10:3: error: \'va_start\' used in Win64 ABI function"} | ||
Line 2,330: | Line 2,329: | ||
}, | }, | ||
["err_value_init_for_array_type"]={ | ["err_value_init_for_array_type"]={ | ||
[ | [a]="array types cannot be value-initialized", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="array types cannot be value-initialized", | ||
[ | [f]=t, | ||
[ | [h]="array types cannot be value\\-initialized", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[j]={{ | [j]={{ab,1565,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n // ...\n if (Ty->isArrayType()) {\n if (!ListInitialization)\n return ExprError(Diag(TyBeginLoc, diag::err_value_init_for_array_type) << FullRange);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,345: | Line 2,344: | ||
}, | }, | ||
["err_vaopt_paste_at_end"]={ | ["err_vaopt_paste_at_end"]={ | ||
[ | [a]="\'##\' cannot appear at end of __VA_OPT__ argument", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'##\' cannot appear at end of __VA_OPT__ argument", | ||
[ | [f]=t, | ||
[ | [h]="\'\\#\\#\' cannot appear at end of __VA_OPT__ argument", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={"1826842865f1",1508030786, | [i]={"1826842865f1",1508030786,sc,sc}, | ||
[j]={{ | [j]={{bb,2934,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // ...\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n // ...\n } else {\n // ...\n while (Tok.isNot(tok::eod)) {\n // ...\n if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n // ...\n if (VAOCtx.isVAOptToken(Tok)) {\n // ...\n } else if (VAOCtx.isInVAOpt()) {\n if (Tok.is(tok::r_paren)) {\n if (VAOCtx.sawClosingParen()) {\n // ...\n if (Tokens[Tokens.size() - 2].is(tok::hashhash)) {\n Diag(Tok, diag::err_vaopt_paste_at_end);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,360: | Line 2,359: | ||
}, | }, | ||
["err_vaopt_paste_at_start"]={ | ["err_vaopt_paste_at_start"]={ | ||
[ | [a]="\'##\' cannot appear at start of __VA_OPT__ argument", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'##\' cannot appear at start of __VA_OPT__ argument", | ||
[ | [f]=t, | ||
[ | [h]="\'\\#\\#\' cannot appear at start of __VA_OPT__ argument", | ||
[ | [b]=r, | ||
[ | [g]=D, | ||
[i]={"1826842865f1",1508030786, | [i]={"1826842865f1",1508030786,sc,sc}, | ||
[j]={{ | [j]={{bb,2923,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // ...\n // Read the rest of the macro body.\n if (MI->isObjectLike()) {\n // ...\n } else {\n // ...\n while (Tok.isNot(tok::eod)) {\n // ...\n if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n // ...\n if (VAOCtx.isVAOptToken(Tok)) {\n // ...\n if (Tok.is(tok::hashhash)) {\n Diag(Tok, diag::err_vaopt_paste_at_start);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,375: | Line 2,374: | ||
}, | }, | ||
["err_var_partial_spec_redeclared"]={ | ["err_var_partial_spec_redeclared"]={ | ||
[ | [a]="variable template partial specialization A cannot be redefined", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="variable template partial specialization %0 cannot be redefined", | ||
[ | [f]=t, | ||
[ | [h]="variable template partial specialization (.*?) cannot be redefined", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som...","Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention..."}, | [i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som...","Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention..."}, | ||
[j]={{ | [j]={{cd,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 // ...\n if (PrevDecl) {\n // ...\n SemaRef.Diag(PartialSpec->getLocation(), diag::err_var_partial_spec_redeclared) << WrittenTy->getType();"}} | ||
}, | }, | ||
["err_var_spec_no_template"]={ | ["err_var_spec_no_template"]={ | ||
[ | [a]="no variable template matches... specialization", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="no variable template matches%select{| partial}0 specialization", | ||
[ | [f]=t, | ||
[ | [h]="no variable template matches(?:| partial) specialization", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som...","Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention..."}, | [i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som...","Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention..."}, | ||
[j]={{I,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;"}}, | [j]={{I,4544,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n // ...\n if (!VarTemplate) {\n // ...\n return Diag(D.getIdentifierLoc(), diag::err_var_spec_no_template) << IsPartialSpecialization;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,402: | Line 2,401: | ||
}, | }, | ||
["err_var_spec_no_template_but_method"]={ | ["err_var_spec_no_template_but_method"]={ | ||
[ | [a]="no variable template matches specialization; did you mean to use A as function template instead?", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="no variable template matches specialization; did you mean to use %0 as function template instead?", | ||
[ | [f]=t, | ||
[ | [h]="no variable template matches specialization; did you mean to use (.*?) as function template instead\\?", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"967c13d3fbfa",1399554980,"Fix PR19169 [Crash on invalid attempting to specialize a template method as a template variable].","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].","Fix PR19169 [Crash on invalid attempting to specialize a template method as a template variable]."}, | ||
[j]={{I,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();"}}, | [j]={{I,4542,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n // ...\n if (!VarTemplate) {\n // ...\n if (FnTemplate)\n return Diag(D.getIdentifierLoc(), diag::err_var_spec_no_template_but_method) << FnTemplate->getDeclName();"}}, | ||
[k]={ | [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?"} | ["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?"} | ||
Line 2,417: | Line 2,416: | ||
}, | }, | ||
["err_variable_instantiates_to_function"]={ | ["err_variable_instantiates_to_function"]={ | ||
[ | [a]="... instantiated with function type A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%select{variable|static data member}0 instantiated with function type %1", | ||
[ | [f]=t, | ||
[ | [h]="(?:variable|static data member) instantiated with function type (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"6162334ce0f1",1284277044,"Diagnose the instantiation of variables (including static data","Diagnose the instantiation of variables (including static data"}, | [i]={"6162334ce0f1",1284277044,"Diagnose the instantiation of variables (including static data","Diagnose the instantiation of variables (including static data"}, | ||
[j]={{ | [j]={{cd,1139,"Decl *TemplateDeclInstantiator::VisitVarDecl(VarDecl *D, bool InstantiatingVarTemplate, ArrayRef<BindingDecl *> *Bindings) {\n // ...\n if (DI->getType()->isFunctionType()) {\n SemaRef.Diag(D->getLocation(), diag::err_variable_instantiates_to_function) << D->isStaticDataMember() << DI->getType();"},{cd,3963,"Decl *TemplateDeclInstantiator::VisitVarTemplateSpecializationDecl(VarTemplateDecl *VarTemplate, VarDecl *D, const TemplateArgumentListInfo &TemplateArgsInfo, ArrayRef<TemplateArgument> Converted, VarTemplateSpecializationDecl *PrevDecl) {\n // ...\n if (DI->getType()->isFunctionType()) {\n SemaRef.Diag(D->getLocation(), diag::err_variable_instantiates_to_function) << D->isStaticDataMember() << DI->getType();"},{cd,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 // ...\n if (DI->getType()->isFunctionType()) {\n SemaRef.Diag(PartialSpec->getLocation(), diag::err_variable_instantiates_to_function) << PartialSpec->isStaticDataMember() << DI->getType();"}}, | ||
[k]={ | [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 ()\'"} | ["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 ()\'"} | ||
Line 2,432: | Line 2,431: | ||
}, | }, | ||
["err_variable_object_no_init"]={ | ["err_variable_object_no_init"]={ | ||
[ | [a]="variable-sized object may not be initialized", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="variable-sized object may not be initialized", | ||
[ | [f]=t, | ||
[ | [h]="variable\\-sized object may not be initialized", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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))"},{W,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();"},{W,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();"},{W,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();"}}, | [j]={{z,7679,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n // ...\n if (literalType->isArrayType()) {\n // ...\n if (literalType->isVariableArrayType()) {\n // ...\n if ((LangOpts.CPlusPlus || NumInits.value_or(0)) && !tryToFixVariablyModifiedVarType(TInfo, literalType, LParenLoc, diag::err_variable_object_no_init))"},{W,1996,"void InitListChecker::CheckArrayType(const InitializedEntity &Entity, InitListExpr *IList, QualType &DeclType, llvm::APSInt elementIndex, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n // ...\n if (const VariableArrayType *VAT = dyn_cast<VariableArrayType>(arrayType)) {\n // ...\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();"},{W,5480,"static void TryOrBuildParenListInitialization(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result = nullptr) {\n // ...\n if (const ArrayType *AT = S.getASTContext().getAsArrayType(Entity.getType())) {\n // ...\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 // ...\n } else if (const VariableArrayType *VAT = S.getASTContext().getAsVariableArrayType(Entity.getType())) {\n // ...\n S.Diag(SE->getBeginLoc(), diag::err_variable_object_no_init) << SE->getSourceRange();"},{W,9619,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_VariableLengthArrayHasInitializer:\n S.Diag(Kind.getLocation(), diag::err_variable_object_no_init) << Args[0]->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
[ | [fc]={"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"]={ | ||
[ | [a]="\'new\' cannot allocate object of variably modified type A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'new\' cannot allocate object of variably modified type %0", | ||
[ | [f]=t, | ||
[ | [h]="\'new\' cannot allocate object of variably modified type (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"3999e15d93d4",1286380831,"Reject the allocation of variably-modified types in C++ \'new\'","Reject the allocation of variably-modified types in C++ \'new\'"}, | [i]={"3999e15d93d4",1286380831,"Reject the allocation of variably-modified types in C++ \'new\'","Reject the allocation of variably-modified types in C++ \'new\'"}, | ||
[j]={{ | [j]={{ab,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 // ...\n else if (AllocType->isReferenceType())\n // ...\n else if (!AllocType->isDependentType() && RequireCompleteSizedType(Loc, AllocType, diag::err_new_incomplete_or_sizeless_type, R))\n // ...\n else if (RequireNonAbstractType(Loc, AllocType, diag::err_allocation_of_abstract_type))\n // ...\n else if (AllocType->isVariablyModifiedType())\n return Diag(Loc, diag::err_variably_modified_new_type) << AllocType;"}}, | ||
[k]={ | [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 (*)[[] {"} | ["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 (*)[[] {"} | ||
Line 2,462: | Line 2,461: | ||
}, | }, | ||
["err_variably_modified_nontype_template_param"]={ | ["err_variably_modified_nontype_template_param"]={ | ||
[ | [a]="non-type template parameter of variably modified type A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="non-type template parameter of variably modified type %0", | ||
[ | [f]=t, | ||
[ | [h]="non\\-type template parameter of variably modified type (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"959d5a0cbd78",1274545050,"Implement support for variable length arrays in C++. VLAs are limited","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","Implement support for variable length arrays in C++. VLAs are limited"}, | ||
[j]={{I,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;"}}, | [j]={{I,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;"}}, | ||
Line 2,477: | Line 2,476: | ||
}, | }, | ||
["err_variably_modified_template_arg"]={ | ["err_variably_modified_template_arg"]={ | ||
[ | [a]="variably modified type A cannot be used as a template argument", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="variably modified type %0 cannot be used as a template argument", | ||
[ | [f]=t, | ||
[ | [h]="variably modified type (.*?) cannot be used as a template argument", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"959d5a0cbd78",1274545050,"Implement support for variable length arrays in C++. VLAs are limited","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","Implement support for variable length arrays in C++. VLAs are limited"}, | ||
[j]={{I,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;"}}, | [j]={{I,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 // ...\n if (CanonArg->isVariablyModifiedType()) {\n return Diag(SR.getBegin(), diag::err_variably_modified_template_arg) << Arg;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,492: | Line 2,491: | ||
}, | }, | ||
["err_variably_modified_typeid"]={ | ["err_variably_modified_typeid"]={ | ||
[ | [a]="\'typeid\' of variably modified type A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'typeid\' of variably modified type %0", | ||
[ | [f]=t, | ||
[ | [h]="\'typeid\' of variably modified type (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"6f3150a7d262",1416604152,"Sema: Don\'t permit variably modified types in typeid","Sema: Don\'t permit variably modified types in typeid"}, | [i]={"6f3150a7d262",1416604152,"Sema: Don\'t permit variably modified types in typeid","Sema: Don\'t permit variably modified types in typeid"}, | ||
[j]={{ | [j]={{ab,564,"/// Build a C++ typeid expression with a type operand.\nExprResult Sema::BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc, TypeSourceInfo *Operand, SourceLocation RParenLoc) {\n // ...\n if (T->isVariablyModifiedType())\n return ExprError(Diag(TypeidLoc, diag::err_variably_modified_typeid) << T);"},{ab,634,"/// Build a C++ typeid expression with an expression operand.\nExprResult Sema::BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc, Expr *E, SourceLocation RParenLoc) {\n // ...\n if (E->getType()->isVariablyModifiedType())\n return ExprError(Diag(TypeidLoc, diag::err_variably_modified_typeid) << E->getType());"}}, | ||
[k]={ | [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]\'"} | ["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]\'"} | ||
Line 2,507: | Line 2,506: | ||
}, | }, | ||
["err_variadic_device_fn"]={ | ["err_variadic_device_fn"]={ | ||
[ | [a]="CUDA device code does not support variadic functions", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="CUDA device code does not support variadic functions", | ||
[ | [f]=t, | ||
[ | [h]="CUDA device code does not support variadic functions", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"e48cd6c5304d",1453584497,"[CUDA] Disallow variadic functions other than printf in device code.","[CUDA] Disallow variadic functions other than printf in device code."}, | [i]={"e48cd6c5304d",1453584497,"[CUDA] Disallow variadic functions other than printf in device code.","[CUDA] Disallow variadic functions other than printf in device code."}, | ||
[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);"}}, | [j]={{x,10680,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (getLangOpts().CUDA) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 2,522: | Line 2,521: | ||
}, | }, | ||
["err_vec_builtin_incompatible_vector"]={ | ["err_vec_builtin_incompatible_vector"]={ | ||
[ | [a]="first two arguments to A must have the same type", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="first two arguments to %0 must have the same type", | ||
[ | [f]=t, | ||
[ | [h]="first two arguments to (.*?) must have the same type", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"edc7849b1bdd",1495637157,"Generalize two diagnostic messages to take function name as parameter.","Generalize two diagnostic messages to take function name as parameter."}, | [i]={"edc7849b1bdd",1495637157,"Generalize two diagnostic messages to take function name as parameter.","Generalize two diagnostic messages to take function name as parameter."}, | ||
[j]={{ | [j]={{eb,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 // ...\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());"},{eb,8473,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n // ...\n if (!TheCall->getArg(0)->isTypeDependent() && !TheCall->getArg(1)->isTypeDependent()) {\n // ...\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()));"},{eb,8479,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n // ...\n if (!TheCall->getArg(0)->isTypeDependent() && !TheCall->getArg(1)->isTypeDependent()) {\n // ...\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 // ...\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]={ | [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"} | ["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"} | ||
Line 2,537: | Line 2,536: | ||
}, | }, | ||
["err_vec_builtin_non_vector"]={ | ["err_vec_builtin_non_vector"]={ | ||
[ | [a]="first two arguments to A must be vectors", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="first two arguments to %0 must be vectors", | ||
[ | [f]=t, | ||
[ | [h]="first two arguments to (.*?) must be vectors", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"edc7849b1bdd",1495637157,"Generalize two diagnostic messages to take function name as parameter.","Generalize two diagnostic messages to take function name as parameter."}, | [i]={"edc7849b1bdd",1495637157,"Generalize two diagnostic messages to take function name as parameter.","Generalize two diagnostic messages to take function name as parameter."}, | ||
[j]={{ | [j]={{eb,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 // ...\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());"},{eb,8458,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n // ...\n if (!TheCall->getArg(0)->isTypeDependent() && !TheCall->getArg(1)->isTypeDependent()) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 2,552: | Line 2,551: | ||
}, | }, | ||
["err_vecstep_non_scalar_vector_type"]={ | ["err_vecstep_non_scalar_vector_type"]={ | ||
[ | [a]="\'vec_step\' requires built-in scalar or vector type, A invalid", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'vec_step\' requires built-in scalar or vector type, %0 invalid", | ||
[ | [f]=t, | ||
[ | [h]="\'vec_step\' requires built\\-in scalar or vector type, (.*?) invalid", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"e190dee7a548",1299871489,"Add support for the OpenCL vec_step operator, by generalising and","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","Add support for the OpenCL vec_step operator, by generalising and"}, | ||
[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;"}}, | [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;"}}, | ||
Line 2,567: | Line 2,566: | ||
}, | }, | ||
["err_vector_incorrect_num_initializers"]={ | ["err_vector_incorrect_num_initializers"]={ | ||
[ | [a]="... elements in vector initialization (expected A elements, have B)", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%select{too many|too few}0 elements in vector initialization (expected %1 elements, have %2)", | ||
[ | [f]=t, | ||
[ | [h]="(?:too many|too few) elements in vector initialization \\(expected (.*?) elements, have (.*?)\\)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"a96114ed087b",1249840544,"AltiVec-style vector initializer syntax, vec4 a = (vec4)(a, b, c, d);","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);","AltiVec-style vector initializer syntax, vec4 a = (vec4)(a, b, c, d);"}, | ||
[j]={{W,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;"}}, | [j]={{W,1908,"void InitListChecker::CheckVectorType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n // ...\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]={ | [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)"} | ["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)"} | ||
Line 2,582: | Line 2,581: | ||
}, | }, | ||
["err_verify_ambiguous_marker"]={ | ["err_verify_ambiguous_marker"]={ | ||
[ | [a]="reference to marker \'A\' is ambiguous", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="reference to marker \'%0\' is ambiguous", | ||
[ | [f]=t, | ||
[ | [h]="reference to marker \'(.*?)\' is ambiguous", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"4e8144a0d140",1555130019,"[verify] Add support for location markers in directives.","[verify] Add support for location markers in directives."}, | [i]={"4e8144a0d140",1555130019,"[verify] Add support for location markers in directives.","[verify] Add support for location markers in directives."}, | ||
[j]={{ | [j]={{pb,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 // ...\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 // ...\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"]={ | ||
[ | [a]="\'A\' diagnostics ... but not ...: B", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'%0\' diagnostics %select{expected|seen}1 but not %select{seen|expected}1: %2", | ||
[ | [f]=t, | ||
[ | [h]="\'(.*?)\' diagnostics (?:expected|seen) but not (?:seen|expected)\\: (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"348185548eb2",1258168999, | [i]={"348185548eb2",1258168999,Rc,Rc}, | ||
[j]={{ | [j]={{pb,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 // ...\n Diags.Report(diag::err_verify_inconsistent_diags).setForceEmit() << Kind << /*Unexpected=*/true << OS.str();"},{pb,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 // ...\n Diags.Report(diag::err_verify_inconsistent_diags).setForceEmit() << Kind << /*Unexpected=*/false << OS.str();"}} | ||
}, | }, | ||
["err_verify_invalid_content"]={ | ["err_verify_invalid_content"]={ | ||
[ | [a]="invalid expected A: B", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="invalid expected %0: %1", | ||
[ | [f]=t, | ||
[ | [h]="invalid expected (.*?)\\: (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"e82411b47f76",1272484950,"add regex support for -verify mode. You can now do things like","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","add regex support for -verify mode. You can now do things like"}, | ||
[j]={{ | [j]={{pb,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 // ...\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"]={ | ||
[ | [a]="... directive cannot follow ...", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%select{expected|\'expected-no-diagnostics\'}0 directive cannot follow %select{\'expected-no-diagnostics\' directive|other expected directives}0", | ||
[ | [f]=t, | ||
[ | [h]="(?:expected|\'expected\\-no\\-diagnostics\') directive cannot follow (?:\'expected\\-no\\-diagnostics\' directive|other expected directives)", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"0fea04509a64",1350650972,"Change VerifyDiagnosticConsumer so that it *must* contain at least one \"expected-*\" directive. As a...","Change VerifyDiagnosticConsumer so that it *must* contain at least one \"expected-*\" directive. As a result, for test-cases that are not expected to generate any diagnostics, an additional directive \"expected-no-diagnostics\" has been implemented which can then be included in such test-cases. This new directive may not be used in conjunction with any other \"expected-*\" directive."}, | [i]={"0fea04509a64",1350650972,"Change VerifyDiagnosticConsumer so that it *must* contain at least one \"expected-*\" directive. As a...","Change VerifyDiagnosticConsumer so that it *must* contain at least one \"expected-*\" directive. As a result, for test-cases that are not expected to generate any diagnostics, an additional directive \"expected-no-diagnostics\" has been implemented which can then be included in such test-cases. This new directive may not be used in conjunction with any other \"expected-*\" directive."}, | ||
[j]={{ | [j]={{pb,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 // ...\n for (ParseHelper PH(S); !PH.Done();) {\n // ...\n if (NoDiag) {\n if (Status == VerifyDiagnosticConsumer::HasOtherExpectedDirectives)\n Diags.Report(Pos, diag::err_verify_invalid_no_diags) << /*IsExpectedNoDiagnostics=*/true;"},{pb,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 // ...\n for (ParseHelper PH(S); !PH.Done();) {\n // ...\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"]={ | ||
[ | [a]="invalid range following \'-\' in expected A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="invalid range following \'-\' in expected %0", | ||
[ | [f]=t, | ||
[ | [h]="invalid range following \'\\-\' in expected (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"b8b2ca6ffbfb",1341889046,"Allow -verify directives to specify a min and max count, not just \"+\".","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 \"+\".","Allow -verify directives to specify a min and max count, not just \"+\"."}, | ||
[j]={{ | [j]={{pb,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 // ...\n for (ParseHelper PH(S); !PH.Done();) {\n // ...\n // Next optional token: positive integer or a \'+\'.\n if (PH.Next(D.Min)) {\n // ...\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 // ...\n } else if (PH.Next(\"-\")) {\n // ...\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"]={ | ||
[ | [a]="cannot find end (\'}}\') of expected A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot find end (\'}}\') of expected %0", | ||
[ | [f]=t, | ||
[ | [h]="cannot find end \\(\'\\}\\}\'\\) of expected (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"348185548eb2",1258168999, | [i]={"348185548eb2",1258168999,Rc,Rc}, | ||
[j]={{ | [j]={{pb,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 // ...\n for (ParseHelper PH(S); !PH.Done();) {\n // ...\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"]={ | ||
[ | [a]="file \'A\' could not be located in expected B", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="file \'%0\' could not be located in expected %1", | ||
[ | [f]=t, | ||
[ | [h]="file \'(.*?)\' could not be located in expected (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"fcc699aee8db",1366186006,"Extended VerifyDiagnosticConsumer to also verify source file for diagnostic.","Extended VerifyDiagnosticConsumer to also verify source file for diagnostic."}, | [i]={"fcc699aee8db",1366186006,"Extended VerifyDiagnosticConsumer to also verify source file for diagnostic.","Extended VerifyDiagnosticConsumer to also verify source file for diagnostic."}, | ||
[j]={{ | [j]={{pb,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 // ...\n for (ParseHelper PH(S); !PH.Done();) {\n // ...\n if (!PH.Next(\"@\")) {\n // ...\n } else {\n // ...\n if (FoundPlus || PH.Next(\"-\")) {\n // ...\n } else if (PH.Next(Line)) {\n // ...\n } else if (PH.NextMarker()) {\n // ...\n } else if (PP && PH.Search(\":\")) {\n // ...\n if (Filename == \"*\") {\n // ...\n } else {\n // ...\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"]={ | ||
[ | [a]="missing or invalid line number following \'@\' in expected A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="missing or invalid line number following \'@\' in expected %0", | ||
[ | [f]=t, | ||
[ | [h]="missing or invalid line number following \'@\' in expected (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"e1572eb3e27c",1341889023,"Allow line numbers on -verify directives.","Allow line numbers on -verify directives."}, | [i]={"e1572eb3e27c",1341889023,"Allow line numbers on -verify directives.","Allow line numbers on -verify directives."}, | ||
[j]={{ | [j]={{pb,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 // ...\n for (ParseHelper PH(S); !PH.Done();) {\n // ...\n if (!PH.Next(\"@\")) {\n // ...\n } else {\n // ...\n if (FoundPlus || PH.Next(\"-\")) {\n // ...\n } else if (PH.Next(Line)) {\n // ...\n } else if (PH.NextMarker()) {\n // ...\n } else if (PP && PH.Search(\":\")) {\n // ...\n if (Filename == \"*\") {\n // ...\n if (!PH.Next(\"*\")) {\n Diags.Report(Pos.getLocWithOffset(PH.C - PH.Begin), diag::err_verify_missing_line) << \"\'*\'\";"},{pb,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 // ...\n for (ParseHelper PH(S); !PH.Done();) {\n // ...\n if (!PH.Next(\"@\")) {\n // ...\n } else {\n // ...\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"]={ | ||
[ | [a]="cannot find start of regex (\'{{\') in A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot find start of regex (\'{{\') in %0", | ||
[ | [f]=t, | ||
[ | [h]="cannot find start of regex \\(\'\\{\\{\'\\) in (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"cda4b6dd007c",1386805250,"Change semantics of regex expectations in the diagnostic verifier","Change semantics of regex expectations in the diagnostic verifier"}, | [i]={"cda4b6dd007c",1386805250,"Change semantics of regex expectations in the diagnostic verifier","Change semantics of regex expectations in the diagnostic verifier"}, | ||
[j]={{ | [j]={{pb,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 // ...\n for (ParseHelper PH(S); !PH.Done();) {\n // ...\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"]={ | ||
[ | [a]="cannot find start (\'{{\') of expected A", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot find start (\'{{\') of expected %0", | ||
[ | [f]=t, | ||
[ | [h]="cannot find start \\(\'\\{\\{\'\\) of expected (.*?)", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"348185548eb2",1258168999, | [i]={"348185548eb2",1258168999,Rc,Rc}, | ||
[j]={{ | [j]={{pb,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 // ...\n for (ParseHelper PH(S); !PH.Done();) {\n // ...\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"]={ | ||
[ | [a]="no expected directives found: consider use of \'expected-no-diagnostics\'", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="no expected directives found: consider use of \'expected-no-diagnostics\'", | ||
[ | [f]=t, | ||
[ | [h]="no expected directives found\\: consider use of \'expected\\-no\\-diagnostics\'", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"0fea04509a64",1350650972,"Change VerifyDiagnosticConsumer so that it *must* contain at least one \"expected-*\" directive. As a...","Change VerifyDiagnosticConsumer so that it *must* contain at least one \"expected-*\" directive. As a result, for test-cases that are not expected to generate any diagnostics, an additional directive \"expected-no-diagnostics\" has been implemented which can then be included in such test-cases. This new directive may not be used in conjunction with any other \"expected-*\" directive."}, | [i]={"0fea04509a64",1350650972,"Change VerifyDiagnosticConsumer so that it *must* contain at least one \"expected-*\" directive. As a...","Change VerifyDiagnosticConsumer so that it *must* contain at least one \"expected-*\" directive. As a result, for test-cases that are not expected to generate any diagnostics, an additional directive \"expected-no-diagnostics\" has been implemented which can then be included in such test-cases. This new directive may not be used in conjunction with any other \"expected-*\" directive."}, | ||
[j]={{ | [j]={{pb,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"]={ | ||
[ | [a]="use of undefined marker \'A\'", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="use of undefined marker \'%0\'", | ||
[ | [f]=t, | ||
[ | [h]="use of undefined marker \'(.*?)\'", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"4e8144a0d140",1555130019,"[verify] Add support for location markers in directives.","[verify] Add support for location markers in directives."}, | [i]={"4e8144a0d140",1555130019,"[verify] Add support for location markers in directives.","[verify] Add support for location markers in directives."}, | ||
[j]={{ | [j]={{pb,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 // ...\n // Ensure we have no remaining deferred directives, and no\n // multiply-defined-and-used markers.\n void finalize() {\n // ...\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"]={ | ||
[ | [a]="qualifier \'const\' is needed for variables in address space \'A\'", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="qualifier \'const\' is needed for variables in address space \'%0\'", | ||
[ | [f]=t, | ||
[ | [h]="qualifier \'const\' is needed for variables in address space \'(.*?)\'", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"b714f73defc8",1611802254,"Frontend: Add -f{,no-}implicit-modules-uses-lock and -Rmodule-lock","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","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 // ...\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 // ...\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"]={ | ||
[ | [a]="ambiguous vftable component for A introduced via covariant thunks; this is an inherent limitation of the ABI", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="ambiguous vftable component for %0 introduced via covariant thunks; this is an inherent limitation of the ABI", | ||
[ | [f]=t, | ||
[ | [h]="ambiguous vftable component for (.*?) introduced via covariant thunks; this is an inherent limitation of the ABI", | ||
[ | [b]=r, | ||
[ | [g]="VTable ABI Issue", | ||
[i]={"70e6a00170a4",1430516145,"[MS ABI] Detect and diagnose vftables which cannot be created","[MS ABI] Detect and diagnose vftables which cannot be created"}, | [i]={"70e6a00170a4",1430516145,"[MS ABI] Detect and diagnose vftables which cannot be created","[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 // ...\n for (const FullPathTy &SpecificPath : FullPaths) {\n // ...\n if (MissingOverrides.empty()) {\n // ...\n } else {\n // ...\n Diags.Report(RD->getLocation(), diag::err_vftable_ambiguous_component) << RD;"}} | ||
}, | }, | ||
["err_virt_specifier_outside_class"]={ | ["err_virt_specifier_outside_class"]={ | ||
[ | [a]="\'A\' specifier is not allowed outside a class definition", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'%0\' specifier is not allowed outside a class definition", | ||
[ | [f]=t, | ||
[ | [h]="\'(.*?)\' specifier is not allowed outside a class definition", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={ | [i]={xb,1612659633,Z,Z}, | ||
[j]={{K,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());"}}, | [j]={{K,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 // ...\n if (D.isFunctionDeclarator()) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 2,765: | Line 2,764: | ||
}, | }, | ||
["err_virtual_in_union"]={ | ["err_virtual_in_union"]={ | ||
[ | [a]="unions cannot have virtual functions", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="unions cannot have virtual functions", | ||
[ | [f]=t, | ||
[ | [h]="unions cannot have virtual functions", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"43899d44c2f4",1435432735,"[Sema] Unions cannot have virtual functions.","[Sema] Unions cannot have virtual functions."}, | [i]={"43899d44c2f4",1435432735,"[Sema] Unions cannot have virtual functions.","[Sema] Unions cannot have virtual functions."}, | ||
[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);"}}, | [j]={{x,9756,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (getLangOpts().CPlusPlus) {\n // ...\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 // ...\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]={ | [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"} | ["clang/test/SemaCXX/virtual-function-in-union.cpp"]={"clang/test/SemaCXX/virtual-function-in-union.cpp:5:3: error: unions cannot have virtual functions"} | ||
Line 2,780: | Line 2,779: | ||
}, | }, | ||
["err_virtual_member_function_template"]={ | ["err_virtual_member_function_template"]={ | ||
[ | [a]="\'virtual\' cannot be specified on member function templates", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'virtual\' cannot be specified on member function templates", | ||
[ | [f]=t, | ||
[ | [h]="\'virtual\' cannot be specified on member function templates", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"e973899f4687",1295707436,"A member function template cannot be virtual.","A member function template cannot be virtual."}, | [i]={"e973899f4687",1295707436,"A member function template cannot be virtual.","A member function template cannot be virtual."}, | ||
[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());"}}, | [j]={{x,9889,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (getLangOpts().CPlusPlus) {\n // ...\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 // ...\n } else if (!CurContext->isRecord()) {\n // ...\n } else if (NewFD->getDescribedFunctionTemplate()) {\n // ...\n Diag(D.getDeclSpec().getVirtualSpecLoc(), diag::err_virtual_member_function_template) << FixItHint::CreateRemoval(D.getDeclSpec().getVirtualSpecLoc());"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,795: | Line 2,794: | ||
}, | }, | ||
["err_virtual_non_function"]={ | ["err_virtual_non_function"]={ | ||
[ | [a]="\'virtual\' can only appear on non-static member functions", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'virtual\' can only appear on non-static member functions", | ||
[ | [f]=t, | ||
[ | [h]="\'virtual\' can only appear on non\\-static member functions", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[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);"}}, | [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 // ...\n if (getLangOpts().CPlusPlus) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 2,810: | Line 2,809: | ||
}, | }, | ||
["err_virtual_out_of_class"]={ | ["err_virtual_out_of_class"]={ | ||
[ | [a]="\'virtual\' can only be specified inside the class definition", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'virtual\' can only be specified inside the class definition", | ||
[ | [f]=t, | ||
[ | [h]="\'virtual\' can only be specified inside the class definition", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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());"}}, | [j]={{x,9883,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (getLangOpts().CPlusPlus) {\n // ...\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 // ...\n } else if (!CurContext->isRecord()) {\n // ...\n Diag(D.getDeclSpec().getVirtualSpecLoc(), diag::err_virtual_out_of_class) << FixItHint::CreateRemoval(D.getDeclSpec().getVirtualSpecLoc());"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:18:1: error: \'virtual\' can only be specified inside the class definition"} | ["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:18:1: error: \'virtual\' can only be specified inside the class definition"} | ||
Line 2,825: | Line 2,824: | ||
}, | }, | ||
["err_vla_decl_has_extern_linkage"]={ | ["err_vla_decl_has_extern_linkage"]={ | ||
[ | [a]="variable length array declaration cannot have \'extern\' linkage", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="variable length array declaration cannot have \'extern\' linkage", | ||
[ | [f]=t, | ||
[ | [h]="variable length array declaration cannot have \'extern\' linkage", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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;"}}, | [j]={{x,8710,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n if ((isVM && NewVD->hasLinkage()) || (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {\n // ...\n if ((!FixedTInfo || FixedT.isNull()) && T->isVariableArrayType()) {\n // ...\n if (NewVD->isFileVarDecl())\n // ...\n else if (NewVD->isStaticLocal())\n // ...\n else\n Diag(NewVD->getLocation(), diag::err_vla_decl_has_extern_linkage) << SizeRange;"}}, | ||
[k]={ | [k]={ | ||
[ | [fc]={"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"]={ | ||
[ | [a]="variable length array declaration cannot have \'static\' storage duration", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="variable length array declaration cannot have \'static\' storage duration", | ||
[ | [f]=t, | ||
[ | [h]="variable length array declaration cannot have \'static\' storage duration", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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;"}}, | [j]={{x,8707,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n if ((isVM && NewVD->hasLinkage()) || (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {\n // ...\n if ((!FixedTInfo || FixedT.isNull()) && T->isVariableArrayType()) {\n // ...\n if (NewVD->isFileVarDecl())\n // ...\n else if (NewVD->isStaticLocal())\n Diag(NewVD->getLocation(), diag::err_vla_decl_has_static_storage) << SizeRange;"}}, | ||
[k]={ | [k]={ | ||
[ | [fc]={"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"]={ | ||
[ | [a]="variable length array declaration not allowed at file scope", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="variable length array declaration not allowed at file scope", | ||
[ | [f]=t, | ||
[ | [h]="variable length array declaration not allowed at file scope", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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;"}}, | [j]={{x,6728,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n // ...\n if (T->isVariablyModifiedType()) {\n // ...\n if (S->getFnParent() == nullptr) {\n // ...\n if (FixedTInfo) {\n // ...\n } else {\n if (SizeIsNegative)\n // ...\n else if (T->isVariableArrayType())\n Diag(NewTD->getLocation(), diag::err_vla_decl_in_file_scope);"},{x,8704,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n if ((isVM && NewVD->hasLinkage()) || (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {\n // ...\n if ((!FixedTInfo || FixedT.isNull()) && T->isVariableArrayType()) {\n // ...\n if (NewVD->isFileVarDecl())\n Diag(NewVD->getLocation(), diag::err_vla_decl_in_file_scope) << SizeRange;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,870: | Line 2,869: | ||
}, | }, | ||
["err_vla_in_sfinae"]={ | ["err_vla_in_sfinae"]={ | ||
[ | [a]="variable length array cannot be formed during template argument deduction", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="variable length array cannot be formed during template argument deduction", | ||
[ | [f]=t, | ||
[ | [h]="variable length array cannot be formed during template argument deduction", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"a09387df9ffb",1274644621,"It turns out that people love using VLAs in templates, too. Weaken our","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","It turns out that people love using VLAs in templates, too. Weaken our"}, | ||
[j]={{U,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;"}} | [j]={{U,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 // ...\n if (getLangOpts().OpenCL) {\n // ...\n } else if (getLangOpts().C99) {\n // ...\n } else if (isSFINAEContext()) {\n VLADiag = diag::err_vla_in_sfinae;"}} | ||
}, | }, | ||
["err_vla_unsupported"]={ | ["err_vla_unsupported"]={ | ||
[ | [a]="variable length arrays are not supported for ...", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="variable length arrays are not supported for %select{the current target|\'%1\'}0", | ||
[ | [f]=t, | ||
[ | [h]="variable length arrays are not supported for (?:the current target|\'(.*?)\')", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"87d44269885f",1511038846,"[OpenMP] Show error if VLAs are not supported","[OpenMP] Show error if VLAs are not supported"}, | [i]={"87d44269885f",1511038846,"[OpenMP] Show error if VLAs are not supported","[OpenMP] Show error if VLAs are not supported"}, | ||
[j]={{ | [j]={{ab,4990,"static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT, SourceLocation KeyLoc, QualType T) {\n // ...\n case UTT_IsBoundedArray:\n // ...\n Self.Diag(KeyLoc, diag::err_vla_unsupported) << 1 << tok::kw___is_bounded_array;"},{ab,4998,"static bool EvaluateUnaryTypeTrait(Sema &Self, TypeTrait UTT, SourceLocation KeyLoc, QualType T) {\n // ...\n case UTT_IsUnboundedArray:\n // ...\n Self.Diag(KeyLoc, diag::err_vla_unsupported) << 1 << tok::kw___is_unbounded_array;"},{U,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 // ...\n if (T->isVariableArrayType() && !Context.getTargetInfo().isVLASupported()) {\n // ...\n targetDiag(Loc, IsCUDADevice ? diag::err_cuda_vla : diag::err_vla_unsupported) << (IsCUDADevice ? CurrentCUDATarget() : 0);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,897: | Line 2,896: | ||
}, | }, | ||
["err_vm_decl_has_extern_linkage"]={ | ["err_vm_decl_has_extern_linkage"]={ | ||
[ | [a]="variably modified type declaration cannot have \'extern\' linkage", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="variably modified type declaration cannot have \'extern\' linkage", | ||
[ | [f]=t, | ||
[ | [h]="variably modified type declaration cannot have \'extern\' linkage", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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);"}}, | [j]={{x,8720,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n if ((isVM && NewVD->hasLinkage()) || (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {\n // ...\n if (!FixedTInfo) {\n if (NewVD->isFileVarDecl())\n // ...\n else\n Diag(NewVD->getLocation(), diag::err_vm_decl_has_extern_linkage);"}}, | ||
[k]={ | [k]={ | ||
[ | [fc]={"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"]={ | ||
[ | [a]="variably modified type declaration not allowed at file scope", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="variably modified type declaration not allowed at file scope", | ||
[ | [f]=t, | ||
[ | [h]="variably modified type declaration not allowed at file scope", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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);"}}, | [j]={{x,6733,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n // ...\n if (T->isVariablyModifiedType()) {\n // ...\n if (S->getFnParent() == nullptr) {\n // ...\n if (FixedTInfo) {\n // ...\n } else {\n if (SizeIsNegative)\n // ...\n else if (T->isVariableArrayType())\n // ...\n else if (Oversized.getBoolValue())\n // ...\n else\n Diag(NewTD->getLocation(), diag::err_vm_decl_in_file_scope);"},{x,8718,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n if ((isVM && NewVD->hasLinkage()) || (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {\n // ...\n if (!FixedTInfo) {\n if (NewVD->isFileVarDecl())\n Diag(NewVD->getLocation(), diag::err_vm_decl_in_file_scope);"}}, | ||
[k]={ | [k]={ | ||
[ | [fc]={"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"]={ | ||
[ | [a]="function declaration cannot have variably modified type", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="function declaration cannot have variably modified type", | ||
[ | [f]=t, | ||
[ | [h]="function declaration cannot have variably modified type", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"4f8b8ed2ac98",1242482280,"Missing change for r71941 (PR2044).","Missing change for r71941 (PR2044)."}, | [i]={"4f8b8ed2ac98",1242482280,"Missing change for r71941 (PR2044).","Missing change for r71941 (PR2044)."}, | ||
[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);"}}, | [j]={{x,10198,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\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]={ | [k]={ | ||
[ | [fc]={"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"]={ | ||
[ | [a]="\'void\' must be the first and only parameter if specified", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'void\' must be the first and only parameter if specified", | ||
[ | [f]=t, | ||
[ | [h]="\'void\' must be the first and only parameter if specified", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{U,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);"}}, | [j]={{U,5503,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n // ...\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n // ...\n case DeclaratorChunk::Function: {\n // ...\n // 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 // ...\n } else {\n // ...\n for (unsigned i = 0, e = FTI.NumParams; i != e; ++i) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 2,957: | Line 2,956: | ||
}, | }, | ||
["err_void_param_qualified"]={ | ["err_void_param_qualified"]={ | ||
[ | [a]="\'void\' as parameter must not have type qualifiers", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="\'void\' as parameter must not have type qualifiers", | ||
[ | [f]=t, | ||
[ | [h]="\'void\' as parameter must not have type qualifiers", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{U,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);"}}, | [j]={{U,5514,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n // ...\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n // ...\n case DeclaratorChunk::Function: {\n // ...\n // 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 // ...\n } else {\n // ...\n for (unsigned i = 0, e = FTI.NumParams; i != e; ++i) {\n // ...\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 // ...\n } else if (FTI.Params[i].Ident) {\n // ...\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]={ | [k]={ | ||
["clang/test/Sema/void_arg.c"]={"clang/test/Sema/void_arg.c:26:7: error: \'void\' as parameter must not have type qualifiers"} | ["clang/test/Sema/void_arg.c"]={"clang/test/Sema/void_arg.c:26:7: error: \'void\' as parameter must not have type qualifiers"} | ||
Line 2,972: | Line 2,971: | ||
}, | }, | ||
["err_volatile_comparison_operator"]={ | ["err_volatile_comparison_operator"]={ | ||
[ | [a]="defaulted comparison function must not be volatile", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="defaulted comparison function must not be volatile", | ||
[ | [f]=t, | ||
[ | [h]="defaulted comparison function must not be volatile", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{B,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);"}}, | [j]={{B,8742,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n // ...\n if (IsMethod) {\n // ...\n if (MD->isVolatile()) {\n Diag(MD->getLocation(), diag::err_volatile_comparison_operator);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 2,987: | Line 2,986: | ||
}, | }, | ||
["err_vsx_builtin_nonconstant_argument"]={ | ["err_vsx_builtin_nonconstant_argument"]={ | ||
[ | [a]="argument A to B must be a 2-bit unsigned literal (i.e. 0, 1, 2 or 3)", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="argument %0 to %1 must be a 2-bit unsigned literal (i.e. 0, 1, 2 or 3)", | ||
[ | [f]=t, | ||
[ | [h]="argument (.*?) to (.*?) must be a 2\\-bit unsigned literal \\(i\\.e\\. 0, 1, 2 or 3\\)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"bbc48e91643b",1495638812,"[PowerPC] Implement vec_xxpermdi builtin.","[PowerPC] Implement vec_xxpermdi builtin."}, | [i]={"bbc48e91643b",1495638812,"[PowerPC] Implement vec_xxpermdi builtin.","[PowerPC] Implement vec_xxpermdi builtin."}, | ||
[j]={{ | [j]={{eb,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 // ...\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]={ | [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)"} | ["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)"} | ||
Line 3,002: | Line 3,001: | ||
}, | }, | ||
["err_wasm_builtin_arg_must_be_integer_type"]={ | ["err_wasm_builtin_arg_must_be_integer_type"]={ | ||
[ | [a]="A argument must be an integer", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%ordinal0 argument must be an integer", | ||
[ | [f]=t, | ||
[ | [h]="(.*?) argument must be an integer", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{ | [j]={{eb,19017,"/// Checks the argument at the given index is an integer.\nstatic bool CheckWasmBuiltinArgIsInteger(Sema &S, CallExpr *E, unsigned ArgIndex) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 3,017: | Line 3,016: | ||
}, | }, | ||
["err_wasm_builtin_arg_must_be_table_type"]={ | ["err_wasm_builtin_arg_must_be_table_type"]={ | ||
[ | [a]="A argument must be a WebAssembly table", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%ordinal0 argument must be a WebAssembly table", | ||
[ | [f]=t, | ||
[ | [h]="(.*?) argument must be a WebAssembly table", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{ | [j]={{eb,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 // ...\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]={ | [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"} | ["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"} | ||
Line 3,032: | Line 3,031: | ||
}, | }, | ||
["err_wasm_builtin_arg_must_match_table_element_type"]={ | ["err_wasm_builtin_arg_must_match_table_element_type"]={ | ||
[ | [a]="A argument must match the element type of the WebAssembly table in the B argument", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%ordinal0 argument must match the element type of the WebAssembly table in the %ordinal1 argument", | ||
[ | [f]=t, | ||
[ | [h]="(.*?) argument must match the element type of the WebAssembly table in the (.*?) argument", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{ | [j]={{eb,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 // ...\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();"},{eb,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 // ...\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();"},{eb,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 // ...\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]={ | [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"} | ["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"} | ||
Line 3,047: | Line 3,046: | ||
}, | }, | ||
["err_wasm_ca_reference"]={ | ["err_wasm_ca_reference"]={ | ||
[ | [a]="cannot ... WebAssembly reference", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot %select{capture|take address of}0 WebAssembly reference", | ||
[ | [f]=t, | ||
[ | [h]="cannot (?:capture|take address of) WebAssembly reference", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[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;"}}, | [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 // ...\n // Cannot take the address of WebAssembly references or tables.\n if (Context.getTargetInfo().getTriple().isWasm()) {\n // ...\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 // ...\n if (BuildAndDiagnose && S.Context.getTargetInfo().getTriple().isWasm() && CaptureType.getNonReferenceType().isWebAssemblyReferenceType()) {\n S.Diag(Loc, diag::err_wasm_ca_reference) << 0;"}}, | ||
[k]={ | [k]={ | ||
[ | [Hb]={"clang/test/Sema/wasm-refs-and-tables.c:62:3: error: cannot take address of WebAssembly reference"} | ||
} | } | ||
}, | }, | ||
["err_wasm_cast_table"]={ | ["err_wasm_cast_table"]={ | ||
[ | [a]="cannot cast ... a WebAssembly table", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot cast %select{to|from}0 a WebAssembly table", | ||
[ | [f]=t, | ||
[ | [h]="cannot cast (?:to|from) a WebAssembly table", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{ | [j]={{Fb,2780,"void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle, bool ListInitialization) {\n // ...\n if (SrcType->isWebAssemblyTableType()) {\n Self.Diag(OpRange.getBegin(), diag::err_wasm_cast_table) << 1 << SrcExpr.get()->getSourceRange();"},{Fb,2962,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n if (SrcType->isWebAssemblyTableType()) {\n Self.Diag(OpRange.getBegin(), diag::err_wasm_cast_table) << 1 << SrcExpr.get()->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
[ | [Hb]={"clang/test/Sema/wasm-refs-and-tables.c:101:3: error: cannot cast from a WebAssembly table"} | ||
} | } | ||
}, | }, | ||
["err_wasm_funcref_not_wasm"]={ | ["err_wasm_funcref_not_wasm"]={ | ||
[ | [a]="invalid use of \'__funcref\' keyword outside the WebAssembly triple", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="invalid use of \'__funcref\' keyword outside the WebAssembly triple", | ||
[ | [f]=t, | ||
[ | [h]="invalid use of \'__funcref\' keyword outside the WebAssembly triple", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{K,863,"void Parser::ParseWebAssemblyFuncrefTypeAttribute(ParsedAttributes &attrs) {\n if (!getTargetInfo().getTriple().isWasm()) {\n Diag(StartLoc, diag::err_wasm_funcref_not_wasm);"}}, | [j]={{K,863,"void Parser::ParseWebAssemblyFuncrefTypeAttribute(ParsedAttributes &attrs) {\n // ...\n if (!getTargetInfo().getTriple().isWasm()) {\n // ...\n Diag(StartLoc, diag::err_wasm_funcref_not_wasm);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,092: | Line 3,091: | ||
}, | }, | ||
["err_wasm_reference_pr"]={ | ["err_wasm_reference_pr"]={ | ||
[ | [a]="... to WebAssembly reference type is not allowed", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%select{pointer|reference}0 to WebAssembly reference type is not allowed", | ||
[ | [f]=t, | ||
[ | [h]="(?:pointer|reference) to WebAssembly reference type is not allowed", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{U,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;"},{U,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;"}}, | [j]={{U,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 // ...\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;"},{U,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 // ...\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]={ | [k]={ | ||
[ | [Hb]={"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"} | ||
} | } | ||
}, | }, | ||
["err_wasm_reftype_exception_spec"]={ | ["err_wasm_reftype_exception_spec"]={ | ||
[ | [a]="WebAssembly reference type not allowed in exception specification", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="WebAssembly reference type not allowed in exception specification", | ||
[ | [f]=t, | ||
[ | [h]="WebAssembly reference type not allowed in exception specification", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{ | [j]={{Ib,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 // ...\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"]={ | ||
[ | [a]="multi-dimensional arrays of WebAssembly references are not allowed", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="multi-dimensional arrays of WebAssembly references are not allowed", | ||
[ | [f]=t, | ||
[ | [h]="multi\\-dimensional arrays of WebAssembly references are not allowed", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{U,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);"}}, | [j]={{U,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 // ...\n // Multi-dimensional arrays of WebAssembly references are not allowed.\n if (Context.getTargetInfo().getTriple().isWasm() && T->isArrayType()) {\n // ...\n if (ATy && ATy->getElementType().isWebAssemblyReferenceType()) {\n Diag(Loc, diag::err_wasm_reftype_multidimensional_array);"}}, | ||
[k]={ | [k]={ | ||
[ | [Hb]={"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"]={ | ||
[ | [a]="cannot ... a WebAssembly reference type", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot %select{throw|catch}0 a WebAssembly reference type", | ||
[ | [f]=t, | ||
[ | [h]="cannot (?:throw|catch) a WebAssembly reference type", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{B,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;"},{ | [j]={{B,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 // ...\n if (!Invalid && BaseType.isWebAssemblyReferenceType()) {\n Diag(Loc, diag::err_wasm_reftype_tc) << 1;"},{ab,988,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n // ...\n // Cannot throw WebAssembly reference type.\n if (Ty.isWebAssemblyReferenceType()) {\n Diag(ThrowLoc, diag::err_wasm_reftype_tc) << 0 << E->getSourceRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,149: | Line 3,148: | ||
}, | }, | ||
["err_wasm_table_art"]={ | ["err_wasm_table_art"]={ | ||
[ | [a]="cannot ... a WebAssembly table", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot %select{assign|return|throw|subscript}0 a WebAssembly table", | ||
[ | [f]=t, | ||
[ | [h]="cannot (?:assign|return|throw|subscript) a WebAssembly table", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{ | [j]={{eb,12965,"void Sema::CheckReturnValExpr(Expr *RetValExp, QualType lhsType, SourceLocation ReturnLoc, bool isObjCMethod, const AttrVec *Attrs, const FunctionDecl *FD) {\n // ...\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 // ...\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 // ...\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 // ...\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;"},{ab,994,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n // ...\n // Cannot throw WebAssembly table.\n if (isPointer && Ty.isWebAssemblyReferenceType()) {\n Diag(ThrowLoc, diag::err_wasm_table_art) << 2 << E->getSourceRange();"},{Wb,3991,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n // ...\n if (RetValExp) {\n // ...\n if (ATy && ATy->getElementType().isWebAssemblyReferenceType()) {\n Diag(ReturnLoc, diag::err_wasm_table_art) << 1;"}}, | ||
[k]={ | [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"} | ["clang/test/SemaCXX/wasm-refs-and-tables.cpp"]={"clang/test/SemaCXX/wasm-refs-and-tables.cpp:29:3: error: cannot return a WebAssembly table"} | ||
Line 3,164: | Line 3,163: | ||
}, | }, | ||
["err_wasm_table_as_function_parameter"]={ | ["err_wasm_table_as_function_parameter"]={ | ||
[ | [a]="cannot use WebAssembly table as a function parameter", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot use WebAssembly table as a function parameter", | ||
[ | [f]=t, | ||
[ | [h]="cannot use WebAssembly table as a function parameter", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{ | [j]={{eb,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 // ...\n for (ParmVarDecl *Param : Parameters) {\n // ...\n if (!Param->isInvalidDecl() && Param->getOriginalType()->isWebAssemblyTableType()) {\n // ...\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 // ...\n for (const ParmVarDecl *Param : NewFD->parameters()) {\n // ...\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 // ...\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));"},{U,3034,"QualType Sema::BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes, SourceLocation Loc, DeclarationName Entity, const FunctionProtoType::ExtProtoInfo &EPI) {\n // ...\n for (unsigned Idx = 0, Cnt = ParamTypes.size(); Idx < Cnt; ++Idx) {\n // ...\n if (ParamType->isVoidType()) {\n // ...\n } else if (ParamType->isHalfType() && !getLangOpts().NativeHalfArgsAndReturns && !Context.getTargetInfo().allowHalfArgsAndReturns()) {\n // ...\n } else if (ParamType->isWebAssemblyTableType()) {\n Diag(Loc, diag::err_wasm_table_as_function_parameter);"}}, | ||
[k]={ | [k]={ | ||
[ | [Hb]={"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"]={ | ||
[ | [a]="cannot use a WebAssembly table within a branch of a conditional expression", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot use a WebAssembly table within a branch of a conditional expression", | ||
[ | [f]=t, | ||
[ | [h]="cannot use a WebAssembly table within a branch of a conditional expression", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[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();"},{ | [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 // ...\n if (LHSTy->isWebAssemblyTableType() || RHSTy->isWebAssemblyTableType()) {\n Diag(QuestionLoc, diag::err_wasm_table_conditional_expression) << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{ab,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 // ...\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]={ | [k]={ | ||
[ | [Hb]={"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"]={ | ||
[ | [a]="WebAssembly table cannot be declared within a function", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="WebAssembly table cannot be declared within a function", | ||
[ | [f]=t, | ||
[ | [h]="WebAssembly table cannot be declared within a function", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[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);"}}, | [j]={{x,8659,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\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]={ | [k]={ | ||
[ | [Hb]={"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"]={ | ||
[ | [a]="invalid application of \'A\' to WebAssembly table", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="invalid application of \'%0\' to WebAssembly table", | ||
[ | [f]=t, | ||
[ | [h]="invalid application of \'(.*?)\' to WebAssembly table", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[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);"}}, | [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 // ...\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 // ...\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]={ | [k]={ | ||
[ | [Hb]={"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"} | ||
} | } | ||
}, | }, | ||
["err_wasm_table_must_be_static"]={ | ["err_wasm_table_must_be_static"]={ | ||
[ | [a]="WebAssembly table must be static", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="WebAssembly table must be static", | ||
[ | [f]=t, | ||
[ | [h]="WebAssembly table must be static", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[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);"}}, | [j]={{x,8664,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n // WebAssembly tables must be static with a zero length and can\'t be\n // declared within functions.\n if (T->isWebAssemblyTableType()) {\n // ...\n if (NewVD->getStorageClass() != SC_Static) {\n Diag(NewVD->getLocation(), diag::err_wasm_table_must_be_static);"}}, | ||
[k]={ | [k]={ | ||
[ | [Hb]={"clang/test/Sema/wasm-refs-and-tables.c:18:15: error: WebAssembly table must be static"} | ||
} | } | ||
}, | }, | ||
["err_wasm_table_pr"]={ | ["err_wasm_table_pr"]={ | ||
[ | [a]="cannot form a ... to a WebAssembly table", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="cannot form a %select{pointer|reference}0 to a WebAssembly table", | ||
[ | [f]=t, | ||
[ | [h]="cannot form a (?:pointer|reference) to a WebAssembly table", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[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();"},{U,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;"},{U,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;"}}, | [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 // ...\n // Cannot take the address of WebAssembly references or tables.\n if (Context.getTargetInfo().getTriple().isWasm()) {\n // ...\n if (OpTy->isWebAssemblyTableType()) {\n Diag(OpLoc, diag::err_wasm_table_pr) << 1 << OrigOp.get()->getSourceRange();"},{U,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 // ...\n // In WebAssembly, pointers to reference types and pointers to tables are\n // illegal.\n if (getASTContext().getTargetInfo().getTriple().isWasm()) {\n // ...\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;"},{U,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 // ...\n if (T->isWebAssemblyTableType()) {\n Diag(Loc, diag::err_wasm_table_pr) << 1;"}}, | ||
[k]={ | [k]={ | ||
[ | [Hb]={"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"} | ||
} | } | ||
}, | }, | ||
["err_weak_property"]={ | ["err_weak_property"]={ | ||
[ | [a]="existing instance variable A for __weak property B must be __weak", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="existing instance variable %1 for __weak property %0 must be __weak", | ||
[ | [f]=t, | ||
[ | [h]="existing instance variable (.*?) for __weak property (.*?) must be __weak", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"f881267db9a9",1480718311,"Mass-rename the handful of error_* diagnostics to err_*.","Mass-rename the handful of error_* diagnostics to err_*."}, | [i]={"f881267db9a9",1480718311,"Mass-rename the handful of error_* diagnostics to err_*.","Mass-rename the handful of error_* diagnostics to err_*."}, | ||
[j]={{ | [j]={{fd,771,"static void checkARCPropertyImpl(Sema &S, SourceLocation propertyImplLoc, ObjCPropertyDecl *property, ObjCIvarDecl *ivar) {\n // ...\n case Qualifiers::OCL_Weak:\n S.Diag(ivar->getLocation(), diag::err_weak_property) << property->getDeclName() << ivar->getDeclName();"},{fd,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 // ...\n // Check that we have a valid, previously declared ivar for @synthesize\n if (Synthesize) {\n // ...\n // Check that type of property and its ivar are type compatible.\n if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 3,269: | Line 3,268: | ||
}, | }, | ||
["err_while_loop_outside_of_a_function"]={ | ["err_while_loop_outside_of_a_function"]={ | ||
[ | [a]="while loop outside of a function", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="while loop outside of a function", | ||
[ | [f]=t, | ||
[ | [h]="while loop outside of a function", | ||
[ | [b]=r, | ||
[ | [g]=y, | ||
[i]={"edaae251cca0",1657642332,"[clang] better error message for while loops outside of control flow","[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","[clang] better error message for while loops outside of control flow"}, | ||
[j]={{K,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);"}}, | [j]={{K,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 // ...\n if (Tok.is(tok::l_paren)) {\n // ...\n } else if (D.mayOmitIdentifier()) {\n // ...\n } else {\n // ...\n if (D.getContext() == DeclaratorContext::Member) {\n // ...\n } else {\n if (Tok.getKind() == tok::TokenKind::kw_while) {\n Diag(Tok, diag::err_while_loop_outside_of_a_function);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,284: | Line 3,283: | ||
}, | }, | ||
["err_wrong_sampler_addressspace"]={ | ["err_wrong_sampler_addressspace"]={ | ||
[ | [a]="sampler type cannot be used with the __local and __global address space qualifiers", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="sampler type cannot be used with the __local and __global address space qualifiers", | ||
[ | [f]=t, | ||
[ | [h]="sampler type cannot be used with the __local and __global address space qualifiers", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions.","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.","Add OpenCL samplers as Clang builtin types and check sampler related restrictions."}, | ||
[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);"}}, | [j]={{x,7384,"/// Returns true if there hasn\'t been any invalid type diagnosed.\nstatic bool diagnoseOpenCLTypes(Sema &Se, VarDecl *NewVD) {\n // ...\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]={ | [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"} | ["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"} | ||
Line 3,299: | Line 3,298: | ||
}, | }, | ||
["err_x86_builtin_invalid_rounding"]={ | ["err_x86_builtin_invalid_rounding"]={ | ||
[ | [a]="invalid rounding argument", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="invalid rounding argument", | ||
[ | [f]=t, | ||
[ | [h]="invalid rounding argument", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"a7e253e8fb06",1474606111,"[AVX-512] Add initial support for checking rounding mode arguments of builtins.","[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.","[AVX-512] Add initial support for checking rounding mode arguments of builtins."}, | ||
[j]={{ | [j]={{eb,5790,"// Check if the rounding mode is legal.\nbool Sema::CheckX86BuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_invalid_rounding) << Arg->getSourceRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,314: | Line 3,313: | ||
}, | }, | ||
["err_x86_builtin_invalid_scale"]={ | ["err_x86_builtin_invalid_scale"]={ | ||
[ | [a]="scale argument must be 1, 2, 4, or 8", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="scale argument must be 1, 2, 4, or 8", | ||
[ | [f]=t, | ||
[ | [h]="scale argument must be 1, 2, 4, or 8", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"df5beb2d6f83",1489425410,"[X86] Add checking of the scale argument to scatter/gather builtins","[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","[X86] Add checking of the scale argument to scatter/gather builtins"}, | ||
[j]={{ | [j]={{eb,5893,"// Check if the gather/scatter scale is legal.\nbool Sema::CheckX86BuiltinGatherScatterScale(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_invalid_scale) << Arg->getSourceRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,329: | Line 3,328: | ||
}, | }, | ||
["err_x86_builtin_tile_arg_duplicate"]={ | ["err_x86_builtin_tile_arg_duplicate"]={ | ||
[ | [a]="tile arguments must refer to different tiles", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="tile arguments must refer to different tiles", | ||
[ | [f]=t, | ||
[ | [h]="tile arguments must refer to different tiles", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata"}, | [i]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata"}, | ||
[j]={{ | [j]={{eb,5926,"bool Sema::CheckX86BuiltinTileDuplicate(CallExpr *TheCall, ArrayRef<int> ArgNums) {\n // ...\n for (int ArgNum : ArgNums) {\n // ...\n if (ArgValues.test(ArgExtValue))\n return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_tile_arg_duplicate) << TheCall->getArg(ArgNum)->getSourceRange();"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,344: | Line 3,343: | ||
}, | }, | ||
["err_zero_version"]={ | ["err_zero_version"]={ | ||
[ | [a]="version number must have non-zero major, minor, or sub-minor version", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="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]=r, | ||
[ | [g]=y, | ||
[i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify","Implement a new \'availability\' attribute, that allows one to specify"}, | [i]={"20b2ebd78586",1300841403,"Implement a new \'availability\' attribute, that allows one to specify","Implement a new \'availability\' attribute, that allows one to specify"}, | ||
[j]={{K,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);"},{K,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);"}} | [j]={{K,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 // ...\n if (AfterMajor == ActualLength) {\n // ...\n // We only had a single version component.\n if (Major == 0) {\n Diag(Tok, diag::err_zero_version);"},{K,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 // ...\n if (AfterMinor == ActualLength) {\n // ...\n // We had major.minor.\n if (Major == 0 && Minor == 0) {\n Diag(Tok, diag::err_zero_version);"}} | ||
}, | }, | ||
["error_cconv_unsupported"]={ | ["error_cconv_unsupported"]={ | ||
[ | [a]="A calling convention is not supported ...", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="%0 calling convention is not supported %select{for this target|on variadic function|on constructor/destructor|on builtin function}1", | ||
[ | [f]=t, | ||
[ | [h]="(.*?) calling convention is not supported (?:for this target|on variadic function|on constructor\\/destructor|on builtin function)", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"f4038e75d202",1563572314,"Disallow most calling convention attributes on PS4","Disallow most calling convention attributes on PS4"}, | [i]={"f4038e75d202",1563572314,"Disallow most calling convention attributes on PS4","Disallow most calling convention attributes on PS4"}, | ||
[j]={{ | [j]={{bc,5448,"bool Sema::CheckCallingConvAttr(const ParsedAttr &Attrs, CallingConv &CC, const FunctionDecl *FD) {\n // ...\n case TargetInfo::CCCR_Error:\n Diag(Attrs.getLoc(), diag::error_cconv_unsupported) << Attrs << (int)CallingConventionIgnoredReason::ForThisTarget;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,371: | Line 3,370: | ||
}, | }, | ||
["error_duplicate_asm_operand_name"]={ | ["error_duplicate_asm_operand_name"]={ | ||
[ | [a]="duplicate use of asm operand name \"A\"", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="duplicate use of asm operand name \"%0\"", | ||
[ | [f]=t, | ||
[ | [h]="duplicate use of asm operand name \"(.*?)\"", | ||
[ | [b]=r, | ||
[ | [g]="Inline Assembly Issue", | ||
[i]={"954ec09aed4f",1559178346,"clang support gnu asm goto.","clang support gnu asm goto."}, | [i]={"954ec09aed4f",1559178346,"clang support gnu asm goto.","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 // ...\n if (Found != NamedOperandList.end()) {\n Diag((Found + 1)->second->getBeginLoc(), diag::error_duplicate_asm_operand_name) << (Found + 1)->first;"}}, | ||
[k]={ | [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\""} | ["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\""} | ||
Line 3,386: | Line 3,385: | ||
}, | }, | ||
["error_inoutput_conflict_with_clobber"]={ | ["error_inoutput_conflict_with_clobber"]={ | ||
[ | [a]="asm-specifier for input or output variable conflicts with asm clobber list", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="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]=r, | ||
[ | [g]=r, | ||
[i]={"c42fd03bf854",1482755022,"[inline-asm]No error for conflict between inputs\\outputs and clobber list","[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","[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 // ...\n if (ConstraintLoc.isValid())\n targetDiag(ConstraintLoc, diag::error_inoutput_conflict_with_clobber);"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 3,401: | Line 3,400: | ||
}, | }, | ||
["error_subscript_overload"]={ | ["error_subscript_overload"]={ | ||
[ | [a]="overloaded A cannot have ... parameter before C++23", | ||
[c]=s, | [c]=s, | ||
[ | [d]=u, | ||
[ | [e]="overloaded %0 cannot have %select{no|a defaulted|more than one}1 parameter before C++23", | ||
[ | [f]=t, | ||
[ | [h]="overloaded (.*?) cannot have (?:no|a defaulted|more than one) parameter before C\\+\\+23", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | [i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | ||
[j]={{B,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();"},{B,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);"}}, | [j]={{B,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 // ...\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 // ...\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();"},{B,16244,"#include \"clang/Basic/OperatorKinds.def\"\n // ...\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]={ | [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"} | ["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"} | ||
Line 3,416: | Line 3,415: | ||
}, | }, | ||
["escaped_newline_block_comment_end"]={ | ["escaped_newline_block_comment_end"]={ | ||
[ | [a]="escaped newline between */ characters at block comment end [-Wcomment]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={mb,vb,xc,"comments",sb}, | ||
[ | [l]=xc, | ||
[ | [e]="escaped newline between */ characters at block comment end", | ||
[ | [f]=p, | ||
[ | [h]="escaped newline between \\*\\/ characters at block comment end", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wcomment[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{db,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);"}}, | [j]={{db,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 3,433: | Line 3,432: | ||
}, | }, | ||
["ext_abstract_pack_declarator_parens"]={ | ["ext_abstract_pack_declarator_parens"]={ | ||
[ | [a]="ISO C++11 requires a parenthesized pack declaration to have a name [-Wanonymous-pack-parens]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"anonymous-pack-parens"}, | ||
[ | [l]="anonymous-pack-parens", | ||
[ | [e]="ISO C++11 requires a parenthesized pack declaration to have a name", | ||
[ | [f]=p, | ||
[ | [h]="ISO C\\+\\+11 requires a parenthesized pack declaration to have a name", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wanonymous\\-pack\\-parens[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"b19337fbe474",1361391567,"PR15311: Finish implementation of the suggested resolution of core issue 1488,","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,","PR15311: Finish implementation of the suggested resolution of core issue 1488,"}, | ||
[j]={{K,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);"}}, | [j]={{K,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 // ...\n if (Tok.is(tok::l_paren)) {\n // ...\n } else if (D.mayOmitIdentifier()) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 3,450: | Line 3,449: | ||
}, | }, | ||
["ext_adl_only_template_id"]={ | ["ext_adl_only_template_id"]={ | ||
[ | [a]="use of function template name with no prior declaration in function call with explicit template arguments is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="use of function template name with no prior declaration in function call with explicit template arguments is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="use of function template name with no prior declaration in function call with explicit template arguments is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=n, | ||
[i]={"b23c5e8c3df8",1557372687,"[c++20] Implement P0846R0: allow (ADL-only) calls to template-ids whose","[c++20] Implement P0846R0: allow (ADL-only) calls to template-ids whose"}, | [i]={"b23c5e8c3df8",1557372687,"[c++20] Implement P0846R0: allow (ADL-only) calls to template-ids whose","[c++20] Implement P0846R0: allow (ADL-only) calls to template-ids whose"}, | ||
[j]={{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();"}}, | [j]={{z,7080,"ExprResult Sema::ActOnCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig) {\n // ...\n // Diagnose uses of the C++20 \"ADL-only template-id call\" feature in earlier\n // language modes.\n if (auto *ULE = dyn_cast<UnresolvedLookupExpr>(Fn)) {\n if (ULE->hasExplicitTemplateArgs() && ULE->decls_begin() == ULE->decls_end()) {\n Diag(Fn->getExprLoc(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_adl_only_template_id : diag::ext_adl_only_template_id) << ULE->getName();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,467: | Line 3,466: | ||
}, | }, | ||
["ext_aggregate_init_not_constant"]={ | ["ext_aggregate_init_not_constant"]={ | ||
[ | [a]="initializer for aggregate is not a compile-time constant [-Wc99-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={X,v}, | ||
[ | [l]=X, | ||
[ | [e]="initializer for aggregate is not a compile-time constant", | ||
[ | [f]=p, | ||
[ | [h]="initializer for aggregate is not a compile\\-time constant", | ||
[ | [b]=Jb, | ||
[ | [g]=n, | ||
[i]={"1aac546d3108",1374490706,"Implement the part of C89 6.5.7 p3 requiring a constant initializer list","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","Implement the part of C89 6.5.7 p3 requiring a constant initializer list"}, | ||
[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();"}}, | [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 // ...\n if (VDecl->isLocalVarDecl()) {\n // Don\'t check the initializer if the declaration is malformed.\n if (VDecl->isInvalidDecl()) {\n // ...\n } else if (VDecl->getType().getAddressSpace() == LangAS::opencl_constant) {\n // ...\n } else if (getLangOpts().CPlusPlus) {\n // ...\n } else if (VDecl->getStorageClass() == SC_Static) {\n // ...\n } else if (!getLangOpts().C99 && VDecl->getType()->isAggregateType() && isa<InitListExpr>(Init)) {\n // ...\n if (!Init->isConstantInitializer(Context, false, &Culprit)) {\n Diag(Culprit->getExprLoc(), diag::ext_aggregate_init_not_constant) << Culprit->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
[ | [Sc]={"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"]={ | ||
[ | [a]="alias declarations are a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="alias declarations are a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="alias declarations are a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=y, | ||
[i]={"dda56e4b4a9c",1302877477,"Support for C++11 (non-template) alias declarations.","Support for C++11 (non-template) alias declarations."}, | [i]={"dda56e4b4a9c",1302877477,"Support for C++11 (non-template) alias declarations.","Support for C++11 (non-template) alias declarations."}, | ||
[j]={{O,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);"}}, | [j]={{O,879,"Decl *Parser::ParseAliasDeclarationAfterDeclarator(const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, UsingDeclarator &D, SourceLocation &DeclEnd, AccessSpecifier AS, ParsedAttributes &Attrs, Decl **OwnedType) {\n // ...\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_alias_declaration : diag::ext_alias_declaration);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,502: | Line 3,501: | ||
}, | }, | ||
["ext_alias_in_init_statement"]={ | ["ext_alias_in_init_statement"]={ | ||
[ | [a]="alias declaration in this context is a C++23 extension [-Wc++23-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={ib,Nb}, | ||
[ | [l]=ib, | ||
[ | [e]="alias declaration in this context is a C++23 extension", | ||
[ | [f]=p, | ||
[ | [h]="alias declaration in this context is a C\\+\\+23 extension", | ||
[ | [b]=Lb, | ||
[ | [g]=y, | ||
[i]={ | [i]={xb,1612659633,Z,Z}, | ||
[j]={{ | [j]={{Ab,2003,"Parser::DeclGroupPtrTy Parser::ParseAliasDeclarationInInitStatement(DeclaratorContext Context, ParsedAttributes &Attrs) {\n // ...\n Diag(DeclStart, !getLangOpts().CPlusPlus23 ? diag::ext_alias_in_init_statement : diag::warn_cxx20_alias_in_init_statement) << SourceRange(DeclStart, DeclEnd);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,519: | Line 3,518: | ||
}, | }, | ||
["ext_alignof_expr"]={ | ["ext_alignof_expr"]={ | ||
[ | [a]="A applied to an expression is a GNU extension [-Wgnu-alignof-expression]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={N,"gnu-alignof-expression"}, | ||
[ | [l]="gnu-alignof-expression", | ||
[ | [e]="%0 applied to an expression is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="(.*?) applied to an expression is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-alignof\\-expression[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"7dd5fe5ce60c",1359454698,"Produce a diagnostic if alignas is applied to an expression. Neither C11 nor","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","Produce a diagnostic if alignas is applied to an expression. Neither C11 nor"}, | ||
[j]={{ | [j]={{wb,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 // ...\n if (OpTok.isOneOf(tok::kw_alignof, tok::kw__Alignof))\n Diag(OpTok, diag::ext_alignof_expr) << OpTok.getIdentifierInfo();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,536: | Line 3,535: | ||
}, | }, | ||
["ext_anonymous_record_with_anonymous_type"]={ | ["ext_anonymous_record_with_anonymous_type"]={ | ||
[ | [a]="anonymous types declared in an anonymous ... are an extension [-Wnested-anon-types]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"nested-anon-types",v}, | ||
[ | [l]="nested-anon-types", | ||
[ | [e]="anonymous types declared in an anonymous %select{struct|union}0 are an extension", | ||
[ | [f]=p, | ||
[ | [h]="anonymous types declared in an anonymous (?:struct|union) are an extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnested\\-anon\\-types[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"254d2666e435",1359334445,"Add a -pedantic warning: an anonymous union within an anonymous union is not","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","Add a -pedantic warning: an anonymous union within an anonymous union is not"}, | ||
[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();"}}, | [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 // ...\n if (getLangOpts().CPlusPlus) {\n // ...\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 // ...\n if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n // ...\n } else if (Mem->isImplicit()) {\n // ...\n } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n // ...\n } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n if (!MemRecord->isAnonymousStructOrUnion() && MemRecord->getDeclName()) {\n // ...\n } else {\n // ...\n Diag(MemRecord->getLocation(), diag::ext_anonymous_record_with_anonymous_type) << Record->isUnion();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,554: | Line 3,553: | ||
}, | }, | ||
["ext_anonymous_record_with_type"]={ | ["ext_anonymous_record_with_type"]={ | ||
[ | [a]="types declared in an anonymous ... are a Microsoft extension [-Wmicrosoft-anon-tag]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={J,"microsoft-anon-tag",v}, | ||
[ | [l]="microsoft-anon-tag", | ||
[ | [e]="types declared in an anonymous %select{struct|union}0 are a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="types declared in an anonymous (?:struct|union) are a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-anon\\-tag[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"4ad4b5863947",1283945545,"Allow type definitions inside anonymous struct/union in Microsoft mode.","Allow type definitions inside anonymous struct/union in Microsoft mode."}, | [i]={"4ad4b5863947",1283945545,"Allow type definitions inside anonymous struct/union in Microsoft mode.","Allow type definitions inside anonymous struct/union in Microsoft mode."}, | ||
[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();"}}, | [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 // ...\n if (getLangOpts().CPlusPlus) {\n // ...\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 // ...\n if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n // ...\n } else if (Mem->isImplicit()) {\n // ...\n } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n // ...\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 // ...\n if (getLangOpts().CPlusPlus) {\n // ...\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 // ...\n if (auto *FD = dyn_cast<FieldDecl>(Mem)) {\n // ...\n } else if (Mem->isImplicit()) {\n // ...\n } else if (isa<TagDecl>(Mem) && Mem->getDeclContext() != Record) {\n // ...\n } else if (auto *MemRecord = dyn_cast<RecordDecl>(Mem)) {\n // ...\n } else if (isa<AccessSpecDecl>(Mem)) {\n // ...\n } else if (isa<StaticAssertDecl>(Mem)) {\n // ...\n } else {\n // ...\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]={ | [k]={ | ||
[ | [ad]={"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"]={ | ||
[ | [a]="anonymous ... cannot be \'A\' [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="anonymous %select{struct|union}0 cannot be \'%1\'", | ||
[ | [f]=p, | ||
[ | [h]="anonymous (?:struct|union) cannot be \'(.*?)\'", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={"0f8bc97abd6d",1304982333,"Ignore const/volatile/restrict qualifiers on anonymous structs and","Ignore const/volatile/restrict qualifiers on anonymous structs and"}, | [i]={"0f8bc97abd6d",1304982333,"Ignore const/volatile/restrict qualifiers on anonymous structs and","Ignore const/volatile/restrict qualifiers on anonymous structs and"}, | ||
[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());"}}, | [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 // ...\n if (getLangOpts().CPlusPlus) {\n // ...\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 // ...\n if (getLangOpts().CPlusPlus) {\n // ...\n // Ignore const/volatile/restrict qualifiers.\n if (DS.getTypeQualifiers()) {\n // ...\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 // ...\n if (getLangOpts().CPlusPlus) {\n // ...\n // Ignore const/volatile/restrict qualifiers.\n if (DS.getTypeQualifiers()) {\n // ...\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 // ...\n if (getLangOpts().CPlusPlus) {\n // ...\n // Ignore const/volatile/restrict qualifiers.\n if (DS.getTypeQualifiers()) {\n // ...\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 // ...\n if (getLangOpts().CPlusPlus) {\n // ...\n // Ignore const/volatile/restrict qualifiers.\n if (DS.getTypeQualifiers()) {\n // ...\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]={ | [k]={ | ||
["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:198:5: warning: anonymous union cannot be \'const\' [-Wpedantic]"} | ["clang/test/SemaCXX/anonymous-union.cpp"]={"clang/test/SemaCXX/anonymous-union.cpp:198:5: warning: anonymous union cannot be \'const\' [-Wpedantic]"} | ||
Line 3,590: | Line 3,589: | ||
}, | }, | ||
["ext_anonymous_union"]={ | ["ext_anonymous_union"]={ | ||
[ | [a]="anonymous unions are a C11 extension [-Wc11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={Yb,v}, | ||
[ | [l]=Yb, | ||
[ | [e]="anonymous unions are a C11 extension", | ||
[ | [f]=p, | ||
[ | [h]="anonymous unions are a C11 extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc11\\-extensions[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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);"}}, | [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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 3,608: | Line 3,607: | ||
}, | }, | ||
["ext_array_init_copy"]={ | ["ext_array_init_copy"]={ | ||
[ | [a]="initialization of an array of type A from a compound literal of type B is a GNU extension [-Wgnu-compound-literal-initializer]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-compound-literal-initializer",v}, | ||
[ | [l]="gnu-compound-literal-initializer", | ||
[ | [e]="initialization of an array %diff{of type $ from a compound literal of type $|from a compound literal}0,1 is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="initialization of an array (?:of type (.*?) from a compound literal of type (.*?)|from a compound literal) is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-compound\\-literal\\-initializer[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"e2f943b5cb44",1298399391,"Implement the GNU C extension which permits the initialization of an","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","Implement the GNU C extension which permits the initialization of an"}, | ||
[j]={{W,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();"}}, | [j]={{W,9223,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n // ...\n for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n // ...\n case SK_GNUArrayInit:\n // ...\n S.Diag(Kind.getLocation(), diag::ext_array_init_copy) << Step->Type << CurInit.get()->getType() << CurInit.get()->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,626: | Line 3,625: | ||
}, | }, | ||
["ext_array_init_parens"]={ | ["ext_array_init_parens"]={ | ||
[ | [a]="parenthesized initialization of a member array is a GNU extension [-Wgnu-array-member-paren-init]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"gnu-array-member-paren-init"}, | ||
[ | [l]="gnu-array-member-paren-init", | ||
[ | [e]="parenthesized initialization of a member array is a GNU extension", | ||
[ | [f]=S, | ||
[ | [h]="parenthesized initialization of a member array is a GNU extension", | ||
[ | [b]=" \\[[^\\]]*\\-Wgnu\\-array\\-member\\-paren\\-init[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"ebeed415870b",1329345489,"Support GCC\'s bug^Wextension allowing class array members to be initalized by a","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","Support GCC\'s bug^Wextension allowing class array members to be initalized by a"}, | ||
[j]={{W,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();"}}, | [j]={{W,9249,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n // ...\n for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n // ...\n case SK_ParenthesizedArrayInit:\n // ...\n S.Diag(Kind.getLocation(), diag::ext_array_init_parens) << CurInit.get()->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,643: | Line 3,642: | ||
}, | }, | ||
["ext_array_size_conversion"]={ | ["ext_array_size_conversion"]={ | ||
[ | [a]="implicit conversion from array size expression of type A to ... type B is a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={V,H,v}, | ||
[ | [l]=H, | ||
[ | [e]="implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="implicit conversion from array size expression of type (.*?) to (?:integral|enumeration) type (.*?) is a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=n, | ||
[i]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class","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","Implement C++ DR299, which allows an implicit conversion from a class"}, | ||
[j]={{ | [j]={{ab,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 // ...\n if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n // ...\n if (getLangOpts().CPlusPlus14) {\n // ...\n } else {\n class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n // ...\n SemaDiagnosticBuilder diagnoseConversion(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_array_size_conversion : diag::ext_array_size_conversion) << T << ConvTy->isEnumeralType() << ConvTy; }"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,661: | Line 3,660: | ||
}, | }, | ||
["ext_auto_new_list_init"]={ | ["ext_auto_new_list_init"]={ | ||
[ | [a]="ISO C++ standards before C++17 do not allow new expression for type A to use list-initialization [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={Q,kb,v}, | ||
[ | [l]=Q, | ||
[ | [e]="ISO C++ standards before C++17 do not allow new expression for type %0 to use list-initialization", | ||
[ | [f]=p, | ||
[ | [h]="ISO C\\+\\+ standards before C\\+\\+17 do not allow new expression for type (.*?) to use list\\-initialization", | ||
[ | [b]=lb, | ||
[ | [g]=n, | ||
[i]={"00c9dfdfd094",1513016994,"P0620 follow-up: deducing `auto` from braced-init-list in new expr","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","P0620 follow-up: deducing `auto` from braced-init-list in new expr"}, | ||
[j]={{ | [j]={{ab,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 // ...\n if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n // ...\n } else if (Deduced && !Deduced->isDeduced()) {\n // ...\n if (Braced && !getLangOpts().CPlusPlus17)\n Diag(Initializer->getBeginLoc(), diag::ext_auto_new_list_init) << AllocType << TypeRange;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,679: | Line 3,678: | ||
}, | }, | ||
["ext_auto_storage_class"]={ | ["ext_auto_storage_class"]={ | ||
[ | [a]="\'auto\' storage class specifier is not permitted in C++11, and will not be supported in future releases [-Wauto-storage-class]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"auto-storage-class"}, | ||
[ | [l]="auto-storage-class", | ||
[ | [e]="\'auto\' storage class specifier is not permitted in C++11, and will not be supported in future releases", | ||
[ | [f]=p, | ||
[ | [h]="\'auto\' storage class specifier is not permitted in C\\+\\+11, and will not be supported in future releases", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wauto\\-storage\\-class[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ...","PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ExtWarn, and produce a -Wc++0x-compat warning in C++98 mode when auto is used as a storage class."}, | [i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ...","PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ExtWarn, and produce a -Wc++0x-compat warning in C++98 mode when auto is used as a storage class."}, | ||
[j]={{K,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());"}}, | [j]={{K,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 // ...\n while (true) {\n // ...\n case tok::kw_auto:\n if (getLangOpts().CPlusPlus11) {\n if (isKnownToBeTypeSpecifier(GetLookAheadToken(1))) {\n // ...\n if (!isInvalid)\n Diag(Tok, diag::ext_auto_storage_class) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,696: | Line 3,695: | ||
}, | }, | ||
["ext_auto_type"]={ | ["ext_auto_type"]={ | ||
[ | [a]="\'__auto_type\' is a GNU extension [-Wgnu-auto-type]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-auto-type",v}, | ||
[ | [l]="gnu-auto-type", | ||
[ | [e]="\'__auto_type\' is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="\'__auto_type\' is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-auto\\-type[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:","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:","Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:"}, | ||
[j]={{K,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);"}}, | [j]={{K,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 // ...\n while (true) {\n // ...\n case tok::kw___auto_type:\n Diag(Tok, diag::ext_auto_type);"}}, | ||
[k]={ | [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]"} | ["clang/test/Sema/auto-type.c"]={"clang/test/Sema/auto-type.c:3:1: warning: \'__auto_type\' is a GNU extension [-Wgnu-auto-type]"} | ||
Line 3,714: | Line 3,713: | ||
}, | }, | ||
["ext_auto_type_specifier"]={ | ["ext_auto_type_specifier"]={ | ||
[ | [a]="\'auto\' type specifier is a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="\'auto\' type specifier is a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="\'auto\' type specifier is a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=n, | ||
[i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ...","PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ExtWarn, and produce a -Wc++0x-compat warning in C++98 mode when auto is used as a storage class."}, | [i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ...","PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ExtWarn, and produce a -Wc++0x-compat warning in C++98 mode when auto is used as a storage class."}, | ||
[j]={{ | [j]={{Gc,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 3,731: | Line 3,730: | ||
}, | }, | ||
["ext_bad_cxx_cast_qualifiers_away_incoherent"]={ | ["ext_bad_cxx_cast_qualifiers_away_incoherent"]={ | ||
[ | [a]="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]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"cast-qual-unrelated"}, | ||
[ | [l]="cast-qual-unrelated", | ||
[ | [e]="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", | ||
[ | [f]=p, | ||
[ | [h]="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", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wcast\\-qual\\-unrelated[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"f276e2dc4618",1531263875,"Fix determination of whether a reinterpret_cast casts away constness.","Fix determination of whether a reinterpret_cast casts away constness."}, | [i]={"f276e2dc4618",1531263875,"Fix determination of whether a reinterpret_cast casts away constness.","Fix determination of whether a reinterpret_cast casts away constness."}, | ||
[j]={{ | [j]={{Fb,771,"static TryCastResult getCastAwayConstnessCastKind(CastAwayConstnessKind CACK, unsigned &DiagID) {\n // ...\n case CastAwayConstnessKind::CACK_Incoherent:\n DiagID = diag::ext_bad_cxx_cast_qualifiers_away_incoherent;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,748: | Line 3,747: | ||
}, | }, | ||
["ext_binary_literal"]={ | ["ext_binary_literal"]={ | ||
[ | [a]="binary integer literals are a GNU extension [-Wgnu-binary-literal]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"binary-literal",N,"gnu-binary-literal",v}, | ||
[ | [l]="gnu-binary-literal", | ||
[ | [e]="binary integer literals are a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="binary integer literals are a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-binary\\-literal[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{gb,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);"}}, | [j]={{gb,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 // ...\n // Handle simple binary numbers 0b01010\n if ((c1 == \'b\' || c1 == \'B\') && (s[1] == \'0\' || s[1] == \'1\')) {\n // ...\n Diags.Report(TokLoc, LangOpts.CPlusPlus14 ? diag::warn_cxx11_compat_binary_literal : LangOpts.CPlusPlus ? diag::ext_binary_literal_cxx14 : diag::ext_binary_literal);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,766: | Line 3,765: | ||
}, | }, | ||
["ext_binary_literal_cxx14"]={ | ["ext_binary_literal_cxx14"]={ | ||
[ | [a]="binary integer literals are a C++14 extension [-Wc++14-binary-literal]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"binary-literal","c++14-binary-literal",nb,Ob,v}, | ||
[ | [l]="c++14-binary-literal", | ||
[ | [e]="binary integer literals are a C++14 extension", | ||
[ | [f]=p, | ||
[ | [h]="binary integer literals are a C\\+\\+14 extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+14\\-binary\\-literal[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={" | [i]={"c5c27f2a1f26",1366404440,"Note that we support (and in fact have supported since the dawn of time itself)","Note that we support (and in fact have supported since the dawn of time itself)"}, | ||
[j]={{gb,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);"}}, | [j]={{gb,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 // ...\n // Handle simple binary numbers 0b01010\n if ((c1 == \'b\' || c1 == \'B\') && (s[1] == \'0\' || s[1] == \'1\')) {\n // ...\n Diags.Report(TokLoc, LangOpts.CPlusPlus14 ? diag::warn_cxx11_compat_binary_literal : LangOpts.CPlusPlus ? diag::ext_binary_literal_cxx14 : diag::ext_binary_literal);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,784: | Line 3,783: | ||
}, | }, | ||
["ext_bit_int"]={ | ["ext_bit_int"]={ | ||
[ | [a]="\'_BitInt\' in ... is a Clang extension [-Wbit-int-extension]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"bit-int-extension",v}, | ||
[ | [l]="bit-int-extension", | ||
[ | [e]="\'_BitInt\' in %select{C17 and earlier|C++}0 is a Clang extension", | ||
[ | [f]=p, | ||
[ | [h]="\'_BitInt\' in (?:C17 and earlier|C\\+\\+) is a Clang extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wbit\\-int\\-extension[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={ | [i]={xb,1612659633,Z,Z}, | ||
[j]={{K,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;"}}, | [j]={{K,7962,"void Parser::DiagnoseBitIntUse(const Token &Tok) {\n // ...\n if (Tok.is(tok::kw__ExtInt)) {\n // ...\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 // ...\n else\n Diag(Loc, diag::ext_bit_int) << getLangOpts().CPlusPlus;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,802: | Line 3,801: | ||
}, | }, | ||
["ext_bitfield_member_init"]={ | ["ext_bitfield_member_init"]={ | ||
[ | [a]="default member initializer for bit-field is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="default member initializer for bit-field is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="default member initializer for bit\\-field is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=y, | ||
[i]={"6b8e3c02ca44",1503880094,"[c++2a] P0683R1: Permit default member initializers for bit-fields.","[c++2a] P0683R1: Permit default member initializers for bit-fields."}, | [i]={"6b8e3c02ca44",1503880094,"[c++2a] P0683R1: Permit default member initializers for bit-fields.","[c++2a] P0683R1: Permit default member initializers for bit-fields."}, | ||
[j]={{O,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);"}}, | [j]={{O,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 // ...\n while (true) {\n // ...\n if (Tok.isOneOf(tok::equal, tok::l_brace) && PureSpecLoc.isInvalid()) {\n // DRXXXX: Anonymous bit-fields cannot have a brace-or-equal-initializer.\n if (BitfieldSize.isUsable() && !DeclaratorInfo.hasName()) {\n // ...\n } else if (DeclaratorInfo.isDeclarationOfFunction()) {\n // ...\n } else if (DeclaratorInfo.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static && DeclaratorInfo.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef && !DS.isFriendSpecified()) {\n // It\'s a default member initializer.\n if (BitfieldSize.get())\n Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_bitfield_member_init : diag::ext_bitfield_member_init);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,819: | Line 3,818: | ||
}, | }, | ||
["ext_c11_anonymous_struct"]={ | ["ext_c11_anonymous_struct"]={ | ||
[ | [a]="anonymous structs are a C11 extension [-Wc11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={Yb,v}, | ||
[ | [l]=Yb, | ||
[ | [e]="anonymous structs are a C11 extension", | ||
[ | [f]=p, | ||
[ | [h]="anonymous structs are a C11 extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc11\\-extensions[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"b64a1fa65ca1",1328284024,"Don\'t warn about anonymous struct/union in C11.","Don\'t warn about anonymous struct/union in C11."}, | [i]={"b64a1fa65ca1",1328284024,"Don\'t warn about anonymous struct/union in C11.","Don\'t warn about anonymous struct/union in C11."}, | ||
[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);"}}, | [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 // ...\n // Diagnose whether this anonymous struct/union is an extension.\n if (Record->isUnion() && !getLangOpts().CPlusPlus && !getLangOpts().C11)\n // ...\n else if (!Record->isUnion() && getLangOpts().CPlusPlus)\n // ...\n else if (!Record->isUnion() && !getLangOpts().C11)\n Diag(Record->getLocation(), diag::ext_c11_anonymous_struct);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,837: | Line 3,836: | ||
}, | }, | ||
["ext_c11_feature"]={ | ["ext_c11_feature"]={ | ||
[ | [a]="\'A\' is a C11 extension [-Wc11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={Yb,v}, | ||
[ | [l]=Yb, | ||
[ | [e]="\'%0\' is a C11 extension", | ||
[ | [f]=p, | ||
[ | [h]="\'(.*?)\' is a C11 extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc11\\-extensions[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"774bd6ef1c93",1566848647,"Diagnose use of _Thread_local as an extension when not in C11 mode.","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.","Diagnose use of _Thread_local as an extension when not in C11 mode."}, | ||
[j]={{K,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();"},{K,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 | [j]={{K,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 // ...\n while (true) {\n // ...\n case tok::kw__Thread_local:\n if (!getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"},{K,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 // ...\n while (true) {\n // ...\n case tok::kw__Noreturn:\n if (!getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"},{K,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 // ...\n while (true) {\n // ...\n // alignment-specifier\n case tok::kw__Alignas:\n if (!getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"},{K,4409,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\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();"},{K,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 // ...\n while (true) {\n // ...\n case tok::kw__Atomic:\n // ...\n if (!getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"},{O,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 // ...\n if (Tok.is(tok::kw__Static_assert) && !getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"},{wb,1437,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n case tok::kw__Alignof: // unary-expression: \'_Alignof\' \'(\' type-name \')\'\n if (!getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"},{wb,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 // ...\n if (!getLangOpts().C11)\n Diag(Tok, diag::ext_c11_feature) << Tok.getName();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaOpenCLCXX/restricted.clcpp"]={"clang/test/SemaOpenCLCXX/restricted.clcpp:32:12: warning: \'_Thread_local\' is a C11 extension [-Wc11-extensions]"} | ["clang/test/SemaOpenCLCXX/restricted.clcpp"]={"clang/test/SemaOpenCLCXX/restricted.clcpp:32:12: warning: \'_Thread_local\' is a C11 extension [-Wc11-extensions]"} | ||
Line 3,855: | Line 3,854: | ||
}, | }, | ||
["ext_c2x_bitint_suffix"]={ | ["ext_c2x_bitint_suffix"]={ | ||
[ | [a]="\'_BitInt\' suffix for literals is a C2x extension [-Wc2x-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={tb}, | ||
[ | [l]=tb, | ||
[ | [e]="\'_BitInt\' suffix for literals is a C2x extension", | ||
[ | [f]=p, | ||
[ | [h]="\'_BitInt\' suffix for literals is a C2x extension", | ||
[ | [b]=dc, | ||
[ | [g]=r, | ||
[i]={"8cba72177dcd",1647264157,"Implement literal suffixes for _BitInt","Implement literal suffixes for _BitInt"}, | [i]={"8cba72177dcd",1647264157,"Implement literal suffixes for _BitInt","Implement literal suffixes for _BitInt"}, | ||
[j]={{ | [j]={{Oc,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 // ...\n case tok::numeric_constant: {\n // ...\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 // ...\n if (Literal.isFixedPointLiteral()) {\n // ...\n } else if (Literal.isFloatingLiteral()) {\n // ...\n } else if (!Literal.isIntegerLiteral()) {\n // ...\n } else {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 3,872: | Line 3,871: | ||
}, | }, | ||
["ext_c2x_pp_directive"]={ | ["ext_c2x_pp_directive"]={ | ||
[ | [a]="use of a \'#...\' directive is a C2x extension [-Wc2x-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={tb}, | ||
[ | [l]=tb, | ||
[ | [e]="use of a \'#%select{<BUG IF SEEN>|elifdef|elifndef}0\' directive is a C2x extension", | ||
[ | [f]=p, | ||
[ | [h]="use of a \'\\#(?:elifdef|elifndef)\' directive is a C2x extension", | ||
[ | [b]=dc, | ||
[ | [g]=D, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{ | [j]={{bb,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 // ...\n while (true) {\n // ...\n if (Directive.startswith(\"if\")) {\n // ...\n } else if (Directive[0] == \'e\') {\n // ...\n if (Sub == \"ndif\") { // \"endif\"\n // ...\n } else if (Sub == \"lse\") { // \"else\".\n // ...\n } else if (Sub == \"lif\") { // \"elif\".\n // ...\n } else if (Sub == \"lifdef\" || // \"elifdef\"\n // ...\n if (LangOpts.CPlusPlus)\n // ...\n else\n DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"},{bb,3458,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n // ...\n case PED_Elifdef:\n case PED_Elifndef:\n // ...\n if (LangOpts.CPlusPlus)\n // ...\n else\n DiagID = LangOpts.C2x ? diag::warn_c2x_compat_pp_directive : diag::ext_c2x_pp_directive;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,889: | Line 3,888: | ||
}, | }, | ||
["ext_c99_array_usage"]={ | ["ext_c99_array_usage"]={ | ||
[ | [a]="...array size ...is a C99 feature [-Wc99-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={X,v}, | ||
[ | [l]=X, | ||
[ | [e]="%select{qualifier in |static |}0array size %select{||\'[*] \'}0is a C99 feature", | ||
[ | [f]=p, | ||
[ | [h]="(?:qualifier in |static |)array size (?:||\'\\[\\*\\] \')is a C99 feature", | ||
[ | [b]=Jb, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[j]={{U,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;"}}, | [j]={{U,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 // ...\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]={ | [k]={ | ||
[ | [Sc]={"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]"} | ||
} | } | ||
}, | }, | ||
["ext_c99_compound_literal"]={ | ["ext_c99_compound_literal"]={ | ||
[ | [a]="compound literals are a C99-specific feature [-Wc99-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={X,v}, | ||
[ | [l]=X, | ||
[ | [e]="compound literals are a C99-specific feature", | ||
[ | [f]=p, | ||
[ | [h]="compound literals are a C99\\-specific feature", | ||
[ | [b]=Jb, | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{wb,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 // ...\n if (!getLangOpts().C99) // Compound literals don\'t exist in C90.\n Diag(LParenLoc, diag::ext_c99_compound_literal);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,925: | Line 3,924: | ||
}, | }, | ||
["ext_c99_feature"]={ | ["ext_c99_feature"]={ | ||
[ | [a]="\'A\' is a C99 extension [-Wc99-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={X,v}, | ||
[ | [l]=X, | ||
[ | [e]="\'%0\' is a C99 extension", | ||
[ | [f]=p, | ||
[ | [h]="\'(.*?)\' is a C99 extension", | ||
[ | [b]=Jb, | ||
[ | [g]=y, | ||
[i]={"9fac4a5d3522",1566933324,"Diagnose both _Complex and _Imaginary as C99 extensions.","Diagnose both _Complex and _Imaginary as C99 extensions."}, | [i]={"9fac4a5d3522",1566933324,"Diagnose both _Complex and _Imaginary as C99 extensions.","Diagnose both _Complex and _Imaginary as C99 extensions."}, | ||
[j]={{K,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();"},{K,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();"},{K,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();"}}, | [j]={{K,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 // ...\n while (true) {\n // ...\n case tok::kw__Complex:\n if (!getLangOpts().C99)\n Diag(Tok, diag::ext_c99_feature) << Tok.getName();"},{K,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 // ...\n while (true) {\n // ...\n case tok::kw__Imaginary:\n if (!getLangOpts().C99)\n Diag(Tok, diag::ext_c99_feature) << Tok.getName();"},{K,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 // ...\n while (true) {\n // ...\n case tok::kw__Bool:\n if (Tok.is(tok::kw__Bool) && !getLangOpts().C99)\n Diag(Tok, diag::ext_c99_feature) << Tok.getName();"}}, | ||
[k]={ | [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]"} | ["clang/test/SemaCXX/complex-init-list.cpp"]={"clang/test/SemaCXX/complex-init-list.cpp:13:1: warning: \'_Complex\' is a C99 extension [-Wc99-extensions]"} | ||
Line 3,943: | Line 3,942: | ||
}, | }, | ||
["ext_c99_flexible_array_member"]={ | ["ext_c99_flexible_array_member"]={ | ||
[ | [a]="flexible array members are a C99 feature [-Wc99-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={X,v}, | ||
[ | [l]=X, | ||
[ | [e]="flexible array members are a C99 feature", | ||
[ | [f]=p, | ||
[ | [h]="flexible array members are a C99 feature", | ||
[ | [b]=Jb, | ||
[ | [g]=n, | ||
[i]={"07518f249f91",1331900137,"Warn on flexible array members when in C89 mode, with -pedantic.","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.","Warn on flexible array members when in C89 mode, with -pedantic."}, | ||
[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();"}}, | [j]={{x,18823,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // ...\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n // ...\n if (FDTy->isFunctionType()) {\n // ...\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n if (Record) {\n // ...\n if (!getLangOpts().C99)\n Diag(FD->getLocation(), diag::ext_c99_flexible_array_member) << FD->getDeclName() << Record->getTagKind();"}}, | ||
[k]={ | [k]={ | ||
[ | [Sc]={"clang/test/Sema/c89.c:89:18: warning: flexible array members are a C99 feature [-Wc99-extensions]"} | ||
} | } | ||
}, | }, | ||
["ext_c99_longlong"]={ | ["ext_c99_longlong"]={ | ||
[ | [a]="\'long long\' is an extension when C99 mode is not enabled [-Wlong-long]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"long-long",v}, | ||
[ | [l]="long-long", | ||
[ | [e]="\'long long\' is an extension when C99 mode is not enabled", | ||
[ | [f]=p, | ||
[ | [h]="\'long long\' is an extension when C99 mode is not enabled", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wlong\\-long[^\\]]*\\]", | ||
[ | [g]=r, | ||
[i]={"1cd230570394",1348510761,"Change the wording of the extension warning from","Change the wording of the extension warning from"}, | [i]={"1cd230570394",1348510761,"Change the wording of the extension warning from","Change the wording of the extension warning from"}, | ||
[j]={{ | [j]={{Oc,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 // ...\n case tok::numeric_constant: {\n // ...\n // \'long long\' is a C99 or C++11 feature.\n if (!PP.getLangOpts().C99 && Literal.isLongLong) {\n if (PP.getLangOpts().CPlusPlus)\n // ...\n else\n PP.Diag(PeekTok, diag::ext_c99_longlong);"},{z,4237,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n // ...\n if (Literal.isFixedPointLiteral()) {\n // ...\n } else if (Literal.isFloatingLiteral()) {\n // ...\n } else if (!Literal.isIntegerLiteral()) {\n // ...\n } else {\n // ...\n if (Literal.GetIntegerValue(ResultVal)) {\n // ...\n } else {\n // ...\n // Check long long if needed.\n if (Ty.isNull() && !Literal.isSizeT) {\n // ...\n // Does it fit in a unsigned long long?\n if (ResultVal.isIntN(LongLongSize)) {\n // ...\n // \'long long\' is a C99 or C++11 feature, whether the literal\n // explicitly specified \'long long\' or we needed the extra width.\n if (getLangOpts().CPlusPlus)\n // ...\n else if (!getLangOpts().C99)\n Diag(Tok.getLocation(), diag::ext_c99_longlong);"},{U,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 // ...\n case DeclSpec::TST_int: {\n if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n // ...\n case TypeSpecifierWidth::LongLong:\n // ...\n // \'long long\' is a C99 or C++11 feature.\n if (!S.getLangOpts().C99) {\n if (S.getLangOpts().CPlusPlus)\n // ...\n else\n S.Diag(DS.getTypeSpecWidthLoc(), diag::ext_c99_longlong);"},{U,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 // ...\n case DeclSpec::TST_int: {\n if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n // ...\n } else {\n // ...\n case TypeSpecifierWidth::LongLong:\n // ...\n // \'long long\' is a C99 or C++11 feature.\n if (!S.getLangOpts().C99) {\n if (S.getLangOpts().CPlusPlus)\n // ...\n else\n S.Diag(DS.getTypeSpecWidthLoc(), diag::ext_c99_longlong);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,979: | Line 3,978: | ||
}, | }, | ||
["ext_c99_variable_decl_in_for_loop"]={ | ["ext_c99_variable_decl_in_for_loop"]={ | ||
[ | [a]="variable declaration in for loop is a C99-specific feature [-Wc99-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={X,v}, | ||
[ | [l]=X, | ||
[ | [e]="variable declaration in for loop is a C99-specific feature", | ||
[ | [f]=p, | ||
[ | [h]="variable declaration in for loop is a C99\\-specific feature", | ||
[ | [b]=Jb, | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{Bb,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 // ...\n // Parse the first part of the for specifier.\n if (Tok.is(tok::semi)) { // for (;\n // ...\n } else if (getLangOpts().CPlusPlus && Tok.is(tok::identifier) && isForRangeIdentifier()) {\n // ...\n } else if (isForInitDeclaration()) { // for (int X = 4;\n // ...\n // Parse declaration, which eats the \';\'.\n if (!C99orCXXorObjC) { // Use of C99-style for loops in C90 mode?\n Diag(Tok, diag::ext_c99_variable_decl_in_for_loop);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 3,997: | Line 3,996: | ||
}, | }, | ||
["ext_c99_whitespace_required_after_macro_name"]={ | ["ext_c99_whitespace_required_after_macro_name"]={ | ||
[ | [a]="ISO C99 requires whitespace after the macro name [-Wc99-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={X}, | ||
[ | [l]=X, | ||
[ | [e]="ISO C99 requires whitespace after the macro name", | ||
[ | [f]=p, | ||
[ | [h]="ISO C99 requires whitespace after the macro name", | ||
[ | [b]=Jb, | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{bb,2857,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // ...\n // If this is a function-like macro definition, parse the argument list,\n // marking each of the identifiers as being used as macro arguments. Also,\n // check other constraints on the first token of the macro body.\n if (Tok.is(tok::eod)) {\n // ...\n } else if (Tok.hasLeadingSpace()) {\n // ...\n } else if (Tok.is(tok::l_paren)) {\n // ...\n } else if (LangOpts.C99 || LangOpts.CPlusPlus11) {\n // ...\n Diag(Tok, diag::ext_c99_whitespace_required_after_macro_name);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,014: | Line 4,013: | ||
}, | }, | ||
["ext_c_empty_initializer"]={ | ["ext_c_empty_initializer"]={ | ||
[ | [a]="use of an empty initializer is a C2x extension [-Wc2x-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={tb,v}, | ||
[ | [l]=tb, | ||
[ | [e]="use of an empty initializer is a C2x extension", | ||
[ | [f]=p, | ||
[ | [h]="use of an empty initializer is a C2x extension", | ||
[ | [b]=dc, | ||
[ | [g]=y, | ||
[i]={"5d8aaad4452f",1680549555,"[C2x] Implement support for empty brace initialization (WG14 N2900 and WG14 N3011)","[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)","[C2x] Implement support for empty brace initialization (WG14 N2900 and WG14 N3011)"}, | ||
[j]={{ | [j]={{Zc,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 // ...\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]={ | [k]={ | ||
[ | [fc]={"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"]={ | ||
[ | [a]="label at end of compound statement is a C2x extension [-Wc2x-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={tb}, | ||
[ | [l]=tb, | ||
[ | [e]="label at end of compound statement is a C2x extension", | ||
[ | [f]=p, | ||
[ | [h]="label at end of compound statement is a C2x extension", | ||
[ | [b]=dc, | ||
[ | [g]=y, | ||
[i]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl.","[HLSL] Support cbuffer/tbuffer for hlsl."}, | [i]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl.","[HLSL] Support cbuffer/tbuffer for hlsl."}, | ||
[j]={{ | [j]={{Bb,1081,"void Parser::DiagnoseLabelAtEndOfCompoundStatement() {\n if (getLangOpts().CPlusPlus) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 4,049: | Line 4,048: | ||
}, | }, | ||
["ext_c_nullptr"]={ | ["ext_c_nullptr"]={ | ||
[ | [a]="\'nullptr\' is a C2x extension [-Wc2x-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={tb,v}, | ||
[ | [l]=tb, | ||
[ | [e]="\'nullptr\' is a C2x extension", | ||
[ | [f]=p, | ||
[ | [h]="\'nullptr\' is a C2x extension", | ||
[ | [b]=dc, | ||
[ | [g]=y, | ||
[i]={"3a31970ee2af",1665756274,"[C2x] Implement support for nullptr and nullptr_t","[C2x] Implement support for nullptr and nullptr_t"}, | [i]={"3a31970ee2af",1665756274,"[C2x] Implement support for nullptr and nullptr_t","[C2x] Implement support for nullptr and nullptr_t"}, | ||
[j]={{ | [j]={{wb,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 // ...\n case tok::kw_nullptr:\n if (getLangOpts().CPlusPlus)\n // ...\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"]={ | ||
[ | [a]="\'_Static_assert\' with no message is a C2x extension [-Wc2x-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={tb}, | ||
[ | [l]=tb, | ||
[ | [e]="\'_Static_assert\' with no message is a C2x extension", | ||
[ | [f]=p, | ||
[ | [h]="\'_Static_assert\' with no message is a C2x extension", | ||
[ | [b]=dc, | ||
[ | [g]=y, | ||
[i]={ | [i]={xb,1612659633,Z,Z}, | ||
[j]={{O,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;"}}, | [j]={{O,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 // ...\n if (Tok.is(tok::r_paren)) {\n // ...\n if (getLangOpts().CPlusPlus17)\n // ...\n else if (getLangOpts().CPlusPlus)\n // ...\n else if (getLangOpts().C2x)\n // ...\n else\n DiagVal = diag::ext_c_static_assert_no_message;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,081: | Line 4,080: | ||
}, | }, | ||
["ext_cannot_use_trivial_abi"]={ | ["ext_cannot_use_trivial_abi"]={ | ||
[ | [a]="\'trivial_abi\' cannot be applied to A [-Wignored-attributes]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"attributes","ignored-attributes"}, | ||
[ | [l]="ignored-attributes", | ||
[ | [e]="\'trivial_abi\' cannot be applied to %0", | ||
[ | [f]=p, | ||
[ | [h]="\'trivial_abi\' cannot be applied to (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wignored\\-attributes[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"02914dc1278c",1517862202,"Add support for attribute \'trivial_abi\'.","Add support for attribute \'trivial_abi\'."}, | [i]={"02914dc1278c",1517862202,"Add support for attribute \'trivial_abi\'.","Add support for attribute \'trivial_abi\'."}, | ||
[j]={{B,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;"}}, | [j]={{B,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;"}}, | ||
Line 4,098: | Line 4,097: | ||
}, | }, | ||
["ext_capture_binding"]={ | ["ext_capture_binding"]={ | ||
[ | [a]="captured structured bindings are a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="captured structured bindings are a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="captured structured bindings are a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=n, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[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;"}}, | [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 // ...\n if (isa<BindingDecl>(Var)) {\n if (!IsLambda || !S.getLangOpts().CPlusPlus) {\n // ...\n } else if (Diagnose && S.getLangOpts().CPlusPlus) {\n S.Diag(Loc, S.LangOpts.CPlusPlus20 ? diag::warn_cxx17_compat_capture_binding : diag::ext_capture_binding) << Var;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,115: | Line 4,114: | ||
}, | }, | ||
["ext_cast_fn_obj"]={ | ["ext_cast_fn_obj"]={ | ||
[ | [a]="cast between pointer-to-function and pointer-to-object is an extension [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="cast between pointer-to-function and pointer-to-object is an extension", | ||
[ | [f]=p, | ||
[ | [h]="cast between pointer\\-to\\-function and pointer\\-to\\-object is an extension", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve...","Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conversions, like vectors, but allows conversions via constructors and conversion operators."}, | [i]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve...","Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conversions, like vectors, but allows conversions via constructors and conversion operators."}, | ||
[j]={{ | [j]={{Fb,2559,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n // ...\n if (SrcType->isFunctionPointerType()) {\n // ...\n Self.Diag(OpRange.getBegin(), Self.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_cast_fn_obj : diag::ext_cast_fn_obj) << OpRange;"},{Fb,2568,"static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, bool CStyle, SourceRange OpRange, unsigned &msg, CastKind &Kind) {\n // ...\n if (DestType->isFunctionPointerType()) {\n // ...\n Self.Diag(OpRange.getBegin(), Self.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_cast_fn_obj : diag::ext_cast_fn_obj) << OpRange;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,133: | Line 4,132: | ||
}, | }, | ||
["ext_cce_narrowing"]={ | ["ext_cce_narrowing"]={ | ||
[ | [a]="... ... [-Wc++11-narrowing]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={zc,"c++0x-narrowing",gc,hc,Rb,"narrowing"}, | ||
[ | [l]=Rb, | ||
[ | [e]="%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", | ||
[ | [f]=S, | ||
[ | [h]="(?: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 (.*?))", | ||
[ | [b]=" \\[[^\\]]*\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"16e1b07597f3",1384224105,Vb,Vb}, | [i]={"16e1b07597f3",1384224105,Vb,Vb}, | ||
[j]={{Qb,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;"},{Qb,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;"}}, | [j]={{Qb,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 // ...\n case NK_Constant_Narrowing:\n // ...\n S.Diag(From->getBeginLoc(), diag::ext_cce_narrowing) << CCE << /*Constant*/ 1 << PreNarrowingValue.getAsString(S.Context, PreNarrowingType) << T;"},{Qb,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 // ...\n case NK_Type_Narrowing:\n // ...\n S.Diag(From->getBeginLoc(), diag::ext_cce_narrowing) << CCE << /*Constant*/ 0 << From->getType() << T;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,150: | Line 4,149: | ||
}, | }, | ||
["ext_charize_microsoft"]={ | ["ext_charize_microsoft"]={ | ||
[ | [a]="charizing operator #@ is a Microsoft extension [-Wmicrosoft-charize]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={J,"microsoft-charize",v}, | ||
[ | [l]="microsoft-charize", | ||
[ | [e]="charizing operator #@ is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="charizing operator \\#@ is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-charize[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"a08713ce8610",1318888073,"Move about 20 random diagnostics under -W flags. Patch by Ahmed Charles!","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!","Move about 20 random diagnostics under -W flags. Patch by Ahmed Charles!"}, | ||
[j]={{db,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);"},{db,4262,"LexStart:\n case \'#\':\n if (Char == \'#\') {\n } else if (Char == \'@\' && LangOpts.MicrosoftExt) { // #@ -> Charize\n if (!isLexingRawMode())\n Diag(BufferPtr, diag::ext_charize_microsoft);"}} | [j]={{db,4073,"LexStart:\n // ...\n case \'%\':\n // ...\n if (Char == \'=\') {\n // ...\n } else if (LangOpts.Digraphs && Char == \'>\') {\n // ...\n } else if (LangOpts.Digraphs && Char == \':\') {\n // ...\n if (Char == \'%\' && getCharAndSize(CurPtr + SizeTmp, SizeTmp2) == \':\') {\n // ...\n } else if (Char == \'@\' && LangOpts.MicrosoftExt) { // %:@ -> #@ -> Charize\n // ...\n if (!isLexingRawMode())\n Diag(BufferPtr, diag::ext_charize_microsoft);"},{db,4262,"LexStart:\n // ...\n case \'#\':\n // ...\n if (Char == \'#\') {\n // ...\n } else if (Char == \'@\' && LangOpts.MicrosoftExt) { // #@ -> Charize\n // ...\n if (!isLexingRawMode())\n Diag(BufferPtr, diag::ext_charize_microsoft);"}} | ||
}, | }, | ||
["ext_clang_c_enum_fixed_underlying_type"]={ | ["ext_clang_c_enum_fixed_underlying_type"]={ | ||
[ | [a]="enumeration types with a fixed underlying type are a Clang extension [-Wfixed-enum-extension]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"fixed-enum-extension",v}, | ||
[ | [l]="fixed-enum-extension", | ||
[ | [e]="enumeration types with a fixed underlying type are a Clang extension", | ||
[ | [f]=p, | ||
[ | [h]="enumeration types with a fixed underlying type are a Clang extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wfixed\\-enum\\-extension[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"6f11db137034",1538166298,"Support enums with a fixed underlying type in all language modes.","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.","Support enums with a fixed underlying type in all language modes."}, | ||
[j]={{K,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;"}}, | [j]={{K,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 // ...\n // Parse the fixed underlying type.\n if (Tok.is(tok::colon)) {\n // ...\n if (CanBeBitfield && !isEnumBase(CanBeOpaqueEnumDeclaration)) {\n // ...\n } else if (CanHaveEnumBase || !ColonIsSacred) {\n // ...\n if (!getLangOpts().ObjC) {\n if (getLangOpts().CPlusPlus11)\n // ...\n else if (getLangOpts().CPlusPlus)\n // ...\n else if (getLangOpts().MicrosoftExt)\n // ...\n else\n Diag(ColonLoc, diag::ext_clang_c_enum_fixed_underlying_type) << BaseRange;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,183: | Line 4,182: | ||
}, | }, | ||
["ext_clang_diagnose_if"]={ | ["ext_clang_diagnose_if"]={ | ||
[ | [a]="\'diagnose_if\' is a clang extension [-Wgcc-compat]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={Ic,v}, | ||
[ | [l]=Ic, | ||
[ | [e]="\'diagnose_if\' is a clang extension", | ||
[ | [f]=p, | ||
[ | [h]="\'diagnose_if\' is a clang extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | ||
[ | [g]=r, | ||
[i]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang.","Add the diagnose_if attribute to clang."}, | [i]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang.","Add the diagnose_if attribute to clang."}, | ||
[j]={{ | [j]={{bc,1098,"static void handleDiagnoseIfAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n S.Diag(AL.getLoc(), diag::ext_clang_diagnose_if);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,201: | Line 4,200: | ||
}, | }, | ||
["ext_clang_enable_if"]={ | ["ext_clang_enable_if"]={ | ||
[ | [a]="\'enable_if\' is a clang extension [-Wgcc-compat]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={Ic,v}, | ||
[ | [l]=Ic, | ||
[ | [e]="\'enable_if\' is a clang extension", | ||
[ | [f]=p, | ||
[ | [h]="\'enable_if\' is a clang extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | ||
[ | [g]=r, | ||
[i]={"046ba5b66fae",1455778171,"Sema: provide an extension warning for enable_if","Sema: provide an extension warning for enable_if"}, | [i]={"046ba5b66fae",1455778171,"Sema: provide an extension warning for enable_if","Sema: provide an extension warning for enable_if"}, | ||
[j]={{ | [j]={{bc,957,"static void handleEnableIfAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n S.Diag(AL.getLoc(), diag::ext_clang_enable_if);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,219: | Line 4,218: | ||
}, | }, | ||
["ext_comment_paste_microsoft"]={ | ["ext_comment_paste_microsoft"]={ | ||
[ | [a]="pasting two \'/\' tokens into a \'//\' comment is a Microsoft extension [-Wmicrosoft-comment-paste]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={J,"microsoft-comment-paste",v}, | ||
[ | [l]="microsoft-comment-paste", | ||
[ | [e]="pasting two \'/\' tokens into a \'//\' comment is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="pasting two \'\\/\' tokens into a \'\\/\\/\' comment is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-comment\\-paste[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"446cf25c2131",1451430377,"Emit a -Wmicrosoft warning when pasting /##/ into a comment token in MS mode.","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.","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);"}}, | ||
Line 4,237: | Line 4,236: | ||
}, | }, | ||
["ext_complex_component_init"]={ | ["ext_complex_component_init"]={ | ||
[ | [a]="complex initialization specifying real and imaginary components is an extension [-Wcomplex-component-init]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"complex-component-init",v}, | ||
[ | [l]="complex-component-init", | ||
[ | [e]="complex initialization specifying real and imaginary components is an extension", | ||
[ | [f]=p, | ||
[ | [h]="complex initialization specifying real and imaginary components is an extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wcomplex\\-component\\-init[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"6b9c41ea68f8",1316474264,"Add list initialization for complex numbers in C. Essentially, this allows \"_Complex float x = {1.0...","Add list initialization for complex numbers in C. Essentially, this allows \"_Complex float x = {1.0f, 2.0f};\". See changes to docs/LanguageExtensions.html for a longer description."}, | [i]={"6b9c41ea68f8",1316474264,"Add list initialization for complex numbers in C. Essentially, this allows \"_Complex float x = {1.0...","Add list initialization for complex numbers in C. Essentially, this allows \"_Complex float x = {1.0f, 2.0f};\". See changes to docs/LanguageExtensions.html for a longer description."}, | ||
[j]={{W,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();"}}, | [j]={{W,1606,"void InitListChecker::CheckComplexType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 4,255: | Line 4,254: | ||
}, | }, | ||
["ext_consteval_if"]={ | ["ext_consteval_if"]={ | ||
[ | [a]="consteval if is a C++23 extension [-Wc++23-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={ib,Nb}, | ||
[ | [l]=ib, | ||
[ | [e]="consteval if is a C++23 extension", | ||
[ | [f]=p, | ||
[ | [h]="consteval if is a C\\+\\+23 extension", | ||
[ | [b]=Lb, | ||
[ | [g]=y, | ||
[i]={ | [i]={xb,1612659633,Z,Z}, | ||
[j]={{ | [j]={{Bb,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 // ...\n if (Tok.is(tok::kw_constexpr)) {\n // ...\n } else {\n // ...\n if (Tok.is(tok::kw_consteval)) {\n Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_consteval_if : diag::ext_consteval_if);"}} | ||
}, | }, | ||
["ext_constexpr_body_invalid_stmt"]={ | ["ext_constexpr_body_invalid_stmt"]={ | ||
[ | [a]="use of this statement in a constexpr ... is a C++14 extension [-Wc++14-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={nb,Ob}, | ||
[ | [l]=nb, | ||
[ | [e]="use of this statement in a constexpr %select{function|constructor}0 is a C++14 extension", | ||
[ | [f]=p, | ||
[ | [h]="use of this statement in a constexpr (?:function|constructor) is a C\\+\\+14 extension", | ||
[ | [b]=kc, | ||
[ | [g]=n, | ||
[i]={"d9f663b510c4",1366644711, | [i]={"d9f663b510c4",1366644711,Zb,Zb}, | ||
[j]={{B,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);"}}, | [j]={{B,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 // ...\n if (Kind == Sema::CheckConstexprKind::CheckValid) {\n // ...\n } else if (Cxx2bLoc.isValid()) {\n // ...\n } else if (Cxx2aLoc.isValid()) {\n // ...\n } else if (Cxx1yLoc.isValid()) {\n SemaRef.Diag(Cxx1yLoc, SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt) << isa<CXXConstructorDecl>(Dcl);"}}, | ||
[k]={ | [k]={ | ||
[ | [id]={"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"]={ | ||
[ | [a]="use of this statement in a constexpr ... is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="use of this statement in a constexpr %select{function|constructor}0 is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="use of this statement in a constexpr (?:function|constructor) is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=n, | ||
[i]={ | [i]={"5c1399a58237",1544468592,"[constexpr][c++2a] Try-catch blocks in constexpr functions","[constexpr][c++2a] Try-catch blocks in constexpr functions"}, | ||
[j]={{B,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);"}}, | [j]={{B,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 // ...\n if (Kind == Sema::CheckConstexprKind::CheckValid) {\n // ...\n } else if (Cxx2bLoc.isValid()) {\n // ...\n } else if (Cxx2aLoc.isValid()) {\n SemaRef.Diag(Cxx2aLoc, SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt_cxx20) << isa<CXXConstructorDecl>(Dcl);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,303: | Line 4,302: | ||
}, | }, | ||
["ext_constexpr_body_invalid_stmt_cxx23"]={ | ["ext_constexpr_body_invalid_stmt_cxx23"]={ | ||
[ | [a]="use of this statement in a constexpr ... is a C++23 extension [-Wc++23-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={ib,Nb}, | ||
[ | [l]=ib, | ||
[ | [e]="use of this statement in a constexpr %select{function|constructor}0 is a C++23 extension", | ||
[ | [f]=p, | ||
[ | [h]="use of this statement in a constexpr (?:function|constructor) is a C\\+\\+23 extension", | ||
[ | [b]=Lb, | ||
[ | [g]=n, | ||
[i]={ | [i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls."}, | ||
[j]={{B,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);"}}, | [j]={{B,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 // ...\n if (Kind == Sema::CheckConstexprKind::CheckValid) {\n // ...\n } else if (Cxx2bLoc.isValid()) {\n SemaRef.Diag(Cxx2bLoc, SemaRef.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_constexpr_body_invalid_stmt : diag::ext_constexpr_body_invalid_stmt_cxx23) << isa<CXXConstructorDecl>(Dcl);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,320: | Line 4,319: | ||
}, | }, | ||
["ext_constexpr_body_multiple_return"]={ | ["ext_constexpr_body_multiple_return"]={ | ||
[ | [a]="multiple return statements in constexpr function is a C++14 extension [-Wc++14-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={nb,Ob}, | ||
[ | [l]=nb, | ||
[ | [e]="multiple return statements in constexpr function is a C++14 extension", | ||
[ | [f]=p, | ||
[ | [h]="multiple return statements in constexpr function is a C\\+\\+14 extension", | ||
[ | [b]=kc, | ||
[ | [g]=n, | ||
[i]={"d9f663b510c4",1366644711, | [i]={"d9f663b510c4",1366644711,Zb,Zb}, | ||
[j]={{B,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);"}}, | [j]={{B,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 // ...\n if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n // ...\n } else {\n if (ReturnStmts.empty()) {\n // ...\n } else if (ReturnStmts.size() > 1) {\n // ...\n case Sema::CheckConstexprKind::Diagnose:\n SemaRef.Diag(ReturnStmts.back(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_body_multiple_return : diag::ext_constexpr_body_multiple_return);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,337: | Line 4,336: | ||
}, | }, | ||
["ext_constexpr_ctor_missing_init"]={ | ["ext_constexpr_ctor_missing_init"]={ | ||
[ | [a]="constexpr constructor that does not initialize all members is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="constexpr constructor that does not initialize all members is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="constexpr constructor that does not initialize all members is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=n, | ||
[i]={ | [i]={ec,1567434909,ub,ub}, | ||
[j]={{B,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);"}}, | [j]={{B,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 // ...\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]={ | [k]={ | ||
[ | [id]={"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]"} | ||
} | } | ||
}, | }, | ||
["ext_constexpr_function_never_constant_expr"]={ | ["ext_constexpr_function_never_constant_expr"]={ | ||
[ | [a]="... ... never produces a constant expression [-Winvalid-constexpr]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"invalid-constexpr"}, | ||
[ | [l]="invalid-constexpr", | ||
[ | [e]="%select{constexpr|consteval}1 %select{function|constructor}0 never produces a constant expression", | ||
[ | [f]=S, | ||
[ | [h]="(?:constexpr|consteval) (?:function|constructor) never produces a constant expression", | ||
[ | [b]=" \\[[^\\]]*\\-Winvalid\\-constexpr[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"f86b5dc7009e",1355032543,"PR14550: If a system header contains a bogus constexpr function definition,","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,","PR14550: If a system header contains a bogus constexpr function definition,"}, | ||
[j]={{B,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();"}}, | [j]={{B,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 // ...\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]={ | [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]"} | ["clang/test/SemaCXX/literal-type.cpp"]={"clang/test/SemaCXX/literal-type.cpp:57:13: error: constexpr constructor never produces a constant expression [-Winvalid-constexpr]"} | ||
Line 4,371: | Line 4,370: | ||
}, | }, | ||
["ext_constexpr_function_try_block_cxx20"]={ | ["ext_constexpr_function_try_block_cxx20"]={ | ||
[ | [a]="function try block in constexpr ... is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="function try block in constexpr %select{function|constructor}0 is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="function try block in constexpr (?:function|constructor) is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=n, | ||
[i]={ | [i]={"5c1399a58237",1544468592,"[constexpr][c++2a] Try-catch blocks in constexpr functions","[constexpr][c++2a] Try-catch blocks in constexpr functions"}, | ||
[j]={{B,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);"}}, | [j]={{B,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 // ...\n if (isa<CXXTryStmt>(Body)) {\n // ...\n case Sema::CheckConstexprKind::Diagnose:\n SemaRef.Diag(Body->getBeginLoc(), !SemaRef.getLangOpts().CPlusPlus20 ? diag::ext_constexpr_function_try_block_cxx20 : diag::warn_cxx17_compat_constexpr_function_try_block) << isa<CXXConstructorDecl>(Dcl);"}}, | ||
[k]={ | [k]={ | ||
[ | [id]={"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]"} | ||
} | } | ||
}, | }, | ||
["ext_constexpr_if"]={ | ["ext_constexpr_if"]={ | ||
[ | [a]="constexpr if is a C++17 extension [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Q,kb}, | ||
[ | [l]=Q, | ||
[ | [e]="constexpr if is a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="constexpr if is a C\\+\\+17 extension", | ||
[ | [b]=lb, | ||
[ | [g]=y, | ||
[i]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature.","Implement p0292r2 (constexpr if), a likely C++1z feature."}, | [i]={"b130fe7d316e",1466709409,"Implement p0292r2 (constexpr if), a likely C++1z feature.","Implement p0292r2 (constexpr if), a likely C++1z feature."}, | ||
[j]={{ | [j]={{Bb,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 // ...\n if (Tok.is(tok::kw_constexpr)) {\n Diag(Tok, getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_constexpr_if : diag::ext_constexpr_if);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,405: | Line 4,404: | ||
}, | }, | ||
["ext_constexpr_local_var"]={ | ["ext_constexpr_local_var"]={ | ||
[ | [a]="variable declaration in a constexpr ... is a C++14 extension [-Wc++14-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={nb,Ob}, | ||
[ | [l]=nb, | ||
[ | [e]="variable declaration in a constexpr %select{function|constructor}0 is a C++14 extension", | ||
[ | [f]=p, | ||
[ | [h]="variable declaration in a constexpr (?:function|constructor) is a C\\+\\+14 extension", | ||
[ | [b]=kc, | ||
[ | [g]=n, | ||
[i]={"d9f663b510c4",1366644711, | [i]={"d9f663b510c4",1366644711,Zb,Zb}, | ||
[j]={{B,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);"}}, | [j]={{B,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 // ...\n case Decl::Var:\n case Decl::Decomposition: {\n // ...\n if (Kind == Sema::CheckConstexprKind::Diagnose) {\n SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_local_var : diag::ext_constexpr_local_var) << isa<CXXConstructorDecl>(Dcl);"}}, | ||
[k]={ | [k]={ | ||
[ | [id]={"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"]={ | ||
[ | [a]="uninitialized variable in a constexpr ... is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="uninitialized variable in a constexpr %select{function|constructor}0 is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="uninitialized variable in a constexpr (?:function|constructor) is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=n, | ||
[i]={ | [i]={ec,1567434909,ub,ub}, | ||
[j]={{B,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);"}}, | [j]={{B,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 // ...\n case Decl::Var:\n case Decl::Decomposition: {\n // ...\n if (VD->isThisDeclarationADefinition()) {\n // ...\n if (!VD->getType()->isDependentType() && !VD->hasInit() && !VD->isCXXForRangeDecl()) {\n if (Kind == Sema::CheckConstexprKind::Diagnose) {\n SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_local_var_no_init : diag::ext_constexpr_local_var_no_init) << isa<CXXConstructorDecl>(Dcl);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,439: | Line 4,438: | ||
}, | }, | ||
["ext_constexpr_on_lambda_cxx17"]={ | ["ext_constexpr_on_lambda_cxx17"]={ | ||
[ | [a]="\'constexpr\' on lambda expressions is a C++17 extension [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Q,kb}, | ||
[ | [l]=Q, | ||
[ | [e]="\'constexpr\' on lambda expressions is a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="\'constexpr\' on lambda expressions is a C\\+\\+17 extension", | ||
[ | [b]=lb, | ||
[ | [g]=y, | ||
[i]={" | [i]={"a734ab980865",1459008697,"[Cxx1z-constexpr-lambda-P0170R1] Support parsing of constexpr specifier (and its inference) on lamb...","[Cxx1z-constexpr-lambda-P0170R1] Support parsing of constexpr specifier (and its inference) on lambda expressions"}, | ||
[j]={{ | [j]={{Ab,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]={ | [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]"} | ["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]"} | ||
Line 4,456: | Line 4,455: | ||
}, | }, | ||
["ext_constexpr_static_var"]={ | ["ext_constexpr_static_var"]={ | ||
[ | [a]="definition of a ... variable in a constexpr ... is a C++23 extension [-Wc++23-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={ib,Nb}, | ||
[ | [l]=ib, | ||
[ | [e]="definition of a %select{static|thread_local}1 variable in a constexpr %select{function|constructor}0 is a C++23 extension", | ||
[ | [f]=p, | ||
[ | [h]="definition of a (?:static|thread_local) variable in a constexpr (?:function|constructor) is a C\\+\\+23 extension", | ||
[ | [b]=Lb, | ||
[ | [g]=n, | ||
[i]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[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.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls."}, | ||
[j]={{B,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);"}}, | [j]={{B,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 // ...\n case Decl::Var:\n case Decl::Decomposition: {\n // ...\n if (VD->isThisDeclarationADefinition()) {\n if (VD->isStaticLocal()) {\n if (Kind == Sema::CheckConstexprKind::Diagnose) {\n SemaRef.Diag(VD->getLocation(), SemaRef.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_constexpr_var : diag::ext_constexpr_static_var) << isa<CXXConstructorDecl>(Dcl) << (VD->getTLSKind() == VarDecl::TLS_Dynamic);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,473: | Line 4,472: | ||
}, | }, | ||
["ext_constexpr_type_definition"]={ | ["ext_constexpr_type_definition"]={ | ||
[ | [a]="type definition in a constexpr ... is a C++14 extension [-Wc++14-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={nb,Ob}, | ||
[ | [l]=nb, | ||
[ | [e]="type definition in a constexpr %select{function|constructor}0 is a C++14 extension", | ||
[ | [f]=p, | ||
[ | [h]="type definition in a constexpr (?:function|constructor) is a C\\+\\+14 extension", | ||
[ | [b]=kc, | ||
[ | [g]=n, | ||
[i]={"d9f663b510c4",1366644711, | [i]={"d9f663b510c4",1366644711,Zb,Zb}, | ||
[j]={{B,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);"}}, | [j]={{B,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 // ...\n case Decl::Enum:\n case Decl::CXXRecord:\n // C++1y allows types to be defined, not just declared.\n if (cast<TagDecl>(DclIt)->isThisDeclarationADefinition()) {\n if (Kind == Sema::CheckConstexprKind::Diagnose) {\n SemaRef.Diag(DS->getBeginLoc(), SemaRef.getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_constexpr_type_definition : diag::ext_constexpr_type_definition) << isa<CXXConstructorDecl>(Dcl);"}}, | ||
[k]={ | [k]={ | ||
[ | [id]={"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"]={ | ||
[ | [a]="constexpr union constructor that does not initialize any member is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="constexpr union constructor that does not initialize any member is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="constexpr union constructor that does not initialize any member is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=n, | ||
[i]={ | [i]={ec,1567434909,ub,ub}, | ||
[j]={{B,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);"}} | [j]={{B,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 // ...\n if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n // ...\n // DR1359:\n // - every non-variant non-static data member and base class sub-object\n // shall be initialized;\n // DR1460:\n // - if the class is a union having variant members, exactly one of them\n // shall be initialized;\n if (RD->isUnion()) {\n if (Constructor->getNumCtorInitializers() == 0 && RD->hasVariantMembers()) {\n if (Kind == Sema::CheckConstexprKind::Diagnose) {\n SemaRef.Diag(Dcl->getLocation(), SemaRef.getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_constexpr_union_ctor_no_init : diag::ext_constexpr_union_ctor_no_init);"}} | ||
}, | }, | ||
["ext_constinit_missing"]={ | ["ext_constinit_missing"]={ | ||
[ | [a]="\'constinit\' specifier missing on initializing declaration of A [-Wmissing-constinit]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"missing-constinit"}, | ||
[ | [l]="missing-constinit", | ||
[ | [e]="\'constinit\' specifier missing on initializing declaration of %0", | ||
[ | [f]=p, | ||
[ | [h]="\'constinit\' specifier missing on initializing declaration of (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmissing\\-constinit[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ec,1567434909,ub,ub}, | ||
[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);"}}, | [j]={{x,3165,"static void diagnoseMissingConstinit(Sema &S, const VarDecl *InitDecl, const ConstInitAttr *CIAttr, bool AttrBeforeInit) {\n // ...\n if (AttrBeforeInit) {\n // ...\n S.Diag(InitDecl->getLocation(), diag::ext_constinit_missing) << InitDecl << FixItHint::CreateInsertion(InsertLoc, SuitableSpelling);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,521: | Line 4,520: | ||
}, | }, | ||
["ext_ctrl_z_eof_microsoft"]={ | ["ext_ctrl_z_eof_microsoft"]={ | ||
[ | [a]="treating Ctrl-Z as end-of-file is a Microsoft extension [-Wmicrosoft-end-of-file]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={J,"microsoft-end-of-file",v}, | ||
[ | [l]="microsoft-end-of-file", | ||
[ | [e]="treating Ctrl-Z as end-of-file is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="treating Ctrl\\-Z as end\\-of\\-file is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-end\\-of\\-file[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"de2310bddf64",1451431047,"Emit a -Wmicrosoft warning when treating ^Z as EOF in MS mode.","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.","Emit a -Wmicrosoft warning when treating ^Z as EOF in MS mode."}, | ||
[j]={{db,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);"}}, | [j]={{db,3654,"LexStart:\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 4,539: | Line 4,538: | ||
}, | }, | ||
["ext_cxx11_attr_placement"]={ | ["ext_cxx11_attr_placement"]={ | ||
[ | [a]="ISO C++ does not allow ... to appear here [-Wcxx-attribute-extension]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"cxx-attribute-extension"}, | ||
[ | [l]="cxx-attribute-extension", | ||
[ | [e]="ISO C++ does not allow %select{an attribute list|%0}1 to appear here", | ||
[ | [f]=p, | ||
[ | [h]="ISO C\\+\\+ does not allow (?:an attribute list|(.*?)) to appear here", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wcxx\\-attribute\\-extension[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={ | [i]={xb,1612659633,Z,Z}, | ||
[j]={{K,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();"}}, | [j]={{K,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]={ | [k]={ | ||
Line 4,556: | Line 4,555: | ||
}, | }, | ||
["ext_cxx11_enum_fixed_underlying_type"]={ | ["ext_cxx11_enum_fixed_underlying_type"]={ | ||
[ | [a]="enumeration types with a fixed underlying type are a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={V,H,v}, | ||
[ | [l]=H, | ||
[ | [e]="enumeration types with a fixed underlying type are a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="enumeration types with a fixed underlying type are a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=y, | ||
[i]={"0d0355abfca9",1351820068,"Change diagnostics for enums with fixed underlying type so in C++98 mode, we cite C++11.","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.","Change diagnostics for enums with fixed underlying type so in C++98 mode, we cite C++11."}, | ||
[j]={{K,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;"}}, | [j]={{K,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 // ...\n // Parse the fixed underlying type.\n if (Tok.is(tok::colon)) {\n // ...\n if (CanBeBitfield && !isEnumBase(CanBeOpaqueEnumDeclaration)) {\n // ...\n } else if (CanHaveEnumBase || !ColonIsSacred) {\n // ...\n if (!getLangOpts().ObjC) {\n if (getLangOpts().CPlusPlus11)\n // ...\n else if (getLangOpts().CPlusPlus)\n Diag(ColonLoc, diag::ext_cxx11_enum_fixed_underlying_type) << BaseRange;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,574: | Line 4,573: | ||
}, | }, | ||
["ext_cxx11_longlong"]={ | ["ext_cxx11_longlong"]={ | ||
[ | [a]="\'long long\' is a C++11 extension [-Wc++11-long-long]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={V,H,"c++11-long-long","long-long",v,v}, | ||
[ | [l]="c++11-long-long", | ||
[ | [e]="\'long long\' is a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="\'long long\' is a C\\+\\+11 extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-long\\-long[^\\]]*\\]", | ||
[ | [g]=r, | ||
[i]={"1cd230570394",1348510761,"Change the wording of the extension warning from","Change the wording of the extension warning from"}, | [i]={"1cd230570394",1348510761,"Change the wording of the extension warning from","Change the wording of the extension warning from"}, | ||
[j]={{ | [j]={{Oc,322,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result. Return true if there was an error\n/// parsing. This function also returns information about the form of the\n/// expression in DT. See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used. As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n // ...\n case tok::numeric_constant: {\n // ...\n // \'long long\' is a C99 or C++11 feature.\n if (!PP.getLangOpts().C99 && Literal.isLongLong) {\n if (PP.getLangOpts().CPlusPlus)\n PP.Diag(PeekTok, PP.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{z,4228,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n // ...\n if (Literal.isFixedPointLiteral()) {\n // ...\n } else if (Literal.isFloatingLiteral()) {\n // ...\n } else if (!Literal.isIntegerLiteral()) {\n // ...\n } else {\n // ...\n if (Literal.GetIntegerValue(ResultVal)) {\n // ...\n } else {\n // ...\n // Check long long if needed.\n if (Ty.isNull() && !Literal.isSizeT) {\n // ...\n // Does it fit in a unsigned long long?\n if (ResultVal.isIntN(LongLongSize)) {\n // ...\n // \'long long\' is a C99 or C++11 feature, whether the literal\n // explicitly specified \'long long\' or we needed the extra width.\n if (getLangOpts().CPlusPlus)\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{U,1411,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers. This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n // ...\n case DeclSpec::TST_int: {\n if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n // ...\n case TypeSpecifierWidth::LongLong:\n // ...\n // \'long long\' is a C99 or C++11 feature.\n if (!S.getLangOpts().C99) {\n if (S.getLangOpts().CPlusPlus)\n S.Diag(DS.getTypeSpecWidthLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"},{U,1436,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers. This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n // ...\n case DeclSpec::TST_int: {\n if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) {\n // ...\n } else {\n // ...\n case TypeSpecifierWidth::LongLong:\n // ...\n // \'long long\' is a C99 or C++11 feature.\n if (!S.getLangOpts().C99) {\n if (S.getLangOpts().CPlusPlus)\n S.Diag(DS.getTypeSpecWidthLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_longlong : diag::ext_cxx11_longlong);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,592: | Line 4,591: | ||
}, | }, | ||
["ext_cxx14_attr"]={ | ["ext_cxx14_attr"]={ | ||
[ | [a]="use of the A attribute is a C++14 extension [-Wc++14-attribute-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"c++14-attribute-extensions",nb,Ob,"future-attribute-extensions",v,v}, | ||
[ | [l]="c++14-attribute-extensions", | ||
[ | [e]="use of the %0 attribute is a C++14 extension", | ||
[ | [f]=p, | ||
[ | [h]="use of the (.*?) attribute is a C\\+\\+14 extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+14\\-attribute\\-extensions[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"4f902c7eccd4",1457397175,"P0188R1: add support for standard [[fallthrough]] attribute. This is almost","P0188R1: add support for standard [[fallthrough]] attribute. This is almost"}, | [i]={"4f902c7eccd4",1457397175,"P0188R1: add support for standard [[fallthrough]] attribute. This is almost","P0188R1: add support for standard [[fallthrough]] attribute. This is almost"}, | ||
[j]={{ | [j]={{bc,8200,"static void handleDeprecatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (!S.getLangOpts().CPlusPlus14 && AL.isCXX11Attribute() && !AL.isGNUScope())\n S.Diag(AL.getLoc(), diag::ext_cxx14_attr) << AL;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,610: | Line 4,609: | ||
}, | }, | ||
["ext_cxx17_attr"]={ | ["ext_cxx17_attr"]={ | ||
[ | [a]="use of the A attribute is a C++17 extension [-Wc++17-attribute-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"c++17-attribute-extensions",Q,kb,"future-attribute-extensions",v,v}, | ||
[ | [l]="c++17-attribute-extensions", | ||
[ | [e]="use of the %0 attribute is a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="use of the (.*?) attribute is a C\\+\\+17 extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+17\\-attribute\\-extensions[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={" | [i]={"4f902c7eccd4",1457397175,"P0188R1: add support for standard [[fallthrough]] attribute. This is almost","P0188R1: add support for standard [[fallthrough]] attribute. This is almost"}, | ||
[j]={{ | [j]={{bc,2336,"static void handleUnusedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\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;"},{bc,3176,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (AL.isStandardAttributeSyntax() && !AL.getScopeName()) {\n // ...\n if (AL.getNumArgs() == 1) {\n // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 4,628: | Line 4,627: | ||
}, | }, | ||
["ext_cxx20_attr"]={ | ["ext_cxx20_attr"]={ | ||
[ | [a]="use of the A attribute is a C++20 extension [-Wc++20-attribute-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"c++20-attribute-extensions",M,fb,"future-attribute-extensions",v,v}, | ||
[ | [l]="c++20-attribute-extensions", | ||
[ | [e]="use of the %0 attribute is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="use of the (.*?) attribute is a C\\+\\+20 extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+20\\-attribute\\-extensions[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={"3bef014e7d79",1563609394,"Implement P1301R4, which allows specifying an optional message on the [[nodiscard]] attribute.","Implement P1301R4, which allows specifying an optional message on the [[nodiscard]] attribute."}, | ||
[j]={{ | [j]={{bc,3167,"static void handleWarnUnusedResult(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (AL.isStandardAttributeSyntax() && !AL.getScopeName()) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 4,646: | Line 4,645: | ||
}, | }, | ||
["ext_cxx23_pp_directive"]={ | ["ext_cxx23_pp_directive"]={ | ||
[ | [a]="use of a \'#...\' directive is a C++23 extension [-Wc++23-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={ib,Nb}, | ||
[ | [l]=ib, | ||
[ | [e]="use of a \'#%select{<BUG IF SEEN>|elifdef|elifndef}0\' directive is a C++23 extension", | ||
[ | [f]=p, | ||
[ | [h]="use of a \'\\#(?:elifdef|elifndef)\' directive is a C\\+\\+23 extension", | ||
[ | [b]=Lb, | ||
[ | [g]=D, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{ | [j]={{bb,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 // ...\n while (true) {\n // ...\n if (Directive.startswith(\"if\")) {\n // ...\n } else if (Directive[0] == \'e\') {\n // ...\n if (Sub == \"ndif\") { // \"endif\"\n // ...\n } else if (Sub == \"lse\") { // \"else\".\n // ...\n } else if (Sub == \"lif\") { // \"elif\".\n // ...\n } else if (Sub == \"lifdef\" || // \"elifdef\"\n // ...\n if (LangOpts.CPlusPlus)\n DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive : diag::ext_cxx23_pp_directive;"},{bb,3455,"/// Implements the \\#elif, \\#elifdef, and \\#elifndef directives.\nvoid Preprocessor::HandleElifFamilyDirective(Token &ElifToken, const Token &HashToken, tok::PPKeywordKind Kind) {\n // ...\n case PED_Elifdef:\n case PED_Elifndef:\n // ...\n if (LangOpts.CPlusPlus)\n DiagID = LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_pp_directive : diag::ext_cxx23_pp_directive;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,663: | Line 4,662: | ||
}, | }, | ||
["ext_cxx23_size_t_suffix"]={ | ["ext_cxx23_size_t_suffix"]={ | ||
[ | [a]="\'size_t\' suffix for literals is a C++23 extension [-Wc++23-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={ib,Nb}, | ||
[ | [l]=ib, | ||
[ | [e]="\'size_t\' suffix for literals is a C++23 extension", | ||
[ | [f]=p, | ||
[ | [h]="\'size_t\' suffix for literals is a C\\+\\+23 extension", | ||
[ | [b]=Lb, | ||
[ | [g]=r, | ||
[i]={" | [i]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals","[C++2b] Support size_t literals"}, | ||
[j]={{ | [j]={{Oc,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 // ...\n case tok::numeric_constant: {\n // ...\n // \'z/uz\' literals are a C++23 feature.\n if (Literal.isSizeT)\n PP.Diag(PeekTok, PP.getLangOpts().CPlusPlus ? PP.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_size_t_suffix : diag::ext_cxx23_size_t_suffix : diag::err_cxx23_size_t_suffix);"},{z,4059,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n // ...\n if (Literal.isFixedPointLiteral()) {\n // ...\n } else if (Literal.isFloatingLiteral()) {\n // ...\n } else if (!Literal.isIntegerLiteral()) {\n // ...\n } else {\n // ...\n // \'z/uz\' literals are a C++23 feature.\n if (Literal.isSizeT)\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus ? getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_size_t_suffix : diag::ext_cxx23_size_t_suffix : diag::err_cxx23_size_t_suffix);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,680: | Line 4,679: | ||
}, | }, | ||
["ext_cxx_designated_init"]={ | ["ext_cxx_designated_init"]={ | ||
[ | [a]="designated initializers are a C++20 extension [-Wc++20-designator]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"c++20-designator",M,fb,Db,X,v}, | ||
[ | [l]="c++20-designator", | ||
[ | [e]="designated initializers are a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="designated initializers are a C\\+\\+20 extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+20\\-designator[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={Tc,1567205575, | [i]={Tc,1567205575,yb,yb}, | ||
[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);"}}, | [j]={{z,7833,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n // ...\n if (FirstDesignator.isValid()) {\n // Only diagnose designated initiaization as a C++20 extension if we didn\'t\n // already diagnose use of (non-C++20) C99 designator syntax.\n if (getLangOpts().CPlusPlus && !DiagnosedArrayDesignator && !DiagnosedNestedDesignator && !DiagnosedMixedDesignator) {\n Diag(FirstDesignator, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_designated_init : diag::ext_cxx_designated_init);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,698: | Line 4,697: | ||
}, | }, | ||
["ext_cxx_label_end_of_compound_statement"]={ | ["ext_cxx_label_end_of_compound_statement"]={ | ||
[ | [a]="label at end of compound statement is a C++23 extension [-Wc++23-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={ib,Nb}, | ||
[ | [l]=ib, | ||
[ | [e]="label at end of compound statement is a C++23 extension", | ||
[ | [f]=p, | ||
[ | [h]="label at end of compound statement is a C\\+\\+23 extension", | ||
[ | [b]=Lb, | ||
[ | [g]=y, | ||
[i]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl.","[HLSL] Support cbuffer/tbuffer for hlsl."}, | [i]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl.","[HLSL] Support cbuffer/tbuffer for hlsl."}, | ||
[j]={{ | [j]={{Bb,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]={ | [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]"} | ["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]"} | ||
Line 4,715: | Line 4,714: | ||
}, | }, | ||
["ext_cxx_static_assert_no_message"]={ | ["ext_cxx_static_assert_no_message"]={ | ||
[ | [a]="\'static_assert\' with no message is a C++17 extension [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Q,kb}, | ||
[ | [l]=Q, | ||
[ | [e]="\'static_assert\' with no message is a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="\'static_assert\' with no message is a C\\+\\+17 extension", | ||
[ | [b]=lb, | ||
[ | [g]=y, | ||
[i]={ | [i]={xb,1612659633,Z,Z}, | ||
[j]={{O,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;"}}, | [j]={{O,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 // ...\n if (Tok.is(tok::r_paren)) {\n // ...\n if (getLangOpts().CPlusPlus17)\n // ...\n else if (getLangOpts().CPlusPlus)\n DiagVal = diag::ext_cxx_static_assert_no_message;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,732: | Line 4,731: | ||
}, | }, | ||
["ext_decl_attrs_on_lambda"]={ | ["ext_decl_attrs_on_lambda"]={ | ||
[ | [a]="... in this position is a C++23 extension [-Wc++23-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={ib,Nb}, | ||
[ | [l]=ib, | ||
[ | [e]="%select{an attribute specifier sequence|%0}1 in this position is a C++23 extension", | ||
[ | [f]=p, | ||
[ | [h]="(?:an attribute specifier sequence|(.*?)) in this position is a C\\+\\+23 extension", | ||
[ | [b]=Lb, | ||
[ | [g]=y, | ||
[i]={ | [i]={xb,1612659633,Z,Z}, | ||
[j]={{ | [j]={{Ab,1368,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n // ...\n // Implement WG21 P2173, which allows attributes immediately before the\n // lambda declarator and applies them to the corresponding function operator\n // or operator template declaration. We accept this as a conforming extension\n // in all language modes that support lambdas.\n if (isCXX11AttributeSpecifier()) {\n Diag(Tok, getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_decl_attrs_on_lambda : diag::ext_decl_attrs_on_lambda) << Tok.getIdentifierInfo() << Tok.isRegularKeywordAttribute();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,749: | Line 4,748: | ||
}, | }, | ||
["ext_decltype_auto_type_specifier"]={ | ["ext_decltype_auto_type_specifier"]={ | ||
[ | [a]="\'decltype(auto)\' type specifier is a C++14 extension [-Wc++14-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={nb,Ob}, | ||
[ | [l]=nb, | ||
[ | [e]="\'decltype(auto)\' type specifier is a C++14 extension", | ||
[ | [f]=p, | ||
[ | [h]="\'decltype\\(auto\\)\' type specifier is a C\\+\\+14 extension", | ||
[ | [b]=kc, | ||
[ | [g]=y, | ||
[i]={"74aeef50a0cc",1366992935,"Implement C++1y decltype(auto).","Implement C++1y decltype(auto)."}, | [i]={"74aeef50a0cc",1366992935,"Implement C++1y decltype(auto).","Implement C++1y decltype(auto)."}, | ||
[j]={{O,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);"}}, | [j]={{O,1105,"/// ParseDecltypeSpecifier - Parse a C++11 decltype specifier.\n///\n/// \'decltype\' ( expression )\n/// \'decltype\' ( \'auto\' ) [C++1y]\n///\nSourceLocation Parser::ParseDecltypeSpecifier(DeclSpec &DS) {\n // ...\n if (Tok.is(tok::annot_decltype)) {\n // ...\n } else {\n // ...\n // Check for C++1y \'decltype(auto)\'.\n if (Tok.is(tok::kw_auto) && NextToken().is(tok::r_paren)) {\n // ...\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_decltype_auto_type_specifier : diag::ext_decltype_auto_type_specifier);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,766: | Line 4,765: | ||
}, | }, | ||
["ext_decomp_decl"]={ | ["ext_decomp_decl"]={ | ||
[ | [a]="decomposition declarations are a C++17 extension [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Q,kb}, | ||
[ | [l]=Q, | ||
[ | [e]="decomposition declarations are a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="decomposition declarations are a C\\+\\+17 extension", | ||
[ | [b]=lb, | ||
[ | [g]=n, | ||
[i]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z","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","P0217R3: Parsing support and framework for AST representation of C++1z"}, | ||
[j]={{B,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();"}}, | [j]={{B,752,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n // ...\n Diag(Decomp.getLSquareLoc(), !getLangOpts().CPlusPlus17 ? diag::ext_decomp_decl : D.getContext() == DeclaratorContext::Condition ? diag::ext_decomp_decl_cond : diag::warn_cxx14_compat_decomp_decl) << Decomp.getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,783: | Line 4,782: | ||
}, | }, | ||
["ext_decomp_decl_cond"]={ | ["ext_decomp_decl_cond"]={ | ||
[ | [a]="ISO C++17 does not permit structured binding declaration in a condition [-Wbinding-in-condition]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"binding-in-condition"}, | ||
[ | [l]="binding-in-condition", | ||
[ | [e]="ISO C++17 does not permit structured binding declaration in a condition", | ||
[ | [f]=p, | ||
[ | [h]="ISO C\\+\\+17 does not permit structured binding declaration in a condition", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wbinding\\-in\\-condition[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"c81f4538ecd9",1512630195,"Allow conditions to be decomposed with structured bindings","Allow conditions to be decomposed with structured bindings"}, | [i]={"c81f4538ecd9",1512630195,"Allow conditions to be decomposed with structured bindings","Allow conditions to be decomposed with structured bindings"}, | ||
[j]={{B,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();"}}, | [j]={{B,754,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n // ...\n Diag(Decomp.getLSquareLoc(), !getLangOpts().CPlusPlus17 ? diag::ext_decomp_decl : D.getContext() == DeclaratorContext::Condition ? diag::ext_decomp_decl_cond : diag::warn_cxx14_compat_decomp_decl) << Decomp.getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,800: | Line 4,799: | ||
}, | }, | ||
["ext_decomp_decl_empty"]={ | ["ext_decomp_decl_empty"]={ | ||
[ | [a]="ISO C++17 does not allow a decomposition group to be empty [-Wempty-decomposition]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"empty-decomposition"}, | ||
[ | [l]="empty-decomposition", | ||
[ | [e]="ISO C++17 does not allow a decomposition group to be empty", | ||
[ | [f]=p, | ||
[ | [h]="ISO C\\+\\+17 does not allow a decomposition group to be empty", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wempty\\-decomposition[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"bdb84f374cde",1469230619,"P0217R3: Parsing support and framework for AST representation of C++1z","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","P0217R3: Parsing support and framework for AST representation of C++1z"}, | ||
[j]={{K,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);"}}, | [j]={{K,6783,"void Parser::ParseDecompositionDeclarator(Declarator &D) {\n // ...\n if (Tok.isNot(tok::r_square))\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 4,817: | Line 4,816: | ||
}, | }, | ||
["ext_decomp_decl_spec"]={ | ["ext_decomp_decl_spec"]={ | ||
[ | [a]="decomposition declaration declared \'A\' is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="decomposition declaration declared %plural{1:\'%1\'|:with \'%1\' specifiers}0 is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="decomposition declaration declared (?:\'(.*?)\'|with \'(.*?)\' specifiers) is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=n, | ||
[i]={"13bf9892dc2a",1558554775,"Part of P1091R3: permit structured bindings to be declared \'static\' and","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","Part of P1091R3: permit structured bindings to be declared \'static\' and"}, | ||
[j]={{B,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);"}}, | [j]={{B,813,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n // ...\n {\n // ...\n if (!BadSpecifiers.empty()) {\n // ...\n } else if (!CPlusPlus20Specifiers.empty()) {\n auto &&Warn = Diag(CPlusPlus20SpecifierLocs.front(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_decomp_decl_spec : diag::ext_decomp_decl_spec);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,834: | Line 4,833: | ||
}, | }, | ||
["ext_default_init_const"]={ | ["ext_default_init_const"]={ | ||
[ | [a]="default initialization of an object of const type A... is a Microsoft extension [-Wmicrosoft-const-init]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-const-init"}, | ||
[ | [l]="microsoft-const-init", | ||
[ | [e]="default initialization of an object of const type %0%select{| without a user-provided default constructor}1 is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="default initialization of an object of const type (.*?)(?:| without a user\\-provided default constructor) is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-const\\-init[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"337d5aa58fc2",1429259558,"Move fixit for const init from note to diag, weaken to warning in MS mode.","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.","Move fixit for const init from note to diag, weaken to warning in MS mode."}, | ||
[j]={{W,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;"}}, | [j]={{W,8537,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n // ...\n if (!ZeroInitializationFixit.empty()) {\n // ...\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 // ...\n } else {\n // ...\n if (S.getLangOpts().MSVCCompat && D && D->hasAttr<SelectAnyAttr>())\n DiagID = diag::ext_default_init_const;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,851: | Line 4,850: | ||
}, | }, | ||
["ext_defaulted_comparison"]={ | ["ext_defaulted_comparison"]={ | ||
[ | [a]="defaulted comparison operators are a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="defaulted comparison operators are a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="defaulted comparison operators are a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=n, | ||
[i]={ | [i]={ec,1567434909,ub,ub}, | ||
[j]={{B,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);"}}, | [j]={{B,17884,"void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {\n // ...\n // Issue compatibility warning. We already warned if the operator is\n // \'operator<=>\' when parsing the \'<=>\' token.\n if (DefKind.isComparison() && DefKind.asComparison() != DefaultedComparisonKind::ThreeWay) {\n Diag(DefaultLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_defaulted_comparison : diag::ext_defaulted_comparison);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,868: | Line 4,867: | ||
}, | }, | ||
["ext_defaulted_comparison_constexpr_mismatch"]={ | ["ext_defaulted_comparison_constexpr_mismatch"]={ | ||
[ | [a]="defaulted definition of ... that is declared ... but... invokes a non-constexpr comparison function is a C++23 extension [-Wc++23-default-comp-relaxed-constexpr]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"c++23-default-comp-relaxed-constexpr",v}, | ||
[ | [l]="c++23-default-comp-relaxed-constexpr", | ||
[ | [e]="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", | ||
[ | [f]=p, | ||
[ | [h]="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", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+23\\-default\\-comp\\-relaxed\\-constexpr[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{B,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();"}}, | [j]={{B,8968,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n // ...\n // C++2a [dcl.fct.def.default]p3 [P2002R0]:\n // An explicitly-defaulted function that is not defined as deleted may be\n // declared constexpr or consteval only if it is constexpr-compatible.\n // C++2a [class.compare.default]p3 [P2002R0]:\n // A defaulted comparison function is constexpr-compatible if it satisfies\n // the requirements for a constexpr function [...]\n // The only relevant requirements are that the parameter and return types are\n // literal types. The remaining conditions are checked by the analyzer.\n //\n // We support P2448R2 in language modes earlier than C++23 as an extension.\n // The concept of constexpr-compatible was removed.\n // C++23 [dcl.fct.def.default]p3 [P2448R2]\n // A function explicitly defaulted on its first declaration is implicitly\n // inline, and is implicitly constexpr if it is constexpr-suitable.\n // C++23 [dcl.constexpr]p3\n // A function is constexpr-suitable if\n // - it is not a coroutine, and\n // - if the function is a constructor or destructor, its class does not\n // have any virtual base classes.\n if (FD->isConstexpr()) {\n if (CheckConstexprReturnType(*this, FD, CheckConstexprKind::Diagnose) && CheckConstexprParameterTypes(*this, FD, CheckConstexprKind::Diagnose) && !Info.Constexpr) {\n Diag(FD->getBeginLoc(), getLangOpts().CPlusPlus23 ? diag::warn_cxx23_compat_defaulted_comparison_constexpr_mismatch : diag::ext_defaulted_comparison_constexpr_mismatch) << FD->isImplicit() << (int)DCK << FD->isConsteval();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,886: | Line 4,885: | ||
}, | }, | ||
["ext_defaulted_deleted_function"]={ | ["ext_defaulted_deleted_function"]={ | ||
[ | [a]="... function definitions are a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="%select{defaulted|deleted}0 function definitions are a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="(?:defaulted|deleted) function definitions are a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=y, | ||
[i]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select.","Merge some similar diagnostics using %select."}, | [i]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select.","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 */;"},{Cb,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 */;"},{Cb,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 */;"}}, | [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 // ...\n if (TryConsumeToken(tok::equal)) {\n // ...\n if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 1 /* deleted */;"},{"clang/lib/Parse/ParseCXXInlineMethods.cpp",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 // ...\n if (TryConsumeToken(tok::equal)) {\n // ...\n if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n // ...\n } else if (TryConsumeToken(tok::kw_default, KWLoc)) {\n Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 0 /* defaulted */;"},{Cb,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 // ...\n if (TryConsumeToken(tok::equal)) {\n // ...\n if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 1 /* deleted */;"},{Cb,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 // ...\n if (TryConsumeToken(tok::equal)) {\n // ...\n if (TryConsumeToken(tok::kw_delete, KWLoc)) {\n // ...\n } else if (TryConsumeToken(tok::kw_default, KWLoc)) {\n Diag(KWLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_defaulted_deleted_function : diag::ext_defaulted_deleted_function) << 0 /* defaulted */;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,903: | Line 4,902: | ||
}, | }, | ||
["ext_delete_void_ptr_operand"]={ | ["ext_delete_void_ptr_operand"]={ | ||
[ | [a]="cannot delete expression with pointer-to-\'void\' type A [-Wdelete-incomplete]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"delete-incomplete"}, | ||
[ | [l]="delete-incomplete", | ||
[ | [e]="cannot delete expression with pointer-to-\'void\' type %0", | ||
[ | [f]=p, | ||
[ | [h]="cannot delete expression with pointer\\-to\\-\'void\' type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdelete\\-incomplete[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"bb3348ed33ac",1274720516,"Downgrade deletion of a void* from an error (which is should be) to an","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","Downgrade deletion of a void* from an error (which is should be) to an"}, | ||
[j]={{ | [j]={{ab,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 // ...\n if (!Ex.get()->isTypeDependent()) {\n // ...\n if (Pointee->isVoidType() && !isSFINAEContext()) {\n // ...\n Diag(StartLoc, diag::ext_delete_void_ptr_operand) << Type << Ex.get()->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,920: | Line 4,919: | ||
}, | }, | ||
["ext_delimited_escape_sequence"]={ | ["ext_delimited_escape_sequence"]={ | ||
[ | [a]="... escape sequences are a ... extension [-Wdelimited-escape-sequence-extension]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"delimited-escape-sequence-extension",v}, | ||
[ | [l]="delimited-escape-sequence-extension", | ||
[ | [e]="%select{delimited|named}0 escape sequences are a %select{Clang|C++23}1 extension", | ||
[ | [f]=p, | ||
[ | [h]="(?:delimited|named) escape sequences are a (?:Clang|C\\+\\+23) extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdelimited\\-escape\\-sequence\\-extension[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{db,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);"},{db,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);"},{gb,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);"},{gb,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);"}}, | [j]={{db,3354,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n // ...\n if (Delimited && PP) {\n Diag(SlashLoc, PP->getLangOpts().CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*delimited*/ 0 << (PP->getLangOpts().CPlusPlus ? 1 : 0);"},{db,3442,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n // ...\n if (Diagnose && Match)\n Diag(SlashLoc, PP->getLangOpts().CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*named*/ 1 << (PP->getLangOpts().CPlusPlus ? 1 : 0);"},{gb,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 // ...\n if (Delimited && Diags) {\n if (!EndDelimiterFound)\n // ...\n else if (!HadError) {\n Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, Features.CPlusPlus23 ? diag::warn_cxx23_delimited_escape_sequence : diag::ext_delimited_escape_sequence) << /*delimited*/ 0 << (Features.CPlusPlus ? 1 : 0);"},{gb,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 4,938: | Line 4,937: | ||
}, | }, | ||
["ext_deprecated_string_literal_conversion"]={ | ["ext_deprecated_string_literal_conversion"]={ | ||
[ | [a]="ISO C++11 does not allow conversion from string literal to A [-Wwritable-strings]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"writable-strings","write-strings"}, | ||
[ | [l]="writable-strings", | ||
[ | [e]="ISO C++11 does not allow conversion from string literal to %0", | ||
[ | [f]=p, | ||
[ | [h]="ISO C\\+\\+11 does not allow conversion from string literal to (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wwritable\\-strings[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"1121de36c26b",1389992932,"Fix string-literal to char* conversion in overload resolution for C++11","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","Fix string-literal to char* conversion in overload resolution for C++11"}, | ||
[j]={{ | [j]={{ab,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 // ...\n case ICK_Qualification: {\n // ...\n if (SCS.DeprecatedStringLiteralToCharPtr && !getLangOpts().WritableStrings) {\n Diag(From->getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::ext_deprecated_string_literal_conversion : diag::warn_deprecated_string_literal_conversion) << ToType.getNonReferenceType();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 4,955: | Line 4,954: | ||
}, | }, | ||
["ext_designated_init"]={ | ["ext_designated_init"]={ | ||
[ | [a]="designated initializers are a C99 feature [-Wc99-designator]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={Db,X,v}, | ||
[ | [l]=Db, | ||
[ | [e]="designated initializers are a C99 feature", | ||
[ | [f]=p, | ||
[ | [h]="designated initializers are a C99 feature", | ||
[ | [b]=gd, | ||
[ | [g]=n, | ||
[i]={"c124e59c90a3",1295194396,"Emit an extension diagnostic for C99 designated initializers that appear in C++ code","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","Emit an extension diagnostic for C99 designated initializers that appear in C++ code"}, | ||
[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);"}}, | [j]={{z,7959,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n // ...\n if (FirstDesignator.isValid()) {\n // Only diagnose designated initiaization as a C++20 extension if we didn\'t\n // already diagnose use of (non-C++20) C99 designator syntax.\n if (getLangOpts().CPlusPlus && !DiagnosedArrayDesignator && !DiagnosedNestedDesignator && !DiagnosedMixedDesignator) {\n // ...\n } else if (!getLangOpts().CPlusPlus && !getLangOpts().C99) {\n Diag(FirstDesignator, diag::ext_designated_init);"}}, | ||
[k]={ | [k]={ | ||
[ | [Sc]={"clang/test/Sema/c89.c:80:19: warning: designated initializers are a C99 feature [-Wc99-designator]"} | ||
} | } | ||
}, | }, | ||
["ext_designated_init_array"]={ | ["ext_designated_init_array"]={ | ||
[ | [a]="array designators are a C99 extension [-Wc99-designator]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Db,X}, | ||
[ | [l]=Db, | ||
[ | [e]="array designators are a C99 extension", | ||
[ | [f]=p, | ||
[ | [h]="array designators are a C99 extension", | ||
[ | [b]=gd, | ||
[ | [g]=n, | ||
[i]={Tc,1567205575, | [i]={Tc,1567205575,yb,yb}, | ||
[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();"}}, | [j]={{z,7808,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n // ...\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 // ...\n for (auto &Desig : DIE->designators()) {\n if (!Desig.isFieldDesignator() && !DiagnosedArrayDesignator) {\n // ...\n Diag(Desig.getBeginLoc(), diag::ext_designated_init_array) << Desig.getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/eval-crashes.cpp"]={"clang/test/SemaCXX/eval-crashes.cpp:40:22: warning: array designators are a C99 extension [-Wc99-designator]"} | ["clang/test/SemaCXX/eval-crashes.cpp"]={"clang/test/SemaCXX/eval-crashes.cpp:40:22: warning: array designators are a C99 extension [-Wc99-designator]"} | ||
Line 4,990: | Line 4,989: | ||
}, | }, | ||
["ext_designated_init_brace_elision"]={ | ["ext_designated_init_brace_elision"]={ | ||
[ | [a]="brace elision for designated initializer is a C99 extension [-Wc99-designator]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Db,X}, | ||
[ | [l]=Db, | ||
[ | [e]="brace elision for designated initializer is a C99 extension", | ||
[ | [f]=p, | ||
[ | [h]="brace elision for designated initializer is a C99 extension", | ||
[ | [b]=gd, | ||
[ | [g]=n, | ||
[i]={"61d065e21ff3",1590001902, | [i]={"61d065e21ff3",1590001902,Cc,Cc}, | ||
[j]={{W,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()), \"}\");"}}, | [j]={{W,1560,"void InitListChecker::CheckSubElementType(const InitializedEntity &Entity, InitListExpr *IList, QualType ElemType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool DirectlyDesignated) {\n // ...\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 // ...\n // In C++20, brace elision is not permitted for a designated initializer.\n if (DirectlyDesignated && SemaRef.getLangOpts().CPlusPlus && !hadError) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,007: | Line 5,006: | ||
}, | }, | ||
["ext_designated_init_mixed"]={ | ["ext_designated_init_mixed"]={ | ||
[ | [a]="mixture of designated and non-designated initializers in the same initializer list is a C99 extension [-Wc99-designator]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Db,X}, | ||
[ | [l]=Db, | ||
[ | [e]="mixture of designated and non-designated initializers in the same initializer list is a C99 extension", | ||
[ | [f]=p, | ||
[ | [h]="mixture of designated and non\\-designated initializers in the same initializer list is a C99 extension", | ||
[ | [b]=gd, | ||
[ | [g]=n, | ||
[i]={Tc,1567205575, | [i]={Tc,1567205575,yb,yb}, | ||
[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();"}}, | [j]={{z,7810,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n // ...\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 // ...\n if (!DiagnosedMixedDesignator && !isa<DesignatedInitExpr>(InitArgList[0])) {\n // ...\n Diag(DIE->getBeginLoc(), diag::ext_designated_init_mixed) << DIE->getSourceRange();"},{z,7819,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n // ...\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 // ...\n } else if (getLangOpts().CPlusPlus && !DiagnosedMixedDesignator && isa<DesignatedInitExpr>(InitArgList[0])) {\n // ...\n Diag(DIE->getBeginLoc(), diag::ext_designated_init_mixed) << DIE->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,024: | Line 5,023: | ||
}, | }, | ||
["ext_designated_init_nested"]={ | ["ext_designated_init_nested"]={ | ||
[ | [a]="nested designators are a C99 extension [-Wc99-designator]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Db,X}, | ||
[ | [l]=Db, | ||
[ | [e]="nested designators are a C99 extension", | ||
[ | [f]=p, | ||
[ | [h]="nested designators are a C99 extension", | ||
[ | [b]=gd, | ||
[ | [g]=n, | ||
[i]={Tc,1567205575, | [i]={Tc,1567205575,yb,yb}, | ||
[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();"}}, | [j]={{z,7800,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n // ...\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 // ...\n if (!DiagnosedNestedDesignator && DIE->size() > 1) {\n // ...\n Diag(DIE->getBeginLoc(), diag::ext_designated_init_nested) << DIE->getDesignatorsSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,041: | Line 5,040: | ||
}, | }, | ||
["ext_designated_init_reordered"]={ | ["ext_designated_init_reordered"]={ | ||
[ | [a]="ISO C++ requires field designators to be specified in declaration order; field A will be initialized after field B [-Wreorder-init-list]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={mb,vb,sb,"reorder","reorder-init-list"}, | ||
[ | [l]="reorder-init-list", | ||
[ | [e]="ISO C++ requires field designators to be specified in declaration order; field %1 will be initialized after field %0", | ||
[ | [f]=p, | ||
[ | [h]="ISO C\\+\\+ requires field designators to be specified in declaration order; field (.*?) will be initialized after field (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wreorder\\-init\\-list[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={Tc,1567205575, | [i]={Tc,1567205575,yb,yb}, | ||
[j]={{W,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();"}}, | [j]={{W,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 // ...\n if (D->isFieldDesignator()) {\n // ...\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 // ...\n if (PrevField && PrevField->getFieldIndex() > KnownField->getFieldIndex()) {\n SemaRef.Diag(DIE->getBeginLoc(), diag::ext_designated_init_reordered) << KnownField << PrevField << DIE->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,058: | Line 5,057: | ||
}, | }, | ||
["ext_destructor_typedef_name"]={ | ["ext_destructor_typedef_name"]={ | ||
[ | [a]="destructor cannot be declared using a ... A of the class name [-Wdtor-typedef]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"dtor-typedef"}, | ||
[ | [l]="dtor-typedef", | ||
[ | [e]="destructor cannot be declared using a %select{typedef|type alias}1 %0 of the class name", | ||
[ | [f]=S, | ||
[ | [h]="destructor cannot be declared using a (?:typedef|type alias) (.*?) of the class name", | ||
[ | [b]=" \\[[^\\]]*\\-Wdtor\\-typedef[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={Yc,1576809732,Eb,Eb}, | ||
[j]={{B,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());"},{B,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;"}}, | [j]={{B,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 // ...\n if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>())\n Diag(D.getIdentifierLoc(), diag::ext_destructor_typedef_name) << DeclaratorType << isa<TypeAliasDecl>(TT->getDecl());"},{B,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 // ...\n if (const TypedefType *TT = DeclaratorType->getAs<TypedefType>())\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,075: | Line 5,074: | ||
}, | }, | ||
["ext_dollar_in_identifier"]={ | ["ext_dollar_in_identifier"]={ | ||
[ | [a]="\'$\' in identifier [-Wdollar-in-identifier-extension]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"dollar-in-identifier-extension",v}, | ||
[ | [l]="dollar-in-identifier-extension", | ||
[ | [e]="\'$\' in identifier", | ||
[ | [f]=p, | ||
[ | [h]="\'\\$\' in identifier", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdollar\\-in\\-identifier\\-extension[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{db,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);"},{db,3881,"LexStart:\n case \'$\': // $ in identifiers.\n if (LangOpts.DollarIdents) {\n if (!isLexingRawMode())\n Diag(CurPtr - 1, diag::ext_dollar_in_identifier);"}}, | [j]={{db,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 // ...\n if (C == \'$\') {\n // ...\n // Otherwise, emit a diagnostic and continue.\n if (!isLexingRawMode())\n Diag(CurPtr, diag::ext_dollar_in_identifier);"},{db,3881,"LexStart:\n // ...\n case \'$\': // $ in identifiers.\n if (LangOpts.DollarIdents) {\n if (!isLexingRawMode())\n Diag(CurPtr - 1, diag::ext_dollar_in_identifier);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Preprocessor/c90.c"]={"clang/test/Preprocessor/c90.c:10:13: error: \'$\' in identifier [-Werror,-Wdollar-in-identifier-extension]"} | ["clang/test/Preprocessor/c90.c"]={"clang/test/Preprocessor/c90.c:10:13: error: \'$\' in identifier [-Werror,-Wdollar-in-identifier-extension]"} | ||
Line 5,093: | Line 5,092: | ||
}, | }, | ||
["ext_dtor_name_ambiguous"]={ | ["ext_dtor_name_ambiguous"]={ | ||
[ | [a]="ISO C++ considers this destructor name lookup to be ambiguous [-Wdtor-name]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={Hc,v}, | ||
[ | [l]=Hc, | ||
[ | [e]="ISO C++ considers this destructor name lookup to be ambiguous", | ||
[ | [f]=p, | ||
[ | [h]="ISO C\\+\\+ considers this destructor name lookup to be ambiguous", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdtor\\-name[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={dd,1576908663,Mb,Mb}, | ||
[j]={{ | [j]={{ab,228,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n // ...\n auto CheckLookupResult = [&](LookupResult &Found) -> ParsedType {\n // ...\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);"}} | ||
}, | }, | ||
["ext_dtor_named_in_wrong_scope"]={ | ["ext_dtor_named_in_wrong_scope"]={ | ||
[ | [a]="ISO C++ requires the name after \'::~\' to be found in the same scope as the name before \'::~\' [-Wdtor-name]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={Hc,v}, | ||
[ | [l]=Hc, | ||
[ | [e]="ISO C++ requires the name after \'::~\' to be found in the same scope as the name before \'::~\'", | ||
[ | [f]=p, | ||
[ | [h]="ISO C\\+\\+ requires the name after \'\\:\\:~\' to be found in the same scope as the name before \'\\:\\:~\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdtor\\-name[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={Yc,1576809732,Eb,Eb}, | ||
[j]={{ | [j]={{ab,385,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,126: | Line 5,125: | ||
}, | }, | ||
["ext_duplicate_declspec"]={ | ["ext_duplicate_declspec"]={ | ||
[ | [a]="duplicate \'A\' declaration specifier [-Wduplicate-decl-specifier]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"duplicate-decl-specifier",v}, | ||
[ | [l]="duplicate-decl-specifier", | ||
[ | [e]="duplicate \'%0\' declaration specifier", | ||
[ | [f]=p, | ||
[ | [h]="duplicate \'(.*?)\' declaration specifier", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-decl\\-specifier[^\\]]*\\]", | ||
[ | [g]=r, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{K,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)"},{U,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\";"},{U,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\";"}}, | [j]={{K,4487,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n // If the specifier wasn\'t legal, issue a diagnostic.\n if (isInvalid) {\n // ...\n if (DiagID == diag::ext_duplicate_declspec || DiagID == diag::ext_warn_duplicate_declspec || DiagID == diag::err_duplicate_declspec)"},{U,1894,"#include \"clang/Basic/OpenCLImageTypes.def\"\n // ...\n // Apply const/volatile/restrict qualifiers to T.\n if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n // ...\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\";"},{U,1899,"#include \"clang/Basic/OpenCLImageTypes.def\"\n // ...\n // Apply const/volatile/restrict qualifiers to T.\n if (unsigned TypeQuals = DS.getTypeQualifiers()) {\n // ...\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 // ...\n if (TypeQuals & DeclSpec::TQ_volatile && Result.isVolatileQualified()) {\n S.Diag(DS.getVolatileSpecLoc(), diag::ext_duplicate_declspec) << \"volatile\";"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:25:20: warning: duplicate \'__forceinline\' declaration specifier [-Wduplicate-decl-specifier]"} | ["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:25:20: warning: duplicate \'__forceinline\' declaration specifier [-Wduplicate-decl-specifier]"} | ||
Line 5,144: | Line 5,143: | ||
}, | }, | ||
["ext_dynamic_exception_spec"]={ | ["ext_dynamic_exception_spec"]={ | ||
[ | [a]="ISO C++17 does not allow dynamic exception specifications [-Wdynamic-exception-spec]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"dynamic-exception-spec"}, | ||
[ | [l]="dynamic-exception-spec", | ||
[ | [e]="ISO C++17 does not allow dynamic exception specifications", | ||
[ | [f]=S, | ||
[ | [h]="ISO C\\+\\+17 does not allow dynamic exception specifications", | ||
[ | [b]=" \\[[^\\]]*\\-Wdynamic\\-exception\\-spec[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"82da19ddb327",1481165347,"[c++1z] P0003R5: Removing dynamic exception specifications.","[c++1z] P0003R5: Removing dynamic exception specifications."}, | [i]={"82da19ddb327",1481165347,"[c++1z] P0003R5: Removing dynamic exception specifications.","[c++1z] P0003R5: Removing dynamic exception specifications."}, | ||
[j]={{O,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;"}}, | [j]={{O,4010,"static void diagnoseDynamicExceptionSpecification(Parser &P, SourceRange Range, bool IsNoexcept) {\n if (P.getLangOpts().CPlusPlus11) {\n // ...\n P.Diag(Range.getBegin(), P.getLangOpts().CPlusPlus17 && !IsNoexcept ? diag::ext_dynamic_exception_spec : diag::warn_exception_spec_deprecated) << Range;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,161: | Line 5,160: | ||
}, | }, | ||
["ext_elaborated_enum_class"]={ | ["ext_elaborated_enum_class"]={ | ||
[ | [a]="reference to enumeration must use \'enum\' not \'enum ...\' [-Welaborated-enum-class]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"elaborated-enum-class"}, | ||
[ | [l]="elaborated-enum-class", | ||
[ | [e]="reference to enumeration must use \'enum\' not \'enum %select{struct|class}0\'", | ||
[ | [f]=S, | ||
[ | [h]="reference to enumeration must use \'enum\' not \'enum (?:struct|class)\'", | ||
[ | [b]=" \\[[^\\]]*\\-Welaborated\\-enum\\-class[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"d6425e2c1437",1589141691,"Properly implement \'enum class\' parsing.","Properly implement \'enum class\' parsing."}, | [i]={"d6425e2c1437",1589141691,"Properly implement \'enum class\' parsing.","Properly implement \'enum class\' parsing."}, | ||
[j]={{K,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;"}}, | [j]={{K,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 // ...\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 // ...\n if (BaseType.isUsable())\n // ...\n else if (ScopedEnumKWLoc.isValid())\n Diag(ScopedEnumKWLoc, diag::ext_elaborated_enum_class) << FixItHint::CreateRemoval(ScopedEnumKWLoc) << IsScopedUsingClassTag;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,178: | Line 5,177: | ||
}, | }, | ||
["ext_ellipsis_exception_spec"]={ | ["ext_ellipsis_exception_spec"]={ | ||
[ | [a]="exception specification of \'...\' is a Microsoft extension [-Wmicrosoft-exception-spec]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={J,Kb,v}, | ||
[ | [l]=Kb, | ||
[ | [e]="exception specification of \'...\' is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="exception specification of \'\\.\\.\\.\' is a Microsoft extension", | ||
[ | [b]=Xc, | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{O,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);"}} | [j]={{O,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 // ...\n // Parse throw(...), a Microsoft extension that means \"this function\n // can throw anything\".\n if (Tok.is(tok::ellipsis)) {\n // ...\n if (!getLangOpts().MicrosoftExt)\n Diag(EllipsisLoc, diag::ext_ellipsis_exception_spec);"}} | ||
}, | }, | ||
["ext_embedded_directive"]={ | ["ext_embedded_directive"]={ | ||
[ | [a]="embedding a directive within macro arguments has undefined behavior [-Wembedded-directive]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"embedded-directive",v}, | ||
[ | [l]="embedded-directive", | ||
[ | [e]="embedding a directive within macro arguments has undefined behavior", | ||
[ | [f]=p, | ||
[ | [h]="embedding a directive within macro arguments has undefined behavior", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wembedded\\-directive[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{bb,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 // ...\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 // ...\n Diag(Result, diag::ext_embedded_directive);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,211: | Line 5,210: | ||
}, | }, | ||
["ext_empty_character"]={ | ["ext_empty_character"]={ | ||
[ | [a]="empty character constant [-Winvalid-pp-token]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"invalid-pp-token"}, | ||
[ | [l]="invalid-pp-token", | ||
[ | [e]="empty character constant", | ||
[ | [f]=p, | ||
[ | [h]="empty character constant", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Winvalid\\-pp\\-token[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"608c0b65d785",1340869916,"Add warning flag -Winvalid-pp-token for preprocessing-tokens which have","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","Add warning flag -Winvalid-pp-token for preprocessing-tokens which have"}, | ||
[j]={{db,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);"}}, | [j]={{db,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 // ...\n if (C == \'\\\'\') {\n if (!isLexingRawMode() && !LangOpts.AsmPreprocessor)\n Diag(BufferPtr, diag::ext_empty_character);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,228: | Line 5,227: | ||
}, | }, | ||
["ext_empty_fnmacro_arg"]={ | ["ext_empty_fnmacro_arg"]={ | ||
[ | [a]="empty macro arguments are a C99 feature [-Wc99-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={X,v}, | ||
[ | [l]=X, | ||
[ | [e]="empty macro arguments are a C99 feature", | ||
[ | [f]=p, | ||
[ | [h]="empty macro arguments are a C99 feature", | ||
[ | [b]=Jb, | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[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);"}}, | [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 // ...\n while (Tok.isNot(tok::r_paren)) {\n // ...\n // Empty arguments are standard in C99 and C++0x, and are supported as an\n // extension in other modes.\n if (ArgTokens.size() == ArgTokenStart && !getLangOpts().C99)\n Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_empty_fnmacro_arg : diag::ext_empty_fnmacro_arg);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,246: | Line 5,245: | ||
}, | }, | ||
["ext_empty_struct_union"]={ | ["ext_empty_struct_union"]={ | ||
[ | [a]="empty ... is a GNU extension [-Wgnu-empty-struct]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,mc,v}, | ||
[ | [l]=mc, | ||
[ | [e]="empty %select{struct|union}0 is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="empty (?:struct|union) is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-empty\\-struct[^\\]]*\\]", | ||
[ | [g]=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...","Reword the empty struct/union warning in C to note that such structs and unions have size 0 in C, size 1 in C++. Put this warning under -Wc++-compat."}, | [i]={"da2955ed744e",1280413774,"Reword the empty struct/union warning in C to note that such structs and unions have size 0 in C, si...","Reword the empty struct/union warning in C to note that such structs and unions have size 0 in C, size 1 in C++. Put this warning under -Wc++-compat."}, | ||
[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();"}}, | [j]={{x,19135,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // ...\n // Okay, we successfully defined \'Record\'.\n if (Record) {\n // ...\n if (CheckForZeroSize) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,264: | Line 5,263: | ||
}, | }, | ||
["ext_empty_translation_unit"]={ | ["ext_empty_translation_unit"]={ | ||
[ | [a]="ISO C requires a translation unit to contain at least one declaration [-Wempty-translation-unit]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"empty-translation-unit",v}, | ||
[ | [l]="empty-translation-unit", | ||
[ | [e]="ISO C requires a translation unit to contain at least one declaration", | ||
[ | [f]=p, | ||
[ | [h]="ISO C requires a translation unit to contain at least one declaration", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wempty\\-translation\\-unit[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"ccf43ca05cb1",1339003521,"Add pedantic warning -Wempty-translation-unit (C11 6.9p1).","Add pedantic warning -Wempty-translation-unit (C11 6.9p1)."}, | [i]={"ccf43ca05cb1",1339003521,"Add pedantic warning -Wempty-translation-unit (C11 6.9p1).","Add pedantic warning -Wempty-translation-unit (C11 6.9p1)."}, | ||
[j]={{Cb,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);"}}, | [j]={{Cb,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,282: | Line 5,281: | ||
}, | }, | ||
["ext_enum_base_in_type_specifier"]={ | ["ext_enum_base_in_type_specifier"]={ | ||
[ | [a]="non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration... [-Welaborated-enum-base]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"elaborated-enum-base"}, | ||
[ | [l]="elaborated-enum-base", | ||
[ | [e]="non-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration%select{|; missing list of enumerators?}0", | ||
[ | [f]=S, | ||
[ | [h]="non\\-defining declaration of enumeration with a fixed underlying type is only permitted as a standalone declaration(?:|; missing list of enumerators\\?)", | ||
[ | [b]=" \\[[^\\]]*\\-Welaborated\\-enum\\-base[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"c90e19810743",1588991058,"Fix parsing of enum-base to follow C++11 rules.","Fix parsing of enum-base to follow C++11 rules."}, | [i]={"c90e19810743",1588991058,"Fix parsing of enum-base to follow C++11 rules.","Fix parsing of enum-base to follow C++11 rules."}, | ||
[j]={{K,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;"}}, | [j]={{K,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 // ...\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 // ...\n if (BaseType.isUsable())\n Diag(BaseRange.getBegin(), diag::ext_enum_base_in_type_specifier) << (AllowEnumSpecifier == AllowDefiningTypeSpec::Yes) << BaseRange;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,299: | Line 5,298: | ||
}, | }, | ||
["ext_enum_friend"]={ | ["ext_enum_friend"]={ | ||
[ | [a]="befriending enumeration type A is a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="befriending enumeration type %0 is a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="befriending enumeration type (.*?) is a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=n, | ||
[i]={"3b4abb679211",1270663032, | [i]={"3b4abb679211",1270663032,Jc,Jc}, | ||
[j]={{B,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;"}}, | [j]={{B,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 // ...\n // C++03 [class.friend]p2:\n // An elaborated-type-specifier shall be used in a friend declaration\n // for a class.*\n //\n // * The class-key of the elaborated-type-specifier is required.\n if (!CodeSynthesisContexts.empty()) {\n // ...\n } else {\n if (!T->isElaboratedTypeSpecifier()) {\n // ...\n } else if (T->getAs<EnumType>()) {\n Diag(FriendLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_enum_friend : diag::ext_enum_friend) << T << TypeRange;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,316: | Line 5,315: | ||
}, | }, | ||
["ext_enum_too_large"]={ | ["ext_enum_too_large"]={ | ||
[ | [a]="enumeration values exceed range of largest integer [-Wenum-too-large]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"enum-too-large"}, | ||
[ | [l]="enum-too-large", | ||
[ | [e]="enumeration values exceed range of largest integer", | ||
[ | [f]=p, | ||
[ | [h]="enumeration values exceed range of largest integer", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wenum\\-too\\-large[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"faf156ad158b",1394060098,"Tests for DR370-380.","Tests for DR370-380."}, | [i]={"faf156ad158b",1394060098,"Tests for DR370-380.","Tests for DR370-380."}, | ||
[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);"}}, | [j]={{x,19818,"void Sema::ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange, Decl *EnumDeclX, ArrayRef<Decl *> Elements, Scope *S, const ParsedAttributesView &Attrs) {\n // ...\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 // ...\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 // ...\n } else if (Packed && NumNegativeBits <= ShortWidth && NumPositiveBits < ShortWidth) {\n // ...\n } else if (NumNegativeBits <= IntWidth && NumPositiveBits < IntWidth) {\n // ...\n } else {\n // ...\n if (NumNegativeBits <= BestWidth && NumPositiveBits < BestWidth) {\n // ...\n } else {\n // ...\n if (NumNegativeBits > BestWidth || NumPositiveBits >= BestWidth)\n Diag(Enum->getLocation(), diag::ext_enum_too_large);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:17:6: warning: enumeration values exceed range of largest integer [-Wenum-too-large]"} | ["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:17:6: warning: enumeration values exceed range of largest integer [-Wenum-too-large]"} | ||
Line 5,333: | Line 5,332: | ||
}, | }, | ||
["ext_enum_value_not_int"]={ | ["ext_enum_value_not_int"]={ | ||
[ | [a]="ISO C restricts enumerator values to range of \'int\' (A is too ...) [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="ISO C restricts enumerator values to range of \'int\' (%0 is too %select{small|large}1)", | ||
[ | [f]=p, | ||
[ | [h]="ISO C restricts enumerator values to range of \'int\' \\((.*?) is too (?:small|large)\\)", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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;"}}, | [j]={{x,19321,"EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum, EnumConstantDecl *LastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, Expr *Val) {\n // ...\n if (Val) {\n if (Enum->isDependentType() || Val->isTypeDependent() || Val->containsErrors())\n // ...\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 // ...\n } else if (!Val->isValueDependent() && !(Val = VerifyIntegerConstantExpression(Val, &EnumVal, AllowFold).get())) {\n // ...\n } else {\n if (Enum->isComplete()) {\n // ...\n } else if (getLangOpts().CPlusPlus) {\n // ...\n } else {\n // ...\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 // ...\n if (!Val) {\n if (Enum->isDependentType())\n // ...\n else if (!LastEnumConst) {\n // ...\n } else {\n // ...\n // Check for overflow on increment.\n if (EnumVal < LastEnumConst->getInitVal()) {\n // ...\n } else if (!getLangOpts().CPlusPlus && !EltTy->isDependentType() && !isRepresentableIntegerValue(Context, EnumVal, EltTy)) {\n // ...\n Diag(IdLoc, diag::ext_enum_value_not_int) << toString(EnumVal, 10) << 1;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,351: | Line 5,350: | ||
}, | }, | ||
["ext_enumerator_increment_too_large"]={ | ["ext_enumerator_increment_too_large"]={ | ||
[ | [a]="incremented enumerator value A is not representable in the largest integer type [-Wenum-too-large]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"enum-too-large"}, | ||
[ | [l]="enum-too-large", | ||
[ | [e]="incremented enumerator value %0 is not representable in the largest integer type", | ||
[ | [f]=p, | ||
[ | [h]="incremented enumerator value (.*?) is not representable in the largest integer type", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wenum\\-too\\-large[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"faf156ad158b",1394060098,"Tests for DR370-380.","Tests for DR370-380."}, | [i]={"faf156ad158b",1394060098,"Tests for DR370-380.","Tests for DR370-380."}, | ||
[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);"}}, | [j]={{x,19383,"EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum, EnumConstantDecl *LastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, Expr *Val) {\n // ...\n if (!Val) {\n if (Enum->isDependentType())\n // ...\n else if (!LastEnumConst) {\n // ...\n } else {\n // ...\n // Check for overflow on increment.\n if (EnumVal < LastEnumConst->getInitVal()) {\n // ...\n if (T.isNull() || Enum->isFixed()) {\n // ...\n if (Enum->isFixed())\n // ...\n else\n Diag(IdLoc, diag::ext_enumerator_increment_too_large) << toString(EnumVal, 10);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,368: | Line 5,367: | ||
}, | }, | ||
["ext_enumerator_list_comma_c"]={ | ["ext_enumerator_list_comma_c"]={ | ||
[ | [a]="commas at the end of enumerator lists are a C99-specific feature [-Wc99-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={X,v}, | ||
[ | [l]=X, | ||
[ | [e]="commas at the end of enumerator lists are a C99-specific feature", | ||
[ | [f]=p, | ||
[ | [h]="commas at the end of enumerator lists are a C99\\-specific feature", | ||
[ | [b]=Jb, | ||
[ | [g]=y, | ||
[i]={"87f5dc53b23e",1343022325, | [i]={"87f5dc53b23e",1343022325,yc,yc}, | ||
[j]={{K,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);"}} | [j]={{K,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 // ...\n // Parse the enumerator-list.\n while (Tok.isNot(tok::r_brace)) {\n // ...\n // If comma is followed by r_brace, emit appropriate warning.\n if (Tok.is(tok::r_brace) && CommaLoc.isValid()) {\n if (!getLangOpts().C99 && !getLangOpts().CPlusPlus11)\n 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"]={ | ||
[ | [a]="commas at the end of enumerator lists are a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={V,H,v}, | ||
[ | [l]=H, | ||
[ | [e]="commas at the end of enumerator lists are a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="commas at the end of enumerator lists are a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=y, | ||
[i]={"87f5dc53b23e",1343022325, | [i]={"87f5dc53b23e",1343022325,yc,yc}, | ||
[j]={{K,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);"}}, | [j]={{K,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 // ...\n // Parse the enumerator-list.\n while (Tok.isNot(tok::r_brace)) {\n // ...\n // If comma is followed by r_brace, emit appropriate warning.\n if (Tok.is(tok::r_brace) && CommaLoc.isValid()) {\n if (!getLangOpts().C99 && !getLangOpts().CPlusPlus11)\n Diag(CommaLoc, getLangOpts().CPlusPlus ? diag::ext_enumerator_list_comma_cxx : diag::ext_enumerator_list_comma_c) << FixItHint::CreateRemoval(CommaLoc);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,401: | Line 5,400: | ||
}, | }, | ||
["ext_enumerator_too_large"]={ | ["ext_enumerator_too_large"]={ | ||
[ | [a]="enumerator value is not representable in the underlying type A [-Wmicrosoft-enum-value]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={J,"microsoft-enum-value",v}, | ||
[ | [l]="microsoft-enum-value", | ||
[ | [e]="enumerator value is not representable in the underlying type %0", | ||
[ | [f]=p, | ||
[ | [h]="enumerator value is not representable in the underlying type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-enum\\-value[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"a310806ae57f",1287414073,"Microsoft enum extensions. 2 things will change on -fms-extensions:","Microsoft enum extensions. 2 things will change on -fms-extensions:"}, | [i]={"a310806ae57f",1287414073,"Microsoft enum extensions. 2 things will change on -fms-extensions:","Microsoft enum extensions. 2 things will change on -fms-extensions:"}, | ||
[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;"}}, | [j]={{x,19295,"EnumConstantDecl *Sema::CheckEnumConstant(EnumDecl *Enum, EnumConstantDecl *LastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, Expr *Val) {\n // ...\n if (Val) {\n if (Enum->isDependentType() || Val->isTypeDependent() || Val->containsErrors())\n // ...\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 // ...\n } else if (!Val->isValueDependent() && !(Val = VerifyIntegerConstantExpression(Val, &EnumVal, AllowFold).get())) {\n // ...\n } else {\n if (Enum->isComplete()) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,419: | Line 5,418: | ||
}, | }, | ||
["ext_equals_this_lambda_capture_cxx20"]={ | ["ext_equals_this_lambda_capture_cxx20"]={ | ||
[ | [a]="explicit capture of \'this\' with a capture default of \'=\' is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="explicit capture of \'this\' with a capture default of \'=\' is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="explicit capture of \'this\' with a capture default of \'\\=\' is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]="Lambda Issue", | ||
[i]={ | [i]={"8194a3e975e5",1503114187,"[c++2a] Implement P0409R2 - Allow lambda capture [=,this] (by hamzasood)","[c++2a] Implement P0409R2 - Allow lambda capture [=,this] (by hamzasood)"}, | ||
[j]={{"clang/lib/Sema/SemaLambda.cpp",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);"}}, | [j]={{"clang/lib/Sema/SemaLambda.cpp",1043,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n // ...\n for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n // ...\n // C++20 [expr.prim.lambda]p8:\n // If a lambda-capture includes a capture-default that is =,\n // each simple-capture of that lambda-capture shall be of the form\n // \"&identifier\", \"this\", or \"* this\". [ Note: The form [&,this] is\n // redundant but accepted for compatibility with ISO C++14. --end note ]\n if (Intro.Default == LCD_ByCopy && C->Kind != LCK_StarThis)\n Diag(C->Loc, !getLangOpts().CPlusPlus20 ? diag::ext_equals_this_lambda_capture_cxx20 : diag::warn_cxx17_compat_equals_this_lambda_capture);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,436: | Line 5,435: | ||
}, | }, | ||
["ext_equivalent_internal_linkage_decl_in_modules"]={ | ["ext_equivalent_internal_linkage_decl_in_modules"]={ | ||
[ | [a]="ambiguous use of internal linkage declaration A defined in multiple modules [-Wmodules-ambiguous-internal-linkage]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"modules-ambiguous-internal-linkage"}, | ||
[ | [l]="modules-ambiguous-internal-linkage", | ||
[ | [e]="ambiguous use of internal linkage declaration %0 defined in multiple modules", | ||
[ | [f]=p, | ||
[ | [h]="ambiguous use of internal linkage declaration (.*?) defined in multiple modules", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmodules\\-ambiguous\\-internal\\-linkage[^\\]]*\\]", | ||
[ | [g]=bd, | ||
[i]={"2dbe4043e8f5",1446665192,"[modules] Generalize the workaround for multiple ambiguous definitions of","[modules] Generalize the workaround for multiple ambiguous definitions of"}, | [i]={"2dbe4043e8f5",1446665192,"[modules] Generalize the workaround for multiple ambiguous definitions of","[modules] Generalize the workaround for multiple ambiguous definitions of"}, | ||
[j]={{Qb,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;"}}, | [j]={{Qb,10303,"void Sema::diagnoseEquivalentInternalLinkageDeclarations(SourceLocation Loc, const NamedDecl *D, ArrayRef<const NamedDecl *> Equiv) {\n // ...\n Diag(Loc, diag::ext_equivalent_internal_linkage_decl_in_modules) << D;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,453: | Line 5,452: | ||
}, | }, | ||
["ext_excess_initializers"]={ | ["ext_excess_initializers"]={ | ||
[ | [a]="excess elements in ... initializer [-Wexcess-initializers]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={ac}, | ||
[ | [l]=ac, | ||
[ | [e]="excess elements in %select{array|vector|scalar|union|struct}0 initializer", | ||
[ | [f]=p, | ||
[ | [h]="excess elements in (?:array|vector|scalar|union|struct) initializer", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wexcess\\-initializers[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[j]={{W,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;"}}, | [j]={{W,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 // ...\n // Don\'t complain for incomplete types, since we\'ll get an error elsewhere.\n if (Index < IList->getNumInits() && !T->isIncompleteType()) {\n // ...\n if (VerifyOnly) {\n // ...\n } else if (StructuredIndex == 1 && IsStringInit(StructuredList->getInit(0), T, SemaRef.Context) == SIF_None) {\n // ...\n } else if (T->isSizelessBuiltinType()) {\n // ...\n } else {\n // ...\n unsigned DK = ExtraInitsIsError ? diag::err_excess_initializers : diag::ext_excess_initializers;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,470: | Line 5,469: | ||
}, | }, | ||
["ext_excess_initializers_for_sizeless_type"]={ | ["ext_excess_initializers_for_sizeless_type"]={ | ||
[ | [a]="excess elements in initializer for indivisible sizeless type A [-Wexcess-initializers]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={ac}, | ||
[ | [l]=ac, | ||
[ | [e]="excess elements in initializer for indivisible sizeless type %0", | ||
[ | [f]=p, | ||
[ | [h]="excess elements in initializer for indivisible sizeless type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wexcess\\-initializers[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={dd,1576908663,Mb,Mb}, | ||
[j]={{W,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;"}}, | [j]={{W,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 // ...\n // Don\'t complain for incomplete types, since we\'ll get an error elsewhere.\n if (Index < IList->getNumInits() && !T->isIncompleteType()) {\n // ...\n if (VerifyOnly) {\n // ...\n } else if (StructuredIndex == 1 && IsStringInit(StructuredList->getInit(0), T, SemaRef.Context) == SIF_None) {\n // ...\n } else if (T->isSizelessBuiltinType()) {\n unsigned DK = ExtraInitsIsError ? diag::err_excess_initializers_for_sizeless_type : diag::ext_excess_initializers_for_sizeless_type;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,487: | Line 5,486: | ||
}, | }, | ||
["ext_excess_initializers_in_char_array_initializer"]={ | ["ext_excess_initializers_in_char_array_initializer"]={ | ||
[ | [a]="excess elements in char array initializer [-Wexcess-initializers]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={ac}, | ||
[ | [l]=ac, | ||
[ | [e]="excess elements in char array initializer", | ||
[ | [f]=p, | ||
[ | [h]="excess elements in char array initializer", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wexcess\\-initializers[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[j]={{W,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;"}}, | [j]={{W,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 // ...\n // Don\'t complain for incomplete types, since we\'ll get an error elsewhere.\n if (Index < IList->getNumInits() && !T->isIncompleteType()) {\n // ...\n if (VerifyOnly) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,504: | Line 5,503: | ||
}, | }, | ||
["ext_expected_semi_decl_list"]={ | ["ext_expected_semi_decl_list"]={ | ||
[a]="expected \';\' at end of declaration list", | [a]="expected \';\' at end of declaration list", | ||
[h]=Pb, | [c]=o, | ||
[ | [d]=q, | ||
[i]={ | [e]="expected \';\' at end of declaration list", | ||
[j]={{K,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);"}}, | [f]=p, | ||
[h]="expected \';\' at end of declaration list", | |||
[b]=Pb, | |||
[g]=y, | |||
[i]={F,1236199783,E,G}, | |||
[j]={{K,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 // ...\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 // ...\n if (Tok.is(tok::r_brace)) {\n ExpectAndConsume(tok::semi, diag::ext_expected_semi_decl_list);"}}, | |||
[k]={ | [k]={ | ||
[ | [ic]={"clang/test/Parser/declarators.c:76:8: warning: expected \';\' at end of declaration list"} | ||
} | } | ||
}, | }, | ||
["ext_explicit_bool"]={ | ["ext_explicit_bool"]={ | ||
[ | [a]="explicit(bool) is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="explicit(bool) is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="explicit\\(bool\\) is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=y, | ||
[i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"}, | [i]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"}, | ||
[j]={{K,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);"}}, | [j]={{K,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 // ...\n while (true) {\n // ...\n case tok::kw_explicit: {\n // ...\n if (Tok.is(tok::l_paren)) {\n if (getLangOpts().CPlusPlus20 || isExplicitBool() == TPResult::True) {\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_explicit_bool : diag::ext_explicit_bool);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,536: | Line 5,535: | ||
}, | }, | ||
["ext_explicit_conversion_functions"]={ | ["ext_explicit_conversion_functions"]={ | ||
[ | [a]="explicit conversion functions are a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="explicit conversion functions are a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="explicit conversion functions are a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=n, | ||
[i]={"0bf8a492fd75",1318970984,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 1.","-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.","-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 1."}, | ||
[j]={{B,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());"}}, | [j]={{B,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,553: | Line 5,552: | ||
}, | }, | ||
["ext_explicit_instantiation_duplicate"]={ | ["ext_explicit_instantiation_duplicate"]={ | ||
[ | [a]="duplicate explicit instantiation of A ignored as a Microsoft extension [-Wmicrosoft-template]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,hb}, | ||
[ | [l]=hb, | ||
[ | [e]="duplicate explicit instantiation of %0 ignored as a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="duplicate explicit instantiation of (.*?) ignored as a Microsoft extension", | ||
[ | [b]=Gb, | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[j]={{I,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;"}}, | [j]={{I,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 // ...\n case TSK_ExplicitInstantiationDefinition:\n // ...\n case TSK_ExplicitInstantiationDefinition:\n // ...\n Diag(NewLoc, (getLangOpts().MSVCCompat) ? diag::ext_explicit_instantiation_duplicate : diag::err_explicit_instantiation_duplicate) << PrevDecl;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,570: | Line 5,569: | ||
}, | }, | ||
["ext_explicit_instantiation_without_qualified_id"]={ | ["ext_explicit_instantiation_without_qualified_id"]={ | ||
[ | [a]="qualifier in explicit instantiation of A requires a template-id (a typedef is not permitted) [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="qualifier in explicit instantiation of %q0 requires a template-id (a typedef is not permitted)", | ||
[ | [f]=p, | ||
[ | [h]="qualifier in explicit instantiation of (.*?) requires a template\\-id \\(a typedef is not permitted\\)", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={"010815a20b7a",1276705607,"Downgrade the error when using a typedef in the nested-name-specifier","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","Downgrade the error when using a typedef in the nested-name-specifier"}, | ||
[j]={{I,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();"},{I,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();"},{I,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();"}}, | [j]={{I,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 // ...\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();"},{I,10532,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n // ...\n if (!R->isFunctionType()) {\n // ...\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();"},{I,10754,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,588: | Line 5,587: | ||
}, | }, | ||
["ext_explicit_specialization_storage_class"]={ | ["ext_explicit_specialization_storage_class"]={ | ||
[a]="explicit specialization cannot have a storage class", | [a]="explicit specialization cannot have a storage class", | ||
[h]=Pb, | [c]=o, | ||
[ | [d]=q, | ||
[e]="explicit specialization cannot have a storage class", | |||
[f]=p, | |||
[h]="explicit specialization cannot have a storage class", | |||
[b]=Pb, | |||
[g]=n, | |||
[i]={"c976f01d3f9e",1308282095,"Downgrade the error complaining about presence of a storage class","Downgrade the error complaining about presence of a storage class"}, | [i]={"c976f01d3f9e",1308282095,"Downgrade the error complaining about presence of a storage class","Downgrade the error complaining about presence of a storage class"}, | ||
[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());"}}, | [j]={{x,10434,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (!getLangOpts().CPlusPlus) {\n // ...\n } else {\n // ...\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 // ...\n } else if (isFunctionTemplateSpecialization) {\n // ...\n if (Info && SC != SC_None) {\n if (SC != Info->getTemplate()->getTemplatedDecl()->getStorageClass())\n // ...\n else\n Diag(NewFD->getLocation(), diag::ext_explicit_specialization_storage_class) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 5,603: | Line 5,602: | ||
}, | }, | ||
["ext_expr_not_ice"]={ | ["ext_expr_not_ice"]={ | ||
[ | [a]="expression is not an ... constant expression; folding it to a constant is a GNU extension [-Wgnu-folding-constant]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,nc,v}, | ||
[ | [l]=nc, | ||
[ | [e]="expression is not an %select{integer|integral}0 constant expression; folding it to a constant is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="expression is not an (?:integer|integral) constant expression; folding it to a constant is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-folding\\-constant[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{z,17861,"Sema::SemaDiagnosticBuilder Sema::VerifyICEDiagnoser::diagnoseFold(Sema &S, SourceLocation Loc) { return S.Diag(Loc, diag::ext_expr_not_ice) << S.LangOpts.CPlusPlus; }"}}, | [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]={ | [k]={ | ||
Line 5,621: | Line 5,620: | ||
}, | }, | ||
["ext_extern_template"]={ | ["ext_extern_template"]={ | ||
[ | [a]="extern templates are a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={V,H,v}, | ||
[ | [l]=H, | ||
[ | [e]="extern templates are a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="extern templates are a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=y, | ||
[i]={"f411196d15a9",1319135758,"\'extern template\' is a C++11 feature. Add an Extension for C++98 (this matches","\'extern template\' is a C++11 feature. Add an Extension for C++98 (this matches"}, | [i]={"f411196d15a9",1319135758,"\'extern template\' is a C++11 feature. Add an Extension for C++98 (this matches","\'extern template\' is a C++11 feature. Add an Extension for C++98 (this matches"}, | ||
[j]={{Cb,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);"}}, | [j]={{Cb,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 // ...\n case tok::kw_extern:\n if (getLangOpts().CPlusPlus && NextToken().is(tok::kw_template)) {\n // ...\n Diag(ExternLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_extern_template : diag::ext_extern_template) << SourceRange(ExternLoc, TemplateLoc);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,639: | Line 5,638: | ||
}, | }, | ||
["ext_extra_semi"]={ | ["ext_extra_semi"]={ | ||
[ | [a]="extra \';\' ... [-Wextra-semi]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"extra-semi",v}, | ||
[ | [l]="extra-semi", | ||
[ | [e]="extra \';\' %select{outside of a function|inside a %1|inside instance variable list|after member function definition}0", | ||
[ | [f]=p, | ||
[ | [h]="extra \';\' (?:outside of a function|inside a (.*?)|inside instance variable list|after member function definition)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wextra\\-semi[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"2f7dc46a5868",1337195099,"Move the warnings for extra semi-colons under -Wextra-semi. Also, added","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","Move the warnings for extra semi-colons under -Wextra-semi. Also, added"}, | ||
[j]={{Cb,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));"}}, | [j]={{Cb,207,"void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) {\n // ...\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]={ | [k]={ | ||
["clang/test/Parser/objc-quirks.m"]={"clang/test/Parser/objc-quirks.m:9:2: warning: extra \';\' outside of a function [-Wextra-semi]"} | ["clang/test/Parser/objc-quirks.m"]={"clang/test/Parser/objc-quirks.m:9:2: warning: extra \';\' outside of a function [-Wextra-semi]"} | ||
Line 5,657: | Line 5,656: | ||
}, | }, | ||
["ext_extra_semi_cxx11"]={ | ["ext_extra_semi_cxx11"]={ | ||
[ | [a]="extra \';\' outside of a function is a C++11 extension [-Wc++11-extra-semi]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={V,H,"c++11-extra-semi","extra-semi",v}, | ||
[ | [l]="c++11-extra-semi", | ||
[ | [e]="extra \';\' outside of a function is a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="extra \';\' outside of a function is a C\\+\\+11 extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-extra\\-semi[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"87f5dc53b23e",1343022325, | [i]={"87f5dc53b23e",1343022325,yc,yc}, | ||
[j]={{Cb,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));"}}, | [j]={{Cb,201,"void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, DeclSpec::TST TST) {\n // ...\n // C++11 allows extra semicolons at namespace scope, but not in any of the\n // other contexts.\n if (Kind == OutsideFunction && getLangOpts().CPlusPlus) {\n if (getLangOpts().CPlusPlus11)\n // ...\n else\n Diag(StartLoc, diag::ext_extra_semi_cxx11) << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,675: | Line 5,674: | ||
}, | }, | ||
["ext_flexible_array_empty_aggregate_gnu"]={ | ["ext_flexible_array_empty_aggregate_gnu"]={ | ||
[ | [a]="flexible array member A in otherwise empty ... is a GNU extension [-Wgnu-empty-struct]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,mc,v}, | ||
[ | [l]=mc, | ||
[ | [e]="flexible array member %0 in otherwise empty %select{struct|interface|union|class|enum}1 is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="flexible array member (.*?) in otherwise empty (?:struct|interface|union|class|enum) is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-empty\\-struct[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"7e25a95600fe",1299528244, | [i]={"7e25a95600fe",1299528244,Ub,Ub}, | ||
[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;"}}, | [j]={{x,18808,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // ...\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n // ...\n if (FDTy->isFunctionType()) {\n // ...\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n if (Record) {\n // ...\n if (!Record->isUnion() && !IsLastField) {\n // ...\n } else if (Record->isUnion())\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,693: | Line 5,692: | ||
}, | }, | ||
["ext_flexible_array_empty_aggregate_ms"]={ | ["ext_flexible_array_empty_aggregate_ms"]={ | ||
[ | [a]="flexible array member A in otherwise empty ... is a Microsoft extension [-Wmicrosoft-flexible-array]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={J,"microsoft-flexible-array",v}, | ||
[ | [l]="microsoft-flexible-array", | ||
[ | [e]="flexible array member %0 in otherwise empty %select{struct|interface|union|class|enum}1 is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="flexible array member (.*?) in otherwise empty (?:struct|interface|union|class|enum) is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-flexible\\-array[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"7e25a95600fe",1299528244, | [i]={"7e25a95600fe",1299528244,Ub,Ub}, | ||
[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;"}}, | [j]={{x,18806,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // ...\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n // ...\n if (FDTy->isFunctionType()) {\n // ...\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n if (Record) {\n // ...\n if (!Record->isUnion() && !IsLastField) {\n // ...\n } else if (Record->isUnion())\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,711: | Line 5,710: | ||
}, | }, | ||
["ext_flexible_array_in_array"]={ | ["ext_flexible_array_in_array"]={ | ||
[ | [a]="A may not be used as an array element due to flexible array member [-Wflexible-array-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"flexible-array-extensions",v}, | ||
[ | [l]="flexible-array-extensions", | ||
[ | [e]="%0 may not be used as an array element due to flexible array member", | ||
[ | [f]=p, | ||
[ | [h]="(.*?) may not be used as an array element due to flexible array member", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wflexible\\-array\\-extensions[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[j]={{U,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;"}}, | [j]={{U,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,729: | Line 5,728: | ||
}, | }, | ||
["ext_flexible_array_in_struct"]={ | ["ext_flexible_array_in_struct"]={ | ||
[ | [a]="A may not be nested in a struct due to flexible array member [-Wflexible-array-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"flexible-array-extensions",v}, | ||
[ | [l]="flexible-array-extensions", | ||
[ | [e]="%0 may not be nested in a struct due to flexible array member", | ||
[ | [f]=p, | ||
[ | [h]="(.*?) may not be nested in a struct due to flexible array member", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wflexible\\-array\\-extensions[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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();"}}, | [j]={{x,18869,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // ...\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n // ...\n if (FDTy->isFunctionType()) {\n // ...\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n // ...\n } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n // ...\n } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n if (Record && FDTTy->getDecl()->hasFlexibleArrayMember()) {\n // ...\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 // ...\n else {\n // ...\n Diag(FD->getLocation(), diag::ext_flexible_array_in_struct) << FD->getDeclName();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,747: | Line 5,746: | ||
}, | }, | ||
["ext_flexible_array_init"]={ | ["ext_flexible_array_init"]={ | ||
[ | [a]="flexible array initialization is a GNU extension [-Wgnu-flexible-array-initializer]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-flexible-array-initializer",v}, | ||
[ | [l]="gnu-flexible-array-initializer", | ||
[ | [e]="flexible array initialization is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="flexible array initialization is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-flexible\\-array\\-initializer[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"07d8e3a50047",1237509176,"Allow flexible array initializers that are not surrounded by","Allow flexible array initializers that are not surrounded by"}, | [i]={"07d8e3a50047",1237509176,"Allow flexible array initializers that are not surrounded by","Allow flexible array initializers that are not surrounded by"}, | ||
[j]={{W,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;"},{W,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;"},{W,2125,"bool InitListChecker::CheckFlexibleArrayInit(const InitializedEntity &Entity, Expr *InitExpr, FieldDecl *Field, bool TopLevelObject) {\n return FlexArrayDiag != diag::ext_flexible_array_init;"}}, | [j]={{W,2103,"bool InitListChecker::CheckFlexibleArrayInit(const InitializedEntity &Entity, Expr *InitExpr, FieldDecl *Field, bool TopLevelObject) {\n // ...\n if (isa<InitListExpr>(InitExpr) && cast<InitListExpr>(InitExpr)->getNumInits() == 0) {\n // ...\n FlexArrayDiag = diag::ext_flexible_array_init;"},{W,2115,"bool InitListChecker::CheckFlexibleArrayInit(const InitializedEntity &Entity, Expr *InitExpr, FieldDecl *Field, bool TopLevelObject) {\n // ...\n if (isa<InitListExpr>(InitExpr) && cast<InitListExpr>(InitExpr)->getNumInits() == 0) {\n // ...\n } else if (!TopLevelObject) {\n // ...\n } else if (Entity.getKind() != InitializedEntity::EK_Variable) {\n // ...\n } else if (cast<VarDecl>(Entity.getDecl())->hasLocalStorage()) {\n // ...\n } else {\n // ...\n FlexArrayDiag = diag::ext_flexible_array_init;"},{W,2125,"bool InitListChecker::CheckFlexibleArrayInit(const InitializedEntity &Entity, Expr *InitExpr, FieldDecl *Field, bool TopLevelObject) {\n // ...\n return FlexArrayDiag != diag::ext_flexible_array_init;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,765: | Line 5,764: | ||
}, | }, | ||
["ext_flexible_array_union_gnu"]={ | ["ext_flexible_array_union_gnu"]={ | ||
[ | [a]="flexible array member A in a union is a GNU extension [-Wgnu-flexible-array-union-member]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-flexible-array-union-member",v}, | ||
[ | [l]="gnu-flexible-array-union-member", | ||
[ | [e]="flexible array member %0 in a union is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="flexible array member (.*?) in a union is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-flexible\\-array\\-union\\-member[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"7e25a95600fe",1299528244, | [i]={"7e25a95600fe",1299528244,Ub,Ub}, | ||
[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;"}}, | [j]={{x,18802,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // ...\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n // ...\n if (FDTy->isFunctionType()) {\n // ...\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n if (Record) {\n // ...\n if (!Record->isUnion() && !IsLastField) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,783: | Line 5,782: | ||
}, | }, | ||
["ext_flexible_array_union_ms"]={ | ["ext_flexible_array_union_ms"]={ | ||
[ | [a]="flexible array member A in a union is a Microsoft extension [-Wmicrosoft-flexible-array]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={J,"microsoft-flexible-array",v}, | ||
[ | [l]="microsoft-flexible-array", | ||
[ | [e]="flexible array member %0 in a union is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="flexible array member (.*?) in a union is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-flexible\\-array[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"7e25a95600fe",1299528244, | [i]={"7e25a95600fe",1299528244,Ub,Ub}, | ||
[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;"}}, | [j]={{x,18800,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // ...\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n // ...\n if (FDTy->isFunctionType()) {\n // ...\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n if (Record) {\n // ...\n if (!Record->isUnion() && !IsLastField) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,801: | Line 5,800: | ||
}, | }, | ||
["ext_fold_expression"]={ | ["ext_fold_expression"]={ | ||
[ | [a]="pack fold expression is a C++17 extension [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Q,kb}, | ||
[ | [l]=Q, | ||
[ | [e]="pack fold expression is a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="pack fold expression is a C\\+\\+17 extension", | ||
[ | [b]=lb, | ||
[ | [g]=y, | ||
[i]={"0f0af19b0581",1415423236,"[c++1z] N4295: fold-expressions.","[c++1z] N4295: fold-expressions."}, | [i]={"0f0af19b0581",1415423236,"[c++1z] N4295: fold-expressions.","[c++1z] N4295: fold-expressions."}, | ||
[j]={{ | [j]={{wb,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 // ...\n Diag(EllipsisLoc, getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_fold_expression : diag::ext_fold_expression);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,818: | Line 5,817: | ||
}, | }, | ||
["ext_for_range"]={ | ["ext_for_range"]={ | ||
[ | [a]="range-based for loop is a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="range-based for loop is a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="range\\-based for loop is a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=y, | ||
[i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ...","PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ExtWarn, and produce a -Wc++0x-compat warning in C++98 mode when auto is used as a storage class."}, | [i]={"58c743370994",1315166054,"PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ...","PR10458: Finesse behaviour of C++0x features when in pre-0x mode. Accept for-range and auto with an ExtWarn, and produce a -Wc++0x-compat warning in C++98 mode when auto is used as a storage class."}, | ||
[j]={{ | [j]={{Bb,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 // ...\n // Parse the first part of the for specifier.\n if (Tok.is(tok::semi)) { // for (;\n // ...\n } else if (getLangOpts().CPlusPlus && Tok.is(tok::identifier) && isForRangeIdentifier()) {\n // ...\n } else if (isForInitDeclaration()) { // for (int X = 4;\n // ...\n if (Tok.is(tok::kw_using)) {\n // ...\n } else {\n // ...\n if (ForRangeInfo.ParsedForRangeDecl()) {\n Diag(ForRangeInfo.ColonLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_for_range : diag::ext_for_range);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,835: | Line 5,834: | ||
}, | }, | ||
["ext_for_range_begin_end_types_differ"]={ | ["ext_for_range_begin_end_types_differ"]={ | ||
[ | [a]="\'begin\' and \'end\' returning different types (A and B) is a C++17 extension [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Q,kb}, | ||
[ | [l]=Q, | ||
[ | [e]="\'begin\' and \'end\' returning different types (%0 and %1) is a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="\'begin\' and \'end\' returning different types \\((.*?) and (.*?)\\) is a C\\+\\+17 extension", | ||
[ | [b]=lb, | ||
[ | [g]=n, | ||
[i]={"01694c340db8",1458470020,"P0184R0: Allow types of \'begin\' and \'end\' expressions in range-based for loops to differ.","P0184R0: Allow types of \'begin\' and \'end\' expressions in range-based for loops to differ."}, | [i]={"01694c340db8",1458470020,"P0184R0: Allow types of \'begin\' and \'end\' expressions in range-based for loops to differ.","P0184R0: Allow types of \'begin\' and \'end\' expressions in range-based for loops to differ."}, | ||
[j]={{ | [j]={{Wb,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 // ...\n if (RangeVarType->isDependentType()) {\n // ...\n } else if (!BeginDeclStmt.get()) {\n // ...\n if (!Context.hasSameType(BeginType, EndType)) {\n Diag(RangeLoc, getLangOpts().CPlusPlus17 ? diag::warn_for_range_begin_end_types_differ : diag::ext_for_range_begin_end_types_differ) << BeginType << EndType;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,852: | Line 5,851: | ||
}, | }, | ||
["ext_for_range_init_stmt"]={ | ["ext_for_range_init_stmt"]={ | ||
[ | [a]="range-based for loop initialization statements are a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="range-based for loop initialization statements are a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="range\\-based for loop initialization statements are a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=y, | ||
[i]={"8baa50013c86",1538160249,"[cxx2a] P0614R1: Support init-statements in range-based for loops.","[cxx2a] P0614R1: Support init-statements in range-based for loops."}, | [i]={"8baa50013c86",1538160249,"[cxx2a] P0614R1: Support init-statements in range-based for loops.","[cxx2a] P0614R1: Support init-statements in range-based for loops."}, | ||
[j]={{ | [j]={{Bb,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 // ...\n // Parse the second part of the for specifier.\n if (!ForEach && !ForRangeInfo.ParsedForRangeDecl() && !SecondPart.isInvalid()) {\n // Parse the second part of the for specifier.\n if (Tok.is(tok::semi)) { // for (...;;\n // ...\n } else if (Tok.is(tok::r_paren)) {\n // ...\n } else {\n if (getLangOpts().CPlusPlus) {\n // ...\n if (ForRangeInfo.ParsedForRangeDecl()) {\n Diag(FirstPart.get() ? FirstPart.get()->getBeginLoc() : ForRangeInfo.ColonLoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_for_range_init_stmt : diag::ext_for_range_init_stmt) << (FirstPart.get() ? FirstPart.get()->getSourceRange() : SourceRange());"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,869: | Line 5,868: | ||
}, | }, | ||
["ext_forward_ref_enum"]={ | ["ext_forward_ref_enum"]={ | ||
[ | [a]="ISO C forbids forward references to \'enum\' types [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="ISO C forbids forward references to \'enum\' types", | ||
[ | [f]=p, | ||
[ | [h]="ISO C forbids forward references to \'enum\' types", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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;"}}, | [j]={{x,17510,"CreateNewDecl:\n // ...\n if (Kind == TTK_Enum) {\n // ...\n // If this is an undefined enum, warn.\n if (TUK != TUK_Definition && !Invalid) {\n // ...\n if (IsFixed && cast<EnumDecl>(New)->isFixed()) {\n // ...\n } else if (PrevDecl && (Def = cast<EnumDecl>(PrevDecl)->getDefinition())) {\n // ...\n } else {\n unsigned DiagID = diag::ext_forward_ref_enum;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,887: | Line 5,886: | ||
}, | }, | ||
["ext_forward_ref_enum_def"]={ | ["ext_forward_ref_enum_def"]={ | ||
[ | [a]="redeclaration of already-defined enum A is a GNU extension [-Wgnu-redeclared-enum]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-redeclared-enum",v}, | ||
[ | [l]="gnu-redeclared-enum", | ||
[ | [e]="redeclaration of already-defined enum %0 is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="redeclaration of already\\-defined enum (.*?) is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-redeclared\\-enum[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"c9ea2d5a672b",1277216795,"In C++, allow a declaration of an enum to follow a definition of that","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","In C++, allow a declaration of an enum to follow a definition of that"}, | ||
[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;"}}, | [j]={{x,17506,"CreateNewDecl:\n // ...\n if (Kind == TTK_Enum) {\n // ...\n // If this is an undefined enum, warn.\n if (TUK != TUK_Definition && !Invalid) {\n // ...\n if (IsFixed && cast<EnumDecl>(New)->isFixed()) {\n // ...\n } else if (PrevDecl && (Def = cast<EnumDecl>(PrevDecl)->getDefinition())) {\n Diag(Loc, diag::ext_forward_ref_enum_def) << New;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,905: | Line 5,904: | ||
}, | }, | ||
["ext_found_in_dependent_base"]={ | ["ext_found_in_dependent_base"]={ | ||
[ | [a]="use of member A found via unqualified lookup into dependent bases of class templates is a Microsoft extension [-Wmicrosoft-template]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,hb}, | ||
[ | [l]=hb, | ||
[ | [e]="use of member %0 found via unqualified lookup into dependent bases of class templates is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="use of member (.*?) found via unqualified lookup into dependent bases of class templates is a Microsoft extension", | ||
[ | [b]=Gb, | ||
[ | [g]=n, | ||
[i]={"61d065e21ff3",1590001902, | [i]={"61d065e21ff3",1590001902,Cc,Cc}, | ||
[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;"}}, | [j]={{x,265,"static ParsedType recoverFromTypeInKnownDependentBase(Sema &S, const IdentifierInfo &II, SourceLocation NameLoc) {\n // ...\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 // ...\n if (R.getRepresentativeDecl()->getDeclContext()->Equals(R.getNamingClass())) {\n // ...\n } else if (getLangOpts().MSVCCompat) {\n DiagID = diag::ext_found_in_dependent_base;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,922: | Line 5,921: | ||
}, | }, | ||
["ext_found_later_in_class"]={ | ["ext_found_later_in_class"]={ | ||
[ | [a]="use of member A before its declaration is a Microsoft extension [-Wmicrosoft-template]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,hb}, | ||
[ | [l]=hb, | ||
[ | [e]="use of member %0 before its declaration is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="use of member (.*?) before its declaration is a Microsoft extension", | ||
[ | [b]=Gb, | ||
[ | [g]=n, | ||
[i]={"61d065e21ff3",1590001902, | [i]={"61d065e21ff3",1590001902,Cc,Cc}, | ||
[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;"}} | [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 // ...\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"]={ | ||
[ | [a]="complex numbers are an extension in a freestanding C99 implementation [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="complex numbers are an extension in a freestanding C99 implementation", | ||
[ | [f]=p, | ||
[ | [h]="complex numbers are an extension in a freestanding C99 implementation", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[j]={{U,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);"}}, | [j]={{U,1790,"#include \"clang/Basic/OpenCLImageTypes.def\"\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 5,954: | Line 5,953: | ||
}, | }, | ||
["ext_friend_tag_redecl_outside_namespace"]={ | ["ext_friend_tag_redecl_outside_namespace"]={ | ||
[ | [a]="unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier [-Wmicrosoft-unqualified-friend]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-unqualified-friend"}, | ||
[ | [l]="microsoft-unqualified-friend", | ||
[ | [e]="unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier", | ||
[ | [f]=p, | ||
[ | [h]="unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-unqualified\\-friend[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"0902a51bafc7",1405035892,"MSVC compat: Allow lookup of friend types in enclosing namespaces","MSVC compat: Allow lookup of friend types in enclosing namespaces"}, | [i]={"0902a51bafc7",1405035892,"MSVC compat: Allow lookup of friend types in enclosing namespaces","MSVC compat: Allow lookup of friend types in enclosing namespaces"}, | ||
[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);"}}, | [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 // ...\n if (Name && SS.isNotEmpty()) {\n // ...\n } else if (Name) {\n // ...\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 // ...\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 // ...\n Diag(NameLoc, diag::ext_friend_tag_redecl_outside_namespace) << createFriendTagNNSFixIt(*this, ND, S, NameLoc);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,971: | Line 5,970: | ||
}, | }, | ||
["ext_generalized_initializer_lists"]={ | ["ext_generalized_initializer_lists"]={ | ||
[ | [a]="generalized initializer lists are a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="generalized initializer lists are a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="generalized initializer lists are a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=y, | ||
[i]={"e9e27d95db1d",1299885044,"Implement a hack intended to allow Clang to parse libstdc++ 4.5\'s","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","Implement a hack intended to allow Clang to parse libstdc++ 4.5\'s"}, | ||
[j]={{ | [j]={{Bb,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 // ...\n if (Tok.isNot(tok::semi)) {\n // ...\n if (Tok.is(tok::l_brace) && getLangOpts().CPlusPlus) {\n // ...\n if (R.isUsable())\n Diag(R.get()->getBeginLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_generalized_initializer_lists : diag::ext_generalized_initializer_lists) << R.get()->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 5,988: | Line 5,987: | ||
}, | }, | ||
["ext_generic_with_type_arg"]={ | ["ext_generic_with_type_arg"]={ | ||
[ | [a]="passing a type argument as the first operand to \'_Generic\' is a Clang extension [-Wgeneric-type-extension]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"generic-type-extension",v}, | ||
[ | [l]="generic-type-extension", | ||
[ | [e]="passing a type argument as the first operand to \'_Generic\' is a Clang extension", | ||
[ | [f]=p, | ||
[ | [h]="passing a type argument as the first operand to \'_Generic\' is a Clang extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgeneric\\-type\\-extension[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives"}, | [i]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives"}, | ||
[j]={{ | [j]={{wb,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 // ...\n if (isTypeIdForGenericSelection()) {\n // ...\n Diag(Loc, diag::ext_generic_with_type_arg);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,006: | Line 6,005: | ||
}, | }, | ||
["ext_gnu_address_of_label"]={ | ["ext_gnu_address_of_label"]={ | ||
[ | [a]="use of GNU address-of-label extension [-Wgnu-label-as-value]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-label-as-value",v}, | ||
[ | [l]="gnu-label-as-value", | ||
[ | [e]="use of GNU address-of-label extension", | ||
[ | [f]=p, | ||
[ | [h]="use of GNU address\\-of\\-label extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-label\\-as\\-value[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{wb,1462,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n case tok::ampamp: { // unary-expression: \'&&\' identifier\n // ...\n Diag(AmpAmpLoc, diag::ext_gnu_address_of_label);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,024: | Line 6,023: | ||
}, | }, | ||
["ext_gnu_anonymous_struct"]={ | ["ext_gnu_anonymous_struct"]={ | ||
[ | [a]="anonymous structs are a GNU extension [-Wgnu-anonymous-struct]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-anonymous-struct",v}, | ||
[ | [l]="gnu-anonymous-struct", | ||
[ | [e]="anonymous structs are a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="anonymous structs are a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-anonymous\\-struct[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"b64a1fa65ca1",1328284024,"Don\'t warn about anonymous struct/union in C11.","Don\'t warn about anonymous struct/union in C11."}, | [i]={"b64a1fa65ca1",1328284024,"Don\'t warn about anonymous struct/union in C11.","Don\'t warn about anonymous struct/union in C11."}, | ||
[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);"}}, | [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 // ...\n // Diagnose whether this anonymous struct/union is an extension.\n if (Record->isUnion() && !getLangOpts().CPlusPlus && !getLangOpts().C11)\n // ...\n else if (!Record->isUnion() && getLangOpts().CPlusPlus)\n Diag(Record->getLocation(), diag::ext_gnu_anonymous_struct);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,042: | Line 6,041: | ||
}, | }, | ||
["ext_gnu_array_range"]={ | ["ext_gnu_array_range"]={ | ||
[ | [a]="use of GNU array range extension [-Wgnu-designator]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,Kc,v}, | ||
[ | [l]=Kc, | ||
[ | [e]="use of GNU array range extension", | ||
[ | [f]=p, | ||
[ | [h]="use of GNU array range extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-designator[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{Zc,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 // ...\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 // ...\n // If this is a normal array designator, remember it.\n if (Tok.isNot(tok::ellipsis)) {\n // ...\n } else {\n // ...\n Diag(Tok, diag::ext_gnu_array_range);"}} | ||
}, | }, | ||
["ext_gnu_case_range"]={ | ["ext_gnu_case_range"]={ | ||
[ | [a]="use of GNU case range extension [-Wgnu-case-range]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-case-range",v}, | ||
[ | [l]="gnu-case-range", | ||
[ | [e]="use of GNU case range extension", | ||
[ | [f]=p, | ||
[ | [h]="use of GNU case range extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-case\\-range[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{Bb,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 // ...\n do {\n // ...\n if (TryConsumeToken(tok::ellipsis, DotDotDotLoc)) {\n Diag(DotDotDotLoc, diag::ext_gnu_case_range);"}}, | ||
[k]={ | [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]"} | ["clang/test/Sema/gnu-flags.c"]={"clang/test/Sema/gnu-flags.c:50:11: warning: use of GNU case range extension [-Wgnu-case-range]"} | ||
Line 6,075: | Line 6,074: | ||
}, | }, | ||
["ext_gnu_conditional_expr"]={ | ["ext_gnu_conditional_expr"]={ | ||
[ | [a]="use of GNU ?: conditional expression extension, omitting middle operand [-Wgnu-conditional-omitted-operand]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-conditional-omitted-operand",v}, | ||
[ | [l]="gnu-conditional-omitted-operand", | ||
[ | [e]="use of GNU ?: conditional expression extension, omitting middle operand", | ||
[ | [f]=p, | ||
[ | [h]="use of GNU \\?\\: conditional expression extension, omitting middle operand", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-conditional\\-omitted\\-operand[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{wb,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 // ...\n while (true) {\n // ...\n if (NextTokPrec == prec::Conditional) {\n if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n // ...\n } else if (Tok.isNot(tok::colon)) {\n // ...\n } else {\n // ...\n Diag(Tok, diag::ext_gnu_conditional_expr);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,093: | Line 6,092: | ||
}, | }, | ||
["ext_gnu_indirect_goto"]={ | ["ext_gnu_indirect_goto"]={ | ||
[ | [a]="use of GNU indirect-goto extension [-Wgnu-label-as-value]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-label-as-value",v}, | ||
[ | [l]="gnu-label-as-value", | ||
[ | [e]="use of GNU indirect-goto extension", | ||
[ | [f]=p, | ||
[ | [h]="use of GNU indirect\\-goto extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-label\\-as\\-value[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{Bb,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 // ...\n if (Tok.is(tok::identifier)) {\n // ...\n } else if (Tok.is(tok::star)) {\n // ...\n Diag(Tok, diag::ext_gnu_indirect_goto);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,111: | Line 6,110: | ||
}, | }, | ||
["ext_gnu_missing_equal_designator"]={ | ["ext_gnu_missing_equal_designator"]={ | ||
[ | [a]="use of GNU \'missing =\' extension in designator [-Wgnu-designator]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={N,Kc}, | ||
[ | [l]=Kc, | ||
[ | [e]="use of GNU \'missing =\' extension in designator", | ||
[ | [f]=p, | ||
[ | [h]="use of GNU \'missing \\=\' extension in designator", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-designator[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{Zc,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);"},{Zc,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 // ...\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]={ | [k]={ | ||
["clang/test/Parser/designator.c"]={"clang/test/Parser/designator.c:4:6: warning: use of GNU \'missing =\' extension in designator [-Wgnu-designator]"} | ["clang/test/Parser/designator.c"]={"clang/test/Parser/designator.c:4:6: warning: use of GNU \'missing =\' extension in designator [-Wgnu-designator]"} | ||
Line 6,128: | Line 6,127: | ||
}, | }, | ||
["ext_gnu_old_style_field_designator"]={ | ["ext_gnu_old_style_field_designator"]={ | ||
[ | [a]="use of GNU old-style field designator extension [-Wgnu-designator]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={N,Kc}, | ||
[ | [l]=Kc, | ||
[ | [e]="use of GNU old-style field designator extension", | ||
[ | [f]=p, | ||
[ | [h]="use of GNU old\\-style field designator extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-designator[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{Zc,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 // ...\n Diag(NameLoc, diag::ext_gnu_old_style_field_designator) << FixItHint::CreateReplacement(SourceRange(NameLoc, ColonLoc), NewSyntax);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,145: | Line 6,144: | ||
}, | }, | ||
["ext_gnu_ptr_func_arith"]={ | ["ext_gnu_ptr_func_arith"]={ | ||
[ | [a]="arithmetic on... pointer... to... function type... A... is a GNU extension [-Wgnu-pointer-arith]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,oc,v,cc}, | ||
[ | [l]=oc, | ||
[ | [e]="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", | ||
[ | [f]=p, | ||
[ | [h]="arithmetic on(?: a|) pointer(?:|s) to(?: the|) function type(?:|s) (.*?)(?:| and (.*?)) is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-pointer\\-arith[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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 */"}}, | [j]={{z,11499,"/// Diagnose invalid arithmetic on two function pointers.\nstatic void diagnoseArithmeticOnTwoFunctionPointers(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS) {\n // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,163: | Line 6,162: | ||
}, | }, | ||
["ext_gnu_statement_expr"]={ | ["ext_gnu_statement_expr"]={ | ||
[ | [a]="use of GNU statement expression extension [-Wgnu-statement-expression]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-statement-expression",v}, | ||
[ | [l]="gnu-statement-expression", | ||
[ | [e]="use of GNU statement expression extension", | ||
[ | [f]=p, | ||
[ | [h]="use of GNU statement expression extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-statement\\-expression[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{wb,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,181: | Line 6,180: | ||
}, | }, | ||
["ext_gnu_statement_expr_macro"]={ | ["ext_gnu_statement_expr_macro"]={ | ||
[ | [a]="use of GNU statement expression extension from macro expansion [-Wgnu-statement-expression-from-macro-expansion]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-statement-expression","gnu-statement-expression-from-macro-expansion",v}, | ||
[ | [l]="gnu-statement-expression-from-macro-expansion", | ||
[ | [e]="use of GNU statement expression extension from macro expansion", | ||
[ | [f]=p, | ||
[ | [h]="use of GNU statement expression extension from macro expansion", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-statement\\-expression\\-from\\-macro\\-expansion[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"7689c7fc9e08",1653629944,"Create specialization of -Wgnu-statement-expression for expressions found in macros.","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.","Create specialization of -Wgnu-statement-expression for expressions found in macros."}, | ||
[j]={{ | [j]={{wb,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,199: | Line 6,198: | ||
}, | }, | ||
["ext_gnu_subscript_void_type"]={ | ["ext_gnu_subscript_void_type"]={ | ||
[ | [a]="subscript of a pointer to void is a GNU extension [-Wgnu-pointer-arith]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,oc,v,cc}, | ||
[ | [l]=oc, | ||
[ | [e]="subscript of a pointer to void is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="subscript of a pointer to void is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-pointer\\-arith[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"4cc3f296a907",1309192347,"Cleanup a fixme by using a specific diagnostic for subscripting","Cleanup a fixme by using a specific diagnostic for subscripting"}, | [i]={"4cc3f296a907",1309192347,"Cleanup a fixme by using a specific diagnostic for subscripting","Cleanup a fixme by using a specific diagnostic for subscripting"}, | ||
[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();"}}, | [j]={{z,5981,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n if (ResultType->isVoidType() && !getLangOpts().CPlusPlus) {\n // ...\n Diag(LLoc, diag::ext_gnu_subscript_void_type) << BaseExpr->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,217: | Line 6,216: | ||
}, | }, | ||
["ext_gnu_void_ptr"]={ | ["ext_gnu_void_ptr"]={ | ||
[ | [a]="arithmetic on... pointer... to void is a GNU extension [-Wgnu-pointer-arith]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,oc,v,cc}, | ||
[ | [l]=oc, | ||
[ | [e]="arithmetic on%select{ a|}0 pointer%select{|s}0 to void is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="arithmetic on(?: a|) pointer(?:|s) to void is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-pointer\\-arith[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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(); }"}}, | [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(); }"}}, | ||
Line 6,235: | Line 6,234: | ||
}, | }, | ||
["ext_goto_into_protected_scope"]={ | ["ext_goto_into_protected_scope"]={ | ||
[ | [a]="jump from this goto statement to its label is a Microsoft extension [-Wmicrosoft-goto]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-goto"}, | ||
[ | [l]="microsoft-goto", | ||
[ | [e]="jump from this goto statement to its label is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="jump from this goto statement to its label is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-goto[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[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);"}}, | [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 // ...\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 // ...\n // We only get indirect gotos here when they have a constant target.\n if (IndirectGotoStmt *IGS = dyn_cast<IndirectGotoStmt>(Jump)) {\n // ...\n CheckJump(IGS, Target->getStmt(), IGS->getGotoLoc(), diag::err_goto_into_protected_scope, diag::ext_goto_into_protected_scope, diag::warn_cxx98_compat_goto_into_protected_scope);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,252: | Line 6,251: | ||
}, | }, | ||
["ext_hex_constant_invalid"]={ | ["ext_hex_constant_invalid"]={ | ||
[ | [a]="hexadecimal floating constants are a C99 feature [-Wc99-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={X,v}, | ||
[ | [l]=X, | ||
[ | [e]="hexadecimal floating constants are a C99 feature", | ||
[ | [f]=p, | ||
[ | [h]="hexadecimal floating constants are a C99 feature", | ||
[ | [b]=Jb, | ||
[ | [g]=D, | ||
[i]={"560a3579b29a",1457130726,"Update diagnostics now that hexadecimal literals look likely to be part of C++17.","Update diagnostics now that hexadecimal literals look likely to be part of C++17."}, | [i]={"560a3579b29a",1457130726,"Update diagnostics now that hexadecimal literals look likely to be part of C++17.","Update diagnostics now that hexadecimal literals look likely to be part of C++17."}, | ||
[j]={{gb,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);"}}, | [j]={{gb,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 // ...\n // Handle a hex number like 0x1234.\n if ((c1 == \'x\' || c1 == \'X\') && (isHexDigit(s[1]) || s[1] == \'.\')) {\n // ...\n // A binary exponent can appear with or with a \'.\'. If dotted, the\n // binary exponent is required.\n if (*s == \'p\' || *s == \'P\') {\n // ...\n if (!LangOpts.HexFloats)\n Diags.Report(TokLoc, LangOpts.CPlusPlus ? diag::ext_hex_literal_invalid : diag::ext_hex_constant_invalid);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,270: | Line 6,269: | ||
}, | }, | ||
["ext_hex_literal_invalid"]={ | ["ext_hex_literal_invalid"]={ | ||
[ | [a]="hexadecimal floating literals are a C++17 feature [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={Q,kb,v}, | ||
[ | [l]=Q, | ||
[ | [e]="hexadecimal floating literals are a C++17 feature", | ||
[ | [f]=p, | ||
[ | [h]="hexadecimal floating literals are a C\\+\\+17 feature", | ||
[ | [b]=lb, | ||
[ | [g]=D, | ||
[i]={"560a3579b29a",1457130726,"Update diagnostics now that hexadecimal literals look likely to be part of C++17.","Update diagnostics now that hexadecimal literals look likely to be part of C++17."}, | [i]={"560a3579b29a",1457130726,"Update diagnostics now that hexadecimal literals look likely to be part of C++17.","Update diagnostics now that hexadecimal literals look likely to be part of C++17."}, | ||
[j]={{gb,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);"}}, | [j]={{gb,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 // ...\n // Handle a hex number like 0x1234.\n if ((c1 == \'x\' || c1 == \'X\') && (isHexDigit(s[1]) || s[1] == \'.\')) {\n // ...\n // A binary exponent can appear with or with a \'.\'. If dotted, the\n // binary exponent is required.\n if (*s == \'p\' || *s == \'P\') {\n // ...\n if (!LangOpts.HexFloats)\n Diags.Report(TokLoc, LangOpts.CPlusPlus ? diag::ext_hex_literal_invalid : diag::ext_hex_constant_invalid);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,288: | Line 6,287: | ||
}, | }, | ||
["ext_hlsl_access_specifiers"]={ | ["ext_hlsl_access_specifiers"]={ | ||
[ | [a]="access specifiers are a clang HLSL extension [-Whlsl-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"hlsl-extensions"}, | ||
[ | [l]="hlsl-extensions", | ||
[ | [e]="access specifiers are a clang HLSL extension", | ||
[ | [f]=p, | ||
[ | [h]="access specifiers are a clang HLSL extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Whlsl\\-extensions[^\\]]*\\]", | ||
[ | [g]=r, | ||
[i]={"0d6b574b8717",1651158800,"[HLSL] Adjust access specifier behavior","[HLSL] Adjust access specifier behavior"}, | [i]={"0d6b574b8717",1651158800,"[HLSL] Adjust access specifier behavior","[HLSL] Adjust access specifier behavior"}, | ||
[j]={{O,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);"},{O,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);"}}, | [j]={{O,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 // ...\n if (Access != AS_none) {\n // ...\n if (getLangOpts().HLSL)\n Diag(Tok.getLocation(), diag::ext_hlsl_access_specifiers);"},{O,3378,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n // ...\n case tok::kw_public:\n case tok::kw_protected: {\n if (getLangOpts().HLSL)\n Diag(Tok.getLocation(), diag::ext_hlsl_access_specifiers);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,305: | Line 6,304: | ||
}, | }, | ||
["ext_ident_list_in_param"]={ | ["ext_ident_list_in_param"]={ | ||
[ | [a]="type-less parameter names in function declaration [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="type-less parameter names in function declaration", | ||
[ | [f]=p, | ||
[ | [h]="type\\-less parameter names in function declaration", | ||
[ | [b]=Y, | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{K,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);"}} | [j]={{K,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 // ...\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);"}} | ||
}, | }, | ||
["ext_imaginary_constant"]={ | ["ext_imaginary_constant"]={ | ||
[ | [a]="imaginary constants are a GNU extension [-Wgnu-imaginary-constant]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-imaginary-constant",v}, | ||
[ | [l]="gnu-imaginary-constant", | ||
[ | [e]="imaginary constants are a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="imaginary constants are a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-imaginary\\-constant[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[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);"}}, | [j]={{z,4279,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n // ...\n // If this is an imaginary literal, create the ImaginaryLiteral wrapper.\n if (Literal.isImaginary) {\n // ...\n Diag(Tok.getLocation(), diag::ext_imaginary_constant);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:43:10: warning: imaginary constants are a GNU extension [-Wgnu-imaginary-constant]"} | ["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:43:10: warning: imaginary constants are a GNU extension [-Wgnu-imaginary-constant]"} | ||
Line 6,338: | Line 6,337: | ||
}, | }, | ||
["ext_implicit_exception_spec_mismatch"]={ | ["ext_implicit_exception_spec_mismatch"]={ | ||
[ | [a]="function previously declared with an ... exception specification redeclared with an ... exception specification [-Wimplicit-exception-spec-mismatch]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"implicit-exception-spec-mismatch"}, | ||
[ | [l]="implicit-exception-spec-mismatch", | ||
[ | [e]="function previously declared with an %select{explicit|implicit}0 exception specification redeclared with an %select{implicit|explicit}0 exception specification", | ||
[ | [f]=p, | ||
[ | [h]="function previously declared with an (?:explicit|implicit) exception specification redeclared with an (?:implicit|explicit) exception specification", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-exception\\-spec\\-mismatch[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"66f3ac9d2197",1350721611,"Rework implementation of DR1492: Apply the resolution to operator delete too,","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,","Rework implementation of DR1492: Apply the resolution to operator delete too,"}, | ||
[j]={{ | [j]={{Ib,340,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,355: | Line 6,354: | ||
}, | }, | ||
["ext_implicit_function_decl_c99"]={ | ["ext_implicit_function_decl_c99"]={ | ||
[ | [a]="call to undeclared function A; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={mb,vb,hd,rc,sb}, | ||
[ | [l]=rc, | ||
[ | [e]="call to undeclared function %0; ISO C99 and later do not support implicit function declarations", | ||
[ | [f]=S, | ||
[ | [h]="call to undeclared function (.*?); ISO C99 and later do not support implicit function declarations", | ||
[ | [b]=" \\[[^\\]]*\\-Wimplicit\\-function\\-declaration[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"cb08f4aa4467",1620530452, | [i]={"cb08f4aa4467",1620530452,Sb,Sb}, | ||
[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;"}}, | [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 // ...\n if (II.getName().startswith(\"__builtin_\"))\n // ...\n // OpenCL v2.0 s6.9.u - Implicit function declaration is not supported.\n else if (getLangOpts().C99)\n diag_id = diag::ext_implicit_function_decl_c99;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,372: | Line 6,371: | ||
}, | }, | ||
["ext_implicit_lib_function_decl"]={ | ["ext_implicit_lib_function_decl"]={ | ||
[ | [a]="implicitly declaring library function \'A\' with type B [-Wimplicit-function-declaration]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={mb,vb,hd,rc,sb}, | ||
[ | [l]=rc, | ||
[ | [e]="implicitly declaring library function \'%0\' with type %1", | ||
[ | [f]=p, | ||
[ | [h]="implicitly declaring library function \'(.*?)\' with type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wimplicit\\-function\\-declaration[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[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;"}}, | [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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,389: | Line 6,388: | ||
}, | }, | ||
["ext_implicit_lib_function_decl_c99"]={ | ["ext_implicit_lib_function_decl_c99"]={ | ||
[ | [a]="call to undeclared library function \'A\' with type B; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={mb,vb,hd,rc,sb}, | ||
[ | [l]=rc, | ||
[ | [e]="call to undeclared library function \'%0\' with type %1; ISO C99 and later do not support implicit function declarations", | ||
[ | [f]=S, | ||
[ | [h]="call to undeclared library function \'(.*?)\' with type (.*?); ISO C99 and later do not support implicit function declarations", | ||
[ | [b]=" \\[[^\\]]*\\-Wimplicit\\-function\\-declaration[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"cb08f4aa4467",1620530452, | [i]={"cb08f4aa4467",1620530452,Sb,Sb}, | ||
[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;"}}, | [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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,406: | Line 6,405: | ||
}, | }, | ||
["ext_implicit_typename"]={ | ["ext_implicit_typename"]={ | ||
[ | [a]="missing \'typename\' prior to dependent type name AB; implicit \'typename\' is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="missing \'typename\' prior to dependent type name %0%1; implicit \'typename\' is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="missing \'typename\' prior to dependent type name (.*?)(.*?); implicit \'typename\' is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=n, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[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 \");"},{I,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 \");"}}, | [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 // ...\n if (ObjectTypePtr) {\n // ...\n } else if (SS && SS->isNotEmpty()) {\n // ...\n if (!LookupCtx) {\n if (isDependentScopeSpecifier(*SS)) {\n // ...\n if (IsImplicitTypename) {\n // ...\n if (getLangOpts().CPlusPlus20)\n // ...\n else\n Diag(QualifiedLoc, diag::ext_implicit_typename) << SS->getScopeRep() << II.getName() << FixItHint::CreateInsertion(QualifiedLoc, \"typename \");"},{I,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 // ...\n if (!IsCtorOrDtorName && !IsClassName && SS.isSet()) {\n // ...\n // C++ [temp.res]p3:\n // A qualified-id that refers to a type and in which the\n // nested-name-specifier depends on a template-parameter (14.6.2)\n // shall be prefixed by the keyword typename to indicate that the\n // qualified-id denotes a type, forming an\n // elaborated-type-specifier (7.1.5.3).\n if (!LookupCtx && isDependentScopeSpecifier(SS)) {\n // C++2a relaxes some of those restrictions in [temp.res]p5.\n if (AllowImplicitTypename == ImplicitTypenameContext::Yes) {\n if (getLangOpts().CPlusPlus20)\n // ...\n else\n Diag(SS.getBeginLoc(), diag::ext_implicit_typename) << SS.getScopeRep() << TemplateII->getName() << FixItHint::CreateInsertion(SS.getBeginLoc(), \"typename \");"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,423: | Line 6,422: | ||
}, | }, | ||
["ext_in_class_initializer_float_type"]={ | ["ext_in_class_initializer_float_type"]={ | ||
[ | [a]="in-class initializer for static data member of type A is a GNU extension [-Wgnu-static-float-init]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={N,"gnu-static-float-init","static-float-init"}, | ||
[ | [l]="gnu-static-float-init", | ||
[ | [e]="in-class initializer for static data member of type %0 is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="in\\-class initializer for static data member of type (.*?) is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-static\\-float\\-init[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"db76892e72e4",1284160882,"Support in-class initialization of static const floating-point data members.","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.","Support in-class initialization of static const floating-point data members."}, | ||
[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();"}}, | [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 // ...\n if (VDecl->isLocalVarDecl()) {\n // ...\n } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n // ...\n // Do nothing on dependent types.\n if (DclT->isDependentType()) {\n // ...\n } else if (VDecl->isConstexpr()) {\n // ...\n } else if (!DclT.isConstQualified()) {\n // ...\n } else if (DclT->isIntegralOrEnumerationType()) {\n // ...\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 // ...\n } else {\n Diag(VDecl->getLocation(), diag::ext_in_class_initializer_float_type) << DclT << Init->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,440: | Line 6,439: | ||
}, | }, | ||
["ext_in_class_initializer_float_type_cxx11"]={ | ["ext_in_class_initializer_float_type_cxx11"]={ | ||
[ | [a]="in-class initializer for static data member of type A requires \'constexpr\' specifier [-Wstatic-float-init]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"static-float-init"}, | ||
[ | [l]="static-float-init", | ||
[ | [e]="in-class initializer for static data member of type %0 requires \'constexpr\' specifier", | ||
[ | [f]=S, | ||
[ | [h]="in\\-class initializer for static data member of type (.*?) requires \'constexpr\' specifier", | ||
[ | [b]=" \\[[^\\]]*\\-Wstatic\\-float\\-init[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"cf656385ea2d",1359087736,"Sync \'in class initialization of static const double\' extension up with GCC,","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,","Sync \'in class initialization of static const double\' extension up with GCC,"}, | ||
[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();"}}, | [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 // ...\n if (VDecl->isLocalVarDecl()) {\n // ...\n } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n // ...\n // Do nothing on dependent types.\n if (DclT->isDependentType()) {\n // ...\n } else if (VDecl->isConstexpr()) {\n // ...\n } else if (!DclT.isConstQualified()) {\n // ...\n } else if (DclT->isIntegralOrEnumerationType()) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,457: | Line 6,456: | ||
}, | }, | ||
["ext_in_class_initializer_non_constant"]={ | ["ext_in_class_initializer_non_constant"]={ | ||
[ | [a]="in-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension [-Wgnu-folding-constant]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,nc,v}, | ||
[ | [l]=nc, | ||
[ | [e]="in-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="in\\-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-folding\\-constant[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"9925ec8bf446",1308030389,"fix rdar://9204520 - Accept int(0.85 * 10) as an initializer in a class member","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","fix rdar://9204520 - Accept int(0.85 * 10) as an initializer in a class member"}, | ||
[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();"}}, | [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 // ...\n if (VDecl->isLocalVarDecl()) {\n // ...\n } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n // ...\n // Do nothing on dependent types.\n if (DclT->isDependentType()) {\n // ...\n } else if (VDecl->isConstexpr()) {\n // ...\n } else if (!DclT.isConstQualified()) {\n // ...\n } else if (DclT->isIntegralOrEnumerationType()) {\n // ...\n if (getLangOpts().CPlusPlus11 && DclT.isVolatileQualified())\n // ...\n else if (Init->isValueDependent())\n // ...\n else if (Init->isIntegerConstantExpr(Context, &Loc))\n // ...\n else if (Init->getType()->isScopedEnumeralType() && Init->isCXX11ConstantExpr(Context))\n // ...\n else if (Init->isEvaluatable(Context)) {\n // ...\n Diag(Loc, diag::ext_in_class_initializer_non_constant) << Init->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,475: | Line 6,474: | ||
}, | }, | ||
["ext_incomplete_in_exception_spec"]={ | ["ext_incomplete_in_exception_spec"]={ | ||
[ | [a]="...incomplete type A is not allowed in exception specification [-Wmicrosoft-exception-spec]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,Kb}, | ||
[ | [l]=Kb, | ||
[ | [e]="%select{|pointer to |reference to }0incomplete type %1 is not allowed in exception specification", | ||
[ | [f]=p, | ||
[ | [h]="(?:|pointer to |reference to )incomplete type (.*?) is not allowed in exception specification", | ||
[ | [b]=Xc, | ||
[ | [g]=n, | ||
[i]={"b2b0da4ad08d",1465583081,"[-fms-extensions] Permit incomplete types in dynamic exception specifications","[-fms-extensions] Permit incomplete types in dynamic exception specifications"}, | [i]={"b2b0da4ad08d",1465583081,"[-fms-extensions] Permit incomplete types in dynamic exception specifications","[-fms-extensions] Permit incomplete types in dynamic exception specifications"}, | ||
[j]={{ | [j]={{Ib,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 // ...\n if (getLangOpts().MSVCCompat) {\n DiagID = diag::ext_incomplete_in_exception_spec;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,492: | Line 6,491: | ||
}, | }, | ||
["ext_increment_bool"]={ | ["ext_increment_bool"]={ | ||
[ | [a]="ISO C++17 does not allow incrementing expression of type bool [-Wincrement-bool]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"increment-bool"}, | ||
[ | [l]="increment-bool", | ||
[ | [e]="ISO C++17 does not allow incrementing expression of type bool", | ||
[ | [f]=S, | ||
[ | [h]="ISO C\\+\\+17 does not allow incrementing expression of type bool", | ||
[ | [b]=" \\[[^\\]]*\\-Wincrement\\-bool[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"4a0cd893257d",1448504197,"P0002R1: increment on expressions of type bool is no longer allowed in C++1z.","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.","P0002R1: increment on expressions of type bool is no longer allowed in C++1z."}, | ||
[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();"}}, | [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 // ...\n if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n // ...\n S.Diag(OpLoc, S.getLangOpts().CPlusPlus17 ? diag::ext_increment_bool : diag::warn_increment_bool) << Op->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,509: | Line 6,508: | ||
}, | }, | ||
["ext_init_capture"]={ | ["ext_init_capture"]={ | ||
[ | [a]="initialized lambda captures are a C++14 extension [-Wc++14-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={nb,Ob}, | ||
[ | [l]=nb, | ||
[ | [e]="initialized lambda captures are a C++14 extension", | ||
[ | [f]=p, | ||
[ | [h]="initialized lambda captures are a C\\+\\+14 extension", | ||
[ | [b]=kc, | ||
[ | [g]="Lambda Issue", | ||
[i]={"5b013f505068",1380346707,"Add compat/extension warnings for init captures.","Add compat/extension warnings for init captures."}, | [i]={"5b013f505068",1380346707,"Add compat/extension warnings for init captures.","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 // ...\n for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n // ...\n if (C->Init.isUsable()) {\n Diag(C->Loc, getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_init_capture : diag::ext_init_capture);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,526: | Line 6,525: | ||
}, | }, | ||
["ext_init_capture_pack"]={ | ["ext_init_capture_pack"]={ | ||
[ | [a]="initialized lambda pack captures are a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="initialized lambda pack captures are a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="initialized lambda pack captures are a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]="Lambda Issue", | ||
[i]={"b2997f579a8b",1558469450,"[c++20] P0780R2: Support pack-expansion of init-captures.","[c++20] P0780R2: Support pack-expansion of init-captures."}, | [i]={"b2997f579a8b",1558469450,"[c++20] P0780R2: Support pack-expansion of init-captures.","[c++20] P0780R2: Support pack-expansion of init-captures."}, | ||
[j]={{"clang/lib/Sema/SemaLambda.cpp",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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,543: | Line 6,542: | ||
}, | }, | ||
["ext_init_from_predefined"]={ | ["ext_init_from_predefined"]={ | ||
[ | [a]="initializing an array from a \'A\' predefined identifier is a Microsoft extension [-Wmicrosoft-init-from-predefined]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-init-from-predefined"}, | ||
[ | [l]="microsoft-init-from-predefined", | ||
[ | [e]="initializing an array from a \'%0\' predefined identifier is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="initializing an array from a \'(.*?)\' predefined identifier is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-init\\-from\\-predefined[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{W,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;"}}, | [j]={{W,8619,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n // ...\n if (S.getLangOpts().MicrosoftExt && Args.size() == 1 && isa<PredefinedExpr>(Args[0]) && Entity.getType()->isArrayType()) {\n // ...\n S.Diag(Init->getBeginLoc(), diag::ext_init_from_predefined) << Init;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,560: | Line 6,559: | ||
}, | }, | ||
["ext_init_list_constant_narrowing"]={ | ["ext_init_list_constant_narrowing"]={ | ||
[ | [a]="constant expression evaluates to A which cannot be narrowed to type B [-Wc++11-narrowing]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={zc,"c++0x-narrowing",gc,hc,Rb,"narrowing"}, | ||
[ | [l]=Rb, | ||
[ | [e]="constant expression evaluates to %0 which cannot be narrowed to type %1", | ||
[ | [f]=S, | ||
[ | [h]="constant expression evaluates to (.*?) which cannot be narrowed to type (.*?)", | ||
[ | [b]=" \\[[^\\]]*\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"16e1b07597f3",1384224105,Vb,Vb}, | [i]={"16e1b07597f3",1384224105,Vb,Vb}, | ||
[j]={{W,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();"}}, | [j]={{W,10426,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n // ...\n case NK_Constant_Narrowing:\n // ...\n S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_constant_narrowing : diag::warn_init_list_constant_narrowing) << PostInit->getSourceRange() << ConstantValue.getAsString(S.getASTContext(), ConstantType) << EntityType.getLocalUnqualifiedType();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,577: | Line 6,576: | ||
}, | }, | ||
["ext_init_list_type_narrowing"]={ | ["ext_init_list_type_narrowing"]={ | ||
[ | [a]="type A cannot be narrowed to B in initializer list [-Wc++11-narrowing]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={zc,"c++0x-narrowing",gc,hc,Rb,"narrowing"}, | ||
[ | [l]=Rb, | ||
[ | [e]="type %0 cannot be narrowed to %1 in initializer list", | ||
[ | [f]=S, | ||
[ | [h]="type (.*?) cannot be narrowed to (.*?) in initializer list", | ||
[ | [b]=" \\[[^\\]]*\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"16e1b07597f3",1384224105,Vb,Vb}, | [i]={"16e1b07597f3",1384224105,Vb,Vb}, | ||
[j]={{W,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();"}}, | [j]={{W,10415,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n // ...\n case NK_Type_Narrowing:\n // ...\n S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_type_narrowing : diag::warn_init_list_type_narrowing) << PostInit->getSourceRange() << PreNarrowingType.getLocalUnqualifiedType() << EntityType.getLocalUnqualifiedType();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,594: | Line 6,593: | ||
}, | }, | ||
["ext_init_list_variable_narrowing"]={ | ["ext_init_list_variable_narrowing"]={ | ||
[ | [a]="non-constant-expression cannot be narrowed from type A to B in initializer list [-Wc++11-narrowing]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={zc,"c++0x-narrowing",gc,hc,Rb,"narrowing"}, | ||
[ | [l]=Rb, | ||
[ | [e]="non-constant-expression cannot be narrowed from type %0 to %1 in initializer list", | ||
[ | [f]=S, | ||
[ | [h]="non\\-constant\\-expression cannot be narrowed from type (.*?) to (.*?) in initializer list", | ||
[ | [b]=" \\[[^\\]]*\\-Wc\\+\\+11\\-narrowing[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"16e1b07597f3",1384224105,Vb,Vb}, | [i]={"16e1b07597f3",1384224105,Vb,Vb}, | ||
[j]={{W,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();"}}, | [j]={{W,10437,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n // ...\n case NK_Variable_Narrowing:\n // ...\n S.Diag(PostInit->getBeginLoc(), NarrowingErrs(S.getLangOpts()) ? diag::ext_init_list_variable_narrowing : diag::warn_init_list_variable_narrowing) << PostInit->getSourceRange() << PreNarrowingType.getLocalUnqualifiedType() << EntityType.getLocalUnqualifiedType();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,611: | Line 6,610: | ||
}, | }, | ||
["ext_init_statement"]={ | ["ext_init_statement"]={ | ||
[ | [a]="\'...\' initialization statements are a C++17 extension [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Q,kb}, | ||
[ | [l]=Q, | ||
[ | [e]="\'%select{if|switch}0\' initialization statements are a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="\'(?:if|switch)\' initialization statements are a C\\+\\+17 extension", | ||
[ | [b]=lb, | ||
[ | [g]=y, | ||
[i]={"fccb5128b201",1476822436,"Add missing warning for use of C++1z init-statements in C++14 and before.","Add missing warning for use of C++1z init-statements in C++14 and before."}, | [i]={"fccb5128b201",1476822436,"Add missing warning for use of C++1z init-statements in C++14 and before.","Add missing warning for use of C++1z init-statements in C++14 and before."}, | ||
[j]={{ | [j]={{Ab,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,628: | Line 6,627: | ||
}, | }, | ||
["ext_initializer_overrides"]={ | ["ext_initializer_overrides"]={ | ||
[ | [a]="initializer ...overrides prior initialization of this subobject [-Winitializer-overrides]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={r,mb,"extra","initializer-overrides","override-init"}, | ||
[ | [l]="initializer-overrides", | ||
[ | [e]="initializer %select{partially |}0overrides prior initialization of this subobject", | ||
[ | [f]=p, | ||
[ | [h]="initializer (?:partially |)overrides prior initialization of this subobject", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Winitializer\\-overrides[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={Tc,1567205575, | [i]={Tc,1567205575,yb,yb}, | ||
[j]={{W,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;"}} | [j]={{W,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 // ...\n /// Diagnose that OldInit (or part thereof) has been overridden by NewInit.\n void diagnoseInitOverride(Expr *OldInit, SourceRange NewInitRange, bool UnionOverride = false, bool FullyOverwritten = true) {\n // ...\n unsigned DiagID = SemaRef.getLangOpts().CPlusPlus ? (UnionOverride ? diag::ext_initializer_union_overrides : diag::ext_initializer_overrides) : diag::warn_initializer_overrides;"}} | ||
}, | }, | ||
["ext_initializer_string_for_char_array_too_long"]={ | ["ext_initializer_string_for_char_array_too_long"]={ | ||
[ | [a]="initializer-string for char array is too long [-Wexcess-initializers]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={ac}, | ||
[ | [l]=ac, | ||
[ | [e]="initializer-string for char array is too long", | ||
[ | [f]=p, | ||
[ | [h]="initializer\\-string for char array is too long", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wexcess\\-initializers[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[j]={{W,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();"}}, | [j]={{W,258,"static void CheckStringInit(Expr *Str, QualType &DeclT, const ArrayType *AT, Sema &S) {\n // ...\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 // ...\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]={ | [k]={ | ||
["clang/test/CodeGen/globalinit.c"]={"clang/test/CodeGen/globalinit.c:20:19: warning: initializer-string for char array is too long [-Wexcess-initializers]"} | ["clang/test/CodeGen/globalinit.c"]={"clang/test/CodeGen/globalinit.c:20:19: warning: initializer-string for char array is too long [-Wexcess-initializers]"} | ||
Line 6,659: | Line 6,658: | ||
}, | }, | ||
["ext_initializer_union_overrides"]={ | ["ext_initializer_union_overrides"]={ | ||
[ | [a]="initializer ...overrides prior initialization of this subobject [-Winitializer-overrides]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={r,mb,"extra","initializer-overrides","override-init"}, | ||
[ | [l]="initializer-overrides", | ||
[ | [e]="initializer %select{partially |}0overrides prior initialization of this subobject", | ||
[ | [f]=S, | ||
[ | [h]="initializer (?:partially |)overrides prior initialization of this subobject", | ||
[ | [b]=" \\[[^\\]]*\\-Winitializer\\-overrides[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{W,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;"}}, | [j]={{W,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 // ...\n /// Diagnose that OldInit (or part thereof) has been overridden by NewInit.\n void diagnoseInitOverride(Expr *OldInit, SourceRange NewInitRange, bool UnionOverride = false, bool FullyOverwritten = true) {\n // ...\n unsigned DiagID = SemaRef.getLangOpts().CPlusPlus ? (UnionOverride ? diag::ext_initializer_union_overrides : diag::ext_initializer_overrides) : diag::warn_initializer_overrides;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,676: | Line 6,675: | ||
}, | }, | ||
["ext_inline_namespace"]={ | ["ext_inline_namespace"]={ | ||
[ | [a]="inline namespaces are a C++11 feature [-Wc++11-inline-namespace]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H,"c++11-inline-namespace"}, | ||
[ | [l]="c++11-inline-namespace", | ||
[ | [e]="inline namespaces are a C++11 feature", | ||
[ | [f]=p, | ||
[ | [h]="inline namespaces are a C\\+\\+11 feature", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-inline\\-namespace[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"5a5f2c76b6f7",1283215005,"Enable inline namespaces in C++03 as an extension.","Enable inline namespaces in C++03 as an extension."}, | [i]={"5a5f2c76b6f7",1283215005,"Enable inline namespaces in C++03 as an extension.","Enable inline namespaces in C++03 as an extension."}, | ||
[j]={{O,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);"}}, | [j]={{O,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,693: | Line 6,692: | ||
}, | }, | ||
["ext_inline_nested_namespace_definition"]={ | ["ext_inline_nested_namespace_definition"]={ | ||
[ | [a]="inline nested namespace definition is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="inline nested namespace definition is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="inline nested namespace definition is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=y, | ||
[i]={"53f391dcb323",1542043188,"Implement P1094R2 (nested inline namespaces)","Implement P1094R2 (nested inline namespaces)"}, | [i]={"53f391dcb323",1542043188,"Implement P1094R2 (nested inline namespaces)","Implement P1094R2 (nested inline namespaces)"}, | ||
[j]={{O,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);"},{O,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);"}}, | [j]={{O,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 // ...\n if (ExtraNSs.empty()) {\n // ...\n } else if (InlineLoc.isValid()) {\n // ...\n } else if (getLangOpts().CPlusPlus20) {\n // ...\n } else if (getLangOpts().CPlusPlus17) {\n // ...\n if (FirstNestedInlineLoc.isValid())\n Diag(FirstNestedInlineLoc, diag::ext_inline_nested_namespace_definition);"},{O,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 // ...\n if (ExtraNSs.empty()) {\n // ...\n } else if (InlineLoc.isValid()) {\n // ...\n } else if (getLangOpts().CPlusPlus20) {\n // ...\n } else if (getLangOpts().CPlusPlus17) {\n // ...\n } else {\n // ...\n // Warn about nested inline namespaces.\n if (FirstNestedInlineLoc.isValid())\n Diag(FirstNestedInlineLoc, diag::ext_inline_nested_namespace_definition);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,710: | Line 6,709: | ||
}, | }, | ||
["ext_inline_variable"]={ | ["ext_inline_variable"]={ | ||
[ | [a]="inline variables are a C++17 extension [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Q,kb}, | ||
[ | [l]=Q, | ||
[ | [e]="inline variables are a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="inline variables are a C\\+\\+17 extension", | ||
[ | [b]=lb, | ||
[ | [g]=n, | ||
[i]={"62f19e700d31",1466813756,"Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a","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","Implement C++17 P0386R2, inline variables. (The \'inline\' specifier gives a"}, | ||
[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);"}}, | [j]={{x,7732,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (D.getDeclSpec().isInlineSpecified()) {\n if (!getLangOpts().CPlusPlus) {\n // ...\n } else if (CurContext->isFunctionOrMethod()) {\n // ...\n } else {\n Diag(D.getDeclSpec().getInlineSpecLoc(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_inline_variable : diag::ext_inline_variable);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,727: | Line 6,726: | ||
}, | }, | ||
["ext_integer_complement_complex"]={ | ["ext_integer_complement_complex"]={ | ||
[ | [a]="ISO C does not support \'~\' for complex conjugation of A [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="ISO C does not support \'~\' for complex conjugation of %0", | ||
[ | [f]=p, | ||
[ | [h]="ISO C does not support \'~\' for complex conjugation of (.*?)", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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();"}} | [j]={{z,16246,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n // ...\n case UO_Not: // bitwise complement\n // ...\n // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n if (resultType->isComplexType() || resultType->isComplexIntegerType())\n // ...\n Diag(OpLoc, diag::ext_integer_complement_complex) << resultType << Input.get()->getSourceRange();"}} | ||
}, | }, | ||
["ext_integer_complex"]={ | ["ext_integer_complex"]={ | ||
[ | [a]="complex integer types are a GNU extension [-Wgnu-complex-integer]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-complex-integer",v}, | ||
[ | [l]="gnu-complex-integer", | ||
[ | [e]="complex integer types are a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="complex integer types are a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-complex\\-integer[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{Gc,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 // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,760: | Line 6,759: | ||
}, | }, | ||
["ext_integer_increment_complex"]={ | ["ext_integer_increment_complex"]={ | ||
[ | [a]="ISO C does not support \'++\'/\'--\' on complex integer type A [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="ISO C does not support \'++\'/\'--\' on complex integer type %0", | ||
[ | [f]=p, | ||
[ | [h]="ISO C does not support \'\\+\\+\'\\/\'\\-\\-\' on complex integer type (.*?)", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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();"}} | [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 // ...\n if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n // ...\n } else if (S.getLangOpts().CPlusPlus && ResType->isEnumeralType()) {\n // ...\n } else if (ResType->isRealType()) {\n // ...\n } else if (ResType->isPointerType()) {\n // ...\n } else if (ResType->isObjCObjectPointerType()) {\n // ...\n } else if (ResType->isAnyComplexType()) {\n // ...\n S.Diag(OpLoc, diag::ext_integer_increment_complex) << ResType << Op->getSourceRange();"}} | ||
}, | }, | ||
["ext_integer_literal_too_large_for_signed"]={ | ["ext_integer_literal_too_large_for_signed"]={ | ||
[ | [a]="integer literal is too large to be represented in a signed integer type, interpreting as unsigned [-Wimplicitly-unsigned-literal]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"implicitly-unsigned-literal"}, | ||
[ | [l]="implicitly-unsigned-literal", | ||
[ | [e]="integer literal is too large to be represented in a signed integer type, interpreting as unsigned", | ||
[ | [f]=p, | ||
[ | [h]="integer literal is too large to be represented in a signed integer type, interpreting as unsigned", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wimplicitly\\-unsigned\\-literal[^\\]]*\\]", | ||
[ | [g]=r, | ||
[i]={"31f42318d833",1406213483,"Improving the \"integer constant too large\" diagnostics based on post-commit feedback from Richard Sm...","Improving the \"integer constant too large\" diagnostics based on post-commit feedback from Richard Smith. Amends r213657."}, | [i]={"31f42318d833",1406213483,"Improving the \"integer constant too large\" diagnostics based on post-commit feedback from Richard Sm...","Improving the \"integer constant too large\" diagnostics based on post-commit feedback from Richard Smith. Amends r213657."}, | ||
[j]={{ | [j]={{Oc,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 // ...\n case tok::numeric_constant: {\n // ...\n // Parse the integer literal into Result.\n if (Literal.GetIntegerValue(Result.Val)) {\n // ...\n } else {\n // ...\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 // ...\n if (Literal.isFixedPointLiteral()) {\n // ...\n } else if (Literal.isFloatingLiteral()) {\n // ...\n } else if (!Literal.isIntegerLiteral()) {\n // ...\n } else {\n // ...\n if (Literal.GetIntegerValue(ResultVal)) {\n // ...\n } else {\n // ...\n // 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 // ...\n else\n Diag(Tok.getLocation(), diag::ext_integer_literal_too_large_for_signed);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,792: | Line 6,791: | ||
}, | }, | ||
["ext_internal_in_extern_inline"]={ | ["ext_internal_in_extern_inline"]={ | ||
[ | [a]="static ... A is used in an inline function with external linkage [-Wstatic-in-inline]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"static-in-inline"}, | ||
[ | [l]="static-in-inline", | ||
[ | [e]="static %select{function|variable}0 %1 is used in an inline function with external linkage", | ||
[ | [f]=p, | ||
[ | [h]="static (?:function|variable) (.*?) is used in an inline function with external linkage", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstatic\\-in\\-inline[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"edff0200115c",1340041798,"Allow internal decls in inline functions if the function is in the main file.","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.","Allow internal decls in inline functions if the function is in the main file."}, | ||
[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;"}}, | [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 // ...\n S.Diag(Loc, DowngradeWarning ? diag::ext_internal_in_extern_inline_quiet : diag::ext_internal_in_extern_inline) << /*IsVar=*/!UsedFn << D;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,809: | Line 6,808: | ||
}, | }, | ||
["ext_internal_in_extern_inline_quiet"]={ | ["ext_internal_in_extern_inline_quiet"]={ | ||
[ | [a]="static ... A is used in an inline function with external linkage [-Wstatic-in-inline]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v,"static-in-inline"}, | ||
[ | [l]="static-in-inline", | ||
[ | [e]="static %select{function|variable}0 %1 is used in an inline function with external linkage", | ||
[ | [f]=p, | ||
[ | [h]="static (?:function|variable) (.*?) is used in an inline function with external linkage", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wstatic\\-in\\-inline[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[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;"}} | [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 // ...\n S.Diag(Loc, DowngradeWarning ? diag::ext_internal_in_extern_inline_quiet : diag::ext_internal_in_extern_inline) << /*IsVar=*/!UsedFn << D;"}} | ||
}, | }, | ||
["ext_keyword_as_ident"]={ | ["ext_keyword_as_ident"]={ | ||
[ | [a]="keyword \'A\' will be made available as an identifier ... [-Wkeyword-compat]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"keyword-compat"}, | ||
[ | [l]="keyword-compat", | ||
[ | [e]="keyword \'%0\' will be made available as an identifier %select{here|for the remainder of the translation unit}1", | ||
[ | [f]=p, | ||
[ | [h]="keyword \'(.*?)\' will be made available as an identifier (?:here|for the remainder of the translation unit)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wkeyword\\-compat[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"47642d2b7ea1",1386051181,"Emit an extension warning when changing system header tokens","Emit an extension warning when changing system header tokens"}, | [i]={"47642d2b7ea1",1386051181,"Emit an extension warning when changing system header tokens","Emit an extension warning when changing system header tokens"}, | ||
[j]={{ | [j]={{wb,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 // ...\n Diag(Tok, diag::ext_keyword_as_ident) << Tok.getIdentifierInfo()->getName() << 0;"},{Ab,3134,"#include \"clang/Basic/TransformTypeTraits.def\"\n if (!NextToken().is(tok::l_paren)) {\n // ...\n Diag(Tok, diag::ext_keyword_as_ident) << Tok.getIdentifierInfo()->getName() << 0;"},{Cb,1915,"bool Parser::TryKeywordIdentFallback(bool DisableKeyword) {\n // ...\n Diag(Tok, diag::ext_keyword_as_ident) << PP.getSpelling(Tok) << DisableKeyword;"},{Bb,274,"#include \"clang/Basic/TransformTypeTraits.def\"\n if (NextToken().is(tok::less)) {\n // ...\n Diag(Tok, diag::ext_keyword_as_ident) << Tok.getIdentifierInfo()->getName() << 0;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,841: | Line 6,840: | ||
}, | }, | ||
["ext_lambda_missing_parens"]={ | ["ext_lambda_missing_parens"]={ | ||
[ | [a]="lambda without a parameter clause is a C++23 extension [-Wc++23-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={ib,Nb}, | ||
[ | [l]=ib, | ||
[ | [e]="lambda without a parameter clause is a C++23 extension", | ||
[ | [f]=p, | ||
[ | [h]="lambda without a parameter clause is a C\\+\\+23 extension", | ||
[ | [b]=Lb, | ||
[ | [g]=y, | ||
[i]={ | [i]={xb,1612659633,Z,Z}, | ||
[j]={{ | [j]={{Ab,1511,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n // ...\n if (HasSpecifiers && !HasParentheses && !getLangOpts().CPlusPlus23) {\n // ...\n Diag(Tok, diag::ext_lambda_missing_parens) << FixItHint::CreateInsertion(Tok.getLocation(), \"() \");"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,858: | Line 6,857: | ||
}, | }, | ||
["ext_lambda_template_parameter_list"]={ | ["ext_lambda_template_parameter_list"]={ | ||
[ | [a]="explicit template parameter list for lambdas is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="explicit template parameter list for lambdas is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="explicit template parameter list for lambdas is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=y, | ||
[i]={"8205a814a691",1556966986,"[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas","[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas"}, | [i]={"8205a814a691",1556966986,"[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas","[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas"}, | ||
[j]={{ | [j]={{Ab,1331,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n // ...\n if (Tok.is(tok::less)) {\n Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_lambda_template_parameter_list : diag::ext_lambda_template_parameter_list);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,875: | Line 6,874: | ||
}, | }, | ||
["ext_line_comment"]={ | ["ext_line_comment"]={ | ||
[ | [a]="// comments are not allowed in this language [-Wcomment]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={mb,vb,xc,"comments",sb,v}, | ||
[ | [l]=xc, | ||
[ | [e]="// comments are not allowed in this language", | ||
[ | [f]=p, | ||
[ | [h]="\\/\\/ comments are not allowed in this language", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wcomment[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"158a31abe2c2",1352617334,"s/BCPLComment/LineComment/","s/BCPLComment/LineComment/"}, | [i]={"158a31abe2c2",1352617334,"s/BCPLComment/LineComment/","s/BCPLComment/LineComment/"}, | ||
[j]={{db,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);"}}, | [j]={{db,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);"}}, | ||
Line 6,893: | Line 6,892: | ||
}, | }, | ||
["ext_main_returns_nonint"]={ | ["ext_main_returns_nonint"]={ | ||
[ | [a]="return type of \'main\' is not \'int\' [-Wmain-return-type]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"main-return-type"}, | ||
[ | [l]="main-return-type", | ||
[ | [e]="return type of \'main\' is not \'int\'", | ||
[ | [f]=p, | ||
[ | [h]="return type of \'main\' is not \'int\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmain\\-return\\-type[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"5ed3caf2e364",1329249052,"Warn about non-int main() results in GNU C mode instead of erroring.","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.","Warn about non-int main() results in GNU C mode instead of erroring."}, | ||
[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);"}}, | [j]={{x,12128,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n // ...\n if (getLangOpts().GNUMode && !getLangOpts().CPlusPlus) {\n // ...\n // GCC in C mode accepts qualified \'int\'.\n if (Context.hasSameUnqualifiedType(FT->getReturnType(), Context.IntTy))\n // ...\n else {\n Diag(FD->getTypeSpecStartLoc(), diag::ext_main_returns_nonint);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Sema/gnu89.c"]={"clang/test/Sema/gnu89.c:5:1: warning: return type of \'main\' is not \'int\' [-Wmain-return-type]"} | ["clang/test/Sema/gnu89.c"]={"clang/test/Sema/gnu89.c:5:1: warning: return type of \'main\' is not \'int\' [-Wmain-return-type]"} | ||
Line 6,910: | Line 6,909: | ||
}, | }, | ||
["ext_main_used"]={ | ["ext_main_used"]={ | ||
[ | [a]="ISO C++ does not allow \'main\' to be used by a program [-Wmain]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={Qc,v}, | ||
[ | [l]=Qc, | ||
[ | [e]="ISO C++ does not allow \'main\' to be used by a program", | ||
[ | [f]=p, | ||
[ | [h]="ISO C\\+\\+ does not allow \'main\' to be used by a program", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"b63b6ee9a00e",1390354999,"Enforce restrictions that \'main\' is not allowed to be deleted, or to be used by","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","Enforce restrictions that \'main\' is not allowed to be deleted, or to be used by"}, | ||
[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);"}}, | [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 // ...\n if (getLangOpts().CPlusPlus && isa<FunctionDecl>(D)) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,928: | Line 6,927: | ||
}, | }, | ||
["ext_many_braces_around_init"]={ | ["ext_many_braces_around_init"]={ | ||
[ | [a]="too many braces around ...initializer [-Wmany-braces-around-scalar-init]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"many-braces-around-scalar-init"}, | ||
[ | [l]="many-braces-around-scalar-init", | ||
[ | [e]="too many braces around %select{scalar |}0initializer", | ||
[ | [f]=p, | ||
[ | [h]="too many braces around (?:scalar |)initializer", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmany\\-braces\\-around\\-scalar\\-init[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={dd,1576908663,Mb,Mb}, | ||
[j]={{W,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();"}}, | [j]={{W,1655,"void InitListChecker::CheckScalarType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 6,945: | Line 6,944: | ||
}, | }, | ||
["ext_mathematical_notation"]={ | ["ext_mathematical_notation"]={ | ||
[ | [a]="mathematical notation character <U+A> in an identifier is a Clang extension [-Wmathematical-notation-identifier-extension]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"mathematical-notation-identifier-extension"}, | ||
[ | [l]="mathematical-notation-identifier-extension", | ||
[ | [e]="mathematical notation character <U+%0> in an identifier is a Clang extension", | ||
[ | [f]=p, | ||
[ | [h]="mathematical notation character \\<U\\+(.*?)\\> in an identifier is a Clang extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmathematical\\-notation\\-identifier\\-extension[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{db,1556,"static void diagnoseExtensionInIdentifier(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range) {\n Diags.Report(Range.getBegin(), diag::ext_mathematical_notation) << codepointAsHexString(C) << Range;"}}, | [j]={{db,1556,"static void diagnoseExtensionInIdentifier(DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range) {\n // ...\n Diags.Report(Range.getBegin(), diag::ext_mathematical_notation) << codepointAsHexString(C) << Range;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,962: | Line 6,961: | ||
}, | }, | ||
["ext_member_redeclared"]={ | ["ext_member_redeclared"]={ | ||
[ | [a]="class member cannot be redeclared [-Wredeclared-class-member]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={N,"redeclared-class-member"}, | ||
[ | [l]="redeclared-class-member", | ||
[ | [e]="class member cannot be redeclared", | ||
[ | [f]=p, | ||
[ | [h]="class member cannot be redeclared", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wredeclared\\-class\\-member[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"55890bfaa6c2",1370922683,"Implement DR85: Redeclaration of member is forbidden","Implement DR85: Redeclaration of member is forbidden"}, | [i]={"55890bfaa6c2",1370922683,"Implement DR85: Redeclaration of member is forbidden","Implement DR85: Redeclaration of member is forbidden"}, | ||
[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);"}}, | [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 // ...\n if (!Previous.empty()) {\n // ...\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 // ...\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]={ | [k]={ | ||
["clang/test/SemaCXX/access.cpp"]={"clang/test/SemaCXX/access.cpp:32:11: warning: class member cannot be redeclared [-Wredeclared-class-member]"} | ["clang/test/SemaCXX/access.cpp"]={"clang/test/SemaCXX/access.cpp:32:11: warning: class member cannot be redeclared [-Wredeclared-class-member]"} | ||
Line 6,979: | Line 6,978: | ||
}, | }, | ||
["ext_mismatched_exception_spec"]={ | ["ext_mismatched_exception_spec"]={ | ||
[ | [a]="exception specification in declaration does not match previous declaration [-Wmicrosoft-exception-spec]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,Kb}, | ||
[ | [l]=Kb, | ||
[ | [e]="exception specification in declaration does not match previous declaration", | ||
[ | [f]=p, | ||
[ | [h]="exception specification in declaration does not match previous declaration", | ||
[ | [b]=Xc, | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[j]={{ | [j]={{Ib,314,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n // ...\n if (getLangOpts().MSVCCompat) {\n DiagID = diag::ext_mismatched_exception_spec;"},{Ib,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 // ...\n if (getLangOpts().MSVCCompat)\n DiagID = diag::ext_mismatched_exception_spec;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 6,996: | Line 6,995: | ||
}, | }, | ||
["ext_mismatched_exception_spec_explicit_instantiation"]={ | ["ext_mismatched_exception_spec_explicit_instantiation"]={ | ||
[ | [a]="exception specification in explicit instantiation does not match instantiated one [-Wmicrosoft-exception-spec]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,Kb}, | ||
[ | [l]=Kb, | ||
[ | [e]="exception specification in explicit instantiation does not match instantiated one", | ||
[ | [f]=p, | ||
[ | [h]="exception specification in explicit instantiation does not match instantiated one", | ||
[ | [b]=Xc, | ||
[ | [g]=n, | ||
[i]={"73983918c45b",1415268650,"Fix for exception specification mismatch in explicit instantiation.","Fix for exception specification mismatch in explicit instantiation."}, | [i]={"73983918c45b",1415268650,"Fix for exception specification mismatch in explicit instantiation.","Fix for exception specification mismatch in explicit instantiation."}, | ||
[j]={{I,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;"}} | [j]={{I,10669,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n // ...\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 // ...\n if (getLangOpts().MicrosoftExt)\n DiagID = diag::ext_mismatched_exception_spec_explicit_instantiation;"}} | ||
}, | }, | ||
["ext_missing_exception_specification"]={ | ["ext_missing_exception_specification"]={ | ||
[ | [a]="A is missing exception specification \'B\' [-Wmissing-exception-spec]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"missing-exception-spec"}, | ||
[ | [l]="missing-exception-spec", | ||
[ | [e]="%0 is missing exception specification \'%1\'", | ||
[ | [f]=p, | ||
[ | [h]="(.*?) is missing exception specification \'(.*?)\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmissing\\-exception\\-spec[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"a91de375f278",1443574130,"Promote a warning on ill-formed code (redeclaration missing an exception","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","Promote a warning on ill-formed code (redeclaration missing an exception"}, | ||
[j]={{ | [j]={{Ib,401,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n // ...\n if (getLangOpts().MSVCCompat && isDynamicExceptionSpec(ESI.Type)) {\n DiagID = diag::ext_missing_exception_specification;"},{Ib,407,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n // ...\n if (getLangOpts().MSVCCompat && isDynamicExceptionSpec(ESI.Type)) {\n // ...\n } else if (New->isReplaceableGlobalAllocationFunction() && ESI.Type != EST_DependentNoexcept) {\n // ...\n DiagID = diag::ext_missing_exception_specification;"},{Ib,416,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n // ...\n if (getLangOpts().MSVCCompat && isDynamicExceptionSpec(ESI.Type)) {\n // ...\n } else if (New->isReplaceableGlobalAllocationFunction() && ESI.Type != EST_DependentNoexcept) {\n // ...\n } else if (ESI.Type == EST_NoThrow) {\n // ...\n DiagID = diag::ext_missing_exception_specification;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,027: | Line 7,026: | ||
}, | }, | ||
["ext_missing_type_specifier"]={ | ["ext_missing_type_specifier"]={ | ||
[ | [a]="type specifier missing, defaults to \'int\'; ISO C99 and later do not support implicit int [-Wimplicit-int]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={mb,vb,hd,"implicit-int",sb}, | ||
[ | [l]="implicit-int", | ||
[ | [e]="type specifier missing, defaults to \'int\'; ISO C99 and later do not support implicit int", | ||
[ | [f]=S, | ||
[ | [h]="type specifier missing, defaults to \'int\'; ISO C99 and later do not support implicit int", | ||
[ | [b]=" \\[[^\\]]*\\-Wimplicit\\-int[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"aef810900a7a",1244031721,"Minor cleanup for implicit int warnings.","Minor cleanup for implicit int warnings."}, | [i]={"aef810900a7a",1244031721,"Minor cleanup for implicit int warnings.","Minor cleanup for implicit int warnings."}, | ||
[j]={{U,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\");"}}, | [j]={{U,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 // ...\n case DeclSpec::TST_unspecified:\n // ...\n // Unspecified typespec defaults to int in C90. However, the C90 grammar\n // [C90 6.5] only allows a decl-spec if there was *some* type-specifier,\n // type-qualifier, or storage-class-specifier. If not, emit an extwarn.\n // Note that the one exception to this is function definitions, which are\n // allowed to be completely missing a declspec. This is handled in the\n // parser already though by it pretending to have seen an \'int\' in this\n // case.\n if (S.getLangOpts().isImplicitIntRequired()) {\n // ...\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 // ...\n } else if (S.getLangOpts().getOpenCLCompatibleVersion() >= 200 && DS.isTypeSpecPipe()) {\n // ...\n } else {\n // ...\n S.Diag(DeclLoc, diag::ext_missing_type_specifier) << DS.getSourceRange() << FixItHint::CreateInsertion(DS.getBeginLoc(), \"int\");"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,044: | Line 7,043: | ||
}, | }, | ||
["ext_missing_varargs_arg"]={ | ["ext_missing_varargs_arg"]={ | ||
[ | [a]="must specify at least one argument for \'...\' parameter of variadic macro [-Wgnu-zero-variadic-macro-arguments]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-zero-variadic-macro-arguments",v}, | ||
[ | [l]="gnu-zero-variadic-macro-arguments", | ||
[ | [e]="must specify at least one argument for \'...\' parameter of variadic macro", | ||
[ | [f]=p, | ||
[ | [h]="must specify at least one argument for \'\\.\\.\\.\' parameter of variadic macro", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-zero\\-variadic\\-macro\\-arguments[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[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);"}}, | [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 // ...\n if (NumActuals < MinArgsExpected) {\n // There are several cases where too few arguments is ok, handle them now.\n if (NumActuals == 0 && MinArgsExpected == 1) {\n // ...\n } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected || // A(x, ...) -> A(X)\n // ...\n // Varargs where the named vararg parameter is missing: OK as extension.\n // #define A(x, ...)\n // A(\"blah\")\n //\n // If the macro contains the comma pasting extension, the diagnostic\n // is suppressed; we know we\'ll get another diagnostic later.\n if (!MI->hasCommaPasting()) {\n // ...\n Diag(Tok, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_missing_varargs_arg : diag::ext_missing_varargs_arg);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,062: | Line 7,061: | ||
}, | }, | ||
["ext_missing_whitespace_after_macro_name"]={ | ["ext_missing_whitespace_after_macro_name"]={ | ||
[a]="whitespace required after macro name", | [a]="whitespace required after macro name", | ||
[h]=Pb, | [c]=o, | ||
[ | [d]=q, | ||
[e]="whitespace required after macro name", | |||
[f]=p, | |||
[h]="whitespace required after macro name", | |||
[b]=Pb, | |||
[g]=D, | |||
[i]={"2425bcb49ae4",1240021405,"enforce requirements imposed by C90 6.8 TC1, fixing PR3919.","enforce requirements imposed by C90 6.8 TC1, fixing PR3919."}, | [i]={"2425bcb49ae4",1240021405,"enforce requirements imposed by C90 6.8 TC1, fixing PR3919.","enforce requirements imposed by C90 6.8 TC1, fixing PR3919."}, | ||
[j]={{ | [j]={{bb,2875,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // ...\n // If this is a function-like macro definition, parse the argument list,\n // marking each of the identifiers as being used as macro arguments. Also,\n // check other constraints on the first token of the macro body.\n if (Tok.is(tok::eod)) {\n // ...\n } else if (Tok.hasLeadingSpace()) {\n // ...\n } else if (Tok.is(tok::l_paren)) {\n // ...\n } else if (LangOpts.C99 || LangOpts.CPlusPlus11) {\n // ...\n } else {\n // ...\n if (isInvalid)\n Diag(Tok, diag::ext_missing_whitespace_after_macro_name);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Preprocessor/c90.c"]={"clang/test/Preprocessor/c90.c:7:12: warning: whitespace required after macro name"} | ["clang/test/Preprocessor/c90.c"]={"clang/test/Preprocessor/c90.c:7:12: warning: whitespace required after macro name"} | ||
Line 7,077: | Line 7,076: | ||
}, | }, | ||
["ext_mixed_decls_code"]={ | ["ext_mixed_decls_code"]={ | ||
[ | [a]="mixing declarations and code is a C99 extension [-Wdeclaration-after-statement]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"declaration-after-statement",v}, | ||
[ | [l]="declaration-after-statement", | ||
[ | [e]="mixing declarations and code is a C99 extension", | ||
[ | [f]=p, | ||
[ | [h]="mixing declarations and code is a C99 extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdeclaration\\-after\\-statement[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[j]={{ | [j]={{Wb,420,"StmtResult Sema::ActOnCompoundStmt(SourceLocation L, SourceLocation R, ArrayRef<Stmt *> Elts, bool isStmtExpr) {\n // ...\n const unsigned MixedDeclsCodeID = getLangOpts().C99 ? diag::warn_mixed_decls_code : diag::ext_mixed_decls_code;"}}, | ||
[k]={ | [k]={ | ||
[ | [Sc]={"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]"} | ||
} | } | ||
}, | }, | ||
["ext_module_import_in_extern_c"]={ | ["ext_module_import_in_extern_c"]={ | ||
[ | [a]="import of C++ module \'A\' appears within extern \"C\" language linkage specification [-Wmodule-import-in-extern-c]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"module-import-in-extern-c"}, | ||
[ | [l]="module-import-in-extern-c", | ||
[ | [e]="import of C++ module \'%0\' appears within extern \"C\" language linkage specification", | ||
[ | [f]=S, | ||
[ | [h]="import of C\\+\\+ module \'(.*?)\' appears within extern \"C\" language linkage specification", | ||
[ | [b]=" \\[[^\\]]*\\-Wmodule\\-import\\-in\\-extern\\-c[^\\]]*\\]", | ||
[ | [g]=bd, | ||
[i]={"e69bdd10ead6",1444696780,"[modules] Allow the error on importing a C++ module within an extern \"C\"","[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\"","[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 // ...\n if (!isa<TranslationUnitDecl>(DC)) {\n // ...\n } else if (!M->IsExternC && ExternCLoc.isValid()) {\n S.Diag(ImportLoc, diag::ext_module_import_in_extern_c) << M->getFullModuleName();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,112: | Line 7,111: | ||
}, | }, | ||
["ext_module_import_not_at_top_level_noop"]={ | ["ext_module_import_not_at_top_level_noop"]={ | ||
[ | [a]="redundant #include of module \'A\' appears within B [-Wmodules-import-nested-redundant]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"modules-import-nested-redundant"}, | ||
[ | [l]="modules-import-nested-redundant", | ||
[ | [e]="redundant #include of module \'%0\' appears within %1", | ||
[ | [f]=S, | ||
[ | [h]="redundant \\#include of module \'(.*?)\' appears within (.*?)", | ||
[ | [b]=" \\[[^\\]]*\\-Wmodules\\-import\\-nested\\-redundant[^\\]]*\\]", | ||
[ | [g]=bd, | ||
[i]={"752ada870d7b",1447803121,"[modules] When a #include is mapped to a module import and appears somewhere","[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","[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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,129: | Line 7,128: | ||
}, | }, | ||
["ext_ms_abstract_keyword"]={ | ["ext_ms_abstract_keyword"]={ | ||
[ | [a]="\'abstract\' keyword is a Microsoft extension [-Wmicrosoft-abstract]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-abstract"}, | ||
[ | [l]="microsoft-abstract", | ||
[ | [e]="\'abstract\' keyword is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="\'abstract\' keyword is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-abstract[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={ | [i]={xb,1612659633,Z,Z}, | ||
[j]={{O,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);"},{O,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);"}}, | [j]={{O,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 // ...\n if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n // ...\n } else if (Specifier == VirtSpecifiers::VS_Sealed) {\n // ...\n } else if (Specifier == VirtSpecifiers::VS_Abstract) {\n Diag(Tok.getLocation(), diag::ext_ms_abstract_keyword);"},{O,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 // ...\n // Parse the optional \'final\' keyword.\n if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n while (true) {\n // ...\n if (TagType == DeclSpec::TST_interface)\n // ...\n else if (Specifier == VirtSpecifiers::VS_Final)\n // ...\n else if (Specifier == VirtSpecifiers::VS_Sealed)\n // ...\n else if (Specifier == VirtSpecifiers::VS_Abstract)\n Diag(AbstractLoc, diag::ext_ms_abstract_keyword);"}}, | ||
[k]={ | [k]={ | ||
[ | [ad]={"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]"} | ||
} | } | ||
}, | }, | ||
["ext_ms_ambiguous_direct_base"]={ | ["ext_ms_ambiguous_direct_base"]={ | ||
[ | [a]="accessing inaccessible direct base A of B is a Microsoft extension [-Wmicrosoft-inaccessible-base]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"microsoft-inaccessible-base"}, | ||
[ | [l]="microsoft-inaccessible-base", | ||
[ | [e]="accessing inaccessible direct base %0 of %1 is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="accessing inaccessible direct base (.*?) of (.*?) is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-inaccessible\\-base[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"2e87a21c7cac",1509144521,"[MS] Allow access to ambiguous, inaccessible direct bases","[MS] Allow access to ambiguous, inaccessible direct bases"}, | [i]={"2e87a21c7cac",1509144521,"[MS] Allow access to ambiguous, inaccessible direct bases","[MS] Allow access to ambiguous, inaccessible direct bases"}, | ||
[j]={{B,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;"}}, | [j]={{B,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 // ...\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 // ...\n if (AmbiguousBaseConvID)\n Diag(Loc, diag::ext_ms_ambiguous_direct_base) << Base << Derived << Range;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,163: | Line 7,162: | ||
}, | }, | ||
["ext_ms_anonymous_record"]={ | ["ext_ms_anonymous_record"]={ | ||
[ | [a]="anonymous ... are a Microsoft extension [-Wmicrosoft-anon-tag]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-anon-tag"}, | ||
[ | [l]="microsoft-anon-tag", | ||
[ | [e]="anonymous %select{structs|unions}0 are a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="anonymous (?:structs|unions) are a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-anon\\-tag[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"8f0ed914902f",1407742194,"Sema: Handle declspecs without declarators in records properly in C mode","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","Sema: Handle declspecs without declarators in records properly in C mode"}, | ||
[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();"}}, | [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 // ...\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 // ...\n if (Record && getLangOpts().MicrosoftExt) {\n Diag(DS.getBeginLoc(), diag::ext_ms_anonymous_record) << Record->isUnion() << DS.getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,180: | Line 7,179: | ||
}, | }, | ||
["ext_ms_c_enum_fixed_underlying_type"]={ | ["ext_ms_c_enum_fixed_underlying_type"]={ | ||
[ | [a]="enumeration types with a fixed underlying type are a Microsoft extension [-Wmicrosoft-fixed-enum]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={J,"microsoft-fixed-enum",v}, | ||
[ | [l]="microsoft-fixed-enum", | ||
[ | [e]="enumeration types with a fixed underlying type are a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="enumeration types with a fixed underlying type are a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-fixed\\-enum[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"6f11db137034",1538166298,"Support enums with a fixed underlying type in all language modes.","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.","Support enums with a fixed underlying type in all language modes."}, | ||
[j]={{K,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;"}}, | [j]={{K,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 // ...\n // Parse the fixed underlying type.\n if (Tok.is(tok::colon)) {\n // ...\n if (CanBeBitfield && !isEnumBase(CanBeOpaqueEnumDeclaration)) {\n // ...\n } else if (CanHaveEnumBase || !ColonIsSacred) {\n // ...\n if (!getLangOpts().ObjC) {\n if (getLangOpts().CPlusPlus11)\n // ...\n else if (getLangOpts().CPlusPlus)\n // ...\n else if (getLangOpts().MicrosoftExt)\n Diag(ColonLoc, diag::ext_ms_c_enum_fixed_underlying_type) << BaseRange;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,198: | Line 7,197: | ||
}, | }, | ||
["ext_ms_cast_fn_obj"]={ | ["ext_ms_cast_fn_obj"]={ | ||
[ | [a]="static_cast between pointer-to-function and pointer-to-object is a Microsoft extension [-Wmicrosoft-cast]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-cast"}, | ||
[ | [l]="microsoft-cast", | ||
[ | [e]="static_cast between pointer-to-function and pointer-to-object is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="static_cast between pointer\\-to\\-function and pointer\\-to\\-object is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-cast[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"85bd1206796d",1433283312,"[MSVC Compatibility] Permit static_cast from void-ptr to function-ptr","[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","[MSVC Compatibility] Permit static_cast from void-ptr to function-ptr"}, | ||
[j]={{ | [j]={{Fb,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 // ...\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 // ...\n if (SrcPointee->isVoidType()) {\n if (const PointerType *DestPointer = DestType->getAs<PointerType>()) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,215: | Line 7,214: | ||
}, | }, | ||
["ext_ms_delayed_template_argument"]={ | ["ext_ms_delayed_template_argument"]={ | ||
[ | [a]="using the undeclared type A as a default template argument is a Microsoft extension [-Wmicrosoft-template]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,hb}, | ||
[ | [l]=hb, | ||
[ | [e]="using the undeclared type %0 as a default template argument is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="using the undeclared type (.*?) as a default template argument is a Microsoft extension", | ||
[ | [b]=Gb, | ||
[ | [g]=n, | ||
[i]={"df6e4a06e42b",1402094196,"Delay lookup of simple default template arguments under -fms-compatibility","Delay lookup of simple default template arguments under -fms-compatibility"}, | [i]={"df6e4a06e42b",1402094196,"Delay lookup of simple default template arguments under -fms-compatibility","Delay lookup of simple default template arguments under -fms-compatibility"}, | ||
[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;"}}, | [j]={{x,635,"ParsedType Sema::ActOnMSVCUnknownTypeName(const IdentifierInfo &II, SourceLocation NameLoc, bool IsTemplateTypeArg) {\n // ...\n if (IsTemplateTypeArg && getCurScope()->isTemplateParamScope()) {\n // ...\n Diag(NameLoc, diag::ext_ms_delayed_template_argument) << &II;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,232: | Line 7,231: | ||
}, | }, | ||
["ext_ms_deref_template_argument"]={ | ["ext_ms_deref_template_argument"]={ | ||
[ | [a]="non-type template argument containing a dereference operation is a Microsoft extension [-Wmicrosoft-template]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,hb}, | ||
[ | [l]=hb, | ||
[ | [e]="non-type template argument containing a dereference operation is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="non\\-type template argument containing a dereference operation is a Microsoft extension", | ||
[ | [b]=Gb, | ||
[ | [g]=n, | ||
[i]={"da45a0fa6f72",1377236539,"arc commit didn\'t add this because it wasn\'t in the patch...","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...","arc commit didn\'t add this because it wasn\'t in the patch..."}, | ||
[j]={{I,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();"}}, | [j]={{I,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 // ...\n if (S.getLangOpts().MicrosoftExt) {\n // ...\n if (FirstOpLoc.isValid()) {\n if (ExtWarnMSTemplateArg)\n S.Diag(ArgIn->getBeginLoc(), diag::ext_ms_deref_template_argument) << ArgIn->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
[ | [qc]={"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"]={ | ||
[ | [a]="explicit constructor calls are a Microsoft extension [-Wmicrosoft-explicit-constructor-call]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-explicit-constructor-call"}, | ||
[ | [l]="microsoft-explicit-constructor-call", | ||
[ | [e]="explicit constructor calls are a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="explicit constructor calls are a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-explicit\\-constructor\\-call[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"64225794119e",1295327079,"Add support for explicit constructor calls in Microsoft mode.","Add support for explicit constructor calls in Microsoft mode."}, | [i]={"64225794119e",1295327079,"Add support for explicit constructor calls in Microsoft mode.","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 // ...\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]={ | [k]={ | ||
[ | [qc]={"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"]={ | ||
[ | [a]="forward references to \'enum\' types are a Microsoft extension [-Wmicrosoft-enum-forward-reference]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-enum-forward-reference"}, | ||
[ | [l]="microsoft-enum-forward-reference", | ||
[ | [e]="forward references to \'enum\' types are a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="forward references to \'enum\' types are a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-enum\\-forward\\-reference[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"488b4a7d943b",1284268015,"Add basic support for Microsoft enum forward declaration. ","Add basic support for Microsoft enum forward declaration. "}, | [i]={"488b4a7d943b",1284268015,"Add basic support for Microsoft enum forward declaration. ","Add basic support for Microsoft enum forward declaration. "}, | ||
[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;"}}, | [j]={{x,17512,"CreateNewDecl:\n // ...\n if (Kind == TTK_Enum) {\n // ...\n // If this is an undefined enum, warn.\n if (TUK != TUK_Definition && !Invalid) {\n // ...\n if (IsFixed && cast<EnumDecl>(New)->isFixed()) {\n // ...\n } else if (PrevDecl && (Def = cast<EnumDecl>(PrevDecl)->getDefinition())) {\n // ...\n } else {\n // ...\n if (getLangOpts().MSVCCompat)\n DiagID = diag::ext_ms_forward_ref_enum;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,283: | Line 7,282: | ||
}, | }, | ||
["ext_ms_impcast_fn_obj"]={ | ["ext_ms_impcast_fn_obj"]={ | ||
[ | [a]="implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension [-Wmicrosoft-cast]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-cast"}, | ||
[ | [l]="microsoft-cast", | ||
[ | [e]="implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="implicit conversion between pointer\\-to\\-function and pointer\\-to\\-object is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-cast[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"6bf02820bced",1446280934,"[MSVC Compat] Permit conversions from pointer-to-function to pointer-to-object iff -fms-compatibilit...","[MSVC Compat] Permit conversions from pointer-to-function to pointer-to-object iff -fms-compatibility"}, | [i]={"6bf02820bced",1446280934,"[MSVC Compat] Permit conversions from pointer-to-function to pointer-to-object iff -fms-compatibilit...","[MSVC Compat] Permit conversions from pointer-to-function to pointer-to-object iff -fms-compatibility"}, | ||
[j]={{Qb,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();"}}, | [j]={{Qb,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 // ...\n if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) {\n if (const PointerType *FromPtrType = FromType->getAs<PointerType>()) {\n // ...\n if (Diagnose && !IsCStyleOrFunctionalCast && FromPointeeType->isFunctionType() && ToPointeeType->isVoidType()) {\n // ...\n Diag(From->getExprLoc(), diag::ext_ms_impcast_fn_obj) << From->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,300: | Line 7,299: | ||
}, | }, | ||
["ext_ms_reserved_user_defined_literal"]={ | ["ext_ms_reserved_user_defined_literal"]={ | ||
[ | [a]="invalid suffix on literal; C++11 requires a space between literal and identifier [-Wreserved-user-defined-literal]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"reserved-user-defined-literal"}, | ||
[ | [l]="reserved-user-defined-literal", | ||
[ | [e]="invalid suffix on literal; C++11 requires a space between literal and identifier", | ||
[ | [f]=p, | ||
[ | [h]="invalid suffix on literal; C\\+\\+11 requires a space between literal and identifier", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wreserved\\-user\\-defined\\-literal[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"7ebc4c191058",1333840163,"ext_reserved_user_defined_literal must not default to Error in MicrosoftMode. Hence create ext_ms_re...","ext_reserved_user_defined_literal must not default to Error in MicrosoftMode. Hence create ext_ms_reserved_user_defined_literal that doesn\'t default to Error; otherwise MSVC headers won\'t parse. "}, | [i]={"7ebc4c191058",1333840163,"ext_reserved_user_defined_literal must not default to Error in MicrosoftMode. Hence create ext_ms_re...","ext_reserved_user_defined_literal must not default to Error in MicrosoftMode. Hence create ext_ms_reserved_user_defined_literal that doesn\'t default to Error; otherwise MSVC headers won\'t parse. "}, | ||
[j]={{db,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), \" \");"}} | [j]={{db,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 // ...\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 // ...\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"]={ | ||
[ | [a]="\'sealed\' keyword is a Microsoft extension [-Wmicrosoft-sealed]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-sealed"}, | ||
[ | [l]="microsoft-sealed", | ||
[ | [e]="\'sealed\' keyword is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="\'sealed\' keyword is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-sealed[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"a543308ce556",1382056411,"[-fms-extensions] Permit \'override\' in C++98 and \'sealed\' as a synonym for \'final\'","[-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\'","[-fms-extensions] Permit \'override\' in C++98 and \'sealed\' as a synonym for \'final\'"}, | ||
[j]={{O,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);"},{O,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);"}}, | [j]={{O,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 // ...\n if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n // ...\n } else if (Specifier == VirtSpecifiers::VS_Sealed) {\n Diag(Tok.getLocation(), diag::ext_ms_sealed_keyword);"},{O,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 // ...\n // Parse the optional \'final\' keyword.\n if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n while (true) {\n // ...\n if (TagType == DeclSpec::TST_interface)\n // ...\n else if (Specifier == VirtSpecifiers::VS_Final)\n // ...\n else if (Specifier == VirtSpecifiers::VS_Sealed)\n Diag(FinalLoc, diag::ext_ms_sealed_keyword);"}}, | ||
[k]={ | [k]={ | ||
[ | [ad]={"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"]={ | ||
[ | [a]="use of \'static_assert\' without inclusion of <assert.h> is a Microsoft extension [-Wmicrosoft-static-assert]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-static-assert"}, | ||
[ | [l]="microsoft-static-assert", | ||
[ | [e]="use of \'static_assert\' without inclusion of <assert.h> is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="use of \'static_assert\' without inclusion of \\<assert\\.h\\> is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-static\\-assert[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={ | [i]={xb,1612659633,Z,Z}, | ||
[j]={{O,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\");"}}, | [j]={{O,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 // ...\n if (Tok.is(tok::kw_static_assert)) {\n if (!getLangOpts().CPlusPlus) {\n if (getLangOpts().C2x)\n // ...\n else\n Diag(Tok, diag::ext_ms_static_assert) << FixItHint::CreateReplacement(Tok.getLocation(), \"_Static_assert\");"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,348: | Line 7,347: | ||
}, | }, | ||
["ext_ms_template_spec_redecl_out_of_scope"]={ | ["ext_ms_template_spec_redecl_out_of_scope"]={ | ||
[ | [a]="... specialization of A not in ... is a Microsoft extension [-Wmicrosoft-template]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,hb}, | ||
[ | [l]=hb, | ||
[ | [e]="%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", | ||
[ | [f]=p, | ||
[ | [h]="(?: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", | ||
[ | [b]=Gb, | ||
[ | [g]=n, | ||
[i]={"0068cb249965",1426836106,"[MSVC] Explicit specializations can be declared in any namespace (fix for http://llvm.org/PR13738)","[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)","[MSVC] Explicit specializations can be declared in any namespace (fix for http://llvm.org/PR13738)"}, | ||
[j]={{I,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;"}}, | [j]={{I,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 // ...\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 // ...\n else {\n // ...\n if (S.getLangOpts().MicrosoftExt && !DC->isRecord())\n Diag = diag::ext_ms_template_spec_redecl_out_of_scope;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,365: | Line 7,364: | ||
}, | }, | ||
["ext_ms_template_type_arg_missing_typename"]={ | ["ext_ms_template_type_arg_missing_typename"]={ | ||
[ | [a]="template argument for template type parameter must be a type; omitted \'typename\' is a Microsoft extension [-Wmicrosoft-template]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,hb}, | ||
[ | [l]=hb, | ||
[ | [e]="template argument for template type parameter must be a type; omitted \'typename\' is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="template argument for template type parameter must be a type; omitted \'typename\' is a Microsoft extension", | ||
[ | [b]=Gb, | ||
[ | [g]=n, | ||
[i]={"377c1592f8d3",1402442988,"Recover from missing typenames on template args for MSVC compatibility","Recover from missing typenames on template args for MSVC compatibility"}, | [i]={"377c1592f8d3",1402442988,"Recover from missing typenames on template args for MSVC compatibility","Recover from missing typenames on template args for MSVC compatibility"}, | ||
[j]={{I,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 \");"}}, | [j]={{I,5254,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n // ...\n case TemplateArgument::Expression: {\n // ...\n if (auto *II = NameInfo.getName().getAsIdentifierInfo()) {\n // ...\n if (Result.getAsSingle<TypeDecl>() || Result.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,382: | Line 7,381: | ||
}, | }, | ||
["ext_ms_using_declaration_inaccessible"]={ | ["ext_ms_using_declaration_inaccessible"]={ | ||
[ | [a]="using declaration referring to inaccessible member \'A\' (which refers to accessible member \'B\') is a Microsoft compatibility extension [-Wmicrosoft-using-decl]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-using-decl"}, | ||
[ | [l]="microsoft-using-decl", | ||
[ | [e]="using declaration referring to inaccessible member \'%0\' (which refers to accessible member \'%1\') is a Microsoft compatibility extension", | ||
[ | [f]=p, | ||
[ | [h]="using declaration referring to inaccessible member \'(.*?)\' \\(which refers to accessible member \'(.*?)\'\\) is a Microsoft compatibility extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-using\\-decl[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"e434590bd90d",1325195853,"Change the diagnostics which said \'accepted as an extension\' to instead say","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","Change the diagnostics which said \'accepted as an extension\' to instead say"}, | ||
[j]={{ | [j]={{wc,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,399: | Line 7,398: | ||
}, | }, | ||
["ext_multi_line_line_comment"]={ | ["ext_multi_line_line_comment"]={ | ||
[ | [a]="multi-line // comment [-Wcomment]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={mb,vb,xc,"comments",sb,v}, | ||
[ | [l]=xc, | ||
[ | [e]="multi-line // comment", | ||
[ | [f]=p, | ||
[ | [h]="multi\\-line \\/\\/ comment", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wcomment[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"158a31abe2c2",1352617334,"s/BCPLComment/LineComment/","s/BCPLComment/LineComment/"}, | [i]={"158a31abe2c2",1352617334,"s/BCPLComment/LineComment/","s/BCPLComment/LineComment/"}, | ||
[j]={{db,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);"}} | [j]={{db,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 // ...\n while (true) {\n // ...\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 // ...\n if (!isLexingRawMode())\n Diag(OldPtr - 1, diag::ext_multi_line_line_comment);"}} | ||
}, | }, | ||
["ext_multi_using_declaration"]={ | ["ext_multi_using_declaration"]={ | ||
[ | [a]="use of multiple declarators in a single using declaration is a C++17 extension [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Q,kb}, | ||
[ | [l]=Q, | ||
[ | [e]="use of multiple declarators in a single using declaration is a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="use of multiple declarators in a single using declaration is a C\\+\\+17 extension", | ||
[ | [b]=lb, | ||
[ | [g]=y, | ||
[i]={"6f1daa4660ed",1481849928,"[c++1z] P0195R2: Allow multiple using-declarators in a single using-declaration.","[c++1z] P0195R2: Allow multiple using-declarators in a single using-declaration."}, | [i]={"6f1daa4660ed",1481849928,"[c++1z] P0195R2: Allow multiple using-declarators in a single using-declaration.","[c++1z] P0195R2: Allow multiple using-declarators in a single using-declaration."}, | ||
[j]={{O,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);"}}, | [j]={{O,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 // ...\n if (DeclsInGroup.size() > 1)\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx17_compat_multi_using_declaration : diag::ext_multi_using_declaration);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,431: | Line 7,430: | ||
}, | }, | ||
["ext_mutable_reference"]={ | ["ext_mutable_reference"]={ | ||
[ | [a]="\'mutable\' on a reference type is a Microsoft extension [-Wmicrosoft-mutable-reference]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-mutable-reference"}, | ||
[ | [l]="microsoft-mutable-reference", | ||
[ | [e]="\'mutable\' on a reference type is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="\'mutable\' on a reference type is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-mutable\\-reference[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"8f01bb983c2a",1423025132,"[MSVC2012] Allow \'mutable\' references","[MSVC2012] Allow \'mutable\' references"}, | [i]={"8f01bb983c2a",1423025132,"[MSVC2012] Allow \'mutable\' references","[MSVC2012] Allow \'mutable\' references"}, | ||
[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) {"}}, | [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 // ...\n // Check that \'mutable\' is consistent with the type of the declaration.\n if (!InvalidDecl && Mutable) {\n // ...\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 // ...\n // Check that \'mutable\' is consistent with the type of the declaration.\n if (!InvalidDecl && Mutable) {\n // ...\n if (DiagID) {\n // ...\n if (DiagID != diag::ext_mutable_reference) {"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,448: | Line 7,447: | ||
}, | }, | ||
["ext_named_variadic_macro"]={ | ["ext_named_variadic_macro"]={ | ||
[ | [a]="named variadic macros are a GNU extension [-Wvariadic-macros]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v,Ec}, | ||
[ | [l]=Ec, | ||
[ | [e]="named variadic macros are a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="named variadic macros are a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wvariadic\\-macros[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{bb,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 // ...\n while (true) {\n // ...\n default:\n // ...\n case tok::ellipsis: // #define X(A... -> GCC extension\n // ...\n Diag(Tok, diag::ext_named_variadic_macro);"}} | ||
}, | }, | ||
["ext_nested_name_member_ref_lookup_ambiguous"]={ | ["ext_nested_name_member_ref_lookup_ambiguous"]={ | ||
[ | [a]="lookup of A in member access expression is ambiguous; using member of B [-Wambiguous-member-template]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"ambiguous-member-template"}, | ||
[ | [l]="ambiguous-member-template", | ||
[ | [e]="lookup of %0 in member access expression is ambiguous; using member of %1", | ||
[ | [f]=p, | ||
[ | [h]="lookup of (.*?) in member access expression is ambiguous; using member of (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wambiguous\\-member\\-template[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"2f96e9f5c90d",1275701997,"Add an extension to avoid an error when a global template has the same name as","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","Add an extension to avoid an error when a global template has the same name as"}, | ||
[j]={{I,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;"}}, | [j]={{I,605,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n // ...\n if (S && !ObjectType.isNull() && !ObjectTypeSearchedInScope && !getLangOpts().CPlusPlus11) {\n // ...\n if (FoundOuter.empty()) {\n // ...\n } else if (FoundOuter.isAmbiguous() || !FoundOuter.isSingleResult() || !(OuterTemplate = getAsTemplateNameDecl(FoundOuter.getFoundDecl()))) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,480: | Line 7,479: | ||
}, | }, | ||
["ext_nested_name_spec_is_enum"]={ | ["ext_nested_name_spec_is_enum"]={ | ||
[ | [a]="use of enumeration in a nested name specifier is a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="use of enumeration in a nested name specifier is a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="use of enumeration in a nested name specifier is a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=n, | ||
[i]={"25a8afa9579e",1421611475,"Handle unscoped enumeration in nested name specifier.","Handle unscoped enumeration in nested name specifier."}, | [i]={"25a8afa9579e",1421611475,"Handle unscoped enumeration in nested name specifier.","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 // ...\n if (!AcceptSpec && IsExtension) {\n // ...\n Diag(IdInfo.IdentifierLoc, diag::ext_nested_name_spec_is_enum);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,497: | Line 7,496: | ||
}, | }, | ||
["ext_nested_namespace_definition"]={ | ["ext_nested_namespace_definition"]={ | ||
[ | [a]="nested namespace definition is a C++17 extension; define each namespace separately [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Q,kb}, | ||
[ | [l]=Q, | ||
[ | [e]="nested namespace definition is a C++17 extension; define each namespace separately", | ||
[ | [f]=p, | ||
[ | [h]="nested namespace definition is a C\\+\\+17 extension; define each namespace separately", | ||
[ | [b]=lb, | ||
[ | [g]=y, | ||
[i]={"13307f5f2429",1415425054,"[c++1z] Implement nested-namespace-definitions.","[c++1z] Implement nested-namespace-definitions."}, | [i]={"13307f5f2429",1415425054,"[c++1z] Implement nested-namespace-definitions.","[c++1z] Implement nested-namespace-definitions."}, | ||
[j]={{O,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);"},{O,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);"}}, | [j]={{O,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 // ...\n if (ExtraNSs.empty()) {\n // ...\n } else if (InlineLoc.isValid()) {\n // ...\n } else if (getLangOpts().CPlusPlus20) {\n // ...\n } else if (getLangOpts().CPlusPlus17) {\n // ...\n } else {\n // ...\n if (!rBraceToken.is(tok::r_brace)) {\n Diag(ExtraNSs[0].NamespaceLoc, diag::ext_nested_namespace_definition) << SourceRange(ExtraNSs.front().NamespaceLoc, ExtraNSs.back().IdentLoc);"},{O,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 // ...\n if (ExtraNSs.empty()) {\n // ...\n } else if (InlineLoc.isValid()) {\n // ...\n } else if (getLangOpts().CPlusPlus20) {\n // ...\n } else if (getLangOpts().CPlusPlus17) {\n // ...\n } else {\n // ...\n if (!rBraceToken.is(tok::r_brace)) {\n // ...\n } else {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,514: | Line 7,513: | ||
}, | }, | ||
["ext_nested_pointer_qualifier_mismatch"]={ | ["ext_nested_pointer_qualifier_mismatch"]={ | ||
[ | [a]="... discards qualifiers in nested pointer types [-Wincompatible-pointer-types-discards-qualifiers]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Vc,"incompatible-pointer-types-discards-qualifiers"}, | ||
[ | [l]="incompatible-pointer-types-discards-qualifiers", | ||
[ | [e]="%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", | ||
[ | [f]=p, | ||
[ | [h]="(?:(?: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", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-pointer\\-types\\-discards\\-qualifiers[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"b98dade25bc9",1257804997,"Changed error for nested type qualifier mismatch to","Changed error for nested type qualifier mismatch to"}, | [i]={"b98dade25bc9",1257804997,"Changed error for nested type qualifier mismatch to","Changed error for nested type qualifier mismatch to"}, | ||
[j]={{ | [j]={{Fb,2678,"void CastOperation::checkAddressSpaceCast(QualType SrcType, QualType DestType) {\n // ...\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 // ...\n while (isa<PointerType>(DestPtr) && isa<PointerType>(SrcPtr)) {\n // ...\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 // ...\n case IncompatibleNestedPointerQualifiers:\n if (getLangOpts().CPlusPlus) {\n // ...\n } else {\n DiagKind = diag::ext_nested_pointer_qualifier_mismatch;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,531: | Line 7,530: | ||
}, | }, | ||
["ext_new_paren_array_nonconst"]={ | ["ext_new_paren_array_nonconst"]={ | ||
[a]="when type is in parentheses, array cannot have dynamic size", | [a]="when type is in parentheses, array cannot have dynamic size", | ||
[h]=Pb, | [c]=o, | ||
[ | [d]=q, | ||
[e]="when type is in parentheses, array cannot have dynamic size", | |||
[f]=p, | |||
[h]="when type is in parentheses, array cannot have dynamic size", | |||
[b]=Pb, | |||
[g]=n, | |||
[i]={"f2753b3b4efb",1279036472,"Downgrade the \"when type is in parentheses, array cannot have dynamic","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","Downgrade the \"when type is in parentheses, array cannot have dynamic"}, | ||
[j]={{ | [j]={{ab,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 // ...\n if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n // ...\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 // ...\n } else if (TypeIdParens.isValid()) {\n // ...\n Diag((*ArraySize)->getBeginLoc(), diag::ext_new_paren_array_nonconst) << (*ArraySize)->getSourceRange() << FixItHint::CreateRemoval(TypeIdParens.getBegin()) << FixItHint::CreateRemoval(TypeIdParens.getEnd());"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 7,546: | Line 7,545: | ||
}, | }, | ||
["ext_no_declarators"]={ | ["ext_no_declarators"]={ | ||
[ | [a]="declaration does not declare anything [-Wmissing-declarations]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Mc}, | ||
[ | [l]=Mc, | ||
[ | [e]="declaration does not declare anything", | ||
[ | [f]=p, | ||
[ | [h]="declaration does not declare anything", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmissing\\-declarations[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"f19ac0ede900",1270762403,"Downgrade the \"declaration does not declare anything\" error to a","Downgrade the \"declaration does not declare anything\" error to a"}, | [i]={"f19ac0ede900",1270762403,"Downgrade the \"declaration does not declare anything\" error to a","Downgrade the \"declaration does not declare anything\" error to a"}, | ||
[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();"}}, | [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 // ...\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 // ...\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 // ...\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]={ | [k]={ | ||
[ | [ic]={"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"]={ | ||
[ | [a]="... without named members is a GNU extension [-Wgnu-empty-struct]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,mc,v}, | ||
[ | [l]=mc, | ||
[ | [e]="%select{struct|union}0 without named members is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="(?:struct|union) without named members is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-empty\\-struct[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"89578fd43981",1370698198,"Recognition of empty structures and unions is moved to semantic stage","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","Recognition of empty structures and unions is moved to semantic stage"}, | ||
[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();"}}, | [j]={{x,19136,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // ...\n // Okay, we successfully defined \'Record\'.\n if (Record) {\n // ...\n if (CheckForZeroSize) {\n // ...\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]={ | [k]={ | ||
[ | [ic]={"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"]={ | ||
[ | [a]="no newline at end of file [-Wnewline-eof]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"newline-eof",v}, | ||
[ | [l]="newline-eof", | ||
[ | [e]="no newline at end of file", | ||
[ | [f]=p, | ||
[ | [h]="no newline at end of file", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnewline\\-eof[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{db,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;"}} | [j]={{db,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 // ...\n // C99 5.1.1.2p2: If the file is non-empty and didn\'t end in a newline, issue\n // a pedwarn.\n if (CurPtr != BufferStart && (CurPtr[-1] != \'\\n\' && CurPtr[-1] != \'\\r\')) {\n // ...\n if (LangOpts.CPlusPlus11) {\n // ...\n } else {\n DiagID = diag::ext_no_newline_eof;"}} | ||
}, | }, | ||
["ext_non_c_like_anon_struct_in_typedef"]={ | ["ext_non_c_like_anon_struct_in_typedef"]={ | ||
[ | [a]="anonymous non-C-compatible type given name for linkage purposes by ... declaration; add a tag name here [-Wnon-c-typedef-for-linkage]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"non-c-typedef-for-linkage"}, | ||
[ | [l]="non-c-typedef-for-linkage", | ||
[ | [e]="anonymous non-C-compatible type given name for linkage purposes by %select{typedef|alias}0 declaration; add a tag name here", | ||
[ | [f]=p, | ||
[ | [h]="anonymous non\\-C\\-compatible type given name for linkage purposes by (?:typedef|alias) declaration; add a tag name here", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnon\\-c\\-typedef\\-for\\-linkage[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={Yc,1576809732,Eb,Eb}, | ||
[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;"}}, | [j]={{x,5011,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n // ...\n if (NonCLike || ChangesLinkage) {\n // ...\n unsigned DiagID = diag::ext_non_c_like_anon_struct_in_typedef;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,613: | Line 7,612: | ||
}, | }, | ||
["ext_nonclass_type_friend"]={ | ["ext_nonclass_type_friend"]={ | ||
[ | [a]="non-class friend type A is a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="non-class friend type %0 is a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="non\\-class friend type (.*?) is a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=n, | ||
[i]={"3b4abb679211",1270663032, | [i]={"3b4abb679211",1270663032,Jc,Jc}, | ||
[j]={{B,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;"}}, | [j]={{B,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 // ...\n // C++03 [class.friend]p2:\n // An elaborated-type-specifier shall be used in a friend declaration\n // for a class.*\n //\n // * The class-key of the elaborated-type-specifier is required.\n if (!CodeSynthesisContexts.empty()) {\n // ...\n } else {\n if (!T->isElaboratedTypeSpecifier()) {\n // If we evaluated the type to a record type, suggest putting\n // a tag in front.\n if (const RecordType *RT = T->getAs<RecordType>()) {\n // ...\n } else {\n Diag(FriendLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nonclass_type_friend : diag::ext_nonclass_type_friend) << T << TypeRange;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,630: | Line 7,629: | ||
}, | }, | ||
["ext_nonstandard_escape"]={ | ["ext_nonstandard_escape"]={ | ||
[ | [a]="use of non-standard escape character \'\\A\' [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="use of non-standard escape character \'\\%0\'", | ||
[ | [f]=p, | ||
[ | [h]="use of non\\-standard escape character \'\\\\(.*?)\'", | ||
[ | [b]=Y, | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{gb,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\";"},{gb,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\";"},{gb,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);"}}, | [j]={{gb,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 // ...\n case \'e\':\n if (Diags)\n Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::ext_nonstandard_escape) << \"e\";"},{gb,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 // ...\n case \'E\':\n if (Diags)\n Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::ext_nonstandard_escape) << \"E\";"},{gb,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 // ...\n case \'(\':\n case \'{\':\n case \'[\':\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]={ | [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]"} | ["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]"} | ||
Line 7,648: | Line 7,647: | ||
}, | }, | ||
["ext_nonstatic_member_init"]={ | ["ext_nonstatic_member_init"]={ | ||
[ | [a]="default member initializer for non-static data member is a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="default member initializer for non-static data member is a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="default member initializer for non\\-static data member is a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=y, | ||
[i]={"bffe88027cc2",1318650917,"Rename an ExtWarn to ext_ for consistency.","Rename an ExtWarn to ext_ for consistency."}, | [i]={"bffe88027cc2",1318650917,"Rename an ExtWarn to ext_ for consistency.","Rename an ExtWarn to ext_ for consistency."}, | ||
[j]={{O,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);"}}, | [j]={{O,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 // ...\n while (true) {\n // ...\n // Handle the initializer.\n if (HasInClassInit != ICIS_NoInit) {\n // ...\n Diag(Tok, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nonstatic_member_init : diag::ext_nonstatic_member_init);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,665: | Line 7,664: | ||
}, | }, | ||
["ext_noreturn_main"]={ | ["ext_noreturn_main"]={ | ||
[ | [a]="\'main\' is not allowed to be declared _Noreturn [-Wmain]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Qc}, | ||
[ | [l]=Qc, | ||
[ | [e]="\'main\' is not allowed to be declared _Noreturn", | ||
[ | [f]=p, | ||
[ | [h]="\'main\' is not allowed to be declared _Noreturn", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"0015f0987792",1358460971,"Parsing support for C11\'s _Noreturn keyword. No semantics yet.","Parsing support for C11\'s _Noreturn keyword. No semantics yet."}, | [i]={"0015f0987792",1358460971,"Parsing support for C11\'s _Noreturn keyword. No semantics yet.","Parsing support for C11\'s _Noreturn keyword. No semantics yet."}, | ||
[j]={{x,12085,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n if (DS.isNoreturnSpecified()) {\n Diag(NoreturnLoc, diag::ext_noreturn_main);"}}, | [j]={{x,12085,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n // ...\n if (DS.isNoreturnSpecified()) {\n // ...\n Diag(NoreturnLoc, diag::ext_noreturn_main);"}}, | ||
[k]={ | [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]"} | ["clang/test/Sema/warn-main.c"]={"clang/test/Sema/warn-main.c:27:1: warning: \'main\' is not allowed to be declared _Noreturn [-Wmain]"} | ||
Line 7,682: | Line 7,681: | ||
}, | }, | ||
["ext_ns_enum_attribute"]={ | ["ext_ns_enum_attribute"]={ | ||
[ | [a]="attributes on ... declaration are a C++17 extension [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={Q,kb,v}, | ||
[ | [l]=Q, | ||
[ | [e]="attributes on %select{a namespace|an enumerator}0 declaration are a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="attributes on (?:a namespace|an enumerator) declaration are a C\\+\\+17 extension", | ||
[ | [b]=lb, | ||
[ | [g]=y, | ||
[i]={"40e202f7d996",1507942584,"Fix backwards warning for use of C++17 attributes-on-namespaces-and-enumerators feature.","Fix backwards warning for use of C++17 attributes-on-namespaces-and-enumerators feature."}, | [i]={"40e202f7d996",1507942584,"Fix backwards warning for use of C++17 attributes-on-namespaces-and-enumerators feature.","Fix backwards warning for use of C++17 attributes-on-namespaces-and-enumerators feature."}, | ||
[j]={{K,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*/;"},{O,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*/;"}}, | [j]={{K,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 // ...\n // Parse the enumerator-list.\n while (Tok.isNot(tok::r_brace)) {\n // ...\n if (isAllowedCXX11AttributeSpecifier()) {\n if (getLangOpts().CPlusPlus)\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_ns_enum_attribute : diag::ext_ns_enum_attribute) << 1 /*enumerator*/;"},{O,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 // ...\n auto ReadAttributes = [&] {\n // ...\n do {\n // ...\n if (getLangOpts().CPlusPlus11 && isCXX11AttributeSpecifier()) {\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_ns_enum_attribute : diag::ext_ns_enum_attribute) << 0 /*namespace*/;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,700: | Line 7,699: | ||
}, | }, | ||
["ext_nullability"]={ | ["ext_nullability"]={ | ||
[ | [a]="type nullability specifier A is a Clang extension [-Wnullability-extension]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"nullability-extension",v}, | ||
[ | [l]="nullability-extension", | ||
[ | [e]="type nullability specifier %0 is a Clang extension", | ||
[ | [f]=p, | ||
[ | [h]="type nullability specifier (.*?) is a Clang extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wnullability\\-extension[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++.","Introduce type nullability specifiers for C/C++."}, | [i]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++.","Introduce type nullability specifiers for C/C++."}, | ||
[j]={{K,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;"}}, | [j]={{K,969,"void Parser::ParseNullabilityTypeSpecifiers(ParsedAttributes &attrs) {\n // Treat these like attributes, even though they\'re type specifiers.\n while (true) {\n // ...\n case tok::kw__Nonnull:\n case tok::kw__Nullable:\n case tok::kw__Nullable_result:\n case tok::kw__Null_unspecified: {\n // ...\n if (!getLangOpts().ObjC)\n Diag(AttrNameLoc, diag::ext_nullability) << AttrName;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Parser/nullability.c"]={"clang/test/Parser/nullability.c:3:1: warning: type nullability specifier \'_Nonnull\' is a Clang extension [-Wnullability-extension]"} | ["clang/test/Parser/nullability.c"]={"clang/test/Parser/nullability.c:3:1: warning: type nullability specifier \'_Nonnull\' is a Clang extension [-Wnullability-extension]"} | ||
Line 7,718: | Line 7,717: | ||
}, | }, | ||
["ext_offsetof_non_pod_type"]={ | ["ext_offsetof_non_pod_type"]={ | ||
[ | [a]="offset of on non-POD type A [-Winvalid-offsetof]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"invalid-offsetof"}, | ||
[ | [l]="invalid-offsetof", | ||
[ | [e]="offset of on non-POD type %0", | ||
[ | [f]=p, | ||
[ | [h]="offset of on non\\-POD type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Winvalid\\-offsetof[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[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;"}}, | [j]={{z,16678,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n // ...\n for (const OffsetOfComponent &OC : Components) {\n // ...\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 // ...\n unsigned DiagID = LangOpts.CPlusPlus11 ? diag::ext_offsetof_non_standardlayout_type : diag::ext_offsetof_non_pod_type;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,735: | Line 7,734: | ||
}, | }, | ||
["ext_offsetof_non_standardlayout_type"]={ | ["ext_offsetof_non_standardlayout_type"]={ | ||
[ | [a]="offset of on non-standard-layout type A [-Winvalid-offsetof]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"invalid-offsetof"}, | ||
[ | [l]="invalid-offsetof", | ||
[ | [e]="offset of on non-standard-layout type %0", | ||
[ | [f]=p, | ||
[ | [h]="offset of on non\\-standard\\-layout type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Winvalid\\-offsetof[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[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;"}}, | [j]={{z,16657,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n // ...\n for (const OffsetOfComponent &OC : Components) {\n // ...\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 // ...\n unsigned DiagID = LangOpts.CPlusPlus11 ? diag::ext_offsetof_non_standardlayout_type : diag::ext_offsetof_non_pod_type;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,752: | Line 7,751: | ||
}, | }, | ||
["ext_old_implicitly_unsigned_long_cxx"]={ | ["ext_old_implicitly_unsigned_long_cxx"]={ | ||
[ | [a]="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]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={zc,gc,hc}, | ||
[ | [l]=gc, | ||
[ | [e]="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", | ||
[ | [f]=p, | ||
[ | [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 (?:have type \'long long\'|be ill\\-formed) in C\\+\\+11 onwards", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+11\\-compat[^\\]]*\\]", | ||
[ | [g]=r, | ||
[i]={"13234ae40db3",1433800799,"Consider unsigned long for non-u/U decimal literals (C90/C++03)","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)","Consider unsigned long for non-u/U decimal literals (C90/C++03)"}, | ||
[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);"}}, | [j]={{z,4196,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n // ...\n if (Literal.isFixedPointLiteral()) {\n // ...\n } else if (Literal.isFloatingLiteral()) {\n // ...\n } else if (!Literal.isIntegerLiteral()) {\n // ...\n } else {\n // ...\n if (Literal.GetIntegerValue(ResultVal)) {\n // ...\n } else {\n // ...\n // Are long/unsigned long possibilities?\n if (Ty.isNull() && !Literal.isLongLong && !Literal.isSizeT) {\n // ...\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 // ...\n else if (AllowUnsigned)\n // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,769: | Line 7,768: | ||
}, | }, | ||
["ext_omp_attributes"]={ | ["ext_omp_attributes"]={ | ||
[ | [a]="specifying OpenMP directives with [[]] is an OpenMP 5.1 extension [-Wopenmp-51-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"openmp","openmp-51-extensions"}, | ||
[ | [l]="openmp-51-extensions", | ||
[ | [e]="specifying OpenMP directives with [[]] is an OpenMP 5.1 extension", | ||
[ | [f]=p, | ||
[ | [h]="specifying OpenMP directives with \\[\\[\\]\\] is an OpenMP 5\\.1 extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wopenmp\\-51\\-extensions[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={ | [i]={xb,1612659633,Z,Z}, | ||
[j]={{O,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);"}}, | [j]={{O,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 // ...\n if (ScopeName && ScopeName->isStr(\"omp\")) {\n Diag(AttrNameLoc, getLangOpts().OpenMP >= 51 ? diag::warn_omp51_compat_attributes : diag::ext_omp_attributes);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,786: | Line 7,785: | ||
}, | }, | ||
["ext_omp_loop_not_canonical_init"]={ | ["ext_omp_loop_not_canonical_init"]={ | ||
[ | [a]="initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\') [-Wopenmp-loop-form]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"openmp","openmp-loop-form"}, | ||
[ | [l]="openmp-loop-form", | ||
[ | [e]="initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\')", | ||
[ | [f]=p, | ||
[ | [h]="initialization clause of OpenMP for loop is not in canonical form \\(\'var \\= init\' or \'T var \\= init\'\\)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wopenmp\\-loop\\-form[^\\]]*\\]", | ||
[ | [g]="OpenMP Issue", | ||
[i]={"a8e9d2eccc6e",1401790607,"[OPENMP] Loop canonical form analysis (Sema)","[OPENMP] Loop canonical form analysis (Sema)"}, | [i]={"a8e9d2eccc6e",1401790607,"[OPENMP] Loop canonical form analysis (Sema)","[OPENMP] Loop canonical form analysis (Sema)"}, | ||
[j]={{ | [j]={{ed,8200,"bool OpenMPIterationSpaceChecker::checkAndSetInit(Stmt *S, bool EmitDiags) {\n // ...\n if (auto *BO = dyn_cast<BinaryOperator>(S)) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,803: | Line 7,802: | ||
}, | }, | ||
["ext_on_off_switch_syntax"]={ | ["ext_on_off_switch_syntax"]={ | ||
[ | [a]="expected \'ON\' or \'OFF\' or \'DEFAULT\' in pragma [-Wunknown-pragmas]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={mb,vb,sb,"pragmas",uc}, | ||
[ | [l]=uc, | ||
[ | [e]="expected \'ON\' or \'OFF\' or \'DEFAULT\' in pragma", | ||
[ | [f]=p, | ||
[ | [h]="expected \'ON\' or \'OFF\' or \'DEFAULT\' in pragma", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunknown\\-pragmas[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"3bffa5293303",1297647744,"Make LexOnOffSwitch a Preprocessor member function","Make LexOnOffSwitch a Preprocessor member function"}, | [i]={"3bffa5293303",1297647744,"Make LexOnOffSwitch a Preprocessor member function","Make LexOnOffSwitch a Preprocessor member function"}, | ||
[j]={{ | [j]={{qb,974,"bool Preprocessor::LexOnOffSwitch(tok::OnOffSwitch &Result) {\n // ...\n if (Tok.isNot(tok::identifier)) {\n Diag(Tok, diag::ext_on_off_switch_syntax);"},{qb,985,"bool Preprocessor::LexOnOffSwitch(tok::OnOffSwitch &Result) {\n // ...\n if (II->isStr(\"ON\"))\n // ...\n else if (II->isStr(\"OFF\"))\n // ...\n else if (II->isStr(\"DEFAULT\"))\n // ...\n else {\n Diag(Tok, diag::ext_on_off_switch_syntax);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,820: | Line 7,819: | ||
}, | }, | ||
["ext_opencl_double_without_pragma"]={ | ["ext_opencl_double_without_pragma"]={ | ||
[ | [a]="Clang permits use of type \'double\' regardless pragma if \'cl_khr_fp64\' is supported [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="Clang permits use of type \'double\' regardless pragma if \'cl_khr_fp64\' is supported", | ||
[ | [f]=p, | ||
[ | [h]="Clang permits use of type \'double\' regardless pragma if \'cl_khr_fp64\' is supported", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={ | [i]={Nc,1615397021,zb,zb}, | ||
[j]={{U,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);"}}, | [j]={{U,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 // ...\n case DeclSpec::TST_double:\n // ...\n if (S.getLangOpts().OpenCL) {\n if (!S.getOpenCLOptions().isSupported(\"cl_khr_fp64\", S.getLangOpts()))\n // ...\n else if (!S.getOpenCLOptions().isAvailableOption(\"cl_khr_fp64\", S.getLangOpts()))\n S.Diag(DS.getTypeSpecTypeLoc(), diag::ext_opencl_double_without_pragma);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,838: | Line 7,837: | ||
}, | }, | ||
["ext_opencl_ext_vector_type_rgba_selector"]={ | ["ext_opencl_ext_vector_type_rgba_selector"]={ | ||
[ | [a]="vector component name \'A\' is a feature from OpenCL version 3.0 onwards [-Wopencl-unsupported-rgba]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"opencl-unsupported-rgba"}, | ||
[ | [l]="opencl-unsupported-rgba", | ||
[ | [e]="vector component name \'%0\' is a feature from OpenCL version 3.0 onwards", | ||
[ | [f]=p, | ||
[ | [h]="vector component name \'(.*?)\' is a feature from OpenCL version 3\\.0 onwards", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wopencl\\-unsupported\\-rgba[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"98eaa62e369d",1469213383,"Add .rgba syntax extension to ext_vector_type types","Add .rgba syntax extension to ext_vector_type types"}, | [i]={"98eaa62e369d",1469213383,"Add .rgba syntax extension to ext_vector_type types","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 // ...\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 // ...\n } else if (!HexSwizzle && (Idx = vecType->getPointAccessorIdx(*compStr)) != -1) {\n // ...\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 // ...\n S.Diag(OpLoc, diag::ext_opencl_ext_vector_type_rgba_selector) << StringRef(DiagBegin, 1) << SourceRange(CompLoc);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,855: | Line 7,854: | ||
}, | }, | ||
["ext_operator_new_delete_declared_inline"]={ | ["ext_operator_new_delete_declared_inline"]={ | ||
[ | [a]="replacement function A cannot be declared \'inline\' [-Winline-new-delete]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"inline-new-delete"}, | ||
[ | [l]="inline-new-delete", | ||
[ | [e]="replacement function %0 cannot be declared \'inline\'", | ||
[ | [f]=p, | ||
[ | [h]="replacement function (.*?) cannot be declared \'inline\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Winline\\-new\\-delete[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"13dfdc88a9a2",1384562858,"Downgrade the Error on an \'inline\' operator new or delete to an ExtWarn. Some","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","Downgrade the Error on an \'inline\' operator new or delete to an ExtWarn. Some"}, | ||
[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();"}}, | [j]={{x,10344,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (!getLangOpts().CPlusPlus) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,872: | Line 7,871: | ||
}, | }, | ||
["ext_operator_overload_static"]={ | ["ext_operator_overload_static"]={ | ||
[ | [a]="declaring overloaded A as \'static\' is a C++23 extension [-Wc++23-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={ib,Nb}, | ||
[ | [l]=ib, | ||
[ | [e]="declaring overloaded %0 as \'static\' is a C++23 extension", | ||
[ | [f]=p, | ||
[ | [h]="declaring overloaded (.*?) as \'static\' is a C\\+\\+23 extension", | ||
[ | [b]=Lb, | ||
[ | [g]=n, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{B,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;"}}, | [j]={{B,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,889: | Line 7,888: | ||
}, | }, | ||
["ext_out_of_line_declaration"]={ | ["ext_out_of_line_declaration"]={ | ||
[ | [a]="out-of-line declaration of a member must be a definition [-Wout-of-line-declaration]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"out-of-line-declaration"}, | ||
[ | [l]="out-of-line-declaration", | ||
[ | [e]="out-of-line declaration of a member must be a definition", | ||
[ | [f]=S, | ||
[ | [h]="out\\-of\\-line declaration of a member must be a definition", | ||
[ | [b]=" \\[[^\\]]*\\-Wout\\-of\\-line\\-declaration[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"9339605c3545",1279254748,"Butcher a perfectly reasonable diagnostic to pacify old versions of SWIG.","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.","Butcher a perfectly reasonable diagnostic to pacify old versions of SWIG."}, | ||
[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();"}}, | [j]={{x,10576,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (!getLangOpts().CPlusPlus) {\n // ...\n } else {\n // ...\n if (NewFD->isInvalidDecl()) {\n // ...\n } else if (!D.isRedeclaration()) {\n // ...\n } else if (!D.isFunctionDefinition() && isa<CXXMethodDecl>(NewFD) && NewFD->isOutOfLine() && !isFriend && !isFunctionTemplateSpecialization && !isMemberSpecialization) {\n // ...\n Diag(NewFD->getLocation(), diag::ext_out_of_line_declaration) << D.getCXXScopeSpec().getRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,906: | Line 7,905: | ||
}, | }, | ||
["ext_out_of_line_qualified_id_type_names_constructor"]={ | ["ext_out_of_line_qualified_id_type_names_constructor"]={ | ||
[ | [a]="ISO C++ specifies that qualified reference to A is a constructor name rather than a ... in this context, despite preceding ... keyword [-Winjected-class-name]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"injected-class-name"}, | ||
[ | [l]="injected-class-name", | ||
[ | [e]="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", | ||
[ | [f]=p, | ||
[ | [h]="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", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Winjected\\-class\\-name[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"74f02347ca16",1484859613,"PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310).","PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310)."}, | [i]={"74f02347ca16",1484859613,"PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310).","PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310)."}, | ||
[j]={{I,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*/"},{I,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*/"},{I,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*/"},{I,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*/;"}}, | [j]={{I,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 // ...\n if (!IsCtorOrDtorName && !IsClassName && SS.isSet()) {\n // ...\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*/"},{I,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 // ...\n if (TNK != TNK_Non_template) {\n // ...\n if (!AllowInjectedClassName && SS.isNotEmpty() && LookupRD && Name.getKind() == UnqualifiedIdKind::IK_Identifier && Name.Identifier && LookupRD->getIdentifier() == Name.Identifier) {\n // ...\n Diag(Name.getBeginLoc(), diag::ext_out_of_line_qualified_id_type_names_constructor) << Name.Identifier << 0 /*injected-class-name used as template name*/"},{I,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 // ...\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 // ...\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*/"},{I,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 // ...\n case LookupResult::Found:\n if (TypeDecl *Type = dyn_cast<TypeDecl>(Result.getFoundDecl())) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,923: | Line 7,922: | ||
}, | }, | ||
["ext_override_control_keyword"]={ | ["ext_override_control_keyword"]={ | ||
[ | [a]="\'A\' keyword is a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="\'%0\' keyword is a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="\'(.*?)\' keyword is a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=y, | ||
[i]={"5a72fdb05b64",1295737309,"Accept the C++0x override control keywords as an extension in C++98. This is OK since the new syntax...","Accept the C++0x override control keywords as an extension in C++98. This is OK since the new syntax is unambiguous and can\'t be confused with C++98 syntax. If anyone disagrees, please shout!"}, | [i]={"5a72fdb05b64",1295737309,"Accept the C++0x override control keywords as an extension in C++98. This is OK since the new syntax...","Accept the C++0x override control keywords as an extension in C++98. This is OK since the new syntax is unambiguous and can\'t be confused with C++98 syntax. If anyone disagrees, please shout!"}, | ||
[j]={{O,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);"},{O,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);"}}, | [j]={{O,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 // ...\n if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n // ...\n } else if (Specifier == VirtSpecifiers::VS_Sealed) {\n // ...\n } else if (Specifier == VirtSpecifiers::VS_Abstract) {\n // ...\n } else if (Specifier == VirtSpecifiers::VS_GNU_Final) {\n // ...\n } else {\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_override_control_keyword : diag::ext_override_control_keyword) << VirtSpecifiers::getSpecifierName(Specifier);"},{O,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 // ...\n // Parse the optional \'final\' keyword.\n if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n while (true) {\n // ...\n if (TagType == DeclSpec::TST_interface)\n // ...\n else if (Specifier == VirtSpecifiers::VS_Final)\n Diag(FinalLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_override_control_keyword : diag::ext_override_control_keyword) << VirtSpecifiers::getSpecifierName(Specifier);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 7,940: | Line 7,939: | ||
}, | }, | ||
["ext_override_exception_spec"]={ | ["ext_override_exception_spec"]={ | ||
[ | [a]="exception specification of overriding function is more lax than base version [-Wmicrosoft-exception-spec]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,Kb}, | ||
[ | [l]=Kb, | ||
[ | [e]="exception specification of overriding function is more lax than base version", | ||
[ | [f]=p, | ||
[ | [h]="exception specification of overriding function is more lax than base version", | ||
[ | [b]=Xc, | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[j]={{ | [j]={{Ib,992,"bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n // ...\n if (getLangOpts().MSVCCompat)\n DiagID = diag::ext_override_exception_spec;"},{Ib,996,"bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,957: | Line 7,956: | ||
}, | }, | ||
["ext_ovl_ambiguous_oper_binary_reversed"]={ | ["ext_ovl_ambiguous_oper_binary_reversed"]={ | ||
[ | [a]="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]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"ambiguous-reversed-operator"}, | ||
[ | [l]="ambiguous-reversed-operator", | ||
[ | [e]="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", | ||
[ | [f]=p, | ||
[ | [h]="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|)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wambiguous\\-reversed\\-operator[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ec,1567434909,ub,ub}, | ||
[j]={{Qb,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();"}}, | [j]={{Qb,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 // ...\n case OR_Success: {\n // ...\n if (FnDecl) {\n // ...\n if (AllowRewrittenCandidates && !IsReversed && CandidateSet.getRewriteInfo().isReversible()) {\n // ...\n if (!AmbiguousWith.empty()) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,974: | Line 7,973: | ||
}, | }, | ||
["ext_ovl_rewrite_equalequal_not_bool"]={ | ["ext_ovl_rewrite_equalequal_not_bool"]={ | ||
[ | [a]="ISO C++20 requires return type of selected \'operator==\' function for rewritten \'A\' comparison to be \'bool\', not B [-Wrewrite-not-bool]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"rewrite-not-bool"}, | ||
[ | [l]="rewrite-not-bool", | ||
[ | [e]="ISO C++20 requires return type of selected \'operator==\' function for rewritten \'%1\' comparison to be \'bool\', not %0", | ||
[ | [f]=p, | ||
[ | [h]="ISO C\\+\\+20 requires return type of selected \'operator\\=\\=\' function for rewritten \'(.*?)\' comparison to be \'bool\', not (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wrewrite\\-not\\-bool[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={dd,1576908663,Mb,Mb}, | ||
[j]={{Qb,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();"}}, | [j]={{Qb,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 // ...\n case OR_Success: {\n // ...\n if (FnDecl) {\n // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 7,991: | Line 7,990: | ||
}, | }, | ||
["ext_param_default_argument_redefinition"]={ | ["ext_param_default_argument_redefinition"]={ | ||
[ | [a]="redefinition of default argument [-Wmicrosoft-default-arg-redefinition]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-default-arg-redefinition"}, | ||
[ | [l]="microsoft-default-arg-redefinition", | ||
[ | [e]="redefinition of default argument", | ||
[ | [f]=p, | ||
[ | [h]="redefinition of default argument", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-default\\-arg\\-redefinition[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[j]={{B,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;"}}, | [j]={{B,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 // ...\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 // ...\n if (OldParamHasDfl && NewParamHasDfl) {\n // ...\n if (getLangOpts().MicrosoftExt) {\n // ...\n if (MD && MD->getParent()->getDescribedClassTemplate()) {\n // ...\n DiagDefaultParamID = diag::ext_param_default_argument_redefinition;"}}, | ||
[k]={ | [k]={ | ||
[ | [ad]={"clang/test/SemaCXX/MicrosoftExtensions.cpp:202:19: warning: redefinition of default argument [-Wmicrosoft-default-arg-redefinition]"} | ||
} | } | ||
}, | }, | ||
["ext_param_not_declared"]={ | ["ext_param_not_declared"]={ | ||
[ | [a]="parameter A was not declared, defaults to \'int\'; ISO C99 and later do not support implicit int [-Wimplicit-int]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={mb,vb,hd,"implicit-int",sb}, | ||
[ | [l]="implicit-int", | ||
[ | [e]="parameter %0 was not declared, defaults to \'int\'; ISO C99 and later do not support implicit int", | ||
[ | [f]=S, | ||
[ | [h]="parameter (.*?) was not declared, defaults to \'int\'; ISO C99 and later do not support implicit int", | ||
[ | [b]=" \\[[^\\]]*\\-Wimplicit\\-int[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[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);"}}, | [j]={{x,14993,"void Sema::ActOnFinishKNRParamDeclarations(Scope *S, Declarator &D, SourceLocation LocAfterDecls) {\n // ...\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 // ...\n if (FTI.Params[i].Param == nullptr) {\n if (getLangOpts().C99) {\n // ...\n Diag(FTI.Params[i].IdentLoc, diag::ext_param_not_declared) << FTI.Params[i].Ident << FixItHint::CreateInsertion(LocAfterDecls, Code);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,025: | Line 8,024: | ||
}, | }, | ||
["ext_param_promoted_not_compatible_with_prototype"]={ | ["ext_param_promoted_not_compatible_with_prototype"]={ | ||
[ | [a]="promoted type A of K&R function parameter is not compatible with the parameter type B declared in a previous prototype [-Wknr-promoted-parameter]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"knr-promoted-parameter"}, | ||
[ | [l]="knr-promoted-parameter", | ||
[ | [e]="%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", | ||
[ | [f]=p, | ||
[ | [h]="(?: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", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wknr\\-promoted\\-parameter[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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();"}}, | [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 // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,042: | Line 8,041: | ||
}, | }, | ||
["ext_parameter_name_omitted_c2x"]={ | ["ext_parameter_name_omitted_c2x"]={ | ||
[ | [a]="omitting the parameter name in a function definition is a C2x extension [-Wc2x-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={tb}, | ||
[ | [l]=tb, | ||
[ | [e]="omitting the parameter name in a function definition is a C2x extension", | ||
[ | [f]=p, | ||
[ | [h]="omitting the parameter name in a function definition is a C2x extension", | ||
[ | [b]=dc, | ||
[ | [g]=n, | ||
[i]={ | [i]={dd,1576908663,Mb,Mb}, | ||
[j]={{ | [j]={{eb,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 // ...\n for (ParmVarDecl *Param : Parameters) {\n // ...\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 // ...\n if (ExplicitSignature) {\n for (unsigned I = 0, E = ExplicitSignature.getNumParams(); I != E; ++I) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,059: | Line 8,058: | ||
}, | }, | ||
["ext_partial_spec_not_more_specialized_than_primary"]={ | ["ext_partial_spec_not_more_specialized_than_primary"]={ | ||
[ | [a]="... template partial specialization is not more specialized than the primary template [-Winvalid-partial-specialization]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"invalid-partial-specialization"}, | ||
[ | [l]="invalid-partial-specialization", | ||
[ | [e]="%select{class|variable}0 template partial specialization is not more specialized than the primary template", | ||
[ | [f]=S, | ||
[ | [h]="(?:class|variable) template partial specialization is not more specialized than the primary template", | ||
[ | [b]=" \\[[^\\]]*\\-Winvalid\\-partial\\-specialization[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"fa4a09d8afbf",1482868989,"Add warning flag for \"partial specialization is not more specialized than primary template\" error (s...","Add warning flag for \"partial specialization is not more specialized than primary template\" error (since Eigen hits it), and while I\'m here also add a warning flag for \"partial specialization is not usable because one or more of its parameters cannot be deduced\" warning."}, | [i]={"fa4a09d8afbf",1482868989,"Add warning flag for \"partial specialization is not more specialized than primary template\" error (s...","Add warning flag for \"partial specialization is not more specialized than primary template\" error (since Eigen hits it), and while I\'m here also add a warning flag for \"partial specialization is not usable because one or more of its parameters cannot be deduced\" warning."}, | ||
[j]={{I,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);"}}, | [j]={{I,4412,"template <typename PartialSpecDecl> static void checkMoreSpecializedThanPrimary(Sema &S, PartialSpecDecl *Partial) {\n // ...\n S.Diag(Partial->getLocation(), diag::ext_partial_spec_not_more_specialized_than_primary) << isa<VarTemplateDecl>(Template);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,076: | Line 8,075: | ||
}, | }, | ||
["ext_partial_specs_not_deducible"]={ | ["ext_partial_specs_not_deducible"]={ | ||
[ | [a]="... template partial specialization contains ... that cannot be deduced; this partial specialization will never be used [-Wunusable-partial-specialization]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"unusable-partial-specialization"}, | ||
[ | [l]="unusable-partial-specialization", | ||
[ | [e]="%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", | ||
[ | [f]=S, | ||
[ | [h]="(?:class|variable) template partial specialization contains (?:a template parameter|template parameters) that cannot be deduced; this partial specialization will never be used", | ||
[ | [b]=" \\[[^\\]]*\\-Wunusable\\-partial\\-specialization[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"57aae07b4a31",1482892645,"DR1315: a non-type template argument in a partial specialization is permitted","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","DR1315: a non-type template argument in a partial specialization is permitted"}, | ||
[j]={{I,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);"}}, | [j]={{I,4473,"template <typename PartialSpecDecl> static void checkTemplatePartialSpecialization(Sema &S, PartialSpecDecl *Partial) {\n // ...\n if (!DeducibleParams.all()) {\n // ...\n S.Diag(Partial->getLocation(), diag::ext_partial_specs_not_deducible) << isa<VarTemplatePartialSpecializationDecl>(Partial) << (NumNonDeducible > 1) << SourceRange(Partial->getLocation(), Partial->getTemplateArgsAsWritten()->RAngleLoc);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,093: | Line 8,092: | ||
}, | }, | ||
["ext_paste_comma"]={ | ["ext_paste_comma"]={ | ||
[ | [a]="token pasting of \',\' and __VA_ARGS__ is a GNU extension [-Wgnu-zero-variadic-macro-arguments]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-zero-variadic-macro-arguments",v}, | ||
[ | [l]="gnu-zero-variadic-macro-arguments", | ||
[ | [e]="token pasting of \',\' and __VA_ARGS__ is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="token pasting of \',\' and __VA_ARGS__ is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-zero\\-variadic\\-macro\\-arguments[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[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);"}}, | [j]={{"clang/lib/Lex/TokenLexer.cpp",168,"bool TokenLexer::MaybeRemoveCommaBeforeVaArgs(SmallVectorImpl<Token> &ResultToks, bool HasPasteOperator, MacroInfo *Macro, unsigned MacroArgNo, Preprocessor &PP) {\n // ...\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 // ...\n for (unsigned I = 0, E = NumTokens; I != E; ++I) {\n // ...\n if (NumToks) { // Not an empty argument?\n // ...\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 // ...\n PP.Diag(ResultToks.pop_back_val().getLocation(), diag::ext_paste_comma);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,111: | Line 8,110: | ||
}, | }, | ||
["ext_plain_complex"]={ | ["ext_plain_complex"]={ | ||
[a]="plain \'_Complex\' requires a type specifier; assuming \'_Complex double\'", | [a]="plain \'_Complex\' requires a type specifier; assuming \'_Complex double\'", | ||
[h]=Pb, | [c]=o, | ||
[ | [d]=q, | ||
[i]={ | [e]="plain \'_Complex\' requires a type specifier; assuming \'_Complex double\'", | ||
[j]={{ | [f]=p, | ||
[h]="plain \'_Complex\' requires a type specifier; assuming \'_Complex double\'", | |||
[b]=Pb, | |||
[g]=n, | |||
[i]={F,1236199783,E,G}, | |||
[j]={{Gc,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 // ...\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\");"}}, | |||
[k]={ | [k]={ | ||
["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]"} | ["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]"} | ||
Line 8,126: | Line 8,125: | ||
}, | }, | ||
["ext_pointer_to_const_ref_member_on_rvalue"]={ | ["ext_pointer_to_const_ref_member_on_rvalue"]={ | ||
[ | [a]="invoking a pointer to a \'const &\' member function on an rvalue is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={M,fb,v}, | ||
[ | [l]=M, | ||
[ | [e]="invoking a pointer to a \'const &\' member function on an rvalue is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="invoking a pointer to a \'const &\' member function on an rvalue is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=n, | ||
[i]={"2592327dae05",1503625675,"[c++2a] P0704R1: Allow pointers to const& member functions to be called on rvalues.","[c++2a] P0704R1: Allow pointers to const& member functions to be called on rvalues."}, | [i]={"2592327dae05",1503625675,"[c++2a] P0704R1: Allow pointers to const& member functions to be called on rvalues.","[c++2a] P0704R1: Allow pointers to const& member functions to be called on rvalues."}, | ||
[j]={{ | [j]={{ab,6092,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n // ...\n // C++0x [expr.mptr.oper]p6:\n // In a .* expression whose object expression is an rvalue, the program is\n // ill-formed if the second operand is a pointer to member function with\n // ref-qualifier &. In a ->* expression or in a .* expression whose object\n // expression is an lvalue, the program is ill-formed if the second operand\n // is a pointer to member function with ref-qualifier &&.\n if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) {\n // ...\n case RQ_LValue:\n if (!isIndirect && !LHS.get()->Classify(Context).isLValue()) {\n // C++2a allows functions with ref-qualifier & if their cv-qualifier-seq\n // is (exactly) \'const\'.\n if (Proto->isConst() && !Proto->isVolatile())\n Diag(Loc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue : diag::ext_pointer_to_const_ref_member_on_rvalue);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,144: | Line 8,143: | ||
}, | }, | ||
["ext_pp_bad_paste_ms"]={ | ["ext_pp_bad_paste_ms"]={ | ||
[ | [a]="pasting formed \'A\', an invalid preprocessing token [-Winvalid-token-paste]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"invalid-token-paste"}, | ||
[ | [l]="invalid-token-paste", | ||
[ | [e]="pasting formed \'%0\', an invalid preprocessing token", | ||
[ | [f]=S, | ||
[ | [h]="pasting formed \'(.*?)\', an invalid preprocessing token", | ||
[ | [b]=" \\[[^\\]]*\\-Winvalid\\-token\\-paste[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"7b1573451eac",1392684350,"Fix a non-error diagnostic that had an err_ name. Also move it from Warning to","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","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 // ...\n do {\n // ...\n if (LHSTok.isAnyIdentifier() && RHS.isAnyIdentifier()) {\n // ...\n } else {\n // ...\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 // ...\n // Do not emit the error when preprocessing assembler code.\n if (!PP.getLangOpts().AsmPreprocessor) {\n // ...\n PP.Diag(Loc, PP.getLangOpts().MicrosoftExt ? diag::ext_pp_bad_paste_ms : diag::err_pp_bad_paste) << Buffer;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,161: | Line 8,160: | ||
}, | }, | ||
["ext_pp_bad_vaargs_use"]={ | ["ext_pp_bad_vaargs_use"]={ | ||
[ | [a]="__VA_ARGS__ can only appear in the expansion of a C99 variadic macro [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="__VA_ARGS__ can only appear in the expansion of a C99 variadic macro", | ||
[ | [f]=p, | ||
[ | [h]="__VA_ARGS__ can only appear in the expansion of a C99 variadic macro", | ||
[ | [b]=Y, | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[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);"}}, | [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 // ...\n SetPoisonReason(Ident__VA_ARGS__, diag::ext_pp_bad_vaargs_use);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,179: | Line 8,178: | ||
}, | }, | ||
["ext_pp_bad_vaopt_use"]={ | ["ext_pp_bad_vaopt_use"]={ | ||
[ | [a]="__VA_OPT__ can only appear in the expansion of a variadic macro [-Wvariadic-macros]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Ec}, | ||
[ | [l]=Ec, | ||
[ | [e]="__VA_OPT__ can only appear in the expansion of a variadic macro", | ||
[ | [f]=p, | ||
[ | [h]="__VA_OPT__ can only appear in the expansion of a variadic macro", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wvariadic\\-macros[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"1826842865f1",1508030786, | [i]={"1826842865f1",1508030786,sc,sc}, | ||
[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 // ...\n SetPoisonReason(Ident__VA_OPT__, diag::ext_pp_bad_vaopt_use);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,196: | Line 8,195: | ||
}, | }, | ||
["ext_pp_comma_expr"]={ | ["ext_pp_comma_expr"]={ | ||
[ | [a]="comma operator in operand of #if [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="comma operator in operand of #if", | ||
[ | [f]=p, | ||
[ | [h]="comma operator in operand of \\#if", | ||
[ | [b]=Y, | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{Oc,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 // ...\n while (true) {\n // ...\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();"}} | ||
}, | }, | ||
["ext_pp_extra_tokens_at_eol"]={ | ["ext_pp_extra_tokens_at_eol"]={ | ||
[ | [a]="extra tokens at end of #A directive [-Wextra-tokens]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"endif-labels","extra-tokens"}, | ||
[ | [l]="extra-tokens", | ||
[ | [e]="extra tokens at end of #%0 directive", | ||
[ | [f]=p, | ||
[ | [h]="extra tokens at end of \\#(.*?) directive", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wextra\\-tokens[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[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\";"},{ | [j]={{"clang/examples/AnnotateFunctions/AnnotateFunctions.cpp",69,"class PragmaAnnotateHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &PragmaTok) override {\n // ...\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"},{bb,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 // ...\n Diag(Tmp, diag::ext_pp_extra_tokens_at_eol) << DirType << Hint;"},{qb,818,"void Preprocessor::HandlePragmaModuleBuild(Token &Tok) {\n // ...\n if (Tok.isNot(tok::eod)) {\n Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"},{qb,898,"void Preprocessor::HandlePragmaHdrstop(Token &Tok) {\n // ...\n if (Tok.isNot(tok::eod))\n Diag(Tok.getLocation(), diag::ext_pp_extra_tokens_at_eol) << \"pragma hdrstop\";"},{qb,1220,"struct PragmaDebugHandler : public PragmaHandler {\n // ...\n void HandleCaptured(Preprocessor &PP) {\n // ...\n if (Tok.isNot(tok::eod)) {\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma clang __debug captured\";"},{qb,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 // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma warning\";"},{qb,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 // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma execution_character_set\";"},{qb,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 // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"},{qb,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 // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"},{qb,1796,"/// Handle the clang \\#pragma module end extension.\nstruct PragmaModuleEndHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"},{qb,1831,"/// Handle the clang \\#pragma module load extension.\nstruct PragmaModuleLoadHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n // ...\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"},{qb,1888,"/// PragmaARCCFCodeAuditedHandler -\n/// \\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n // ...\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"},{qb,1943,"/// PragmaAssumeNonNullHandler -\n/// \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n // ...\n if (Tok.isNot(tok::eod))\n PP.Diag(Tok, diag::ext_pp_extra_tokens_at_eol) << \"pragma\";"}}, | ||
[k]={ | [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]"} | ["clang/test/Preprocessor/if_warning.c"]={"clang/test/Preprocessor/if_warning.c:28:7: warning: extra tokens at end of #else directive [-Wextra-tokens]"} | ||
Line 8,228: | Line 8,227: | ||
}, | }, | ||
["ext_pp_gnu_line_directive"]={ | ["ext_pp_gnu_line_directive"]={ | ||
[ | [a]="this style of line directive is a GNU extension [-Wgnu-line-marker]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-line-marker",v}, | ||
[ | [l]="gnu-line-marker", | ||
[ | [e]="this style of line directive is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="this style of line directive is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-line\\-marker[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[j]={{ | [j]={{bb,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 // ...\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);"},{bb,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 // ...\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 // ...\n } else if (StrTok.isNot(tok::string_literal)) {\n // ...\n } else if (StrTok.hasUDSuffix()) {\n // ...\n } else {\n // ...\n if (!SourceMgr.isWrittenInBuiltinFile(DigitTok.getLocation()) && !SourceMgr.isWrittenInCommandLineFile(DigitTok.getLocation()))\n Diag(StrTok, diag::ext_pp_gnu_line_directive);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,246: | Line 8,245: | ||
}, | }, | ||
["ext_pp_ident_directive"]={ | ["ext_pp_ident_directive"]={ | ||
[ | [a]="#ident is a language extension [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="#ident is a language extension", | ||
[ | [f]=p, | ||
[ | [h]="\\#ident is a language extension", | ||
[ | [b]=Y, | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{bb,1665,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\n // ...\n Diag(Tok, diag::ext_pp_ident_directive);"}} | ||
}, | }, | ||
["ext_pp_import_directive"]={ | ["ext_pp_import_directive"]={ | ||
[ | [a]="#import is a language extension [-Wimport-preprocessor-directive-pedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"import-preprocessor-directive-pedantic",v}, | ||
[ | [l]="import-preprocessor-directive-pedantic", | ||
[ | [e]="#import is a language extension", | ||
[ | [f]=p, | ||
[ | [h]="\\#import is a language extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wimport\\-preprocessor\\-directive\\-pedantic[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{bb,2623,"/// HandleImportDirective - Implements \\#import.\n///\nvoid Preprocessor::HandleImportDirective(SourceLocation HashLoc, Token &ImportTok) {\n if (!LangOpts.ObjC) { // #import is standard for ObjC.\n // ...\n Diag(ImportTok, diag::ext_pp_import_directive);"}} | ||
}, | }, | ||
["ext_pp_include_next_directive"]={ | ["ext_pp_include_next_directive"]={ | ||
[ | [a]="#include_next is a language extension [-Wgnu-include-next]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-include-next",v}, | ||
[ | [l]="gnu-include-next", | ||
[ | [e]="#include_next is a language extension", | ||
[ | [f]=p, | ||
[ | [h]="\\#include_next is a language extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-include\\-next[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{bb,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"]={ | ||
[ | [a]="#include resolved using non-portable Microsoft search rules as: A [-Wmicrosoft-include]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-include","msvc-include"}, | ||
[ | [l]="microsoft-include", | ||
[ | [e]="#include resolved using non-portable Microsoft search rules as: %0", | ||
[ | [f]=p, | ||
[ | [h]="\\#include resolved using non\\-portable Microsoft search rules as\\: (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-include[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"0fafd34a6e7a",1388173576,"Implement MSVC header search algorithm in MicrosoftMode.","Implement MSVC header search algorithm in MicrosoftMode."}, | [i]={"0fafd34a6e7a",1388173576,"Implement MSVC header search algorithm in MicrosoftMode.","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 // ...\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 // ...\n for (const auto &IncluderAndDir : Includers) {\n // ...\n if (OptionalFileEntryRef FE = getFileAndSuggestModule(TmpDir, IncludeLoc, IncluderAndDir.second, IncluderIsSystemHeader, RequestingModule, SuggestedModule)) {\n // ...\n if (Diags.isIgnored(diag::ext_pp_include_search_ms, IncludeLoc)) {"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,308: | Line 8,307: | ||
}, | }, | ||
["ext_pp_line_too_big"]={ | ["ext_pp_line_too_big"]={ | ||
[ | [a]="C requires #line number to be less than A, allowed as extension [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="C requires #line number to be less than %0, allowed as extension", | ||
[ | [f]=p, | ||
[ | [h]="C requires \\#line number to be less than (.*?), allowed as extension", | ||
[ | [b]=Y, | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{bb,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 // ...\n if (LineNo >= LineLimit)\n Diag(DigitTok, diag::ext_pp_line_too_big) << LineLimit;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,326: | Line 8,325: | ||
}, | }, | ||
["ext_pp_line_zero"]={ | ["ext_pp_line_zero"]={ | ||
[ | [a]="#line directive with zero argument is a GNU extension [-Wgnu-zero-line-directive]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-zero-line-directive",v}, | ||
[ | [l]="gnu-zero-line-directive", | ||
[ | [e]="#line directive with zero argument is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="\\#line directive with zero argument is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-zero\\-line\\-directive[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"0638c15a52d3",1340745560,"preprocessing: gcc supports #line 0. So, treat this","preprocessing: gcc supports #line 0. So, treat this"}, | [i]={"0638c15a52d3",1340745560,"preprocessing: gcc supports #line 0. So, treat this","preprocessing: gcc supports #line 0. So, treat this"}, | ||
[j]={{ | [j]={{bb,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 // ...\n if (LineNo == 0)\n Diag(DigitTok, diag::ext_pp_line_zero);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,344: | Line 8,343: | ||
}, | }, | ||
["ext_pp_macro_redef"]={ | ["ext_pp_macro_redef"]={ | ||
[ | [a]="A macro redefined [-Wmacro-redefined]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"macro-redefined","pedantic-macros"}, | ||
[ | [l]="macro-redefined", | ||
[ | [e]="%0 macro redefined", | ||
[ | [f]=p, | ||
[ | [h]="(.*?) macro redefined", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmacro\\-redefined[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{bb,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 // ...\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 // ...\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 // ...\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 // ...\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]={ | [k]={ | ||
["clang/test/Preprocessor/pragma-pushpop-macro.c"]={"clang/test/Preprocessor/pragma-pushpop-macro.c:17:9: warning: \'Y\' macro redefined [-Wmacro-redefined]"} | ["clang/test/Preprocessor/pragma-pushpop-macro.c"]={"clang/test/Preprocessor/pragma-pushpop-macro.c:17:9: warning: \'Y\' macro redefined [-Wmacro-redefined]"} | ||
Line 8,361: | Line 8,360: | ||
}, | }, | ||
["ext_pp_opencl_variadic_macros"]={ | ["ext_pp_opencl_variadic_macros"]={ | ||
[ | [a]="variadic macros are a Clang extension in OpenCL [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="variadic macros are a Clang extension in OpenCL", | ||
[ | [f]=p, | ||
[ | [h]="variadic macros are a Clang extension in OpenCL", | ||
[ | [b]=Y, | ||
[ | [g]=D, | ||
[i]={"545652b96485",1553599357,"[OpenCL] Allow variadic macros as Clang feature.","[OpenCL] Allow variadic macros as Clang feature."}, | [i]={"545652b96485",1553599357,"[OpenCL] Allow variadic macros as Clang feature.","[OpenCL] Allow variadic macros as Clang feature."}, | ||
[j]={{ | [j]={{bb,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 // ...\n while (true) {\n // ...\n case tok::ellipsis: // #define X(... -> C99 varargs\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,379: | Line 8,378: | ||
}, | }, | ||
["ext_pp_operator_used_as_macro_name"]={ | ["ext_pp_operator_used_as_macro_name"]={ | ||
[ | [a]="C++ operator A (aka B) used as a macro name [-Wmicrosoft-cpp-macro]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={J,"microsoft-cpp-macro",v}, | ||
[ | [l]="microsoft-cpp-macro", | ||
[ | [e]="C++ operator %0 (aka %1) used as a macro name", | ||
[ | [f]=p, | ||
[ | [h]="C\\+\\+ operator (.*?) \\(aka (.*?)\\) used as a macro name", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-cpp\\-macro[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"e03e9e15f2a6",1401553942,"Preprocessor: make C++ operator names as macro identifiers a compatible extension","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","Preprocessor: make C++ operator names as macro identifiers a compatible extension"}, | ||
[j]={{ | [j]={{bb,335,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n // ...\n if (II->isCPlusPlusOperatorKeyword()) {\n // ...\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]={ | [k]={ | ||
[ | [qc]={"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"]={ | ||
[ | [a]="redefining builtin macro [-Wbuiltin-macro-redefined]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"builtin-macro-redefined","pedantic-macros"}, | ||
[ | [l]="builtin-macro-redefined", | ||
[ | [e]="redefining builtin macro", | ||
[ | [f]=p, | ||
[ | [h]="redefining builtin macro", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-macro\\-redefined[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"7b24254e91a0",1362530760,"After issuing a diagnostic for undefining or redefining a builtin macro,","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,","After issuing a diagnostic for undefining or redefining a builtin macro,"}, | ||
[j]={{ | [j]={{bb,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 // ...\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 // ...\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 // ...\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]={ | [k]={ | ||
["clang/test/Preprocessor/macro-reserved.c"]={"clang/test/Preprocessor/macro-reserved.c:9:9: warning: redefining builtin macro [-Wbuiltin-macro-redefined]"} | ["clang/test/Preprocessor/macro-reserved.c"]={"clang/test/Preprocessor/macro-reserved.c:9:9: warning: redefining builtin macro [-Wbuiltin-macro-redefined]"} | ||
Line 8,414: | Line 8,413: | ||
}, | }, | ||
["ext_pp_undef_builtin_macro"]={ | ["ext_pp_undef_builtin_macro"]={ | ||
[ | [a]="undefining builtin macro [-Wbuiltin-macro-redefined]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"builtin-macro-redefined","pedantic-macros"}, | ||
[ | [l]="builtin-macro-redefined", | ||
[ | [e]="undefining builtin macro", | ||
[ | [f]=p, | ||
[ | [h]="undefining builtin macro", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wbuiltin\\-macro\\-redefined[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"7b24254e91a0",1362530760,"After issuing a diagnostic for undefining or redefining a builtin macro,","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,","After issuing a diagnostic for undefining or redefining a builtin macro,"}, | ||
[j]={{ | [j]={{bb,3218,"/// HandleUndefDirective - Implements \\#undef.\n///\nvoid Preprocessor::HandleUndefDirective() {\n // ...\n // If the macro is not defined, this is a noop undef.\n if (const MacroInfo *MI = MD.getMacroInfo()) {\n // ...\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]={ | [k]={ | ||
["clang/test/Preprocessor/macro-reserved.c"]={"clang/test/Preprocessor/macro-reserved.c:18:8: warning: undefining builtin macro [-Wbuiltin-macro-redefined]"} | ["clang/test/Preprocessor/macro-reserved.c"]={"clang/test/Preprocessor/macro-reserved.c:18:8: warning: undefining builtin macro [-Wbuiltin-macro-redefined]"} | ||
Line 8,431: | Line 8,430: | ||
}, | }, | ||
["ext_pp_warning_directive"]={ | ["ext_pp_warning_directive"]={ | ||
[ | [a]="#warning is a ... extension [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="#warning is a %select{C2x|C++23}0 extension", | ||
[ | [f]=p, | ||
[ | [h]="\\#warning is a (?:C2x|C\\+\\+23) extension", | ||
[ | [b]=Y, | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{bb,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 // ...\n default:\n // ...\n case tok::pp_warning:\n if (LangOpts.CPlusPlus)\n Diag(Result, LangOpts.CPlusPlus23 ? diag::warn_cxx23_compat_warning_directive : diag::ext_pp_warning_directive) << /*C++23*/ 1;"},{bb,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 // ...\n default:\n // ...\n case tok::pp_warning:\n if (LangOpts.CPlusPlus)\n // ...\n else\n Diag(Result, LangOpts.C2x ? diag::warn_c2x_compat_warning_directive : diag::ext_pp_warning_directive) << /*C2x*/ 0;"}}, | ||
[k]={ | [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]"} | ["clang/test/Preprocessor/ext-pp-directive.c"]={"clang/test/Preprocessor/ext-pp-directive.c:61:2: warning: #warning is a C++23 extension [-Wpedantic]"} | ||
Line 8,449: | Line 8,448: | ||
}, | }, | ||
["ext_pragma_syntax_eod"]={ | ["ext_pragma_syntax_eod"]={ | ||
[ | [a]="expected end of directive in pragma [-Wunknown-pragmas]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={mb,vb,sb,"pragmas",uc}, | ||
[ | [l]=uc, | ||
[ | [e]="expected end of directive in pragma", | ||
[ | [f]=p, | ||
[ | [h]="expected end of directive in pragma", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunknown\\-pragmas[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"2f1e36bfd0c1",1298860671,"Rename tok::eom to tok::eod.","Rename tok::eom to tok::eod."}, | [i]={"2f1e36bfd0c1",1298860671,"Rename tok::eom to tok::eod.","Rename tok::eom to tok::eod."}, | ||
[j]={{ | [j]={{qb,992,"bool Preprocessor::LexOnOffSwitch(tok::OnOffSwitch &Result) {\n // ...\n if (Tok.isNot(tok::eod))\n Diag(Tok, diag::ext_pragma_syntax_eod);"}}, | ||
[k]={ | [k]={ | ||
["clang/test/Preprocessor/pragma_unknown.c"]={"clang/test/Preprocessor/pragma_unknown.c:29:34: warning: expected end of directive in pragma [-Wunknown-pragmas]"} | ["clang/test/Preprocessor/pragma_unknown.c"]={"clang/test/Preprocessor/pragma_unknown.c:29:34: warning: expected end of directive in pragma [-Wunknown-pragmas]"} | ||
Line 8,466: | Line 8,465: | ||
}, | }, | ||
["ext_predef_outside_function"]={ | ["ext_predef_outside_function"]={ | ||
[ | [a]="predefined identifier is only valid inside function [-Wpredefined-identifier-outside-function]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"predefined-identifier-outside-function"}, | ||
[ | [l]="predefined-identifier-outside-function", | ||
[ | [e]="predefined identifier is only valid inside function", | ||
[ | [f]=p, | ||
[ | [h]="predefined identifier is only valid inside function", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpredefined\\-identifier\\-outside\\-function[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{z,3641,"ExprResult Sema::BuildPredefinedExpr(SourceLocation Loc, PredefinedExpr::IdentKind IK) {\n if (!currentDecl) {\n Diag(Loc, diag::ext_predef_outside_function);"}}, | [j]={{z,3641,"ExprResult Sema::BuildPredefinedExpr(SourceLocation Loc, PredefinedExpr::IdentKind IK) {\n // ...\n if (!currentDecl) {\n Diag(Loc, diag::ext_predef_outside_function);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,483: | Line 8,482: | ||
}, | }, | ||
["ext_pseudo_dtor_on_void"]={ | ["ext_pseudo_dtor_on_void"]={ | ||
[ | [a]="pseudo-destructors on type void are a Microsoft extension [-Wmicrosoft-void-pseudo-dtor]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-void-pseudo-dtor"}, | ||
[ | [l]="microsoft-void-pseudo-dtor", | ||
[ | [e]="pseudo-destructors on type void are a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="pseudo\\-destructors on type void are a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-void\\-pseudo\\-dtor[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"5882927d7a1f",1327297857,"In microsoft mode, downgrade pseudo-destructors on void from error to warning.","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.","In microsoft mode, downgrade pseudo-destructors on void from error to warning."}, | ||
[j]={{ | [j]={{ab,7768,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,500: | Line 8,499: | ||
}, | }, | ||
["ext_pure_function_definition"]={ | ["ext_pure_function_definition"]={ | ||
[ | [a]="function definition with pure-specifier is a Microsoft extension [-Wmicrosoft-pure-definition]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-pure-definition"}, | ||
[ | [l]="microsoft-pure-definition", | ||
[ | [e]="function definition with pure-specifier is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="function definition with pure\\-specifier is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-pure\\-definition[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[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);"}}, | [j]={{x,15629,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n // ...\n {\n // ...\n if (FD) {\n // ...\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]={ | [k]={ | ||
[ | [qc]={"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]"} | ||
} | } | ||
}, | }, | ||
["ext_qualified_dtor_named_in_lexical_scope"]={ | ["ext_qualified_dtor_named_in_lexical_scope"]={ | ||
[ | [a]="qualified destructor name only found in lexical scope; omit the qualifier to find this type name by unqualified lookup [-Wdtor-name]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Hc}, | ||
[ | [l]=Hc, | ||
[ | [e]="qualified destructor name only found in lexical scope; omit the qualifier to find this type name by unqualified lookup", | ||
[ | [f]=p, | ||
[ | [h]="qualified destructor name only found in lexical scope; omit the qualifier to find this type name by unqualified lookup", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wdtor\\-name[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={Yc,1576809732,Eb,Eb}, | ||
[j]={{ | [j]={{ab,400,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n // ...\n if (SS.isSet()) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,534: | Line 8,533: | ||
}, | }, | ||
["ext_redefinition_of_typedef"]={ | ["ext_redefinition_of_typedef"]={ | ||
[ | [a]="redefinition of typedef A is a C11 feature [-Wtypedef-redefinition]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"typedef-redefinition"}, | ||
[ | [l]="typedef-redefinition", | ||
[ | [e]="redefinition of typedef %0 is a C11 feature", | ||
[ | [f]=p, | ||
[ | [h]="redefinition of typedef (.*?) is a C11 feature", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtypedef\\-redefinition[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[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();"}}, | [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 // ...\n Diag(New->getLocation(), diag::ext_redefinition_of_typedef) << New->getDeclName();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,551: | Line 8,550: | ||
}, | }, | ||
["ext_ref_qualifier"]={ | ["ext_ref_qualifier"]={ | ||
[ | [a]="reference qualifiers on functions are a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="reference qualifiers on functions are a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="reference qualifiers on functions are a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=y, | ||
[i]={"a52713096d31",1296074132,"Improve the extension warning for the use of ref-qualifiers, to","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","Improve the extension warning for the use of ref-qualifiers, to"}, | ||
[j]={{K,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);"}}, | [j]={{K,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);"}}, | ||
Line 8,568: | Line 8,567: | ||
}, | }, | ||
["ext_register_storage_class"]={ | ["ext_register_storage_class"]={ | ||
[ | [a]="ISO C++17 does not allow \'register\' storage class specifier [-Wregister]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"register"}, | ||
[ | [l]="register", | ||
[ | [e]="ISO C++17 does not allow \'register\' storage class specifier", | ||
[ | [f]=S, | ||
[ | [h]="ISO C\\+\\+17 does not allow \'register\' storage class specifier", | ||
[ | [b]=" \\[[^\\]]*\\-Wregister[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"291027692fe7",1448487261,"P0001R1: \'register\' storage class specifier is no longer permitted in C++1z.","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.","P0001R1: \'register\' storage class specifier is no longer permitted in C++1z."}, | ||
[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());"}}, | [j]={{x,7496,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (getLangOpts().CPlusPlus11 && SCSpec == DeclSpec::SCS_register && !D.getAsmLabel() && !getSourceManager().isInSystemMacro(D.getDeclSpec().getStorageClassSpecLoc())) {\n // ...\n Diag(D.getDeclSpec().getStorageClassSpecLoc(), getLangOpts().CPlusPlus17 ? diag::ext_register_storage_class : diag::warn_deprecated_register) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{x,14738,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n // ...\n if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n // ...\n // In C++11, the \'register\' storage class specifier is deprecated.\n // In C++17, it is not allowed, but we tolerate it as an extension.\n if (getLangOpts().CPlusPlus11) {\n Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus17 ? diag::ext_register_storage_class : diag::warn_deprecated_register) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,585: | Line 8,584: | ||
}, | }, | ||
["ext_reserved_user_defined_literal"]={ | ["ext_reserved_user_defined_literal"]={ | ||
[ | [a]="invalid suffix on literal; C++11 requires a space between literal and identifier [-Wreserved-user-defined-literal]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"reserved-user-defined-literal"}, | ||
[ | [l]="reserved-user-defined-literal", | ||
[ | [e]="invalid suffix on literal; C++11 requires a space between literal and identifier", | ||
[ | [f]=S, | ||
[ | [h]="invalid suffix on literal; C\\+\\+11 requires a space between literal and identifier", | ||
[ | [b]=" \\[[^\\]]*\\-Wreserved\\-user\\-defined\\-literal[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"0df56f4a9000",1331174361,"Implement C++11 [lex.ext]p10 for string and character literals: a ud-suffix not","Implement C++11 [lex.ext]p10 for string and character literals: a ud-suffix not"}, | [i]={"0df56f4a9000",1331174361,"Implement C++11 [lex.ext]p10 for string and character literals: a ud-suffix not","Implement C++11 [lex.ext]p10 for string and character literals: a ud-suffix not"}, | ||
[j]={{db,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), \" \");"}}, | [j]={{db,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 // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,602: | Line 8,601: | ||
}, | }, | ||
["ext_retained_language_linkage"]={ | ["ext_retained_language_linkage"]={ | ||
[ | [a]="friend function A retaining previous language linkage is an extension [-Wretained-language-linkage]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v,"retained-language-linkage"}, | ||
[ | [l]="retained-language-linkage", | ||
[ | [e]="friend function %0 retaining previous language linkage is an extension", | ||
[ | [f]=p, | ||
[ | [h]="friend function (.*?) retaining previous language linkage is an extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wretained\\-language\\-linkage[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"dd551fc3ae9d",1382482381,"Retain previous language linkage of friend function declarations","Retain previous language linkage of friend function declarations"}, | [i]={"dd551fc3ae9d",1382482381,"Retain previous language linkage of friend function declarations","Retain previous language linkage of friend function declarations"}, | ||
[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;"}}, | [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 // ...\n if (getLangOpts().CPlusPlus) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,620: | Line 8,619: | ||
}, | }, | ||
["ext_return_has_expr"]={ | ["ext_return_has_expr"]={ | ||
[ | [a]="... A should not return a value [-Wreturn-type]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={mb,vb,sb,"return-type"}, | ||
[ | [l]="return-type", | ||
[ | [e]="%select{void function|void method|constructor|destructor}1 %0 should not return a value", | ||
[ | [f]=S, | ||
[ | [h]="(?:void function|void method|constructor|destructor) (.*?) should not return a value", | ||
[ | [b]=" \\[[^\\]]*\\-Wreturn\\-type[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[j]={{ | [j]={{Wb,4074,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n // ...\n if (FnRetType->isVoidType()) {\n if (RetValExp) {\n if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n // ...\n } else if (!RetValExp->isTypeDependent()) {\n // ...\n unsigned D = diag::ext_return_has_expr;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,637: | Line 8,636: | ||
}, | }, | ||
["ext_return_has_void_expr"]={ | ["ext_return_has_void_expr"]={ | ||
[ | [a]="void ... A should not return void expression [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="void %select{function|method|block}1 %0 should not return void expression", | ||
[ | [f]=p, | ||
[ | [h]="void (?:function|method|block) (.*?) should not return void expression", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[j]={{ | [j]={{Wb,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 // ...\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 // ...\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;"},{Wb,4081,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n // ...\n if (FnRetType->isVoidType()) {\n if (RetValExp) {\n if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n // ...\n } else if (!RetValExp->isTypeDependent()) {\n // ...\n if (RetValExp->getType()->isVoidType()) {\n // ...\n if (isa<CXXConstructorDecl>(CurDecl) || isa<CXXDestructorDecl>(CurDecl))\n // ...\n else\n D = diag::ext_return_has_void_expr;"},{Wb,4099,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n // ...\n if (FnRetType->isVoidType()) {\n if (RetValExp) {\n if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n // ...\n } else if (!RetValExp->isTypeDependent()) {\n // ...\n else if (D != diag::ext_return_has_void_expr || !getLangOpts().CPlusPlus) {"}}, | ||
[k]={ | [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]"} | ["clang/test/Sema/block-return.c"]={"clang/test/Sema/block-return.c:137:5: warning: void block literal should not return void expression [-Wpedantic]"} | ||
Line 8,655: | Line 8,654: | ||
}, | }, | ||
["ext_return_missing_expr"]={ | ["ext_return_missing_expr"]={ | ||
[ | [a]="non-void ... A should return a value [-Wreturn-type]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={mb,vb,sb,"return-type"}, | ||
[ | [l]="return-type", | ||
[ | [e]="non-void %select{function|method}1 %0 should return a value", | ||
[ | [f]=S, | ||
[ | [h]="non\\-void (?:function|method) (.*?) should return a value", | ||
[ | [b]=" \\[[^\\]]*\\-Wreturn\\-type[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[j]={{ | [j]={{Wb,4140,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n // ...\n if (FnRetType->isVoidType()) {\n // ...\n } else if (!RetValExp && !HasDependentReturnType) {\n // ...\n if ((FD && FD->isInvalidDecl()) || FnRetType->containsErrors()) {\n // ...\n } else if (getLangOpts().CPlusPlus11 && FD && FD->isConstexpr()) {\n // ...\n } else {\n // ...\n unsigned DiagID = getLangOpts().C99 ? diag::ext_return_missing_expr : diag::warn_return_missing_expr;"}} | ||
}, | }, | ||
["ext_rvalue_reference"]={ | ["ext_rvalue_reference"]={ | ||
[ | [a]="rvalue references are a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="rvalue references are a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="rvalue references are a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=y, | ||
[i]={"0098499f7d8d",1295921852,"Downgrade the error about rvalue references to an extension warning","Downgrade the error about rvalue references to an extension warning"}, | [i]={"0098499f7d8d",1295921852,"Downgrade the error about rvalue references to an extension warning","Downgrade the error about rvalue references to an extension warning"}, | ||
[j]={{K,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);"}}, | [j]={{K,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 // ...\n if (Kind == tok::star || Kind == tok::caret) {\n // ...\n } else {\n // ...\n // Complain about rvalue references in C++03, but then go on and build\n // the declarator.\n if (Kind == tok::ampamp)\n Diag(Loc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_rvalue_reference : diag::ext_rvalue_reference);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,686: | Line 8,685: | ||
}, | }, | ||
["ext_rvalue_to_reference_access_ctor"]={ | ["ext_rvalue_to_reference_access_ctor"]={ | ||
[ | [a]="C++98 requires an accessible copy constructor for class A when binding a reference to a temporary; was ... [-Wbind-to-temporary-copy]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"bind-to-temporary-copy",v}, | ||
[ | [l]="bind-to-temporary-copy", | ||
[ | [e]="C++98 requires an accessible copy constructor for class %2 when binding a reference to a temporary; was %select{private|protected}0", | ||
[ | [f]=p, | ||
[ | [h]="C\\+\\+98 requires an accessible copy constructor for class (.*?) when binding a reference to a temporary; was (?:private|protected)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wbind\\-to\\-temporary\\-copy[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"caa710dfd236",1275926285,"PR7245: Make binding a reference to a temporary without a usable copy","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","PR7245: Make binding a reference to a temporary without a usable copy"}, | ||
[j]={{ | [j]={{wc,1654,"/// Checks access to a constructor.\nSema::AccessResult Sema::CheckConstructorAccess(SourceLocation UseLoc, CXXConstructorDecl *Constructor, DeclAccessPair Found, const InitializedEntity &Entity, bool IsCopyBindingRefToTemp) {\n // ...\n default:\n PD = PDiag(IsCopyBindingRefToTemp ? diag::ext_rvalue_to_reference_access_ctor : diag::err_access_ctor);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,704: | Line 8,703: | ||
}, | }, | ||
["ext_rvalue_to_reference_temp_copy_no_viable"]={ | ["ext_rvalue_to_reference_temp_copy_no_viable"]={ | ||
[ | [a]="no viable constructor ... of type A; C++98 requires a copy constructor when binding a reference to a temporary [-Wbind-to-temporary-copy]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"bind-to-temporary-copy",v}, | ||
[ | [l]="bind-to-temporary-copy", | ||
[ | [e]="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", | ||
[ | [f]=p, | ||
[ | [h]="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", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wbind\\-to\\-temporary\\-copy[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"caa710dfd236",1275926285,"PR7245: Make binding a reference to a temporary without a usable copy","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","PR7245: Make binding a reference to a temporary without a usable copy"}, | ||
[j]={{W,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);"}}, | [j]={{W,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,722: | Line 8,721: | ||
}, | }, | ||
["ext_scoped_enum"]={ | ["ext_scoped_enum"]={ | ||
[ | [a]="scoped enumerations are a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="scoped enumerations are a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="scoped enumerations are a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=y, | ||
[i]={"d0d87b597259",1366685256,"Warn that scoped enumerations are a C++11 extenstion when compiling in","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","Warn that scoped enumerations are a C++11 extenstion when compiling in"}, | ||
[j]={{K,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);"}}, | [j]={{K,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,739: | Line 8,738: | ||
}, | }, | ||
["ext_sizeof_alignof_function_type"]={ | ["ext_sizeof_alignof_function_type"]={ | ||
[ | [a]="invalid application of \'A\' to a function type [-Wpointer-arith]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v,cc}, | ||
[ | [l]=cc, | ||
[ | [e]="invalid application of \'%0\' to a function type", | ||
[ | [f]=p, | ||
[ | [h]="invalid application of \'(.*?)\' to a function type", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpointer\\-arith[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"9cf21ae068bd",1363649845,"Diagnose uses of \'alignof\' on functions in -pedantic mode.","Diagnose uses of \'alignof\' on functions in -pedantic mode."}, | [i]={"9cf21ae068bd",1363649845,"Diagnose uses of \'alignof\' on functions in -pedantic mode.","Diagnose uses of \'alignof\' on functions in -pedantic mode."}, | ||
[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;"}} | [j]={{z,4310,"static bool CheckExtensionTraitOperandType(Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange, UnaryExprOrTypeTrait TraitKind) {\n // ...\n // C99 6.5.3.4p1:\n if (T->isFunctionType() && (TraitKind == UETT_SizeOf || TraitKind == UETT_AlignOf || TraitKind == UETT_PreferredAlignOf)) {\n // ...\n S.Diag(Loc, diag::ext_sizeof_alignof_function_type) << getTraitSpelling(TraitKind) << ArgRange;"}} | ||
}, | }, | ||
["ext_sizeof_alignof_void_type"]={ | ["ext_sizeof_alignof_void_type"]={ | ||
[ | [a]="invalid application of \'A\' to a void type [-Wpointer-arith]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v,cc}, | ||
[ | [l]=cc, | ||
[ | [e]="invalid application of \'%0\' to a void type", | ||
[ | [f]=p, | ||
[ | [h]="invalid application of \'(.*?)\' to a void type", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpointer\\-arith[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"9cf21ae068bd",1363649845,"Diagnose uses of \'alignof\' on functions in -pedantic mode.","Diagnose uses of \'alignof\' on functions in -pedantic mode."}, | [i]={"9cf21ae068bd",1363649845,"Diagnose uses of \'alignof\' on functions in -pedantic mode.","Diagnose uses of \'alignof\' on functions in -pedantic mode."}, | ||
[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;"}} | [j]={{z,4326,"static bool CheckExtensionTraitOperandType(Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange, UnaryExprOrTypeTrait TraitKind) {\n // ...\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"]={ | ||
[ | [a]="\'A\' is not permitted on a declaration of a type [-Wmissing-declarations]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Mc}, | ||
[ | [l]=Mc, | ||
[ | [e]="\'%0\' is not permitted on a declaration of a type", | ||
[ | [f]=p, | ||
[ | [h]="\'(.*?)\' is not permitted on a declaration of a type", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmissing\\-declarations[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel...","Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some related diagnostics from warning to extension in C++, since they\'re errors there. Add some missing checks for function specifiers on non-function declarations."}, | [i]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel...","Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some related diagnostics from warning to extension in C++, since they\'re errors there. Add some missing checks for function specifiers on non-function declarations."}, | ||
[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;"}}, | [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 // ...\n if (getLangOpts().CPlusPlus)\n DiagID = diag::ext_standalone_specifier;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,786: | Line 8,785: | ||
}, | }, | ||
["ext_star_this_lambda_capture_cxx17"]={ | ["ext_star_this_lambda_capture_cxx17"]={ | ||
[ | [a]="capture of \'*this\' by copy is a C++17 extension [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Q,kb}, | ||
[ | [l]=Q, | ||
[ | [e]="capture of \'*this\' by copy is a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="capture of \'\\*this\' by copy is a C\\+\\+17 extension", | ||
[ | [b]=lb, | ||
[ | [g]="Lambda Issue", | ||
[i]={" | [i]={"dc6b596ebbd3",1458552337,"[Cxx1z] Implement Lambda Capture of *this by Value as [=,*this] (P0018R3)","[Cxx1z] Implement Lambda Capture of *this by Value as [=,*this] (P0018R3)"}, | ||
[j]={{"clang/lib/Sema/SemaLambda.cpp",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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,803: | Line 8,802: | ||
}, | }, | ||
["ext_static_data_member_in_union"]={ | ["ext_static_data_member_in_union"]={ | ||
[ | [a]="static data member A in union is a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="static data member %0 in union is a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="static data member (.*?) in union is a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=n, | ||
[i]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding","C++11 allows unions to have static data members. Remove the corresponding"}, | [i]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding","C++11 allows unions to have static data members. Remove the corresponding"}, | ||
[j]={{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;"}}, | [j]={{x,7607,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (!getLangOpts().CPlusPlus) {\n // ...\n } else {\n // ...\n if (SC == SC_Static && CurContext->isRecord()) {\n if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n // ...\n if (FunctionOrMethod) {\n // ...\n } else if (AnonStruct) {\n // ...\n } else if (RD->isUnion()) {\n // ...\n Diag(D.getIdentifierLoc(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_static_data_member_in_union : diag::ext_static_data_member_in_union) << Name;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,820: | Line 8,819: | ||
}, | }, | ||
["ext_static_non_static"]={ | ["ext_static_non_static"]={ | ||
[ | [a]="redeclaring non-static A as static is a Microsoft extension [-Wmicrosoft-redeclare-static]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={J,"microsoft-redeclare-static",v}, | ||
[ | [l]="microsoft-redeclare-static", | ||
[ | [e]="redeclaring non-static %0 as static is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="redeclaring non\\-static (.*?) as static is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-redeclare\\-static[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"5b63fa02b2fa",1403133985,"Sema: Static redeclaration after extern declarations is a Microsoft Extension","Sema: Static redeclaration after extern declarations is a Microsoft Extension"}, | [i]={"5b63fa02b2fa",1403133985,"Sema: Static redeclaration after extern declarations is a Microsoft Extension","Sema: Static redeclaration after extern declarations is a Microsoft Extension"}, | ||
[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();"}}, | [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 // ...\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 // ...\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]={ | [k]={ | ||
[ | [ad]={"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"]={ | ||
[ | [a]="\'static\' can only be specified inside the class definition [-Wmicrosoft-template]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,hb}, | ||
[ | [l]=hb, | ||
[ | [e]="\'static\' can only be specified inside the class definition", | ||
[ | [f]=p, | ||
[ | [h]="\'static\' can only be specified inside the class definition", | ||
[ | [b]=Gb, | ||
[ | [g]=n, | ||
[i]={"3e7fda229d3f",1548435702,"Allow \'static\' storage specifier on an out-of-line member function template","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","Allow \'static\' storage specifier on an out-of-line member function template"}, | ||
[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());"}}, | [j]={{x,10052,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n // ...\n if (getLangOpts().CPlusPlus) {\n // ...\n if (SC == SC_Static && isa<CXXMethodDecl>(NewFD) && !CurContext->isRecord()) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,855: | Line 8,854: | ||
}, | }, | ||
["ext_stdc_pragma_ignored"]={ | ["ext_stdc_pragma_ignored"]={ | ||
[ | [a]="unknown pragma in STDC namespace [-Wunknown-pragmas]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={mb,vb,sb,"pragmas",uc}, | ||
[ | [l]=uc, | ||
[ | [e]="unknown pragma in STDC namespace", | ||
[ | [f]=p, | ||
[ | [h]="unknown pragma in STDC namespace", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunknown\\-pragmas[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"a0b1f76d1022",1240176337,"reject invalid stuff in the STDC namespace.","reject invalid stuff in the STDC namespace."}, | [i]={"a0b1f76d1022",1240176337,"reject invalid stuff in the STDC namespace.","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 // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &UnknownTok) override {\n // ...\n PP.Diag(UnknownTok, diag::ext_stdc_pragma_ignored);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 8,872: | Line 8,871: | ||
}, | }, | ||
["ext_string_literal_operator_template"]={ | ["ext_string_literal_operator_template"]={ | ||
[ | [a]="string literal operator templates are a GNU extension [-Wgnu-string-literal-operator-template]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={N,"gnu-string-literal-operator-template"}, | ||
[ | [l]="gnu-string-literal-operator-template", | ||
[ | [e]="string literal operator templates are a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="string literal operator templates are a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-string\\-literal\\-operator\\-template[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"b8b41d3ea444",1381175878,"Add support for WG21 N3599 (literal operator template for strings) as a GNU","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","Add support for WG21 N3599 (literal operator template for strings) as a GNU"}, | ||
[j]={{B,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);"}}, | [j]={{B,16330,"static bool checkLiteralOperatorTemplateParameterList(Sema &SemaRef, FunctionTemplateDecl *TpDecl) {\n // ...\n // Must have one or two template parameters.\n if (TemplateParams->size() == 1) {\n // ...\n } else if (TemplateParams->size() == 2) {\n // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,889: | Line 8,888: | ||
}, | }, | ||
["ext_string_too_long"]={ | ["ext_string_too_long"]={ | ||
[ | [a]="string literal of length A exceeds maximum length B that ... compilers are required to support [-Woverlength-strings]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"overlength-strings",v}, | ||
[ | [l]="overlength-strings", | ||
[ | [e]="string literal of length %0 exceeds maximum length %1 that %select{C90|ISO C99|C++}2 compilers are required to support", | ||
[ | [f]=p, | ||
[ | [h]="string literal of length (.*?) exceeds maximum length (.*?) that (?:C90|ISO C99|C\\+\\+) compilers are required to support", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Woverlength\\-strings[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"b37b46e488a3",1279636400,"Complain when string literals are too long for the active language","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","Complain when string literals are too long for the active language"}, | ||
[j]={{gb,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());"}}, | [j]={{gb,2221,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n // ...\n if (Pascal) {\n // ...\n } else if (Diags) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,907: | Line 8,906: | ||
}, | }, | ||
["ext_subscript_non_lvalue"]={ | ["ext_subscript_non_lvalue"]={ | ||
[ | [a]="ISO C90 does not allow subscripting non-lvalue array [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="ISO C90 does not allow subscripting non-lvalue array", | ||
[ | [f]=p, | ||
[ | [h]="ISO C90 does not allow subscripting non\\-lvalue array", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={"ab2784f2c16e",1240703214,"Fix for PR4074: allow subscripting non-lvalue arrays in C90 mode.","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.","Fix for PR4074: allow subscripting non-lvalue arrays in C90 mode."}, | ||
[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();"}}, | [j]={{z,5935,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n // ...\n } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n // ...\n } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n // ...\n } else if (LHSTy->isArrayType()) {\n // ...\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 // ...\n if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n // ...\n } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n // ...\n } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n // ...\n } else if (LHSTy->isArrayType()) {\n // ...\n } else if (RHSTy->isArrayType()) {\n // ...\n Diag(RHSExp->getBeginLoc(), diag::ext_subscript_non_lvalue) << RHSExp->getSourceRange();"}}, | ||
[k]={ | [k]={ | ||
[ | [Sc]={"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"]={ | ||
[ | [a]="overloaded A with ... parameter is a C++23 extension [-Wpre-c++23-compat]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={zc,gc,hc,hc,"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"}, | ||
[ | [l]="pre-c++23-compat", | ||
[ | [e]="overloaded %0 with %select{no|a defaulted|more than one}1 parameter is a C++23 extension", | ||
[ | [f]=p, | ||
[ | [h]="overloaded (.*?) with (?:no|a defaulted|more than one) parameter is a C\\+\\+23 extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpre\\-c\\+\\+23\\-compat[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | [i]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions."}, | ||
[j]={{B,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();"},{B,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);"}}, | [j]={{B,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 // ...\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 // ...\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();"},{B,16243,"#include \"clang/Basic/OperatorKinds.def\"\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,943: | Line 8,942: | ||
}, | }, | ||
["ext_template_arg_extra_parens"]={ | ["ext_template_arg_extra_parens"]={ | ||
[ | [a]="address non-type template argument cannot be surrounded by parentheses", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [e]="address non-type template argument cannot be surrounded by parentheses", | ||
[ | [f]=p, | ||
[ | [h]="address non\\-type template argument cannot be surrounded by parentheses", | ||
[ | [b]=Pb, | ||
[ | [g]=n, | ||
[i]={"6a0c4097f142",1284358018,"Parentheses around address non-type template argument is demoted to an extension warning.","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.","Parentheses around address non-type template argument is demoted to an extension warning."}, | ||
[j]={{I,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();"},{I,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();"}}, | [j]={{I,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 // ...\n if (S.getLangOpts().MicrosoftExt) {\n // ...\n } else {\n // ...\n while (ParenExpr *Parens = dyn_cast<ParenExpr>(Arg)) {\n if (!Invalid && !ExtraParens) {\n S.Diag(Arg->getBeginLoc(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_extra_parens : diag::ext_template_arg_extra_parens) << Arg->getSourceRange();"},{I,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 // ...\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]={ | [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"} | ["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"} | ||
Line 8,958: | Line 8,957: | ||
}, | }, | ||
["ext_template_arg_local_type"]={ | ["ext_template_arg_local_type"]={ | ||
[ | [a]="template argument uses local type A [-Wlocal-type-template-args]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"local-type-template-args"}, | ||
[ | [l]="local-type-template-args", | ||
[ | [e]="template argument uses local type %0", | ||
[ | [f]=p, | ||
[ | [h]="template argument uses local type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wlocal\\-type\\-template\\-args[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"9bb67f4d1ab7",1283548354,"Allow anonymous and local types. The support was already in place for these,","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,","Allow anonymous and local types. The support was already in place for these,"}, | ||
[j]={{I,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;"}}, | [j]={{I,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;"}}, | ||
Line 8,975: | Line 8,974: | ||
}, | }, | ||
["ext_template_arg_object_internal"]={ | ["ext_template_arg_object_internal"]={ | ||
[ | [a]="non-type template argument referring to ... A with internal linkage is a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="non-type template argument referring to %select{function|object}0 %1 with internal linkage is a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="non\\-type template argument referring to (?:function|object) (.*?) with internal linkage is a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=n, | ||
[i]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object","Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"}, | [i]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object","Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object"}, | ||
[j]={{I,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();"}}, | [j]={{I,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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 8,992: | Line 8,991: | ||
}, | }, | ||
["ext_template_arg_unnamed_type"]={ | ["ext_template_arg_unnamed_type"]={ | ||
[ | [a]="template argument uses unnamed type [-Wunnamed-type-template-args]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"unnamed-type-template-args"}, | ||
[ | [l]="unnamed-type-template-args", | ||
[ | [e]="template argument uses unnamed type", | ||
[ | [f]=p, | ||
[ | [h]="template argument uses unnamed type", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunnamed\\-type\\-template\\-args[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"9bb67f4d1ab7",1283548354,"Allow anonymous and local types. The support was already in place for these,","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,","Allow anonymous and local types. The support was already in place for these,"}, | ||
[j]={{I,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;"}}, | [j]={{I,6468,"bool UnnamedLocalNoLinkageFinder::VisitTagDecl(const TagDecl *Tag) {\n // ...\n if (!Tag->hasNameForLinkage()) {\n S.Diag(SR.getBegin(), S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_arg_unnamed_type : diag::ext_template_arg_unnamed_type) << SR;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,009: | Line 9,008: | ||
}, | }, | ||
["ext_template_outside_of_template"]={ | ["ext_template_outside_of_template"]={ | ||
[ | [a]="\'template\' keyword outside of a template [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="\'template\' keyword outside of a template", | ||
[ | [f]=p, | ||
[ | [h]="\'template\' keyword outside of a template", | ||
[ | [b]=cb, | ||
[ | [g]=n, | ||
[i]={"f7d77718123f",1276727468,"Fix the recently-added warning about \'typename\' and \'template\'","Fix the recently-added warning about \'typename\' and \'template\'"}, | [i]={"f7d77718123f",1276727468,"Fix the recently-added warning about \'typename\' and \'template\'","Fix the recently-added warning about \'typename\' and \'template\'"}, | ||
[j]={{I,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);"}}, | [j]={{I,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);"}}, | ||
Line 9,026: | Line 9,025: | ||
}, | }, | ||
["ext_template_param_shadow"]={ | ["ext_template_param_shadow"]={ | ||
[ | [a]="declaration of A shadows template parameter [-Wmicrosoft-template-shadow]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,hb,"microsoft-template-shadow"}, | ||
[ | [l]="microsoft-template-shadow", | ||
[ | [e]="declaration of %0 shadows template parameter", | ||
[ | [f]=p, | ||
[ | [h]="declaration of (.*?) shadows template parameter", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-template\\-shadow[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ec,1567434909,ub,ub}, | ||
[j]={{I,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;"}}, | [j]={{I,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 // ...\n unsigned DiagId = getLangOpts().MSVCCompat ? diag::ext_template_param_shadow : diag::err_template_param_shadow;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,043: | Line 9,042: | ||
}, | }, | ||
["ext_template_parameter_default_in_function_template"]={ | ["ext_template_parameter_default_in_function_template"]={ | ||
[ | [a]="default template arguments for a function template are a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="default template arguments for a function template are a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="default template arguments for a function template are a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=n, | ||
[i]={"8b481d8ac2af",1296791842,"When a function template\'s template parameter has a default argument,","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,","When a function template\'s template parameter has a default argument,"}, | ||
[j]={{I,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;"}}, | [j]={{I,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 // ...\n case Sema::TPC_FunctionTemplate:\n case Sema::TPC_FriendFunctionTemplateDefinition:\n // ...\n S.Diag(ParamLoc, S.getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_template_parameter_default_in_function_template : diag::ext_template_parameter_default_in_function_template) << DefArgRange;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,060: | Line 9,059: | ||
}, | }, | ||
["ext_template_template_param_typename"]={ | ["ext_template_template_param_typename"]={ | ||
[ | [a]="template template parameter using \'typename\' is a C++17 extension [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Q,kb}, | ||
[ | [l]=Q, | ||
[ | [e]="template template parameter using \'typename\' is a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="template template parameter using \'typename\' is a C\\+\\+17 extension", | ||
[ | [b]=lb, | ||
[ | [g]=y, | ||
[i]={"78e1ca692bf0",1402933882,"[C++1z] Implement N4051: \'typename\' is permitted instead of \'class\' when declaring a template templa...","[C++1z] Implement N4051: \'typename\' is permitted instead of \'class\' when declaring a template template parameter."}, | [i]={"78e1ca692bf0",1402933882,"[C++1z] Implement N4051: \'typename\' is permitted instead of \'class\' when declaring a template templa...","[C++1z] Implement N4051: \'typename\' is permitted instead of \'class\' when declaring a template template parameter."}, | ||
[j]={{"clang/lib/Parse/ParseTemplate.cpp",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 // ...\n // Provide an ExtWarn if the C++1z feature of using \'typename\' here is used.\n // Generate a meaningful error if the user forgot to put class before the\n // identifier, comma, or greater. Provide a fixit if the identifier, comma,\n // or greater appear immediately or after \'struct\'. In the latter case,\n // replace the keyword with \'class\'.\n if (!TryConsumeToken(tok::kw_class)) {\n // ...\n if (Tok.is(tok::kw_typename)) {\n Diag(Tok.getLocation(), getLangOpts().CPlusPlus17 ? diag::warn_cxx14_compat_template_template_param_typename : diag::ext_template_template_param_typename) << (!getLangOpts().CPlusPlus17 ? FixItHint::CreateReplacement(Tok.getLocation(), \"class\") : FixItHint());"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,077: | Line 9,076: | ||
}, | }, | ||
["ext_thread_before"]={ | ["ext_thread_before"]={ | ||
[ | [a]="\'__thread\' before \'A\' [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="\'__thread\' before \'%0\'", | ||
[ | [f]=p, | ||
[ | [h]="\'__thread\' before \'(.*?)\'", | ||
[ | [b]=Y, | ||
[ | [g]=y, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{K,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\";"},{K,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\";"}}, | [j]={{K,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 // ...\n while (true) {\n // ...\n case tok::kw_extern:\n if (DS.getThreadStorageClassSpec() == DeclSpec::TSCS___thread)\n Diag(Tok, diag::ext_thread_before) << \"extern\";"},{K,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 // ...\n while (true) {\n // ...\n case tok::kw_static:\n if (DS.getThreadStorageClassSpec() == DeclSpec::TSCS___thread)\n Diag(Tok, diag::ext_thread_before) << \"static\";"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,095: | Line 9,094: | ||
}, | }, | ||
["ext_token_used"]={ | ["ext_token_used"]={ | ||
[ | [a]="extension used [-Wlanguage-extension-token]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"language-extension-token",v}, | ||
[ | [l]="language-extension-token", | ||
[ | [e]="extension used", | ||
[ | [f]=p, | ||
[ | [h]="extension used", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wlanguage\\-extension\\-token[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[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);"}}, | [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 // ...\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]={ | [k]={ | ||
["clang/test/Preprocessor/extension-warning.c"]={"clang/test/Preprocessor/extension-warning.c:9:1: warning: extension used [-Wlanguage-extension-token]"} | ["clang/test/Preprocessor/extension-warning.c"]={"clang/test/Preprocessor/extension-warning.c:9:1: warning: extension used [-Wlanguage-extension-token]"} | ||
Line 9,113: | Line 9,112: | ||
}, | }, | ||
["ext_type_defined_in_offsetof"]={ | ["ext_type_defined_in_offsetof"]={ | ||
[ | [a]="defining a type within \'...\' is a Clang extension [-Wgnu-offsetof-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-offsetof-extensions",v}, | ||
[ | [l]="gnu-offsetof-extensions", | ||
[ | [e]="defining a type within \'%select{__builtin_offsetof|offsetof}0\' is a Clang extension", | ||
[ | [f]=p, | ||
[ | [h]="defining a type within \'(?:__builtin_offsetof|offsetof)\' is a Clang extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-offsetof\\-extensions[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={P,1625925174,C,C}, | [i]={P,1625925174,C,C}, | ||
[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();"}}, | [j]={{x,17549,"CreateNewDecl:\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,131: | Line 9,130: | ||
}, | }, | ||
["ext_typecheck_addrof_temporary"]={ | ["ext_typecheck_addrof_temporary"]={ | ||
[ | [a]="taking the address of a temporary object of type A [-Waddress-of-temporary]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"address-of-temporary"}, | ||
[ | [l]="address-of-temporary", | ||
[ | [e]="taking the address of a temporary object of type %0", | ||
[ | [f]=S, | ||
[ | [h]="taking the address of a temporary object of type (.*?)", | ||
[ | [b]=" \\[[^\\]]*\\-Waddress\\-of\\-temporary[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function","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","PR15132: Replace \"address expression must be an lvalue or a function"}, | ||
[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();"}}, | [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 // ...\n if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n // ...\n Diag(OpLoc, isSFINAEContext() ? diag::err_typecheck_addrof_temporary : diag::ext_typecheck_addrof_temporary) << op->getType() << op->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,148: | Line 9,147: | ||
}, | }, | ||
["ext_typecheck_addrof_void"]={ | ["ext_typecheck_addrof_void"]={ | ||
[ | [a]="ISO C forbids taking the address of an expression of type \'void\' [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="ISO C forbids taking the address of an expression of type \'void\'", | ||
[ | [f]=p, | ||
[ | [h]="ISO C forbids taking the address of an expression of type \'void\'", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={"b8c4fd8cfd27",1241390165,"PR2524: downgrade taking address of expression of type \'void\' to an ","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 ","PR2524: downgrade taking address of expression of type \'void\' to an "}, | ||
[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();"}}, | [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 // ...\n if (lval == Expr::LV_IncompleteVoidType) {\n // ...\n Diag(OpLoc, diag::ext_typecheck_addrof_void) << op->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,166: | Line 9,165: | ||
}, | }, | ||
["ext_typecheck_base_super"]={ | ["ext_typecheck_base_super"]={ | ||
[ | [a]="method parameter type A does not match super class method parameter type B [-Wsuper-class-method-mismatch]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={"super-class-method-mismatch"}, | ||
[ | [l]="super-class-method-mismatch", | ||
[ | [e]="method parameter type %diff{$ does not match super class method parameter type $|does not match super class method parameter type}0,1", | ||
[ | [f]=p, | ||
[ | [h]="method parameter type (?:(.*?) does not match super class method parameter type (.*?)|does not match super class method parameter type)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wsuper\\-class\\-method\\-mismatch[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"10ff786e1eb8",1249348036,"Compare matching selectors in current and","Compare matching selectors in current and"}, | [i]={"10ff786e1eb8",1249348036,"Compare matching selectors in current and","Compare matching selectors in current and"}, | ||
[j]={{ | [j]={{rb,4528,"void Sema::CheckObjCMethodOverrides(ObjCMethodDecl *ObjCMethod, ObjCInterfaceDecl *CurrentClass, ResultTypeCompatibilityKind RTC) {\n // ...\n for (ObjCMethodDecl *overridden : overrides) {\n // ...\n if (CurrentClass && overridden->getDeclContext() != CurrentClass && isa<ObjCInterfaceDecl>(overridden->getDeclContext()) && !overridden->isImplicit() /* not meant for properties */) {\n // ...\n for (; ParamI != E && PrevI != PrevE; ++ParamI, ++PrevI) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,184: | Line 9,183: | ||
}, | }, | ||
["ext_typecheck_cast_nonscalar"]={ | ["ext_typecheck_cast_nonscalar"]={ | ||
[ | [a]="C99 forbids casting nonscalar type A to the same type [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="C99 forbids casting nonscalar type %0 to the same type", | ||
[ | [f]=p, | ||
[ | [h]="C99 forbids casting nonscalar type (.*?) to the same type", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[j]={{ | [j]={{Fb,3007,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n // ...\n if (DestRecordTy && Self.Context.hasSameUnqualifiedType(DestType, SrcType)) {\n // ...\n Self.Diag(OpRange.getBegin(), diag::ext_typecheck_cast_nonscalar) << DestType << SrcExpr.get()->getSourceRange();"}} | ||
}, | }, | ||
["ext_typecheck_cast_to_union"]={ | ["ext_typecheck_cast_to_union"]={ | ||
[ | [a]="cast to union type is a GNU extension [-Wgnu-union-cast]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,"gnu-union-cast",v}, | ||
[ | [l]="gnu-union-cast", | ||
[ | [e]="cast to union type is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="cast to union type is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-union\\-cast[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[j]={{ | [j]={{Fb,3017,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n // ...\n // GCC\'s cast to union extension.\n if (DestRecordTy && DestRecordTy->getDecl()->isUnion()) {\n // ...\n if (CastExpr::getTargetFieldForToUnionCast(RD, SrcType)) {\n Self.Diag(OpRange.getBegin(), diag::ext_typecheck_cast_to_union) << SrcExpr.get()->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,217: | Line 9,216: | ||
}, | }, | ||
["ext_typecheck_compare_complete_incomplete_pointers"]={ | ["ext_typecheck_compare_complete_incomplete_pointers"]={ | ||
[ | [a]="pointer comparisons before C11 need to be between two complete or two incomplete types; A is ...complete and B is ...complete [-Wc11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={Yb,v}, | ||
[ | [l]=Yb, | ||
[ | [e]="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", | ||
[ | [f]=p, | ||
[ | [h]="pointer comparisons before C11 need to be between two complete or two incomplete types; (.*?) is (?:|in)complete and (.*?) is (?:|in)complete", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wc11\\-extensions[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata"}, | [i]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata"}, | ||
[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();"}}, | [j]={{z,13131,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n if ((LHSType->isIntegerType() && !LHSIsNull) || (RHSType->isIntegerType() && !RHSIsNull)) {\n // ...\n } else if (getLangOpts().CPlusPlus) {\n // ...\n } else if (LHSType->isPointerType() && RHSType->isPointerType()) { // C99 6.5.8p2\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,235: | Line 9,234: | ||
}, | }, | ||
["ext_typecheck_comparison_of_distinct_pointers"]={ | ["ext_typecheck_comparison_of_distinct_pointers"]={ | ||
[ | [a]="comparison of distinct pointer types (A and B) [-Wcompare-distinct-pointer-types]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"compare-distinct-pointer-types"}, | ||
[ | [l]="compare-distinct-pointer-types", | ||
[ | [e]="comparison of distinct pointer types%diff{ ($ and $)|}0,1", | ||
[ | [f]=p, | ||
[ | [h]="comparison of distinct pointer types(?: \\((.*?) and (.*?)\\)|)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wcompare\\-distinct\\-pointer\\-types[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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(); }"}}, | [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(); }"}}, | ||
Line 9,252: | Line 9,251: | ||
}, | }, | ||
["ext_typecheck_comparison_of_fptr_to_void"]={ | ["ext_typecheck_comparison_of_fptr_to_void"]={ | ||
[ | [a]="equality comparison between function pointer and void pointer (A and B) [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="equality comparison between function pointer and void pointer (%0 and %1)", | ||
[ | [f]=p, | ||
[ | [h]="equality comparison between function pointer and void pointer \\((.*?) and (.*?)\\)", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={"16c209610c8b",1250987267,"Catch a few more cases of illegal comparisons.","Catch a few more cases of illegal comparisons."}, | [i]={"16c209610c8b",1250987267,"Catch a few more cases of illegal comparisons.","Catch a few more cases of illegal comparisons."}, | ||
[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(); }"}}, | [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(); }"}}, | ||
Line 9,270: | Line 9,269: | ||
}, | }, | ||
["ext_typecheck_comparison_of_pointer_integer"]={ | ["ext_typecheck_comparison_of_pointer_integer"]={ | ||
[ | [a]="comparison between pointer and integer (A and B) [-Wpointer-integer-compare]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"pointer-integer-compare"}, | ||
[ | [l]="pointer-integer-compare", | ||
[ | [e]="comparison between pointer and integer (%0 and %1)", | ||
[ | [f]=p, | ||
[ | [h]="comparison between pointer and integer \\((.*?) and (.*?)\\)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpointer\\-integer\\-compare[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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;"}}, | [j]={{z,13479,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n // ...\n if (LangOpts.DebuggerSupport) {\n // ...\n } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n // ...\n } else if (getLangOpts().CPlusPlus) {\n // ...\n } else if (IsOrdered)\n // ...\n else\n DiagID = diag::ext_typecheck_comparison_of_pointer_integer;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,287: | Line 9,286: | ||
}, | }, | ||
["ext_typecheck_cond_incompatible_operands"]={ | ["ext_typecheck_cond_incompatible_operands"]={ | ||
[ | [a]="incompatible operand types (A and B)", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [e]="incompatible operand types (%0 and %1)", | ||
[ | [f]=p, | ||
[ | [h]="incompatible operand types \\((.*?) and (.*?)\\)", | ||
[ | [b]=Pb, | ||
[ | [g]=n, | ||
[i]={"1b821b4fc583",1241666054,"Improve semantic checking for blocks. Radar 6441502","Improve semantic checking for blocks. Radar 6441502"}, | [i]={"1b821b4fc583",1241666054,"Improve semantic checking for blocks. Radar 6441502","Improve semantic checking for blocks. Radar 6441502"}, | ||
[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();"}}, | [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 // ...\n // Check constraints for Objective-C object pointers types.\n if (LHSTy->isObjCObjectPointerType() && RHSTy->isObjCObjectPointerType()) {\n // ...\n // FIXME: Consider unifying with \'areComparableObjCPointerTypes\'.\n // It could return the composite type.\n if (!(compositeType = Context.areCommonBaseCompatible(LHSOPT, RHSOPT)).isNull()) {\n // ...\n } else if (Context.canAssignObjCInterfaces(LHSOPT, RHSOPT)) {\n // ...\n } else if (Context.canAssignObjCInterfaces(RHSOPT, LHSOPT)) {\n // ...\n } else if ((LHSOPT->isObjCQualifiedIdType() || RHSOPT->isObjCQualifiedIdType()) && Context.ObjCQualifiedIdTypesAreCompatible(LHSOPT, RHSOPT, true)) {\n // ...\n } else if (LHSTy->isObjCIdType() || RHSTy->isObjCIdType()) {\n // ...\n } else {\n Diag(QuestionLoc, diag::ext_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | ||
[k]={ | [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 *\')"} | ["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:78:16: warning: incompatible operand types (\'id<P1>\' and \'A *\')"} | ||
Line 9,302: | Line 9,301: | ||
}, | }, | ||
["ext_typecheck_cond_incompatible_pointers"]={ | ["ext_typecheck_cond_incompatible_pointers"]={ | ||
[ | [a]="pointer type mismatch (A and B) [-Wpointer-type-mismatch]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"pointer-type-mismatch"}, | ||
[ | [l]="pointer-type-mismatch", | ||
[ | [e]="pointer type mismatch%diff{ ($ and $)|}0,1", | ||
[ | [f]=p, | ||
[ | [h]="pointer type mismatch(?: \\((.*?) and (.*?)\\)|)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpointer\\-type\\-mismatch[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[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();"}}, | [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 // ...\n if (CompositeTy.isNull()) {\n // ...\n S.Diag(Loc, diag::ext_typecheck_cond_incompatible_pointers) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,319: | Line 9,318: | ||
}, | }, | ||
["ext_typecheck_cond_one_void"]={ | ["ext_typecheck_cond_one_void"]={ | ||
[ | [a]="C99 forbids conditional expressions with only one void side [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="C99 forbids conditional expressions with only one void side", | ||
[ | [f]=p, | ||
[ | [h]="C99 forbids conditional expressions with only one void side", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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();"}}, | [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 // ...\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 // ...\n if (LHSTy->isVoidType() && RHSTy->isVoidType()) {\n // ...\n } else if (RHSTy->isVoidType()) {\n // ...\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 // ...\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 // ...\n if (LHSTy->isVoidType() && RHSTy->isVoidType()) {\n // ...\n } else if (RHSTy->isVoidType()) {\n // ...\n } else {\n // ...\n Diag(LHS.get()->getBeginLoc(), diag::ext_typecheck_cond_one_void) << LHS.get()->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,337: | Line 9,336: | ||
}, | }, | ||
["ext_typecheck_cond_pointer_integer_mismatch"]={ | ["ext_typecheck_cond_pointer_integer_mismatch"]={ | ||
[ | [a]="pointer/integer type mismatch in conditional expression (A and B) [-Wconditional-type-mismatch]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"conditional-type-mismatch"}, | ||
[ | [l]="conditional-type-mismatch", | ||
[ | [e]="pointer/integer type mismatch in conditional expression%diff{ ($ and $)|}0,1", | ||
[ | [f]=p, | ||
[ | [h]="pointer\\/integer type mismatch in conditional expression(?: \\((.*?) and (.*?)\\)|)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wconditional\\-type\\-mismatch[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={ob,1405733957,T,T}, | ||
[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();"}}, | [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 // ...\n S.Diag(Loc, diag::ext_typecheck_cond_pointer_integer_mismatch) << Expr1->getType() << Expr2->getType() << Expr1->getSourceRange() << Expr2->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,354: | Line 9,353: | ||
}, | }, | ||
["ext_typecheck_convert_discards_qualifiers"]={ | ["ext_typecheck_convert_discards_qualifiers"]={ | ||
[ | [a]="... discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Vc,"incompatible-pointer-types-discards-qualifiers"}, | ||
[ | [l]="incompatible-pointer-types-discards-qualifiers", | ||
[ | [e]="%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", | ||
[ | [f]=p, | ||
[ | [h]="(?:(?: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", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-pointer\\-types\\-discards\\-qualifiers[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[j]={{ | [j]={{eb,3199,"bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, unsigned MaxWidth) {\n // ...\n if (!AddrType.isAtLeastAsQualifiedAs(ValType)) {\n // ...\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 // ...\n case CompatiblePointerDiscardsQualifiers:\n // ...\n if (getLangOpts().CPlusPlus) {\n // ...\n } else {\n DiagKind = diag::ext_typecheck_convert_discards_qualifiers;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,371: | Line 9,370: | ||
}, | }, | ||
["ext_typecheck_convert_incompatible_function_pointer"]={ | ["ext_typecheck_convert_incompatible_function_pointer"]={ | ||
[ | [a]="incompatible function pointer types ...... [-Wincompatible-function-pointer-types]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"incompatible-function-pointer-types",Vc}, | ||
[ | [l]="incompatible-function-pointer-types", | ||
[ | [e]="incompatible function pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", | ||
[ | [f]=S, | ||
[ | [h]="incompatible function pointer types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)", | ||
[ | [b]=" \\[[^\\]]*\\-Wincompatible\\-function\\-pointer\\-types[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"d9b7dfe4a4df",1468874226,"[Sema] Create a separate group for incompatible function pointer warning","[Sema] Create a separate group for incompatible function pointer warning"}, | [i]={"d9b7dfe4a4df",1468874226,"[Sema] Create a separate group for incompatible function pointer warning","[Sema] Create a separate group for incompatible function pointer warning"}, | ||
[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;"}}, | [j]={{z,17561,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatibleFunctionPointer:\n if (getLangOpts().CPlusPlus) {\n // ...\n } else {\n DiagKind = diag::ext_typecheck_convert_incompatible_function_pointer;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,388: | Line 9,387: | ||
}, | }, | ||
["ext_typecheck_convert_incompatible_pointer"]={ | ["ext_typecheck_convert_incompatible_pointer"]={ | ||
[ | [a]="incompatible pointer types ...... [-Wincompatible-pointer-types]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Vc}, | ||
[ | [l]=Vc, | ||
[ | [e]="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", | ||
[ | [f]=p, | ||
[ | [h]="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 &)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wincompatible\\-pointer\\-types[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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;"},{ | [j]={{z,17580,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatiblePointer:\n if (Action == AA_Passing_CFAudited) {\n // ...\n } else if (getLangOpts().CPlusPlus) {\n // ...\n } else {\n DiagKind = diag::ext_typecheck_convert_incompatible_pointer;"},{ab,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 // ...\n case ICK_Writeback_Conversion:\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;"},{ab,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 // ...\n case ICK_Writeback_Conversion:\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 // ...\n else\n Diag(From->getBeginLoc(), diag::ext_typecheck_convert_incompatible_pointer) << From->getType() << ToType << Action << From->getSourceRange() << 0;"}}, | ||
[k]={ | [k]={ | ||
[ | [ic]={"clang/test/Parser/declarators.c:60:10: warning: incompatible pointer types returning \'int *\' from a function with result type \'float *\' [-Wincompatible-pointer-types]"} | ||
} | } | ||
}, | }, | ||
["ext_typecheck_convert_incompatible_pointer_sign"]={ | ["ext_typecheck_convert_incompatible_pointer_sign"]={ | ||
[ | [a]="... converts between pointers to integer types ... [-Wpointer-sign]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"pointer-sign"}, | ||
[ | [l]="pointer-sign", | ||
[ | [e]="%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", | ||
[ | [f]=p, | ||
[ | [h]="(?:(?: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)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wpointer\\-sign[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"80160bd483b3",1237766384,"Partial implementation of PR3342: break out pointer sign ","Partial implementation of PR3342: break out pointer sign "}, | [i]={"80160bd483b3",1237766384,"Partial implementation of PR3342: break out pointer sign ","Partial implementation of PR3342: break out pointer sign "}, | ||
[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) {"}}, | [j]={{z,17588,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatiblePointerSign:\n if (getLangOpts().CPlusPlus) {\n // ...\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 // ...\n if (DiagKind == diag::ext_typecheck_convert_incompatible_pointer_sign || DiagKind == diag::err_typecheck_convert_incompatible_pointer_sign) {"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,422: | Line 9,421: | ||
}, | }, | ||
["ext_typecheck_convert_int_pointer"]={ | ["ext_typecheck_convert_int_pointer"]={ | ||
[ | [a]="incompatible integer to pointer conversion ...... [-Wint-conversion]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"conversion","int-conversion","int-conversions","non-gcc"}, | ||
[ | [l]="int-conversion", | ||
[ | [e]="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", | ||
[ | [f]=S, | ||
[ | [h]="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 &)", | ||
[ | [b]=" \\[[^\\]]*\\-Wint\\-conversion[^\\]]*\\]", | ||
[ | [g]="Value Conversion Issue", | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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;"}}, | [j]={{z,17545,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IntToPointer:\n if (getLangOpts().CPlusPlus) {\n // ...\n } else {\n DiagKind = diag::ext_typecheck_convert_int_pointer;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,439: | Line 9,438: | ||
}, | }, | ||
["ext_typecheck_convert_pointer_int"]={ | ["ext_typecheck_convert_pointer_int"]={ | ||
[ | [a]="incompatible pointer to integer conversion ...... [-Wint-conversion]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"conversion","int-conversion","int-conversions","non-gcc"}, | ||
[ | [l]="int-conversion", | ||
[ | [e]="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", | ||
[ | [f]=S, | ||
[ | [h]="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 &)", | ||
[ | [b]=" \\[[^\\]]*\\-Wint\\-conversion[^\\]]*\\]", | ||
[ | [g]="Value Conversion Issue", | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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;"}}, | [j]={{z,17535,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case PointerToInt:\n if (getLangOpts().CPlusPlus) {\n // ...\n } else {\n DiagKind = diag::ext_typecheck_convert_pointer_int;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,456: | Line 9,455: | ||
}, | }, | ||
["ext_typecheck_convert_pointer_void_func"]={ | ["ext_typecheck_convert_pointer_void_func"]={ | ||
[ | [a]="... converts between void pointer and function pointer [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="%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", | ||
[ | [f]=p, | ||
[ | [h]="(?:(?: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", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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;"}}, | [j]={{z,17603,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case FunctionVoidPointer:\n if (getLangOpts().CPlusPlus) {\n // ...\n } else {\n DiagKind = diag::ext_typecheck_convert_pointer_void_func;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,474: | Line 9,473: | ||
}, | }, | ||
["ext_typecheck_decl_incomplete_type"]={ | ["ext_typecheck_decl_incomplete_type"]={ | ||
[ | [a]="tentative definition of variable with internal linkage has incomplete non-array type A [-Wtentative-definition-incomplete-type]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"tentative-definition-incomplete-type"}, | ||
[ | [l]="tentative-definition-incomplete-type", | ||
[ | [e]="tentative definition of variable with internal linkage has incomplete non-array type %0", | ||
[ | [f]=p, | ||
[ | [h]="tentative definition of variable with internal linkage has incomplete non\\-array type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtentative\\-definition\\-incomplete\\-type[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"47d2859b3e27",1248115619,"Improve GCC compatibility by allowing static tentative definitions of","Improve GCC compatibility by allowing static tentative definitions of"}, | [i]={"47d2859b3e27",1248115619,"Improve GCC compatibility by allowing static tentative definitions of","Improve GCC compatibility by allowing static tentative definitions of"}, | ||
[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);"}}, | [j]={{x,13816,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n // ...\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n // ...\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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,491: | Line 9,490: | ||
}, | }, | ||
["ext_typecheck_indirection_through_void_pointer"]={ | ["ext_typecheck_indirection_through_void_pointer"]={ | ||
[ | [a]="ISO C does not allow indirection on operand of type A [-Wvoid-ptr-dereference]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"void-ptr-dereference"}, | ||
[ | [l]="void-ptr-dereference", | ||
[ | [e]="ISO C does not allow indirection on operand of type %0", | ||
[ | [f]=p, | ||
[ | [h]="ISO C does not allow indirection on operand of type (.*?)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wvoid\\-ptr\\-dereference[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"80877c228d01",1399499607,"Add an Extension warning for applying unary * to an operand of type \'void*\' in","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","Add an Extension warning for applying unary * to an operand of type \'void*\' in"}, | ||
[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();"}}, | [j]={{z,15294,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n // ...\n if (Result->isVoidType()) {\n // ...\n if (LO.CPlusPlus)\n // ...\n else if (!(LO.C99 && IsAfterAmp) && !S.isUnevaluatedContext())\n S.Diag(OpLoc, diag::ext_typecheck_indirection_through_void_pointer) << OpTy << Op->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,508: | Line 9,507: | ||
}, | }, | ||
["ext_typecheck_ordered_comparison_of_function_pointers"]={ | ["ext_typecheck_ordered_comparison_of_function_pointers"]={ | ||
[ | [a]="ordered comparison of function pointers (A and B) [-Wordered-compare-function-pointers]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"ordered-compare-function-pointers"}, | ||
[ | [l]="ordered-compare-function-pointers", | ||
[ | [e]="ordered comparison of function pointers (%0 and %1)", | ||
[ | [f]=p, | ||
[ | [h]="ordered comparison of function pointers \\((.*?) and (.*?)\\)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wordered\\-compare\\-function\\-pointers[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"d466ea1b0873",1246343045,"Implement PR4175, catching some questionable comparisons. Patch by","Implement PR4175, catching some questionable comparisons. Patch by"}, | [i]={"d466ea1b0873",1246343045,"Implement PR4175, catching some questionable comparisons. Patch by","Implement PR4175, catching some questionable comparisons. Patch by"}, | ||
[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;"}} | [j]={{z,13109,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n if (IsOrdered && LHSType->isFunctionPointerType() && RHSType->isFunctionPointerType()) {\n // ...\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"]={ | ||
[ | [a]="ordered comparison between pointer and zero (A and B) is an extension [-Wpedantic]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v}, | ||
[ | [l]=v, | ||
[ | [e]="ordered comparison between pointer and zero (%0 and %1) is an extension", | ||
[ | [f]=p, | ||
[ | [h]="ordered comparison between pointer and zero \\((.*?) and (.*?)\\) is an extension", | ||
[ | [b]=Y, | ||
[ | [g]=n, | ||
[i]={"d99bd52c7395",1250985824,"Eli points out that we really must diagnose \"void* > 0\" as an extension. ","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. ","Eli points out that we really must diagnose \"void* > 0\" as an extension. "}, | ||
[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;"}}, | [j]={{z,13352,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n // ...\n if (LangOpts.DebuggerSupport) {\n // ...\n } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n if (IsOrdered) {\n // ...\n DiagID = isError ? diag::err_typecheck_ordered_comparison_of_pointer_and_zero : diag::ext_typecheck_ordered_comparison_of_pointer_and_zero;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,540: | Line 9,539: | ||
}, | }, | ||
["ext_typecheck_ordered_comparison_of_pointer_integer"]={ | ["ext_typecheck_ordered_comparison_of_pointer_integer"]={ | ||
[ | [a]="ordered comparison between pointer and integer (A and B)", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [e]="ordered comparison between pointer and integer (%0 and %1)", | ||
[ | [f]=p, | ||
[ | [h]="ordered comparison between pointer and integer \\((.*?) and (.*?)\\)", | ||
[ | [b]=Pb, | ||
[ | [g]=n, | ||
[i]={"d466ea1b0873",1246343045,"Implement PR4175, catching some questionable comparisons. Patch by","Implement PR4175, catching some questionable comparisons. Patch by"}, | [i]={"d466ea1b0873",1246343045,"Implement PR4175, catching some questionable comparisons. Patch by","Implement PR4175, catching some questionable comparisons. Patch by"}, | ||
[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;"}}, | [j]={{z,13357,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n // ...\n if (LangOpts.DebuggerSupport) {\n // ...\n } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n // ...\n } else if (getLangOpts().CPlusPlus) {\n // ...\n } else if (IsOrdered)\n DiagID = diag::ext_typecheck_ordered_comparison_of_pointer_integer;"}}, | ||
[k]={ | [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 *\')"} | ["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 *\')"} | ||
Line 9,555: | Line 9,554: | ||
}, | }, | ||
["ext_typecheck_zero_array_size"]={ | ["ext_typecheck_zero_array_size"]={ | ||
[ | [a]="zero size arrays are an extension [-Wzero-length-array]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,v,"zero-length-array"}, | ||
[ | [l]="zero-length-array", | ||
[ | [e]="zero size arrays are an extension", | ||
[ | [f]=p, | ||
[ | [h]="zero size arrays are an extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wzero\\-length\\-array[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[j]={{W,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);"},{U,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();"}}, | [j]={{W,2075,"void InitListChecker::CheckArrayType(const InitializedEntity &Entity, InitListExpr *IList, QualType &DeclType, llvm::APSInt elementIndex, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n // ...\n if (!hadError && DeclType->isIncompleteArrayType() && !VerifyOnly) {\n // ...\n if (maxElements == Zero && !Entity.isVariableLengthArrayNew()) {\n // ...\n SemaRef.Diag(IList->getBeginLoc(), diag::ext_typecheck_zero_array_size);"},{U,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 // ...\n if (!ArraySize) {\n // ...\n } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n // ...\n } else {\n // ...\n if (!R.isUsable()) {\n // ...\n } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n // ...\n } else {\n // ...\n if (ConstVal == 0 && !T.isWebAssemblyReferenceType()) {\n // ...\n Diag(ArraySize->getBeginLoc(), isSFINAEContext() ? diag::err_typecheck_zero_array_size : diag::ext_typecheck_zero_array_size) << 0 << ArraySize->getSourceRange();"}}, | ||
[k]={ | [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]"} | ["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:3:24: warning: zero size arrays are an extension [-Wzero-length-array]"} | ||
Line 9,573: | Line 9,572: | ||
}, | }, | ||
["ext_typedef_without_a_name"]={ | ["ext_typedef_without_a_name"]={ | ||
[ | [a]="typedef requires a name [-Wmissing-declarations]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Mc}, | ||
[ | [l]=Mc, | ||
[ | [e]="typedef requires a name", | ||
[ | [f]=p, | ||
[ | [h]="typedef requires a name", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmissing\\-declarations[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[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();"}}, | [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 // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,590: | Line 9,589: | ||
}, | }, | ||
["ext_typename_missing"]={ | ["ext_typename_missing"]={ | ||
[ | [a]="missing \'typename\' prior to dependent type name \'AB\' [-Wtypename-missing]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"typename-missing"}, | ||
[ | [l]="typename-missing", | ||
[ | [e]="missing \'typename\' prior to dependent type name \'%0%1\'", | ||
[ | [f]=p, | ||
[ | [h]="missing \'typename\' prior to dependent type name \'(.*?)(.*?)\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wtypename\\-missing[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"32506ed8be37",1402614228,"Recover from missing \'typename\' in sizeof(T::InnerType)","Recover from missing \'typename\' in sizeof(T::InnerType)"}, | [i]={"32506ed8be37",1402614228,"Recover from missing \'typename\' in sizeof(T::InnerType)","Recover from missing \'typename\' in sizeof(T::InnerType)"}, | ||
[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;"}}, | [j]={{x,821,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n // ...\n if (!SS || (!SS->isSet() && !SS->isInvalid()))\n // ...\n else if (DeclContext *DC = computeDeclContext(*SS, false))\n // ...\n else if (SS->isValid() && SS->getScopeRep()->containsErrors()) {\n // ...\n } else if (isDependentScopeSpecifier(*SS)) {\n // ...\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 // ...\n if (const TypeDecl *TD = R.getAsSingle<TypeDecl>()) {\n // ...\n if (RecoveryTSI && getLangOpts().MSVCCompat)\n DiagID = diag::ext_typename_missing;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,607: | Line 9,606: | ||
}, | }, | ||
["ext_typename_outside_of_template"]={ | ["ext_typename_outside_of_template"]={ | ||
[ | [a]="\'typename\' occurs outside of a template [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="\'typename\' occurs outside of a template", | ||
[ | [f]=p, | ||
[ | [h]="\'typename\' occurs outside of a template", | ||
[ | [b]=cb, | ||
[ | [g]=n, | ||
[i]={"f7d77718123f",1276727468,"Fix the recently-added warning about \'typename\' and \'template\'","Fix the recently-added warning about \'typename\' and \'template\'"}, | [i]={"f7d77718123f",1276727468,"Fix the recently-added warning about \'typename\' and \'template\'","Fix the recently-added warning about \'typename\' and \'template\'"}, | ||
[j]={{I,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);"},{I,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);"}}, | [j]={{I,10811,"TypeResult Sema::ActOnTypenameType(Scope *S, SourceLocation TypenameLoc, const CXXScopeSpec &SS, const IdentifierInfo &II, SourceLocation IdLoc, ImplicitTypenameContext IsImplicitTypename) {\n // ...\n if (TypenameLoc.isValid() && S && !S->getTemplateParamParent())\n Diag(TypenameLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_typename_outside_of_template : diag::ext_typename_outside_of_template) << FixItHint::CreateRemoval(TypenameLoc);"},{I,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]={ | [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]"} | ["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]"} | ||
Line 9,624: | Line 9,623: | ||
}, | }, | ||
["ext_undeclared_unqual_id_with_dependent_base"]={ | ["ext_undeclared_unqual_id_with_dependent_base"]={ | ||
[ | [a]="use of undeclared identifier A; unqualified lookup into dependent bases of class template B is a Microsoft extension [-Wmicrosoft-template]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,hb}, | ||
[ | [l]=hb, | ||
[ | [e]="use of undeclared identifier %0; unqualified lookup into dependent bases of class template %1 is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="use of undeclared identifier (.*?); unqualified lookup into dependent bases of class template (.*?) is a Microsoft extension", | ||
[ | [b]=Gb, | ||
[ | [g]=n, | ||
[i]={"10ca24c63162",1402444888,"Allow lookup into dependent bases in more places under -fms-compatibility","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","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;"},{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);"}}, | [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 // ...\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 // ...\n if (DC->isDependentContext() && DC->isFunctionOrMethod()) {\n // ...\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 // ...\n if (IsTemplateTypeArg && getCurScope()->isTemplateParamScope()) {\n // ...\n } else if (const CXXRecordDecl *RD = findRecordWithDependentBasesOfEnclosingMethod(CurContext)) {\n // ...\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 // ...\n auto DB = S.Diag(Loc, diag::ext_undeclared_unqual_id_with_dependent_base);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,641: | Line 9,640: | ||
}, | }, | ||
["ext_undefined_internal_type"]={ | ["ext_undefined_internal_type"]={ | ||
[ | [a]="ISO C++ requires a definition in this translation unit for ... A because its type does not have linkage [-Wundefined-internal-type]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v,"undefined-internal-type"}, | ||
[ | [l]="undefined-internal-type", | ||
[ | [e]="ISO C++ requires a definition in this translation unit for %select{function|variable}0 %q1 because its type does not have linkage", | ||
[ | [f]=p, | ||
[ | [h]="ISO C\\+\\+ requires a definition in this translation unit for (?:function|variable) (.*?) because its type does not have linkage", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wundefined\\-internal\\-type[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"405e2dbf3767",1505892120,"Implement C++ [basic.link]p8.","Implement C++ [basic.link]p8."}, | [i]={"405e2dbf3767",1505892120,"Implement C++ [basic.link]p8.","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 // ...\n for (const auto &Undef : Undefined) {\n // ...\n if (S.isExternalWithNoLinkageType(VD)) {\n // ...\n S.Diag(VD->getLocation(), isExternallyVisible(VD->getType()->getLinkage()) ? diag::ext_undefined_internal_type : diag::err_undefined_internal_type) << isa<VarDecl>(VD) << VD;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,659: | Line 9,658: | ||
}, | }, | ||
["ext_unelaborated_friend_type"]={ | ["ext_unelaborated_friend_type"]={ | ||
[ | [a]="unelaborated friend declaration is a C++11 extension; specify \'...\' to befriend A [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="unelaborated friend declaration is a C++11 extension; specify \'%select{struct|interface|union|class|enum}0\' to befriend %1", | ||
[ | [f]=p, | ||
[ | [h]="unelaborated friend declaration is a C\\+\\+11 extension; specify \'(?:struct|interface|union|class|enum)\' to befriend (.*?)", | ||
[ | [b]=cb, | ||
[ | [g]=n, | ||
[i]={"3b4abb679211",1270663032, | [i]={"3b4abb679211",1270663032,Jc,Jc}, | ||
[j]={{B,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);"}}, | [j]={{B,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 // ...\n // C++03 [class.friend]p2:\n // An elaborated-type-specifier shall be used in a friend declaration\n // for a class.*\n //\n // * The class-key of the elaborated-type-specifier is required.\n if (!CodeSynthesisContexts.empty()) {\n // ...\n } else {\n if (!T->isElaboratedTypeSpecifier()) {\n // If we evaluated the type to a record type, suggest putting\n // a tag in front.\n if (const RecordType *RT = T->getAs<RecordType>()) {\n // ...\n Diag(TypeRange.getBegin(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_unelaborated_friend_type : diag::ext_unelaborated_friend_type) << (unsigned)RD->getTagKind() << T << FixItHint::CreateInsertion(getLocForEndOfToken(FriendLoc), InsertionText);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,676: | Line 9,675: | ||
}, | }, | ||
["ext_unicode_whitespace"]={ | ["ext_unicode_whitespace"]={ | ||
[ | [a]="treating Unicode character as whitespace [-Wunicode-whitespace]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"unicode-whitespace"}, | ||
[ | [l]="unicode-whitespace", | ||
[ | [e]="treating Unicode character as whitespace", | ||
[ | [f]=p, | ||
[ | [h]="treating Unicode character as whitespace", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunicode\\-whitespace[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"7f43dddae066",1359060646,"Handle universal character names and Unicode characters outside of literals.","Handle universal character names and Unicode characters outside of literals."}, | [i]={"7f43dddae066",1359060646,"Handle universal character names and Unicode characters outside of literals.","Handle universal character names and Unicode characters outside of literals."}, | ||
[j]={{db,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);"}}, | [j]={{db,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);"}}, | ||
Line 9,693: | Line 9,692: | ||
}, | }, | ||
["ext_union_member_of_reference_type"]={ | ["ext_union_member_of_reference_type"]={ | ||
[ | [a]="union member A has reference type B, which is a Microsoft extension [-Wmicrosoft-union-member-reference]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,"microsoft-union-member-reference"}, | ||
[ | [l]="microsoft-union-member-reference", | ||
[ | [e]="union member %0 has reference type %1, which is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="union member (.*?) has reference type (.*?), which is a Microsoft extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmicrosoft\\-union\\-member\\-reference[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"ed0ae1d70bf8",1369930800,"Microsoft has a language extension which allows union members to be","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","Microsoft has a language extension which allows union members to be"}, | ||
[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;"}}, | [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 // ...\n if (!InvalidDecl && getLangOpts().CPlusPlus) {\n if (Record->isUnion()) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,710: | Line 9,709: | ||
}, | }, | ||
["ext_unknown_escape"]={ | ["ext_unknown_escape"]={ | ||
[ | [a]="unknown escape sequence \'\\A\' [-Wunknown-escape-sequence]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"unknown-escape-sequence"}, | ||
[ | [l]="unknown-escape-sequence", | ||
[ | [e]="unknown escape sequence \'\\%0\'", | ||
[ | [f]=p, | ||
[ | [h]="unknown escape sequence \'\\\\(.*?)\'", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wunknown\\-escape\\-sequence[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{gb,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);"},{gb,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);"}}, | [j]={{gb,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 // ...\n default:\n // ...\n if (isPrintable(ResultChar))\n Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::ext_unknown_escape) << std::string(1, ResultChar);"},{gb,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 // ...\n default:\n // ...\n if (isPrintable(ResultChar))\n // ...\n else\n Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::ext_unknown_escape) << \"x\" + llvm::utohexstr(ResultChar);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,727: | Line 9,726: | ||
}, | }, | ||
["ext_unqualified_base_class"]={ | ["ext_unqualified_base_class"]={ | ||
[ | [a]="unqualified base initializer of class templates is a Microsoft extension [-Wmicrosoft-template]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={J,hb}, | ||
[ | [l]=hb, | ||
[ | [e]="unqualified base initializer of class templates is a Microsoft extension", | ||
[ | [f]=p, | ||
[ | [h]="unqualified base initializer of class templates is a Microsoft extension", | ||
[ | [b]=Gb, | ||
[ | [g]=n, | ||
[i]={"cb08f4aa4467",1620530452, | [i]={"cb08f4aa4467",1620530452,Sb,Sb}, | ||
[j]={{B,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());"}}, | [j]={{B,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 // ...\n if (TemplateTypeTy) {\n // ...\n } else if (DS.getTypeSpecType() == TST_decltype) {\n // ...\n } else if (DS.getTypeSpecType() == TST_decltype_auto) {\n // ...\n } else {\n // ...\n if (!TyD) {\n // ...\n if (getLangOpts().MSVCCompat && !getLangOpts().CPlusPlus20) {\n if (auto UnqualifiedBase = R.getAsSingle<ClassTemplateDecl>()) {\n // ...\n for (auto const &Base : ClassDecl->bases()) {\n // ...\n if (BaseTemplate && Context.hasSameTemplateName(BaseTemplate->getTemplateName(), TN)) {\n Diag(IdLoc, diag::ext_unqualified_base_class) << SourceRange(IdLoc, Init->getSourceRange().getEnd());"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,744: | Line 9,743: | ||
}, | }, | ||
["ext_unterminated_char_or_string"]={ | ["ext_unterminated_char_or_string"]={ | ||
[ | [a]="missing terminating ... character [-Winvalid-pp-token]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"invalid-pp-token"}, | ||
[ | [l]="invalid-pp-token", | ||
[ | [e]="missing terminating %select{\'|\'\"\'}0 character", | ||
[ | [f]=p, | ||
[ | [h]="missing terminating (?:\'|\'\"\') character", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Winvalid\\-pp\\-token[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC","Use %select to merge similar diagnostics. NFC"}, | [i]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC","Use %select to merge similar diagnostics. NFC"}, | ||
[j]={{db,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;"},{db,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;"}}, | [j]={{db,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 // ...\n while (C != \'\"\') {\n // ...\n if (C == \'\\n\' || C == \'\\r\' || // Newline.\n // ...\n if (!isLexingRawMode() && !LangOpts.AsmPreprocessor)\n Diag(BufferPtr, diag::ext_unterminated_char_or_string) << 1;"},{db,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 // ...\n while (C != \'\\\'\') {\n // ...\n if (C == \'\\n\' || C == \'\\r\' || // Newline.\n // ...\n if (!isLexingRawMode() && !LangOpts.AsmPreprocessor)\n Diag(BufferPtr, diag::ext_unterminated_char_or_string) << 0;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaHLSL/cb_error.hlsl"]={"clang/test/SemaHLSL/cb_error.hlsl:40:11: warning: missing terminating \' character [-Winvalid-pp-token]"} | ["clang/test/SemaHLSL/cb_error.hlsl"]={"clang/test/SemaHLSL/cb_error.hlsl:40:11: warning: missing terminating \' character [-Winvalid-pp-token]"} | ||
Line 9,761: | Line 9,760: | ||
}, | }, | ||
["ext_use_out_of_scope_declaration"]={ | ["ext_use_out_of_scope_declaration"]={ | ||
[ | [a]="use of out-of-scope declaration of A... [-Wout-of-scope-function]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"out-of-scope-function"}, | ||
[ | [l]="out-of-scope-function", | ||
[ | [e]="use of out-of-scope declaration of %0%select{| whose type is not compatible with that of an implicit declaration}1", | ||
[ | [f]=p, | ||
[ | [h]="use of out\\-of\\-scope declaration of (.*?)(?:| whose type is not compatible with that of an implicit declaration)", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wout\\-of\\-scope\\-function[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"9bfa970a4009",1507081762,"PR34822: Fix a collection of related bugs with our handling of C89 implicit function declarations.","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.","PR34822: Fix a collection of related bugs with our handling of C89 implicit function declarations."}, | ||
[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;"}}, | [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 // ...\n if (ExternCPrev) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,778: | Line 9,777: | ||
}, | }, | ||
["ext_using_attribute_ns"]={ | ["ext_using_attribute_ns"]={ | ||
[ | [a]="default scope specifier for attributes is a C++17 extension [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Q,kb}, | ||
[ | [l]=Q, | ||
[ | [e]="default scope specifier for attributes is a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="default scope specifier for attributes is a C\\+\\+17 extension", | ||
[ | [b]=lb, | ||
[ | [g]=y, | ||
[i]={"b7d7a046d8e0",1466770512,"Using for attributes voted into C++17.","Using for attributes voted into C++17."}, | [i]={"b7d7a046d8e0",1466770512,"Using for attributes voted into C++17.","Using for attributes voted into C++17."}, | ||
[j]={{O,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);"}} | [j]={{O,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 // ...\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"]={ | ||
[ | [a]="using declaration naming a scoped enumerator is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="using declaration naming a scoped enumerator is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="using declaration naming a scoped enumerator is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=n, | ||
[i]={ | [i]={Nc,1615397021,zb,zb}, | ||
[j]={{B,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();"}}, | [j]={{B,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 // ...\n if (NamedContext) {\n // ...\n if (auto *ED = dyn_cast<EnumDecl>(NamedContext)) {\n // C++14 [namespace.udecl]p7:\n // A using-declaration shall not name a scoped enumerator.\n // C++20 p1099 permits enumerators.\n if (EC && R && ED->isScoped())\n Diag(SS.getBeginLoc(), getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_using_decl_scoped_enumerator : diag::ext_using_decl_scoped_enumerator) << SS.getRange();"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,809: | Line 9,808: | ||
}, | }, | ||
["ext_using_declaration_pack"]={ | ["ext_using_declaration_pack"]={ | ||
[ | [a]="pack expansion of using declaration is a C++17 extension [-Wc++17-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Q,kb}, | ||
[ | [l]=Q, | ||
[ | [e]="pack expansion of using declaration is a C++17 extension", | ||
[ | [f]=p, | ||
[ | [h]="pack expansion of using declaration is a C\\+\\+17 extension", | ||
[ | [b]=lb, | ||
[ | [g]=y, | ||
[i]={"22a250cd5d8e",1482120533, | [i]={"22a250cd5d8e",1482120533,Dc,Dc}, | ||
[j]={{O,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);"}} | [j]={{O,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 // ...\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"]={ | ||
[ | [a]="using enum declaration is a C++20 extension [-Wc++20-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={M,fb}, | ||
[ | [l]=M, | ||
[ | [e]="using enum declaration is a C++20 extension", | ||
[ | [f]=p, | ||
[ | [h]="using enum declaration is a C\\+\\+20 extension", | ||
[ | [b]=jb, | ||
[ | [g]=y, | ||
[i]={ | [i]={xb,1612659633,Z,Z}, | ||
[j]={{O,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);"}}, | [j]={{O,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 // ...\n if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n // ...\n Diag(UELoc, getLangOpts().CPlusPlus20 ? diag::warn_cxx17_compat_using_enum_declaration : diag::ext_using_enum_declaration);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,840: | Line 9,839: | ||
}, | }, | ||
["ext_using_undefined_std"]={ | ["ext_using_undefined_std"]={ | ||
[ | [a]="using directive refers to implicitly-defined namespace \'std\'", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [e]="using directive refers to implicitly-defined namespace \'std\'", | ||
[ | [f]=p, | ||
[ | [h]="using directive refers to implicitly\\-defined namespace \'std\'", | ||
[ | [b]=Pb, | ||
[ | [g]=n, | ||
[i]={"cdf87024edb7",1277834026, | [i]={"cdf87024edb7",1277834026,Lc,Lc}, | ||
[j]={{B,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);"}}, | [j]={{B,11948,"Decl *Sema::ActOnUsingDirective(Scope *S, SourceLocation UsingLoc, SourceLocation NamespcLoc, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *NamespcName, const ParsedAttributesView &AttrList) {\n // ...\n if (R.empty()) {\n // ...\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]={ | [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\'"} | ["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\'"} | ||
Line 9,855: | Line 9,854: | ||
}, | }, | ||
["ext_variable_sized_type_in_struct"]={ | ["ext_variable_sized_type_in_struct"]={ | ||
[ | [a]="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]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={N,"gnu-variable-sized-type-not-at-end"}, | ||
[ | [l]="gnu-variable-sized-type-not-at-end", | ||
[ | [e]="field %0 with variable sized type %1 not at the end of a struct or class is a GNU extension", | ||
[ | [f]=p, | ||
[ | [h]="field (.*?) with variable sized type (.*?) not at the end of a struct or class is a GNU extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-variable\\-sized\\-type\\-not\\-at\\-end[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={L,1237025389,A,A}, | [i]={L,1237025389,A,A}, | ||
[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();"}}, | [j]={{x,18864,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n // ...\n for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n // ...\n if (FDTy->isFunctionType()) {\n // ...\n } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n // ...\n } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n // ...\n } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n if (Record && FDTTy->getDecl()->hasFlexibleArrayMember()) {\n // ...\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]={ | [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]"} | ["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]"} | ||
Line 9,872: | Line 9,871: | ||
}, | }, | ||
["ext_variable_template"]={ | ["ext_variable_template"]={ | ||
[ | [a]="variable templates are a C++14 extension [-Wc++14-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={nb,Ob}, | ||
[ | [l]=nb, | ||
[ | [e]="variable templates are a C++14 extension", | ||
[ | [f]=p, | ||
[ | [h]="variable templates are a C\\+\\+14 extension", | ||
[ | [b]=kc, | ||
[ | [g]=n, | ||
[i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som...","Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention..."}, | [i]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som...","Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention..."}, | ||
[j]={{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);"}}, | [j]={{x,7653,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (!getLangOpts().CPlusPlus) {\n // ...\n } else {\n // ...\n if (TemplateParams) {\n if (!TemplateParams->size() && D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n // ...\n } else {\n // ...\n if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {\n // ...\n } else { // if (TemplateParams->size() > 0)\n // ...\n Diag(D.getIdentifierLoc(), getLangOpts().CPlusPlus14 ? diag::warn_cxx11_compat_variable_template : diag::ext_variable_template);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,889: | Line 9,888: | ||
}, | }, | ||
["ext_variadic_macro"]={ | ["ext_variadic_macro"]={ | ||
[ | [a]="variadic macros are a C99 feature [-Wvariadic-macros]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={v,Ec}, | ||
[ | [l]=Ec, | ||
[ | [e]="variadic macros are a C99 feature", | ||
[ | [f]=p, | ||
[ | [h]="variadic macros are a C99 feature", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wvariadic\\-macros[^\\]]*\\]", | ||
[ | [g]=D, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{ | [j]={{bb,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 // ...\n while (true) {\n // ...\n case tok::ellipsis: // #define X(... -> C99 varargs\n if (!LangOpts.C99)\n Diag(Tok, LangOpts.CPlusPlus11 ? diag::warn_cxx98_compat_variadic_macro : diag::ext_variadic_macro);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,907: | Line 9,906: | ||
}, | }, | ||
["ext_variadic_main"]={ | ["ext_variadic_main"]={ | ||
[ | [a]="\'main\' is not allowed to be declared variadic [-Wmain]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Qc}, | ||
[ | [l]=Qc, | ||
[ | [e]="\'main\' is not allowed to be declared variadic", | ||
[ | [f]=p, | ||
[ | [h]="\'main\' is not allowed to be declared variadic", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wmain[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"1710cc994ecd",1429805562,"Diagnose variadic main() as an extension; addresses PR17905.","Diagnose variadic main() as an extension; addresses PR17905."}, | [i]={"1710cc994ecd",1429805562,"Diagnose variadic main() as an extension; addresses PR17905.","Diagnose variadic main() as an extension; addresses PR17905."}, | ||
[j]={{x,12162,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n if (FTP->isVariadic()) {\n Diag(FD->getLocation(), diag::ext_variadic_main);"}}, | [j]={{x,12162,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n // ...\n if (FTP->isVariadic()) {\n Diag(FD->getLocation(), diag::ext_variadic_main);"}}, | ||
[k]={ | [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]"} | ["clang/test/Sema/warn-main.c"]={"clang/test/Sema/warn-main.c:33:5: warning: \'main\' is not allowed to be declared variadic [-Wmain]"} | ||
Line 9,924: | Line 9,923: | ||
}, | }, | ||
["ext_variadic_templates"]={ | ["ext_variadic_templates"]={ | ||
[ | [a]="variadic templates are a C++11 extension [-Wc++11-extensions]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={V,H}, | ||
[ | [l]=H, | ||
[ | [e]="variadic templates are a C++11 extension", | ||
[ | [f]=p, | ||
[ | [h]="variadic templates are a C\\+\\+11 extension", | ||
[ | [b]=cb, | ||
[ | [g]=y, | ||
[i]={"b25d8c3af4a9",1295474355,"Downgrade the \"variadic templates are a C++0x feature\" error to an","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","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);"},{U,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);"}}, | [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 // ...\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 // ...\n if (TryConsumeToken(tok::ellipsis, EllipsisLoc))\n Diag(EllipsisLoc, getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"},{U,5946,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n // ...\n // If there was an ellipsis in the declarator, the declaration declares a\n // parameter pack whose type may be a pack expansion type.\n if (D.hasEllipsis()) {\n // ...\n case DeclaratorContext::TemplateParam:\n // C++0x [temp.param]p15:\n // If a template-parameter is a [...] is a parameter-declaration that\n // declares a parameter pack (8.3.5), then the template-parameter is a\n // template parameter pack (14.5.3).\n //\n // Note: core issue 778 clarifies that, if there are any unexpanded\n // parameter packs in the type of the non-type template parameter, then\n // it expands those parameter packs.\n if (T->containsUnexpandedParameterPack())\n // ...\n else\n S.Diag(D.getEllipsisLoc(), LangOpts.CPlusPlus11 ? diag::warn_cxx98_compat_variadic_templates : diag::ext_variadic_templates);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,941: | Line 9,940: | ||
}, | }, | ||
["ext_vla"]={ | ["ext_vla"]={ | ||
[ | [a]="variable length arrays are a C99 feature [-Wvla-extension]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[w]=false, | [w]=false, | ||
[ | [m]={N,v,"vla","vla-extension"}, | ||
[ | [l]="vla-extension", | ||
[ | [e]="variable length arrays are a C99 feature", | ||
[ | [f]=p, | ||
[ | [h]="variable length arrays are a C99 feature", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wvla\\-extension[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={ | [i]={F,1236199783,E,G}, | ||
[j]={{U,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;"}}, | [j]={{U,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 // ...\n if (getLangOpts().OpenCL) {\n // ...\n } else if (getLangOpts().C99) {\n // ...\n } else if (isSFINAEContext()) {\n // ...\n } else if (getLangOpts().OpenMP && isInOpenMPTaskUntiedContext()) {\n // ...\n } else {\n VLADiag = diag::ext_vla;"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,959: | Line 9,958: | ||
}, | }, | ||
["ext_vla_folded_to_constant"]={ | ["ext_vla_folded_to_constant"]={ | ||
[ | [a]="variable length array folded to constant array as an extension [-Wgnu-folding-constant]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={N,nc}, | ||
[ | [l]=nc, | ||
[ | [e]="variable length array folded to constant array as an extension", | ||
[ | [f]=p, | ||
[ | [h]="variable length array folded to constant array as an extension", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgnu\\-folding\\-constant[^\\]]*\\]", | ||
[ | [g]=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","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","when compiling in a GNU mode (e.g. gnu99) treat VLAs with a size that can be folded to a constant"}, | ||
[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);"},{U,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); }"}}, | [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 // ...\n if (FixedTInfo) {\n Diag(Loc, diag::ext_vla_folded_to_constant);"},{x,6722,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n // ...\n if (T->isVariablyModifiedType()) {\n // ...\n if (S->getFnParent() == nullptr) {\n // ...\n if (FixedTInfo) {\n Diag(NewTD->getLocation(), diag::ext_vla_folded_to_constant);"},{x,8725,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n if ((isVM && NewVD->hasLinkage()) || (T->isVariableArrayType() && NewVD->hasGlobalStorage())) {\n // ...\n Diag(NewVD->getLocation(), diag::ext_vla_folded_to_constant);"},{U,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 // ...\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 // ...\n Sema::SemaDiagnosticBuilder diagnoseFold(Sema &S, SourceLocation Loc) override { return S.Diag(Loc, diag::ext_vla_folded_to_constant); }"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 9,976: | Line 9,975: | ||
}, | }, | ||
["ext_warn_duplicate_declspec"]={ | ["ext_warn_duplicate_declspec"]={ | ||
[ | [a]="duplicate \'A\' declaration specifier [-Wduplicate-decl-specifier]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={"duplicate-decl-specifier"}, | ||
[ | [l]="duplicate-decl-specifier", | ||
[ | [e]="duplicate \'%0\' declaration specifier", | ||
[ | [f]=p, | ||
[ | [h]="duplicate \'(.*?)\' declaration specifier", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wduplicate\\-decl\\-specifier[^\\]]*\\]", | ||
[ | [g]=r, | ||
[i]={"150ca5309e7c",1538608169,"[SEMA] split ExtWarn dupl-decl-spec\'s into Extension and ExtWarn","[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","[SEMA] split ExtWarn dupl-decl-spec\'s into Extension and ExtWarn"}, | ||
[j]={{K,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)"},{ | [j]={{K,4488,"#include \"clang/Basic/TransformTypeTraits.def\"\n // ...\n // If the specifier wasn\'t legal, issue a diagnostic.\n if (isInvalid) {\n // ...\n if (DiagID == diag::ext_duplicate_declspec || DiagID == diag::ext_warn_duplicate_declspec || DiagID == diag::err_duplicate_declspec)"},{Gc,482,"template <class T> static bool BadSpecifier(T TNew, T TPrev, const char *&PrevSpec, unsigned &DiagID, bool IsExtension = true) {\n // ...\n if (TNew != TPrev)\n // ...\n else\n DiagID = IsExtension ? diag::ext_warn_duplicate_declspec : diag::warn_duplicate_declspec;"},{Gc,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;"},{Gc,1093,"bool DeclSpec::setModulePrivateSpec(SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID) {\n if (isModulePrivateSpecified()) {\n // ...\n DiagID = diag::ext_warn_duplicate_declspec;"}} | ||
}, | }, | ||
["ext_warn_gnu_final"]={ | ["ext_warn_gnu_final"]={ | ||
[ | [a]="__final is a GNU extension, consider using C++11 final [-Wgcc-compat]", | ||
[c]= | [c]=o, | ||
[ | [d]=q, | ||
[ | [m]={Ic}, | ||
[ | [l]=Ic, | ||
[ | [e]="__final is a GNU extension, consider using C++11 final", | ||
[ | [f]=p, | ||
[ | [h]="__final is a GNU extension, consider using C\\+\\+11 final", | ||
[ | [b]=" \\[(?:\\-Werror,)?\\-Wgcc\\-compat[^\\]]*\\]", | ||
[ | [g]=y, | ||
[i]={"276055bb2f4a",1469788968,"[GCC] Support for __final specifier","[GCC] Support for __final specifier"}, | [i]={"276055bb2f4a",1469788968,"[GCC] Support for __final specifier","[GCC] Support for __final specifier"}, | ||
[j]={{O,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);"},{O,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);"}}, | [j]={{O,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 // ...\n if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n // ...\n } else if (Specifier == VirtSpecifiers::VS_Sealed) {\n // ...\n } else if (Specifier == VirtSpecifiers::VS_Abstract) {\n // ...\n } else if (Specifier == VirtSpecifiers::VS_GNU_Final) {\n Diag(Tok.getLocation(), diag::ext_warn_gnu_final);"},{O,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 // ...\n // Parse the optional \'final\' keyword.\n if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n while (true) {\n // ...\n if (TagType == DeclSpec::TST_interface)\n // ...\n else if (Specifier == VirtSpecifiers::VS_Final)\n // ...\n else if (Specifier == VirtSpecifiers::VS_Sealed)\n // ...\n else if (Specifier == VirtSpecifiers::VS_Abstract)\n // ...\n else if (Specifier == VirtSpecifiers::VS_GNU_Final)\n Diag(FinalLoc, diag::ext_warn_gnu_final);"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 10,007: | Line 10,006: | ||
}, | }, | ||
["ext_wchar_t_sign_spec"]={ | ["ext_wchar_t_sign_spec"]={ | ||
[ | [a]="\'A\' cannot be signed or unsigned [-Wsigned-unsigned-wchar]", | ||
[c]=s, | [c]=s, | ||
[ | [d]=R, | ||
[ | [m]={"signed-unsigned-wchar"}, | ||
[ | [l]="signed-unsigned-wchar", | ||
[ | [e]="\'%0\' cannot be signed or unsigned", | ||
[ | [f]=S, | ||
[ | [h]="\'(.*?)\' cannot be signed or unsigned", | ||
[ | [b]=" \\[[^\\]]*\\-Wsigned\\-unsigned\\-wchar[^\\]]*\\]", | ||
[ | [g]=n, | ||
[i]={"e8b659fc1ff0",1564430446,"Give the \'signed/unsigned wchar_t\' extension a warning flag, and follow","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","Give the \'signed/unsigned wchar_t\' extension a warning flag, and follow"}, | ||
[j]={{U,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());"},{U,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());"}}, | [j]={{U,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 // ...\n case DeclSpec::TST_wchar:\n if (DS.getTypeSpecSign() == TypeSpecifierSign::Unspecified)\n // ...\n else if (DS.getTypeSpecSign() == TypeSpecifierSign::Signed) {\n S.Diag(DS.getTypeSpecSignLoc(), diag::ext_wchar_t_sign_spec) << DS.getSpecifierName(DS.getTypeSpecType(), Context.getPrintingPolicy());"},{U,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 // ...\n case DeclSpec::TST_wchar:\n if (DS.getTypeSpecSign() == TypeSpecifierSign::Unspecified)\n // ...\n else if (DS.getTypeSpecSign() == TypeSpecifierSign::Signed) {\n // ...\n } else {\n // ...\n S.Diag(DS.getTypeSpecSignLoc(), diag::ext_wchar_t_sign_spec) << DS.getSpecifierName(DS.getTypeSpecType(), Context.getPrintingPolicy());"}}, | ||
[k]={ | [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]"} | ["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]"} | ||
Line 10,024: | Line 10,023: | ||
}, | }, | ||
["fatal_too_many_errors"]={ | ["fatal_too_many_errors"]={ | ||
[ | [a]="too many errors emitted, stopping now [-ferror-limit=]", | ||
[c]="fatal error: ", | [c]="fatal error: ", | ||
[ | [d]="Fatal", | ||
[ | [e]="too many errors emitted, stopping now [-ferror-limit=]", | ||
[ | [f]="fatal error\\: ", | ||
[ | [h]="too many errors emitted, stopping now \\[\\-ferror\\-limit\\=\\]", | ||
[ | [b]=r, | ||
[ | [g]=r, | ||
[i]={"75a0393eb580",1270671718,"add capabilities to stop emitting errors after some limit.","add capabilities to stop emitting errors after some limit."}, | [i]={"75a0393eb580",1270671718,"add capabilities to stop emitting errors after some limit.","add capabilities to stop emitting errors after some limit."}, | ||
[j]={{ | [j]={{Wc,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 // ...\n if (Result == diag::Severity::Fatal && Diag.CurDiagID != diag::fatal_too_many_errors && Diag.FatalsAsError)"},{Wc,806,"/// ProcessDiag - This is the method used to report a diagnostic that is\n/// finally fully formed.\nbool DiagnosticIDs::ProcessDiag(DiagnosticsEngine &Diag) const {\n // ...\n if (DiagLevel >= DiagnosticIDs::Error) {\n // ...\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);"},{Wc,813,"/// ProcessDiag - This is the method used to report a diagnostic that is\n/// finally fully formed.\nbool DiagnosticIDs::ProcessDiag(DiagnosticsEngine &Diag) const {\n // ...\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 // ...\n if (DiagOpts.ShowOptionNames) {\n // ...\n if (Info.getID() == diag::fatal_too_many_errors) {"},{"clang/tools/libclang/CXStoredDiagnostic.cpp",62,"CXString CXStoredDiagnostic::getDiagnosticOption(CXString *Disable) const {\n // ...\n if (ID == diag::fatal_too_many_errors) {"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/concept-fatal-error.cpp"]={"fatal error: too many errors emitted, stopping now [-ferror-limit=]"} | ["clang/test/SemaCXX/concept-fatal-error.cpp"]={"fatal error: too many errors emitted, stopping now [-ferror-limit=]"} | ||
Line 10,039: | Line 10,038: | ||
}, | }, | ||
["note_access_constrained_by_path"]={ | ["note_access_constrained_by_path"]={ | ||
[ | [a]="constrained by ...... inheritance here", | ||
[c]="note: ", | [c]="note: ", | ||
[ | [d]="Note", | ||
[ | [e]="constrained by %select{|implicitly }1%select{private|protected}0 inheritance here", | ||
[ | [f]="note\\: ", | ||
[ | [h]="constrained by (?:|implicitly )(?:private|protected) inheritance here", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"553c0796eedc",1264207592,"Implement elementary access control.","Implement elementary access control."}, | [i]={"553c0796eedc",1264207592,"Implement elementary access control.","Implement elementary access control."}, | ||
[j]={{ | [j]={{wc,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 // ...\n if (entity.isMemberAccess() || constrainingBase + 1 != path.end()) {\n diagnostic = diag::note_access_constrained_by_path;"}}, | ||
[k]={ | [k]={ | ||
["clang/test/SemaCXX/microsoft-super.cpp"]={"clang/test/SemaCXX/microsoft-super.cpp:23:14: note: constrained by private inheritance here"} | ["clang/test/SemaCXX/microsoft-super.cpp"]={"clang/test/SemaCXX/microsoft-super.cpp:23:14: note: constrained by private inheritance here"} | ||
Line 10,054: | Line 10,053: | ||
}, | }, | ||
["note_access_natural"]={ | ["note_access_natural"]={ | ||
[ | [a]="...declared ... here", | ||
[c]="note: ", | [c]="note: ", | ||
[ | [d]="Note", | ||
[ | [e]="%select{|implicitly }1declared %select{private|protected}0 here", | ||
[ | [f]="note\\: ", | ||
[ | [h]="(?:|implicitly )declared (?:private|protected) here", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"553c0796eedc",1264207592,"Implement elementary access control.","Implement elementary access control."}, | [i]={"553c0796eedc",1264207592,"Implement elementary access control.","Implement elementary access control."}, | ||
[j]={{ | [j]={{wc,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 // ...\n S.Diag(D->getLocation(), diag::note_access_natural) << (unsigned)(D->getAccess() == AS_protected) << isImplicit;"},{wc,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 // ...\n if (entity.isMemberAccess() || constrainingBase + 1 != path.end()) {\n // ...\n } else {\n diagnostic = diag::note_access_natural;"}}, | ||
[k]={ | [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"} | ["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"} | ||
Line 10,069: | Line 10,068: | ||
}, | }, | ||
["note_access_protected_restricted_ctordtor"]={ | ["note_access_protected_restricted_ctordtor"]={ | ||
[ | [a]="protected ... can only be used to ... a base class subobject", | ||
[c]="note: ", | [c]="note: ", | ||
[ | [d]="Note", | ||
[ | [e]="protected %select{constructor|destructor}0 can only be used to %select{construct|destroy}0 a base class subobject", | ||
[ | [f]="note\\: ", | ||
[ | [h]="protected (?:constructor|destructor) can only be used to (?:construct|destroy) a base class subobject", | ||
[ | [b]=r, | ||
[ | [g]=n, | ||
[i]={"5dadb65e0722",1333767860,"Fix several problems with protected access control:","Fix several problems with protected access control:"}, | [i]={"5dadb65e0722",1333767860,"Fix several problems with protected access control:","Fix several problems with protected access control:"}, | ||
[j]={{ | [j]={{wc,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 // ...\n for (EffectiveContext::record_iterator I = EC.Records.begin(), E = EC.Records.end(); I != E; ++I) {\n // ...\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]={ | [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"} | ["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