Module:ClangDiags/DiagsLongData4: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
No edit summary
 
Line 1: Line 1:
local a="";
local a="";
local b="commit";
local b="id_hist";
local c="id_hist";
local c="regex2";
local d="message_hist";
local d="source";
local e="hierarchical_hist";
local e="category_hist";
local f="regex1";
local f="regex3";
local g="regex2";
local g="commit";
local h="regex3";
local h="regex1";
local i="category_hist";
local i="message_hist";
local j="source";
local j="hierarchical_hist";
local k="(?:error|fatal error)\\: ";
local k="(?:error|fatal error)\\: ";
local l="tests2";
local l="tests2";
local m="Semantic Issue";
local m="Semantic Issue";
local n="10.0";
local n="16.0";
local o="clang/lib/Sema/SemaDecl.cpp";
local o="11.0";
local p="16.0";
local p="clang/lib/Sema/SemaDecl.cpp";
local q="7.0";
local q="clang/lib/Sema/SemaExpr.cpp";
local r="5.0";
local r="9.0";
local s="15.0";
local s="15.0";
local t="6.0";
local t="clang/lib/Sema/SemaDeclCXX.cpp";
local u="13.0";
local u="clang/lib/Sema/SemaDeclAttr.cpp";
local v="clang/lib/Lex/ModuleMap.cpp";
local v="None";
local w="None";
local w="13.0";
local x="11.0";
local x="5a8987ca5113";
local y="Parse Issue";
local y="Update tablegen diagnostic files to be in sync with the def files.";
local z="9.0";
local z="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local A="Lexical or Preprocessor Issue";
local A="7.0";
local B="destructor";
local B="14.0";
local C="constructor";
local C="Parse Issue";
local D="12.0";
local D="clang/lib/Sema/DeclSpec.cpp";
local E="method F";
local E="5.0";
local F="clang/lib/Sema/SemaStmt.cpp";
local F="10.0";
local G="clang/lib/Sema/SemaExprObjC.cpp";
local G="clang/lib/Sema/SemaType.cpp";
local H="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local H="clang/lib/Sema/SemaInit.cpp";
local I="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomplete) test conversions of the existing def files to this format.\n\nllvm-svn: 66064";
local I="clang/lib/Sema/SemaExprCXX.cpp";
local J="b1c4d5507fad";
local J="6.0";
local K="clang/lib/Sema/SemaDeclAttr.cpp";
local K="clang/lib/Sema/SemaChecking.cpp";
local L="defined here";
local L="Implement P2361 Unevaluated string literals\n\nThis patch proposes to handle in an uniform fashion\nthe parsing of strings that are never evaluated,\nin asm statement, static assert, attrributes, extern,\netc.\n\nUnevaluated strings are UTF-8 internally and so currently\nbehave as narrow strings, but these things will diverge with\nD93031.\n\nThe big question both for this patch and the P2361 paper\nis whether we risk breaking code by disallowing\nencoding prefixes in this context.\nI hope this patch may allow to gather some data on that.\n\nFuture work:\nImprove the rendering of unicode characters, line break\nand so forth in static-assert messages\n\nReviewed By: aaron.ballman, shafik\n\nDifferential Revision: https://reviews.llvm.org/D105759";
local M="clang/lib/Sema/SemaObjCProperty.cpp";
local M="Implement P2361 Unevaluated string literals";
local N="clang/lib/Parse/ParseObjc.cpp";
local N="95f50964fbf5";
local O="Modules Issue";
local O="Lexical or Preprocessor Issue";
local P="clang/lib/Sema/SemaPseudoObject.cpp";
local P="clang/lib/Parse/ParseDecl.cpp";
local Q="clang/lib/Sema/SemaDeclCXX.cpp";
local Q="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomplete) test conversions of the existing def files to this format.\n\nllvm-svn: 66064";
local R="definition in module \'C\'";
local R="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local S="14.0";
local S="b1c4d5507fad";
local T="clang/lib/Sema/SemaDeclObjC.cpp";
local T="Lambda Issue";
local U="clang/lib/AST/ODRDiagsEmitter.cpp";
local U="clang/lib/Parse/ParseDeclCXX.cpp";
local V="fatal error\\: ";
local V="8.0";
local W="clang/lib/Sema/SemaExpr.cpp";
local W=" (F vs G)";
local X="clang/lib/Sema/SemaChecking.cpp";
local X="lvalue";
local Y="clang/lib/Sema/SemaTemplate.cpp";
local Y="rvalue";
local Z=" found ";
local Z="a block element";
local ab="A has different definitions in different modules; first difference is ";
local ab="clang/lib/Lex/LiteralSupport.cpp";
local bb="AST Deserialization Issue";
local bb="clang/lib/Sema/SemaExprObjC.cpp";
local cb="clang/lib/Sema/SemaType.cpp";
local cb="clang/lib/Parse/Parser.cpp";
local db="8.0";
local db="clang/lib/Parse/ParseExprCXX.cpp";
local eb=" is ";
local eb="volatile";
local fb="Update tablegen diagnostic files to be in sync with the def files.";
local fb="[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n  turned out to be ineffective anyway since functions can be defined later\n   in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520";
local gb="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local gb="clang/lib/Sema/SemaCoroutine.cpp";
local hb="clang/lib/Parse/ParseDecl.cpp";
local hb="931fcd3ba011";
local ib="5a8987ca5113";
local ib="[WebAssembly] Improve clang diagnostics for wasm attributes";
local jb="e65b086e07a6";
local jb=" ";
local kb="Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,";
local kb="clang/lib/Sema/SemaTemplate.cpp";
local lb="Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,\nNSNumber, and boolean literals.  This includes both Sema and Codegen support.\nIncluded is also support for new Objective-C container subscripting.\n\nMy apologies for the large patch.  It was very difficult to break apart.\nThe patch introduces changes to the driver as well to cause clang to link\nin additional runtime support when needed to support the new language features.\n\nDocs are forthcoming to document the implementation and behavior of these features.\n\nllvm-svn: 152137";
local lb="const";
local mb="class";
local mb="12.0";
local nb="clang/lib/Sema/SemaModule.cpp";
local nb="clang/lib/Sema/JumpDiagnostics.cpp";
local ob="method";
local ob="destructor";
local pb="b83b23275b74";
local pb="a member subobject";
local qb="Introduce -Wreserved-identifier";
local qb="Coroutines Issue";
local rb="c094e7dc4b3f";
local rb="clang/lib/Sema/SemaDeclObjC.cpp";
local sb="Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095";
local sb="11.1";
local tb="clang/lib/Sema/SemaExprCXX.cpp";
local tb="fatal error\\: ";
local ub="[SYCL] Add sycl_kernel attribute for accelerated code outlining\n\nSYCL is single source offload programming model relying on compiler to\nseparate device code (i.e. offloaded to an accelerator) from the code\nexecuted on the host.\n\nHere is code example of the SYCL program to demonstrate compiler\noutlining work:\n\n```\nint foo(int x) { return ++x; }\nint bar(int x) { throw std::exception(\"CPU code only!\"); }\n...\nusing namespace cl::sycl;\nqueue Q;\nbuffer<int, 1> a(range<1>{1024});\nQ.submit([&](handler& cgh) {\n  auto A = a.get_access<access::mode::write>(cgh);\n  cgh.parallel_for<init_a>(range<1>{1024}, [=](id<1> index) {\n    A[index] = index[0] + foo(42);\n  });\n}\n...\n```\n\nSYCL device compiler must compile lambda expression passed to\ncl::sycl::handler::parallel_for method and function foo called from this\nlambda expression for an \"accelerator\". SYCL device compiler also must\nignore bar function as it\'s not required for offloaded code execution.\n\nThis patch adds the sycl_kernel attribute, which is used to mark code\npassed to cl::sycl::handler::parallel_for as \"accelerated code\".\n\nAttribute must be applied to function templates which parameters include\nat least \"kernel name\" and \"kernel function object\". These parameters\nwill be used to establish an ABI between the host application and\noffloaded part.\n\nReviewers: jlebar, keryell, Naghasan, ABataev, Anastasia, bader, aaron.ballman, rjmccall, rsmith\n\nReviewed By: keryell, bader\n\nSubscribers: mgorny, OlegM, ArturGainullin, agozillon, aaron.ballman, ebevhan, Anastasia, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D60455\n\nSigned-off-by: Alexey Bader <alexey.bader@intel.com>";
local ub=": different exception specifications";
local vb="no ";
local vb="a value";
local wb="clang/lib/Frontend/CompilerInstance.cpp";
local wb=": different number of parameters (F vs G)";
local xb="[SYCL] Add sycl_kernel attribute for accelerated code outlining";
local xb=": type mismatch at F parameter";
local yb="typedef";
local yb=" (G vs H)";
local zb="Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545";
local zb=": different return type";
local Ab="Mass-rename the handful of error_* diagnostics to err_*.";
local Ab="restrict";
local Bb="f881267db9a9";
local Bb="none";
local Cb="Introduce basic support for parsing module map files.\n\nModule map files provide a way to map between headers and modules, so\nthat we can layer a module system on top of existing headers without\nchanging those headers at all.\n\nThis commit introduces the module map file parser and the module map\nthat it generates, and wires up the module map file parser so that\nwe\'ll automatically find module map files as part of header\nsearch. Note that we don\'t yet use the information stored in the\nmodule map.\n\nllvm-svn: 144402";
local Cb="const and restrict";
local Db="Introduce basic support for parsing module map files.";
local Db=" of incompatible type";
local Eb="type alias";
local Eb="const and volatile";
local Fb="[WebAssembly] Improve clang diagnostics for wasm attributes\n\nThis patch addresses the review comments on r352930:\n\n - Removes redundant diagnostic checking code\n - Removes errnoneous use of diag::err_alias_is_definition, which\n  turned out to be ineffective anyway since functions can be defined later\n   in the translation unit and avoid detection.\n - Adds a test for various invalid cases for import_name and import_module.\n\nDifferential Revision: https://reviews.llvm.org/D59520";
local Fb="volatile and restrict";
local Gb="[WebAssembly] Improve clang diagnostics for wasm attributes";
local Gb="const, volatile, and restrict";
local Hb="931fcd3ba011";
local Hb="a new value";
local Ib="clang/lib/Serialization/ASTReader.cpp";
local Ib=": different classes";
local Jb="5e77d76c953d";
local Jb="with an ";
local Kb="Basic support for Microsoft property declarations and";
local Kb="a parameter of CF audited function";
local Lb="Basic support for Microsoft property declarations and\nreferences thereto.\n\nPatch by Tong Shen!\n\nllvm-svn: 179585";
local Lb="an array element";
local Mb="clang/test/Parser/MicrosoftExtensions.cpp";
local Mb="a base class";
local Nb="clang/lib/Parse/Parser.cpp";
local Nb="a constructor delegation";
local Ob="718292f260bf";
local Ob="a vector element";
local Pb="clang/lib/Frontend/FrontendAction.cpp";
local Pb="an exception object";
local Qb="cpu_dispatch";
local Qb="a complex element";
local Rb="cpu_specific";
local Rb="a lambda capture";
local Sb="target";
local Sb="a compound literal initializer";
local Tb="clang/lib/Sema/SemaExprMember.cpp";
local Tb=" of type D";
local Ub="attribute \'";
local Ub="a related result";
local Vb="clang/test/SemaCXX/attr-musttail.cpp";
local Vb="return object";
local Wb="Add a warning for not packing non-POD members in packed structs\n\nDifferential Revision: https://reviews.llvm.org/D118511";
local Wb="a parameter";
local Xb="Add a warning for not packing non-POD members in packed structs";
local Xb="of type B with an ";
local Yb="ec273d3e3a8c";
local Yb="a variable";
local Zb="Implement Attribute Target MultiVersioning";
local Zb="clang/lib/Parse/ParseExpr.cpp";
local ac="Implement Attribute Target MultiVersioning\n\nGCC\'s attribute \'target\', in addition to being an optimization hint,\nalso allows function multiversioning. We currently have the former\nimplemented, this is the latter\'s implementation.\n\nThis works by enabling functions with the same name/signature to coexist,\nso that they can all be emitted. Multiversion state is stored in the\nFunctionDecl itself, and SemaDecl manages the definitions.\nNote that it ends up having to permit redefinition of functions so\nthat they can all be emitted. Additionally, all versions of the function\nmust be emitted, so this also manages that.\n\nNote that this includes some additional rules that GCC does not, since\ndefining something as a MultiVersion function after a usage has been made illegal.\n\nThe only \'history rewriting\' that happens is if a function is emitted before\nit has been converted to a multiversion\'ed function, at which point its name\nneeds to be changed.\n\nFunction templates and virtual functions are NOT yet supported (not supported\nin GCC either).\n\nAdditionally, constructors/destructors are disallowed, but the former is \nplanned.\n\nllvm-svn: 322028";
local ac="Modules Issue";
local bc="281d20b601c8";
local bc="cannot initialize ";
local cc="clang/lib/Sema/SemaCXXScopeSpec.cpp";
local cc="c28aee6a51a9";
local dc="default argument";
local dc="clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp";
local ec="data member";
local ec="move assignment operator";
local fc="clang/test/Modules/odr_hash.cpp";
local fc="copy assignment operator";
local gc="definition";
local gc="Improve diagnostics for ill-formed literal operator declarations.";
local hc="friend declaration";
local hc="move constructor";
local ic="field";
local ic="copy constructor";
local jc="static assert";
local jc="clang/lib/Frontend/CompilerInvocation.cpp";
local kc="Implement P2361 Unevaluated string literals";
local kc="Improve diagnostics for ill-formed literal operator declarations.\n\nPatch by Erik Pilkington!\n\nllvm-svn: 261034";
local lc="clang/test/SemaObjC/objc-container-subscripting.m";
local mc="clang/test/Sema/attr-target-mv.c";
local nc="95f50964fbf5";
local oc="clang/test/SemaObjC/parameterized_classes.m";
local pc="clang/lib/Sema/SemaOverload.cpp";
local qc="Parsing, semantic analysis, and AST for Objective-C type parameters.";
local rc="85f3f9513dbc";
local sc="Generics Issue";
local tc="14f6bfcb52e7";
local uc="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local vc="[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574";
local wc="clang/lib/Parse/ParseStmtAsm.cpp";
local xc="Parsing, semantic analysis, and AST for Objective-C type parameters.\n\nProduce type parameter declarations for Objective-C type parameters,\nand attach lists of type parameters to Objective-C classes,\ncategories, forward declarations, and extensions as\nappropriate. Perform semantic analysis of type bounds for type\nparameters, both in isolation and across classes/categories/extensions\nto ensure consistency.\n\nAlso handle (de-)serialization of Objective-C type parameter lists,\nalong with sundry other things one must do to add a new declaration to\nClang.\n\nNote that Objective-C type parameters are typedef name declarations,\nlike typedefs and C++11 type aliases, in support of type erasure.\n\nPart of rdar://problem/6294649.\n\nllvm-svn: 241541";
local yc="declaration";
local zc="Parse inferred submodules in module maps, track their contents in\nModule, and (de-)serialize this information. Semantics of inferred\nsubmodules to follow.\n\nllvm-svn: 145864";
local Ac="clang/lib/Sema/AnalysisBasedWarnings.cpp";
local Bc="no";
local Cc="734410916a6d";
local Dc="Implement P2361 Unevaluated string literals\n\nThis patch proposes to handle in an uniform fashion\nthe parsing of strings that are never evaluated,\nin asm statement, static assert, attrributes, extern,\netc.\n\nUnevaluated strings are UTF-8 internally and so currently\nbehave as narrow strings, but these things will diverge with\nD93031.\n\nThe big question both for this patch and the P2361 paper\nis whether we risk breaking code by disallowing\nencoding prefixes in this context.\nI hope this patch may allow to gather some data on that.\n\nFuture work:\nImprove the rendering of unicode characters, line break\nand so forth in static-assert messages\n\nReviewed By: aaron.ballman, shafik\n\nDifferential Revision: https://reviews.llvm.org/D105759";
local Ec="Parse inferred submodules in module maps, track their contents in";


return {
return {
["err_matrix_incomplete_index"]={
["err_func_def_incomplete_result"]={
[c]={{nil,x,"err_matrix_incomplete_index"}},
[b]="err_func_def_incomplete_result",
[d]={{nil,x,"single subscript expressions are not allowed for matrix values"}},
[i]="incomplete result type %0 in function definition",
[e]={{nil,x,"single subscript expressions are not allowed for matrix values"}},
[j]="incomplete result type A in function definition",
[f]=k,
[h]=k,
[g]="single subscript expressions are not allowed for matrix values",
[c]="incomplete result type (.*?) in function definition",
[h]=a,
[f]=a,
[i]={{nil,x,w}},
[e]=m,
[b]={Hb,1576908663,Gb,Fb},
[g]={x,1237025389,y,z},
[j]={{W,21634,"/// 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::IncompleteMatrixIdx:\n    Diag(cast<MatrixSubscriptExpr>(E->IgnoreParens())->getRowIdx()->getBeginLoc(), diag::err_matrix_incomplete_index);"}},
[d]={{p,15348,"Decl *Sema::ActOnStartOfFunctionDef(Scope *FnBodyScope, Decl *D, SkipBodyInfo *SkipBody, FnBodyKind BodyKind) {\n  // ...\n  if (!ResultType->isDependentType() && !ResultType->isVoidType() && !FD->isInvalidDecl() && BodyKind != FnBodyKind::Delete && (RequireCompleteType(FD->getLocation(), ResultType, diag::err_func_def_incomplete_result) || RequireNonAbstractType(FD->getLocation(), FD->getReturnType(), diag::err_abstract_type_in_decl, AbstractReturnType)))"},{rb,378,"/// ActOnStartOfObjCMethodDef - This routine sets up parameters; invisible\n/// and user declared, in the method definition\'s AST.\nvoid Sema::ActOnStartOfObjCMethodDef(Scope *FnBodyScope, Decl *D) {\n  // ...\n  if (!ResultType->isDependentType() && !ResultType->isVoidType() && !MDecl->isInvalidDecl() && RequireCompleteType(MDecl->getLocation(), ResultType, diag::err_func_def_incomplete_result))"}},
[l]={
[l]={
["clang/test/Sema/matrix-type-operators.c"]={"clang/test/Sema/matrix-type-operators.c:171:5: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:174:6: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:181:16: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:186:17: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:223:17: error: single subscript expressions are not allowed for matrix values"}
["clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.general/p2.cpp"]={"clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.general/p2.cpp:5:12: error: incomplete result type \'Incomplete\' in function definition"}
}
}
},
},
["err_matrix_index_not_integer"]={
["err_func_def_no_params"]={
[c]={{nil,x,"err_matrix_index_not_integer"}},
[b]="err_func_def_no_params",
[d]={{nil,x,"matrix %select{row|column}0 index is not an integer"}},
[i]="function definition does not declare parameters",
[e]={{nil,x,{"matrix ",{"row","column"}," index is not an integer"}}},
[j]="function definition does not declare parameters",
[f]=k,
[h]=k,
[g]="matrix (?:row|column) index is not an integer",
[c]="function definition does not declare parameters",
[h]=a,
[f]=a,
[i]={{nil,x,w}},
[e]=C,
[b]={Hb,1576908663,Gb,Fb},
[g]={S,1236199783,R,Q},
[j]={{W,5171,"ExprResult Sema::CreateBuiltinMatrixSubscriptExpr(Expr *Base, Expr *RowIdx, Expr *ColumnIdx, SourceLocation RBLoc) {\n  // ...\n  // Check that IndexExpr is an integer expression. If it is a constant\n  // expression, check that it is less than Dim (= the number of elements in the\n // corresponding dimension).\n auto IsIndexValid = [&](Expr *IndexExpr, unsigned Dim, bool IsColumnIdx) -> Expr * {\n   if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent()) {\n     Diag(IndexExpr->getBeginLoc(), diag::err_matrix_index_not_integer) << IsColumnIdx;"}},
[d]={{U,2971,"/// 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  // Check for a member function definition.\n  if (BitfieldSize.isUnset()) {\n   // ...\n   if (DefinitionKind != FunctionDefinitionKind::Declaration) {\n     if (!DeclaratorInfo.isFunctionDeclarator()) {\n       Diag(DeclaratorInfo.getIdentifierLoc(), diag::err_func_def_no_params);"}},
[l]={
[l]={
["clang/test/SemaObjC/matrix-type-operators.m"]={"clang/test/SemaObjC/matrix-type-operators.m:14:12: error: matrix row index is not an integer","clang/test/SemaObjC/matrix-type-operators.m:14:22: error: matrix column index is not an integer"}
["clang/test/Parser/cxx-class.cpp"]={"clang/test/Parser/cxx-class.cpp:77:9: error: function definition does not declare parameters","clang/test/Parser/cxx-class.cpp:87:10: error: function definition does not declare parameters"}
}
}
},
},
["err_matrix_index_outside_range"]={
["err_func_returning_array_function"]={
[c]={{nil,x,"err_matrix_index_outside_range"}},
[b]="err_func_returning_array_function",
[d]={{nil,x,"matrix %select{row|column}0 index is outside the allowed range [0, %1)"}},
[i]="function cannot return %select{array|function}0 type %1",
[e]={{nil,x,{"matrix ",{"row","column"}," index is outside the allowed range [0, B)"}}},
[j]={{nil,nil,{"function cannot return ",{"array","function"}," type B"}}},
[f]=k,
[h]=k,
[g]="matrix (?:row|column) index is outside the allowed range \\[0, (.*?)\\)",
[c]="function cannot return (?:array|function) type (.*?)",
[h]=a,
[f]=a,
[i]={{nil,x,w}},
[e]=m,
[b]={Hb,1576908663,Gb,Fb},
[g]={x,1237025389,y,z},
[j]={{W,5303,"ExprResult Sema::CreateBuiltinMatrixSubscriptExpr(Expr *Base, Expr *RowIdx, Expr *ColumnIdx, SourceLocation RBLoc) {\n  // ...\n  // Check that IndexExpr is an integer expression. If it is a constant\n  // expression, check that it is less than Dim (= the number of elements in the\n  // corresponding dimension).\n  auto IsIndexValid = [&](Expr *IndexExpr, unsigned Dim, bool IsColumnIdx) -> Expr * {\n    // ...\n    if (std::optional<llvm::APSInt> Idx = IndexExpr->getIntegerConstantExpr(Context)) {\n      if ((*Idx < 0 || *Idx >= Dim)) {\n        Diag(IndexExpr->getBeginLoc(), diag::err_matrix_index_outside_range) << IsColumnIdx << Dim;"}},
[d]={{q,21192,"/// Rebuilds a call expression which yielded __unknown_anytype.\nExprResult RebuildUnknownAnyExpr::VisitCallExpr(CallExpr *E) {\n  // ...\n  // Verify that this is a legal result type of a function.\n  if (DestType->isArrayType() || DestType->isFunctionType()) {\n    unsigned diagID = diag::err_func_returning_array_function;"},{q,21341,"ExprResult RebuildUnknownAnyExpr::VisitObjCMessageExpr(ObjCMessageExpr *E) {\n  // Verify that this is a legal result type of a call.\n  if (DestType->isArrayType() || DestType->isFunctionType()) {\n    S.Diag(E->getExprLoc(), diag::err_func_returning_array_function) << DestType->isFunctionType() << DestType;"},{G,2912,"bool Sema::CheckFunctionReturnType(QualType T, SourceLocation Loc) {\n  if (T->isArrayType() || T->isFunctionType()) {\n    Diag(Loc, diag::err_func_returning_array_function) << T->isFunctionType() << T;"},{G,5267,"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      // C99 6.7.5.3p1: The return type may not be a function or array type.\n      // For conversion functions, we\'ll diagnose this particular error later.\n      if (!D.isInvalidType() && (T->isArrayType() || T->isFunctionType()) && (D.getName().getKind() != UnqualifiedIdKind::IK_ConversionFunctionId)) {\n        unsigned diagID = diag::err_func_returning_array_function;"}},
[l]={
[l]={
["clang/test/Sema/matrix-type-operators.c"]={"clang/test/Sema/matrix-type-operators.c:154:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:156:8: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:158:8: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:160:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:162:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:164:8: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:166:5: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:179:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:210:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:212:19: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:214:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:216:16: error: matrix row index is outside the allowed range [0, 5)","clang/test/Sema/matrix-type-operators.c:218:20: error: matrix column index is outside the allowed range [0, 10)","clang/test/Sema/matrix-type-operators.c:220:17: error: matrix row index is outside the allowed range [0, 5)"}
["clang/test/Parser/declarators.c"]={"clang/test/Parser/declarators.c:9:7: error: function cannot return function type \'int (void)\'"}
}
}
},
},
["err_matrix_separate_incomplete_index"]={
["err_func_returning_qualified_void"]={
[c]={{nil,x,"err_matrix_separate_incomplete_index"}},
["groups"]={"qualified-void-return-type"},
[d]={{nil,x,"matrix row and column subscripts cannot be separated by any expression"}},
["maingroup"]="qualified-void-return-type",
[e]={{nil,x,"matrix row and column subscripts cannot be separated by any expression"}},
[b]="err_func_returning_qualified_void",
[f]=k,
[i]="function cannot return qualified void type %0",
[g]="matrix row and column subscripts cannot be separated by any expression",
[j]="function cannot return qualified void type A",
[h]=a,
[h]="(?:warning|error|fatal error)\\: ",
[i]={{nil,x,w}},
[c]="function cannot return qualified void type (.*?)",
[b]={Hb,1576908663,Gb,Fb},
[f]=" \\[(?:\\-Werror,)?\\-Wqualified\\-void\\-return\\-type[^\\]]*\\]",
[j]={{W,5016,"ExprResult Sema::ActOnArraySubscriptExpr(Scope *S, Expr *base, SourceLocation lbLoc, MultiExprArg ArgExprs, SourceLocation rbLoc) {\n  // ...\n  // The matrix subscript operator ([][])is considered a single operator.\n // Separating the index expressions by parenthesis is not allowed.\n if (base && !base->getType().isNull() && base->hasPlaceholderType(BuiltinType::IncompleteMatrixIdx) && !isa<MatrixSubscriptExpr>(base)) {\n   Diag(base->getExprLoc(), diag::err_matrix_separate_incomplete_index) << SourceRange(base->getBeginLoc(), rbLoc);"}},
[e]=m,
[g]={"c116802ef387",1421340353,"PR 20146","PR 20146\nreject CV void return type on C definitions per 6.9.1/3\n\nllvm-svn: 226178"},
[d]={{G,5361,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::Function: {\n      // ...\n     // cv-qualifiers on return types are pointless except when the type is a\n      // class type in C++.\n     if ((T.getCVRQualifiers() || T->isAtomicType()) && !(S.getLangOpts().CPlusPlus && (T->isDependentType() || T->isRecordType()))) {\n       if (T->isVoidType() && !S.getLangOpts().CPlusPlus && D.getFunctionDefinitionKind() == FunctionDefinitionKind::Definition) {\n          // ...\n          S.Diag(DeclType.Loc, diag::err_func_returning_qualified_void) << T;"}},
[l]={
[l]={
["clang/test/Sema/matrix-type-operators.c"]={"clang/test/Sema/matrix-type-operators.c:168:3: error: matrix row and column subscripts cannot be separated by any expression","clang/test/Sema/matrix-type-operators.c:184:3: error: matrix row and column subscripts cannot be separated by any expression"}
["clang/test/SemaObjC/block-omitted-return-type.m"]={"clang/test/SemaObjC/block-omitted-return-type.m:26:34: warning: function cannot return qualified void type \'const void\' [-Wqualified-void-return-type]"}
}
}
},
},
["err_matrix_subscript_comma"]={
["err_function_attribute_mismatch"]={
[c]={{nil,x,"err_matrix_subscript_comma"}},
[b]={{nil,E,"err_function_attribute_mismatch"}},
[d]={{nil,x,"comma expressions are not allowed as indices in matrix subscript expressions"}},
[i]={{nil,E,"function declared with %0 attribute was previously declared without the %0 attribute"}},
[e]={{nil,x,"comma expressions are not allowed as indices in matrix subscript expressions"}},
[j]={{nil,E,"function declared with A attribute was previously declared without the A attribute"}},
[f]=k,
[h]=k,
[g]="comma expressions are not allowed as indices in matrix subscript expressions",
[c]="function declared with (.*?) attribute was previously declared without the (.*?) attribute",
[h]=a,
[f]=a,
[i]={{nil,x,w}},
[e]={{nil,E,m}},
[b]={Hb,1576908663,Gb,Fb},
[g]={"318a6eae06dd",1493294460,"[X86] Support of no_caller_saved_registers attribute","[X86] Support of no_caller_saved_registers attribute\n\nImplements the Clang part for no_caller_saved_registers attribute as appears here: \nhttps://gcc.gnu.org/git/?p=gcc.git;a=commit;h=5ed3cc7b66af4758f7849ed6f65f4365be8223be.\n\nDifferential Revision: https://reviews.llvm.org/D31871\n\nllvm-svn: 301535"},
[j]={{W,4997,"ExprResult Sema::ActOnArraySubscriptExpr(Scope *S, Expr *base, SourceLocation lbLoc, MultiExprArg ArgExprs, SourceLocation rbLoc) {\n  // ...\n  // Check if base and idx form a MatrixSubscriptExpr.\n //\n // Helper to check for comma expressions, which are not allowed as indices for\n // matrix subscript expressions.\n auto CheckAndReportCommaError = [this, base, rbLoc](Expr *E) {\n   if (isa<BinaryOperator>(E) && cast<BinaryOperator>(E)->isCommaOp()) {\n      Diag(E->getExprLoc(), diag::err_matrix_subscript_comma) << SourceRange(base->getBeginLoc(), rbLoc);"}},
[d]={{p,3845,"/// 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  // Merge ns_returns_retained attribute.\n  if (OldTypeInfo.getProducesResult() != NewTypeInfo.getProducesResult()) {\n    if (NewTypeInfo.getProducesResult()) {\n      Diag(New->getLocation(), diag::err_function_attribute_mismatch) << \"\'ns_returns_retained\'\";"},{p,3860,"/// 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 (OldTypeInfo.getNoCallerSavedRegs() != NewTypeInfo.getNoCallerSavedRegs()) {\n    if (NewTypeInfo.getNoCallerSavedRegs()) {\n      // ...\n      Diag(New->getLocation(), diag::err_function_attribute_mismatch) << Attr;"}},
[l]={
[l]={
["clang/test/SemaCXX/matrix-type-operators.cpp"]={"clang/test/SemaCXX/matrix-type-operators.cpp:180:6: error: comma expressions are not allowed as indices in matrix subscript expressions","clang/test/SemaCXX/matrix-type-operators.cpp:184:9: error: comma expressions are not allowed as indices in matrix subscript expressions"}
["clang/test/SemaCXX/attr-x86-no_caller_saved_registers.cpp"]={"clang/test/SemaCXX/attr-x86-no_caller_saved_registers.cpp:24:49: error: function declared with \'no_caller_saved_registers\' attribute was previously declared without the \'no_caller_saved_registers\' attribute"}
}
}
},
},
["err_maybe_falloff_nonvoid_block"]={
["err_function_decl_cmse_ns_call"]={
[c]="err_maybe_falloff_nonvoid_block",
[b]={{nil,o,"err_function_decl_cmse_ns_call"}},
[d]={{nil,n,"non-void block does not return a value in all control paths"},{z,nil,"control may reach end of non-void block"}},
[i]={{nil,o,"functions may not be declared with \'cmse_nonsecure_call\' attribute"}},
[e]={{nil,n,"non-void block does not return a value in all control paths"},{z,nil,"control may reach end of non-void block"}},
[j]={{nil,o,"functions may not be declared with \'cmse_nonsecure_call\' attribute"}},
[f]=k,
[h]=k,
[g]="non\\-void block does not return a value in all control paths",
[c]="functions may not be declared with \'cmse_nonsecure_call\' attribute",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,o,m}},
[b]={"3bf1ab48d304",1248818641,"Add noreturn support for blocks.","Add noreturn support for blocks.\n\nllvm-svn: 77377"},
[g]={hb,1576908663,ib,fb},
[j]={{Ac,599,"struct CheckFallThroughDiagnostics {\n  // ...\n  static CheckFallThroughDiagnostics MakeForBlock() {\n    // ...\n    D.diag_MaybeFallThrough_ReturnsNonVoid = diag::err_maybe_falloff_nonvoid_block;"}},
[d]={{p,9666,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (R.getCanonicalType()->castAs<FunctionType>()->getCmseNSCallAttr())\n    Diag(D.getIdentifierLoc(), diag::err_function_decl_cmse_ns_call);"}},
[l]={
[l]={
["clang/test/Sema/block-return-1.c"]={"clang/test/Sema/block-return-1.c:5:31: error: non-void block does not return a value in all control paths"}
["clang/test/Sema/arm-cmse.c"]={"clang/test/Sema/arm-cmse.c:8:6: error: functions may not be declared with \'cmse_nonsecure_call\' attribute","clang/test/Sema/arm-cmse.c:22:23: error: functions may not be declared with \'cmse_nonsecure_call\' attribute"}
}
}
},
},
["err_mem_init_not_member_or_class"]={
["err_function_declared_typedef"]={
[c]="err_mem_init_not_member_or_class",
[b]="err_function_declared_typedef",
[d]="member initializer %0 does not name a non-static data member or base class",
[i]="function definition declared \'typedef\'",
[e]="member initializer A does not name a non-static data member or base class",
[j]="function definition declared \'typedef\'",
[f]=k,
[h]=k,
[g]="member initializer (.*?) does not name a non\\-static data member or base class",
[c]="function definition declared \'typedef\'",
[h]=a,
[f]=a,
[i]=m,
[e]=C,
[b]={ib,1237025389,fb,gb},
[g]={S,1236199783,R,Q},
[j]={{Q,4509,"/// 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 (!TyD && BaseType.isNull()) {\n       Diag(IdLoc, diag::err_mem_init_not_member_or_class) << MemberOrBase << SourceRange(IdLoc, Init->getSourceRange().getEnd());"}},
[d]={{P,2190,"/// 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   // Look at the next token to make sure that this isn\'t a function\n    // declaration. We have to check this because __attribute__ might be the\n    // start of a function definition in GCC-extended K&R C.\n    if (!isDeclarationAfterDeclarator()) {\n     // Function definitions are only allowed at file scope and in C++ classes.\n      // The C++ inline method definition case is handled elsewhere, so we only\n      // need to handle the file scope definition case.\n     if (Context == DeclaratorContext::File) {\n        if (isStartOfFunctionDefinition(D)) {\n          if (DS.getStorageClassSpec() == DeclSpec::SCS_typedef) {\n            Diag(Tok, diag::err_function_declared_typedef);"},{U,2983,"/// 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  // Check for a member function definition.\n  if (BitfieldSize.isUnset()) {\n    // ...\n    if (DefinitionKind != FunctionDefinitionKind::Declaration) {\n      // ...\n      if (DS.getStorageClassSpec() == DeclSpec::SCS_typedef) {\n        Diag(DeclaratorInfo.getIdentifierLoc(), diag::err_function_declared_typedef);"},{"clang/lib/Parse/ParseTemplate.cpp",324,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n  // ...\n  if (DeclaratorInfo.isFunctionDeclarator() && isStartOfFunctionDefinition(DeclaratorInfo)) {\n    // ...\n    if (DS.getStorageClassSpec() == DeclSpec::SCS_typedef) {\n     // ...\n      Diag(DS.getStorageClassSpecLoc(), diag::err_function_declared_typedef) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}},
[l]={
[l]={
["clang/test/SemaCXX/constexpr-subobj-initialization.cpp"]={"clang/test/SemaCXX/constexpr-subobj-initialization.cpp:19:19: error: member initializer \'value\' does not name a non-static data member or base class"}
["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:8:33: error: function definition declared \'typedef\'"}
}
}
},
},
["err_mem_init_not_member_or_class_suggest"]={
["err_function_definition_not_allowed"]={
[c]="err_mem_init_not_member_or_class_suggest",
[b]="err_function_definition_not_allowed",
[d]="initializer %0 does not name a non-static data member or base class; did you mean the %select{base class|member}1 %2?",
[i]="function definition is not allowed here",
[e]={{nil,nil,{"initializer A does not name a non-static data member or base class; did you mean the ",{"base class","member"}," C?"}}},
[j]="function definition is not allowed here",
[f]=k,
[h]=k,
[g]="initializer (.*?) does not name a non\\-static data member or base class; did you mean the (?:base class|member) (.*?)\\?",
[c]="function definition is not allowed here",
[h]=a,
[f]=a,
[i]=m,
[e]=C,
[b]={"15e77a2fd305",1262250624,"Typo correction for C++ base and member initializers, e.g.,","Typo correction for C++ base and member initializers, e.g.,\n\ntest/FixIt/typo.cpp:41:15: error: initializer \'base\' does not name a non-static\n      data member or base class; did you mean the base class \'Base\'?\n  Derived() : base(),\n              ^~~~\n              Base\ntest/FixIt/typo.cpp:42:15: error: initializer \'ember\' does not name a non-static\n      data member or base class; did you mean the member \'member\'?\n              ember() { }\n              ^~~~~\n              member\n\nllvm-svn: 92355"},
[g]={"012efe22bcf4",1366128092,"Fix PR4296: Add parser detection/error recovery for nested functions, from Serve Pavlov!","Fix PR4296: Add parser detection/error recovery for nested functions, from Serve Pavlov!\n\nllvm-svn: 179603"},
[j]={{Q,4481,"/// 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 (R.empty() && BaseType.isNull() && (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery, ClassDecl))) {\n        if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {\n          // ...\n          diagnoseTypo(Corr, PDiag(diag::err_mem_init_not_member_or_class_suggest) << MemberOrBase << true);"},{Q,4494,"/// 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 (R.empty() && BaseType.isNull() && (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery, ClassDecl))) {\n       if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {\n        // ...\n       } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {\n         // ...\n         if (FindBaseInitializer(*this, ClassDecl, Context.getTypeDeclType(Type), DirectBaseSpec, VirtualBaseSpec)) {\n           // ...\n           diagnoseTypo(Corr, PDiag(diag::err_mem_init_not_member_or_class_suggest) << MemberOrBase << false, PDiag() /*Suppress note, we provide our own.*/);"}},
[d]={{P,2218,"/// 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   // Look at the next token to make sure that this isn\'t a function\n    // declaration. We have to check this because __attribute__ might be the\n   // start of a function definition in GCC-extended K&R C.\n   if (!isDeclarationAfterDeclarator()) {\n     // Function definitions are only allowed at file scope and in C++ classes.\n     // The C++ inline method definition case is handled elsewhere, so we only\n     // need to handle the file scope definition case.\n     if (Context == DeclaratorContext::File) {\n      // ...\n      } else {\n        if (Tok.is(tok::l_brace)) {\n          Diag(Tok, diag::err_function_definition_not_allowed);"},{"clang/lib/Parse/ParseTemplate.cpp",315,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n // ...\n if (DeclaratorInfo.isFunctionDeclarator() && isStartOfFunctionDefinition(DeclaratorInfo)) {\n   // Function definitions are only allowed at file scope and in C++ classes.\n   // The C++ inline method definition case is handled elsewhere, so we only\n   // need to handle the file scope definition case.\n   if (Context != DeclaratorContext::File) {\n      Diag(Tok, diag::err_function_definition_not_allowed);"}},
[l]={
[l]={
["clang/test/FixIt/typo.cpp"]={"clang/test/FixIt/typo.cpp:55:15: error: initializer \'base\' does not name a non-static data member or base class; did you mean the base class \'Base\'?","clang/test/FixIt/typo.cpp:56:15: error: initializer \'ember\' does not name a non-static data member or base class; did you mean the member \'member\'?"}
["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:98:21: error: function definition is not allowed here"}
}
}
},
},
["err_member_call_without_object"]={
["err_function_is_not_record"]={
[c]="err_member_call_without_object",
[b]="err_function_is_not_record",
[d]="call to non-static member function without an object argument",
[i]="unexpected %0 in function call; perhaps remove the %0?",
[e]="call to non-static member function without an object argument",
[j]="unexpected A in function call; perhaps remove the A?",
[f]=k,
[h]=k,
[g]="call to non\\-static member function without an object argument",
[c]="unexpected (.*?) in function call; perhaps remove the (.*?)\\?",
[h]=a,
[f]=a,
[i]=m,
[e]=C,
[b]={J,1236199783,H,I},
[g]={"638264ea2a3d",1373665382,"Provide a better diagnostic and a fixit for a \'.\' or \'->\' before the left paren","Provide a better diagnostic and a fixit for a \'.\' or \'->\' before the left paren\nof a function call.\n\nThis fixes PR5898 and means we now have a better diagnostic here than GCC.\n\nllvm-svn: 186208"},
[j]={{W,2359,"/// 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 // Return true if we are inside a default argument instantiation\n // and the found name refers to an instance member function, otherwise\n // the caller will try to create an implicit member call and this is wrong\n // for default arguments.\n //\n // FIXME: Is this special case necessary? We could allow the caller to\n  // diagnose this.\n  if (isDefaultArgument && ((*R.begin())->isCXXInstanceMember())) {\n   Diag(R.getNameLoc(), diag::err_member_call_without_object);"},{W,7607,"/// 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  if (CXXMethodDecl *Method = dyn_cast_or_null<CXXMethodDecl>(FDecl))\n    if (!Method->isStatic())\n     return ExprError(Diag(LParenLoc, diag::err_member_call_without_object) << Fn->getSourceRange());"},{Tb,234,"/// Diagnose a reference to a field with no object available.\nstatic void diagnoseInstanceReference(Sema &SemaRef, const CXXScopeSpec &SS, NamedDecl *Rep, const DeclarationNameInfo &nameInfo) {\n // ...\n if (IsField && InStaticMethod)\n // ...\n else if (ContextClass && RepClass && SS.isEmpty() && !InStaticMethod && !RepClass->Equals(ContextClass) && RepClass->Encloses(ContextClass))\n  // ...\n  else if (IsField)\n // ...\n  else\n    SemaRef.Diag(Loc, diag::err_member_call_without_object) << Range;"}},
[d]={{Zb,2158,"/// Once the leading part of a postfix-expression is parsed, this\n/// method parses any suffixes that apply.\n///\n/// \\verbatim\n///       postfix-expression: [C99 6.5.2]\n///         primary-expression\n///         postfix-expression \'[\' expression \']\'\n///         postfix-expression \'[\' braced-init-list \']\'\n///        postfix-expression \'[\' expression-list [opt] \']\'  [C++23 12.4.5]\n///        postfix-expression \'(\' argument-expression-list[opt] \')\'\n///        postfix-expression \'.\' identifier\n///        postfix-expression \'->\' identifier\n///        postfix-expression \'++\'\n///        postfix-expression \'--\'\n///         \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///        \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///\n///       argument-expression-list: [C99 6.5.2]\n///         argument-expression ...[opt]\n///         argument-expression-list \',\' assignment-expression ...[opt]\n/// \\endverbatim\nExprResult Parser::ParsePostfixExpressionSuffix(ExprResult LHS) {\n  // ...\n  while (true) {\n    // ...\n   case tok::arrow:\n    case tok::period: {\n     // ...\n     if (getLangOpts().CPlusPlus && !LHS.isInvalid()) {\n       // ...\n       if (BaseType && Tok.is(tok::l_paren) && (BaseType->isFunctionType() || BaseType->isSpecificPlaceholderType(BuiltinType::BoundMember))) {\n         Diag(OpLoc, diag::err_function_is_not_record) << OpKind << Base->getSourceRange() << FixItHint::CreateRemoval(OpLoc);"}},
[l]={
[l]={
["clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp"]={"clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:52:9: error: call to non-static member function without an object argument","clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:53:9: error: call to non-static member function without an object argument","clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:69:18: error: call to non-static member function without an object argument","clang/test/CXX/class/class.mfct/class.mfct.non-static/p3.cpp:77:13: error: call to non-static member function without an object argument"}
["clang/test/FixIt/fixit.cpp"]={"clang/test/FixIt/fixit.cpp:372:17: error: unexpected \'.\' in function call; perhaps remove the \'.\'?","clang/test/FixIt/fixit.cpp:375:15: error: unexpected \'->\' in function call; perhaps remove the \'->\'?"}
}
}
},
},
["err_member_decl_does_not_match"]={
["err_function_marked_override_not_overriding"]={
[c]="err_member_decl_does_not_match",
[b]="err_function_marked_override_not_overriding",
[d]="out-of-line %select{declaration|definition}2 of %0 does not match any declaration in %1",
[i]="%0 marked \'override\' but does not override any member functions",
[e]={{nil,nil,{"out-of-line ",{yc,gc}," of A does not match any declaration in B"}}},
[j]="A marked \'override\' but does not override any member functions",
[f]=k,
[h]=k,
[g]="out\\-of\\-line (?:declaration|definition) of (.*?) does not match any declaration in (.*?)",
[c]="(.*?) marked \'override\' but does not override any member functions",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"114394f8246f",1376022901,"Implement [class.friend]p11\'s special name lookup rules for friend declarations","Implement [class.friend]p11\'s special name lookup rules for friend declarations\nof local classes. We were previously handling this by performing qualified\nlookup within a function declaration(!!); replace it with the proper scope\nlookup.\n\nllvm-svn: 188050"},
[g]={"fd8355373333",1295503034,"Diagnose virtual member functions marked override but not overriding any virtual member functions.","Diagnose virtual member functions marked override but not overriding any virtual member functions.\n\nllvm-svn: 123888"},
[j]={{o,8958,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  // ...\n  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"},{Y,2069,"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 (SS.isSet()) {\n    // If the name of the template was qualified, we must be defining the\n    // template out-of-line.\n    if (!SS.isInvalid() && !Invalid && !PrevClassTemplate) {\n     Diag(NameLoc, TUK == TUK_Friend ? diag::err_friend_decl_does_not_match : diag::err_member_decl_does_not_match) << Name << SemanticContext << /*IsDefinition*/ true << SS.getRange();"}},
[d]={{t,3283,"/// CheckOverrideControl - Check C++11 override control semantics.\nvoid Sema::CheckOverrideControl(NamedDecl *D) {\n  // ...\n  if (MD->hasAttr<OverrideAttr>() && !HasOverriddenMethods)\n   Diag(MD->getLocation(), diag::err_function_marked_override_not_overriding) << MD->getDeclName();"}},
[l]={
[l]={
["clang/test/CXX/special/class.inhctor/p8.cpp"]={"clang/test/CXX/special/class.inhctor/p8.cpp:32:35: error: out-of-line definition of \'D\' does not match any declaration in \'D\'"}
["clang/test/CXX/class.derived/class.virtual/p3-0x.cpp"]={"clang/test/CXX/class.derived/class.virtual/p3-0x.cpp:10:16: error: \'f\' marked \'override\' but does not override any member functions","clang/test/CXX/class.derived/class.virtual/p3-0x.cpp:29:16: error: \'f\' marked \'override\' but does not override any member functions","clang/test/CXX/class.derived/class.virtual/p3-0x.cpp:42:16: error: \'f\' marked \'override\' but does not override any member functions","clang/test/CXX/class.derived/class.virtual/p3-0x.cpp:80:18: error: \'g\' marked \'override\' but does not override any member functions"}
}
}
},
},
["err_member_decl_does_not_match_suggest"]={
["err_function_needs_feature"]={
[c]="err_member_decl_does_not_match_suggest",
[b]="err_function_needs_feature",
[d]="out-of-line %select{declaration|definition}2 of %0 does not match any declaration in %1; did you mean %3?",
[i]="always_inline function %1 requires target feature \'%2\', but would be inlined into function %0 that is compiled without support for \'%2\'",
[e]={{nil,nil,{"out-of-line ",{yc,gc}," of A does not match any declaration in B; did you mean D?"}}},
[j]="always_inline function B requires target feature \'C\', but would be inlined into function A that is compiled without support for \'C\'",
[f]=k,
[h]=k,
[g]="out\\-of\\-line (?:declaration|definition) of (.*?) does not match any declaration in (.*?); did you mean (.*?)\\?",
[c]="always_inline function (.*?) requires target feature \'(.*?)\', but would be inlined into function (.*?) that is compiled without support for \'(.*?)\'",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,V,v},{"7.1",nil,m}},
[b]={"114394f8246f",1376022901,"Implement [class.friend]p11\'s special name lookup rules for friend declarations","Implement [class.friend]p11\'s special name lookup rules for friend declarations\nof local classes. We were previously handling this by performing qualified\nlookup within a function declaration(!!); replace it with the proper scope\nlookup.\n\nllvm-svn: 188050"},
[g]={"2b2d56f059e7",1447289052,"Provide a frontend based error for always_inline functions that require","Provide a frontend based error for always_inline functions that require\ntarget features that the caller function doesn\'t provide. This matches\nthe existing backend failure to inline functions that don\'t have\nmatching target features - and diagnoses earlier in the case of\nalways_inline.\n\nFix up a few test cases that were, in fact, invalid if you tried\nto generate code from the backend with the specified target features\nand add a couple of tests to illustrate what\'s going on.\n\nThis should fix PR25246.\n\nllvm-svn: 252834"},
[j]={{o,9042,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  // ...\n  if (!Prev.empty()) {\n  // ...\n  } else if ((Correction = SemaRef.CorrectTypo(Prev.getLookupNameInfo(), Prev.getLookupKind(), S, &ExtraArgs.D.getCXXScopeSpec(), CCC, Sema::CTK_ErrorRecovery, IsLocalFriend ? nullptr : NewDC))) {\n    // ...\n    if (Result) {\n      // ...\n     SemaRef.diagnoseTypo(Correction, SemaRef.PDiag(IsLocalFriend ? diag::err_no_matching_local_friend_suggest : diag::err_member_decl_does_not_match_suggest) << Name << NewDC << IsDefinition);"}},
[d]={{"clang/lib/CodeGen/CodeGenFunction.cpp",2636,"// Emits an error if we don\'t have a valid set of target features for the\n// called function.\nvoid CodeGenFunction::checkTargetFeatures(SourceLocation Loc, const FunctionDecl *TargetDecl) {\n // ...\n  if (BuiltinID) {\n // ...\n  } else if (!TargetDecl->isMultiVersion() && TargetDecl->hasAttr<TargetAttr>()) {\n   // ...\n   if (!llvm::all_of(ReqFeatures, [&](StringRef Feature) {\n     // ...\n     CGM.getDiags().Report(Loc, diag::err_function_needs_feature) << FD->getDeclName() << TargetDecl->getDeclName() << MissingFeature;"},{"clang/lib/CodeGen/CodeGenFunction.cpp",2645,"// Emits an error if we don\'t have a valid set of target features for the\n// called function.\nvoid CodeGenFunction::checkTargetFeatures(SourceLocation Loc, const FunctionDecl *TargetDecl) {\n  // ...\n  if (BuiltinID) {\n  // ...\n  } else if (!TargetDecl->isMultiVersion() && TargetDecl->hasAttr<TargetAttr>()) {\n  // ...\n  } else if (!FD->isMultiVersion() && FD->hasAttr<TargetAttr>()) {\n    // ...\n    for (const auto &F : CalleeFeatureMap) {\n      if (F.getValue() && (!CallerFeatureMap.lookup(F.getKey()) || !CallerFeatureMap.find(F.getKey())->getValue()))\n       CGM.getDiags().Report(Loc, diag::err_function_needs_feature) << FD->getDeclName() << TargetDecl->getDeclName() << F.getKey();"}},
[l]={
[l]={
["clang/test/FixIt/typo-crash.cpp"]={"clang/test/FixIt/typo-crash.cpp:23:5: error: out-of-line declaration of \'global\' does not match any declaration in namespace \'PR12297::A\'; did you mean \'::PR12297::global\'?"}
["clang/test/Sema/arm-neon-target.c"]={"clang/test/Sema/arm-neon-target.c:49:3: error: always_inline function \'vdot_u32\' requires target feature \'dotprod\', but would be inlined into function \'undefined\' that is compiled without support for \'dotprod\'","clang/test/Sema/arm-neon-target.c:51:3: error: always_inline function \'vceqz_f16\' requires target feature \'fullfp16\', but would be inlined into function \'undefined\' that is compiled without support for \'fullfp16\'","clang/test/Sema/arm-neon-target.c:52:3: error: always_inline function \'vrnd_f16\' requires target feature \'fullfp16\', but would be inlined into function \'undefined\' that is compiled without support for \'fullfp16\'","clang/test/Sema/arm-neon-target.c:53:3: error: always_inline function \'vmaxnm_f16\' requires target feature \'fullfp16\', but would be inlined into function \'undefined\' that is compiled without support for \'fullfp16\'","clang/test/Sema/arm-neon-target.c:55:3: error: always_inline function \'vmmlaq_s32\' requires target feature \'i8mm\', but would be inlined into function \'undefined\' that is compiled without support for \'i8mm\'","clang/test/Sema/arm-neon-target.c:57:3: error: always_inline function \'vbfdot_f32\' requires target feature \'bf16\', but would be inlined into function \'undefined\' that is compiled without support for \'bf16\'","clang/test/Sema/arm-neon-target.c:60:3: error: always_inline function \'vdup_n_bf16\' requires target feature \'bf16\', but would be inlined into function \'undefined\' that is compiled without support for \'bf16\'","clang/test/Sema/arm-neon-target.c:62:3: error: always_inline function \'vcvt_f32_bf16\' requires target feature \'bf16\', but would be inlined into function \'undefined\' that is compiled without support for \'bf16\'","clang/test/Sema/arm-neon-target.c:63:3: error: always_inline function \'vcvt_bf16_f32\' requires target feature \'bf16\', but would be inlined into function \'undefined\' that is compiled without support for \'bf16\'","clang/test/Sema/arm-neon-target.c:65:3: error: always_inline function \'vqrdmlahq_s32\' requires target feature \'v8.1a\', but would be inlined into function \'undefined\' that is compiled without support for \'v8.1a\'","clang/test/Sema/arm-neon-target.c:67:3: error: always_inline function \'vcaddq_rot90_f32\' requires target feature \'v8.3a\', but would be inlined into function \'undefined\' that is compiled without support for \'v8.3a\'","clang/test/Sema/arm-neon-target.c:68:3: error: always_inline function \'vcmla_rot90_f16\' requires target feature \'v8.3a\', but would be inlined into function \'undefined\' that is compiled without support for \'v8.3a\'"}
}
}
},
},
["err_member_def_does_not_match_ret_type"]={
["err_function_parameter_pack_without_parameter_packs"]={
[c]="err_member_def_does_not_match_ret_type",
[b]="err_function_parameter_pack_without_parameter_packs",
[d]="return type of out-of-line definition of %q0 differs from that in the declaration",
[i]="type %0 of function parameter pack does not contain any unexpanded parameter packs",
[e]="return type of out-of-line definition of A differs from that in the declaration",
[j]="type A of function parameter pack does not contain any unexpanded parameter packs",
[f]=k,
[h]=k,
[g]="return type of out\\-of\\-line definition of (.*?) differs from that in the declaration",
[c]="type (.*?) of function parameter pack does not contain any unexpanded parameter packs",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"3d3208675f79",1296885289,"When the out-of-line definition differs from the declaration in the return type,","When the out-of-line definition differs from the declaration in the return type,\nsay \"out-of-line definition differ from the declaration in the return type\" instead of\nthe silly \"functions that differ only in their return type cannot be overloaded\".\n\nAddresses rdar://7980179.\n\nllvm-svn: 124939"},
[g]={"27b4c16fefde",1293144282,"Implement parsing of function parameter packs and non-type template","Implement parsing of function parameter packs and non-type template\nparameter packs (C++0x [dcl.fct]p13), including disambiguation between\nunnamed function parameter packs and varargs (C++0x [dcl.fct]p14) for\ncases like \n\n  void f(T...)\n\nwhere T may or may not contain unexpanded parameter packs.\n\nllvm-svn: 122520"},
[j]={{o,3936,"/// 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 (!Context.hasSameType(OldDeclaredReturnType, NewDeclaredReturnType) && canFullyTypeCheckRedeclaration(New, Old, NewDeclaredReturnType, OldDeclaredReturnType)) {\n      // ...\n      if (ResQT.isNull()) {\n       if (New->isCXXClassMember() && New->isOutOfLine())\n         Diag(New->getLocation(), diag::err_member_def_does_not_match_ret_type) << New << New->getReturnTypeSourceRange();"}},
[d]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp",2840,"ParmVarDecl *Sema::SubstParmVarDecl(ParmVarDecl *OldParm, const MultiLevelTemplateArgumentList &TemplateArgs, int indexAdjustment, std::optional<unsigned> NumExpansions, bool ExpectParameterPack, bool EvaluateConstraint) {\n // ...\n if (PackExpansionTypeLoc ExpansionTL = OldTL.getAs<PackExpansionTypeLoc>()) {\n   // ...\n   if (NewDI->getType()->containsUnexpandedParameterPack()) {\n   // ...\n   } else if (ExpectParameterPack) {\n     // ...\n     Diag(OldParm->getLocation(), diag::err_function_parameter_pack_without_parameter_packs) << NewDI->getType();"},{G,5923,"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::Prototype:\n    case DeclaratorContext::LambdaExprParameter:\n    case DeclaratorContext::RequiresExpr:\n      // C++0x [dcl.fct]p13:\n      //   [...] When it is part of a parameter-declaration-clause, the\n      //  parameter pack is a function parameter pack (14.5.3). The type T\n      //  of the declarator-id of the function parameter pack shall contain\n      //  a template parameter pack; each template parameter pack in T is\n      //  expanded by the function parameter pack.\n      //\n      // We represent function parameter packs as function parameters whose\n      // type is a pack expansion.\n     if (!T->containsUnexpandedParameterPack() && (!LangOpts.CPlusPlus20 || !T->getContainedAutoType())) {\n       S.Diag(D.getEllipsisLoc(), diag::err_function_parameter_pack_without_parameter_packs) << T << D.getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:271:10: error: return type of out-of-line definition of \'rdar7980179::A::f0\' differs from that in the declaration"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp:47:11: error: type \'T\' of function parameter pack does not contain any unexpanded parameter packs","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp:49:14: error: type \'int\' of function parameter pack does not contain any unexpanded parameter packs","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp:60:10: error: type \'T[]\' of function parameter pack does not contain any unexpanded parameter packs","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp:63:10: error: type \'T[]\' of function parameter pack does not contain any unexpanded parameter packs","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp:67:13: error: type \'int[]\' of function parameter pack does not contain any unexpanded parameter packs","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p13.cpp:68:13: error: type \'int[]\' of function parameter pack does not contain any unexpanded parameter packs"}
}
}
},
},
["err_member_def_undefined_record"]={
["err_function_scope_depth_exceeded"]={
[c]="err_member_def_undefined_record",
[b]={{nil,F,"err_function_scope_depth_exceeded"}},
[d]="out-of-line definition of %0 from class %1 without definition",
[i]={{nil,F,"function scope depth exceeded maximum of %0"}},
[e]="out-of-line definition of A from class B without definition",
[j]={{nil,F,"function scope depth exceeded maximum of A"}},
[f]=k,
[h]=tb,
[g]="out\\-of\\-line definition of (.*?) from class (.*?) without definition",
[c]="function scope depth exceeded maximum of (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,F,C}},
[b]={"67da35c832e6",1265322386,"Extract a common structure for holding information about the definition","Extract a common structure for holding information about the definition\nof a C++ record. Exposed a lot of problems where various routines were\nsilently doing The Wrong Thing (or The Acceptable Thing in The Wrong Order)\nwhen presented with a non-definition.  Also cuts down on memory usage.\n\nllvm-svn: 95330"},
[g]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit\n\nSee\nhttps://docs.google.com/document/d/1xMkTZMKx9llnMPgso0jrx3ankI4cv60xeZ0y4ksf4wc/preview\nfor background discussion.\n\nThis adds a warning, flags and pragmas to limit the number of\npre-processor tokens either at a certain point in a translation unit, or\noverall.\n\nThe idea is that this would allow projects to limit the size of certain\nwidely included headers, or for translation units overall, as a way to\ninsert backstops for header bloat and prevent compile-time regressions.\n\nDifferential revision: https://reviews.llvm.org/D72703"},
[j]={{o,6303,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n // ...\n if (D.getCXXScopeSpec().isInvalid())\n // ...\n else if (D.getCXXScopeSpec().isSet()) {\n   // ...\n   // If a class is incomplete, do not parse entities inside it.\n   if (isa<CXXRecordDecl>(DC) && !cast<CXXRecordDecl>(DC)->hasDefinition()) {\n     Diag(D.getIdentifierLoc(), diag::err_member_def_undefined_record) << Name << DC << D.getCXXScopeSpec().getRange();"}},
[d]={{P,7297,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n // Avoid exceeding the maximum function scope depth.\n  // See https://bugs.llvm.org/show_bug.cgi?id=19607\n // Note Sema::ActOnParamDeclarator calls ParmVarDecl::setScopeInfo with\n  // getFunctionPrototypeDepth() - 1.\n if (getCurScope()->getFunctionPrototypeDepth() - 1 > ParmVarDecl::getMaxFunctionScopeDepth()) {\n   Diag(Tok.getLocation(), diag::err_function_scope_depth_exceeded) << ParmVarDecl::getMaxFunctionScopeDepth();"}}
},
["err_function_start_invalid_type"]={
[b]={{nil,B,"err_function_start_invalid_type"}},
[i]={{nil,B,"argument must be a function"}},
[j]={{nil,B,"argument must be a function"}},
[h]=k,
[c]="argument must be a function",
[f]=a,
[e]={{nil,B,m}},
[g]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
[d]={{K,268,"/// Check that the argument to __builtin_function_start is a function.\nstatic bool SemaBuiltinFunctionStart(Sema &S, CallExpr *TheCall) {\n  // ...\n  if (!FD) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_function_start_invalid_type) << TheCall->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.decls/temp.class.spec/temp.class.spec.mfunc/p1-neg.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class.spec/temp.class.spec.mfunc/p1-neg.cpp:24:15: error: out-of-line definition of \'f1\' from class \'A<T, N>\' without definition"}
["clang/test/SemaCXX/builtins.cpp"]={"clang/test/SemaCXX/builtins.cpp:49:11: error: argument must be a function"}
}
}
},
},
["err_member_extra_qualification"]={
["err_function_template_partial_spec"]={
[c]="err_member_extra_qualification",
[b]="err_function_template_partial_spec",
[d]="extra qualification on member %0",
[i]="function template partial specialization is not allowed",
[e]="extra qualification on member A",
[j]="function template partial specialization is not allowed",
[f]=k,
[h]=k,
[g]="extra qualification on member (.*?)",
[c]="function template partial specialization is not allowed",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"43bc036e8ae3",1347567380,"Promote the warning about extra qualification on a declaration from a","Promote the warning about extra qualification on a declaration from a\nwarning to an error. C++ bans it, and both GCC and EDG diagnose it as\nan error. Microsoft allows it, so we still warn in Microsoft\nmode. Fixes <rdar://problem/11135644>.\n\nllvm-svn: 163831"},
[g]={"a5f6f9c7a1bb",1295895279,"Disallow function template partial specializations, from Hans","Disallow function template partial specializations, from Hans\nWennborg! Fixes PR8295.\n\nllvm-svn: 124135"},
[j]={{o,6177,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // If the user provided a superfluous scope specifier that refers back to the\n  // class in which the entity is already declared, diagnose and ignore it.\n  //\n // class X {\n //   void X::f();\n  // };\n //\n // Note, it was once ill-formed to give redundant qualification in all\n // contexts, but that rule was removed by DR482.\n if (Cur->Equals(DC)) {\n   if (Cur->isRecord()) {\n     Diag(Loc, LangOpts.MicrosoftExt ? diag::warn_member_extra_qualification : diag::err_member_extra_qualification) << Name << FixItHint::CreateRemoval(SS.getRange());"}},
[d]={{p,10364,"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 the declarator is a template-id, translate the parser\'s template\n   // argument list into our AST format.\n   if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {\n     // ...\n     if (NewFD->isInvalidDecl()) {\n     // ...\n      } else if (FunctionTemplate) {\n       // ...\n        Diag(D.getIdentifierLoc(), diag::err_function_template_partial_spec) << SourceRange(TemplateId->LAngleLoc, TemplateId->RAngleLoc);"}},
[l]={
[l]={
["clang/test/CXX/special/class.ctor/p1.cpp"]={"clang/test/CXX/special/class.ctor/p1.cpp:46:7: error: extra qualification on member \'X2\'","clang/test/CXX/special/class.ctor/p1.cpp:53:7: error: extra qualification on member \'X3\'"}
["clang/test/SemaTemplate/function-template-specialization.cpp"]={"clang/test/SemaTemplate/function-template-specialization.cpp:48:30: error: function template partial specialization is not allowed"}
}
}
},
},
["err_member_function_call_bad_cvr"]={
["err_function_template_spec_ambiguous"]={
[c]="err_member_function_call_bad_cvr",
[b]="err_function_template_spec_ambiguous",
[d]={{nil,t,"\'this\' argument to member function %0 has type %1, but function is not marked %select{const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict}2"},{r,nil,"member function %0 not viable: \'this\' argument has type %1, but function is not marked %select{const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict}2"}},
[i]="function template specialization %0 ambiguously refers to more than one function template; explicitly specify%select{| additional}1 template arguments to identify a particular function template",
[e]={{nil,t,{"\'this\' argument to member function A has type B, but function is not marked ",{"const","restrict","const or restrict","volatile","const or volatile","volatile or restrict","const, volatile, or restrict"}}},{r,nil,{"member function A not viable: \'this\' argument has type B, but function is not marked ",{"const","restrict","const or restrict","volatile","const or volatile","volatile or restrict","const, volatile, or restrict"}}}},
[j]={{nil,nil,{"function template specialization A ambiguously refers to more than one function template; explicitly specify",{a," additional"}," template arguments to identify a particular function template"}}},
[f]=k,
[h]=k,
[g]="\'this\' argument to member function (.*?) has type (.*?), but function is not marked (?:const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict)",
[c]="function template specialization (.*?) ambiguously refers to more than one function template; explicitly specify(?:| additional) template arguments to identify a particular function template",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"9813d3221d7d",1289894685,"Improve diagnostic for calling non-const method on const object. Fixes rdar://7743000","Improve diagnostic for calling non-const method on const object. Fixes rdar://7743000\n\nllvm-svn: 119336"},
[g]={"3a923c2d3799",1253834087,"WIP implementation of explicit function template specialization. This","WIP implementation of explicit function template specialization. This\nfirst implementation recognizes when a function declaration is an\nexplicit function template specialization (based on the presence of a\ntemplate<> header), performs template argument deduction + ambiguity\nresolution to determine which template is being specialized, and hooks\n\nThere are many caveats here:\n  - We completely and totally drop any explicitly-specified template\n  arguments on the floor\n  - We don\'t diagnose any of the extra semantic things that we should\n  diagnose. \n  - I haven\'t looked to see that we\'re getting the right linkage for\n  explicit specializations\n\nOn a happy note, this silences a bunch of errors that show up in\nlibstdc++\'s <iostream>, although Clang still can\'t get through the\nentire header.\n\nllvm-svn: 82728"},
[j]={{pc,5651,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n // ...\n if (ICS.isBad()) {\n   // ...\n    case BadConversionSequence::bad_qualifiers: {\n     // ...\n     if (CVR) {\n        Diag(From->getBeginLoc(), diag::err_member_function_call_bad_cvr) << Method->getDeclName() << FromRecordType << (CVR - 1) << From->getSourceRange();"}},
[d]={{kb,9498,"/// Perform semantic analysis for the given function template\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit function template specialization. On successful completion,\n/// the function declaration \\p FD will become a function template\n/// specialization.\n///\n/// \\param FD the function declaration, which will be updated to become a\n/// function template specialization.\n///\n/// \\param ExplicitTemplateArgs the explicitly-provided template arguments,\n/// if any. Note that this may be valid info even when 0 arguments are\n/// explicitly provided as in, e.g., \\c void sort<>(char*, char*);\n/// as it anyway contains info on the angle brackets locations.\n///\n/// \\param Previous the set of declarations that may be specialized by\n/// this function specialization.\n///\n/// \\param QualifiedFriend whether this is a lookup for a qualified friend\n/// declaration with no explicit template argument list that might be\n/// befriending a function template specialization.\nbool Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, LookupResult &Previous, bool QualifiedFriend) {\n // ...\n UnresolvedSetIterator Result = getMostSpecialized(Candidates.begin(), Candidates.end(), FailedCandidates, FD->getLocation(), PDiag(diag::err_function_template_spec_no_match) << FD->getDeclName(), PDiag(diag::err_function_template_spec_ambiguous) << FD->getDeclName() << (ExplicitTemplateArgs != nullptr), PDiag(diag::note_function_template_spec_matched));"}},
[l]={
[l]={
["clang/test/SemaCXX/arrow-operator.cpp"]={"clang/test/SemaCXX/arrow-operator.cpp:109:21: error: \'this\' argument to member function \'val\' has type \'const TemplateStruct<0>\', but function is not marked const"}
["clang/test/SemaTemplate/function-template-specialization.cpp"]={"clang/test/SemaTemplate/function-template-specialization.cpp:27:17: error: function template specialization \'f1\' ambiguously refers to more than one function template; explicitly specify template arguments to identify a particular function template"}
}
}
},
},
["err_member_function_call_bad_ref"]={
["err_function_template_spec_no_match"]={
[c]={{nil,t,"err_member_function_call_bad_ref"}},
[b]="err_function_template_spec_no_match",
[d]={{nil,t,"\'this\' argument to member function %0 is an %select{lvalue|rvalue}1, but function has %select{non-const lvalue|rvalue}2 ref-qualifier"}},
[i]="no function template matches function template specialization %0",
[e]={{nil,t,{"\'this\' argument to member function A is an ",{"lvalue","rvalue"},", but function has ",{"non-const lvalue","rvalue"}," ref-qualifier"}}},
[j]="no function template matches function template specialization A",
[f]=k,
[h]=k,
[g]="\'this\' argument to member function (.*?) is an (?:lvalue|rvalue), but function has (?:non\\-const lvalue|rvalue) ref\\-qualifier",
[c]="no function template matches function template specialization (.*?)",
[h]=a,
[f]=a,
[i]={{nil,t,m}},
[e]=m,
[b]={"c7e67a04e0f3",1514695779,"[Sema] Improve diagnostics for const- and ref-qualified member functions","[Sema] Improve diagnostics for const- and ref-qualified member functions\n\nSummary:\nAdjust wording for const-qualification mismatch to be a little more clear.\n\nAlso add another diagnostic for a ref qualifier mismatch, which previously produced a useless error (this error path is simply very old; see rL119336):\n\nBefore:\n  error: cannot initialize object parameter of type \'X0\' with an expression of type \'X0\'\n\nAfter:\n  error: \'this\' argument to member function \'rvalue\' is an lvalue, but function has rvalue ref-qualifier\n\nReviewers: rsmith, aaron.ballman\n\nReviewed By: aaron.ballman\n\nSubscribers: lebedev.ri, aaron.ballman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D39937\n\nllvm-svn: 321592"},
[g]={"3a923c2d3799",1253834087,"WIP implementation of explicit function template specialization. This","WIP implementation of explicit function template specialization. This\nfirst implementation recognizes when a function declaration is an\nexplicit function template specialization (based on the presence of a\ntemplate<> header), performs template argument deduction + ambiguity\nresolution to determine which template is being specialized, and hooks\n\nThere are many caveats here:\n  - We completely and totally drop any explicitly-specified template\n  arguments on the floor\n  - We don\'t diagnose any of the extra semantic things that we should\n diagnose. \n  - I haven\'t looked to see that we\'re getting the right linkage for\n  explicit specializations\n\nOn a happy note, this silences a bunch of errors that show up in\nlibstdc++\'s <iostream>, although Clang still can\'t get through the\nentire header.\n\nllvm-svn: 82728"},
[j]={{pc,5665,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n // ...\n if (ICS.isBad()) {\n   // ...\n   case BadConversionSequence::lvalue_ref_to_rvalue:\n   case BadConversionSequence::rvalue_ref_to_lvalue: {\n     // ...\n     Diag(From->getBeginLoc(), diag::err_member_function_call_bad_ref) << Method->getDeclName() << FromClassification.isRValue() << IsRValueQualified;"}},
[d]={{kb,9497,"/// Perform semantic analysis for the given function template\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit function template specialization. On successful completion,\n/// the function declaration \\p FD will become a function template\n/// specialization.\n///\n/// \\param FD the function declaration, which will be updated to become a\n/// function template specialization.\n///\n/// \\param ExplicitTemplateArgs the explicitly-provided template arguments,\n/// if any. Note that this may be valid info even when 0 arguments are\n/// explicitly provided as in, e.g., \\c void sort<>(char*, char*);\n/// as it anyway contains info on the angle brackets locations.\n///\n/// \\param Previous the set of declarations that may be specialized by\n/// this function specialization.\n///\n/// \\param QualifiedFriend whether this is a lookup for a qualified friend\n/// declaration with no explicit template argument list that might be\n/// befriending a function template specialization.\nbool Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, LookupResult &Previous, bool QualifiedFriend) {\n // ...\n UnresolvedSetIterator Result = getMostSpecialized(Candidates.begin(), Candidates.end(), FailedCandidates, FD->getLocation(), PDiag(diag::err_function_template_spec_no_match) << FD->getDeclName(), PDiag(diag::err_function_template_spec_ambiguous) << FD->getDeclName() << (ExplicitTemplateArgs != nullptr), PDiag(diag::note_function_template_spec_matched));"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp"]={"clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp:10:3: error: \'this\' argument to member function \'ref\' is an rvalue, but function has non-const lvalue ref-qualifier","clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp:12:3: error: \'this\' argument to member function \'cvref\' is an rvalue, but function has non-const lvalue ref-qualifier"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:44:8: error: no function template matches function template specialization \'f\'"}
}
}
},
},
["err_member_function_call_bad_type"]={
["err_gc_weak_property_strong_type"]={
[c]={{nil,t,"err_member_function_call_bad_type"}},
[b]="err_gc_weak_property_strong_type",
[d]={{nil,t,"cannot initialize object parameter of type %0 with an expression of type %1"}},
[i]="weak attribute declared on a __strong type property in GC mode",
[e]={{nil,t,"cannot initialize object parameter of type A with an expression of type B"}},
[j]="weak attribute declared on a __strong type property in GC mode",
[f]=k,
[h]=k,
[g]="cannot initialize object parameter of type (.*?) with an expression of type (.*?)",
[c]="weak attribute declared on a __strong type property in GC mode",
[h]=a,
[f]=a,
[i]={{nil,t,m}},
[e]=m,
[b]={"c7e67a04e0f3",1514695779,"[Sema] Improve diagnostics for const- and ref-qualified member functions","[Sema] Improve diagnostics for const- and ref-qualified member functions\n\nSummary:\nAdjust wording for const-qualification mismatch to be a little more clear.\n\nAlso add another diagnostic for a ref qualifier mismatch, which previously produced a useless error (this error path is simply very old; see rL119336):\n\nBefore:\n  error: cannot initialize object parameter of type \'X0\' with an expression of type \'X0\'\n\nAfter:\n  error: \'this\' argument to member function \'rvalue\' is an lvalue, but function has rvalue ref-qualifier\n\nReviewers: rsmith, aaron.ballman\n\nReviewed By: aaron.ballman\n\nSubscribers: lebedev.ri, aaron.ballman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D39937\n\nllvm-svn: 321592"},
[g]={"eebdb67420c1",1315412661,"objc-gc: More sema work for properties declared \'weak\'","objc-gc: More sema work for properties declared \'weak\'\nin GC mode. // rdar://10073896\n\nllvm-svn: 139235"},
[j]={{pc,5682,"/// PerformObjectArgumentInitialization - Perform initialization of\n/// the implicit object parameter for the given Method with the given\n/// expression.\nExprResult Sema::PerformObjectArgumentInitialization(Expr *From, NestedNameSpecifier *Qualifier, NamedDecl *FoundDecl, CXXMethodDecl *Method) {\n  // ...\n  if (ICS.isBad()) {\n   // ...\n   return Diag(From->getBeginLoc(), diag::err_member_function_call_bad_type) << ImplicitParamRecordType << FromRecordType << From->getSourceRange();"}}
[d]={{"clang/lib/Sema/SemaObjCProperty.cpp",1238,"/// 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    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n       // ...\n       if (PropertyIvarType.isObjCGCStrong()) {\n          Diag(PropertyDiagLoc, diag::err_gc_weak_property_strong_type);"}}
},
},
["err_member_function_initialization"]={
["err_generic_sel_multi_match"]={
[c]="err_member_function_initialization",
[b]="err_generic_sel_multi_match",
[d]="initializer on function does not look like a pure-specifier",
[i]="controlling expression type %0 compatible with %1 generic association types",
[e]="initializer on function does not look like a pure-specifier",
[j]="controlling expression type A compatible with B generic association types",
[f]=k,
[h]=k,
[g]="initializer on function does not look like a pure\\-specifier",
[c]="controlling expression type (.*?) compatible with (.*?) generic association types",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={J,1236199783,H,I},
[g]={"91147596414d",1302827748,"C1X: implement generic selections","C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all\nsupported languages.  The syntax is the same as for C1X.\n\nllvm-svn: 129554"},
[j]={{o,13131,"/// 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 (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(RealDecl)) {\n    // ...\n    Diag(Method->getLocation(), diag::err_member_function_initialization) << Method->getDeclName() << Init->getSourceRange();"}},
[d]={{q,1848,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // ...\n  // C11 6.5.1.1p2 \"The controlling expression of a generic selection shall have\n  // type compatible with at most one of the types named in its generic\n  // association list.\"\n  if (CompatIndices.size() > 1) {\n    // ...\n    Diag(SR.getBegin(), diag::err_generic_sel_multi_match) << SR << P.second << (unsigned)CompatIndices.size();"}},
[l]={
[l]={
["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:8:8: error: initializer on function does not look like a pure-specifier","clang/test/SemaCXX/virtuals.cpp:9:8: error: initializer on function does not look like a pure-specifier","clang/test/SemaCXX/virtuals.cpp:61:11: error: initializer on function does not look like a pure-specifier"}
["clang/test/Sema/generic-selection.c"]={"clang/test/Sema/generic-selection.c:16:19: error: controlling expression type \'void (*)()\' compatible with 2 generic association types"}
}
}
},
},
["err_member_name_of_class"]={
["err_generic_sel_no_match"]={
[c]="err_member_name_of_class",
[b]="err_generic_sel_no_match",
[d]="member %0 has the same name as its class",
[i]="controlling expression type %0 not compatible with any generic association type",
[e]="member A has the same name as its class",
[j]="controlling expression type A not compatible with any generic association type",
[f]=k,
[h]=k,
[g]="member (.*?) has the same name as its class",
[c]="controlling expression type (.*?) not compatible with any generic association type",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"36c22a2335c0",1287148881,"Diagnose C++ [class.mem]p13-14, where a class member has the same name","Diagnose C++ [class.mem]p13-14, where a class member has the same name\nas the class itself. Fixes PR7082.\n\nllvm-svn: 116573"},
[g]={"91147596414d",1302827748,"C1X: implement generic selections","C1X: implement generic selections\n\nAs an extension, generic selection support has been added for all\nsupported languages.  The syntax is the same as for C1X.\n\nllvm-svn: 129554"},
[j]={{o,6135,"/// DiagnoseClassNameShadow - Implement C++ [class.mem]p13:\n///  If T is the name of a class, then each of the following shall have a\n///  name different from T:\n///    - every static data member of class T;\n///    - every member function of class T\n///    - every member of class T that is itself a type;\n/// \\returns true if the declaration name violates these rules.\nbool Sema::DiagnoseClassNameShadow(DeclContext *DC, DeclarationNameInfo NameInfo) {\n  // ...\n  if (Record && Record->getIdentifier() && Record->getDeclName() == Name) {\n    Diag(NameInfo.getLoc(), diag::err_member_name_of_class) << Name;"},{Q,6956,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  if (Record->getIdentifier()) {\n    // ...\n    for (DeclContext::lookup_iterator I = R.begin(), E = R.end(); I != E; ++I) {\n     // ...\n     if (((isa<FieldDecl>(D) || isa<UnresolvedUsingValueDecl>(D)) && Record->hasUserDeclaredConstructor()) || isa<IndirectFieldDecl>(D)) {\n        Diag((*I)->getLocation(), diag::err_member_name_of_class) << D->getDeclName();"}},
[d]={{q,1865,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // ...\n  // C11 6.5.1.1p2 \"If a generic selection has no default generic association,\n // its controlling expression shall have type compatible with exactly one of\n // the types named in its generic association list.\"\n  if (DefaultIndex == -1U && CompatIndices.size() == 0) {\n   // ...\n   Diag(SR.getBegin(), diag::err_generic_sel_no_match) << SR << P.second;"}},
[l]={
[l]={
["clang/test/SemaTemplate/injected-class-name.cpp"]={"clang/test/SemaTemplate/injected-class-name.cpp:69:31: error: member \'Nested\' has the same name as its class"}
["clang/test/SemaCXX/generic-selection.cpp"]={"clang/test/SemaCXX/generic-selection.cpp:6:19: error: controlling expression type \'char\' not compatible with any generic association type"}
}
}
},
},
["err_member_not_yet_instantiated"]={
["err_getter_not_found"]={
[c]="err_member_not_yet_instantiated",
[b]="err_getter_not_found",
[d]="no member %0 in %1; it has not yet been instantiated",
[i]="no getter method for read from property",
[e]="no member A in B; it has not yet been instantiated",
[j]="no getter method for read from property",
[f]=k,
[h]=k,
[g]="no member (.*?) in (.*?); it has not yet been instantiated",
[c]="no getter method for read from property",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"528ad93924b1",1299442365,"We may fail to map a declaration in a template to its instantiated","We may fail to map a declaration in a template to its instantiated\ndeclaration because of interesting ordering dependencies while\ninstantiating a class template or member class thereof. Complain,\nrather than asserting (+Asserts) or silently rejecting the code\n(-Asserts).\n\nFixes the crash-on-invalid in PR8965. \n\nllvm-svn: 127129"},
[g]={"0f0b302ffe8e",1293047195,"Complain on missing property getter method only","Complain on missing property getter method only\nif property-dot expression is decidedly\nan rvalue. // rdar://8155806.\n\nllvm-svn: 122430"},
[j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6321,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n///  enum Kind {\n///    KnownValue = sizeof(T)\n///  };\n///\n///  bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n  // ...\n  if (ParentDC != D->getDeclContext()) {\n    // ...\n    if (!Result) {\n      if (isa<UsingShadowDecl>(D)) {\n     // ...\n      } else if (hasUncompilableErrorOccurred()) {\n      // ...\n      } else if (IsBeingInstantiated) {\n        // ...\n        Diag(Loc, diag::err_member_not_yet_instantiated) << D->getDeclName() << Context.getTypeDeclType(cast<CXXRecordDecl>(ParentDC));"}},
[d]={{"clang/lib/Sema/SemaPseudoObject.cpp",830,"/// @property-specific behavior for doing lvalue-to-rvalue conversion.\nExprResult ObjCPropertyOpBuilder::buildRValueOperation(Expr *op) {\n // Explicit properties always have getters, but implicit ones don\'t.\n  // Check that before proceeding.\n  if (RefExpr->isImplicitProperty() && !RefExpr->getImplicitPropertyGetter()) {\n   S.Diag(RefExpr->getLocation(), diag::err_getter_not_found) << RefExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/many-template-parameter-lists.cpp"]={"clang/test/SemaCXX/many-template-parameter-lists.cpp:31:30: error: no member \'A\' in \'X<int>\'; it has not yet been instantiated"}
["clang/test/SemaObjC/property-user-setter.m"]={"clang/test/SemaObjC/property-user-setter.m:92:9: error: no getter method for read from property","clang/test/SemaObjC/property-user-setter.m:135:15: error: no getter method for read from property"}
}
}
},
},
["err_member_qualification"]={
["err_global_asm_qualifier_ignored"]={
[c]="err_member_qualification",
[b]={{nil,o,"err_global_asm_qualifier_ignored"}},
[d]="non-friend class member %0 cannot have a qualified name",
[i]={{nil,o,"meaningless \'%0\' on asm outside function"}},
[e]="non-friend class member A cannot have a qualified name",
[j]={{nil,o,"meaningless \'A\' on asm outside function"}},
[f]=k,
[h]=k,
[g]="non\\-friend class member (.*?) cannot have a qualified name",
[c]="meaningless \'(.*?)\' on asm outside function",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,o,"Inline Assembly Issue"}},
[b]={"a007d36c1bad",1287008393,"Generalize the checking for qualification of (non-friend) class","Generalize the checking for qualification of (non-friend) class\nmembers. Provide a hard error when the qualification doesn\'t match the\ncurrent class type, or a warning + Fix-it if it does match the current\nclass type. Fixes PR8159.\n\nllvm-svn: 116445"},
[g]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator.","[OPENMP50]Add initial support for OpenMP 5.0 iterator.\n\nAdded basic parsing/semantic analysis/(de)serialization support for\niterator expression introduced in OpenMP 5.0."},
[j]={{o,6191,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // Check whether the qualifying scope encloses the scope of the original\n  // declaration. For a template-id, we perform the checks in\n  // CheckTemplateSpecializationScope.\n  if (!Cur->Encloses(DC) && !IsTemplateId) {\n    if (Cur->isRecord())\n      Diag(Loc, diag::err_member_qualification) << Name << SS.getRange();"},{o,6219,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  if (Cur->isRecord()) {\n    // ...\n    Diag(Loc, diag::err_member_qualification) << Name << SS.getRange();"},{Q,3594,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (isInstField) {\n    // ...\n    if (SS.isSet() && !SS.isInvalid()) {\n      // The user provided a superfluous scope specifier inside a class\n      // definition:\n      //\n      // class X {\n      //  int X::member;\n      // };\n      if (DeclContext *DC = computeDeclContext(SS, false))\n      // ...\n      else\n        Diag(D.getIdentifierLoc(), diag::err_member_qualification) << Name << SS.getRange();"}},
[d]={{cb,1659,"/// ParseSimpleAsm\n///\n/// [GNU] simple-asm-expr:\n///         \'asm\' \'(\' asm-string-literal \')\'\n///\nExprResult Parser::ParseSimpleAsm(bool ForAsmLabel, SourceLocation *EndLoc) {\n  // ...\n  if (isGNUAsmQualifier(Tok)) {\n    // ...\n    Diag(Tok, diag::err_global_asm_qualifier_ignored) << GNUAsmQualifiers::getQualifierName(getGNUAsmQualifier(Tok)) << FixItHint::CreateRemoval(RemovalRange);"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp:7:20: error: non-friend class member \'x\' cannot have a qualified name","clang/test/CXX/dcl.decl/dcl.meaning/p1.cpp:13:20: error: non-friend class member \'x2\' cannot have a qualified name"}
["clang/test/Parser/asm-qualifiers.c"]={"clang/test/Parser/asm-qualifiers.c:55:5: error: meaningless \'volatile\' on asm outside function","clang/test/Parser/asm-qualifiers.c:56:5: error: meaningless \'inline\' on asm outside function","clang/test/Parser/asm-qualifiers.c:57:5: error: meaningless \'goto\' on asm outside function"}
}
}
},
},
["err_member_redeclared"]={
["err_global_call_not_config"]={
[c]="err_member_redeclared",
[b]="err_global_call_not_config",
[d]="class member cannot be redeclared",
[i]="call to global function %0 not configured",
[e]="class member cannot be redeclared",
[j]="call to global function A not configured",
[f]=k,
[h]=k,
[g]="class member cannot be redeclared",
[c]="call to global function (.*?) not configured",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={ib,1237025389,fb,gb},
[g]={"34a20b081e43",1317599355,"CUDA: diagnose unconfigured calls to global functions","CUDA: diagnose unconfigured calls to global functions\n\nllvm-svn: 140975"},
[j]={{o,4005,"/// 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 (OldMethod && NewMethod) {\n      // ...\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n        // ...\n        // C++ [class.mem]p1:\n        //  [...] A member shall not be declared twice in the\n        //  member-specification, except that a nested class or member\n        //  class template can be declared and then later defined.\n        if (!inTemplateInstantiation()) {\n          // ...\n          if (isa<CXXConstructorDecl>(OldMethod))\n          // ...\n          else if (isa<CXXDestructorDecl>(NewMethod))\n          // ...\n          else if (isa<CXXConversionDecl>(NewMethod))\n          // ...\n          else\n            NewDiag = diag::err_member_redeclared;"}},
[d]={{q,7514,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTyThe 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  if (getLangOpts().CUDA) {\n    if (Config) {\n    // ...\n    } else {\n      // CUDA: Calls to global functions must be configured\n      if (FDecl && FDecl->hasAttr<CUDAGlobalAttr>())\n        return ExprError(Diag(LParenLoc, diag::err_global_call_not_config) << FDecl << Fn->getSourceRange());"}},
[l]={
[l]={
["clang/test/SemaTemplate/injected-class-name.cpp"]={"clang/test/SemaTemplate/injected-class-name.cpp:30:8: error: class member cannot be redeclared","clang/test/SemaTemplate/injected-class-name.cpp:34:8: error: class member cannot be redeclared","clang/test/SemaTemplate/injected-class-name.cpp:38:8: error: class member cannot be redeclared","clang/test/SemaTemplate/injected-class-name.cpp:45:8: error: class member cannot be redeclared"}
["clang/test/SemaCUDA/kernel-call.cu"]={"clang/test/SemaCUDA/kernel-call.cu:16:5: error: call to global function \'g1\' not configured"}
}
}
},
},
["err_member_redeclared_in_instantiation"]={
["err_global_module_introducer_not_at_start"]={
[c]="err_member_redeclared_in_instantiation",
[b]={{nil,r,"err_global_module_introducer_not_at_start"}},
[d]="multiple overloads of %0 instantiate to the same signature %1",
[i]={{nil,r,"\'module;\' introducing a global module fragment can appear only at the start of the translation unit"}},
[e]="multiple overloads of A instantiate to the same signature B",
[j]={{nil,r,"\'module;\' introducing a global module fragment can appear only at the start of the translation unit"}},
[f]=k,
[h]=k,
[g]="multiple overloads of (.*?) instantiate to the same signature (.*?)",
[c]="\'module;\' introducing a global module fragment can appear only at the start of the translation unit",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,r,ac}},
[b]={"57e7ff9c0c44",1342152724,"Provide a special-case diagnostic when two class member functions instantiate","Provide a special-case diagnostic when two class member functions instantiate\nto the same signature. Fix a bug in the type printer which would cause this\ndiagnostic to print wonderful types like \'const const int *\'.\n\nllvm-svn: 160161"},
[g]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
[j]={{o,4009,"/// 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 (OldMethod && NewMethod) {\n     // ...\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n       // ...\n        // C++ [class.mem]p1:\n       //   [...] A member shall not be declared twice in the\n       //   member-specification, except that a nested class or member\n        //  class template can be declared and then later defined.\n       if (!inTemplateInstantiation()) {\n       // ...\n       } else {\n         Diag(New->getLocation(), diag::err_member_redeclared_in_instantiation) << New << New->getType();"}},
[d]={{cb,2416,"/// 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 // Parse a global-module-fragment, if present.\n if (getLangOpts().CPlusPlusModules && Tok.is(tok::semi)) {\n   // ...\n   if (ImportState != Sema::ModuleImportState::FirstDecl) {\n     Diag(StartLoc, diag::err_global_module_introducer_not_at_start) << SourceRange(StartLoc, SemiLoc);"}},
[l]={
[l]={
["clang/test/SemaTemplate/instantiate-method.cpp"]={"clang/test/SemaTemplate/instantiate-method.cpp:181:10: error: multiple overloads of \'f\' instantiate to the same signature \'void (const int *)\'"}
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:37:1: error: \'module;\' introducing a global module fragment can appear only at the start of the translation unit"}
}
}
},
},
["err_member_reference_needs_call"]={
["err_gnu_inline_asm_disabled"]={
[c]="err_member_reference_needs_call",
[b]="err_gnu_inline_asm_disabled",
[d]="base of member reference is a function; perhaps you meant to call it%select{| with no arguments}0?",
[i]="GNU-style inline assembly is disabled",
[e]={{nil,nil,{"base of member reference is a function; perhaps you meant to call it",{a," with no arguments"},"?"}}},
[j]="GNU-style inline assembly is disabled",
[f]=k,
[h]=k,
[g]="base of member reference is a function; perhaps you meant to call it(?:| with no arguments)\\?",
[c]="GNU\\-style inline assembly is disabled",
[h]=a,
[f]=a,
[i]=m,
[e]="Inline Assembly Issue",
[b]={"d82ae38d5300",1257489047,"Rework the fix-it hint for code like","Rework the fix-it hint for code like\n\n get_origin->x\n\nwhere get_origin is actually a function and the user has forgotten the\nparentheses. Instead of giving a lame note for the fix-it, give a\nfull-fledge error, early, then build the call expression to try to\nrecover. \n\nllvm-svn: 86238"},
[g]={"cb0d13fc2337",1421449528,"Adding option -fno-inline-asm to disallow inline asm","Adding option -fno-inline-asm to disallow inline asm\n\nSummary:\nThis patch add a new option to dis-allow all inline asm.\nAny GCC style inline asm will be reported as an error.\n\nReviewers: rnk, echristo\n\nReviewed By: rnk, echristo\n\nSubscribers: bob.wilson, rnk, echristo, rsmith, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D6870\n\nllvm-svn: 226340"},
[j]={{Tb,1681,"fail:\n  // ...\n  if (S.tryToRecoverWithCall(BaseExpr, S.PDiag(diag::err_member_reference_needs_call),"}},
[d]={{cb,897,"/// 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_asm: {\n    // ...\n    // Check if GNU-style InlineAsm is disabled.\n    // Empty asm string is allowed because it will not introduce\n    // any assembly code.\n    if (!(getLangOpts().GNUAsm || Result.isInvalid())) {\n      // ...\n      if (!SL->getString().trim().empty())\n        Diag(StartLoc, diag::err_gnu_inline_asm_disabled);"},{"clang/lib/Parse/ParseStmtAsm.cpp",749,"/// ParseAsmStatement - Parse a GNU extended asm statement.\n///      asm-statement:\n///        gnu-asm-statement\n///        ms-asm-statement\n///\n/// [GNU] gnu-asm-statement:\n///        \'asm\' asm-qualifier-list[opt] \'(\' asm-argument \')\' \';\'\n///\n/// [GNU] asm-argument:\n///        asm-string-literal\n///        asm-string-literal \':\' asm-operands[opt]\n///        asm-string-literal \':\' asm-operands[opt] \':\' asm-operands[opt]\n///        asm-string-literal \':\' asm-operands[opt] \':\' asm-operands[opt]\n///                \':\' asm-clobbers\n///\n/// [GNU] asm-clobbers:\n///        asm-string-literal\n///        asm-clobbers \',\' asm-string-literal\n///\nStmtResult Parser::ParseAsmStatement(bool &msAsm) {\n  // ...\n  // Check if GNU-style InlineAsm is disabled.\n  // Error on anything other than empty string.\n  if (!(getLangOpts().GNUAsm || AsmString.isInvalid())) {\n    // ...\n    if (!SL->getString().trim().empty())\n      Diag(Loc, diag::err_gnu_inline_asm_disabled);"}},
[l]={
[l]={
["clang/test/FixIt/fixit-errors.c"]={"clang/test/FixIt/fixit-errors.c:22:9: error: base of member reference is a function; perhaps you meant to call it with no arguments?"}
["clang/test/Parser/no-gnu-inline-asm.c"]={"clang/test/Parser/no-gnu-inline-asm.c:7:1: error: GNU-style inline assembly is disabled","clang/test/Parser/no-gnu-inline-asm.c:16:7: error: GNU-style inline assembly is disabled"}
}
}
},
},
["err_member_with_template_arguments"]={
["err_goto_into_protected_scope"]={
[c]={{nil,s,"err_member_with_template_arguments"}},
[b]="err_goto_into_protected_scope",
[d]={{nil,s,"member %0 cannot have template arguments"}},
[i]="cannot jump from this goto statement to its label",
[e]={{nil,s,"member A cannot have template arguments"}},
[j]="cannot jump from this goto statement to its label",
[f]=k,
[h]=k,
[g]="member (.*?) cannot have template arguments",
[c]="cannot jump from this goto statement to its label",
[h]=a,
[f]=a,
[i]={{nil,s,m}},
[e]=m,
[b]={"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.\n\nThis adjusts the handling for:\n\nexport module M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace. We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[g]={"960cc525ec72",1240047387,"rewrite the goto scope checking code to be more efficient, simpler,","rewrite the goto scope checking code to be more efficient, simpler,\nproduce better diagnostics, and be more correct in ObjC cases (fixing\nrdar://6803963).\n\nAn example is that we now diagnose:\n\nint test1(int x) {\n goto L;\n int a[x];\n  int b[x];\n L:\n  return sizeof a;\n}\n\nwith:\n\nscope-check.c:15:3: error: illegal goto into protected scope\n  goto L;\n ^\nscope-check.c:17:7: note: scope created by variable length array\n int b[x];\n      ^\nscope-check.c:16:7: note: scope created by variable length array\n  int a[x];\n      ^\n\ninstead of just saying \"invalid jump\".  An ObjC example is:\n\nvoid test1() {\n  goto L;\n  @try {\nL: ;\n  } @finally {\n  }\n}\n\nt.m:6:3: error: illegal goto into protected scope\n  goto L;\n  ^\nt.m:7:3: note: scope created by @try block\n @try {\n  ^\n\nThere are a whole ton of fixme\'s for stuff to do, but I believe that this\nis a monotonic improvement over what we had.\n\nllvm-svn: 69437"},
[j]={{Q,3574,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (isInstField) {\n    // ...\n    if (D.getName().getKind() == UnqualifiedIdKind::IK_TemplateId) {\n     Diag(D.getIdentifierLoc(), diag::err_member_with_template_arguments) << II << SourceRange(D.getName().TemplateId->LAngleLoc, D.getName().TemplateId->RAngleLoc) << D.getName().TemplateId->LAngleLoc;"}},
[d]={{nb,666,"/// 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);"},{nb,694,"/// 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);"},{nb,845,"static bool IsMicrosoftJumpWarning(unsigned JumpDiag, unsigned InDiagNote) { return (JumpDiag == diag::err_goto_into_protected_scope && (InDiagNote == diag::note_protected_by_variable_init || InDiagNote == diag::note_protected_by_variable_nontriv_destructor)); }"},{nb,945,"/// CheckJump - Validate that the specified jump statement is valid: that it is\n/// jumping within or out of its current scope, not into a deeper one.\nvoid JumpScopeChecker::CheckJump(Stmt *From, Stmt *To, SourceLocation DiagLoc, unsigned JumpDiagError, unsigned JumpDiagWarning, unsigned JumpDiagCXX98Compat) {\n  // ...\n  // Warn on gotos out of __finally blocks.\n  if (isa<GotoStmt>(From) || isa<IndirectGotoStmt>(From)) {\n    // If FromScope > ToScope, FromScope is more nested and the jump goes to a\n    // less nested scope. Check if it crosses a __finally along the way.\n    for (unsigned I = FromScope; I > ToScope; I = Scopes[I].ParentScope) {\n      // ...\n      if (Scopes[I].InDiag == diag::note_omp_protected_structured_block) {\n       S.Diag(From->getBeginLoc(), diag::err_goto_into_protected_scope);"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:39:7: error: member \'i\' cannot have template arguments","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:40:7: error: member \'j\' cannot have template arguments","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:50:7: error: member \'i\' cannot have template arguments","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:51:7: error: member \'j\' cannot have template arguments"}
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:45:3: error: cannot jump from this goto statement to its label"}
}
}
},
},
["err_mempointer_in_nonclass_type"]={
["err_goto_ms_asm_label"]={
[c]="err_mempointer_in_nonclass_type",
[b]="err_goto_ms_asm_label",
[d]="member pointer refers into non-class type %0",
[i]="cannot jump from this goto statement to label %0 inside an inline assembly block",
[e]="member pointer refers into non-class type A",
[j]="cannot jump from this goto statement to label A inside an inline assembly block",
[f]=k,
[h]=k,
[g]="member pointer refers into non\\-class type (.*?)",
[c]="cannot jump from this goto statement to label (.*?) inside an inline assembly block",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"0bdc1f5eef52",1244585859,"Handle member pointer types with dependent class types (e.g., int","Handle member pointer types with dependent class types (e.g., int\nT::*) and implement template instantiation for member pointer types.\n\nllvm-svn: 73151"},
[g]={"31097581aad8",1411352514,"ms-inline-asm: Scope inline asm labels to functions","ms-inline-asm: Scope inline asm labels to functions\n\nSummary:\nThis fixes PR20023. In order to implement this scoping rule, we piggy\nback on the existing LabelDecl machinery, by creating LabelDecl\'s that\nwill carry the \"internal\" name of the inline assembly label, which we\nwill rewrite the asm label to.\n\nReviewers: rnk\n\nSubscribers: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D4589\n\nllvm-svn: 218230"},
[j]={{cb,3096,"/// Build a member pointer type \\c T Class::*.\n///\n/// \\param T the type to which the member pointer refers.\n/// \\param Class the class type into which the member pointer points.\n/// \\param Loc the location where this type begins\n/// \\param Entity the name of the entity that will have this member pointer type\n///\n/// \\returns a member pointer type, if successful, or a NULL type if there was\n/// an error.\nQualType Sema::BuildMemberPointerType(QualType T, QualType Class, SourceLocation Loc, DeclarationName Entity) {\n  // ...\n  if (!Class->isDependentType() && !Class->isRecordType()) {\n    Diag(Loc, diag::err_mempointer_in_nonclass_type) << Class;"}},
[d]={{nb,995,"void JumpScopeChecker::CheckGotoStmt(GotoStmt *GS) {\n  if (GS->getLabel()->isMSAsmLabel()) {\n    S.Diag(GS->getGotoLoc(), diag::err_goto_ms_asm_label) << GS->getLabel()->getIdentifier();"}},
[l]={
[l]={
["clang/test/SemaTemplate/instantiate-member-pointers.cpp"]={"clang/test/SemaTemplate/instantiate-member-pointers.cpp:8:24: error: member pointer refers into non-class type \'int\'"}
["clang/test/Sema/ms-inline-asm.c"]={"clang/test/Sema/ms-inline-asm.c:118:3: error: cannot jump from this goto statement to label \'foo\' inside an inline assembly block","clang/test/Sema/ms-inline-asm.c:124:3: error: cannot jump from this goto statement to label \'foo\' inside an inline assembly block","clang/test/Sema/ms-inline-asm.c:128:3: error: cannot jump from this goto statement to label \'foo\' inside an inline assembly block","clang/test/Sema/ms-inline-asm.c:136:3: error: cannot jump from this goto statement to label \'foo\' inside an inline assembly block"}
}
}
},
},
["err_memptr_conv_via_virtual"]={
["err_half_const_requires_fp16"]={
[c]="err_memptr_conv_via_virtual",
[b]="err_half_const_requires_fp16",
[d]="conversion from pointer to member of class %0 to pointer to member of class %1 via virtual base %2 is not allowed",
[i]="half precision constant requires cl_khr_fp16",
[e]="conversion from pointer to member of class A to pointer to member of class B via virtual base C is not allowed",
[j]="half precision constant requires cl_khr_fp16",
[f]=k,
[h]=k,
[g]="conversion from pointer to member of class (.*?) to pointer to member of class (.*?) via virtual base (.*?) is not allowed",
[c]="half precision constant requires cl_khr_fp16",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={ib,1237025389,fb,gb},
[g]={"5c1a2c5d3e8f",1455708877,"[OpenCL] Added half type literal with suffix h.","[OpenCL] Added half type literal with suffix h.\n\nOpenCL Extension v1.2 s9.5 allows half precision floating point\ntype literals with suffices h or H when cl_khr_fp16 is enabled.\n\nExample:  half x = 1.0h;\n\nPatch by Liu Yaxun (Sam)!\n\nDifferential Revision: http://reviews.llvm.org/D16865\n\nllvm-svn: 261084"},
[j]={{"clang/lib/Sema/SemaCast.cpp",1823,"/// 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 (const RecordType *VBase = Paths.getDetectedVirtual()) {\n   Self.Diag(OpRange.getBegin(), diag::err_memptr_conv_via_virtual) << SrcClass << DestClass << QualType(VBase, 0) << OpRange;"},{pc,3284,"/// CheckMemberPointerConversion - Check the member pointer conversion from the\n/// expression From to the type ToType. This routine checks for ambiguous or\n/// virtual or inaccessible base-to-derived member pointer conversions\n/// for which IsMemberPointerConversion has already returned true. It returns\n/// true and produces a diagnostic if there was an error, or returns false\n/// otherwise.\nbool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess) {\n // ...\n if (const RecordType *VBase = Paths.getDetectedVirtual()) {\n   Diag(From->getExprLoc(), diag::err_memptr_conv_via_virtual) << FromClass << ToClass << QualType(VBase, 0) << From->getSourceRange();"}},
[d]={{q,4020,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.isFixedPointLiteral()) {\n // ...\n  } else if (Literal.isFloatingLiteral()) {\n   // ...\n   if (Literal.isHalf) {\n     if (getOpenCLOptions().isAvailableOption(\"cl_khr_fp16\", getLangOpts()))\n     // ...\n     else {\n       Diag(Tok.getLocation(), diag::err_half_const_requires_fp16);"}},
[l]={
[l]={
["clang/test/CXX/conv/conv.mem/p4.cpp"]={"clang/test/CXX/conv/conv.mem/p4.cpp:42:25: error: conversion from pointer to member of class \'Base\' to pointer to member of class \'test3::Derived\' via virtual base \'Base\' is not allowed","clang/test/CXX/conv/conv.mem/p4.cpp:43:27: error: conversion from pointer to member of class \'Base\' to pointer to member of class \'test3::Derived\' via virtual base \'Base\' is not allowed"}
["clang/test/SemaOpenCL/half.cl"]={"clang/test/SemaOpenCL/half.cl:4:20: error: half precision constant requires cl_khr_fp16","clang/test/SemaOpenCL/half.cl:18:15: error: half precision constant requires cl_khr_fp16","clang/test/SemaOpenCL/half.cl:19:7: error: half precision constant requires cl_khr_fp16"}
}
}
},
},
["err_memptr_incomplete"]={
["err_header_import_not_header_unit"]={
[c]={{nil,q,"err_memptr_incomplete"}},
[b]={{nil,r,"err_header_import_not_header_unit"}},
[d]={{nil,q,"member pointer has incomplete base type %0"}},
[i]={{nil,r,"header file %0 (aka \'%1\') cannot be imported because it is not known to be a header unit"}},
[e]={{nil,q,"member pointer has incomplete base type A"}},
[j]={{nil,r,"header file A (aka \'B\') cannot be imported because it is not known to be a header unit"}},
[f]=k,
[h]=k,
[g]="member pointer has incomplete base type (.*?)",
[c]="header file (.*?) \\(aka \'(.*?)\'\\) cannot be imported because it is not known to be a header unit",
[h]=a,
[f]=a,
[i]={{nil,q,m}},
[e]={{nil,r,O}},
[b]={"54d13b406828",1527651604,"Sema: Add a flag for rejecting member pointers with incomplete base types.","Sema: Add a flag for rejecting member pointers with incomplete base types.\n\nCodebases that need to be compatible with the Microsoft ABI can pass\nthis flag to avoid issues caused by the lack of a fixed ABI for\nincomplete member pointers.\n\nDifferential Revision: https://reviews.llvm.org/D47503\n\nllvm-svn: 333498"},
[g]={"8af8b8611c5d",1555017503,"[C++20] Implement context-sensitive header-name lexing and pp-import parsing in the preprocessor.","[C++20] Implement context-sensitive header-name lexing and pp-import parsing in the preprocessor.\n\nllvm-svn: 358231"},
[j]={{cb,9111,"/// The implementation of RequireCompleteType\nbool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser *Diagnoser) {\n  // ...\n  if (const MemberPointerType *MPTy = T->getAs<MemberPointerType>()) {\n   if (!MPTy->getClass()->isDependentType()) {\n     if (getLangOpts().CompleteMemberPointers && !MPTy->getClass()->getAsCXXRecordDecl()->isBeingDefined() && RequireCompleteType(Loc, QualType(MPTy->getClass(), 0), Kind, diag::err_memptr_incomplete))"}},
[d]={{"clang/lib/Lex/PPDirectives.cpp",2393,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///       lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // If this is a C++20 pp-import declaration, diagnose if we didn\'t find any\n // module corresponding to the named header.\n if (IsImportDecl && !SuggestedModule) {\n    Diag(FilenameTok, diag::err_header_import_not_header_unit) << OriginalFilename << File->getName();"}}
[l]={
["clang/test/SemaCXX/complete-member-pointers.cpp"]={"clang/test/SemaCXX/complete-member-pointers.cpp:5:3: error: member pointer has incomplete base type \'S\'"}
}
},
},
["err_memtag_any2arg_pointer"]={
["err_header_import_semi_in_macro"]={
[c]={{nil,z,"err_memtag_any2arg_pointer"}},
[b]={{nil,r,"err_header_import_semi_in_macro"}},
[d]={{nil,z,"at least one argument of MTE builtin function must be a pointer (%0, %1 invalid)"}},
[i]={{nil,r,"semicolon terminating header import declaration cannot be produced by a macro"}},
[e]={{nil,z,"at least one argument of MTE builtin function must be a pointer (A, B invalid)"}},
[j]={{nil,r,"semicolon terminating header import declaration cannot be produced by a macro"}},
[f]=k,
[h]=k,
[g]="at least one argument of MTE builtin function must be a pointer \\((.*?), (.*?) invalid\\)",
[c]="semicolon terminating header import declaration cannot be produced by a macro",
[h]=a,
[f]=a,
[i]={{nil,z,w}},
[e]={{nil,r,O}},
[b]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
[g]={"8af8b8611c5d",1555017503,"[C++20] Implement context-sensitive header-name lexing and pp-import parsing in the preprocessor.","[C++20] Implement context-sensitive header-name lexing and pp-import parsing in the preprocessor.\n\nllvm-svn: 358231"},
[j]={{X,9086,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // ...\n    // at least one argument should be pointer type\n    if (!ArgTypeA->isAnyPointerType() && !ArgTypeB->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_any2arg_pointer) << ArgTypeA << ArgTypeB << ArgA->getSourceRange();"}},
[d]={{"clang/lib/Lex/Preprocessor.cpp",1211,"/// Lex a token following the \'import\' contextual keyword.\n///\n///    pp-import: [C++20]\n///          import header-name pp-import-suffix[opt] ;\n///          import header-name-tokens pp-import-suffix[opt] ;\n/// [ObjC]    @ import module-name ;\n/// [Clang]  import module-name ;\n///\n///    header-name-tokens:\n///          string-literal\n///           < [any sequence of preprocessing-tokens other than >] >\n///\n///    module-name:\n///          module-name-qualifier[opt] identifier\n///\n///    module-name-qualifier\n///          module-name-qualifier[opt] identifier .\n///\n/// We respond to a pp-import by importing macros from the named module.\nbool Preprocessor::LexAfterModuleImport(Token &Result) {\n  // ...\n  if (ImportingHeader) {\n    // ...\n    if (SemiLoc.isMacroID())\n      Diag(SemiLoc, diag::err_header_import_semi_in_macro);"}}
[l]={
["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:136:10: error: at least one argument of MTE builtin function must be a pointer (\'std::nullptr_t\', \'std::nullptr_t\' invalid)"}
}
},
},
["err_memtag_arg_must_be_integer"]={
["err_hex_constant_requires"]={
[c]={{nil,z,"err_memtag_arg_must_be_integer"}},
[b]="err_hex_constant_requires",
[d]={{nil,z,"%0 argument of MTE builtin function must be an integer type (%1 invalid)"}},
[i]="hexadecimal floating %select{constant|literal}0 requires %select{an exponent|a significand}1",
[e]={{nil,z,"A argument of MTE builtin function must be an integer type (B invalid)"}},
[j]={{nil,nil,{"hexadecimal floating ",{"constant","literal"}," requires ",{"an exponent","a significand"}}}},
[f]=k,
[h]=k,
[g]="(.*?) argument of MTE builtin function must be an integer type \\((.*?) invalid\\)",
[c]="hexadecimal floating (?:constant|literal) requires (?:an exponent|a significand)",
[h]=a,
[f]=a,
[i]={{nil,z,w}},
[e]=O,
[b]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
[g]={"560a3579b29a",1457130726,"Update diagnostics now that hexadecimal literals look likely to be part of C++17.","Update diagnostics now that hexadecimal literals look likely to be part of C++17.\n\nllvm-svn: 262753"},
[j]={{X,8972,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == AArch64::BI__builtin_arm_irg) {\n    // ...\n    if (!SecArgType->isIntegerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_integer) << \"second\" << SecArgType << Arg1->getSourceRange();"},{X,9017,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_gmi) {\n    // ...\n    if (!SecArgType->isIntegerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_integer) << \"second\" << SecArgType << Arg1->getSourceRange();"}},
[d]={{ab,1300,"/// 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    if (!HasSignificandDigits) {\n      Diags.Report(Lexer::AdvanceToTokenCharacter(TokLoc, s - ThisTokBegin, SM, LangOpts), diag::err_hex_constant_requires) << LangOpts.CPlusPlus << 1;"},{ab,1336,"/// 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    } else if (saw_period) {\n      Diags.Report(Lexer::AdvanceToTokenCharacter(TokLoc, s - ThisTokBegin, SM, LangOpts), diag::err_hex_constant_requires) << LangOpts.CPlusPlus << 0;"}},
[l]={
[l]={
["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:15:10: error: second argument of MTE builtin function must be an integer type (\'unsigned int *\' invalid)","clang/test/Sema/builtins-arm64-mte.c:80:12: error: second argument of MTE builtin function must be an integer type (\'int *\' invalid)"}
["clang/test/Lexer/c2x_digit_separators.c"]={"clang/test/Lexer/c2x_digit_separators.c:35:16: error: hexadecimal floating constant requires a significand"}
}
}
},
},
["err_memtag_arg_must_be_pointer"]={
["err_hex_escape_no_digits"]={
[c]={{nil,z,"err_memtag_arg_must_be_pointer"}},
[b]="err_hex_escape_no_digits",
[d]={{nil,z,"%0 argument of MTE builtin function must be a pointer (%1 invalid)"}},
[i]="\\%0 used with no following hex digits",
[e]={{nil,z,"A argument of MTE builtin function must be a pointer (B invalid)"}},
[j]="\\A used with no following hex digits",
[f]=k,
[h]=k,
[g]="(.*?) argument of MTE builtin function must be a pointer \\((.*?) invalid\\)",
[c]="\\\\(.*?) used with no following hex digits",
[h]=a,
[f]=a,
[i]={{nil,z,w}},
[e]=O,
[b]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
[g]={S,1236199783,R,Q},
[j]={{X,8963,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == AArch64::BI__builtin_arm_irg) {\n    // ...\n    if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"},{X,8990,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_addg) {\n    // ...\n    if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"},{X,9012,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n if (BuiltinID == AArch64::BI__builtin_arm_gmi) {\n   // ...\n    if (!FirstArgType->isAnyPointerType())\n     return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"},{X,9034,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_ldg || BuiltinID == AArch64::BI__builtin_arm_stg) {\n   // ...\n   if (!FirstArgType->isAnyPointerType())\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) << \"first\" << FirstArgType << Arg0->getSourceRange();"}},
[d]={{"clang/lib/Lex/Lexer.cpp",3334,"std::optional<uint32_t> Lexer::tryReadNumericUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (Delimited && Kind == \'U\') {\n    if (Diagnose)\n      Diag(SlashLoc, diag::err_hex_escape_no_digits) << StringRef(KindLoc, 1);"},{ab,201,"/// 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 \'x\': { // Hex escape.\n    // ...\n    if (ThisTokBuf != ThisTokEnd && *ThisTokBuf == \'{\') {\n   // ...\n   } else if (ThisTokBuf == ThisTokEnd || !isHexDigit(*ThisTokBuf)) {\n     if (Diags)\n       Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::err_hex_escape_no_digits) << \"x\";"},{ab,464,"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 (UcnBegin[1] == \'u\' && in_char_string_literal && ThisTokBuf != ThisTokEnd && *ThisTokBuf == \'{\') {\n // ...\n } else if (ThisTokBuf == ThisTokEnd || !isHexDigit(*ThisTokBuf)) {\n    if (Diags)\n      Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, diag::err_hex_escape_no_digits) << StringRef(&ThisTokBuf[-1], 1);"}},
[l]={
[l]={
["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:10:10: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:75:12: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:90:11: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:110:4: error: first argument of MTE builtin function must be a pointer (\'int\' invalid)"}
["clang/test/Sema/ucn-cstring.c"]={"clang/test/Sema/ucn-cstring.c:11:19: error: \\U used with no following hex digits"}
}
}
},
},
["err_memtag_arg_null_or_pointer"]={
["err_hidden_visibility_dllexport"]={
[c]={{nil,z,"err_memtag_arg_null_or_pointer"}},
[b]={{nil,n,"err_hidden_visibility_dllexport"}},
[d]={{nil,z,"%0 argument of MTE builtin function must be a null or a pointer (%1 invalid)"}},
[i]={{nil,n,"hidden visibility cannot be applied to \'dllexport\' declaration"}},
[e]={{nil,z,"A argument of MTE builtin function must be a null or a pointer (B invalid)"}},
[j]={{nil,n,"hidden visibility cannot be applied to \'dllexport\' declaration"}},
[f]=k,
[h]=k,
[g]="(.*?) argument of MTE builtin function must be a null or a pointer \\((.*?) invalid\\)",
[c]="hidden visibility cannot be applied to \'dllexport\' declaration",
[h]=a,
[f]=a,
[i]={{nil,z,w}},
[e]={{nil,n,v}},
[b]={"18b0c40bc5db",1556312891,"[AArch64] Add support for MTE intrinsics","[AArch64] Add support for MTE intrinsics\nThis provides intrinsics support for Memory Tagging Extension (MTE),\nwhich was introduced with the Armv8.5-a architecture.\nThese intrinsics are available when __ARM_FEATURE_MEMORY_TAGGING is defined.\nEach intrinsic is described in detail in the ACLE Q1 2019 documentation:\nhttps://developer.arm.com/docs/101028/latest\nReviewed By: Tim Nortover, David Spickett\nDifferential Revision: https://reviews.llvm.org/D60485\n\nllvm-svn: 359348"},
[g]={"6f9c4851ab7c",1663023396,"[MinGW] Reject explicit hidden visibility applied to dllexport and hidden/protected applied to dllim...","[MinGW] Reject explicit hidden visibility applied to dllexport and hidden/protected applied to dllimport\n\nHidden visibility is incompatible with dllexport.\nHidden and protected visibilities are incompatible with dllimport.\n(PlayStation uses dllexport protected.)\n\nWhen an explicit visibility attribute applies on a dllexport/dllimport\ndeclaration, report a Frontend error (Sema does not compute visibility).\n\nReviewed By: mstorsjo\n\nDifferential Revision: https://reviews.llvm.org/D133266"},
[j]={{X,9063,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // ...\n    // argument should be either a pointer or null\n    if (!ArgTypeA->isAnyPointerType() && !isNull(ArgA))\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_null_or_pointer) << \"first\" << ArgTypeA << ArgA->getSourceRange();"},{X,9067,"/// SemaBuiltinARMMemoryTaggingCall - Handle calls of memory tagging extensions\nbool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == AArch64::BI__builtin_arm_subp) {\n    // ...\n    if (!ArgTypeB->isAnyPointerType() && !isNull(ArgB))\n      return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_null_or_pointer) << \"second\" << ArgTypeB << ArgB->getSourceRange();"}},
[d]={{"clang/lib/CodeGen/CodeGenModule.cpp",1385,"void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV, const NamedDecl *D) const {\n  // ...\n  if (GV->hasDLLExportStorageClass() || GV->hasDLLImportStorageClass()) {\n    // ...\n    if (GV->hasDLLExportStorageClass()) {\n      if (LV.getVisibility() == HiddenVisibility)\n        getDiags().Report(D->getLocation(), diag::err_hidden_visibility_dllexport);"}}
[l]={
["clang/test/Sema/builtins-arm64-mte.c"]={"clang/test/Sema/builtins-arm64-mte.c:115:10: error: first argument of MTE builtin function must be a null or a pointer (\'int\' invalid)","clang/test/Sema/builtins-arm64-mte.c:120:10: error: second argument of MTE builtin function must be a null or a pointer (\'int\' invalid)"}
}
},
},
["err_messaging_class_with_direct_method"]={
["err_hip_invalid_args_builtin_mangled_name"]={
[c]={{nil,n,"err_messaging_class_with_direct_method"}},
[b]={{nil,w,"err_hip_invalid_args_builtin_mangled_name"}},
[d]={{nil,n,"messaging a Class with a method that is possibly direct"}},
[i]={{nil,w,"invalid argument: symbol must be a device-side function or global variable"}},
[e]={{nil,n,"messaging a Class with a method that is possibly direct"}},
[j]={{nil,w,"invalid argument: symbol must be a device-side function or global variable"}},
[f]=k,
[h]=k,
[g]="messaging a Class with a method that is possibly direct",
[c]="invalid argument\\: symbol must be a device\\-side function or global variable",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]={{nil,w,m}},
[b]={rb,1573050950,xb,ub},
[g]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
[j]={{G,3155,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (Method && Method->isDirectMethod()) {\n    // ...\n    // Under ARC, self can\'t be assigned, and doing a direct call to `self`\n    // when it\'s a Class is hence safe.  For other cases, we can\'t trust `self`\n    // is what we think it is, so we reject it.\n    if (ReceiverType->isObjCClassType() && !isImplicit && !(Receiver->isObjCSelfExpr() && getLangOpts().ObjCAutoRefCount)) {\n      {\n        auto Builder = Diag(Receiver->getExprLoc(), diag::err_messaging_class_with_direct_method);"}},
[d]={{K,2795,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_get_device_side_mangled_name: {\n    // ...\n    if (!Check(TheCall)) {\n      Diag(TheCall->getBeginLoc(), diag::err_hip_invalid_args_builtin_mangled_name);"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct-arc.m"]={"clang/test/SemaObjC/method-direct-arc.m:27:4: error: messaging a Class with a method that is possibly direct"}
["clang/test/SemaCUDA/builtin-mangled-name.cu"]={"clang/test/SemaCUDA/builtin-mangled-name.cu:12:7: error: invalid argument: symbol must be a device-side function or global variable","clang/test/SemaCUDA/builtin-mangled-name.cu:14:7: error: invalid argument: symbol must be a device-side function or global variable","clang/test/SemaCUDA/builtin-mangled-name.cu:16:7: error: invalid argument: symbol must be a device-side function or global variable","clang/test/SemaCUDA/builtin-mangled-name.cu:18:7: error: invalid argument: symbol must be a device-side function or global variable","clang/test/SemaCUDA/builtin-mangled-name.cu:20:7: error: invalid argument: symbol must be a device-side function or global variable","clang/test/SemaCUDA/builtin-mangled-name.cu:22:7: error: invalid argument: symbol must be a device-side function or global variable"}
}
}
},
},
["err_messaging_super_with_direct_method"]={
["err_hlsl_attr_invalid_ast_node"]={
[c]={{nil,n,"err_messaging_super_with_direct_method"}},
[b]={{nil,n,"err_hlsl_attr_invalid_ast_node"}},
[d]={{nil,n,"messaging super with a direct method"}},
[i]={{nil,n,"attribute %0 only applies to %1"}},
[e]={{nil,n,"messaging super with a direct method"}},
[j]={{nil,n,"attribute A only applies to B"}},
[f]=k,
[h]=k,
[g]="messaging super with a direct method",
[c]="attribute (.*?) only applies to (.*?)",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]={{nil,n,v}},
[b]={rb,1573050950,xb,ub},
[g]={N,1625925174,M,L},
[j]={{G,2703,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (Method && Method->isDirectMethod() && SuperLoc.isValid()) {\n    Diag(SuperLoc, diag::err_messaging_super_with_direct_method) << FixItHint::CreateReplacement(SuperLoc, getLangOpts().ObjCAutoRefCount ? \"self\" : Method->getClassInterface()->getName());"},{G,3168,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (Method && Method->isDirectMethod()) {\n    // ...\n    if (SuperLoc.isValid()) {\n      {\n        auto Builder = Diag(SuperLoc, diag::err_messaging_super_with_direct_method);"}},
[d]={{u,7165,"static void handleHLSLSV_DispatchThreadIDAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // FIXME: support semantic on field.\n // See https://github.com/llvm/llvm-project/issues/57889.\n if (isa<FieldDecl>(D)) {\n    S.Diag(AL.getLoc(), diag::err_hlsl_attr_invalid_ast_node) << AL << \"parameter\";"}}
[l]={
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:144:4: error: messaging super with a direct method","clang/test/SemaObjC/method-direct.m:147:4: error: messaging super with a direct method"}
}
},
},
["err_messaging_unqualified_id_with_direct_method"]={
["err_hlsl_attr_invalid_type"]={
[c]={{nil,n,"err_messaging_unqualified_id_with_direct_method"}},
[b]={{nil,n,"err_hlsl_attr_invalid_type"}},
[d]={{nil,n,"messaging unqualified id with a method that is possibly direct"}},
[i]={{nil,n,"attribute %0 only applies to a field or parameter of type \'%1\'"}},
[e]={{nil,n,"messaging unqualified id with a method that is possibly direct"}},
[j]={{nil,n,"attribute A only applies to a field or parameter of type \'B\'"}},
[f]=k,
[h]=k,
[g]="messaging unqualified id with a method that is possibly direct",
[c]="attribute (.*?) only applies to a field or parameter of type \'(.*?)\'",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]={{nil,n,v}},
[b]={rb,1573050950,xb,ub},
[g]={N,1625925174,M,L},
[j]={{G,3143,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (Method && Method->isDirectMethod()) {\n    if (ReceiverType->isObjCIdType() && !isImplicit) {\n      Diag(Receiver->getExprLoc(), diag::err_messaging_unqualified_id_with_direct_method);"}},
[d]={{u,7172,"static void handleHLSLSV_DispatchThreadIDAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isLegalTypeForHLSLSV_DispatchThreadID(VD->getType())) {\n    S.Diag(AL.getLoc(), diag::err_hlsl_attr_invalid_type) << AL << \"uint/uint2/uint3\";"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:164:4: error: messaging unqualified id with a method that is possibly direct"}
["clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl"]={"clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl:5:24: error: attribute \'SV_DispatchThreadID\' only applies to a field or parameter of type \'uint/uint2/uint3\'","clang/test/SemaHLSL/Semantics/invalid_entry_parameter.hlsl:15:22: error: attribute \'SV_DispatchThreadID\' only applies to a field or parameter of type \'uint/uint2/uint3\'"}
}
}
},
},
["err_method_kernel"]={
["err_hlsl_attr_unsupported_in_stage"]={
[c]={{nil,z,"err_method_kernel"}},
[b]={{nil,s,"err_hlsl_attr_unsupported_in_stage"}},
[d]={{nil,z,"kernel functions cannot be class members"}},
[i]={{nil,s,"attribute %0 is unsupported in %select{Pixel|Vertex|Geometry|Hull|Domain|Compute|Library|RayGeneration|Intersection|AnyHit|ClosestHit|Miss|Callable|Mesh|Amplification|Invalid}1 shaders, requires %2"}},
[e]={{nil,z,"kernel functions cannot be class members"}},
[j]={{nil,s,{"attribute A is unsupported in ",{"Pixel","Vertex","Geometry","Hull","Domain","Compute","Library","RayGeneration","Intersection","AnyHit","ClosestHit","Miss","Callable","Mesh","Amplification","Invalid"}," shaders, requires C"}}},
[f]=k,
[h]=k,
[g]="kernel functions cannot be class members",
[c]="attribute (.*?) is unsupported in (?:Pixel|Vertex|Geometry|Hull|Domain|Compute|Library|RayGeneration|Intersection|AnyHit|ClosestHit|Miss|Callable|Mesh|Amplification|Invalid) shaders, requires (.*?)",
[h]=a,
[f]=a,
[i]={{nil,z,m}},
[e]={{nil,s,v}},
[b]={"d6865b7d71bc",1557238954,"[OpenCL] Prevent mangling kernel functions.","[OpenCL] Prevent mangling kernel functions.\n\nKernel function names have to be preserved as in the original\nsource to be able to access them from the host API side. \n\nThis commit also adds restriction to kernels that prevents them\nfrom being used in overloading, templates, etc.\n\nDifferential Revision: https://reviews.llvm.org/D60454\n\nllvm-svn: 360152"},
[g]={"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.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[j]={{o,10710,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().OpenCL && NewFD->hasAttr<OpenCLKernelAttr>()) {\n    // ...\n    if (getLangOpts().OpenCLCPlusPlus) {\n     if (DC->isRecord()) {\n       Diag(D.getIdentifierLoc(), diag::err_method_kernel);"}},
[d]={{u,7056,"static void handleHLSLNumThreadsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!llvm::is_contained({Triple::Compute, Triple::Mesh, Triple::Amplification, Triple::Library}, Env)) {\n    // ...\n    S.Diag(AL.getLoc(), diag::err_hlsl_attr_unsupported_in_stage) << AL << Pipeline << \"Compute, Amplification, Mesh or Library\";"},{u,7127,"static void handleHLSLSVGroupIndexAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Env != Triple::Compute && Env != Triple::Library) {\n    // ...\n    S.Diag(AL.getLoc(), diag::err_hlsl_attr_unsupported_in_stage) << AL << (uint32_t)Pipeline << \"Compute\";"},{u,7154,"static void handleHLSLSV_DispatchThreadIDAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n  // FIXME: it is OK for a compute shader entry and pixel shader entry live in\n  // same HLSL file.Issue https://github.com/llvm/llvm-project/issues/57880.\n  if (Target.getEnvironment() != Triple::Compute && Target.getEnvironment() != Triple::Library) {\n   // ...\n    S.Diag(AL.getLoc(), diag::err_hlsl_attr_unsupported_in_stage) << AL << Pipeline << \"Compute\";"}},
[l]={
[l]={
["clang/test/SemaOpenCLCXX/invalid-kernel.clcpp"]={"clang/test/SemaOpenCLCXX/invalid-kernel.clcpp:9:15: error: kernel functions cannot be class members"}
["clang/test/SemaHLSL/Semantics/entry_parameter.hlsl"]={"clang/test/SemaHLSL/Semantics/entry_parameter.hlsl:7:22: error: attribute \'SV_GroupIndex\' is unsupported in Mesh shaders, requires Compute","clang/test/SemaHLSL/Semantics/entry_parameter.hlsl:7:47: error: attribute \'SV_DispatchThreadID\' is unsupported in Mesh shaders, requires Compute"}
}
}
},
},
["err_method_not_found_with_typo"]={
["err_hlsl_attribute_param_mismatch"]={
[c]="err_method_not_found_with_typo",
[b]={{nil,s,"err_hlsl_attribute_param_mismatch"}},
[d]="%select{instance|class}1 method %0 not found ; did you mean %2?",
[i]={{nil,s,"%0 attribute parameters do not match the previous declaration"}},
[e]={{nil,nil,{{"instance",mb}," method A not found ; did you mean C?"}}},
[j]={{nil,s,"A attribute parameters do not match the previous declaration"}},
[f]=k,
[h]=k,
[g]="(?:instance|class) method (.*?) not found ; did you mean (.*?)\\?",
[c]="(.*?) attribute parameters do not match the previous declaration",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,s,v}},
[b]={Bb,1480718311,Ab,zb},
[g]={"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.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[j]={{G,1751,"bool Sema::CheckMessageArgumentTypes(const Expr *Receiver, QualType ReceiverType, MultiExprArg Args, Selector Sel, ArrayRef<SourceLocation> SelectorLocs, ObjCMethodDecl *Method, bool isClassMessage, bool isSuperMessage, SourceLocation lbrac, SourceLocation rbrac, SourceRange RecRange, QualType &ReturnType, ExprValueKind &VK) {\n  // ...\n  if (!Method) {\n    // ...\n    if (!getLangOpts().DebuggerSupport) {\n      // ...\n     if (OMD && !OMD->isInvalidDecl()) {\n       if (getLangOpts().ObjCAutoRefCount)\n         DiagID = diag::err_method_not_found_with_typo;"}},
[d]={{u,7112,"HLSLNumThreadsAttr *Sema::mergeHLSLNumThreadsAttr(Decl *D, const AttributeCommonInfo &AL, int X, int Y, int Z) {\n  if (HLSLNumThreadsAttr *NT = D->getAttr<HLSLNumThreadsAttr>()) {\n    if (NT->getX() != X || NT->getY() != Y || NT->getZ() != Z) {\n      Diag(NT->getLocation(), diag::err_hlsl_attribute_param_mismatch) << AL;"},{u,7209,"HLSLShaderAttr *Sema::mergeHLSLShaderAttr(Decl *D, const AttributeCommonInfo &AL, HLSLShaderAttr::ShaderType ShaderType) {\n if (HLSLShaderAttr *NT = D->getAttr<HLSLShaderAttr>()) {\n   if (NT->getType() != ShaderType) {\n     Diag(NT->getLocation(), diag::err_hlsl_attribute_param_mismatch) << AL;"}},
[l]={
[l]={
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:432:6: error: instance method \'test18\' not found ; did you mean \'test17\'?"}
["clang/test/SemaHLSL/shader_type_attr.hlsl"]={"clang/test/SemaHLSL/shader_type_attr.hlsl:31:2: error: \'shader\' attribute parameters do not match the previous declaration","clang/test/SemaHLSL/shader_type_attr.hlsl:43:2: error: \'shader\' attribute parameters do not match the previous declaration"}
}
}
},
},
["err_mips_builtin_requires_dsp"]={
["err_hlsl_entry_shader_attr_mismatch"]={
[c]={{nil,n,"err_mips_builtin_requires_dsp"}},
[b]="err_hlsl_entry_shader_attr_mismatch",
[d]={{nil,n,"this builtin requires \'dsp\' ASE, please use -mdsp"}},
[i]="%0 attribute on entry function does not match the pipeline stage",
[e]={{nil,n,"this builtin requires \'dsp\' ASE, please use -mdsp"}},
[j]="A attribute on entry function does not match the pipeline stage",
[f]=k,
[h]=k,
[g]="this builtin requires \'dsp\' ASE, please use \\-mdsp",
[c]="(.*?) attribute on entry function does not match the pipeline stage",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]=v,
[b]={rb,1573050950,xb,ub},
[g]={N,1625925174,M,L},
[j]={{X,3921,"bool Sema::CheckMipsBuiltinCpu(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  if (Mips::BI__builtin_mips_addu_qb <= BuiltinID && BuiltinID <= Mips::BI__builtin_mips_lwx) {\n   if (!TI.hasFeature(\"dsp\"))\n     return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_dsp);"}},
[d]={{p,10275,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().HLSL) {\n    // ...\n    // Skip operator overload which not identifier.\n    // Also make sure NewFD is in translation-unit scope.\n    if (!NewFD->isInvalidDecl() && Name.isIdentifier() && NewFD->getName() == TargetInfo.getTargetOpts().HLSLEntry && S->getDepth() == 0) {\n     // ...\n      if (!NewFD->isInvalidDecl()) {\n        // ...\n        // To share code with HLSLShaderAttr, add HLSLShaderAttr to entry\n        // function.\n        if (HLSLShaderAttr *NT = NewFD->getAttr<HLSLShaderAttr>()) {\n          if (NT->getType() != ShaderType)\n           Diag(NT->getLocation(), diag::err_hlsl_entry_shader_attr_mismatch) << NT;"}},
[l]={
[l]={
["clang/test/Sema/builtins-mips-features.c"]={"clang/test/Sema/builtins-mips-features.c:14:3: error: this builtin requires \'dsp\' ASE, please use -mdsp","clang/test/Sema/builtins-mips-features.c:16:3: error: this builtin requires \'dsp\' ASE, please use -mdsp"}
["clang/test/SemaHLSL/entry_shader.hlsl"]={"clang/test/SemaHLSL/entry_shader.hlsl:5:21: error: \'shader\' attribute on entry function does not match the pipeline stage"}
}
}
},
},
["err_mips_builtin_requires_dspr2"]={
["err_hlsl_expected_space"]={
[c]={{nil,n,"err_mips_builtin_requires_dspr2"}},
[b]={{nil,n,"err_hlsl_expected_space"}},
[d]={{nil,n,"this builtin requires \'dsp r2\' ASE, please use -mdspr2"}},
[i]={{nil,n,"invalid space specifier \'%0\' used; expected \'space\' followed by an integer, like space1"}},
[e]={{nil,n,"this builtin requires \'dsp r2\' ASE, please use -mdspr2"}},
[j]={{nil,n,"invalid space specifier \'A\' used; expected \'space\' followed by an integer, like space1"}},
[f]=k,
[h]=k,
[g]="this builtin requires \'dsp r2\' ASE, please use \\-mdspr2",
[c]="invalid space specifier \'(.*?)\' used; expected \'space\' followed by an integer, like space1",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]={{nil,n,v}},
[b]={rb,1573050950,xb,ub},
[g]={N,1625925174,M,L},
[j]={{X,3928,"bool Sema::CheckMipsBuiltinCpu(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (Mips::BI__builtin_mips_absq_s_qb <= BuiltinID && BuiltinID <= Mips::BI__builtin_mips_subuh_r_qb) {\n   if (!TI.hasFeature(\"dspr2\"))\n     return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_dspr2);"}},
[d]={{u,7271,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!Space.startswith(\"space\")) {\n    S.Diag(SpaceArgLoc, diag::err_hlsl_expected_space) << Space;"},{u,7277,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n  if (SpaceNum.getAsInteger(10, Num)) {\n   S.Diag(SpaceArgLoc, diag::err_hlsl_expected_space) << Space;"}},
[l]={
[l]={
["clang/test/Sema/builtins-mips-features.c"]={"clang/test/Sema/builtins-mips-features.c:24:3: error: this builtin requires \'dsp r2\' ASE, please use -mdspr2","clang/test/Sema/builtins-mips-features.c:26:3: error: this builtin requires \'dsp r2\' ASE, please use -mdspr2"}
["clang/test/SemaHLSL/resource_binding_attr_error.hlsl"]={"clang/test/SemaHLSL/resource_binding_attr_error.hlsl:11:26: error: invalid space specifier \'s2\' used; expected \'space\' followed by an integer, like space1","clang/test/SemaHLSL/resource_binding_attr_error.hlsl:19:26: error: invalid space specifier \'spaces\' used; expected \'space\' followed by an integer, like space1"}
}
}
},
},
["err_mips_builtin_requires_msa"]={
["err_hlsl_init_priority_unsupported"]={
[c]={{nil,n,"err_mips_builtin_requires_msa"}},
[b]={{nil,n,"err_hlsl_init_priority_unsupported"}},
[d]={{nil,n,"this builtin requires \'msa\' ASE, please use -mmsa"}},
[i]={{nil,n,"initializer priorities are not supported in HLSL"}},
[e]={{nil,n,"this builtin requires \'msa\' ASE, please use -mmsa"}},
[j]={{nil,n,"initializer priorities are not supported in HLSL"}},
[f]=k,
[h]=k,
[g]="this builtin requires \'msa\' ASE, please use \\-mmsa",
[c]="initializer priorities are not supported in HLSL",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]={{nil,n,v}},
[b]={rb,1573050950,xb,ub},
[g]={N,1625925174,M,L},
[j]={{X,3934,"bool Sema::CheckMipsBuiltinCpu(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (Mips::BI__builtin_msa_add_a_b <= BuiltinID && BuiltinID <= Mips::BI__builtin_msa_xori_b) {\n   if (!TI.hasFeature(\"msa\"))\n     return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_msa);"}},
[d]={{u,2344,"static void handleConstructorAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.getLangOpts().HLSL && AL.getNumArgs()) {\n    S.Diag(AL.getLoc(), diag::err_hlsl_init_priority_unsupported);"},{u,3851,"/// Handle __attribute__((init_priority(priority))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html\nstatic void handleInitPriorityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n  if (S.getLangOpts().HLSL) {\n   S.Diag(AL.getLoc(), diag::err_hlsl_init_priority_unsupported);"}},
[l]={
[l]={
["clang/test/Sema/builtins-mips-features.c"]={"clang/test/Sema/builtins-mips-features.c:34:3: error: this builtin requires \'msa\' ASE, please use -mmsa","clang/test/Sema/builtins-mips-features.c:36:3: error: this builtin requires \'msa\' ASE, please use -mmsa"}
["clang/test/SemaHLSL/GlobalConstructors.hlsl"]={"clang/test/SemaHLSL/GlobalConstructors.hlsl:12:20: error: initializer priorities are not supported in HLSL","clang/test/SemaHLSL/GlobalConstructors.hlsl:15:16: error: initializer priorities are not supported in HLSL"}
}
}
},
},
["err_mips_fp64_req"]={
["err_hlsl_missing_numthreads"]={
[c]={{nil,db,"err_mips_fp64_req"}},
[b]={{nil,n,"err_hlsl_missing_numthreads"}},
[d]={{nil,db,"\'%0\' can only be used if the target supports the mfhc1 and mthc1 instructions"}},
[i]={{nil,n,"missing numthreads attribute for %0 shader entry"}},
[e]={{nil,db,"\'A\' can only be used if the target supports the mfhc1 and mthc1 instructions"}},
[j]={{nil,n,"missing numthreads attribute for A shader entry"}},
[f]=k,
[h]=k,
[g]="\'(.*?)\' can only be used if the target supports the mfhc1 and mthc1 instructions",
[c]="missing numthreads attribute for (.*?) shader entry",
[h]=a,
[f]=a,
[i]={{nil,db,w}},
[e]={{nil,n,v}},
[b]={"eb63256095dd",1534929985,"[clang][mips] Set __mips_fpr correctly for -mfpxx","[clang][mips] Set __mips_fpr correctly for -mfpxx\n\nSet __mips_fpr to 0 if o32 ABI is used with either -mfpxx\nor none of -mfp32, -mfpxx, -mfp64 being specified.\n\nIntroduce additional checks:\n-mfpxx is only to be used in conjunction with the o32 ABI.\nreport an error when incompatible options are provided.\n\nFormerly no errors were raised when combining n32/n64 ABIs\nwith -mfp32 and -mfpxx.\n\nThere are other cases when __mips_fpr should be set to 0\nthat are not covered, ex. using o32 on a mips64 cpu\nwhich is valid but not supported in the backend as of yet.\n\nDifferential Revision: https://reviews.llvm.org/D50557\n\nllvm-svn: 340391"},
[g]={N,1625925174,M,L},
[j]={{"clang/lib/Basic/Targets/Mips.cpp",270,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // ...\n  // Option -mfp64 permitted on Mips32 iff revision 2 or higher is present\n  if (FPMode == FP64 && (CPU == \"mips1\" || CPU == \"mips2\" || getISARev() < 2) && ABI == \"o32\") {\n    Diags.Report(diag::err_mips_fp64_req) << \"-mfp64\";"}}
[d]={{p,12290,"void Sema::CheckHLSLEntryPoint(FunctionDecl *FD) {\n  // ...\n  case llvm::Triple::EnvironmentType::Compute:\n   if (!FD->hasAttr<HLSLNumThreadsAttr>()) {\n     Diag(FD->getLocation(), diag::err_hlsl_missing_numthreads) << Triple.getEnvironmentName();"}},
},
["err_mismatched_code_seg_base"]={
[c]={{nil,q,"err_mismatched_code_seg_base"}},
[d]={{nil,q,"derived class must specify the same code segment as its base classes"}},
[e]={{nil,q,"derived class must specify the same code segment as its base classes"}},
[f]=k,
[g]="derived class must specify the same code segment as its base classes",
[h]=a,
[i]={{nil,q,m}},
[b]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))","Add support for __declspec(code_seg(\"segname\"))\n\nAdd support for __declspec(code_seg(\"segname\"))\n\nThis patch is built on the existing support for #pragma code_seg. The code_seg\ndeclspec is allowed on functions and classes. The attribute enables the\nplacement of code into separate named segments, including compiler-generated\nmembers and template instantiations.\n\nFor more information, please see the following:\nhttps://msdn.microsoft.com/en-us/library/dn636922.aspx\n\nA new CodeSeg attribute is used instead of adding a new spelling to the existing\nSection attribute since they don’t apply to the same Subjects. Section\nattributes are also added for the code_seg declspec since they are used for\n#pragma code_seg. No CodeSeg attributes are added to the AST.\n\nThe patch is written to match with the Microsoft compiler’s behavior even where\nthat behavior is a little complicated (see https://reviews.llvm.org/D22931, the\nMicrosoft feedback page is no longer available since MS has removed the page).\nThat code is in getImplicitSectionAttrFromClass routine.\n\nDiagnostics messages are added to match with the Microsoft compiler for code-seg\nattribute mismatches on base and derived classes and virtual overrides.\n\n\nDifferential Revision: https://reviews.llvm.org/D43352\n\nllvm-svn: 332470"},
[j]={{Q,2758,"/// 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  if ((DerivedCSA || BaseCSA) && (!BaseCSA || !DerivedCSA || BaseCSA->getName() != DerivedCSA->getName())) {\n   Diag(Class->getLocation(), diag::err_mismatched_code_seg_base);"}},
[l]={
[l]={
["clang/test/SemaCXX/code-seg.cpp"]={"clang/test/SemaCXX/code-seg.cpp:27:8: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:30:43: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:33:43: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:37:62: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:38:65: error: derived class must specify the same code segment as its base classes","clang/test/SemaCXX/code-seg.cpp:38:65: error: derived class must specify the same code segment as its base classes"}
["clang/test/SemaHLSL/entry.hlsl"]={"clang/test/SemaHLSL/entry.hlsl:13:6: error: missing numthreads attribute for compute shader entry"}
}
}
},
},
["err_mismatched_code_seg_override"]={
["err_hlsl_missing_semantic_annotation"]={
[c]={{nil,q,"err_mismatched_code_seg_override"}},
[b]={{nil,n,"err_hlsl_missing_semantic_annotation"}},
[d]={{nil,q,"overriding virtual function must specify the same code segment as its overridden function"}},
[i]={{nil,n,"semantic annotations must be present for all parameters of an entry function or patch constant function"}},
[e]={{nil,q,"overriding virtual function must specify the same code segment as its overridden function"}},
[j]={{nil,n,"semantic annotations must be present for all parameters of an entry function or patch constant function"}},
[f]=k,
[h]=k,
[g]="overriding virtual function must specify the same code segment as its overridden function",
[c]="semantic annotations must be present for all parameters of an entry function or patch constant function",
[h]=a,
[f]=a,
[i]={{nil,q,m}},
[e]={{nil,n,v}},
[b]={"64144eb194c8",1526479037,"Add support for __declspec(code_seg(\"segname\"))","Add support for __declspec(code_seg(\"segname\"))\n\nAdd support for __declspec(code_seg(\"segname\"))\n\nThis patch is built on the existing support for #pragma code_seg. The code_seg\ndeclspec is allowed on functions and classes. The attribute enables the\nplacement of code into separate named segments, including compiler-generated\nmembers and template instantiations.\n\nFor more information, please see the following:\nhttps://msdn.microsoft.com/en-us/library/dn636922.aspx\n\nA new CodeSeg attribute is used instead of adding a new spelling to the existing\nSection attribute since they don’t apply to the same Subjects. Section\nattributes are also added for the code_seg declspec since they are used for\n#pragma code_seg. No CodeSeg attributes are added to the AST.\n\nThe patch is written to match with the Microsoft compiler’s behavior even where\nthat behavior is a little complicated (see https://reviews.llvm.org/D22931, the\nMicrosoft feedback page is no longer available since MS has removed the page).\nThat code is in getImplicitSectionAttrFromClass routine.\n\nDiagnostics messages are added to match with the Microsoft compiler for code-seg\nattribute mismatches on base and derived classes and virtual overrides.\n\n\nDifferential Revision: https://reviews.llvm.org/D43352\n\nllvm-svn: 332470"},
[g]={N,1625925174,M,L},
[j]={{Q,17994,"bool Sema::CheckOverridingFunctionAttributes(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  if ((NewCSA || OldCSA) && (!OldCSA || !NewCSA || NewCSA->getName() != OldCSA->getName())) {\n   Diag(New->getLocation(), diag::err_mismatched_code_seg_override);"}},
[d]={{p,12301,"void Sema::CheckHLSLEntryPoint(FunctionDecl *FD) {\n  // ...\n  for (const auto *Param : FD->parameters()) {\n    if (!Param->hasAttr<HLSLAnnotationAttr>()) {\n     // ...\n      Diag(FD->getLocation(), diag::err_hlsl_missing_semantic_annotation);"}},
[l]={
[l]={
["clang/test/SemaCXX/code-seg.cpp"]={"clang/test/SemaCXX/code-seg.cpp:60:7: error: overriding virtual function must specify the same code segment as its overridden function","clang/test/SemaCXX/code-seg.cpp:70:15: error: overriding virtual function must specify the same code segment as its overridden function","clang/test/SemaCXX/code-seg.cpp:73:46: error: overriding virtual function must specify the same code segment as its overridden function"}
["clang/test/SemaHLSL/Semantics/missing_entry_annotation.hlsl"]={"clang/test/SemaHLSL/Semantics/missing_entry_annotation.hlsl:4:6: error: semantic annotations must be present for all parameters of an entry function or patch constant function"}
}
}
},
},
["err_mismatched_exception_spec"]={
["err_hlsl_numthreads_argument_oor"]={
[c]="err_mismatched_exception_spec",
[b]={{nil,s,"err_hlsl_numthreads_argument_oor"}},
[d]="exception specification in declaration does not match previous declaration",
[i]={{nil,s,"argument \'%select{X|Y|Z}0\' to numthreads attribute cannot exceed %1"}},
[e]="exception specification in declaration does not match previous declaration",
[j]={{nil,s,{"argument \'",{"X","Y","Z"},"\' to numthreads attribute cannot exceed B"}}},
[f]=k,
[h]=k,
[g]="exception specification in declaration does not match previous declaration",
[c]="argument \'(?:X|Y|Z)\' to numthreads attribute cannot exceed (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,s,v}},
[b]={"4f4d7b5d8e5f",1246707540,"Catch function redeclarations with incompatible exception specifications.","Catch function redeclarations with incompatible exception specifications.\n\nllvm-svn: 74787"},
[g]={"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.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[j]={{"clang/lib/Sema/SemaExceptionSpec.cpp",311,"bool Sema::CheckEquivalentExceptionSpec(FunctionDecl *Old, FunctionDecl *New) {\n  // ...\n  unsigned DiagID = diag::err_mismatched_exception_spec;"},{"clang/lib/Sema/SemaExceptionSpec.cpp",504,"/// 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  unsigned DiagID = diag::err_mismatched_exception_spec;"}},
[d]={{u,7077,"static void handleHLSLNumThreadsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (X > 1024) {\n    S.Diag(AL.getArgAsExpr(0)->getExprLoc(), diag::err_hlsl_numthreads_argument_oor) << 0 << 1024;"},{u,7085,"static void handleHLSLNumThreadsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (Y > 1024) {\n   S.Diag(AL.getArgAsExpr(1)->getExprLoc(), diag::err_hlsl_numthreads_argument_oor) << 1 << 1024;"},{u,7093,"static void handleHLSLNumThreadsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (Z > ZMax) {\n    S.Diag(AL.getArgAsExpr(2)->getExprLoc(), diag::err_hlsl_numthreads_argument_oor) << 2 << ZMax;"}},
[l]={
[l]={
["clang/test/CXX/special/class.dtor/p3.cpp"]={"clang/test/CXX/special/class.dtor/p3.cpp:16:30: error: exception specification in declaration does not match previous declaration"}
["clang/test/SemaHLSL/num_threads.hlsl"]={"clang/test/SemaHLSL/num_threads.hlsl:78:17: error: argument \'Z\' to numthreads attribute cannot exceed 1"}
}
}
},
},
["err_mismatched_exception_spec_explicit_instantiation"]={
["err_hlsl_numthreads_invalid"]={
[c]="err_mismatched_exception_spec_explicit_instantiation",
[b]={{nil,s,"err_hlsl_numthreads_invalid"}},
[d]="exception specification in explicit instantiation does not match instantiated one",
[i]={{nil,s,"total number of threads cannot exceed %0"}},
[e]="exception specification in explicit instantiation does not match instantiated one",
[j]={{nil,s,"total number of threads cannot exceed A"}},
[f]=k,
[h]=k,
[g]="exception specification in explicit instantiation does not match instantiated one",
[c]="total number of threads cannot exceed (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,s,v}},
[b]={"73983918c45b",1415268650,"Fix for exception specification mismatch in explicit instantiation.","Fix for exception specification mismatch in explicit instantiation.\nAccording to C++ standard if an exception-specification is specified in an explicit instantiation directive, it shall be compatible with the exception-specifications of other declarations of that function. This patch adds checks for this.\nDifferential Revision: http://reviews.llvm.org/D5822\n\nllvm-svn: 221448"},
[g]={"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.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[j]={{Y,10667,"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      unsigned DiagID = diag::err_mismatched_exception_spec_explicit_instantiation;"}},
[d]={{u,7098,"static void handleHLSLNumThreadsAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (X * Y * Z > ThreadMax) {\n    S.Diag(AL.getLoc(), diag::err_hlsl_numthreads_invalid) << ThreadMax;"}},
[l]={
[l]={
["clang/test/SemaTemplate/explicit-instantiation.cpp"]={"clang/test/SemaTemplate/explicit-instantiation.cpp:156:10: error: exception specification in explicit instantiation does not match instantiated one","clang/test/SemaTemplate/explicit-instantiation.cpp:158:10: error: exception specification in explicit instantiation does not match instantiated one","clang/test/SemaTemplate/explicit-instantiation.cpp:160:10: error: exception specification in explicit instantiation does not match instantiated one","clang/test/SemaTemplate/explicit-instantiation.cpp:164:10: error: exception specification in explicit instantiation does not match instantiated one"}
["clang/test/SemaHLSL/num_threads.hlsl"]={"clang/test/SemaHLSL/num_threads.hlsl:80:2: error: total number of threads cannot exceed 768"}
}
}
},
},
["err_mismatched_ms_inheritance"]={
["err_hlsl_operator_unsupported"]={
[c]="err_mismatched_ms_inheritance",
[b]={{nil,s,"err_hlsl_operator_unsupported"}},
[d]="inheritance model does not match %select{definition|previous declaration}0",
[i]={{nil,s,"the \'%select{&|*|->}0\' operator is unsupported in HLSL"}},
[e]={{nil,nil,{"inheritance model does not match ",{gc,"previous declaration"}}}},
[j]={{nil,s,{"the \'",{"&","*","->"},"\' operator is unsupported in HLSL"}}},
[f]=k,
[h]=k,
[g]="inheritance model does not match (?:definition|previous declaration)",
[c]="the \'(?:&|\\*|\\-\\>)\' operator is unsupported in HLSL",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,s,v}},
[b]={"2c4e00ac1cc8",1391033256,"Sema: Diagnose improper application of inheritance keywords","Sema: Diagnose improper application of inheritance keywords\n\nWe would previously allow inappropriate inheritance keywords to appear\non class declarations.  We would also allow inheritance keywords on\ntemplates which were not fully specialized; this was divergent from\nMSVC.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2585\n\nllvm-svn: 200423"},
[g]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[j]={{K,4643,"bool Sema::checkMSInheritanceAttrOnDefinition(CXXRecordDecl *RD, SourceRange Range, bool BestCase, MSInheritanceModel ExplicitModel) {\n  // ...\n  Diag(Range.getBegin(), diag::err_mismatched_ms_inheritance) << 0 /*definition*/;"},{K,8068,"MSInheritanceAttr *Sema::mergeMSInheritanceAttr(Decl *D, const AttributeCommonInfo &CI, bool BestCase, MSInheritanceModel Model) {\n  if (MSInheritanceAttr *IA = D->getAttr<MSInheritanceAttr>()) {\n    // ...\n    Diag(IA->getLocation(), diag::err_mismatched_ms_inheritance) << 1 /*previous declaration*/;"}},
[d]={{q,16163,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  // ...\n  if (getLangOpts().HLSL && OpLoc.isValid()) {\n    if (Opc == UO_AddrOf)\n      return ExprError(Diag(OpLoc, diag::err_hlsl_operator_unsupported) << 0);"},{q,16224,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  // ...\n  if (getLangOpts().HLSL && OpLoc.isValid()) {\n    // ...\n    if (Opc == UO_Deref)\n      return ExprError(Diag(OpLoc, diag::err_hlsl_operator_unsupported) << 1);"},{"clang/lib/Sema/SemaExprMember.cpp",1735,"/// 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  if (getLangOpts().HLSL && IsArrow)\n    return ExprError(Diag(OpLoc, diag::err_hlsl_operator_unsupported) << 2);"}},
[l]={
[l]={
["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:243:8: error: inheritance model does not match definition","clang/test/SemaCXX/member-pointer-ms.cpp:245:8: error: inheritance model does not match definition","clang/test/SemaCXX/member-pointer-ms.cpp:300:8: error: inheritance model does not match previous declaration"}
["clang/test/SemaHLSL/prohibit_pointer.hlsl"]={"clang/test/SemaHLSL/prohibit_pointer.hlsl:22:22: error: the \'&\' operator is unsupported in HLSL","clang/test/SemaHLSL/prohibit_pointer.hlsl:26:12: error: the \'&\' operator is unsupported in HLSL","clang/test/SemaHLSL/prohibit_pointer.hlsl:30:12: error: the \'&\' operator is unsupported in HLSL","clang/test/SemaHLSL/prohibit_pointer.hlsl:30:15: error: the \'->\' operator is unsupported in HLSL","clang/test/SemaHLSL/prohibit_pointer.hlsl:34:5: error: the \'&\' operator is unsupported in HLSL","clang/test/SemaHLSL/prohibit_pointer.hlsl:36:3: error: the \'*\' operator is unsupported in HLSL","clang/test/SemaHLSL/prohibit_pointer.hlsl:41:11: error: the \'->\' operator is unsupported in HLSL","clang/test/SemaHLSL/prohibit_pointer.hlsl:50:21: error: the \'&\' operator is unsupported in HLSL"}
}
}
},
},
["err_mismatched_owning_module"]={
["err_hlsl_pointers_unsupported"]={
[c]={{nil,t,"err_mismatched_owning_module"}},
[b]={{nil,s,"err_hlsl_pointers_unsupported"}},
[d]={{nil,t,"declaration of %0 in %select{the global module|module %2}1 follows declaration in %select{the global module|module %4}3"}},
[i]={{nil,s,"%select{pointers|references}0 are unsupported in HLSL"}},
[e]={{nil,t,{"declaration of A in ",{"the global module","module C"}," follows declaration in ",{"the global module","module E"}}}},
[j]={{nil,s,{{"pointers","references"}," are unsupported in HLSL"}}},
[f]=k,
[h]=k,
[g]="declaration of (.*?) in (?:the global module|module (.*?)) follows declaration in (?:the global module|module (.*?))",
[c]="(?:pointers|references) are unsupported in HLSL",
[h]=a,
[f]=a,
[i]={{nil,t,m}},
[e]={{nil,s,v}},
[b]={"b87720b77aee",1507592529,"[Modules TS] Module ownership semantics for redeclarations.","[Modules TS] Module ownership semantics for redeclarations.\n\nWhen declaring an entity in the \"purview\" of a module, it\'s never a\nredeclaration of an entity in the purview of a default module or in no module\n(\"in the global module\"). Don\'t consider those other declarations as possible\nredeclaration targets if they\'re not visible, and reject any cases where we\npick a prior visible declaration that violates this rule.\n\nllvm-svn: 315251"},
[g]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[j]={{o,1686,"/// We\'ve determined that \\p New is a redeclaration of \\p Old. Check that they\n/// have compatible owning modules.\nbool Sema::CheckRedeclarationModuleOwnership(NamedDecl *New, NamedDecl *Old) {\n  // ...\n  if (NewIsModuleInterface || OldIsModuleInterface) {\n    // ...\n    Diag(New->getLocation(), diag::err_mismatched_owning_module) << New << NewIsModuleInterface << (NewIsModuleInterface ? NewM->getFullModuleName() : \"\") << OldIsModuleInterface << (OldIsModuleInterface ? OldM->getFullModuleName() : \"\");"}},
[d]={{G,2190,"/// 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  if (getLangOpts().HLSL && Loc.isValid()) {\n    Diag(Loc, diag::err_hlsl_pointers_unsupported) << 0;"},{G,2275,"/// 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 (getLangOpts().HLSL && Loc.isValid()) {\n    Diag(Loc, diag::err_hlsl_pointers_unsupported) << 1;"},{G,3108,"/// Build a member pointer type \\c T Class::*.\n///\n/// \\param T the type to which the member pointer refers.\n/// \\param Class the class type into which the member pointer points.\n/// \\param Loc the location where this type begins\n/// \\param Entity the name of the entity that will have this member pointer type\n///\n/// \\returns a member pointer type, if successful, or a NULL type if there was\n/// an error.\nQualType Sema::BuildMemberPointerType(QualType T, QualType Class, SourceLocation Loc, DeclarationName Entity) {\n  // ...\n  if (getLangOpts().HLSL && Loc.isValid()) {\n    Diag(Loc, diag::err_hlsl_pointers_unsupported) << 0;"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:34:5: error: declaration of \'a\' in module Foo follows declaration in the global module"}
["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:70:19: error: pointers are unsupported in HLSL","clang/test/SemaHLSL/group_shared.hlsl:73:7: error: pointers are unsupported in HLSL"}
}
}
},
},
["err_mismatched_uuid"]={
["err_hlsl_separate_attr_arg_and_number"]={
[c]="err_mismatched_uuid",
[b]={{nil,n,"err_hlsl_separate_attr_arg_and_number"}},
[d]="uuid does not match previous declaration",
[i]={{nil,n,"wrong argument format for hlsl attribute, use %0 instead"}},
[e]="uuid does not match previous declaration",
[j]={{nil,n,"wrong argument format for hlsl attribute, use A instead"}},
[f]=k,
[h]=k,
[g]="uuid does not match previous declaration",
[c]="wrong argument format for hlsl attribute, use (.*?) instead",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,n,v}},
[b]={"88f5ed9430a9",1473792926,"[clang-cl] Diagnose duplicate uuids.","[clang-cl] Diagnose duplicate uuids.\n\nThis mostly behaves cl.exe\'s behavior, even though clang-cl is stricter in some\ncorner cases and more lenient in others (see the included test).\n\nTo make the uuid declared previously here diagnostic work correctly, tweak\nstripTypeAttributesOffDeclSpec() to keep attributes in the right order.\n\nhttps://reviews.llvm.org/D24469\n\nllvm-svn: 281367"},
[g]={"e3fd0b20731f",1658170225,"[HLSL] Add resource binding attribute for HLSL.","[HLSL] Add resource binding attribute for HLSL.\n\nThe resource binding attribute is to set the virtual registers and logical register spaces resources in HLSL are bound to.\nFormat is \'\'register(ID, space)\'\' like register(t3,  space1).\nID must be start with\nt – for shader resource views (SRV),\ns – for samplers,\nu – for unordered access views (UAV),\nb – for constant buffer views (CBV).\n\nRegister space is default to space0.\n\nThe full documentation is available here: https://docs.microsoft.com/en-us/windows/win32/direct3d12/resource-binding-in-hlsl\n\nReviewed By: aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D130033"},
[j]={{K,6978,"UuidAttr *Sema::mergeUuidAttr(Decl *D, const AttributeCommonInfo &CI, StringRef UuidAsWritten, MSGuidDecl *GuidDecl) {\n  if (const auto *UA = D->getAttr<UuidAttr>()) {\n    // ...\n   if (!UA->getGuid().empty()) {\n      Diag(UA->getLocation(), diag::err_mismatched_uuid);"}},
[d]={{"clang/lib/Parse/ParseHLSL.cpp",114,"static void fixSeparateAttrArgAndNumber(StringRef ArgStr, SourceLocation ArgLoc, Token Tok, ArgsVector &ArgExprs, Parser &P, ASTContext &Ctx, Preprocessor &PP) {\n  // ...\n P.Diag(ArgLoc, diag::err_hlsl_separate_attr_arg_and_number) << FixedArg << FixItHint::CreateReplacement(SourceRange(ArgLoc, EndNumLoc), FixedArg);"}},
[l]={
[l]={
["clang/test/SemaCXX/ms-uuid.cpp"]={"clang/test/SemaCXX/ms-uuid.cpp:41:18: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:43:18: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:49:18: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:60:2: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:62:2: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:66:18: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:71:2: error: uuid does not match previous declaration","clang/test/SemaCXX/ms-uuid.cpp:83:18: error: uuid does not match previous declaration"}
["clang/test/SemaHLSL/resource_binding_attr_error.hlsl"]={"clang/test/SemaHLSL/resource_binding_attr_error.hlsl:30:22: error: wrong argument format for hlsl attribute, use b2 instead","clang/test/SemaHLSL/resource_binding_attr_error.hlsl:34:22: error: wrong argument format for hlsl attribute, use b2 instead","clang/test/SemaHLSL/resource_binding_attr_error.hlsl:34:27: error: wrong argument format for hlsl attribute, use space3 instead"}
}
}
},
},
["err_mismatched_visibility"]={
["err_hlsl_unsupported_register_number"]={
[c]="err_mismatched_visibility",
[b]={{nil,n,"err_hlsl_unsupported_register_number"}},
[d]="visibility does not match previous declaration",
[i]={{nil,n,"register number should be an integer"}},
[e]="visibility does not match previous declaration",
[j]={{nil,n,"register number should be an integer"}},
[f]=k,
[h]=k,
[g]="visibility does not match previous declaration",
[c]="register number should be an integer",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,n,v}},
[b]={"0232c19a3128",1336436919,"Add missing \'y\'.","Add missing \'y\'.\n\nllvm-svn: 156348"},
[g]={N,1625925174,M,L},
[j]={{K,2874,"template <class T> static T *mergeVisibilityAttr(Sema &S, Decl *D, const AttributeCommonInfo &CI, typename T::VisibilityType value) {\n  // ...\n  if (existingAttr) {\n    // ...\n    S.Diag(existingAttr->getLocation(), diag::err_mismatched_visibility);"}},
[d]={{u,7265,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Validate.\n  if (!Slot.empty()) {\n    // ...\n    if (SlotNum.getAsInteger(10, Num)) {\n      S.Diag(ArgLoc, diag::err_hlsl_unsupported_register_number);"}},
[l]={
[l]={
["clang/test/Sema/attr-visibility.c"]={"clang/test/Sema/attr-visibility.c:12:23: error: visibility does not match previous declaration","clang/test/Sema/attr-visibility.c:16:23: error: visibility does not match previous declaration","clang/test/Sema/attr-visibility.c:18:33: error: visibility does not match previous declaration","clang/test/Sema/attr-visibility.c:22:33: error: visibility does not match previous declaration"}
["clang/test/SemaHLSL/resource_binding_attr_error.hlsl"]={"clang/test/SemaHLSL/resource_binding_attr_error.hlsl:15:22: error: register number should be an integer","clang/test/SemaHLSL/resource_binding_attr_error.hlsl:27:22: error: register number should be an integer"}
}
}
},
},
["err_misplaced_ellipsis_in_declaration"]={
["err_hlsl_unsupported_register_type"]={
[c]="err_misplaced_ellipsis_in_declaration",
[b]={{nil,n,"err_hlsl_unsupported_register_type"}},
[d]="\'...\' must %select{immediately precede declared identifier|be innermost component of anonymous pack declaration}0",
[i]={{nil,n,"invalid resource class specifier \'%0\' used; expected \'b\', \'s\', \'t\', or \'u\'"}},
[e]={{nil,nil,{"\'...\' must ",{"immediately precede declared identifier","be innermost component of anonymous pack declaration"}}}},
[j]={{nil,n,"invalid resource class specifier \'A\' used; expected \'b\', \'s\', \'t\', or \'u\'"}},
[f]=k,
[h]=k,
[g]="\'\\.\\.\\.\' must (?:immediately precede declared identifier|be innermost component of anonymous pack declaration)",
[c]="invalid resource class specifier \'(.*?)\' used; expected \'b\', \'s\', \'t\', or \'u\'",
[h]=a,
[f]=a,
[i]=y,
[e]={{nil,n,v}},
[b]={"0efa75c3e38d",1332983802,"Reject \'template<typename...Ts> void f(Ts ...(x));\'. Add a special-case","Reject \'template<typename...Ts> void f(Ts ...(x));\'. Add a special-case\ndiagnostic and a fix-it to explain to the user where the ellipsis is\nsupposed to go.\n\nllvm-svn: 153622"},
[g]={N,1625925174,M,L},
[j]={{"clang/lib/Parse/ParseTemplate.cpp",1082,"void Parser::DiagnoseMisplacedEllipsis(SourceLocation EllipsisLoc, SourceLocation CorrectLoc, bool AlreadyHasEllipsis, bool IdentifierHasName) {\n  // ...\n  Diag(EllipsisLoc, diag::err_misplaced_ellipsis_in_declaration) << FixItHint::CreateRemoval(EllipsisLoc) << Insertion << !IdentifierHasName;"}},
[d]={{u,7257,"static void handleHLSLResourceBindingAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Validate.\n  if (!Slot.empty()) {\n    // ...\n    default:\n      S.Diag(ArgLoc, diag::err_hlsl_unsupported_register_type) << Slot.substr(0, 1);"}},
[l]={
[l]={
["clang/test/Parser/cxx11-templates.cpp"]={"clang/test/Parser/cxx11-templates.cpp:12:37: error: \'...\' must immediately precede declared identifier","clang/test/Parser/cxx11-templates.cpp:13:44: error: \'...\' must immediately precede declared identifier","clang/test/Parser/cxx11-templates.cpp:31:15: error: \'...\' must immediately precede declared identifier"}
["clang/test/SemaHLSL/resource_binding_attr_error.hlsl"]={"clang/test/SemaHLSL/resource_binding_attr_error.hlsl:4:20: error: invalid resource class specifier \'c\' used; expected \'b\', \'s\', \'t\', or \'u\'","clang/test/SemaHLSL/resource_binding_attr_error.hlsl:7:22: error: invalid resource class specifier \'i\' used; expected \'b\', \'s\', \'t\', or \'u\'"}
}
}
},
},
["err_misplaced_ivar"]={
["err_iboutletcollection_builtintype"]={
[c]="err_misplaced_ivar",
[b]="err_iboutletcollection_builtintype",
[d]="instance variables may not be placed in %select{categories|class extension}0",
[i]="type argument of iboutletcollection attribute cannot be a builtin type",
[e]={{nil,nil,{"instance variables may not be placed in ",{"categories","class extension"}}}},
[j]="type argument of iboutletcollection attribute cannot be a builtin type",
[f]=k,
[h]=k,
[g]="instance variables may not be placed in (?:categories|class extension)",
[c]="type argument of iboutletcollection attribute cannot be a builtin type",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"4c172c63e510",1266879860,"Early support for declaring ivars in class extensions. wip.","Early support for declaring ivars in class extensions. wip.\n\nllvm-svn: 96819"},
[g]={"9d7d3d84ac95",1282087156,"Diagnose if type of iboutletcollection attribute is a builtin type.","Diagnose if type of iboutletcollection attribute is a builtin type.\n\nllvm-svn: 111324"},
[j]={{o,18412,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n  // ...\n  if (ObjCImplementationDecl *IMPDecl = dyn_cast<ObjCImplementationDecl>(EnclosingDecl)) {\n  // ...\n  } else {\n   if (ObjCCategoryDecl *CDecl = dyn_cast<ObjCCategoryDecl>(EnclosingDecl)) {\n     if (LangOpts.ObjCRuntime.isFragile() || !CDecl->IsClassExtension()) {\n       Diag(Loc, diag::err_misplaced_ivar) << CDecl->IsClassExtension();"}},
[d]={{u,1536,"static void handleIBOutletCollection(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Diagnose use of non-object type in iboutletcollection attribute.\n  // FIXME. Gnu attribute extension ignores use of builtin types in\n  // attributes. So, __attribute__((iboutletcollection(char))) will be\n // treated as __attribute__((iboutletcollection())).\n if (!QT->isObjCIdType() && !QT->isObjCObjectType()) {\n   S.Diag(AL.getLoc(), QT->isBuiltinType() ? diag::err_iboutletcollection_builtintype : diag::err_iboutletcollection_type) << QT;"}},
[l]={
[l]={
["clang/test/SemaObjC/ivar-in-class-extension.m"]={"clang/test/SemaObjC/ivar-in-class-extension.m:35:13: error: instance variables may not be placed in categories"}
["clang/test/SemaObjC/iboutletcollection-attr.m"]={"clang/test/SemaObjC/iboutletcollection-attr.m:25:20: error: type argument of iboutletcollection attribute cannot be a builtin type"}
}
}
},
},
["err_missing_actual_pipe_type"]={
["err_iboutletcollection_type"]={
[c]="err_missing_actual_pipe_type",
[b]="err_iboutletcollection_type",
[d]="missing actual type specifier for pipe",
[i]="invalid type %0 as argument of iboutletcollection attribute",
[e]="missing actual type specifier for pipe",
[j]="invalid type A as argument of iboutletcollection attribute",
[f]=k,
[h]=k,
[g]="missing actual type specifier for pipe",
[c]="invalid type (.*?) as argument of iboutletcollection attribute",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support","[OpenCL] Pipe type support\n\nSummary:\nSupport for OpenCL 2.0 pipe type.\nThis is a bug-fix version for bader\'s patch reviews.llvm.org/D14441\n\n\nReviewers: pekka.jaaskelainen, Anastasia\n\nSubscribers: bader, Anastasia, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D15603\n\nllvm-svn: 257254"},
[g]={"b5d59b66c27e",1282076592,"Patch to add type parameter support for attribute iboutletcollection.","Patch to add type parameter support for attribute iboutletcollection.\nRadar 8308053.\n\nllvm-svn: 111275"},
[j]={{cb,1378,"/// 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       S.Diag(DeclLoc, diag::err_missing_actual_pipe_type) << DS.getSourceRange();"}},
[d]={{u,1520,"static void handleIBOutletCollection(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.hasParsedType())\n // ...\n  else {\n    // ...\n    if (!PT) {\n     S.Diag(AL.getLoc(), diag::err_iboutletcollection_type) << \"NSObject\";"},{u,1537,"static void handleIBOutletCollection(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n // Diagnose use of non-object type in iboutletcollection attribute.\n // FIXME. Gnu attribute extension ignores use of builtin types in\n // attributes. So, __attribute__((iboutletcollection(char))) will be\n // treated as __attribute__((iboutletcollection())).\n if (!QT->isObjCIdType() && !QT->isObjCObjectType()) {\n   S.Diag(AL.getLoc(), QT->isBuiltinType() ? diag::err_iboutletcollection_builtintype : diag::err_iboutletcollection_type) << QT;"}},
[l]={
[l]={
["clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl:24:17: error: missing actual type specifier for pipe"}
["clang/test/SemaObjC/iboutletcollection-attr.m"]={"clang/test/SemaObjC/iboutletcollection-attr.m:23:20: error: invalid type \'PV\' (aka \'void *\') as argument of iboutletcollection attribute"}
}
}
},
},
["err_missing_atsign_prefix"]={
["err_ice_ambiguous_conversion"]={
[c]="err_missing_atsign_prefix",
[b]="err_ice_ambiguous_conversion",
[d]={{nil,x,"%select{string|numeric}0 literal must be prefixed by \'@\'"},{n,nil,"string literal must be prefixed by \'@\' "}},
[i]="ambiguous conversion from type %0 to an integral or unscoped enumeration type",
[e]={{nil,x,{{"string","numeric"}," literal must be prefixed by \'@\'"}},{n,nil,"string literal must be prefixed by \'@\' "}},
[j]="ambiguous conversion from type A to an integral or unscoped enumeration type",
[f]=k,
[h]=k,
[g]="(?:string|numeric) literal must be prefixed by \'@\'",
[c]="ambiguous conversion from type (.*?) to an integral or unscoped enumeration type",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"bd714e9bb120",1387308823,"Objective-C. Make diagnostics and fix-its consistent ","Objective-C. Make diagnostics and fix-its consistent \nwhen diagnosing casting of a cstring literal to\nNSString in default and -fobjc-arc mode. \n// rdar://14106083\n\nllvm-svn: 197515"},
[g]={"f4c51d9d7613",1328349193,"In C++11 mode, when an integral constant expression is desired and we have a","In C++11 mode, when an integral constant expression is desired and we have a\nvalue of class type, look for a unique conversion operator converting to\nintegral or unscoped enumeration type and use that. Implements [expr.const]p5.\n\nSema::VerifyIntegerConstantExpression now performs the conversion and returns\nthe converted result. Some important callers of Expr::isIntegralConstantExpr\nhave been switched over to using it (including all of those required for C++11\nconformance); this switch brings a side-benefit of improved diagnostics and, in\nseveral cases, simpler code. However, some language extensions and attributes\nhave not been moved across and will not perform implicit conversions on\nconstant expressions of literal class type where an ICE is required.\n\nIn passing, fix static_assert to perform a contextual conversion to bool on its\nargument.\n\nllvm-svn: 149776"},
[j]={{W,17467,"bool Sema::CheckConversionToObjCLiteral(QualType DstType, Expr *&Exp, bool Diagnose) {\n  // ...\n  if (auto *SL = dyn_cast<StringLiteral>(SrcExpr)) {\n    // ...\n    if (Diagnose) {\n      Diag(SL->getBeginLoc(), diag::err_missing_atsign_prefix) << /*string*/ 0 << FixItHint::CreateInsertion(SL->getBeginLoc(), \"@\");"},{W,17525,"bool Sema::CheckConversionToObjCLiteral(QualType DstType, Expr *&Exp, bool Diagnose) {\n  // ...\n if ((isa<IntegerLiteral>(SrcExpr) || isa<CharacterLiteral>(SrcExpr) || isa<FloatingLiteral>(SrcExpr) || isa<ObjCBoolLiteralExpr>(SrcExpr) || isa<CXXBoolLiteralExpr>(SrcExpr)) && !SrcExpr->isNullPointerConstant(getASTContext(), Expr::NPC_NeverValueDependent)) {\n    // ...\n    if (Diagnose) {\n      Diag(SrcExpr->getBeginLoc(), diag::err_missing_atsign_prefix) << /*number*/ 1 << FixItHint::CreateInsertion(SrcExpr->getBeginLoc(), \"@\");"}},
[d]={{q,17882,"ExprResult Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, VerifyICEDiagnoser &Diagnoser, AllowFoldKind CanFold) {\n  // ...\n  if (getLangOpts().CPlusPlus11) {\n    // ...\n    class CXX11ConvertDiagnoser : public ICEConvertDiagnoser {\n      // ...\n     SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_ice_ambiguous_conversion) << T; }"}},
[l]={
[l]={
["clang/test/SemaObjC/objc-literal-fixit.m"]={"clang/test/SemaObjC/objc-literal-fixit.m:17:17: error: numeric literal must be prefixed by \'@\'","clang/test/SemaObjC/objc-literal-fixit.m:18:18: error: numeric literal must be prefixed by \'@\'","clang/test/SemaObjC/objc-literal-fixit.m:23:18: error: numeric literal must be prefixed by \'@\'","clang/test/SemaObjC/objc-literal-fixit.m:29:18: error: numeric literal must be prefixed by \'@\'"}
["clang/test/CXX/expr/expr.const/p5-0x.cpp"]={"clang/test/CXX/expr/expr.const/p5-0x.cpp:18:9: error: ambiguous conversion from type \'const A\' to an integral or unscoped enumeration type","clang/test/CXX/expr/expr.const/p5-0x.cpp:50:24: error: ambiguous conversion from type \'const struct Ambiguous\' to an integral or unscoped enumeration type","clang/test/CXX/expr/expr.const/p5-0x.cpp:58:11: error: ambiguous conversion from type \'const struct Ambiguous\' to an integral or unscoped enumeration type","clang/test/CXX/expr/expr.const/p5-0x.cpp:67:9: error: ambiguous conversion from type \'const struct Ambiguous\' to an integral or unscoped enumeration type","clang/test/CXX/expr/expr.const/p5-0x.cpp:74:12: error: ambiguous conversion from type \'const struct Ambiguous\' to an integral or unscoped enumeration type","clang/test/CXX/expr/expr.const/p5-0x.cpp:82:19: error: ambiguous conversion from type \'const struct Ambiguous\' to an integral or unscoped enumeration type"}
}
}
},
},
["err_missing_before_module_end"]={
["err_ice_explicit_conversion"]={
[c]="err_missing_before_module_end",
[b]="err_ice_explicit_conversion",
[d]="expected %0 at end of module",
[i]="integral constant expression requires explicit conversion from %0 to %1",
[e]="expected A at end of module",
[j]="integral constant expression requires explicit conversion from A to B",
[f]=k,
[h]=k,
[g]="expected (.*?) at end of module",
[c]="integral constant expression requires explicit conversion from (.*?) to (.*?)",
[h]=a,
[f]=a,
[i]=O,
[e]=m,
[b]={"c4e04a296403",1442640777,"[Modules] More descriptive diagnostics for misplaced import directive","[Modules] More descriptive diagnostics for misplaced import directive\n\nIf an import directive was put into wrong context, the error message was obscure,\ncomplaining on misbalanced braces. To get more descriptive messages, annotation\ntokens related to modules are processed where they must not be seen.\n\nDifferential Revision: http://reviews.llvm.org/D11844\n\nllvm-svn: 248085"},
[g]={"f4c51d9d7613",1328349193,"In C++11 mode, when an integral constant expression is desired and we have a","In C++11 mode, when an integral constant expression is desired and we have a\nvalue of class type, look for a unique conversion operator converting to\nintegral or unscoped enumeration type and use that. Implements [expr.const]p5.\n\nSema::VerifyIntegerConstantExpression now performs the conversion and returns\nthe converted result. Some important callers of Expr::isIntegralConstantExpr\nhave been switched over to using it (including all of those required for C++11\nconformance); this switch brings a side-benefit of improved diagnostics and, in\nseveral cases, simpler code. However, some language extensions and attributes\nhave not been moved across and will not perform implicit conversions on\nconstant expressions of literal class type where an ICE is required.\n\nIn passing, fix static_assert to perform a contextual conversion to bool on its\nargument.\n\nllvm-svn: 149776"},
[j]={{Nb,2723,"bool BalancedDelimiterTracker::diagnoseMissingClose() {\n  // ...\n  if (P.Tok.is(tok::annot_module_end))\n    P.Diag(P.Tok, diag::err_missing_before_module_end) << Close;"}},
[d]={{q,17871,"ExprResult Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, VerifyICEDiagnoser &Diagnoser, AllowFoldKind CanFold) {\n  // ...\n  if (getLangOpts().CPlusPlus11) {\n    // ...\n    class CXX11ConvertDiagnoser : public ICEConvertDiagnoser {\n      // ...\n      SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_ice_explicit_conversion) << T << ConvTy; }"}},
[l]={
[l]={
["clang/test/Modules/extern_cxx.cpp"]={"clang/test/Modules/extern_cxx.cpp:22:24: error: expected \'}\' at end of module"}
["clang/test/CXX/expr/expr.const/p5-0x.cpp"]={"clang/test/CXX/expr/expr.const/p5-0x.cpp:49:24: error: integral constant expression requires explicit conversion from \'const struct Explicit\' to \'int\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:57:11: error: integral constant expression requires explicit conversion from \'const struct Explicit\' to \'int\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:66:9: error: integral constant expression requires explicit conversion from \'const struct Explicit\' to \'int\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:73:12: error: integral constant expression requires explicit conversion from \'const struct Explicit\' to \'int\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:81:19: error: integral constant expression requires explicit conversion from \'const struct Explicit\' to \'int\'"}
}
}
},
},
["err_missing_catch_finally"]={
["err_ice_incomplete_type"]={
[c]="err_missing_catch_finally",
[b]="err_ice_incomplete_type",
[d]="@try statement without a @catch and @finally clause",
[i]="integral constant expression has incomplete class type %0",
[e]="@try statement without a @catch and @finally clause",
[j]="integral constant expression has incomplete class type A",
[f]=k,
[h]=k,
[g]="@try statement without a @catch and @finally clause",
[c]="integral constant expression has incomplete class type (.*?)",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={J,1236199783,H,I},
[g]={"f4c51d9d7613",1328349193,"In C++11 mode, when an integral constant expression is desired and we have a","In C++11 mode, when an integral constant expression is desired and we have a\nvalue of class type, look for a unique conversion operator converting to\nintegral or unscoped enumeration type and use that. Implements [expr.const]p5.\n\nSema::VerifyIntegerConstantExpression now performs the conversion and returns\nthe converted result. Some important callers of Expr::isIntegralConstantExpr\nhave been switched over to using it (including all of those required for C++11\nconformance); this switch brings a side-benefit of improved diagnostics and, in\nseveral cases, simpler code. However, some language extensions and attributes\nhave not been moved across and will not perform implicit conversions on\nconstant expressions of literal class type where an ICE is required.\n\nIn passing, fix static_assert to perform a contextual conversion to bool on its\nargument.\n\nllvm-svn: 149776"},
[j]={{N,2672,"///  objc-try-catch-statement:\n///    @try compound-statement objc-catch-list[opt]\n///    @try compound-statement objc-catch-list[opt] @finally compound-statement\n///\n///  objc-catch-list:\n///    @catch ( parameter-declaration ) compound-statement\n///    objc-catch-list @catch ( catch-parameter-declaration ) compound-statement\n///  catch-parameter-declaration:\n///    parameter-declaration\n///    \'...\' [OBJC2]\n///\nStmtResult Parser::ParseObjCTryStmt(SourceLocation atLoc) {\n // ...\n if (!catch_or_finally_seen) {\n    Diag(atLoc, diag::err_missing_catch_finally);"}},
[d]={{q,17866,"ExprResult Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, VerifyICEDiagnoser &Diagnoser, AllowFoldKind CanFold) {\n // ...\n if (getLangOpts().CPlusPlus11) {\n   // ...\n   class CXX11ConvertDiagnoser : public ICEConvertDiagnoser {\n     // ...\n     SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_ice_incomplete_type) << T; }"}},
[l]={
[l]={
["clang/test/Parser/objc-try-catch-1.m"]={"clang/test/Parser/objc-try-catch-1.m:41:3: error: @try statement without a @catch and @finally clause","clang/test/Parser/objc-try-catch-1.m:49:3: error: @try statement without a @catch and @finally clause","clang/test/Parser/objc-try-catch-1.m:55:3: error: @try statement without a @catch and @finally clause"}
["clang/test/CXX/expr/expr.const/p5-0x.cpp"]={"clang/test/CXX/expr/expr.const/p5-0x.cpp:48:24: error: integral constant expression has incomplete class type \'struct Incomplete\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:56:11: error: integral constant expression has incomplete class type \'struct Incomplete\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:65:9: error: integral constant expression has incomplete class type \'struct Incomplete\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:72:12: error: integral constant expression has incomplete class type \'struct Incomplete\'","clang/test/CXX/expr/expr.const/p5-0x.cpp:80:19: error: integral constant expression has incomplete class type \'struct Incomplete\'"}
}
}
},
},
["err_missing_comma_before_ellipsis"]={
["err_ice_not_integral"]={
[c]="err_missing_comma_before_ellipsis",
[b]="err_ice_not_integral",
[d]="C requires a comma prior to the ellipsis in a variadic function type",
[i]={{nil,mb,"%select{integer|integral}1 constant expression must have %select{integer|integral or unscoped enumeration}1 type, not %0"},{sb,nil,"integral constant expression must have integral or unscoped enumeration type, not %0"}},
[e]="C requires a comma prior to the ellipsis in a variadic function type",
[j]={{nil,mb,{{"integer","integral"}," constant expression must have ",{"integer","integral or unscoped enumeration"}," type, not A"}},{sb,nil,"integral constant expression must have integral or unscoped enumeration type, not A"}},
[f]=k,
[h]=k,
[g]="C requires a comma prior to the ellipsis in a variadic function type",
[c]="(?:integer|integral) constant expression must have (?:integer|integral or unscoped enumeration) type, not (.*?)",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={"9bfc2e50a786",1253655700,"In C++, a variadic function does not need an ellipsis prior to the comma. Parse it in both C and C++...","In C++, a variadic function does not need an ellipsis prior to the comma. Parse it in both C and C++, but diagnose it as an error in C with a fix-it hint to add the comma.\n\nllvm-svn: 82576"},
[g]={"f4c51d9d7613",1328349193,"In C++11 mode, when an integral constant expression is desired and we have a","In C++11 mode, when an integral constant expression is desired and we have a\nvalue of class type, look for a unique conversion operator converting to\nintegral or unscoped enumeration type and use that. Implements [expr.const]p5.\n\nSema::VerifyIntegerConstantExpression now performs the conversion and returns\nthe converted result. Some important callers of Expr::isIntegralConstantExpr\nhave been switched over to using it (including all of those required for C++11\nconformance); this switch brings a side-benefit of improved diagnostics and, in\nseveral cases, simpler code. However, some language extensions and attributes\nhave not been moved across and will not perform implicit conversions on\nconstant expressions of literal class type where an ICE is required.\n\nIn passing, fix static_assert to perform a contextual conversion to bool on its\nargument.\n\nllvm-svn: 149776"},
[j]={{hb,7499,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]   declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n      if (!getLangOpts().CPlusPlus) {\n        // ...\n        Diag(EllipsisLoc, diag::err_missing_comma_before_ellipsis) << FixItHint::CreateInsertion(EllipsisLoc, \", \");"}},
[d]={{q,17796,"ExprResult Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, AllowFoldKind CanFold) {\n  class SimpleICEDiagnoser : public VerifyICEDiagnoser {\n    // ...\n    SemaDiagnosticBuilder diagnoseNotICEType(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_ice_not_integral) << T << S.LangOpts.CPlusPlus; }"}},
[l]={
[l]={
["clang/test/C/C2x/n2975.c"]={"clang/test/C/C2x/n2975.c:53:15: error: C requires a comma prior to the ellipsis in a variadic function type"}
["clang/test/SemaCXX/enum-bitfield.cpp"]={"clang/test/SemaCXX/enum-bitfield.cpp:17:12: error: integral constant expression must have integral or unscoped enumeration type, not \'Z\'"}
}
}
},
},
["err_missing_default_ctor"]={
["err_ice_too_large"]={
[c]="err_missing_default_ctor",
[b]="err_ice_too_large",
[d]="%select{constructor for %1 must explicitly initialize the|implicit default constructor for %1 must explicitly initialize the|cannot use constructor inherited from base class %4;}0 %select{base class|member}2 %3 %select{which|which|of %1}0 does not have a default constructor",
[i]="integer constant expression evaluates to value %0 that cannot be represented in a %1-bit %select{signed|unsigned}2 integer type",
[e]={{nil,nil,{{"constructor for B must explicitly initialize the","implicit default constructor for B must explicitly initialize the","cannot use constructor inherited from base class E;"}," ",{"base class","member"}," D ",{"which","which","of B"}," does not have a default constructor"}}},
[j]={{nil,nil,{"integer constant expression evaluates to value A that cannot be represented in a B-bit ",{"signed","unsigned"}," integer type"}}},
[f]=k,
[h]=k,
[g]="(?:constructor for (.*?) must explicitly initialize the|implicit default constructor for (.*?) must explicitly initialize the|cannot use constructor inherited from base class (.*?);) (?:base class|member) (.*?) (?:which|which|of (.*?)) does not have a default constructor",
[c]="integer constant expression evaluates to value (.*?) that cannot be represented in a (.*?)\\-bit (?:signed|unsigned) integer type",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"d7686ef31c21",1257728747,"Unify the codepaths used to verify base and member initializers for explicitly","Unify the codepaths used to verify base and member initializers for explicitly\nand implicitly defined constructors. This has a number of benefits:\n\n1. Less code.\n\n2. Explicit and implicit constructors get the same diagnostics.\n\n3. The AST explicitly contains constructor calls from implicit default\nconstructors.  This allows handing some cases that previously weren\'t handled\ncorrectly in IRGen without any additional code. Specifically, implicit default\nconstructors containing calls to constructors with default arguments are now\nhandled correctly.\n\nllvm-svn: 86500"},
[g]={"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.\n\nllvm-svn: 213865"},
[j]={{"clang/lib/Sema/SemaInit.cpp",9878,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ListConstructorOverloadFailed:\n case FK_ConstructorOverloadFailed: {\n   // ...\n    case OR_No_Viable_Function:\n      if (Kind.getKind() == InitializationKind::IK_Default && (Entity.getKind() == InitializedEntity::EK_Base || Entity.getKind() == InitializedEntity::EK_Member || Entity.getKind() == InitializedEntity::EK_ParenAggInitMember) && isa<CXXConstructorDecl>(S.CurContext)) {\n       // ...\n       if (Entity.getKind() == InitializedEntity::EK_Base) {\n         S.Diag(Kind.getLocation(), diag::err_missing_default_ctor) << (InheritedFrom ? 2 : Constructor->isImplicit() ? 1 : 0) << S.Context.getTypeDeclType(Constructor->getParent()) << /*base=*/0 << Entity.getType() << InheritedFrom;"},{"clang/lib/Sema/SemaInit.cpp",9891,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ListConstructorOverloadFailed:\n  case FK_ConstructorOverloadFailed: {\n    // ...\n    case OR_No_Viable_Function:\n      if (Kind.getKind() == InitializationKind::IK_Default && (Entity.getKind() == InitializedEntity::EK_Base || Entity.getKind() == InitializedEntity::EK_Member || Entity.getKind() == InitializedEntity::EK_ParenAggInitMember) && isa<CXXConstructorDecl>(S.CurContext)) {\n       // ...\n       if (Entity.getKind() == InitializedEntity::EK_Base) {\n       // ...\n       } else {\n         S.Diag(Kind.getLocation(), diag::err_missing_default_ctor) << (InheritedFrom ? 2 : Constructor->isImplicit() ? 1 : 0) << S.Context.getTypeDeclType(Constructor->getParent()) << /*member=*/1 << Entity.getName() << InheritedFrom;"}},
[d]={{u,235,"/// If Expr is a valid integer constant, get the value of the integer\n/// expression and return success or failure. May output an error.\n///\n/// Negative argument is implicitly converted to unsigned, unless\n/// \\p StrictlyUnsigned is true.\ntemplate <typename AttrInfo> static bool checkUInt32Argument(Sema &S, const AttrInfo &AI, const Expr *Expr, uint32_t &Val, unsigned Idx = UINT_MAX, bool StrictlyUnsigned = false) {\n // ...\n if (!I->isIntN(32)) {\n   S.Diag(Expr->getExprLoc(), diag::err_ice_too_large) << toString(*I, 10, false) << 32 << /* Unsigned */ 1;"},{u,263,"/// Wrapper around checkUInt32Argument, with an extra check to be sure\n/// that the result will fit into a regular (signed) int. All args have the same\n/// purpose as they do in checkUInt32Argument.\ntemplate <typename AttrInfo> static bool checkPositiveIntArgument(Sema &S, const AttrInfo &AI, const Expr *Expr, int &Val, unsigned Idx = UINT_MAX) {\n  // ...\n  if (UVal > (uint32_t)std::numeric_limits<int>::max()) {\n    // ...\n    S.Diag(Expr->getExprLoc(), diag::err_ice_too_large) << toString(I, 10, false) << 32 << /* Unsigned */ 0;"},{u,5619,"// Checks whether an argument of launch_bounds attribute is\n// acceptable, performs implicit conversion to Rvalue, and returns\n// non-nullptr Expr result on success. Otherwise, it returns nullptr\n// and may output an error.\nstatic Expr *makeLaunchBoundsArgExpr(Sema &S, Expr *E, const CUDALaunchBoundsAttr &AL, const unsigned Idx) {\n // ...\n // Make sure we can fit it in 32 bits.\n  if (!I->isIntN(32)) {\n   S.Diag(E->getExprLoc(), diag::err_ice_too_large) << toString(*I, 10, false) << 32 << /* Unsigned */ 1;"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp:39:3: error: constructor for \'S\' must explicitly initialize the member \'e1\' which does not have a default constructor"}
["clang/test/Sema/constructor-attribute.c"]={"clang/test/Sema/constructor-attribute.c:8:40: error: integer constant expression evaluates to value 4294967296 that cannot be represented in a 32-bit unsigned integer type"}
}
}
},
},
["err_missing_dependent_template_keyword"]={
["err_id_after_template_in_nested_name_spec"]={
[c]="err_missing_dependent_template_keyword",
[b]="err_id_after_template_in_nested_name_spec",
[d]="use \'template\' keyword to treat \'%0\' as a dependent template name",
[i]="expected template name after \'template\' keyword in nested name specifier",
[e]="use \'template\' keyword to treat \'A\' as a dependent template name",
[j]="expected template name after \'template\' keyword in nested name specifier",
[f]=k,
[h]=k,
[g]="use \'template\' keyword to treat \'(.*?)\' as a dependent template name",
[c]="expected template name after \'template\' keyword in nested name specifier",
[h]=a,
[f]=a,
[i]=y,
[e]=C,
[b]={"786123dc48d8",1274483887,"Improve parser recovery when we encounter a dependent template name","Improve parser recovery when we encounter a dependent template name\nthat is missing the \'template\' keyword, e.g., \n\n t->getAs<T>()\n\nwhere getAs is a member of an unknown specialization. C++ requires\nthat we treat \"getAs\" as a value, but that would fail to parse since T\nis the name of a type. We would then fail at the \'>\', since a type\ncannot be followed by a \'>\'.\n\nThis is a very common error for C++ programmers to make, especially\nsince GCC occasionally allows it when it shouldn\'t (as does Visual\nC++). So, when we are in this case, we use tentative parsing to see if\nthe tokens starting at \"<\" can only be parsed as a template argument\nlist. If so, we produce a diagnostic with a fix-it that states that\nthe \'template\' keyword is needed:\n\ntest/SemaTemplate/dependent-template-recover.cpp:5:8: error: \'template\' keyword\n     is required to treat \'getAs\' as a dependent template name\n   t->getAs<T>();\n      ^\n      template \n\nThis is just a start of this patch; I\'d like to apply the same\napproach to everywhere that a template-id with dependent template name\ncan be parsed.\n\nllvm-svn: 104406"},
[g]={S,1236199783,R,Q},
[j]={{"clang/lib/Parse/ParseExprCXX.cpp",525,"/// Parse global scope or nested-name-specifier if present.\n///\n/// Parses a C++ global scope specifier (\'::\') or nested-name-specifier (which\n/// may be preceded by \'::\'). Note that this routine will not parse ::new or\n/// ::delete; it will just leave them in the token stream.\n///\n///       \'::\'[opt] nested-name-specifier\n///       \'::\'\n///\n///      nested-name-specifier:\n///         type-name \'::\'\n///         namespace-name \'::\'\n///         nested-name-specifier identifier \'::\'\n///         nested-name-specifier \'template\'[opt] simple-template-id \'::\'\n///\n///\n/// \\param SS the scope specifier that will be set to the parsed\n/// nested-name-specifier (or empty)\n///\n/// \\param ObjectType if this nested-name-specifier is being parsed following\n/// the \".\" or \"->\" of a member access expression, this parameter provides the\n/// type of the object whose members are being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we will be entering into the context of\n/// the nested-name-specifier after parsing it.\n///\n/// \\param MayBePseudoDestructor When non-NULL, points to a flag that\n/// indicates whether this nested-name-specifier may be part of a\n/// pseudo-destructor name. In this case, the flag will be set false\n/// if we don\'t actually end up parsing a destructor name. Moreover,\n/// if we do end up determining that we are parsing a destructor name,\n/// the last component of the nested-name-specifier is not parsed as\n/// part of the scope specifier.\n///\n/// \\param IsTypename If \\c true, this nested-name-specifier is known to be\n/// part of a type name. This is used to improve error recovery.\n///\n/// \\param LastII When non-NULL, points to an IdentifierInfo* that will be\n/// filled in with the leading identifier in the last component of the\n/// nested-name-specifier, if any.\n///\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n///\n/// \\returns true if there was an error parsing a scope specifier\nbool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool *MayBePseudoDestructor, bool IsTypename, IdentifierInfo **LastII, bool OnlyNamespace, bool InUsingDeclaration) {\n  // ...\n  while (true) {\n    // ...\n    // nested-name-specifier:\n    //  type-name \'<\'\n    if (Next.is(tok::less)) {\n      // ...\n      if (MemberOfUnknownSpecialization && (ObjectType || SS.isSet()) && (IsTypename || isTemplateArgumentList(1) == TPResult::True)) {\n        // If we had errors before, ObjectType can be dependent even without any\n        // templates. Do not report missing template keyword in that case.\n        if (!ObjectHadErrors) {\n          // ...\n          unsigned DiagID = diag::err_missing_dependent_template_keyword;"},{"clang/lib/Parse/ParseExprCXX.cpp",2483,"/// Finish parsing a C++ unqualified-id that is a template-id of\n/// some form.\n///\n/// This routine is invoked when a \'<\' is encountered after an identifier or\n/// operator-function-id is parsed by \\c ParseUnqualifiedId() to determine\n/// whether the unqualified-id is actually a template-id. This routine will\n/// then parse the template arguments and form the appropriate template-id to\n/// return to the caller.\n///\n/// \\param SS the nested-name-specifier that precedes this template-id, if\n/// we\'re actually parsing 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 this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n///\n/// \\param Name for constructor and destructor names, this is the actual\n/// identifier that may be a template-name.\n///\n/// \\param NameLoc the location of the class-name in a constructor or\n/// destructor.\n///\n/// \\param EnteringContext whether we\'re entering the scope of the\n/// nested-name-specifier.\n///\n/// \\param Id as input, describes the template-name or operator-function-id\n/// that precedes the \'<\'. If template arguments were parsed successfully,\n/// will be updated with the template-id.\n///\n/// \\param AssumeTemplateId When true, this routine will assume that the name\n/// refers to a template without performing name lookup to verify.\n///\n/// \\returns true if a parse error occurred, false otherwise.\nbool Parser::ParseUnqualifiedIdTemplateId(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, SourceLocation TemplateKWLoc, IdentifierInfo *Name, SourceLocation NameLoc, bool EnteringContext, UnqualifiedId &Id, bool AssumeTemplateId) {\n  // ...\n  case UnqualifiedIdKind::IK_Identifier:\n  case UnqualifiedIdKind::IK_OperatorFunctionId:\n  case UnqualifiedIdKind::IK_LiteralOperatorId:\n    if (AssumeTemplateId) {\n    // ...\n    } else {\n      // ...\n      if (TNK == TNK_Non_template && MemberOfUnknownSpecialization && ObjectType && isTemplateArgumentList(0) == TPResult::True) {\n        // If we had errors before, ObjectType can be dependent even without any\n        // templates, do not report missing template keyword in that case.\n        if (!ObjectHadErrors) {\n          // ...\n          Diag(Id.StartLocation, diag::err_missing_dependent_template_keyword) << Name << FixItHint::CreateInsertion(Id.StartLocation, \"template \");"}},
[d]={{db,303,"/// 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    // Parse the optional \'template\' keyword, then make sure we have\n    // \'identifier <\' after it.\n   if (Tok.is(tok::kw_template)) {\n     // ...\n     if (Tok.is(tok::identifier)) {\n      // ...\n      } else if (Tok.is(tok::kw_operator)) {\n       // ...\n       if (TemplateName.getKind() != UnqualifiedIdKind::IK_OperatorFunctionId && TemplateName.getKind() != UnqualifiedIdKind::IK_LiteralOperatorId) {\n         Diag(TemplateName.getSourceRange().getBegin(), diag::err_id_after_template_in_nested_name_spec) << TemplateName.getSourceRange();"}}
[l]={
["clang/test/Parser/cxx2a-concepts-requires-expr.cpp"]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:80:45: error: use \'template\' keyword to treat \'temp\' as a dependent template name"}
}
},
},
["err_missing_end_of_definition"]={
["err_ident_list_in_fn_declaration"]={
[c]="err_missing_end_of_definition",
[b]="err_ident_list_in_fn_declaration",
[d]="missing \'}\' at end of definition of %q0",
[i]="a parameter list without types is only allowed in a function definition",
[e]="missing \'}\' at end of definition of A",
[j]="a parameter list without types is only allowed in a function definition",
[f]=k,
[h]=k,
[g]="missing \'\\}\' at end of definition of (.*?)",
[c]="a parameter list without types is only allowed in a function definition",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={"da35e963bc57",1383972771,"Try to recover a bit better if a close brace is missing from the end of a class","Try to recover a bit better if a close brace is missing from the end of a class\ndefinition. If we see something that looks like a namespace definition inside a\nclass, that strongly indicates that a close brace was missing somewhere.\n\nllvm-svn: 194319"},
[g]={S,1236199783,R,Q},
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",3690,"void Parser::DiagnoseUnexpectedNamespace(NamedDecl *D) {\n  // ...\n  Diag(D->getLocation(), diag::err_missing_end_of_definition) << D;"}},
[d]={{G,5459,"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        if (FTI.NumParams && FTI.Params[0].Param == nullptr) {\n          // ...\n          S.Diag(FTI.Params[0].IdentLoc, diag::err_ident_list_in_fn_declaration);"}},
[l]={
[l]={
["clang/test/Parser/recovery.cpp"]={"clang/test/Parser/recovery.cpp:39:10: error: missing \'}\' at end of definition of \'MissingBrace::S\'","clang/test/Parser/recovery.cpp:48:31: error: missing \'}\' at end of definition of \'MissingBrace::PR17949\'"}
["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:20:8: error: a parameter list without types is only allowed in a function definition"}
}
}
},
},
["err_missing_exception_specification"]={
["err_ifunc_resolver_return"]={
[c]="err_missing_exception_specification",
[b]="err_ifunc_resolver_return",
[d]="%0 is missing exception specification \'%1\'",
[i]="ifunc resolver function must return a pointer",
[e]="A is missing exception specification \'B\'",
[j]="ifunc resolver function must return a pointer",
[f]=k,
[h]=k,
[g]="(.*?) is missing exception specification \'(.*?)\'",
[c]="ifunc resolver function must return a pointer",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,V,v},{"7.1",nil,m}},
[b]={"a91de375f278",1443574130,"Promote a warning on ill-formed code (redeclaration missing an exception","Promote a warning on ill-formed code (redeclaration missing an exception\nspecification) to an error. No compiler other than Clang seems to allow this,\nand it doesn\'t seem like a useful thing to accept as an extension in general.\n\nThe current behavior was added for PR5957, where the problem was specifically\nrelated to mismatches of the exception specification on the implicitly-declared\nglobal operator new and delete. To retain that workaround, we downgrade the\nerror to an ExtWarn when the declaration is of a replaceable global allocation\nfunction.\n\nNow that this is an error, stop trying (and failing) to recover from a missing\ncomputed noexcept specification. That recovery didn\'t work, and led to crashes\nin code like the added testcase.\n\nllvm-svn: 248867"},
[g]={"85eda12d0937",1460360939,"[GCC] Attribute ifunc support in clang","[GCC] Attribute ifunc support in clang\n\nThis patch add support for GCC attribute((ifunc(\"resolver\"))) for\ntargets that use ELF as object file format. In general ifunc is a\nspecial kind of function alias with type @gnu_indirect_function. LLVM\npatch http://reviews.llvm.org/D15525\n\nDifferential Revision: http://reviews.llvm.org/D15524\n\nllvm-svn: 265917"},
[j]={{"clang/lib/Sema/SemaExceptionSpec.cpp",419,"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  } else {\n    DiagID = diag::err_missing_exception_specification;"}},
[d]={{"clang/lib/CodeGen/CodeGenModule.cpp",609,"static bool checkAliasedGlobal(DiagnosticsEngine &Diags, SourceLocation Location, bool IsIFunc, const llvm::GlobalValue *Alias, const llvm::GlobalValue *&GV, const llvm::MapVector<GlobalDecl, StringRef> &MangledDeclNames, SourceRange AliasRange) {\n  // ...\n  if (IsIFunc) {\n   // ...\n   if (!FTy->getReturnType()->isPointerTy()) {\n     Diags.Report(Location, diag::err_ifunc_resolver_return);"}},
[l]={
[l]={
["clang/test/CXX/except/except.spec/p3.cpp"]={"clang/test/CXX/except/except.spec/p3.cpp:29:13: error: \'f5\' is missing exception specification \'throw(int)\'","clang/test/CXX/except/except.spec/p3.cpp:116:23: error: \'missing\' is missing exception specification \'noexcept(X)\'"}
["clang/test/CodeGen/attr-ifunc.c"]={"clang/test/CodeGen/attr-ifunc.c:27:30: error: ifunc resolver function must return a pointer"}
}
}
},
},
["err_missing_method_context"]={
["err_illegal_container_subscripting_op"]={
[c]="err_missing_method_context",
[b]="err_illegal_container_subscripting_op",
[d]="missing context for method declaration",
[i]="illegal operation on Objective-C container subscripting",
[e]="missing context for method declaration",
[j]="illegal operation on Objective-C container subscripting",
[f]=k,
[h]=k,
[g]="missing context for method declaration",
[c]="illegal operation on Objective\\-C container subscripting",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={Bb,1480718311,Ab,zb},
[g]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,","Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,\nNSNumber, and boolean literals.  This includes both Sema and Codegen support.\nIncluded is also support for new Objective-C container subscripting.\n\nMy apologies for the large patch.  It was very difficult to break apart.\nThe patch introduces changes to the driver as well to cause clang to link\nin additional runtime support when needed to support the new language features.\n\nDocs are forthcoming to document the implementation and behavior of these features.\n\nllvm-svn: 152137"},
[j]={{T,4734,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  // Make sure we can establish a context for the method.\n  if (!CurContext->isObjCContainer()) {\n    Diag(MethodLoc, diag::err_missing_method_context);"}},
[d]={{"clang/lib/Sema/SemaPseudoObject.cpp",1573,"/// Check an increment or decrement of a pseudo-object expression.\nExprResult Sema::checkPseudoObjectIncDec(Scope *Sc, SourceLocation opcLoc, UnaryOperatorKind opcode, Expr *op) {\n  // ...\n  if (ObjCPropertyRefExpr *refExpr = dyn_cast<ObjCPropertyRefExpr>(opaqueRef)) {\n  // ...\n  } else if (isa<ObjCSubscriptRefExpr>(opaqueRef)) {\n    Diag(opcLoc, diag::err_illegal_container_subscripting_op);"}},
[l]={
[l]={
["clang/test/SemaObjC/method-no-context.m"]={"clang/test/SemaObjC/method-no-context.m:3:1: error: missing context for method declaration"}
["clang/test/SemaObjC/objc-container-subscripting.m"]={"clang/test/SemaObjC/objc-container-subscripting.m:23:24: error: illegal operation on Objective-C container subscripting","clang/test/SemaObjC/objc-container-subscripting.m:24:24: error: illegal operation on Objective-C container subscripting","clang/test/SemaObjC/objc-container-subscripting.m:25:15: error: illegal operation on Objective-C container subscripting"}
}
}
},
},
["err_missing_module"]={
["err_illegal_decl_array_of_functions"]={
[c]="err_missing_module",
[b]="err_illegal_decl_array_of_functions",
[d]="no module named \'%0\' declared in module map file \'%1\'",
[i]="\'%0\' declared as array of functions of type %1",
[e]="no module named \'A\' declared in module map file \'B\'",
[j]="\'A\' declared as array of functions of type B",
[f]=V,
[h]=k,
[g]="no module named \'(.*?)\' declared in module map file \'(.*?)\'",
[c]="\'(.*?)\' declared as array of functions of type (.*?)",
[h]=a,
[f]=a,
[i]=w,
[e]=m,
[b]={"2b20cb87f5b6",1321402146,"Add support for building a module from a module map to the -cc1","Add support for building a module from a module map to the -cc1\ninterface. This is currently limited to modules with umbrella\nheaders.\n\nllvm-svn: 144736"},
[g]={x,1237025389,y,z},
[j]={{Pb,502,"static Module *prepareToBuildModule(CompilerInstance &CI, StringRef ModuleMapFilename) {\n  // ...\n  if (!M) {\n    CI.getDiagnostics().Report(diag::err_missing_module) << CI.getLangOpts().CurrentModule << ModuleMapFilename;"}},
[d]={{G,2531,"/// 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->isFunctionType()) {\n    Diag(Loc, diag::err_illegal_decl_array_of_functions) << getPrintableNameForEntity(Entity) << T;"}},
[l]={
[l]={
["clang/test/Modules/preprocess-build.cpp"]={"fatal error: no module named \'unterminated\' declared in module map file \'unterminated.map\'"}
["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:60:14: error: \'x\' declared as array of functions of type \'int (void)\'"}
}
}
},
},
["err_missing_module_name"]={
["err_illegal_decl_array_of_references"]={
[c]="err_missing_module_name",
[b]="err_illegal_decl_array_of_references",
[d]="no module name provided; specify one with -fmodule-name=",
[i]="\'%0\' declared as array of references of type %1",
[e]="no module name provided; specify one with -fmodule-name=",
[j]="\'A\' declared as array of references of type B",
[f]=V,
[h]=k,
[g]="no module name provided; specify one with \\-fmodule\\-name\\=",
[c]="\'(.*?)\' declared as array of references of type (.*?)",
[h]=a,
[f]=a,
[i]=w,
[e]=m,
[b]={"2b20cb87f5b6",1321402146,"Add support for building a module from a module map to the -cc1","Add support for building a module from a module map to the -cc1\ninterface. This is currently limited to modules with umbrella\nheaders.\n\nllvm-svn: 144736"},
[g]={x,1237025389,y,z},
[j]={{Pb,488,"static Module *prepareToBuildModule(CompilerInstance &CI, StringRef ModuleMapFilename) {\n  if (CI.getLangOpts().CurrentModule.empty()) {\n    CI.getDiagnostics().Report(diag::err_missing_module_name);"}}
[d]={{G,2486,"/// 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().CPlusPlus) {\n    // C++ [dcl.array]p1:\n   //   T is called the array element type; this type shall not be a reference\n   //   type, the (possibly cv-qualified) type void, a function type or an\n   //   abstract class type.\n   //\n   // C++ [dcl.array]p3:\n   //   When several \"array of\" specifications are adjacent, [...] only the\n   //   first of the constant expressions that specify the bounds of the arrays\n   //   may be omitted.\n   //\n   // Note: function types are handled in the common path with C.\n   if (T->isReferenceType()) {\n     Diag(Loc, diag::err_illegal_decl_array_of_references) << getPrintableNameForEntity(Entity) << T;"}},
},
["err_missing_open_square_message_send"]={
[c]="err_missing_open_square_message_send",
[d]="missing \'[\' at start of message send expression",
[e]="missing \'[\' at start of message send expression",
[f]=k,
[g]="missing \'\\[\' at start of message send expression",
[h]=a,
[i]=m,
[b]={"e9bba4f1a441",1284562265,"Implement bracket insertion for Objective-C instance message sends as","Implement bracket insertion for Objective-C instance message sends as\npart of parser recovery. For example, given:\n\n  a method1:arg];\n\nwe detect after parsing the expression \"a\" that we have the start of a\nmessage send expression. We pretend we\'ve seen a \'[\' prior to the a,\nthen parse the remainder as a message send. We\'ll then give a\ndiagnostic+fix-it such as:\n\nfixit-objc-message.m:17:3: error: missing \'[\' at start of message\n      send expression\n  a method1:arg];\n  ^\n  [\n\nThe algorithm here is very simple, and always assumes that the open\nbracket goes at the beginning of the message send. It also only works\nfor non-super instance message sends at this time.\n\nllvm-svn: 113968"},
[j]={{G,2621,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (LBracLoc.isInvalid()) {\n    Diag(Loc, diag::err_missing_open_square_message_send) << FixItHint::CreateInsertion(Loc, \"[\");"},{G,2865,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n if (LBracLoc.isInvalid()) {\n   Diag(Loc, diag::err_missing_open_square_message_send) << FixItHint::CreateInsertion(Loc, \"[\");"}},
[l]={
[l]={
["clang/test/Parser/stmt-attributes.m"]={"clang/test/Parser/stmt-attributes.m:26:22: error: missing \'[\' at start of message send expression"}
["clang/test/Sema/illegal-types.c"]={"clang/test/Sema/illegal-types.c:5:14: error: \'type name\' declared as array of references of type \'int &\'","clang/test/Sema/illegal-types.c:6:15: error: \'p\' declared as array of references of type \'int &\'"}
}
}
},
},
["err_missing_param"]={
["err_illegal_decl_mempointer_in_nonclass"]={
[c]="err_missing_param",
[b]="err_illegal_decl_mempointer_in_nonclass",
[d]="expected parameter declarator",
[i]="\'%0\' does not point into a class",
[e]="expected parameter declarator",
[j]="\'A\' does not point into a class",
[f]=k,
[h]=k,
[g]="expected parameter declarator",
[c]="\'(.*?)\' does not point into a class",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={J,1236199783,H,I},
[g]={x,1237025389,y,z},
[j]={{hb,7393,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed. If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n // ...\n do {\n   // ...\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n      // ...\n      Diag(DSStart, diag::err_missing_param);"}},
[d]={{G,5691,"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::MemberPointer: {\n     // ...\n     if (SS.isInvalid()) {\n     // ...\n     } else if (S.isDependentScopeSpecifier(SS) || isa_and_nonnull<CXXRecordDecl>(S.computeDeclContext(SS))) {\n     // ...\n     } else {\n       S.Diag(DeclType.Mem.Scope().getBeginLoc(), diag::err_illegal_decl_mempointer_in_nonclass) << (D.getIdentifier() ? D.getIdentifier()->getName() : \"type name\") << DeclType.Mem.Scope().getRange();"}},
[l]={
[l]={
["clang/test/Parser/cxx2a-concepts-requires-expr.cpp"]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:32:28: error: expected parameter declarator","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:44:22: error: expected parameter declarator"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p3-generic-lambda-1y.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p3-generic-lambda-1y.cpp:66:27: error: \'pm\' does not point into a class","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p3-generic-lambda-1y.cpp:68:28: error: \'pmf\' does not point into a class"}
}
}
},
},
["err_missing_property_context"]={
["err_illegal_decl_mempointer_to_reference"]={
[c]="err_missing_property_context",
[b]="err_illegal_decl_mempointer_to_reference",
[d]="missing context for property implementation declaration",
[i]="\'%0\' declared as a member pointer to a reference of type %1",
[e]="missing context for property implementation declaration",
[j]="\'A\' declared as a member pointer to a reference of type B",
[f]=k,
[h]=k,
[g]="missing context for property implementation declaration",
[c]="\'(.*?)\' declared as a member pointer to a reference of type (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={Bb,1480718311,Ab,zb},
[g]={"124f34c15014",1246320417,"Make an error message more clear.","Make an error message more clear.\n\nllvm-svn: 74481"},
[j]={{M,1090,"/// 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  // Make sure we have a context for the property implementation declaration.\n  if (!ClassImpDecl) {\n    Diag(AtLoc, diag::err_missing_property_context);"}},
[d]={{G,3084,"/// Build a member pointer type \\c T Class::*.\n///\n/// \\param T the type to which the member pointer refers.\n/// \\param Class the class type into which the member pointer points.\n/// \\param Loc the location where this type begins\n/// \\param Entity the name of the entity that will have this member pointer type\n///\n/// \\returns a member pointer type, if successful, or a NULL type if there was\n/// an error.\nQualType Sema::BuildMemberPointerType(QualType T, QualType Class, SourceLocation Loc, DeclarationName Entity) {\n  // ...\n  // C++ 8.3.3p3: A pointer to member shall not point to ... a member\n  //  with reference type, or \"cv void.\"\n  if (T->isReferenceType()) {\n    Diag(Loc, diag::err_illegal_decl_mempointer_to_reference) << getPrintableNameForEntity(Entity) << T;"}},
[l]={
[l]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:66:1: error: missing context for property implementation declaration"}
["clang/test/SemaTemplate/instantiate-member-pointers.cpp"]={"clang/test/SemaTemplate/instantiate-member-pointers.cpp:18:28: error: \'pm\' declared as a member pointer to a reference of type \'int &\'"}
}
}
},
},
["err_missing_property_interface"]={
["err_illegal_decl_mempointer_to_void"]={
[c]="err_missing_property_interface",
[b]="err_illegal_decl_mempointer_to_void",
[d]="property implementation in a category with no category declaration",
[i]="\'%0\' declared as a member pointer to void",
[e]="property implementation in a category with no category declaration",
[j]="\'A\' declared as a member pointer to void",
[f]=k,
[h]=k,
[g]="property implementation in a category with no category declaration",
[c]="\'(.*?)\' declared as a member pointer to void",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={Bb,1480718311,Ab,zb},
[g]={x,1237025389,y,z},
[j]={{M,1181,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n // ...\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n  // ...\n  } else if ((CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassImpDecl))) {\n    // ...\n    if (!IDecl) {\n      Diag(AtLoc, diag::err_missing_property_interface);"}},
[d]={{G,3090,"/// Build a member pointer type \\c T Class::*.\n///\n/// \\param T the type to which the member pointer refers.\n/// \\param Class the class type into which the member pointer points.\n/// \\param Loc the location where this type begins\n/// \\param Entity the name of the entity that will have this member pointer type\n///\n/// \\returns a member pointer type, if successful, or a NULL type if there was\n/// an error.\nQualType Sema::BuildMemberPointerType(QualType T, QualType Class, SourceLocation Loc, DeclarationName Entity) {\n  // ...\n  if (T->isVoidType()) {\n    Diag(Loc, diag::err_illegal_decl_mempointer_to_void) << getPrintableNameForEntity(Entity);"}},
[l]={
[l]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:35:1: error: property implementation in a category with no category declaration"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.mptr/p3.cpp:25:8: error: \'p\' declared as a member pointer to void"}
}
}
},
},
["err_missing_property_ivar_decl"]={
["err_illegal_decl_pointer_to_reference"]={
[c]="err_missing_property_ivar_decl",
[b]="err_illegal_decl_pointer_to_reference",
[d]="synthesized property %0 must either be named the same as a compatible instance variable or must explicitly name an instance variable",
[i]="\'%0\' declared as a pointer to a reference of type %1",
[e]="synthesized property A must either be named the same as a compatible instance variable or must explicitly name an instance variable",
[j]="\'A\' declared as a pointer to a reference of type B",
[f]=k,
[h]=k,
[g]="synthesized property (.*?) must either be named the same as a compatible instance variable or must explicitly name an instance variable",
[c]="\'(.*?)\' declared as a pointer to a reference of type (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={Bb,1480718311,Ab,zb},
[g]={x,1237025389,y,z},
[j]={{M,1346,"/// 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   if (!Ivar) {\n     // ...\n     if (getLangOpts().ObjCRuntime.isFragile())\n       Diag(PropertyDiagLoc, diag::err_missing_property_ivar_decl) << PropertyId;"}},
[d]={{G,2177,"/// 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 if (T->isReferenceType()) {\n    // ...\n   Diag(Loc, diag::err_illegal_decl_pointer_to_reference) << getPrintableNameForEntity(Entity) << T;"}},
[l]={
[l]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:18:13: error: synthesized property \'d1\' must either be named the same as a compatible instance variable or must explicitly name an instance variable","clang/test/SemaObjC/property.m:20:13: error: synthesized property \'prop_id\' must either be named the same as a compatible instance variable or must explicitly name an instance variable"}
["clang/test/SemaTemplate/instantiate-typedef.cpp"]={"clang/test/SemaTemplate/instantiate-typedef.cpp:5:12: error: \'type\' declared as a pointer to a reference of type \'int &\'"}
}
}
},
},
["err_missing_type_specifier"]={
["err_illegal_decl_reference_to_reference"]={
[c]="err_missing_type_specifier",
[b]="err_illegal_decl_reference_to_reference",
[d]={{nil,s,"a type specifier is required for all declarations"},{S,nil,"C++ requires a type specifier for all declarations"}},
[i]="%0 declared as a reference to a reference",
[e]={{nil,s,"a type specifier is required for all declarations"},{S,nil,"C++ requires a type specifier for all declarations"}},
[j]="A declared as a reference to a reference",
[f]=k,
[h]=k,
[g]="a type specifier is required for all declarations",
[c]="(.*?) declared as a reference to a reference",
[h]=a,
[f]=a,
[i]=m,
[e]=C,
[b]={ib,1237025389,fb,gb},
[g]={S,1236199783,R,Q},
[j]={{cb,1369,"/// 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 declspecThis 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        S.Diag(DeclLoc, diag::err_missing_type_specifier) << DS.getSourceRange();"}},
[d]={{P,6305,"/// 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    if (D.getNumTypeObjects() > 0) {\n     // ...\n     if (InnerChunk.Kind == DeclaratorChunk::Reference) {\n        if (const IdentifierInfo *II = D.getIdentifier())\n          Diag(InnerChunk.Loc, diag::err_illegal_decl_reference_to_reference) << II;"},{P,6308,"/// 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   if (D.getNumTypeObjects() > 0) {\n      // ...\n      if (InnerChunk.Kind == DeclaratorChunk::Reference) {\n        if (const IdentifierInfo *II = D.getIdentifier())\n        // ...\n        else\n          Diag(InnerChunk.Loc, diag::err_illegal_decl_reference_to_reference) << \"type name\";"}},
[l]={
[l]={
["clang/test/SemaCXX/implicit-int.cpp"]={"clang/test/SemaCXX/implicit-int.cpp:3:1: error: a type specifier is required for all declarations","clang/test/SemaCXX/implicit-int.cpp:5:1: error: a type specifier is required for all declarations"}
["clang/test/Parser/cxx0x-rvalue-reference.cpp"]={"clang/test/Parser/cxx0x-rvalue-reference.cpp:7:9: error: \'ar\' declared as a reference to a reference"}
}
}
},
},
["err_missing_vfs_overlay_file"]={
["err_illegal_initializer"]={
[c]="err_missing_vfs_overlay_file",
[b]="err_illegal_initializer",
[d]="virtual filesystem overlay file \'%0\' not found",
[i]="illegal initializer (only variables can be initialized)",
[e]="virtual filesystem overlay file \'A\' not found",
[j]="illegal initializer (only variables can be initialized)",
[f]=V,
[h]=k,
[g]="virtual filesystem overlay file \'(.*?)\' not found",
[c]="illegal initializer \\(only variables can be initialized\\)",
[h]=a,
[f]=a,
[i]=w,
[e]=m,
[b]={"801272a98c71",1393352627,"Add a driver option -ivfsoverlay","Add a driver option -ivfsoverlay\n\nReads the description of a virtual filesystem from a file and overlays\nit over the real file system.\n\nllvm-svn: 202176"},
[g]={x,1237025389,y,z},
[j]={{"clang/lib/Frontend/CompilerInvocation.cpp",4691,"IntrusiveRefCntPtr<llvm::vfs::FileSystem> clang::createVFSFromOverlayFiles(ArrayRef<std::string> VFSOverlayFiles, DiagnosticsEngine &Diags, IntrusiveRefCntPtr<llvm::vfs::FileSystem> BaseFS) {\n  // ...\n  // earlier vfs files are on the bottom\n  for (const auto &File : VFSOverlayFiles) {\n    // ...\n    if (!Buffer) {\n      Diags.Report(diag::err_missing_vfs_overlay_file) << File;"}}
[d]={{p,13140,"/// 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) {\n    // ...\n    Diag(RealDecl->getLocation(), diag::err_illegal_initializer);"},{t,18152,"void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {\n if (D->getFriendObjectKind())\n  // ...\n else if (auto *M = dyn_cast<CXXMethodDecl>(D))\n  // ...\n  else\n    Diag(D->getLocation(), diag::err_illegal_initializer);"}},
},
["err_missing_whitespace_digraph"]={
[c]="err_missing_whitespace_digraph",
[d]={{nil,x,"found \'<::\' after a %select{template name|addrspace_cast|const_cast|dynamic_cast|reinterpret_cast|static_cast}0 which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"},{n,nil,"found \'<::\' after a %select{template name|const_cast|dynamic_cast|reinterpret_cast|static_cast}0 which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"}},
[e]={{nil,x,{"found \'<::\' after a ",{"template name","addrspace_cast","const_cast","dynamic_cast","reinterpret_cast","static_cast"}," which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"}},{n,nil,{"found \'<::\' after a ",{"template name","const_cast","dynamic_cast","reinterpret_cast","static_cast"}," which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"}}},
[f]=k,
[g]="found \'\\<\\:\\:\' after a (?:template name|addrspace_cast|const_cast|dynamic_cast|reinterpret_cast|static_cast) which forms the digraph \'\\<\\:\' \\(aka \'\\[\'\\) and a \'\\:\', did you mean \'\\< \\:\\:\'\\?",
[h]=a,
[i]=y,
[b]={"55858499e21e",1302817545,"Detect when the string \"<::\" is found in code after a cast or template name and is interpreted as \"[...","Detect when the string \"<::\" is found in code after a cast or template name and is interpreted as \"[:\" because of the digraph \"<:\". When found, give an error with a fix-it to add whitespace between the \"<\" and \"::\".\n\nPatch by Richard Trieu! Plus a small tweak from me to deal with one of the tokens coming from a macro.\n\nllvm-svn: 129540"},
[j]={{"clang/lib/Parse/ParseExprCXX.cpp",67,"// Suggest fixit for \"<::\" after a cast.\nstatic void FixDigraph(Parser &P, Preprocessor &PP, Token &DigraphToken, Token &ColonToken, tok::TokenKind Kind, bool AtDigraph) {\n  // ...\n  P.Diag(DigraphToken.getLocation(), diag::err_missing_whitespace_digraph) << SelectDigraphErrorMessage(Kind) << FixItHint::CreateReplacement(Range, \"< ::\");"}},
[l]={
[l]={
["clang/test/Parser/cxx-casting.cpp"]={"clang/test/Parser/cxx-casting.cpp:46:19: error: found \'<::\' after a const_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:51:21: error: found \'<::\' after a dynamic_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:56:25: error: found \'<::\' after a reinterpret_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:61:20: error: found \'<::\' after a static_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:84:12: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:89:21: error: found \'<::\' after a static_cast which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:101:6: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:106:4: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:111:6: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?","clang/test/Parser/cxx-casting.cpp:116:4: error: found \'<::\' after a template name which forms the digraph \'<:\' (aka \'[\') and a \':\', did you mean \'< ::\'?"}
["clang/test/SemaCXX/member-init.cpp"]={"clang/test/SemaCXX/member-init.cpp:59:15: error: illegal initializer (only variables can be initialized)"}
}
}
},
},
["err_mixing_cxx_try_seh_try"]={
["err_illegal_initializer_type"]={
[c]="err_mixing_cxx_try_seh_try",
[b]="err_illegal_initializer_type",
[d]={{nil,S,"cannot use %select{C++ \'try\'|Objective-C \'@try\'}0 in the same function as SEH \'__try\'"},{u,nil,"cannot use C++ \'try\' in the same function as SEH \'__try\'"}},
[i]="illegal initializer type %0",
[e]={{nil,S,{"cannot use ",{"C++ \'try\'","Objective-C \'@try\'"}," in the same function as SEH \'__try\'"}},{u,nil,"cannot use C++ \'try\' in the same function as SEH \'__try\'"}},
[j]="illegal initializer type A",
[f]=k,
[h]=k,
[g]="cannot use (?:C\\+\\+ \'try\'|Objective\\-C \'@try\') in the same function as SEH \'__try\'",
[c]="illegal initializer type (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"e71759103e72",1422915331,"SEH: Diagnose use of C++ EH and SEH in the same function","SEH: Diagnose use of C++ EH and SEH in the same function\n\nThis check does not apply when Borland extensions are enabled, as they\nhave a checked in test case indicating that mixed usage of SEH and C++\nis supported.\n\nllvm-svn: 227876"},
[g]={x,1237025389,y,z},
[j]={{F,4244,"StmtResult Sema::ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try, MultiStmtArg CatchStmts, Stmt *Finally) {\n  // ...\n  if (FSI->FirstSEHTryLoc.isValid()) {\n   Diag(AtLoc, diag::err_mixing_cxx_try_seh_try) << 1;"},{F,4494,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  // ...\n  // C++ try is incompatible with SEH __try.\n  if (!getLangOpts().Borland && FSI->FirstSEHTryLoc.isValid()) {\n    Diag(TryLoc, diag::err_mixing_cxx_try_seh_try) << 0;"},{F,4587,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  // ...\n  // SEH __try is incompatible with C++ try. Borland appears to support this,\n  // however.\n  if (!getLangOpts().Borland) {\n   if (FSI->FirstCXXOrObjCTryLoc.isValid()) {\n      Diag(TryLoc, diag::err_mixing_cxx_try_seh_try) << FSI->FirstTryType;"}},
[d]={{H,1366,"void InitListChecker::CheckListElementTypes(const InitializedEntity &Entity, InitListExpr *IList, QualType &DeclType, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool TopLevelObject) {\n  if (DeclType->isAnyComplexType() && SubobjectIsDesignatorContext) {\n  // ...\n  } else if (DeclType->isScalarType()) {\n // ...\n  } else if (DeclType->isVectorType()) {\n // ...\n  } else if (const RecordDecl *RD = getRecordDecl(DeclType)) {\n  // ...\n  } else if (DeclType->isArrayType()) {\n  // ...\n  } else if (DeclType->isVoidType() || DeclType->isFunctionType()) {\n    // ...\n    if (!VerifyOnly)\n      SemaRef.Diag(IList->getBeginLoc(), diag::err_illegal_initializer_type) << DeclType;"},{H,1390,"void InitListChecker::CheckListElementTypes(const InitializedEntity &Entity, InitListExpr *IList, QualType &DeclType, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool TopLevelObject) {\n  if (DeclType->isAnyComplexType() && SubobjectIsDesignatorContext) {\n  // ...\n  } else if (DeclType->isScalarType()) {\n  // ...\n  } else if (DeclType->isVectorType()) {\n  // ...\n  } else if (const RecordDecl *RD = getRecordDecl(DeclType)) {\n  // ...\n  } else if (DeclType->isArrayType()) {\n  // ...\n  } else if (DeclType->isVoidType() || DeclType->isFunctionType()) {\n  // ...\n  } else if (DeclType->isReferenceType()) {\n  // ...\n  } else if (DeclType->isObjCObjectType()) {\n // ...\n  } else if (DeclType->isOCLIntelSubgroupAVCType() || DeclType->isSizelessBuiltinType()) {\n  // ...\n  } else if (DeclType->isDependentType()) {\n  // ...\n  } else {\n    if (!VerifyOnly)\n      SemaRef.Diag(IList->getBeginLoc(), diag::err_illegal_initializer_type) << DeclType;"}},
[l]={
[l]={
["clang/test/SemaCXX/exceptions-seh.mm"]={"clang/test/SemaCXX/exceptions-seh.mm:10:3: error: cannot use Objective-C \'@try\' in the same function as SEH \'__try\'","clang/test/SemaCXX/exceptions-seh.mm:21:3: error: cannot use Objective-C \'@try\' in the same function as SEH \'__try\'"}
["clang/test/Sema/compound-literal.c"]={"clang/test/Sema/compound-literal.c:34:16: error: illegal initializer type \'void (void)\'"}
}
}
},
},
["err_mmap_config_macro_submodule"]={
["err_illegal_message_expr_incomplete_type"]={
[c]="err_mmap_config_macro_submodule",
[b]="err_illegal_message_expr_incomplete_type",
[d]="configuration macros are only allowed in top-level modules",
[i]="Objective-C message has incomplete result type %0",
[e]="configuration macros are only allowed in top-level modules",
[j]="Objective-C message has incomplete result type A",
[f]=k,
[h]=k,
[g]="configuration macros are only allowed in top\\-level modules",
[c]="Objective\\-C message has incomplete result type (.*?)",
[h]=a,
[f]=a,
[i]=A,
[e]=m,
[b]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps.","<rdar://problem/10796651> Introduce configuration macros into module maps.\n\nConfiguration macros are macros that are intended to alter how a\nmodule works, such that we need to build different module variants\nfor different values of these macros. A module can declare its\nconfiguration macros, in which case we will complain if the definition\nof a configation macro on the command line (or lack thereof) differs\nfrom the current preprocessor state at the point where the module is\nimported. This should eliminate some surprises when enabling modules,\nbecause \"#define CONFIG_MACRO ...\" followed by \"#include\n<module/header.h>\" would silently ignore the CONFIG_MACRO setting. At\nleast it will no longer be silent about it.\n\nConfiguration macros are eventually intended to help reduce the number\nof module variants that need to be built. When the list of\nconfiguration macros for a module is exhaustive, we only need to\nconsider the settings for those macros when building/finding the\nmodule, which can help isolate modules for various project-specific -D\nflags that should never affect how modules are build (but currently do).\n\nllvm-svn: 177466"},
[g]={"1d44608cc112",1276714564,"Make sure result type of objc++ message expression is","Make sure result type of objc++ message expression is\ncomplete before attempting to bind it to a temporary.\nFixes PR7386.\n\nllvm-svn: 106130"},
[j]={{v,2712,"/// Parse a configuration macro declaration.\n///\n///   module-declaration:\n///    \'config_macros\' attributes[opt] config-macro-list?\n///\n///   config-macro-list:\n///     identifier (\',\' identifier)?\nvoid ModuleMapParser::parseConfigMacros() {\n // ...\n // Only top-level modules can have configuration macros.\n if (ActiveModule->Parent) {\n    Diags.Report(ConfigMacrosLoc, diag::err_mmap_config_macro_submodule);"}}
[d]={{bb,2699,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (Method && !Method->getReturnType()->isVoidType() && RequireCompleteType(LBracLoc, Method->getReturnType(), diag::err_illegal_message_expr_incomplete_type))"},{bb,3240,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n // ...\n if (Method && !Method->getReturnType()->isVoidType() && RequireCompleteType(LBracLoc, Method->getReturnType(), diag::err_illegal_message_expr_incomplete_type))"}}
},
["err_mmap_conflicting_export_as"]={
[c]={{nil,t,"err_mmap_conflicting_export_as"}},
[d]={{nil,t,"conflicting re-export of module \'%0\' as \'%1\' or \'%2\'"}},
[e]={{nil,t,"conflicting re-export of module \'A\' as \'B\' or \'C\'"}},
[f]=k,
[g]="conflicting re\\-export of module \'(.*?)\' as \'(.*?)\' or \'(.*?)\'",
[h]=a,
[i]={{nil,t,A}},
[b]={"f0b11de279e7",1505432324,"[Module map] Introduce a private module re-export directive.","[Module map] Introduce a private module re-export directive.\n\nIntroduce a new \"export_as\" directive for top-level modules, which\nindicates that the current module is a \"private\" module whose symbols\nwill eventually be exported through the named \"public\" module. This is\nin support of a common pattern in the Darwin ecosystem where a single\npublic framework is constructed of several private frameworks, with\n(currently) header duplication and some support from the linker.\n\nAddresses rdar://problem/34438420.\n\nllvm-svn: 313316"},
[j]={{v,2641,"/// Parse a module export_as declaration.\n///\n///   export-as-declaration:\n///    \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n // ...\n if (!ActiveModule->ExportAsModule.empty()) {\n   if (ActiveModule->ExportAsModule == Tok.getString()) {\n   // ...\n   } else {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_conflicting_export_as) << ActiveModule->Name << ActiveModule->ExportAsModule << Tok.getString();"}}
},
["err_mmap_duplicate_header_attribute"]={
[c]={{nil,r,"err_mmap_duplicate_header_attribute"}},
[d]={{nil,r,"header attribute \'%0\' specified multiple times"}},
[e]={{nil,r,"header attribute \'A\' specified multiple times"}},
[f]=k,
[g]="header attribute \'(.*?)\' specified multiple times",
[h]=a,
[i]={{nil,r,A}},
[b]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
[j]={{v,2436,"/// Parse a header declaration.\n///\n///  header-declaration:\n///    \'textual\'[opt] \'header\' string-literal\n///    \'private\' \'textual\'[opt] \'header\' string-literal\n///    \'exclude\' \'header\' string-literal\n///    \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // If we were given stat information, parse it so we can skip looking for\n  // the file.\n  if (Tok.is(MMToken::LBrace)) {\n    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case Size:\n        if (Header.Size)\n          Diags.Report(Loc, diag::err_mmap_duplicate_header_attribute) << Str;"},{v,2449,"/// Parse a header declaration.\n///\n///  header-declaration:\n///    \'textual\'[opt] \'header\' string-literal\n///    \'private\' \'textual\'[opt] \'header\' string-literal\n///    \'exclude\' \'header\' string-literal\n///    \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // If we were given stat information, parse it so we can skip looking for\n  // the file.\n  if (Tok.is(MMToken::LBrace)) {\n    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case ModTime:\n        if (Header.ModTime)\n          Diags.Report(Loc, diag::err_mmap_duplicate_header_attribute) << Str;"}}
},
["err_mmap_expected_attribute"]={
[c]="err_mmap_expected_attribute",
[d]="expected an attribute name",
[e]="expected an attribute name",
[f]=k,
[g]="expected an attribute name",
[h]=a,
[i]=A,
[b]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a","Introduce module attributes into the module map grammar, along with a\nsingle attribute (\"system\") that allows us to mark a module as being a\n\"system\" module. Each of the headers that makes up a system module is\nconsidered to be a system header, so that we (for example) suppress\nwarnings there.\n\nIf a module is being inferred for a framework, and that framework\ndirectory is within a system frameworks directory, infer it as a\nsystem framework.\n\nllvm-svn: 149143"},
[j]={{v,2980,"/// Parse optional attributes.\n///\n///  attributes:\n///    attribute attributes\n///    attribute\n///\n///  attribute:\n///    [ identifier ]\n///\n/// \\param Attrs Will be filled in with the parsed attributes.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool ModuleMapParser::parseOptionalAttributes(Attributes &Attrs) {\n  // ...\n  while (Tok.is(MMToken::LSquare)) {\n    // ...\n    // Check whether we have an attribute name here.\n    if (!Tok.is(MMToken::Identifier)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_attribute);"}}
},
["err_mmap_expected_config_macro"]={
[c]="err_mmap_expected_config_macro",
[d]="expected configuration macro name after \',\'",
[e]="expected configuration macro name after \',\'",
[f]=k,
[g]="expected configuration macro name after \',\'",
[h]=a,
[i]=A,
[b]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps.","<rdar://problem/10796651> Introduce configuration macros into module maps.\n\nConfiguration macros are macros that are intended to alter how a\nmodule works, such that we need to build different module variants\nfor different values of these macros. A module can declare its\nconfiguration macros, in which case we will complain if the definition\nof a configation macro on the command line (or lack thereof) differs\nfrom the current preprocessor state at the point where the module is\nimported. This should eliminate some surprises when enabling modules,\nbecause \"#define CONFIG_MACRO ...\" followed by \"#include\n<module/header.h>\" would silently ignore the CONFIG_MACRO setting. At\nleast it will no longer be silent about it.\n\nConfiguration macros are eventually intended to help reduce the number\nof module variants that need to be built. When the list of\nconfiguration macros for a module is exhaustive, we only need to\nconsider the settings for those macros when building/finding the\nmodule, which can help isolate modules for various project-specific -D\nflags that should never affect how modules are build (but currently do).\n\nllvm-svn: 177466"},
[j]={{v,2744,"/// Parse a configuration macro declaration.\n///\n///  module-declaration:\n///    \'config_macros\' attributes[opt] config-macro-list?\n///\n///  config-macro-list:\n///    identifier (\',\' identifier)?\nvoid ModuleMapParser::parseConfigMacros() {\n  // ...\n  do {\n    // ...\n    // We expect to see a macro name here.\n    // FIXME: Support macros with the same name as a keyword here.\n    if (!Tok.is(MMToken::Identifier)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_config_macro);"}}
},
["err_mmap_expected_conflicts_comma"]={
[c]="err_mmap_expected_conflicts_comma",
[d]="expected \',\' after conflicting module name",
[e]="expected \',\' after conflicting module name",
[f]=k,
[g]="expected \',\' after conflicting module name",
[h]=a,
[i]=A,
[b]={"fb9126578ec3",1363813835,"<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-im...","<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-imported module conflicts with an already-imported module.\n\nllvm-svn: 177577"},
[j]={{v,2787,"/// Parse a conflict declaration.\n///\n///  module-declaration:\n///    \'conflict\' module-id \',\' string-literal\nvoid ModuleMapParser::parseConflict() {\n  // ...\n  // Parse the \',\'.\n  if (!Tok.is(MMToken::Comma)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_conflicts_comma) << SourceRange(ConflictLoc);"}}
},
["err_mmap_expected_conflicts_message"]={
[c]="err_mmap_expected_conflicts_message",
[d]="expected a message describing the conflict with \'%0\'",
[e]="expected a message describing the conflict with \'A\'",
[f]=k,
[g]="expected a message describing the conflict with \'(.*?)\'",
[h]=a,
[i]=A,
[b]={"fb9126578ec3",1363813835,"<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-im...","<rdar://problem/12368093> Extend module maps with a \'conflict\' declaration, and warn when a newly-imported module conflicts with an already-imported module.\n\nllvm-svn: 177577"},
[j]={{v,2795,"/// Parse a conflict declaration.\n///\n///  module-declaration:\n///    \'conflict\' module-id \',\' string-literal\nvoid ModuleMapParser::parseConflict() {\n  // ...\n  // Parse the message.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_conflicts_message) << formatModuleId(Conflict.Id);"}}
},
["err_mmap_expected_export_wildcard"]={
[c]="err_mmap_expected_export_wildcard",
[d]="only \'*\' can be exported from an inferred submodule",
[e]="only \'*\' can be exported from an inferred submodule",
[f]=k,
[g]="only \'\\*\' can be exported from an inferred submodule",
[h]=a,
[i]=A,
[b]={Cc,1323124064,Ec,zc},
[j]={{v,2933,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  do {\n    // ...\n    case MMToken::ExportKeyword:\n      // ...\n      if (Tok.is(MMToken::Star))\n      // ...\n      else\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_export_wildcard);"}}
},
["err_mmap_expected_feature"]={
[c]="err_mmap_expected_feature",
[d]="expected a feature name",
[e]="expected a feature name",
[f]=k,
[g]="expected a feature name",
[h]=a,
[i]=A,
[b]={"1fb5c3a63a88",1325304344,"Implement support for module requirements, which indicate the language","Implement support for module requirements, which indicate the language\nfeatures needed for a particular module to be available. This allows\nmixed-language modules, where certain headers only work under some\nlanguage variants (e.g., in C++, std.tuple might only be available in\nC++11 mode).\n\nllvm-svn: 147387"},
[j]={{v,2325,"/// Parse a requires declaration.\n///\n///  requires-declaration:\n///    \'requires\' feature-list\n///\n///  feature-list:\n///    feature \',\' feature-list\n///    feature\n///\n///  feature:\n///    \'!\'[opt] identifier\nvoid ModuleMapParser::parseRequiresDecl() {\n  // ...\n  // Parse the feature-list.\n  do {\n    // ...\n    if (!Tok.is(MMToken::Identifier)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_feature);"}}
},
["err_mmap_expected_header"]={
[c]="err_mmap_expected_header",
[d]="expected a header name after \'%0\'",
[e]="expected a header name after \'A\'",
[f]=k,
[g]="expected a header name after \'(.*?)\'",
[h]=a,
[i]=A,
[b]={Ob,1321038628,Db,Cb},
[j]={{v,2391,"/// Parse a header declaration.\n///\n///  header-declaration:\n///    \'textual\'[opt] \'header\' string-literal\n///    \'private\' \'textual\'[opt] \'header\' string-literal\n///    \'exclude\' \'header\' string-literal\n///    \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  if (LeadingToken != MMToken::HeaderKeyword) {\n    if (!Tok.is(MMToken::HeaderKeyword)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_header) << (LeadingToken == MMToken::PrivateKeyword ? \"private\" : LeadingToken == MMToken::ExcludeKeyword ? \"exclude\" : LeadingToken == MMToken::TextualKeyword ? \"textual\" : \"umbrella\");"},{v,2402,"/// Parse a header declaration.\n///\n///  header-declaration:\n///    \'textual\'[opt] \'header\' string-literal\n///    \'private\' \'textual\'[opt] \'header\' string-literal\n///    \'exclude\' \'header\' string-literal\n///    \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // Parse the header name.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_header) << \"header\";"},{v,2497,"/// Parse an umbrella directory declaration.\n///\n///  umbrella-dir-declaration:\n///    umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  // Parse the directory name.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_header) << \"umbrella\";"}}
},
["err_mmap_expected_header_attribute"]={
[c]={{nil,r,"err_mmap_expected_header_attribute"}},
[d]={{nil,r,"expected a header attribute name (\'size\' or \'mtime\')"}},
[e]={{nil,r,"expected a header attribute name (\'size\' or \'mtime\')"}},
[f]=k,
[g]="expected a header attribute name \\(\'size\' or \'mtime\'\\)",
[h]=a,
[i]={{nil,r,A}},
[b]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
[j]={{v,2461,"/// Parse a header declaration.\n///\n///  header-declaration:\n///    \'textual\'[opt] \'header\' string-literal\n///    \'private\' \'textual\'[opt] \'header\' string-literal\n///    \'exclude\' \'header\' string-literal\n///    \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // If we were given stat information, parse it so we can skip looking for\n  // the file.\n  if (Tok.is(MMToken::LBrace)) {\n    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case Unknown:\n        Diags.Report(Loc, diag::err_mmap_expected_header_attribute);"}}
},
["err_mmap_expected_inferred_member"]={
[c]="err_mmap_expected_inferred_member",
[d]="expected %select{module exclusion with \'exclude\'|\'export *\'}0",
[e]={{nil,nil,{"expected ",{"module exclusion with \'exclude\'","\'export *\'"}}}},
[f]=k,
[g]="expected (?:module exclusion with \'exclude\'|\'export \\*\')",
[h]=a,
[i]=A,
[b]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
[j]={{v,2902,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  do {\n    // ...\n    case MMToken::ExcludeKeyword:\n      if (ActiveModule) {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_inferred_member) << (ActiveModule != nullptr);"},{v,2922,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  do {\n    // ...\n    case MMToken::ExportKeyword:\n      if (!ActiveModule) {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_inferred_member) << (ActiveModule != nullptr);"},{v,2943,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  do {\n    // ...\n    case MMToken::ExplicitKeyword:\n    case MMToken::ModuleKeyword:\n    case MMToken::HeaderKeyword:\n    case MMToken::PrivateKeyword:\n    case MMToken::UmbrellaKeyword:\n    default:\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_inferred_member) << (ActiveModule != nullptr);"}}
},
["err_mmap_expected_lbrace"]={
[c]="err_mmap_expected_lbrace",
[d]="expected \'{\' to start module \'%0\'",
[e]="expected \'{\' to start module \'A\'",
[f]=k,
[g]="expected \'\\{\' to start module \'(.*?)\'",
[h]=a,
[i]=A,
[b]={Ob,1321038628,Db,Cb},
[j]={{v,2009,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  // Parse the opening brace.\n  if (!Tok.is(MMToken::LBrace)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_lbrace) << ModuleName;"}}
},
["err_mmap_expected_lbrace_wildcard"]={
[c]="err_mmap_expected_lbrace_wildcard",
[d]="expected \'{\' to start inferred submodule",
[e]="expected \'{\' to start inferred submodule",
[f]=k,
[g]="expected \'\\{\' to start inferred submodule",
[h]=a,
[i]=A,
[b]={Cc,1323124064,Ec,zc},
[j]={{v,2885,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  // Parse the opening brace.\n  if (!Tok.is(MMToken::LBrace)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_lbrace_wildcard);"}}
},
["err_mmap_expected_library_name"]={
[c]="err_mmap_expected_library_name",
[d]="expected %select{library|framework}0 name as a string",
[e]={{nil,nil,{"expected ",{"library","framework"}," name as a string"}}},
[f]=k,
[g]="expected (?:library|framework) name as a string",
[h]=a,
[i]=A,
[b]={"6ddfca91e04e",1358184060,"Implement parsing, AST, (de-)serialization, and placeholder global","Implement parsing, AST, (de-)serialization, and placeholder global\nmetadata for linking against the libraries/frameworks for imported\nmodules.\n\nThe module map language is extended with a new \"link\" directive that\nspecifies what library or framework to link against when a module is\nimported, e.g.,\n\n  link \"clangAST\"\n\nor\n\n  link framework \"MyFramework\"\n\nImporting the corresponding module (or any of its submodules) will\neventually link against the named library/framework.\n\nFor now, I\'ve added some placeholder global metadata that encodes the\nimported libraries/frameworks, so that we can test that this\ninformation gets through to the IR. The format of the data is still\nunder discussion.\n\nllvm-svn: 172437"},
[j]={{v,2687,"/// Parse a link declaration.\n///\n///  module-declaration:\n///    \'link\' \'framework\'[opt] string-literal\nvoid ModuleMapParser::parseLinkDecl() {\n  // ...\n  // Parse the library name\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_library_name) << IsFramework << SourceRange(LinkLoc);"}}
},
["err_mmap_expected_member"]={
[c]="err_mmap_expected_member",
[d]="expected umbrella, header, submodule, or module export",
[e]="expected umbrella, header, submodule, or module export",
[f]=k,
[g]="expected umbrella, header, submodule, or module export",
[h]=a,
[i]=A,
[b]={Ob,1321038628,Db,Cb},
[j]={{v,2188,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  do {\n    // ...\n    default:\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_member);"}}
},
["err_mmap_expected_mmap_file"]={
[c]="err_mmap_expected_mmap_file",
[d]="expected a module map file name",
[e]="expected a module map file name",
[f]=k,
[g]="expected a module map file name",
[h]=a,
[i]=A,
[b]={"97292843d0aa",1378884044,"Support for modular module-map-files","Support for modular module-map-files\n\nThis patch is the first step to make module-map-files modular (instead\nof requiring a single \"module.map\"-file per include directory). This\nstep adds a new \"extern module\" declaration that enables\nmodule-map-files to reference one another along with a very basic\nimplementation.\n\nThe next steps are:\n\n* Combine this with the use-declaration (from\n  http://llvm-reviews.chandlerc.com/D1546) in order to only load module\n  map files required for a specific compilation.\n* Add an additional flag to start with a specific module-map-file (instead\n  of requiring there to be at least one \"module.map\").\n\nReview: http://llvm-reviews.chandlerc.com/D1637\nllvm-svn: 190497"},
[j]={{v,2247,"/// Parse an extern module declaration.\n///\n///  extern module-declaration:\n///    \'extern\' \'module\' module-id string-literal\nvoid ModuleMapParser::parseExternModuleDecl() {\n  // ...\n  // Parse the referenced module map file name.\n  if (!Tok.is(MMToken::StringLiteral)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_mmap_file);"}}
},
["err_mmap_expected_module"]={
[c]="err_mmap_expected_module",
[d]="expected module declaration",
[e]="expected module declaration",
[f]=k,
[g]="expected module declaration",
[h]=a,
[i]=A,
[b]={Ob,1321038628,Db,Cb},
[j]={{v,1933,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  // Parse \'module\' keyword.\n  if (!Tok.is(MMToken::ModuleKeyword)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module);"},{v,2231,"/// Parse an extern module declaration.\n///\n///  extern module-declaration:\n///    \'extern\' \'module\' module-id string-literal\nvoid ModuleMapParser::parseExternModuleDecl() {\n  // ...\n  // Parse \'module\' keyword.\n  if (!Tok.is(MMToken::ModuleKeyword)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module);"},{v,3074,"/// Parse a module map file.\n///\n///  module-map-file:\n///    module-declaration*\nbool ModuleMapParser::parseModuleMapFile() {\n  do {\n    // ...\n    case MMToken::Comma:\n    case MMToken::ConfigMacros:\n    case MMToken::Conflict:\n    case MMToken::Exclaim:\n    case MMToken::ExcludeKeyword:\n    case MMToken::ExportKeyword:\n    case MMToken::ExportAsKeyword:\n    case MMToken::HeaderKeyword:\n    case MMToken::Identifier:\n    case MMToken::LBrace:\n    case MMToken::LinkKeyword:\n    case MMToken::LSquare:\n    case MMToken::Period:\n    case MMToken::PrivateKeyword:\n    case MMToken::RBrace:\n    case MMToken::RSquare:\n    case MMToken::RequiresKeyword:\n    case MMToken::Star:\n    case MMToken::StringLiteral:\n    case MMToken::IntegerLiteral:\n    case MMToken::TextualKeyword:\n    case MMToken::UmbrellaKeyword:\n    case MMToken::UseKeyword:\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module);"}}
},
},
["err_mmap_expected_module_name"]={
["err_illegal_qualifiers_on_catch_parm"]={
[c]="err_mmap_expected_module_name",
[b]="err_illegal_qualifiers_on_catch_parm",
[d]="expected module name",
[i]="illegal qualifiers on @catch parameter",
[e]="expected module name",
[j]="illegal qualifiers on @catch parameter",
[f]=k,
[h]=k,
[g]="expected module name",
[c]="illegal qualifiers on @catch parameter",
[h]=a,
[f]=a,
[i]=A,
[e]=m,
[b]={Ob,1321038628,Db,Cb},
[g]={x,1237025389,y,z},
[j]={{v,1791,"/// Parse a module-id.\n///\n///  module-id:\n///    identifier\n///    identifier \'.\' module-id\n///\n/// \\returns true if an error occurred, false otherwise.\nbool ModuleMapParser::parseModuleId(ModuleId &Id) {\n  // ...\n  do {\n    if (Tok.is(MMToken::Identifier) || Tok.is(MMToken::StringLiteral)) {\n   // ...\n   } else {\n     Diags.Report(Tok.getLocation(), diag::err_mmap_expected_module_name);"}},
[d]={{rb,5163,"/// Build a type-check a new Objective-C exception variable declaration.\nVarDecl *Sema::BuildObjCExceptionDecl(TypeSourceInfo *TInfo, QualType T, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, bool Invalid) {\n // ...\n // An @catch parameter must be an unqualified object pointer type;\n // FIXME: Recover from \"NSObject foo\" by inserting the * in \"NSObject *foo\"?\n if (Invalid) {\n  // ...\n  } else if (T->isDependentType()) {\n // ...\n } else if (T->isObjCQualifiedIdType()) {\n   // ...\n    Diag(IdLoc, diag::err_illegal_qualifiers_on_catch_parm);"}},
[l]={
[l]={
["clang/test/Modules/preprocess-build.cpp"]={"clang/test/Modules/preprocess-build.cpp:34:70: error: expected module name"}
["clang/test/SemaObjC/catch-stmt.m"]={"clang/test/SemaObjC/catch-stmt.m:10:20: error: illegal qualifiers on @catch parameter"}
}
}
},
},
["err_mmap_expected_rbrace"]={
["err_illegal_super_cast"]={
[c]="err_mmap_expected_rbrace",
[b]="err_illegal_super_cast",
[d]="expected \'}\'",
[i]="cannot cast \'super\' (it isn\'t an expression)",
[e]="expected \'}\'",
[j]="cannot cast \'super\' (it isn\'t an expression)",
[f]=k,
[h]=k,
[g]="expected \'\\}\'",
[c]="cannot cast \'super\' \\(it isn\'t an expression\\)",
[h]=a,
[f]=a,
[i]=A,
[e]=C,
[b]={Ob,1321038628,Db,Cb},
[g]={x,1237025389,y,z},
[j]={{v,2056,"/// Parse a module declaration.\n///\n///   module-declaration:\n///     \'extern\' \'module\' module-id string-literal\n///     \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///       { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///     header-declaration\n///     submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n // ...\n if (Module *Existing = Map.lookupModuleQualified(ModuleName, ActiveModule)) {\n    // ...\n    if (LoadedFromASTFile || Inferred || PartOfFramework || ParsedAsMainInput) {\n      // ...\n      if (Tok.is(MMToken::RBrace))\n      // ...\n      else {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"},{v,2197,"/// Parse a module declaration.\n///\n///   module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///     header-declaration\n///     submodule-declaration\n///     export-declaration\n///     export-as-declaration\n///     link-declaration\n///\n///  submodule-declaration:\n///     module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (Tok.is(MMToken::RBrace))\n // ...\n  else {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"},{v,2470,"/// Parse a header declaration.\n///\n///  header-declaration:\n///     \'textual\'[opt] \'header\' string-literal\n///     \'private\' \'textual\'[opt] \'header\' string-literal\n///     \'exclude\' \'header\' string-literal\n///    \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // If we were given stat information, parse it so we can skip looking for\n  // the file.\n  if (Tok.is(MMToken::LBrace)) {\n   // ...\n   if (Tok.is(MMToken::RBrace))\n   // ...\n   else {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"},{v,2953,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n // ...\n if (Tok.is(MMToken::RBrace))\n  // ...\n  else {\n   Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rbrace);"}},
[d]={{Zb,3119,"/// 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 // ...\n } else if (ExprType >= CompoundLiteral && BridgeCast) {\n // ...\n } else if (ExprType >= CompoundLiteral && isTypeIdInParens(isAmbiguousTypeId)) {\n   // ...\n   // If our type is followed by an identifier and either \':\' or \']\', then\n   // this is probably an Objective-C message send where the leading \'[\' is\n   // missing. Recover as if that were the case.\n   if (!DeclaratorInfo.isInvalidType() && Tok.is(tok::identifier) && !InMessageExpression && getLangOpts().ObjC && (NextToken().is(tok::colon) || NextToken().is(tok::r_square))) {\n   // ...\n    } else {\n     // ...\n      if (ExprType == CastExpr) {\n       // ...\n       // Reject the cast of super idiom in ObjC.\n        if (Tok.is(tok::identifier) && getLangOpts().ObjC && Tok.getIdentifierInfo() == Ident_super && getCurScope()->isInObjcMethodScope() && GetLookAheadToken(1).isNot(tok::period)) {\n         Diag(Tok.getLocation(), diag::err_illegal_super_cast) << SourceRange(OpenLoc, RParenLoc);"}},
[l]={
[l]={
["clang/test/Parser/objcxx-at.mm"]={"clang/test/Parser/objcxx-at.mm:15:80: error: expected \'}\'"}
["clang/test/SemaObjC/call-super-2.m"]={"clang/test/SemaObjC/call-super-2.m:44:21: error: cannot cast \'super\' (it isn\'t an expression)","clang/test/SemaObjC/call-super-2.m:46:30: error: cannot cast \'super\' (it isn\'t an expression)","clang/test/SemaObjC/call-super-2.m:50:29: error: cannot cast \'super\' (it isn\'t an expression)","clang/test/SemaObjC/call-super-2.m:54:30: error: cannot cast \'super\' (it isn\'t an expression)","clang/test/SemaObjC/call-super-2.m:76:23: error: cannot cast \'super\' (it isn\'t an expression)","clang/test/SemaObjC/call-super-2.m:80:29: error: cannot cast \'super\' (it isn\'t an expression)","clang/test/SemaObjC/call-super-2.m:84:30: error: cannot cast \'super\' (it isn\'t an expression)"}
}
}
},
},
["err_mmap_expected_rsquare"]={
["err_illegal_union_or_anon_struct_member"]={
[c]="err_mmap_expected_rsquare",
[b]="err_illegal_union_or_anon_struct_member",
[d]="expected \']\' to close attribute",
[i]={{nil,A,"%select{anonymous struct|union}0 member %1 has a non-trivial %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2"},{J,nil,"%select{anonymous struct|union}0 member %1 has a non-trivial %select{constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2"}},
[e]="expected \']\' to close attribute",
[j]={{nil,A,{{"anonymous struct","union"}," member B has a non-trivial ",{"default constructor",ic,hc,fc,ec,ob}}},{J,nil,{{"anonymous struct","union"}," member B has a non-trivial ",{"constructor",ic,hc,fc,ec,ob}}}},
[f]=k,
[h]=k,
[g]="expected \'\\]\' to close attribute",
[c]="(?:anonymous struct|union) member (.*?) has a non\\-trivial (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor)",
[h]=a,
[f]=a,
[i]=A,
[e]=m,
[b]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a","Introduce module attributes into the module map grammar, along with a\nsingle attribute (\"system\") that allows us to mark a module as being a\n\"system\" module. Each of the headers that makes up a system module is\nconsidered to be a system header, so that we (for example) suppress\nwarnings there.\n\nIf a module is being inferred for a framework, and that framework\ndirectory is within a system frameworks directory, infer it as a\nsystem framework.\n\nllvm-svn: 149143"},
[g]={"33aee3934acf",1281979628,"Emit diagnostic error when the field of an anonymous struct is non trivial.","Emit diagnostic error when the field of an anonymous struct is non trivial.\n\nllvm-svn: 111158"},
[j]={{v,3021,"/// Parse optional attributes.\n///\n///  attributes:\n///    attribute attributes\n///    attribute\n///\n///  attribute:\n///    [ identifier ]\n///\n/// \\param Attrs Will be filled in with the parsed attributes.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool ModuleMapParser::parseOptionalAttributes(Attributes &Attrs) {\n  // ...\n  while (Tok.is(MMToken::LSquare)) {\n    // ...\n    // Consume the \']\'.\n   if (!Tok.is(MMToken::RSquare)) {\n     Diags.Report(Tok.getLocation(), diag::err_mmap_expected_rsquare);"}}
[d]={{p,18325,"bool Sema::CheckNontrivialField(FieldDecl *FD) {\n  // ...\n  if (const RecordType *RT = EltTy->getAs<RecordType>()) {\n    // ...\n    if (RDecl->getDefinition()) {\n      // ...\n     if (member != CXXInvalid) {\n       // ...\n        Diag(FD->getLocation(), getLangOpts().CPlusPlus11 ? diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member : diag::err_illegal_union_or_anon_struct_member) << FD->getParent()->isUnion() << FD->getDeclName() << member;"}},
},
["err_mmap_explicit_inferred_framework"]={
[c]="err_mmap_explicit_inferred_framework",
[d]="inferred framework modules cannot be \'explicit\'",
[e]="inferred framework modules cannot be \'explicit\'",
[f]=k,
[g]="inferred framework modules cannot be \'explicit\'",
[h]=a,
[i]=A,
[b]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
[j]={{v,2849,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  if (ActiveModule) {\n  // ...\n  } else if (Explicit) {\n    Diags.Report(StarLoc, diag::err_mmap_explicit_inferred_framework);"}}
},
["err_mmap_explicit_top_level"]={
[c]="err_mmap_explicit_top_level",
[d]="\'explicit\' is not permitted on top-level modules",
[e]="\'explicit\' is not permitted on top-level modules",
[f]=k,
[g]="\'explicit\' is not permitted on top\\-level modules",
[h]=a,
[i]=A,
[b]={"e7ab36693b68",1323224625,"Implement basic support for private headers in frameworks. In essence,","Implement basic support for private headers in frameworks. In essence,\nwhen we load a module map (module.map) from a directory, also load a\nprivate module map (module_private.map) for that directory, if\npresent. That private module map can inject a new submodule that\ncaptures private headers.\n\nllvm-svn: 146012"},
[j]={{v,1962,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (ActiveModule) {\n  // ...\n  } else if (Id.size() == 1 && Explicit) {\n    // ...\n    Diags.Report(ExplicitLoc, diag::err_mmap_explicit_top_level);"}}
},
["err_mmap_inferred_framework_submodule"]={
[c]="err_mmap_inferred_framework_submodule",
[d]="inferred submodule cannot be a framework submodule",
[e]="inferred submodule cannot be a framework submodule",
[f]=k,
[g]="inferred submodule cannot be a framework submodule",
[h]=a,
[i]=A,
[b]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
[j]={{v,2845,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  if (ActiveModule) {\n    // ...\n    // Check for the \'framework\' keyword, which is not permitted here.\n    if (Framework) {\n      Diags.Report(StarLoc, diag::err_mmap_inferred_framework_submodule);"}}
},
["err_mmap_inferred_no_umbrella"]={
[c]="err_mmap_inferred_no_umbrella",
[d]="inferred submodules require a module with an umbrella",
[e]="inferred submodules require a module with an umbrella",
[f]=k,
[g]="inferred submodules require a module with an umbrella",
[h]=a,
[i]=A,
[b]={Cc,1323124064,Ec,zc},
[j]={{v,2830,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  if (ActiveModule) {\n    // Inferred modules must have umbrella directories.\n    if (!Failed && ActiveModule->IsAvailable && !ActiveModule->getEffectiveUmbrellaDir()) {\n      Diags.Report(StarLoc, diag::err_mmap_inferred_no_umbrella);"}}
},
["err_mmap_inferred_redef"]={
[c]="err_mmap_inferred_redef",
[d]="redefinition of inferred submodule",
[e]="redefinition of inferred submodule",
[f]=k,
[g]="redefinition of inferred submodule",
[h]=a,
[i]=A,
[b]={Cc,1323124064,Ec,zc},
[j]={{v,2836,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  if (ActiveModule) {\n    // ...\n    // Check for redefinition of an inferred module.\n    if (!Failed && ActiveModule->InferSubmodules) {\n      Diags.Report(StarLoc, diag::err_mmap_inferred_redef);"}}
},
["err_mmap_invalid_header_attribute_value"]={
[c]={{nil,r,"err_mmap_invalid_header_attribute_value"}},
[d]={{nil,r,"expected integer literal as value for header attribute \'%0\'"}},
[e]={{nil,r,"expected integer literal as value for header attribute \'A\'"}},
[f]=k,
[g]="expected integer literal as value for header attribute \'(.*?)\'",
[h]=a,
[i]={{nil,r,A}},
[b]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n  Instead, we track a list of unresolved header files with each size / mtime\n  (actually, for simplicity, we track submodules with such headers), and when\n  attempting to look up a header file based on a `FileEntry`, we check if there\n  are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n  module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
[j]={{v,2439,"/// Parse a header declaration.\n///\n///  header-declaration:\n///    \'textual\'[opt] \'header\' string-literal\n///    \'private\' \'textual\'[opt] \'header\' string-literal\n///    \'exclude\' \'header\' string-literal\n///    \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // If we were given stat information, parse it so we can skip looking for\n  // the file.\n  if (Tok.is(MMToken::LBrace)) {\n    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case Size:\n        // ...\n        if (!Tok.is(MMToken::IntegerLiteral)) {\n          Diags.Report(Tok.getLocation(), diag::err_mmap_invalid_header_attribute_value) << Str;"},{v,2452,"/// Parse a header declaration.\n///\n///  header-declaration:\n///    \'textual\'[opt] \'header\' string-literal\n///    \'private\' \'textual\'[opt] \'header\' string-literal\n///    \'exclude\' \'header\' string-literal\n///    \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // If we were given stat information, parse it so we can skip looking for\n  // the file.\n  if (Tok.is(MMToken::LBrace)) {\n    // ...\n    while (!Tok.is(MMToken::RBrace) && !Tok.is(MMToken::EndOfFile)) {\n      // ...\n      case ModTime:\n        // ...\n        if (!Tok.is(MMToken::IntegerLiteral)) {\n          Diags.Report(Tok.getLocation(), diag::err_mmap_invalid_header_attribute_value) << Str;"}}
},
["err_mmap_missing_exclude_name"]={
[c]="err_mmap_missing_exclude_name",
[d]="expected excluded module name",
[e]="expected excluded module name",
[f]=k,
[g]="expected excluded module name",
[h]=a,
[i]=A,
[b]={"9194a91dc928",1352230780,"Introduce inferred framework modules into the module map file,","Introduce inferred framework modules into the module map file,\nallowing a module map to be placed one level above the \'.framework\'\ndirectories to specify that all .frameworks within that directory can\nbe inferred as framework modules. One can also specifically exclude\nframeworks known not to work.\n\nThis makes explicit (and more restricted) behavior modules have had\n\"forever\", where *any* .framework was assumed to be able to be built\nas a module. That\'s not necessarily true, so we white-list directories\n(with exclusions) when those directories have been audited.\n\nllvm-svn: 167482"},
[j]={{v,2911,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  do {\n    // ...\n    case MMToken::ExcludeKeyword:\n      // ...\n      // FIXME: Support string-literal module names here.\n      if (!Tok.is(MMToken::Identifier)) {\n        Diags.Report(Tok.getLocation(), diag::err_mmap_missing_exclude_name);"}}
},
["err_mmap_missing_module_qualified"]={
[c]="err_mmap_missing_module_qualified",
[d]="no module named \'%0\' in \'%1\'",
[e]="no module named \'A\' in \'B\'",
[f]=k,
[g]="no module named \'(.*?)\' in \'(.*?)\'",
[h]=a,
[i]=A,
[b]={"2b82c2a59eca",1322790427,"Implementing parsing and resolution of module export declarations","Implementing parsing and resolution of module export declarations\nwithin module maps, which will (eventually) be used to re-export a\nmodule from another module. There are still some pieces missing,\nhowever.\n\nllvm-svn: 145665"},
[j]={{v,149,"Module *ModuleMap::resolveModuleId(const ModuleId &Id, Module *Mod, bool Complain) const {\n  // ...\n  // Dig into the module path.\n  for (unsigned I = 1, N = Id.size(); I != N; ++I) {\n    // ...\n    if (!Sub) {\n      if (Complain)\n        Diags.Report(Id[I].second, diag::err_mmap_missing_module_qualified) << Id[I].first << Context->getFullModuleName() << SourceRange(Id[0].second, Id[I - 1].second);"}}
},
["err_mmap_missing_module_unqualified"]={
[c]="err_mmap_missing_module_unqualified",
[d]="no module named \'%0\' visible from \'%1\'",
[e]="no module named \'A\' visible from \'B\'",
[f]=k,
[g]="no module named \'(.*?)\' visible from \'(.*?)\'",
[h]=a,
[i]=A,
[b]={"2b82c2a59eca",1322790427,"Implementing parsing and resolution of module export declarations","Implementing parsing and resolution of module export declarations\nwithin module maps, which will (eventually) be used to re-export a\nmodule from another module. There are still some pieces missing,\nhowever.\n\nllvm-svn: 145665"},
[j]={{v,138,"Module *ModuleMap::resolveModuleId(const ModuleId &Id, Module *Mod, bool Complain) const {\n  // ...\n  if (!Context) {\n    if (Complain)\n      Diags.Report(Id[0].second, diag::err_mmap_missing_module_unqualified) << Id[0].first << Mod->getFullModuleName();"}}
},
["err_mmap_missing_parent_module"]={
[c]={{nil,D,"err_mmap_missing_parent_module"}},
[d]={{nil,D,"no module named \'%0\' %select{found|in \'%2\'}1, parent module must be defined before the submodule"}},
[e]={{nil,D,{"no module named \'A\' ",{"found","in \'C\'"},", parent module must be defined before the submodule"}}},
[f]=k,
[g]="no module named \'(.*?)\' (?:found|in \'(.*?)\'), parent module must be defined before the submodule",
[h]=a,
[i]={{nil,D,A}},
[b]={"8839e278ffca",1595533636,"[Modules] Improve error message when cannot find parent module for submodule definition.","[Modules] Improve error message when cannot find parent module for submodule definition.\n\nBefore the change the diagnostic for\n\n    module unknown.submodule {}\n\nwas \"error: expected module name\" which is incorrect and misleading\nbecause both \"unknown\" and \"submodule\" are valid module names.\n\nWe already have a better error message when a parent module is a\nsubmodule itself and is missing. Make the error for a missing top-level\nmodule more like the one for a submodule.\n\nrdar://problem/64424407\n\nReviewed By: bruno\n\nDifferential Revision: https://reviews.llvm.org/D84458"},
[j]={{v,1982,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (Id.size() > 1) {\n    // ...\n    for (unsigned I = 0, N = Id.size() - 1; I != N; ++I) {\n      // ...\n      Diags.Report(Id[I].second, diag::err_mmap_missing_parent_module) << Id[I].first << (ActiveModule != nullptr) << (ActiveModule ? ActiveModule->getTopLevelModule()->getFullModuleName() : \"\");"}}
},
["err_mmap_module_id"]={
[c]="err_mmap_module_id",
[d]="expected a module name or \'*\'",
[e]="expected a module name or \'*\'",
[f]=k,
[g]="expected a module name or \'\\*\'",
[h]=a,
[i]=A,
[b]={"ba7f2f7110c2",1380014054,"Module use declarations (II)","Module use declarations (II)\n\nReview: http://llvm-reviews.chandlerc.com/D1546.\n\nI have picked up this patch form Lawrence\n(http://llvm-reviews.chandlerc.com/D1063) and did a few changes.\n\nFrom the original change description (updated as appropriate):\nThis patch adds a check that ensures that modules only use modules they\nhave so declared. To this end, it adds a statement on intended module\nuse to the module.map grammar:\n\n  use module-id\n\nA module can then only use headers from other modules if it \'uses\' them.\nThis enforcement is off by default, but may be turned on with the new\noption -fmodules-decluse.\n\nWhen enforcing the module semantics, we also need to consider a source\nfile part of a module. This is achieved with a compiler option\n\n-fmodule-name=<module-id>.\n\nThe compiler at present only applies restrictions to the module directly\nbeing built.\n\nllvm-svn: 191283"},
[j]={{v,2605,"/// Parse a module export declaration.\n///\n///  export-declaration:\n///    \'export\' wildcard-module-id\n///\n///  wildcard-module-id:\n///    identifier\n///    \'*\'\n///    identifier \'.\' wildcard-module-id\nvoid ModuleMapParser::parseExportDecl() {\n  // ...\n  do {\n    // ...\n    Diags.Report(Tok.getLocation(), diag::err_mmap_module_id);"},{v,2625,"/// Parse a module export_as declaration.\n///\n///  export-as-declaration:\n///    \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  // ...\n  if (!Tok.is(MMToken::Identifier)) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_module_id);"}}
},
["err_mmap_module_redefinition"]={
[c]="err_mmap_module_redefinition",
[d]="redefinition of module \'%0\'",
[e]="redefinition of module \'A\'",
[f]=k,
[g]="redefinition of module \'(.*?)\'",
[h]=a,
[i]=A,
[b]={Ob,1321038628,Db,Cb},
[j]={{v,2067,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (Module *Existing = Map.lookupModuleQualified(ModuleName, ActiveModule)) {\n    // ...\n    if (!Existing->Parent && Map.mayShadowNewModule(Existing)) {\n    // ...\n    } else {\n      // ...\n      Diags.Report(ModuleNameLoc, diag::err_mmap_module_redefinition) << ModuleName;"}}
},
["err_mmap_nested_submodule_id"]={
[c]="err_mmap_nested_submodule_id",
[d]="qualified module name can only be used to define modules at the top level",
[e]="qualified module name can only be used to define modules at the top level",
[f]=k,
[g]="qualified module name can only be used to define modules at the top level",
[h]=a,
[i]=A,
[b]={"e7ab36693b68",1323224625,"Implement basic support for private headers in frameworks. In essence,","Implement basic support for private headers in frameworks. In essence,\nwhen we load a module map (module.map) from a directory, also load a\nprivate module map (module_private.map) for that directory, if\npresent. That private module map can inject a new submodule that\ncaptures private headers.\n\nllvm-svn: 146012"},
[j]={{v,1954,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  // ...\n  if (ActiveModule) {\n    if (Id.size() > 1) {\n      Diags.Report(Id.front().second, diag::err_mmap_nested_submodule_id) << SourceRange(Id.front().second, Id.back().second);"}}
},
["err_mmap_submodule_export_as"]={
[c]={{nil,t,"err_mmap_submodule_export_as"}},
[d]={{nil,t,"only top-level modules can be re-exported as public"}},
[e]={{nil,t,"only top-level modules can be re-exported as public"}},
[f]=k,
[g]="only top\\-level modules can be re\\-exported as public",
[h]=a,
[i]={{nil,t,A}},
[b]={"f0b11de279e7",1505432324,"[Module map] Introduce a private module re-export directive.","[Module map] Introduce a private module re-export directive.\n\nIntroduce a new \"export_as\" directive for top-level modules, which\nindicates that the current module is a \"private\" module whose symbols\nwill eventually be exported through the named \"public\" module. This is\nin support of a common pattern in the Darwin ecosystem where a single\npublic framework is constructed of several private frameworks, with\n(currently) header duplication and some support from the linker.\n\nAddresses rdar://problem/34438420.\n\nllvm-svn: 313316"},
[j]={{v,2631,"/// Parse a module export_as declaration.\n///\n///  export-as-declaration:\n///    \'export_as\' identifier\nvoid ModuleMapParser::parseExportAsDecl() {\n  // ...\n  if (ActiveModule->Parent) {\n    Diags.Report(Tok.getLocation(), diag::err_mmap_submodule_export_as);"}}
},
["err_mmap_top_level_inferred_submodule"]={
[c]="err_mmap_top_level_inferred_submodule",
[d]="only submodules and framework modules may be inferred with wildcard syntax",
[e]="only submodules and framework modules may be inferred with wildcard syntax",
[f]=k,
[g]="only submodules and framework modules may be inferred with wildcard syntax",
[h]=a,
[i]=A,
[b]={Cc,1323124064,Ec,zc},
[j]={{v,2822,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  // ...\n  // Inferred modules must be submodules.\n  if (!ActiveModule && !Framework) {\n    Diags.Report(StarLoc, diag::err_mmap_top_level_inferred_submodule);"}}
},
["err_mmap_umbrella_clash"]={
[c]="err_mmap_umbrella_clash",
[d]="umbrella for module \'%0\' already covers this directory",
[e]="umbrella for module \'A\' already covers this directory",
[f]=k,
[g]="umbrella for module \'(.*?)\' already covers this directory",
[h]=a,
[i]=A,
[b]={"b65dbfff5275",1321484545,"A module with an umbrella header assumes that all of the headers in","A module with an umbrella header assumes that all of the headers in\nthe umbrella header\'s directory and its subdirectories are part of the\nmodule (that\'s why it\'s an umbrella). Make sure that these headers are\nconsidered to be part of the module for lookup purposes.\n\nllvm-svn: 144859"},
[j]={{v,266,"void ModuleMap::resolveHeader(Module *Mod, const Module::UnresolvedHeaderDirective &Header, bool &NeedsFramework) {\n  // ...\n  if (OptionalFileEntryRef File = findHeader(Mod, Header, RelativePathName, NeedsFramework)) {\n    if (Header.IsUmbrella) {\n      // ...\n      if (Module *UmbrellaMod = UmbrellaDirs[UmbrellaDir])\n        Diags.Report(Header.FileNameLoc, diag::err_mmap_umbrella_clash) << UmbrellaMod->getFullModuleName();"},{v,2415,"/// Parse a header declaration.\n///\n///  header-declaration:\n///    \'textual\'[opt] \'header\' string-literal\n///    \'private\' \'textual\'[opt] \'header\' string-literal\n///    \'exclude\' \'header\' string-literal\n///    \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // ...\n  // Check whether we already have an umbrella.\n  if (Header.IsUmbrella && ActiveModule->Umbrella) {\n    Diags.Report(Header.FileNameLoc, diag::err_mmap_umbrella_clash) << ActiveModule->getFullModuleName();"},{v,2509,"/// Parse an umbrella directory declaration.\n///\n///  umbrella-dir-declaration:\n///    umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  // ...\n  // Check whether we already have an umbrella.\n  if (ActiveModule->Umbrella) {\n    Diags.Report(DirNameLoc, diag::err_mmap_umbrella_clash) << ActiveModule->getFullModuleName();"},{v,2558,"/// Parse an umbrella directory declaration.\n///\n///  umbrella-dir-declaration:\n///    umbrella string-literal\nvoid ModuleMapParser::parseUmbrellaDirDecl(SourceLocation UmbrellaLoc) {\n  // ...\n  if (Module *OwningModule = Map.UmbrellaDirs[*Dir]) {\n    Diags.Report(UmbrellaLoc, diag::err_mmap_umbrella_clash) << OwningModule->getFullModuleName();"}}
},
["err_mmap_unknown_token"]={
[c]="err_mmap_unknown_token",
[d]="skipping stray token",
[e]="skipping stray token",
[f]=k,
[g]="skipping stray token",
[h]=a,
[i]=A,
[b]={Ob,1321038628,Db,Cb},
[j]={{v,1689,"retry:\n  // ...\n  case tok::numeric_constant: {\n    // ...\n    if (StringRef(Start, Length).getAsInteger(0, Value)) {\n      Diags.Report(Tok.getLocation(), diag::err_mmap_unknown_token);"},{v,1722,"retry:\n  // ...\n  default:\n    Diags.Report(Tok.getLocation(), diag::err_mmap_unknown_token);"}}
},
["err_mmap_use_decl_submodule"]={
[c]="err_mmap_use_decl_submodule",
[d]="use declarations are only allowed in top-level modules",
[e]="use declarations are only allowed in top-level modules",
[f]=k,
[g]="use declarations are only allowed in top\\-level modules",
[h]=a,
[i]=A,
[b]={"8f4d3ff1466a",1427407801,"[modules] Restrict the module use-declaration to only appear in top-level","[modules] Restrict the module use-declaration to only appear in top-level\nmodules, and allow sub-modules of a module with a use-declaration to make use\nof the nominated modules.\n\nllvm-svn: 233323"},
[j]={{v,2665,"/// Parse a module use declaration.\n///\n///  use-declaration:\n///    \'use\' wildcard-module-id\nvoid ModuleMapParser::parseUseDecl() {\n  // ...\n  if (ActiveModule->Parent)\n    Diags.Report(KWLoc, diag::err_mmap_use_decl_submodule);"}}
},
["err_mode_not_primitive"]={
[c]="err_mode_not_primitive",
[d]="mode attribute only supported for integer and floating-point types",
[e]="mode attribute only supported for integer and floating-point types",
[f]=k,
[g]="mode attribute only supported for integer and floating\\-point types",
[h]=a,
[i]=m,
[b]={J,1236199783,H,I},
[j]={{K,4817,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n    Diag(AttrLoc, diag::err_mode_not_primitive);"}},
[l]={
[l]={
["clang/test/SemaCXX/ext-int.cpp"]={"clang/test/SemaCXX/ext-int.cpp:260:48: error: mode attribute only supported for integer and floating-point types"}
["clang/test/CXX/class/class.union/p1.cpp"]={"clang/test/CXX/class/class.union/p1.cpp:39:11: error: union member \'v\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:40:15: error: union member \'vbase\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:41:8: error: union member \'ctor\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:42:9: error: union member \'ctor2\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:43:12: error: union member \'ctortmpl\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:44:12: error: union member \'copyctor\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:45:14: error: union member \'copyassign\' has a non-trivial copy assignment operator","clang/test/CXX/class/class.union/p1.cpp:46:8: error: union member \'dtor\' has a non-trivial destructor","clang/test/CXX/class/class.union/p1.cpp:53:5: error: union member \'m1\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:56:5: error: union member \'m2\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:59:5: error: union member \'m3\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:62:5: error: union member \'m3a\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:65:5: error: union member \'m4\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:68:5: error: union member \'m5\' has a non-trivial copy assignment operator","clang/test/CXX/class/class.union/p1.cpp:71:5: error: union member \'m6\' has a non-trivial destructor","clang/test/CXX/class/class.union/p1.cpp:79:5: error: union member \'m1\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:81:5: error: union member \'m2\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:83:5: error: union member \'m3\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:85:5: error: union member \'m3a\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:87:5: error: union member \'m4\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:89:5: error: union member \'m5\' has a non-trivial copy assignment operator","clang/test/CXX/class/class.union/p1.cpp:91:5: error: union member \'m6\' has a non-trivial destructor","clang/test/CXX/class/class.union/p1.cpp:96:5: error: union member \'m8\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:118:7: error: union member \'b\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:118:7: error: union member \'b\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:118:7: error: union member \'b\' has a non-trivial default constructor","clang/test/CXX/class/class.union/p1.cpp:118:7: error: union member \'b\' has a non-trivial copy constructor","clang/test/CXX/class/class.union/p1.cpp:118:7: error: union member \'b\' has a non-trivial copy assignment operator","clang/test/CXX/class/class.union/p1.cpp:118:7: error: union member \'b\' has a non-trivial destructor"}
}
}
},
},
["err_mode_wrong_type"]={
["err_illegal_use_of_flt_eval_macro"]={
[c]="err_mode_wrong_type",
[b]={{nil,s,"err_illegal_use_of_flt_eval_macro"}},
[d]="type of machine mode does not match type of base type",
[i]={{nil,s,"\'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'"}},
[e]="type of machine mode does not match type of base type",
[j]={{nil,s,"\'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'"}},
[f]=k,
[h]=k,
[g]="type of machine mode does not match type of base type",
[c]="\'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'\\#pragma clang fp eval_method\'",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,s,O}},
[b]={J,1236199783,H,I},
[g]={N,1625925174,M,L},
[j]={{K,4820,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n  // ...\n  else if (IntegerMode) {\n    if (!IntegralOrAnyEnumType)\n      Diag(AttrLoc, diag::err_mode_wrong_type);"},{K,4823,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n  // ...\n  else if (IntegerMode) {\n  // ...\n  } else if (ComplexMode) {\n    if (!OldElemTy->isComplexType())\n      Diag(AttrLoc, diag::err_mode_wrong_type);"},{K,4826,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (!OldElemTy->getAs<BuiltinType>() && !OldElemTy->isComplexType() && !IntegralOrAnyEnumType)\n  // ...\n  else if (IntegerMode) {\n  // ...\n  } else if (ComplexMode) {\n // ...\n  } else {\n    if (!OldElemTy->isFloatingType())\n      Diag(AttrLoc, diag::err_mode_wrong_type);"},{K,4864,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n // ...\n if (NewTy.isNull()) {\n    Diag(AttrLoc, diag::err_mode_wrong_type);"}},
[d]={{"clang/lib/Lex/PPMacroExpansion.cpp",1641,"/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded\n/// as a builtin macro, handle it and return the next token as \'Tok\'.\nvoid Preprocessor::ExpandBuiltinMacro(Token &Tok) {\n  // ...\n  if (II == Ident__LINE__) {\n  // ...\n  } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__ || II == Ident__FILE_NAME__) {\n  // ...\n  } else if (II == Ident__DATE__) {\n  // ...\n  } else if (II == Ident__TIME__) {\n  // ...\n  } else if (II == Ident__INCLUDE_LEVEL__) {\n  // ...\n  } else if (II == Ident__TIMESTAMP__) {\n  // ...\n  } else if (II == Ident__FLT_EVAL_METHOD__) {\n   // ...\n    if (getLastFPEvalPragmaLocation().isValid()) {\n     // ...\n     Diag(Tok, diag::err_illegal_use_of_flt_eval_macro);"}},
[l]={
[l]={
["clang/test/Sema/attr-mode-vector-types.c"]={"clang/test/Sema/attr-mode-vector-types.c:21:30: error: type of machine mode does not match type of base type","clang/test/Sema/attr-mode-vector-types.c:26:28: error: type of machine mode does not match type of base type","clang/test/Sema/attr-mode-vector-types.c:29:30: error: type of machine mode does not match type of base type"}
["clang/test/Sema/fp-eval-pragma.cpp"]={"clang/test/Sema/fp-eval-pragma.cpp:22:22: error: \'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'","clang/test/Sema/fp-eval-pragma.cpp:46:14: error: \'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'","clang/test/Sema/fp-eval-pragma.cpp:62:13: error: \'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'","clang/test/Sema/fp-eval-pragma.cpp:79:12: error: \'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'","clang/test/Sema/fp-eval-pragma.cpp:85:12: error: \'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'","clang/test/Sema/fp-eval-pragma.cpp:96:5: error: \'__FLT_EVAL_METHOD__\' cannot be expanded inside a scope containing \'#pragma clang fp eval_method\'"}
}
}
},
},
["err_modifier_expected_colon"]={
["err_imaginary_not_supported"]={
[c]={{nil,p,"err_modifier_expected_colon"}},
[b]="err_imaginary_not_supported",
[d]={{nil,p,"missing \':\' after %0 modifier"}},
[i]="imaginary types are not supported",
[e]={{nil,p,"missing \':\' after A modifier"}},
[j]="imaginary types are not supported",
[f]=k,
[h]=k,
[g]="missing \'\\:\' after (.*?) modifier",
[c]="imaginary types are not supported",
[h]=a,
[f]=a,
[i]={{nil,p,y}},
[e]=m,
[b]={"ab9eac762c35",1668730814,"[OpenMP] Initial parsing/sema for \'strict\' modifier with \'grainsize\' clause","[OpenMP] Initial parsing/sema for \'strict\' modifier with \'grainsize\' clause\n\nThis patch gives basic parsing and semantic analysis support for \'strict\'\nmodifier with \'grainsize\' clause of \'taskloop\' construct introduced in\nOpenMP 5.1 (section 2.12.2)\n\nDifferential Revision: https://reviews.llvm.org/D138217"},
[g]={"719a46bbf14a",1285234831,"Don\'t crash on _Imaginary.","Don\'t crash on _Imaginary.\n\nllvm-svn: 114637"},
[j]={{"clang/lib/Parse/ParseOpenMP.cpp",3942,"/// Parsing of OpenMP clauses with single expressions and some additional\n/// argument like \'schedule\' or \'dist_schedule\'.\n///\n///    schedule-clause:\n///      \'schedule\' \'(\' [ modifier [ \',\' modifier ] \':\' ] kind [\',\' expression ]\n///      \')\'\n///\n///    if-clause:\n///      \'if\' \'(\' [ directive-name-modifier \':\' ] expression \')\'\n///\n///    defaultmap:\n///      \'defaultmap\' \'(\' modifier [ \':\' kind ] \')\'\n///\n///    device-clause:\n///      \'device\' \'(\' [ device-modifier \':\' ] expression \')\'\n///\nOMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, bool ParseOnly) {\n  // ...\n  if (Kind == OMPC_schedule) {\n  // ...\n  } else if (Kind == OMPC_dist_schedule) {\n  // ...\n  } else if (Kind == OMPC_defaultmap) {\n  // ...\n  } else if (Kind == OMPC_order) {\n  // ...\n  } else if (Kind == OMPC_device) {\n  // ...\n  } else if (Kind == OMPC_grainsize) {\n    // ...\n    if (getLangOpts().OpenMP >= 51) {\n      if (NextToken().is(tok::colon)) {\n      // ...\n      } else {\n        if (Modifier == OMPC_GRAINSIZE_strict) {\n          Diag(Tok, diag::err_modifier_expected_colon) << \"strict\";"},{"clang/lib/Parse/ParseOpenMP.cpp",3969,"/// Parsing of OpenMP clauses with single expressions and some additional\n/// argument like \'schedule\' or \'dist_schedule\'.\n///\n///    schedule-clause:\n///      \'schedule\' \'(\' [ modifier [ \',\' modifier ] \':\' ] kind [\',\' expression ]\n///      \')\'\n///\n///    if-clause:\n///      \'if\' \'(\' [ directive-name-modifier \':\' ] expression \')\'\n///\n///    defaultmap:\n///      \'defaultmap\' \'(\' modifier [ \':\' kind ] \')\'\n///\n///    device-clause:\n///      \'device\' \'(\' [ device-modifier \':\' ] expression \')\'\n///\nOMPClause *Parser::ParseOpenMPSingleExprWithArgClause(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, bool ParseOnly) {\n  // ...\n  if (Kind == OMPC_schedule) {\n  // ...\n  } else if (Kind == OMPC_dist_schedule) {\n  // ...\n  } else if (Kind == OMPC_defaultmap) {\n  // ...\n  } else if (Kind == OMPC_order) {\n  // ...\n  } else if (Kind == OMPC_device) {\n  // ...\n  } else if (Kind == OMPC_grainsize) {\n  // ...\n  } else if (Kind == OMPC_num_tasks) {\n    // ...\n    if (getLangOpts().OpenMP >= 51) {\n      if (NextToken().is(tok::colon)) {\n      // ...\n      } else {\n        if (Modifier == OMPC_NUMTASKS_strict) {\n          Diag(Tok, diag::err_modifier_expected_colon) << \"strict\";"}},
[d]={{G,1805,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  // ...\n  // FIXME: Imaginary.\n  if (DS.getTypeSpecComplex() == DeclSpec::TSC_imaginary)\n    S.Diag(DS.getTypeSpecComplexLoc(), diag::err_imaginary_not_supported);"}},
[l]={
[l]={
["clang/test/OpenMP/taskloop_strict_modifier_messages.cpp"]={"clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:17:34: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:26:34: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:40:41: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:50:46: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:60:50: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:70:55: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:80:41: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:90:46: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:100:50: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:110:55: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:119:41: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:129:46: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:139:50: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:149:55: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:159:41: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:169:46: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:178:50: error: missing \':\' after strict modifier","clang/test/OpenMP/taskloop_strict_modifier_messages.cpp:188:55: error: missing \':\' after strict modifier"}
["clang/test/CodeGen/imaginary.c"]={"clang/test/CodeGen/imaginary.c:4:8: error: imaginary types are not supported"}
}
}
},
},
["err_module_build_disabled"]={
["err_immediate_function_used_before_definition"]={
[c]="err_module_build_disabled",
[b]="err_immediate_function_used_before_definition",
[d]="module \'%0\' is needed but has not been provided, and implicit use of module files is disabled",
[i]="immediate function %0 used before it is defined",
[e]="module \'A\' is needed but has not been provided, and implicit use of module files is disabled",
[j]="immediate function A used before it is defined",
[f]=V,
[h]=k,
[g]="module \'(.*?)\' is needed but has not been provided, and implicit use of module files is disabled",
[c]="immediate function (.*?) used before it is defined",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={"d2e8b04d6111",1424432681,"Add -fno-implicit-modules.","Add -fno-implicit-modules.\n\nIf this flag is set, we error out when a module build is required. This is\nuseful in environments where all required modules are passed via -fmodule-file.\n\nllvm-svn: 230006"},
[g]={N,1625925174,M,L},
[j]={{wb,1832,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  if (ModuleFilename.empty()) {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_build_disabled) << ModuleName;"}},
[d]={{t,2451,"bool Sema::CheckImmediateEscalatingFunctionDefinition(FunctionDecl *FD, const sema::FunctionScopeInfo *FSI) {\n  // ...\n  if (FSI->FoundImmediateEscalatingExpression) {\n    // ...\n    if (it != UndefinedButUsed.end()) {\n      Diag(it->second, diag::err_immediate_function_used_before_definition) << it->first;"}},
[l]={
[l]={
["clang/test/Modules/implicit-module-with-missing-path.cpp"]={"clang/test/Modules/implicit-module-with-missing-path.cpp:12:8: fatal error: module \'C\' is needed but has not been provided, and implicit use of module files is disabled"}
["clang/test/SemaCXX/cxx2b-consteval-propagate.cpp"]={"clang/test/SemaCXX/cxx2b-consteval-propagate.cpp:108:11: error: immediate function \'f<int>\' used before it is defined"}
}
}
},
},
["err_module_build_requires_fmodules"]={
["err_impcast_complex_scalar"]={
[c]={{nil,r,"err_module_build_requires_fmodules"}},
[b]={{nil,J,"err_impcast_complex_scalar"}},
[d]={{nil,r,"module compilation requires \'-fmodules\'"}},
[i]={{nil,J,"implicit conversion from %0 to %1 is not permitted in C++"}},
[e]={{nil,r,"module compilation requires \'-fmodules\'"}},
[j]={{nil,J,"implicit conversion from A to B is not permitted in C++"}},
[f]=k,
[h]=k,
[g]="module compilation requires \'\\-fmodules\'",
[c]="implicit conversion from (.*?) to (.*?) is not permitted in C\\+\\+",
[h]=a,
[f]=a,
[i]={{nil,r,w}},
[e]={{nil,J,m}},
[b]={"1f2bd35b247b",1499375156,"Reject attempts to build a module without -fmodules, rather than silently doing weird things.","Reject attempts to build a module without -fmodules, rather than silently doing weird things.\n\nllvm-svn: 307316"},
[g]={"0241637c0ea3",1502234285,"Sema: disable implicit conversion from _Complex to real types in C++.","Sema: disable implicit conversion from _Complex to real types in C++.\n\nConverting a _Complex type to a real one simply discards the imaginary part.\nThis can easily lead to loss of information so for safety (and GCC\ncompatibility) this patch disallows that when the conversion would be implicit.\n\nThe one exception is bool, which actually compares both real and imaginary\nparts and so is safe.\n\nllvm-svn: 310427"},
[j]={{"clang/lib/Frontend/FrontendActions.cpp",223,"bool GenerateModuleFromModuleMapAction::BeginSourceFileAction(CompilerInstance &CI) {\n  if (!CI.getLangOpts().Modules) {\n    CI.getDiagnostics().Report(diag::err_module_build_requires_fmodules);"}}
[d]={{K,14762,"static void CheckImplicitConversion(Sema &S, Expr *E, QualType T, SourceLocation CC, bool *ICContext = nullptr, bool IsListInit = false) {\n // ...\n  // Strip complex types.\n  if (isa<ComplexType>(Source)) {\n   if (!isa<ComplexType>(Target)) {\n     // ...\n     return DiagnoseImpCast(S, E, T, CC, S.getLangOpts().CPlusPlus ? diag::err_impcast_complex_scalar : diag::warn_impcast_complex_scalar);"}},
},
["err_module_build_shadowed_submodule"]={
[c]={{nil,q,"err_module_build_shadowed_submodule"}},
[d]={{nil,q,"build a shadowed submodule \'%0\'"}},
[e]={{nil,q,"build a shadowed submodule \'A\'"}},
[f]=V,
[g]="build a shadowed submodule \'(.*?)\'",
[h]=a,
[i]={{nil,q,y}},
[b]={"b6ec4a33fb2b",1515032260,"[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones","[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones\n\nWhen modules come from module map files explicitly specified by\n-fmodule-map-file= arguments, allow those to override/shadow modules\nwith the same name that are found implicitly by header search. If such a\nmodule is looked up by name (e.g. @import), we will always find the one\nfrom -fmodule-map-file. If we try to use a shadowed module by including\none of its headers report an error.\n\nThis enables developers to force use of a specific copy of their module\nto be used if there are multiple copies that would otherwise be visible,\nfor example if they develop modules that are installed in the default\nsearch paths.\n\nPatch originally by Ben Langmuir,\nhttp://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20151116/143425.html\n\nBased on cfe-dev discussion:\nhttp://lists.llvm.org/pipermail/cfe-dev/2015-November/046164.html\n\nDifferential Revision: https://reviews.llvm.org/D31269\n\nrdar://problem/23612102\n\nllvm-svn: 321781"},
[j]={{"clang/lib/Lex/PPDirectives.cpp",2553,"#endif\n  // ...\n  // Determine if we\'re switching to building a new submodule, and which one.\n  // This does not apply for C++20 modules header units.\n  if (SM && !SM->isHeaderUnit()) {\n    if (SM->getTopLevelModule()->ShadowingModule) {\n      // ...\n      Diag(SM->DefinitionLoc, diag::err_module_build_shadowed_submodule) << SM->getFullModuleName();"}}
},
["err_module_cannot_create_includes"]={
[c]="err_module_cannot_create_includes",
[d]="cannot create includes file for module %0: %1",
[e]="cannot create includes file for module A: B",
[f]=k,
[g]="cannot create includes file for module (.*?)\\: (.*?)",
[h]=a,
[i]=w,
[b]={"723928c7dcc7",1394503367,"If a module map is found in a relative -I path, convert the filenames within it","If a module map is found in a relative -I path, convert the filenames within it\nto absolute paths when building the includes file for the module. Without this,\nthe module build would fail, because the relative paths we were using are not\nnecessarily relative to a directory in our include path.\n\nllvm-svn: 203528"},
[j]={{Pb,567,"/// Compute the input buffer that should be used to build the specified module.\nstatic std::unique_ptr<llvm::MemoryBuffer> getInputBufferForModule(CompilerInstance &CI, Module *M) {\n  // ...\n  if (Err) {\n    CI.getDiagnostics().Report(diag::err_module_cannot_create_includes) << M->getFullModuleName() << Err.message();"}}
},
["err_module_cycle"]={
[c]="err_module_cycle",
[d]="cyclic dependency in module \'%0\': %1",
[e]="cyclic dependency in module \'A\': B",
[f]=V,
[g]="cyclic dependency in module \'(.*?)\'\\: (.*?)",
[h]=a,
[i]=y,
[b]={"dff0e892db7c",1316119210,"Detect cyclic module dependencies in a manner that is rather more","Detect cyclic module dependencies in a manner that is rather more\ngraceful than running out of stack space.\n\nllvm-svn: 139833"},
[j]={{wb,1938,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n // ...\n  if (Pos != PosEnd) {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_cycle) << ModuleName << CyclePath;"}}
},
["err_module_decl_in_header_unit"]={
[c]={{nil,p,"err_module_decl_in_header_unit"}},
[d]={{nil,p,"\'module\' declaration found while building header unit"}},
[e]={{nil,p,"\'module\' declaration found while building header unit"}},
[f]=k,
[g]="\'module\' declaration found while building header unit",
[h]=a,
[i]={{nil,p,O}},
[b]={nc,1625925174,kc,Dc},
[j]={{nb,225,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n // ...\n case LangOptions::CMK_HeaderUnit:\n    Diag(ModuleLoc, diag::err_module_decl_in_header_unit);"}}
},
["err_module_decl_in_module_map_module"]={
[c]={{nil,r,"err_module_decl_in_module_map_module"}},
[d]={{nil,r,"\'module\' declaration found while building module from module map"}},
[e]={{nil,r,"\'module\' declaration found while building module from module map"}},
[f]=k,
[g]="\'module\' declaration found while building module from module map",
[h]=a,
[i]={{nil,r,O}},
[b]={"81328ac3a5b1",1492814358,"P0629R0: Switch to latest proposal for distinguishing module interface from implementation.","P0629R0: Switch to latest proposal for distinguishing module interface from implementation.\n\nThis switches from the prototype syntax in P0273R0 (\'module\' and \'module\nimplementation\') to the consensus syntax \'export module\' and \'module\'.\n\nIn passing, drop the \"module declaration must be first\" enforcement, since EWG\nseems to have changed its mind on that.\n\nllvm-svn: 301056"},
[j]={{nb,221,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case LangOptions::CMK_ModuleMap:\n    Diag(ModuleLoc, diag::err_module_decl_in_module_map_module);"}}
},
["err_module_decl_not_at_start"]={
[c]={{nil,z,"err_module_decl_not_at_start"}},
[d]={{nil,z,"module declaration must occur at the start of the translation unit"}},
[e]={{nil,z,"module declaration must occur at the start of the translation unit"}},
[f]=k,
[g]="module declaration must occur at the start of the translation unit",
[h]=a,
[i]={{nil,z,O}},
[b]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
[j]={{nb,249,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  // In C++20, the module-declaration must be the first declaration if there\n  // is no global module fragment.\n  if (getLangOpts().CPlusPlusModules && !IsFirstDecl && !SeenGMF) {\n    Diag(ModuleLoc, diag::err_module_decl_not_at_start);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:24:8: error: module declaration must occur at the start of the translation unit"}
["clang/test/SemaCXX/complex-conversion.cpp"]={"clang/test/SemaCXX/complex-conversion.cpp:9:10: error: implicit conversion from \'_Complex float\' to \'float\' is not permitted in C++","clang/test/SemaCXX/complex-conversion.cpp:12:15: error: implicit conversion from \'_Complex float\' to \'float\' is not permitted in C++","clang/test/SemaCXX/complex-conversion.cpp:13:16: error: implicit conversion from \'_Complex double\' to \'double\' is not permitted in C++"}
}
}
},
},
["err_module_declaration_missing"]={
["err_implementation_of_class_stub"]={
[c]={{nil,t,"err_module_declaration_missing"}},
[b]={{nil,r,"err_implementation_of_class_stub"}},
[d]={{nil,t,"missing \'export module\' declaration in module interface unit"}},
[i]={{nil,r,"cannot declare implementation of a class declared with the \'objc_class_stub\' attribute"}},
[e]={{nil,t,"missing \'export module\' declaration in module interface unit"}},
[j]={{nil,r,"cannot declare implementation of a class declared with the \'objc_class_stub\' attribute"}},
[f]=k,
[h]=k,
[g]="missing \'export module\' declaration in module interface unit",
[c]="cannot declare implementation of a class declared with the \'objc_class_stub\' attribute",
[h]=a,
[f]=a,
[i]={{nil,t,O}},
[e]={{nil,r,m}},
[b]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration.","[Modules TS] Diagnose missing/duplicate module-declaration.\n\nllvm-svn: 315397"},
[g]={"2c91c3b7af7c",1559189341,"Add the `objc_class_stub` attribute.","Add the `objc_class_stub` attribute.\n\nSwift requires certain classes to be not just initialized lazily on first\nuse, but actually allocated lazily using information that is only available\nat runtime. This is incompatible with ObjC class initialization, or at least\nnot efficiently compatible, because there is no meaningful class symbol\nthat can be put in a class-ref variable at load time.  This leaves ObjC\ncode unable to access such classes, which is undesirable.\n\nobjc_class_stub says that class references should be resolved by calling\na new ObjC runtime function with a pointer to a new \"class stub\" structure.\nNon-ObjC compilers (like Swift) can simply emit this structure when ObjC\ninterop is required for a class that cannot be statically allocated,\nthen apply this attribute to the `@interface` in the generated ObjC header\nfor the class.\n\nThis attribute can be thought of as a generalization of the existing\n`objc_runtime_visible` attribute which permits more efficient class\nresolution as well as supporting the additon of categories to the class.\nSubclassing these classes from ObjC is currently not allowed.\n\nPatch by Slava Pestov!\n\nllvm-svn: 362054"},
[j]={{"clang/lib/Sema/Sema.cpp",1222,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n // ...\n  if (TUKind == TU_Module) {\n    // If we are building a module interface unit, we need to have seen the\n    // module declaration by now.\n    if (getLangOpts().getCompilingModule() == LangOptions::CMK_ModuleInterface && !isCurrentModulePurview() && !DiagnosedMissingModuleDeclaration) {\n      // ...\n      Diag(getSourceManager().getLocForStartOfFile(getSourceManager().getMainFileID()), diag::err_module_declaration_missing);"}}
[d]={{rb,4171,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    // ...\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      // ...\n      if (IDecl->hasAttr<ObjCClassStubAttr>())\n       Diag(IC->getLocation(), diag::err_implementation_of_class_stub);"}},
},
["err_module_declaration_missing_after_global_module_introducer"]={
[c]={{nil,z,"err_module_declaration_missing_after_global_module_introducer"}},
[d]={{nil,z,"missing \'module\' declaration at end of global module fragment introduced here"}},
[e]={{nil,z,"missing \'module\' declaration at end of global module fragment introduced here"}},
[f]=k,
[g]="missing \'module\' declaration at end of global module fragment introduced here",
[h]=a,
[i]={{nil,z,O}},
[b]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
[j]={{"clang/lib/Sema/Sema.cpp",1209,"/// ActOnEndOfTranslationUnit - This is called at the very end of the\n/// translation unit when EOF is reached and all but the top-level scope is\n/// popped.\nvoid Sema::ActOnEndOfTranslationUnit() {\n  // ...\n  if (!ModuleScopes.empty() && ModuleScopes.back().Module->Kind == Module::ExplicitGlobalModuleFragment) {\n   Diag(ModuleScopes.back().BeginLoc, diag::err_module_declaration_missing_after_global_module_introducer);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:15:1: error: missing \'module\' declaration at end of global module fragment introduced here"}
["clang/test/SemaObjC/class-stub-attr.m"]={"clang/test/SemaObjC/class-stub-attr.m:16:17: error: cannot declare implementation of a class declared with the \'objc_class_stub\' attribute"}
}
}
},
},
["err_module_different_modmap"]={
["err_implicit_coroutine_std_nothrow_type_not_found"]={
[c]="err_module_different_modmap",
[b]={{nil,E,"err_implicit_coroutine_std_nothrow_type_not_found"}},
[d]="module \'%0\' %select{uses|does not use}1 additional module map \'%2\'%select{| not}1 used when the module was built",
[i]={{nil,E,"std::nothrow was not found; include <new> before defining a coroutine which uses get_return_object_on_allocation_failure()"}},
[e]={{nil,nil,{"module \'A\' ",{"uses","does not use"}," additional module map \'C\'",{a," not"}," used when the module was built"}}},
[j]={{nil,E,"std::nothrow was not found; include <new> before defining a coroutine which uses get_return_object_on_allocation_failure()"}},
[f]=k,
[h]=k,
[g]="module \'(.*?)\' (?:uses|does not use) additional module map \'(.*?)\'(?:| not) used when the module was built",
[c]="std\\:\\:nothrow was not found; include \\<new\\> before defining a coroutine which uses get_return_object_on_allocation_failure\\(\\)",
[h]=a,
[f]=a,
[i]=bb,
[e]={{nil,E,qb}},
[b]={"4b8a9e951e09",1407861753,"Verify all the module map files for a pcm are the same on load","Verify all the module map files for a pcm are the same on load\n\nWe already verified the primary module map file (either the one that\ndefines the top-level module, or the one that allows inferring it if it\nis an inferred framework module). Now we also verify any other module\nmap files that define submodules, such as when there is a\nmodule.private.modulemap file.\n\nllvm-svn: 215455"},
[g]={"627a63cf5081",1492334399,"[coroutines] Fix building of new/delete expressions when get_return_object_on_allocation_failure() i...","[coroutines] Fix building of new/delete expressions when get_return_object_on_allocation_failure() is present.\n\nSummary:\nThis patch implements [dcl.fct.def.coroutine]p8:\n> The unqualified-id get_return_object_on_allocation_failure is looked up in the scope of\n> class P by class member access lookup (3.4.5). If a declaration is found, ..., and if a \n> global allocation function is selected, the ::operator new(size_t, nothrow_t) form shall be used.\n> [...]\n> The allocation function used in this case must have a non-throwing noexcept-specification.\n\nReviewers: GorNishanov, rsmith, majnemer, aaron.ballman\n\nReviewed By: GorNishanov\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D31562\n\nllvm-svn: 300420"},
[j]={{Ib,4067,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n // ...\n if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\n   // Check any additional module map files (e.g. module.private.modulemap)\n   // that are not in the pcm.\n   if (auto *AdditionalModuleMaps = Map.getAdditionalModuleMapFiles(M)) {\n     for (const FileEntry *ModMap : *AdditionalModuleMaps) {\n       // Remove files that match\n        // Note: SmallPtrSet::erase is really remove\n        if (!AdditionalStoredMaps.erase(ModMap)) {\n         if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))\n            Diag(diag::err_module_different_modmap) << F.ModuleName << /*new*/ 0 << ModMap->getName();"},{Ib,4078,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\n    // Check any additional module map files that are in the pcm, but not\n    // found in header search. Cases that match are already removed.\n    for (const FileEntry *ModMap : AdditionalStoredMaps) {\n      if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))\n        Diag(diag::err_module_different_modmap) << F.ModuleName << /*not new*/ 1 << ModMap->getName();"}}
[d]={{gb,1020,"/// Look up the std::nothrow object.\nstatic Expr *buildStdNoThrowDeclRef(Sema &S, SourceLocation Loc) {\n  // ...\n  if (!S.LookupQualifiedName(Result, Std)) {\n    // ...\n    S.Diag(Loc, diag::err_implicit_coroutine_std_nothrow_type_not_found);"}}
},
},
["err_module_expected_ident"]={
["err_implicit_empty_initializer"]={
[c]="err_module_expected_ident",
[b]="err_implicit_empty_initializer",
[d]="expected a module name after module%select{| import}0",
[i]="initializer for aggregate with no elements requires explicit braces",
[e]={{nil,r,{"expected a module name after \'",{"module","import"},"\'"}},{nil,nil,{"expected a module name after module",{a," import"}}}},
[j]="initializer for aggregate with no elements requires explicit braces",
[f]=k,
[h]=k,
[g]="expected a module name after \'(?:module|import)\'",
[c]="initializer for aggregate with no elements requires explicit braces",
[h]=a,
[f]=a,
[i]=O,
[e]=m,
[b]={"081425343b18",1314402967,"Introduce support for a simple module import declaration, which","Introduce support for a simple module import declaration, which\nloads the named module. The syntax itself is intentionally hideous and\nwill be replaced at some later point with something more\npalatable. For now, we\'re focusing on the semantics:\n  - Module imports are handled first by the preprocessor (to get macro\n  definitions) and then the same tokens are also handled by the parser\n  (to get declarations). If both happen (as in normal compilation),\n  the second one is redundant, because we currently have no way to\n  hide macros or declarations when loading a module. Chris gets credit\n  for this mad-but-workable scheme.\n  - The Preprocessor now holds on to a reference to a module loader,\n  which is responsible for loading named modules. CompilerInstance is\n  the only important module loader: it now knows how to create and\n  wire up an AST reader on demand to actually perform the module load.\n  - We search for modules in the include path, using the module name\n  with the suffix \".pcm\" (precompiled module) for the file name. This\n  is a temporary hack; we hope to improve the situation in the\n  future.\n\nllvm-svn: 138679"},
[g]={x,1237025389,y,z},
[j]={{Nb,2632,"/// Parse a C++ / Objective-C module name (both forms use the same\n/// grammar).\n///\n///         module-name:\n///          module-name-qualifier[opt] identifier\n///        module-name-qualifier:\n///          module-name-qualifier[opt] identifier \'.\'\nbool Parser::ParseModuleName(SourceLocation UseLoc, SmallVectorImpl<std::pair<IdentifierInfo *, SourceLocation>> &Path, bool IsImport) {\n // Parse the module path.\n  while (true) {\n    if (!Tok.is(tok::identifier)) {\n      // ...\n      Diag(Tok, diag::err_module_expected_ident) << IsImport;"}}
[d]={{H,1111,"/// Check whether the range of the initializer \\p ParentIList from element\n/// \\p Index onwards can be used to initialize an object of type \\p T. Update\n/// \\p Index to indicate how many elements of the list were consumed.\n///\n/// This also fills in \\p StructuredList, from element \\p StructuredIndex\n/// onwards, with the fully-braced, desugared form of the initialization.\nvoid InitListChecker::CheckImplicitInitList(const InitializedEntity &Entity, InitListExpr *ParentIList, QualType T, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  // ...\n  if (maxElements == 0) {\n    if (!VerifyOnly)\n     SemaRef.Diag(ParentIList->getInit(Index)->getBeginLoc(), diag::err_implicit_empty_initializer);"}},
},
["err_module_expected_semi"]={
[c]="err_module_expected_semi",
[d]="expected \';\' after module name",
[e]="expected \';\' after module name",
[f]=k,
[g]="expected \';\' after module name",
[h]=a,
[i]=O,
[b]={"081425343b18",1314402967,"Introduce support for a simple module import declaration, which","Introduce support for a simple module import declaration, which\nloads the named module. The syntax itself is intentionally hideous and\nwill be replaced at some later point with something more\npalatable. For now, we\'re focusing on the semantics:\n  - Module imports are handled first by the preprocessor (to get macro\n  definitions) and then the same tokens are also handled by the parser\n  (to get declarations). If both happen (as in normal compilation),\n  the second one is redundant, because we currently have no way to\n  hide macros or declarations when loading a module. Chris gets credit\n  for this mad-but-workable scheme.\n  - The Preprocessor now holds on to a reference to a module loader,\n  which is responsible for loading named modules. CompilerInstance is\n  the only important module loader: it now knows how to create and\n  wire up an AST reader on demand to actually perform the module load.\n - We search for modules in the include path, using the module name\n  with the suffix \".pcm\" (precompiled module) for the file name. This\n  is a temporary hack; we hope to improve the situation in the\n  future.\n\nllvm-svn: 138679"},
[j]={{Nb,2469,"/// 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  ExpectAndConsumeSemi(diag::err_module_expected_semi);"},{Nb,2584,"/// 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 (SeenError) {\n    ExpectAndConsumeSemi(diag::err_module_expected_semi);"},{Nb,2595,"/// 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  ExpectAndConsumeSemi(diag::err_module_expected_semi);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p3.cpp"]={"clang/test/CXX/basic/basic.link/p3.cpp:32:9: error: expected \';\' after module name"}
["clang/test/Sema/array-init.c"]={"clang/test/Sema/array-init.c:233:40: error: initializer for aggregate with no elements requires explicit braces","clang/test/Sema/array-init.c:237:26: error: initializer for aggregate with no elements requires explicit braces"}
}
}
},
},
["err_module_file_conflict"]={
["err_implicit_instantiate_member_undefined"]={
[c]="err_module_file_conflict",
[b]="err_implicit_instantiate_member_undefined",
[d]="module \'%0\' is defined in both \'%1\' and \'%2\'",
[i]="implicit instantiation of undefined member %0",
[e]="module \'A\' is defined in both \'B\' and \'C\'",
[j]="implicit instantiation of undefined member A",
[f]=V,
[h]=k,
[g]="module \'(.*?)\' is defined in both \'(.*?)\' and \'(.*?)\'",
[c]="implicit instantiation of undefined member (.*?)",
[h]=a,
[f]=a,
[i]=bb,
[e]=m,
[b]={"8a114ab557f0",1360190431,"Detect when we end up trying to load conflicting module files.","Detect when we end up trying to load conflicting module files.\n\nThis can happen when one abuses precompiled headers by passing more -D\noptions when using a precompiled hedaer than when it was built. This\nis intentionally permitted by precompiled headers (and is exploited by\nsome build environments), but causes problems for modules.\n\nFirst part of <rdar://problem/13165109>, detecting when something when\nhorribly wrong.\n\nllvm-svn: 174554"},
[g]={"8ea8fd48f2c7",1238015823,"Instantiation for member classes of class templates. Note that only","Instantiation for member classes of class templates. Note that only\nthe declarations of member classes are instantiated when the owning\nclass template is instantiated. The definitions of such member classes\nare instantiated when a complete type is required.\n\nThis change also introduces the injected-class-name into a class\ntemplate specialization.\n\nllvm-svn: 67707"},
[j]={{Ib,4011,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n   // ...\n   // Don\'t emit module relocation error if we have -fno-validate-pch\n    if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation & DisableValidationForModuleKind::Module) && !ModMap) {\n     if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities)) {\n        if (auto ASTFE = M ? M->getASTFile() : std::nullopt) {\n          // ...\n          Diag(diag::err_module_file_conflict) << F.ModuleName << F.FileName << ASTFE->getName();"},{Ib,5658,"llvm::Error ASTReader::ReadSubmoduleBlock(ModuleFile &F, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case SUBMODULE_DEFINITION: {\n      // ...\n      if (!ParentModule) {\n        if (const FileEntry *CurFile = CurrentModule->getASTFile()) {\n          // Don\'t emit module relocation error if we have -fno-validate-pch\n          if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation & DisableValidationForModuleKind::Module) && CurFile != F.File) {\n            auto ConflictError = PartialDiagnostic(diag::err_module_file_conflict, ContextObj->DiagAllocator) << CurrentModule->getTopLevelModuleName() << CurFile->getName() << F.File->getName();"}},
[d]={{kb,843,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  // ...\n  if (PatternDef) {\n // ...\n } else if (InstantiatedFromMember) {\n   if (isa<FunctionDecl>(Instantiation)) {\n    // ...\n    } else {\n      // ...\n      Diag(PointOfInstantiation, diag::err_implicit_instantiate_member_undefined) << InstantiationTy;"}},
[l]={
[l]={
["clang/test/Modules/explicit-build.cpp"]={"fatal error: module \'a\' is defined in both \'build/tools/clang/test/Modules/Output/explicit-build.cpp.tmp/a.pcm\' and \'/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/build/tools/clang/test/Modules/Output/explicit-build.cpp.tmp/2VHNCOTT5YBWK/a-I2CR4V90YFI2.pcm\'"}
["clang/test/SemaCXX/base-class-ambiguity-check.cpp"]={"clang/test/SemaCXX/base-class-ambiguity-check.cpp:15:20: error: implicit instantiation of undefined member \'Foo2<int>::Base1\'","clang/test/SemaCXX/base-class-ambiguity-check.cpp:15:27: error: implicit instantiation of undefined member \'Foo2<int>::Base2\'"}
}
}
},
},
["err_module_file_missing_top_level_submodule"]={
["err_implied_comparison_category_type_not_found"]={
[c]={{nil,n,"err_module_file_missing_top_level_submodule"}},
[b]={{nil,A,"err_implied_comparison_category_type_not_found"}},
[d]={{nil,n,"module file \'%0\' is missing its top-level submodule"}},
[i]={{nil,F,"cannot %select{use builtin operator \'<=>\'|default \'operator<=>\'}1 because type \'%0\' was not found; include <compare>"},{r,A,"cannot deduce return type of \'operator<=>\' because type \'%0\' was not found; include <compare>"}},
[e]={{nil,n,"module file \'A\' is missing its top-level submodule"}},
[j]={{nil,F,{"cannot ",{"use builtin operator \'<=>\'","default \'operator<=>\'"}," because type \'A\' was not found; include <compare>"}},{r,A,"cannot deduce return type of \'operator<=>\' because type \'A\' was not found; include <compare>"}},
[f]=V,
[h]=k,
[g]="module file \'(.*?)\' is missing its top\\-level submodule",
[c]="cannot (?:use builtin operator \'\\<\\=\\>\'|default \'operator\\<\\=\\>\') because type \'(.*?)\' was not found; include \\<compare\\>",
[h]=a,
[f]=a,
[i]={{nil,n,bb}},
[e]={{nil,A,v}},
[b]={"83dcb34b6bf4",1573420492,"clang/Modules: Error if ReadASTBlock does not find the main module","clang/Modules: Error if ReadASTBlock does not find the main module\n\nIf ReadASTBlock does not find its top-level submodule, there\'s something\nwrong the with the PCM.  Error in that case, to avoid hitting problems\nfurther from the source.\n\nNote that the Swift compiler sometimes hits a case in\nCompilerInstance::loadModule where the top-level submodule mysteriously\ndoes not have Module::IsFromModuleFile set.  That will emit a confusing\nwarn_missing_submodule, which was never intended for the main module.\nThe recent audit of error-handling in ReadAST may have rooted out the\nreal problem.  If not, this commit will help to clarify the real\nproblem, and replace a confusing warning with an error pointing at the\nmalformed PCM file.\n\nWe\'re specifically sniffing out whether the top-level submodule was\nfound/processed, in case there is a malformed module file that is\nmissing it.  If there is an error encountered during ReadSubmoduleBlock\nthe return status should already propagate through.  It would be nice to\ndetect other missing submodules around here to catch other instances of\nwarn_missing_submodule closer to the source, but that\'s left as a future\nexercise.\n\nhttps://reviews.llvm.org/D70063"},
[g]={"0683c0e68d31",1525727230,"[C++2a] Implement operator<=> CodeGen and ExprConstant","[C++2a] Implement operator<=> CodeGen and ExprConstant\n\nSummary:\nThis patch tackles long hanging fruit for the builtin operator<=> expressions. It is currently needs some cleanup before landing, but I want to get some initial feedback.\n\nThe main changes are:\n\n* Lookup, build, and store the required standard library types and expressions in `ASTContext`. By storing them in ASTContext we don\'t need to store (and duplicate) the required expressions in the BinaryOperator AST nodes. \n\n* Implement [expr.spaceship] checking, including diagnosing narrowing conversions. \n\n* Implement `ExprConstant` for builtin spaceship operators.\n\n* Implement builitin operator<=> support in `CodeGenAgg`. Initially I emitted the required comparisons using `ScalarExprEmitter::VisitBinaryOperator`, but this caused the operand expressions to be emitted once for every required cmp.\n\n* Implement [builtin.over] with modifications to support the intent of P0946R0. See the note on `BuiltinOperatorOverloadBuilder::addThreeWayArithmeticOverloads` for more information about the workaround.\n\n\n\n\nReviewers: rsmith, aaron.ballman, majnemer, rnk, compnerd, rjmccall\n\nReviewed By: rjmccall\n\nSubscribers: rjmccall, rsmith, aaron.ballman, junbuml, mgorny, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D45476\n\nllvm-svn: 331677"},
[j]={{Ib,4342,"ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, unsigned ClientLoadCapabilities, SmallVectorImpl<ImportedSubmodule> *Imported) {\n  // ...\n  // Load the AST blocks of all of the modules that we loaded. We can still\n  // hit errors parsing the ASTs at this point.\n  for (ImportedModule &M : Loaded) {\n    // ...\n    // The AST block should always have a definition for the main module.\n    if (F.isModule() && !F.DidReadTopLevelSubmodule) {\n      Error(diag::err_module_file_missing_top_level_submodule, F.FileName);"}}
[d]={{t,11637,"QualType Sema::CheckComparisonCategoryType(ComparisonCategoryType Kind, SourceLocation Loc, ComparisonCategoryUsage Usage) {\n  // ...\n  // If lookup failed\n  if (!Info) {\n    // ...\n    Diag(Loc, diag::err_implied_comparison_category_type_not_found) << NameForDiags << (int)Usage;"}},
},
["err_module_file_not_module"]={
[c]="err_module_file_not_module",
[d]="AST file \'%0\' was not built as a module",
[e]="AST file \'A\' was not built as a module",
[f]=V,
[g]="AST file \'(.*?)\' was not built as a module",
[h]=a,
[i]=bb,
[b]={"e842a4745222",1413943546,"[modules] Initial support for explicitly loading .pcm files.","[modules] Initial support for explicitly loading .pcm files.\n\nImplicit module builds are not well-suited to a lot of build systems. In\nparticular, they fare badly in distributed build systems, and they lead to\nbuild artifacts that are not tracked as part of the usual dependency management\nprocess. This change allows explicitly-built module files (which are already\nsupported through the -emit-module flag) to be explicitly loaded into a build,\nallowing build systems to opt to manage module builds and dependencies\nthemselves.\n\nThis is only the first step in supporting such configurations, and it should\nbe considered experimental and subject to change or removal for now.\n\nllvm-svn: 220359"},
[j]={{Ib,4684,"ASTReader::ASTReadResult ASTReader::ReadASTCore(StringRef FileName, ModuleKind Type, SourceLocation ImportLoc, ModuleFile *ImportedBy, SmallVectorImpl<ImportedModule> &Loaded, off_t ExpectedSize, time_t ExpectedModTime, ASTFileSignature ExpectedSignature, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case CONTROL_BLOCK_ID:\n      // ...\n      case Success:\n        // Check that we didn\'t try to load a non-module AST file as a module.\n        //\n        // FIXME: Should we also perform the converse check? Loading a module as\n        // a PCH file sort of works, but it\'s a bit wonky.\n        if ((Type == MK_ImplicitModule || Type == MK_ExplicitModule || Type == MK_PrebuiltModule) && F.ModuleName.empty()) {\n          // ...\n          if (Result != OutOfDate || (ClientLoadCapabilities & ARR_OutOfDate) == 0)\n            Diag(diag::err_module_file_not_module) << FileName;"}}
},
["err_module_format_unhandled"]={
[c]="err_module_format_unhandled",
[d]="no handler registered for module format \'%0\'",
[e]="no handler registered for module format \'A\'",
[f]=V,
[g]="no handler registered for module format \'(.*?)\'",
[h]=a,
[i]=w,
[b]={"fb2398d0c434",1437095994,"Make the clang module container format selectable from the command line.","Make the clang module container format selectable from the command line.\n- introduces a new cc1 option -fmodule-format=[raw,obj]\n  with \'raw\' being the default\n- supports arbitrary module container formats that libclang is agnostic to\n- adds the format to the module hash to avoid collisions\n- splits the old PCHContainerOperations into PCHContainerWriter and\n  a PCHContainerReader.\n\nThanks to Richard Smith for reviewing this patch!\n\nllvm-svn: 242499"}
},
["err_module_fragment_exported"]={
[c]={{nil,z,"err_module_fragment_exported"}},
[d]={{nil,z,"%select{global|private}0 module fragment cannot be exported"}},
[e]={{nil,z,{{"global","private"}," module fragment cannot be exported"}}},
[f]=k,
[g]="(?:global|private) module fragment cannot be exported",
[h]=a,
[i]={{nil,z,O}},
[b]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
[j]={{Nb,2421,"/// 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 // Parse a global-module-fragment, if present.\n if (getLangOpts().CPlusPlusModules && Tok.is(tok::semi)) {\n   // ...\n    if (MDK == Sema::ModuleDeclKind::Interface) {\n      Diag(StartLoc, diag::err_module_fragment_exported) << /*global*/ 0 << FixItHint::CreateRemoval(StartLoc);"},{Nb,2432,"/// 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  // Parse a private-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::colon) && NextToken().is(tok::kw_private)) {\n    if (MDK == Sema::ModuleDeclKind::Interface) {\n      Diag(StartLoc, diag::err_module_fragment_exported) << /*private*/ 1 << FixItHint::CreateRemoval(StartLoc);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:13:1: error: global module fragment cannot be exported","clang/test/CXX/basic/basic.link/p1.cpp:41:1: error: private module fragment cannot be exported"}
["clang/test/SemaCXX/std-compare-cxx2a.cpp"]={"clang/test/SemaCXX/std-compare-cxx2a.cpp:9:14: error: cannot use builtin operator \'<=>\' because type \'std::partial_ordering\' was not found; include <compare>","clang/test/SemaCXX/std-compare-cxx2a.cpp:14:10: error: cannot default \'operator<=>\' because type \'std::strong_ordering\' was not found; include <compare>","clang/test/SemaCXX/std-compare-cxx2a.cpp:22:102: error: cannot default \'operator<=>\' because type \'std::strong_ordering\' was not found; include <compare>"}
}
}
},
},
["err_module_header_file_not_found"]={
["err_implied_coroutine_type_not_found"]={
[c]={{nil,db,"err_module_header_file_not_found"}},
[b]={{nil,E,"err_implied_coroutine_type_not_found"}},
[d]={{nil,db,"module header file \'%0\' not found"}},
[i]="%0 type was not found; include <coroutine> before defining a coroutine",
[e]={{nil,db,"module header file \'A\' not found"}},
[j]="A type was not found; include <coroutine> before defining a coroutine",
[f]=V,
[h]=k,
[g]="module header file \'(.*?)\' not found",
[c]="(.*?) type was not found; include \\<coroutine\\> before defining a coroutine",
[h]=a,
[f]=a,
[i]={{nil,db,w}},
[e]={{nil,E,qb}},
[b]={"d6509cf21dd0",1536974475,"[modules] Frontend support for building a header module from a list of","[modules] Frontend support for building a header module from a list of\nheadaer files.\n\nllvm-svn: 342304"},
[g]={"6dcb0eb301c7",1489028983,"[coroutines] Build and pass coroutine_handle to await_suspend","[coroutines] Build and pass coroutine_handle to await_suspend\n\nSummary:\nThis patch adds passing a coroutine_handle object to await_suspend calls.\nIt builds the coroutine_handle using coroutine_handle<PromiseType>::from_address(__builtin_coro_frame()).\n\n(a revision of https://reviews.llvm.org/D26316 that for some reason refuses to apply via arc patch)\n\nReviewers: GorNishanov\n\nSubscribers: mehdi_amini, cfe-commits, EricWF\n\nDifferential Revision: https://reviews.llvm.org/D30769\n\nllvm-svn: 297356"},
[j]={{Pb,838,"bool FrontendAction::BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &RealInput) {\n  // ...\n  // Handle C++20 header units.\n  // Here, the user has the option to specify that the header name should be\n  // looked up in the pre-processor search paths (and the main filename as\n  // passed by the driver might therefore be incomplete until that look-up).\n  if (CI.getLangOpts().CPlusPlusModules && Input.getKind().isHeaderUnit() && !Input.getKind().isPreprocessed()) {\n   // ...\n   if (Kind.getHeaderUnitKind() != InputKind::HeaderUnit_Abs) {\n      // ...\n      if (!FE) {\n       CI.getDiagnostics().Report(diag::err_module_header_file_not_found) << FileName;"}}
[d]={{gb,150,"/// Look up the std::coroutine_handle<PromiseType>.\nstatic QualType lookupCoroutineHandleType(Sema &S, QualType PromiseType, SourceLocation Loc) {\n  // ...\n  if (!S.LookupQualifiedName(Result, CoroNamespace)) {\n    S.Diag(Loc, diag::err_implied_coroutine_type_not_found) << \"std::coroutine_handle\";"},{gb,1938,"ClassTemplateDecl *Sema::lookupCoroutineTraits(SourceLocation KwLoc, SourceLocation FuncLoc) {\n  // ...\n  if (!Found) {\n    // ...\n    Diag(KwLoc, diag::err_implied_coroutine_type_not_found) << \"std::coroutine_traits\";"}},
},
["err_module_header_missing"]={
[c]="err_module_header_missing",
[d]="%select{|umbrella }0header \'%1\' not found",
[e]={{nil,nil,{{a,"umbrella "},"header \'B\' not found"}}},
[f]=k,
[g]="(?:|umbrella )header \'(.*?)\' not found",
[h]=a,
[i]=y,
[b]={"0761a8a085f4",1387276297,"Modules: Don\'t warn upon missing headers while reading the module map.","Modules: Don\'t warn upon missing headers while reading the module map.\n\nInstead, mark the module as unavailable so that clang errors as soon as\nsomeone tries to build this module.\n\nThis works towards the long-term goal of not stat\'ing the header files at all\nwhile reading the module map and instead read them only when the module is\nbeing built (there is a corresponding FIXME in parseHeaderDecl()).  However, it\nseems non-trivial to get there and this unblock us and moves us into the right\ndirection.\n\nAlso changed the implementation to reuse the same DiagnosticsEngine.\n\nllvm-svn: 197485"},
[j]={{Pb,350,"/// Collect the set of header includes needed to construct the given\n/// module and update the TopHeaders file set of the module.\n///\n/// \\param Module The module we\'re collecting includes from.\n///\n/// \\param Includes Will be augmented with the set of \\#includes or \\#imports\n/// needed to load all of the named headers.\nstatic std::error_code collectModuleHeaderIncludes(const LangOptions &LangOpts, FileManager &FileMgr, DiagnosticsEngine &Diag, ModuleMap &ModMap, clang::Module *Module, SmallVectorImpl<char> &Includes) {\n  // ...\n  // If any headers are missing, we can\'t build this module. In most cases,\n  // diagnostics for this should have already been produced; we only get here\n  // if explicit stat information was provided.\n  // FIXME: If the name resolves to a file with different stat information,\n  // produce a better diagnostic.\n  if (!Module->MissingHeaders.empty()) {\n    // ...\n    Diag.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing) << MissingHeader.IsUmbrella << MissingHeader.FileName;"},{"clang/lib/Lex/PPDirectives.cpp",1907,"bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M) {\n  // ...\n  if (MissingHeader.FileNameLoc.isValid()) {\n    Diags.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing) << MissingHeader.IsUmbrella << MissingHeader.FileName;"}},
[l]={
[l]={
["clang/test/Modules/dependency-gen.modulemap"]={"clang/test/Modules/dependency-gen.modulemap:12:10: error: header \'Inputs/dependency-gen.h\' not found"}
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:8:3: error: std::coroutine_traits type was not found; include <coroutine> before defining a coroutine","clang/test/SemaCXX/coroutines.cpp:13:3: error: std::coroutine_traits type was not found; include <coroutine> before defining a coroutine","clang/test/SemaCXX/coroutines.cpp:19:3: error: std::coroutine_traits type was not found; include <coroutine> before defining a coroutine","clang/test/SemaCXX/coroutines.cpp:24:3: error: std::coroutine_traits type was not found; include <coroutine> before defining a coroutine","clang/test/SemaCXX/coroutines.cpp:148:6: error: std::coroutine_handle type was not found; include <coroutine> before defining a coroutine"}
}
}
},
},
["err_module_import_in_implementation"]={
["err_implied_std_coroutine_traits_promise_type_not_class"]={
[c]="err_module_import_in_implementation",
[b]="err_implied_std_coroutine_traits_promise_type_not_class",
[d]="@import of module \'%0\' in implementation of \'%1\'; use #import",
[i]="this function cannot be a coroutine: %0 is not a class",
[e]="@import of module \'A\' in implementation of \'B\'; use #import",
[j]="this function cannot be a coroutine: A is not a class",
[f]=k,
[h]=k,
[g]="@import of module \'(.*?)\' in implementation of \'(.*?)\'; use \\#import",
[c]="this function cannot be a coroutine\\: (.*?) is not a class",
[h]=a,
[f]=a,
[i]=O,
[e]=qb,
[b]={"b537a3a65180",1406129423,"Add stopgap option -fmodule-implementation-of <name>","Add stopgap option -fmodule-implementation-of <name>\n\nThis flag specifies that we are building an implementation file of the\nmodule <name>, preventing importing <name> as a module. This does not\nconsider this to be the \'current module\' for the purposes of doing\nmodular checks like decluse or non-modular-include warnings, unlike\n-fmodule-name.\n\nThis is needed as a stopgap until:\n1) we can resolve relative includes to a VFS-mapped module (or can\n  safely import a header textually and as part of a module)\n\nand ideally\n2) we can safely do incremental rebuilding when implementation files\n  import submodules.\n\nllvm-svn: 213767"},
[g]={"9f690bd80bb6",1445925765,"[coroutines] Creation of promise object, lookup of operator co_await, building","[coroutines] Creation of promise object, lookup of operator co_await, building\nof await_* calls, and AST representation for same.\n\nllvm-svn: 251387"},
[j]={{nb,564,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, Module *Mod, ModuleIdPath Path) {\n  // ...\n // FIXME: we should support importing a submodule within a different submodule\n  // of the same top-level module. Until we do, make it an error rather than\n  // silently ignoring the import.\n  // FIXME: Should we warn on a redundant import of the current module?\n  if (Mod->isForBuilding(getLangOpts())) {\n    Diag(ImportLoc, getLangOpts().isCompilingModule() ? diag::err_module_self_import : diag::err_module_import_in_implementation) << Mod->getFullModuleName() << getLangOpts().CurrentModule;"}},
[d]={{gb,127,"/// Look up the std::coroutine_traits<...>::promise_type for the given\n/// function type.\nstatic QualType lookupPromiseType(Sema &S, const FunctionDecl *FD, SourceLocation KwLoc) {\n  // ...\n  if (!PromiseType->getAsCXXRecordDecl()) {\n    S.Diag(FuncLoc, diag::err_implied_std_coroutine_traits_promise_type_not_class) << buildElaboratedType();"}},
[l]={
[l]={
["clang/test/Modules/implementation-of-module.m"]={"clang/test/Modules/implementation-of-module.m:19:2: error: @import of module \'category_left\' in implementation of \'category_left\'; use #import","clang/test/Modules/implementation-of-module.m:20:2: error: @import of module \'category_left.sub\' in implementation of \'category_left\'; use #import"}
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:100:8: error: this function cannot be a coroutine: \'std::coroutine_traits<double, double>::promise_type\' (aka \'int\') is not a class"}
}
}
},
},
["err_module_import_not_at_top_level_fatal"]={
["err_implied_std_coroutine_traits_promise_type_not_found"]={
[c]="err_module_import_not_at_top_level_fatal",
[b]="err_implied_std_coroutine_traits_promise_type_not_found",
[d]="import of module \'%0\' appears within %1",
[i]="this function cannot be a coroutine: %q0 has no member named \'promise_type\'",
[e]="import of module \'A\' appears within B",
[j]="this function cannot be a coroutine: A has no member named \'promise_type\'",
[f]=V,
[h]=k,
[g]="import of module \'(.*?)\' appears within (.*?)",
[c]="this function cannot be a coroutine\\: (.*?) has no member named \'promise_type\'",
[h]=a,
[f]=a,
[i]=O,
[e]=qb,
[b]={"c4e04a296403",1442640777,"[Modules] More descriptive diagnostics for misplaced import directive","[Modules] More descriptive diagnostics for misplaced import directive\n\nIf an import directive was put into wrong context, the error message was obscure,\ncomplaining on misbalanced braces. To get more descriptive messages, annotation\ntokens related to modules are processed where they must not be seen.\n\nDifferential Revision: http://reviews.llvm.org/D11844\n\nllvm-svn: 248085"},
[g]={"9f690bd80bb6",1445925765,"[coroutines] Creation of promise object, lookup of operator co_await, building","[coroutines] Creation of promise object, lookup of operator co_await, building\nof await_* calls, and AST representation for same.\n\nllvm-svn: 251387"},
[j]={{nb,48,"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;"}},
[d]={{gb,111,"/// Look up the std::coroutine_traits<...>::promise_type for the given\n/// function type.\nstatic QualType lookupPromiseType(Sema &S, const FunctionDecl *FD, SourceLocation KwLoc) {\n  // ...\n  if (!Promise) {\n    S.Diag(FuncLoc, diag::err_implied_std_coroutine_traits_promise_type_not_found) << RD;"}},
[l]={
[l]={
["clang/test/Modules/misplaced-3.cpp"]={"clang/test/Modules/misplaced-3.cpp:5:1: fatal error: import of module \'dummy\' appears within \'C1\'"}
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:82:14: error: this function cannot be a coroutine: \'std::coroutine_traits<DummyVoidTag>\' has no member named \'promise_type\'","clang/test/SemaCXX/coroutines.cpp:89:5: error: this function cannot be a coroutine: \'std::coroutine_traits<int>\' has no member named \'promise_type\'","clang/test/SemaCXX/coroutines.cpp:93:5: error: this function cannot be a coroutine: \'std::coroutine_traits<int, int>\' has no member named \'promise_type\'","clang/test/SemaCXX/coroutines.cpp:1207:20: error: this function cannot be a coroutine: \'std::coroutine_traits<CoroHandleMemberFunctionTest::BadCoroMemberTag, CoroHandleMemberFunctionTest::TestType &>\' has no member named \'promise_type\'","clang/test/SemaCXX/coroutines.cpp:1211:20: error: this function cannot be a coroutine: \'std::coroutine_traits<CoroHandleMemberFunctionTest::BadCoroMemberTag, const CoroHandleMemberFunctionTest::TestType &&, int>\' has no member named \'promise_type\'","clang/test/SemaCXX/coroutines.cpp:1216:27: error: this function cannot be a coroutine: \'std::coroutine_traits<CoroHandleMemberFunctionTest::BadCoroMemberTag, long *>\' has no member named \'promise_type\'"}
}
}
},
},
["err_module_interface_implementation_mismatch"]={
["err_implied_std_initializer_list_not_found"]={
[c]="err_module_interface_implementation_mismatch",
[b]="err_implied_std_initializer_list_not_found",
[d]="%select{\'module\'|\'module partition\'|\'module implementation\'}0 declaration found while %select{not |not |}0building module interface",
[i]="cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>",
[e]={{nil,r,"missing \'export\' specifier in module declaration while building module interface"},{nil,nil,{{"\'module\'","\'module partition\'","\'module implementation\'"}," declaration found while ",{"not ","not ",a},"building module interface"}}},
[j]="cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>",
[f]=k,
[h]=k,
[g]="missing \'export\' specifier in module declaration while building module interface",
[c]="cannot deduce type of initializer list because std\\:\\:initializer_list was not found; include \\<initializer_list\\>",
[h]=a,
[f]=a,
[i]=O,
[e]=m,
[b]={"964cc53d9a74",1471570986,"C++ Modules TS: support parsing the \'module\' declaration (including extensions","C++ Modules TS: support parsing the \'module\' declaration (including extensions\nfrom p0273r0 approved by EWG). We\'ll eventually need to handle this from the\nlexer as well, in order to disallow preprocessor directives preceding the\nmodule declaration and to support macro import.\n\nllvm-svn: 279196"},
[g]={"42acd4a05b52",1326840608,"Auto deduction support for std::initializer_list, including for-range support. This means you can no...","Auto deduction support for std::initializer_list, including for-range support. This means you can now write:\n\nfor (int i : {1, 4, 512, 23, 251}) {}\n\nllvm-svn: 148353"},
[j]={{nb,215,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case LangOptions::CMK_ModuleInterface:\n    // ...\n    Diag(ModuleLoc, diag::err_module_interface_implementation_mismatch) << FixItHint::CreateInsertion(ModuleLoc, \"export \");"}}
[d]={{t,11794,"static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc) {\n  // ...\n  if (!Std) {\n    S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);"},{t,11801,"static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc) {\n  // ...\n  if (!S.LookupQualifiedName(Result, Std)) {\n    S.Diag(Loc, diag::err_implied_std_initializer_list_not_found);"}},
},
["err_module_interface_requires_cpp_modules"]={
[c]={{nil,z,"err_module_interface_requires_cpp_modules"}},
[d]="module interface compilation requires \'-std=c++20\'",
[e]="module interface compilation requires \'-std=c++20\'",
[f]=k,
[g]="module interface compilation requires \'\\-std\\=c\\+\\+20\'",
[h]=a,
[i]={{nil,z,w}},
[b]={"b1b580e047ad",1555240297,"[c++20] Enable driver and frontend support for building and using","[c++20] Enable driver and frontend support for building and using\nmodules when -std=c++2a is specified.\n\nllvm-svn: 358355"},
[j]={{"clang/lib/Frontend/FrontendActions.cpp",268,"bool GenerateHeaderUnitAction::BeginSourceFileAction(CompilerInstance &CI) {\n if (!CI.getLangOpts().CPlusPlusModules) {\n    CI.getDiagnostics().Report(diag::err_module_interface_requires_cpp_modules);"}}
},
["err_module_map_not_found"]={
[c]="err_module_map_not_found",
[d]="module map file \'%0\' not found",
[e]="module map file \'A\' not found",
[f]=V,
[g]="module map file \'(.*?)\' not found",
[h]=a,
[i]=w,
[b]={"2b20cb87f5b6",1321402146,"Add support for building a module from a module map to the -cc1","Add support for building a module from a module map to the -cc1\ninterface. This is currently limited to modules with umbrella\nheaders.\n\nllvm-svn: 144736"},
[j]={{Pb,527,"static Module *prepareToBuildModule(CompilerInstance &CI, StringRef ModuleMapFilename) {\n  // ...\n  if (!OriginalModuleMapName.empty()) {\n    // ...\n    if (!OriginalModuleMap) {\n      CI.getDiagnostics().Report(diag::err_module_map_not_found) << OriginalModuleMapName;"},{Pb,919,"bool FrontendAction::BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &RealInput) {\n  // ...\n  // If we were asked to load any module map files, do so now.\n  for (const auto &Filename : CI.getFrontendOpts().ModuleMapFiles) {\n    if (auto File = CI.getFileManager().getOptionalFileRef(Filename))\n    // ...\n    else\n      CI.getDiagnostics().Report(diag::err_module_map_not_found) << Filename;"}},
[l]={
[l]={
["clang/test/Modules/module_map_cwd.c"]={"fatal error: module map file \'map\' not found"}
["clang/test/Parser/objcxx0x-lambda-expressions.mm"]={"clang/test/Parser/objcxx0x-lambda-expressions.mm:26:12: error: cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>","clang/test/Parser/objcxx0x-lambda-expressions.mm:39:12: error: cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>","clang/test/Parser/objcxx0x-lambda-expressions.mm:41:12: error: cannot deduce type of initializer list because std::initializer_list was not found; include <initializer_list>"}
}
}
},
},
["err_module_no_size_mtime_for_header"]={
["err_import_in_wrong_fragment"]={
[c]={{nil,r,"err_module_no_size_mtime_for_header"}},
[b]={{nil,s,"err_import_in_wrong_fragment"}},
[d]={{nil,r,"cannot emit module %0: %select{size|mtime}1 must be explicitly specified for missing header file \"%2\""}},
[i]={{nil,s,"module%select{| partition}0 imports cannot be in the %select{global|private}1 module fragment"}},
[e]={{nil,r,{"cannot emit module A: ",{"size","mtime"}," must be explicitly specified for missing header file \"C\""}}},
[j]={{nil,s,{"module",{a," partition"}," imports cannot be in the ",{"global","private"}," module fragment"}}},
[f]=k,
[h]=k,
[g]="cannot emit module (.*?)\\: (?:size|mtime) must be explicitly specified for missing header file \"(.*?)\"",
[c]="module(?:| partition) imports cannot be in the (?:global|private) module fragment",
[h]=a,
[f]=a,
[i]={{nil,r,"AST Serialization Issue"}},
[e]={{nil,s,ac}},
[b]={"040e12662a67",1496368539,"Support lazy stat\'ing of files referenced by module maps.","Support lazy stat\'ing of files referenced by module maps.\n\nThis patch adds support for a `header` declaration in a module map to specify\ncertain `stat` information (currently, size and mtime) about that header file.\nThis has two purposes:\n\n- It removes the need to eagerly `stat` every file referenced by a module map.\n Instead, we track a list of unresolved header files with each size / mtime\(actually, for simplicity, we track submodules with such headers), and when\n attempting to look up a header file based on a `FileEntry`, we check if there\n are any unresolved header directives with that `FileEntry`\'s size / mtime and\n  perform deferred `stat`s if so.\n\n- It permits a preprocessed module to be compiled without the original files\n  being present on disk. The only reason we used to need those files was to get\n  the `stat` information in order to do header -> module lookups when using the\n  module. If we\'re provided with the `stat` information in the preprocessed\n module, we can avoid requiring the files to exist.\n\nUnlike most `header` directives, if a `header` directive with `stat`\ninformation has no corresponding on-disk file the enclosing module is *not*\nmarked unavailable (so that behavior is consistent regardless of whether we\'ve\nresolved a header directive, and so that preprocessed modules don\'t get marked\nunavailable). We could actually do this for all `header` directives: the only\nreason we mark the module unavailable if headers are missing is to give a\ndiagnostic slightly earlier (rather than waiting until we actually try to build\nthe module / load and validate its .pcm file).\n\nDifferential Revision: https://reviews.llvm.org/D33703\n\nllvm-svn: 304515"},
[g]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions.\n\nThis implements the parsing and recognition of module partition CMIs\nand removes the FIXMEs in the parser.\n\nModule partitions are recognised in the base computation of visibility,\nhowever additional amendments to visibility follow in subsequent patches.\n\nDifferential Revision: https://reviews.llvm.org/D118586"},
[j]={{"clang/lib/Serialization/ASTWriter.cpp",1906,"/// Write the header search block for the list of files that\n///\n/// \\param HS The header search structure to save.\nvoid ASTWriter::WriteHeaderSearch(const HeaderSearch &HS) {\n  // ...\n  if (WritingModule) {\n    // ...\n    while (!Worklist.empty()) {\n     // ...\n     // If the file didn\'t exist, we can still create a module if we were given\n     // enough information in the module map.\n      for (const auto &U : M->MissingHeaders) {\n       // Check that we were given enough information to build a module\n        // without this file existing on disk.\n       if (!U.Size || (!U.ModTime && IncludeTimestamps)) {\n         PP->Diag(U.FileNameLoc, diag::err_module_no_size_mtime_for_header) << WritingModule->getFullModuleName() << U.Size.has_value() << U.FileName;"}}
[d]={{cb,2569,"/// 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  case Sema::ModuleImportState::GlobalFragment:\n  case Sema::ModuleImportState::PrivateFragmentImportAllowed:\n    // We can only have pre-processor directives in the global module fragment\n    // which allows pp-import, but not of a partition (since the global module\n   // does not have partitions).\n   // We cannot import a partition into a private module fragment, since\n   // [module.private.frag]/1 disallows private module fragments in a multi-\n   // TU module.\n   if (IsPartition || (HeaderUnit && HeaderUnit->Kind != Module::ModuleKind::ModuleHeaderUnit))\n     Diag(ImportLoc, diag::err_import_in_wrong_fragment) << IsPartition << (ImportState == Sema::ModuleImportState::GlobalFragment ? 0 : 1);"}}
},
},
["err_module_not_built"]={
["err_import_not_allowed_here"]={
[c]="err_module_not_built",
[b]={{nil,s,"err_import_not_allowed_here"}},
[d]="could not build module \'%0\'",
[i]={{nil,s,"imports must immediately follow the module declaration"}},
[e]="could not build module \'A\'",
[j]={{nil,s,"imports must immediately follow the module declaration"}},
[f]=V,
[h]=k,
[g]="could not build module \'(.*?)\'",
[c]="imports must immediately follow the module declaration",
[h]=a,
[f]=a,
[i]=y,
[e]={{nil,s,ac}},
[b]={"faeb1d465862",1315870284,"When an import statement fails to find a module in the module cache,","When an import statement fails to find a module in the module cache,\nbut there is a corresponding umbrella header in a framework, build the\nmodule on-the-fly so it can be immediately loaded at the import\nstatement. This is very much proof-of-concept code, with details to be\nfleshed out over time.\n\nllvm-svn: 139558"},
[g]={"69350e569dc4",1612659633,"[C++20][Modules][3/8] Initial handling for module partitions.","[C++20][Modules][3/8] Initial handling for module partitions.\n\nThis implements the parsing and recognition of module partition CMIs\nand removes the FIXMEs in the parser.\n\nModule partitions are recognised in the base computation of visibility,\nhowever additional amendments to visibility follow in subsequent patches.\n\nDifferential Revision: https://reviews.llvm.org/D118586"},
[j]={{wb,1402,"/// Read the AST right after compiling the module.\nstatic bool readASTAfterCompileModule(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName, bool *OutOfDate) {\n // ...\n  // The ASTReader didn\'t diagnose the error, so conservatively report it.\n if (ReadResult == ASTReader::Missing || !Diags.hasErrorOccurred())\n   Diags.Report(ModuleNameLoc, diag::err_module_not_built) << Module->Name << SourceRange(ImportLoc, ModuleNameLoc);"},{wb,1418,"/// Compile a module in a separate compiler instance and read the AST,\n/// returning true if the module compiles without errors.\nstatic bool compileModuleAndReadASTImpl(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, Module *Module, StringRef ModuleFileName) {\n if (!compileModule(ImportingInstance, ModuleNameLoc, Module, ModuleFileName)) {\n   ImportingInstance.getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_built) << Module->Name << SourceRange(ImportLoc, ModuleNameLoc);"},{wb,1947,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  // Check whether we have already attempted to build this module (but\n  // failed).\n if (getPreprocessorOpts().FailedModules && getPreprocessorOpts().FailedModules->hasAlreadyFailed(ModuleName)) {\n   getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_built) << ModuleName << SourceRange(ImportLoc, ModuleNameLoc);"}},
[d]={{cb,2578,"/// 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  case Sema::ModuleImportState::ImportFinished:\n  case Sema::ModuleImportState::PrivateFragmentImportFinished:\n   if (getLangOpts().CPlusPlusModules)\n     Diag(ImportLoc, diag::err_import_not_allowed_here);"}},
[l]={
[l]={
["clang/test/Modules/import-textual-noguard.mm"]={"clang/test/Modules/import-textual-noguard.mm:4:10: fatal error: could not build module \'M\'"}
["clang/test/SemaCXX/modules.cppm"]={"clang/test/SemaCXX/modules.cppm:34:1: error: imports must immediately follow the module declaration"}
}
}
},
},
["err_module_not_defined"]={
["err_imported_module_modmap_changed"]={
[c]={{nil,t,"err_module_not_defined"}},
[b]="err_imported_module_modmap_changed",
[d]={{nil,t,"definition of module \'%0\' is not available; use -fmodule-file= to specify path to precompiled module interface"}},
[i]={{nil,F,"module \'%0\' %select{in|imported by}4 AST file \'%1\' found in a different module map file (%2) than when the importing AST file was built (%3)"},{r,nil,"module \'%0\' imported by AST file \'%1\' found in a different module map file (%2) than when the importing AST file was built (%3)"}},
[e]={{nil,t,"definition of module \'A\' is not available; use -fmodule-file= to specify path to precompiled module interface"}},
[j]={{nil,F,{"module \'A\' ",{"in","imported by"}," AST file \'B\' found in a different module map file (C) than when the importing AST file was built (D)"}},{r,nil,"module \'A\' imported by AST file \'B\' found in a different module map file (C) than when the importing AST file was built (D)"}},
[f]=k,
[h]=tb,
[g]="definition of module \'(.*?)\' is not available; use \\-fmodule\\-file\\= to specify path to precompiled module interface",
[c]="module \'(.*?)\' (?:in|imported by) AST file \'(.*?)\' found in a different module map file \\((.*?)\\) than when the importing AST file was built \\((.*?)\\)",
[h]=a,
[f]=a,
[i]={{nil,t,O}},
[e]="AST Deserialization Issue",
[b]={"d97d35e1500d",1507674927,"[Modules TS] Diagnose attempts to enter module implementation units without the module interface bei...","[Modules TS] Diagnose attempts to enter module implementation units without the module interface being available.\n\nllvm-svn: 315381"},
[g]={"beee15e721f6",1397498401,"Allow multiple modules with the same name to coexist in the module cache","Allow multiple modules with the same name to coexist in the module cache\n\nTo differentiate between two modules with the same name, we will\nconsider the path the module map file that they are defined by* part of\nthe ‘key’ for looking up the precompiled module (pcm file).\nSpecifically, this patch renames the precompiled module (pcm) files from\n  cache-path/<module hash>/Foo.pcm\nto\n  cache-path/<module hash>/Foo-<hash of module map path>.pcm\n\nIn addition, I’ve taught the ASTReader to re-resolve the names of\nimported modules during module loading so that if the header search\ncontext changes between when a module was originally built and when it\nis loaded we can rebuild it if necessary.  For example, if module A\nimports module B\n\nfirst time:\nclang -I /path/to/A -I /path/to/B ...\n\nsecond time:\nclang -I /path/to/A -I /different/path/to/B ...\n\nwill now rebuild A as expected.\n\n* in the case of inferred modules, we use the module map file that\nallowed the inference, not the __inferred_module.map file, since the\ninferred file path is the same for every inferred module.\n\nllvm-svn: 206201"},
[j]={{nb,350,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case ModuleDeclKind::Implementation: {\n    // ...\n    if (!Interface) {\n      Diag(ModuleLoc, diag::err_module_not_defined) << ModuleName;"}}
[d]={{"clang/lib/Serialization/ASTReader.cpp",4040,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\n    if (!StoredModMap || *StoredModMap != ModMap) {\n      // ...\n      if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))\n        Diag(diag::err_imported_module_modmap_changed) << F.ModuleName << (NotImported ? F.FileName : ImportedBy->FileName) << ModMap->getName() << F.ModuleMapPath << NotImported;"}}
},
},
["err_module_not_found"]={
["err_imported_module_not_found"]={
[c]="err_module_not_found",
[b]="err_imported_module_not_found",
[d]="module \'%0\' not found",
[i]={{nil,F,"module \'%0\' in AST file \'%1\' %select{(imported by AST file \'%2\') |}4is not defined in any loaded module map file; maybe you need to load \'%3\'?"},{r,nil,"module \'%0\' in AST file \'%1\' (imported by AST file \'%2\') is not defined in any loaded module map file; maybe you need to load \'%3\'?"}},
[e]="module \'A\' not found",
[j]={{nil,F,{"module \'A\' in AST file \'B\' ",{"(imported by AST file \'C\') ",a},"is not defined in any loaded module map file; maybe you need to load \'D\'?"}},{r,nil,"module \'A\' in AST file \'B\' (imported by AST file \'C\') is not defined in any loaded module map file; maybe you need to load \'D\'?"}},
[f]=V,
[h]=tb,
[g]="module \'(.*?)\' not found",
[c]="module \'(.*?)\' in AST file \'(.*?)\' (?:\\(imported by AST file \'(.*?)\'\\) |)is not defined in any loaded module map file; maybe you need to load \'(.*?)\'\\?",
[h]=a,
[f]=a,
[i]=y,
[e]="AST Deserialization Issue",
[b]={"dd8a2fe0be34",1314827541,"Switch the \"no module found\" default-fatal warning to a default-fatal error.","Switch the \"no module found\" default-fatal warning to a default-fatal error.\n\nllvm-svn: 138909"},
[g]={"beee15e721f6",1397498401,"Allow multiple modules with the same name to coexist in the module cache","Allow multiple modules with the same name to coexist in the module cache\n\nTo differentiate between two modules with the same name, we will\nconsider the path the module map file that they are defined by* part of\nthe ‘key’ for looking up the precompiled module (pcm file).\nSpecifically, this patch renames the precompiled module (pcm) files from\n  cache-path/<module hash>/Foo.pcm\nto\n  cache-path/<module hash>/Foo-<hash of module map path>.pcm\n\nIn addition, I’ve taught the ASTReader to re-resolve the names of\nimported modules during module loading so that if the header search\ncontext changes between when a module was originally built and when it\nis loaded we can rebuild it if necessary. For example, if module A\nimports module B\n\nfirst time:\nclang -I /path/to/A -I /path/to/B ...\n\nsecond time:\nclang -I /path/to/A -I /different/path/to/B ...\n\nwill now rebuild A as expected.\n\n* in the case of inferred modules, we use the module map file that\nallowed the inference, not the __inferred_module.map file, since the\ninferred file path is the same for every inferred module.\n\nllvm-svn: 206201"},
[j]={{wb,1821,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  if (Source == MS_ModuleNotFound) {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_not_found) << ModuleName << SourceRange(ImportLoc, ModuleNameLoc);"}},
[d]={{"clang/lib/Serialization/ASTReader.cpp",4015,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // ...\n    // Don\'t emit module relocation error if we have -fno-validate-pch\n    if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation & DisableValidationForModuleKind::Module) && !ModMap) {\n      if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities)) {\n        if (auto ASTFE = M ? M->getASTFile() : std::nullopt) {\n        // ...\n        } else {\n          // ...\n          Diag(diag::err_imported_module_not_found) << F.ModuleName << F.FileName << (ImportedBy ? ImportedBy->FileName : \"\") << F.ModuleMapPath << !ImportedBy;"}}
[l]={
["clang/test/CXX/module/dcl.dcl/dcl.module/p2.cpp"]={"clang/test/CXX/module/dcl.dcl/dcl.module/p2.cpp:4:8: fatal error: module \'M\' not found"}
}
},
},
["err_module_odr_violation_definition_data"]={
["err_imported_module_relocated"]={
[c]={{nil,t,"err_module_odr_violation_definition_data"}},
[b]="err_imported_module_relocated",
[d]={{nil,t,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%4 base %plural{1:class|:classes}4|%4 virtual base %plural{1:class|:classes}4|%ordinal4 base class with type %5|%ordinal4 %select{non-virtual|virtual}5 base class %6|%ordinal4 base class %5 with %select{public|protected|private|no}6 access specifier}3"}},
[i]="module \'%0\' was built in directory \'%1\' but now resides in directory \'%2\'",
[e]={{nil,t,{ab,{R,L},Z,{{"E base ",{mb,"classes"}},{"E virtual base ",{mb,"classes"}},"E base class with type F",{"E ",{"non-virtual","virtual"}," base class G"},{"E base class F with ",{"public","protected","private",Bc}," access specifier"}}}}},
[j]="module \'A\' was built in directory \'B\' but now resides in directory \'C\'",
[f]=k,
[h]=tb,
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(.*?) base (?:class|classes)|(.*?) virtual base (?:class|classes)|(.*?) base class with type (.*?)|(.*?) (?:non\\-virtual|virtual) base class (.*?)|(.*?) base class (.*?) with (?:public|protected|private|no) access specifier)",
[c]="module \'(.*?)\' was built in directory \'(.*?)\' but now resides in directory \'(.*?)\'",
[h]=a,
[f]=a,
[i]={{nil,p,w},{s,t,bb}},
[e]="AST Deserialization Issue",
[b]={"e13eabe7d339",1506737957,"[ODRHash] Add base classes to hashing CXXRecordDecl.","[ODRHash] Add base classes to hashing CXXRecordDecl.\n\nllvm-svn: 314581"},
[g]={"223d3f2e4d49",1417836068,"[modules] If we import a module, and we\'ve seen a module map that describes the","[modules] If we import a module, and we\'ve seen a module map that describes the\nmodule, use the path from the module map file in preference to the path from\nthe .pcm file when resolving relative paths in the .pcm file. This allows\ndiagnostics (and .d output) to give relative paths if the module was found via\na relative path.\n\nllvm-svn: 223577"},
[j]={{U,733,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // ...\n  // Diagnostics from DefinitionData are emitted here.\n if (FirstDD != SecondDD) {\n   // ...\n   auto DiagBaseError = [FirstRecord, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRDefinitionDataDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_definition_data) << FirstRecord << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
[d]={{"clang/lib/Serialization/ASTReader.cpp",3012,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case MODULE_DIRECTORY: {\n      // ...\n      if (M && M->Directory) {\n        // If we\'re implicitly loading a module, the base directory can\'t\n        // change between the build and use.\n       // Don\'t emit module relocation error if we have -fno-validate-pch\n        if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation & DisableValidationForModuleKind::Module) && F.Kind != MK_ExplicitModule && F.Kind != MK_PrebuiltModule) {\n         // ...\n         if (!BuildDir || *BuildDir != M->Directory) {\n            if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities))\n              Diag(diag::err_imported_module_relocated) << F.ModuleName << Blob << M->Directory->getName();"}},
[l]={
[l]={
[fc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2685:8: error: \'BaseClass::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 0 base classes","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2696:8: error: \'BaseClass::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1 base class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2708:8: error: \'BaseClass::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1 virtual base class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2720:8: error: \'BaseClass::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class with type \'B4b\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2732:8: error: \'BaseClass::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 0 virtual base classes","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2744:8: error: \'BaseClass::S6\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1 virtual base class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2756:8: error: \'BaseClass::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B7a\' with no access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2768:8: error: \'BaseClass::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B8a\' with private access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2780:8: error: \'BaseClass::S9\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B9a\' with public access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2792:8: error: \'BaseClass::S10\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found 1st base class \'B10a\' with protected access specifier"}
["clang/test/Modules/shadowed-submodule.m"]={"clang/test/Modules/shadowed-submodule.m:4:2: fatal error: module \'A\' was built in directory \'/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/Modules/Inputs/shadowed-submodule/Foo/../A1\' but now resides in directory \'clang/test/Modules/Inputs/shadowed-submodule/A2\'"}
}
}
},
},
["err_module_odr_violation_different_definitions"]={
["err_in_class_initializer_bad_type"]={
[c]="err_module_odr_violation_different_definitions",
[b]="err_in_class_initializer_bad_type",
[d]="%q0 has different definitions in different modules; %select{definition in module \'%2\' is here|defined here}1",
[i]="static data member of type %0 must be initialized out of line",
[e]={{nil,nil,{"A has different definitions in different modules; ",{"definition in module \'C\' is here",L}}}},
[j]="static data member of type A must be initialized out of line",
[f]=k,
[h]=k,
[g]="(.*?) has different definitions in different modules; (?:definition in module \'(.*?)\' is here|defined here)",
[c]="static data member of type (.*?) must be initialized out of line",
[h]=a,
[f]=a,
[i]={{nil,p,w},{s,nil,bb}},
[e]=m,
[b]={"cd45dbc5f24c",1397879310,"When a module completes the definition of a class template specialization imported from another modu...","When a module completes the definition of a class template specialization imported from another module, emit an update record, rather than using the broken decl rewriting mechanism. If multiple modules do this, merge the definitions together, much as we would if they were separate declarations.\n\nllvm-svn: 206680"},
[g]={"db76892e72e4",1284160882,"Support in-class initialization of static const floating-point data members.","Support in-class initialization of static const floating-point data members.\n\nllvm-svn: 113663"},
[j]={{U,653,"void ODRDiagsEmitter::diagnoseSubMismatchUnexpected(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  Diag(FirstRecord->getLocation(), diag::err_module_odr_violation_different_definitions) << FirstRecord << FirstModule.empty() << FirstModule;"}}
[d]={{p,13539,"/// 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    // ...\n   } else if (getLangOpts().CPlusPlus11 && DclT->isLiteralType(Context)) {\n   // ...\n   } else {\n      Diag(VDecl->getLocation(), diag::err_in_class_initializer_bad_type) << DclT << Init->getSourceRange();"}},
},
["err_module_odr_violation_different_instantiations"]={
[c]="err_module_odr_violation_different_instantiations",
[d]="instantiation of %q0 is different in different modules",
[e]="instantiation of A is different in different modules",
[f]=k,
[g]="instantiation of (.*?) is different in different modules",
[h]=a,
[i]=bb,
[b]={"cd45dbc5f24c",1397879310,"When a module completes the definition of a class template specialization imported from another modu...","When a module completes the definition of a class template specialization imported from another module, emit an update record, rather than using the broken decl rewriting mechanism. If multiple modules do this, merge the definitions together, much as we would if they were separate declarations.\n\nllvm-svn: 206680"},
[j]={{Ib,9797,"void ASTReader::diagnoseOdrViolations() {\n // ...\n // Issue any pending ODR-failure diagnostics.\n for (auto &Merge : OdrMergeFailures) {\n    // ...\n    if (!Diagnosed) {\n     // ...\n     Diag(Merge.first->getLocation(), diag::err_module_odr_violation_different_instantiations) << Merge.first;"}}
},
["err_module_odr_violation_enum"]={
[c]={{nil,q,"err_module_odr_violation_enum"}},
[d]={{nil,s,"%q0 has different definitions in different modules; %select{definition in module \'%2\'|defined here}1 first difference is %select{enum that is %select{not scoped|scoped}4|enum scoped with keyword %select{struct|class}4|enum %select{without|with}4 specified type|enum with specified type %4|enum with %4 element%s4|%ordinal4 element has name %5|%ordinal4 element %5 %select{has|does not have}6 an initializer|%ordinal4 element %5 has an initializer|}3"},{S,q,"%q0 has different definitions in different modules; %select{definition in module \'%2\'|defined here}1 first difference is %select{enum that is %select{not scoped|scoped}4|enum scoped with keyword %select{struct|class}4|enum %select{without|with}4 specified type|enum with specified type %4|enum with %4 element%s4|%ordinal4 element has name %5|%ordinal4 element %5 %select{has|does not have}6 an initilizer|%ordinal4 element %5 has an initializer|}3"}},
[e]={{nil,s,{"A has different definitions in different modules; ",{R,L}," first difference is ",{{"enum that is ",{"not scoped","scoped"}},{"enum scoped with keyword ",{"struct",mb}},{"enum ",{"without","with"}," specified type"},"enum with specified type E","enum with E elementE","E element has name F",{"E element F ",{"has","does not have"}," an initializer"},"E element F has an initializer",a}}},{S,q,{"A has different definitions in different modules; ",{R,L}," first difference is ",{{"enum that is ",{"not scoped","scoped"}},{"enum scoped with keyword ",{"struct",mb}},{"enum ",{"without","with"}," specified type"},"enum with specified type E","enum with E elementE","E element has name F",{"E element F ",{"has","does not have"}," an initilizer"},"E element F has an initializer",a}}}},
[f]=k,
[g]="(.*?) has different definitions in different modules; (?:definition in module \'(.*?)\'|defined here) first difference is (?:enum that is (?:not scoped|scoped)|enum scoped with keyword (?:struct|class)|enum (?:without|with) specified type|enum with specified type (.*?)|enum with (.*?) element(.*?)|(.*?) element has name (.*?)|(.*?) element (.*?) (?:has|does not have) an initializer|(.*?) element (.*?) has an initializer|)",
[h]=a,
[i]={{nil,p,w},{s,q,bb}},
[b]={"ab4d730f14d1",1532559125,"[ODRHash] Support hashing enums.","[ODRHash] Support hashing enums.\n\nllvm-svn: 337978"},
[j]={{U,1810,"bool ODRDiagsEmitter::diagnoseMismatch(const EnumDecl *FirstEnum, const EnumDecl *SecondEnum) const {\n // ...\n auto DiagError = [FirstEnum, &FirstModule, this](const auto *DiagAnchor, ODREnumDifference DiffType) { return Diag(DiagAnchor->getLocation(), diag::err_module_odr_violation_enum) << FirstEnum << FirstModule.empty() << FirstModule << DiagAnchor->getSourceRange() << DiffType; };"}},
[l]={
[l]={
[fc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3409:6: error: \'Enums::E2\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with 1 element","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3429:6: error: \'Enums::E4\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with 2 elements","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3449:11: error: \'Enums::E6\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 1st element has name \'x62\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3459:11: error: \'Enums::E7\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 1st element \'x71\' has an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3469:11: error: \'Enums::E8\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 1st element \'x81\' does not have an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3479:20: error: \'Enums::E9\' has different definitions in different modules; definition in module \'SecondModule\' first difference is 2nd element \'x92\' has an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3489:12: error: \'Enums::E10\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum without specified type","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3499:6: error: \'Enums::E11\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with specified type","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3509:13: error: \'Enums::E12\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum with specified type \'int\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3519:6: error: \'Enums::E13\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum that is not scoped","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3529:13: error: \'Enums::E14\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum that is scoped","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3539:13: error: \'Enums::E15\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum scoped with keyword struct","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3549:12: error: \'Enums::E16\' has different definitions in different modules; definition in module \'SecondModule\' first difference is enum scoped with keyword class"}
["clang/test/SemaCXX/cxx0x-class.cpp"]={"clang/test/SemaCXX/cxx0x-class.cpp:13:24: error: static data member of type \'const NestedC\' must be initialized out of line"}
}
}
},
},
["err_module_odr_violation_field"]={
["err_in_class_initializer_literal_type"]={
[c]={{nil,s,"err_module_odr_violation_field"}},
[b]="err_in_class_initializer_literal_type",
[d]="%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{field %4|field %4 with type %5|%select{non-|}5bitfield %4|bitfield %4 with one width expression|%select{non-|}5mutable field %4|field %4 with %select{no|an}5 initializer|field %4 with an initializer}3",
[i]="in-class initializer for static data member of type %0 requires \'constexpr\' specifier",
[e]={{nil,nil,{ab,{R,L},Z,{"field E","field E with type F",{{"non-",a},"bitfield E"},"bitfield E with one width expression",{{"non-",a},"mutable field E"},{"field E with ",{Bc,"an"}," initializer"},"field E with an initializer"}}},{p,s,{ab,{R,L},Z,{"field E","field E with type F",{{"non-",a},"bitfield E"},"bitfield E with one width expression",{{"non-",a},"mutable field E"},{"field E with ",{Bc,"an"}," initalizer"},"field E with an initializer"}}}},
[j]="in-class initializer for static data member of type A requires \'constexpr\' specifier",
[f]=k,
[h]=k,
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:field (.*?)|field (.*?) with type (.*?)|(?:non\\-|)bitfield (.*?)|bitfield (.*?) with one width expression|(?:non\\-|)mutable field (.*?)|field (.*?) with (?:no|an) initializer|field (.*?) with an initializer)",
[c]="in\\-class initializer for static data member of type (.*?) requires \'constexpr\' specifier",
[h]=a,
[f]=a,
[i]={{nil,p,w},{s,s,bb}},
[e]=m,
[b]={Yb,1643408541,Xb,Wb},
[g]={"256336d9ab6d",1317338314,"Mark the ExtWarn for in-class initialization of static const float members as a GNU extension. Don\'t...","Mark the ExtWarn for in-class initialization of static const float members as a GNU extension. Don\'t extend the scope of this extension to all literal types in C++0x mode.\n\nllvm-svn: 140820"},
[j]={{U,160,"bool ODRDiagsEmitter::diagnoseSubMismatchField(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const FieldDecl *FirstField, const FieldDecl *SecondField) const {\n  // ...\n  auto DiagError = [FirstRecord, FirstField, FirstModule, this](ODRFieldDifference DiffType) { return Diag(FirstField->getLocation(), diag::err_module_odr_violation_field) << FirstRecord << FirstModule.empty() << FirstModule << FirstField->getSourceRange() << DiffType; };"}},
[d]={{p,13533,"/// 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    // ...\n    } else if (getLangOpts().CPlusPlus11 && DclT->isLiteralType(Context)) {\n      Diag(VDecl->getLocation(), diag::err_in_class_initializer_literal_type) << DclT << Init->getSourceRange() << FixItHint::CreateInsertion(VDecl->getBeginLoc(), \"constexpr \");"}},
[l]={
[l]={
["clang/test/Modules/odr_hash-gnu.cpp"]={"build/tools/clang/test/Modules/Output/odr_hash-gnu.cpp.tmp/Inputs/first.h:40:17: error: \'Types::TypeOfExpr::Invalid1\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found field \'x\' with type \'typeof (1 + 2)\' (aka \'int\')","build/tools/clang/test/Modules/Output/odr_hash-gnu.cpp.tmp/Inputs/first.h:81:15: error: \'Types::TypeOf::Invalid2\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found field \'x\' with type \'typeof(int)\' (aka \'int\')"}
["clang/test/CXX/class/class.static/class.static.data/p3.cpp"]={"clang/test/CXX/class/class.static/class.static.data/p3.cpp:18:22: error: in-class initializer for static data member of type \'char *const\' requires \'constexpr\' specifier"}
}
}
},
},
["err_module_odr_violation_function"]={
["err_in_class_initializer_non_const"]={
[c]={{nil,t,"err_module_odr_violation_function"}},
[b]="err_in_class_initializer_non_const",
[d]={{nil,t,"%q0 has different definitions in different modules; %select{definition in module \'%2\'|defined here}1 first difference is %select{return type is %4|%ordinal4 parameter with name %5|%ordinal4 parameter with type %5%select{| decayed from %7}6|%ordinal4 parameter with%select{out|}5 a default argument|%ordinal4 parameter with a default argument|function body}3"}},
[i]="non-const static data member must be initialized out of line",
[e]={{nil,t,{"A has different definitions in different modules; ",{R,L}," first difference is ",{"return type is E","E parameter with name F",{"E parameter with type F",{a," decayed from H"}},{"E parameter with",{"out",a}," a default argument"},"E parameter with a default argument","function body"}}}},
[j]="non-const static data member must be initialized out of line",
[f]=k,
[h]=k,
[g]="(.*?) has different definitions in different modules; (?:definition in module \'(.*?)\'|defined here) first difference is (?:return type is (.*?)|(.*?) parameter with name (.*?)|(.*?) parameter with type (.*?)(?:| decayed from (.*?))|(.*?) parameter with(?:out|) a default argument|(.*?) parameter with a default argument|function body)",
[c]="non\\-const static data member must be initialized out of line",
[h]=a,
[f]=a,
[i]={{nil,p,w},{s,t,bb}},
[e]=m,
[b]={"e81caeb3147f",1512782980,"[ODRHash] Support ODR violation detection in functions.","[ODRHash] Support ODR violation detection in functions.\n\nExtend the hashing to functions, which allows detection of function definition\nmismatches across modules.\n\nllvm-svn: 320230"},
[g]={"db76892e72e4",1284160882,"Support in-class initialization of static const floating-point data members.","Support in-class initialization of static const floating-point data members.\n\nllvm-svn: 113663"},
[j]={{U,1677,"bool ODRDiagsEmitter::diagnoseMismatch(const FunctionDecl *FirstFunction, const FunctionDecl *SecondFunction) const {\n  // ...\n  auto DiagError = [FirstFunction, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRFunctionDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_function) << FirstFunction << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
[d]={{p,13477,"/// 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      Diag(VDecl->getLocation(), diag::err_in_class_initializer_non_const) << Init->getSourceRange();"}},
[l]={
[l]={
["clang/test/Modules/odr_hash.cl"]={"build/tools/clang/test/Modules/Output/odr_hash.cl.tmp/Inputs/second.h:50:6: error: \'invalid1\' has different definitions in different modules; definition in module \'SecondModule\' first difference is function body","build/tools/clang/test/Modules/Output/odr_hash.cl.tmp/Inputs/second.h:53:6: error: \'invalid2\' has different definitions in different modules; definition in module \'SecondModule\' first difference is function body"}
["clang/test/SemaCXX/cxx0x-class.cpp"]={"clang/test/SemaCXX/cxx0x-class.cpp:12:14: error: non-const static data member must be initialized out of line"}
}
}
},
},
["err_module_odr_violation_method_params"]={
["err_in_class_initializer_non_constant"]={
[c]={{nil,p,"err_module_odr_violation_method_params"}},
[b]="err_in_class_initializer_non_constant",
[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%select{method %5|constructor|destructor}4 that has %6 parameter%s6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter of type %7%select{| decayed from %9}8|%select{method %5|constructor|destructor}4 with %ordinal6 parameter named %7}3"}},
[i]="in-class initializer for static data member is not a constant expression",
[e]={{nil,p,{ab,{R,L},Z,{{{E,C,B}," that has G parameterG"},{{E,C,B}," with G parameter of type H",{a," decayed from J"}},{{E,C,B}," with G parameter named H"}}}}},
[j]="in-class initializer for static data member is not a constant expression",
[f]=k,
[h]=k,
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(?:method (.*?)|constructor|destructor) that has (.*?) parameter(.*?)|(?:method (.*?)|constructor|destructor) with (.*?) parameter of type (.*?)(?:| decayed from (.*?))|(?:method (.*?)|constructor|destructor) with (.*?) parameter named (.*?))",
[c]="in\\-class initializer for static data member is not a constant expression",
[h]=a,
[f]=a,
[i]={{nil,p,w}},
[e]=m,
[b]={Yb,1643408541,Xb,Wb},
[g]={x,1237025389,y,z},
[j]={{U,83,"template <typename MethodT> static bool diagnoseSubMismatchMethodParameters(DiagnosticsEngine &Diags, const NamedDecl *FirstContainer, StringRef FirstModule, StringRef SecondModule, const MethodT *FirstMethod, const MethodT *SecondMethod) {\n  // ...\n  auto DiagError = [&Diags, &GetDiagMethodType, FirstContainer, FirstModule, FirstMethod](ODRMethodParametersDifference DiffType) {\n   // ...\n   return Diags.Report(FirstMethod->getLocation(), diag::err_module_odr_violation_method_params) << FirstContainer << FirstModule.empty() << FirstModule << FirstMethod->getSourceRange() << DiffType << FirstMethodType << FirstName;"}},
[d]={{p,13504,"/// 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      } else {\n        // ...\n        Diag(Loc, diag::err_in_class_initializer_non_constant) << Init->getSourceRange();"},{p,13525,"/// 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        // ...\n        if (!Init->isValueDependent() && !Init->isEvaluatable(Context)) {\n          Diag(Init->getExprLoc(), diag::err_in_class_initializer_non_constant) << Init->getSourceRange();"}},
[l]={
[l]={
[fc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:552:8: error: \'Method::S9\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' that has 2 parameters","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:568:8: error: \'Method::S10\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter of type \'float\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:583:8: error: \'Method::S11\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter named \'y\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:625:8: error: \'Method::S14\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter of type \'int *\' decayed from \'int[3]\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:902:3: error: \'Constructor::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found constructor that has 2 parameters","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3915:12: error: \'Types::PackExpansion::Invalid::L2::L3\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'run\' with 1st parameter of type \'A...\'"}
["clang/test/SemaCXX/cxx0x-class.cpp"]={"clang/test/SemaCXX/cxx0x-class.cpp:14:26: error: in-class initializer for static data member is not a constant expression"}
}
}
},
},
["err_module_odr_violation_mismatch_decl"]={
["err_in_class_initializer_volatile"]={
[c]={{nil,r,"err_module_odr_violation_mismatch_decl"}},
[b]="err_in_class_initializer_volatile",
[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property}3"},{s,q,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template}3"},{t,r,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration}3"}},
[i]="static const volatile data member must be initialized out of line",
[e]={{nil,p,{ab,{R,L},Z,{"end of class","public access specifier","private access specifier","protected access specifier",jc,ic,ob,Eb,yb,ec,hc,"function template",ob,"instance variable","property"}}},{s,q,{ab,{R,L},Z,{"end of class","public access specifier","private access specifier","protected access specifier",jc,ic,ob,Eb,yb,ec,hc,"function template"}}},{t,r,{ab,{R,L},Z,{"end of class","public access specifier","private access specifier","protected access specifier",jc,ic,ob,Eb,yb,ec,hc}}}},
[j]="static const volatile data member must be initialized out of line",
[f]=k,
[h]=k,
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property)",
[c]="static const volatile data member must be initialized out of line",
[h]=a,
[f]=a,
[i]={{nil,p,w},{s,r,bb}},
[e]=m,
[b]={"fa3d93a148d4",1485827055,"Add better ODR checking for modules.","Add better ODR checking for modules.\n\nWhen objects are imported for modules, there is a chance that a name collision\nwill cause an ODR violation.  Previously, only a small number of such\nviolations were detected.  This patch provides a stronger check based on\nAST nodes.\n\nThe information needed to uniquely identify an object is taked from the AST and\nput into a one-dimensional byte stream. This stream is then hashed to give\na value to represent the object, which is stored with the other object data\nin the module.\n\nWhen modules are loaded, and Decl\'s are merged, the hash values of the two\nDecl\'s are compared. Only Decl\'s with matched hash values will be merged.\nMismatch hashes will generate a module error, and if possible, point to the\nfirst difference between the two objects.\n\nThe transform from AST to byte stream is a modified depth first algorithm.\nDue to references between some AST nodes, a pure depth first algorithm could\ngenerate loops. For Stmt nodes, a straight depth first processing occurs.\nFor Type and Decl nodes, they are replaced with an index number and only on\nfirst visit will these nodes be processed. As an optimization, boolean\nvalues are saved and stored together in reverse order at the end of the\nbyte stream to lower the ammount of data that needs to be hashed.\n\nCompile time impact was measured at 1.5-2.0% during module building, and\nnegligible during builds without module building.\n\nDifferential Revision: https://reviews.llvm.org/D21675\n\nllvm-svn: 293585"},
[g]={"ee6311df6972",1317331694,"In C++0x, static const volatile data members cannot be initialized in-class.","In C++0x, static const volatile data members cannot be initialized in-class.\n\nllvm-svn: 140809"},
[j]={{U,694,"void ODRDiagsEmitter::diagnoseSubMismatchDifferentDeclKinds(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n // ...\n Diag(FirstDiagInfo.first, diag::err_module_odr_violation_mismatch_decl) << FirstRecord << FirstModule.empty() << FirstModule << FirstDiagInfo.second << DR.FirstDiffType;"}},
[d]={{p,13488,"/// 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  // ...\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       Diag(VDecl->getLocation(), diag::err_in_class_initializer_volatile);"}},
[l]={
[l]={
["clang/test/Modules/odr_hash-blocks.cpp"]={"build/tools/clang/test/Modules/Output/odr_hash-blocks.cpp.tmp/Inputs/second.h:100:3: error: \'Blocks::Invalid1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found private access specifier"}
["clang/test/SemaCXX/cxx0x-class.cpp"]={"clang/test/SemaCXX/cxx0x-class.cpp:16:29: error: static const volatile data member must be initialized out of line"}
}
}
},
},
["err_module_odr_violation_mismatch_decl_unknown"]={
["err_include_too_large"]={
[c]={{nil,r,"err_module_odr_violation_mismatch_decl_unknown"}},
[b]={{nil,o,"err_include_too_large"}},
[d]={{nil,p,"%q0 %select{with definition in module \'%2\'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property|unexpected decl}3"},{s,s,"%q0 %select{with definition in module \'%2\'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|function template|unexpected decl}3"},{S,r,"%q0 %select{with definition in module \'%2\'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|unexpected decl}3"}},
[i]={{nil,o,"sorry, this include generates a translation unit too large for Clang to process."}},
[e]={{nil,p,{"A ",{"with definition in module \'C\'",L}," has different definitions in different modules; first difference is this ",{a,a,a,a,jc,ic,ob,Eb,yb,ec,hc,"function template",ob,"instance variable","property","unexpected decl"}}},{s,s,{"A ",{"with definition in module \'C\'",L}," has different definitions in different modules; first difference is this ",{a,a,a,a,jc,ic,ob,Eb,yb,ec,hc,"function template","unexpected decl"}}},{S,r,{"A ",{"with definition in module \'C\'",L}," has different definitions in different modules; first difference is this ",{a,a,a,a,jc,ic,ob,Eb,yb,ec,hc,"unexpected decl"}}}},
[j]={{nil,o,"sorry, this include generates a translation unit too large for Clang to process."}},
[f]=k,
[h]=tb,
[g]="(.*?) (?:with definition in module \'(.*?)\'|defined here) has different definitions in different modules; first difference is this (?:||||static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property|unexpected decl)",
[c]="sorry, this include generates a translation unit too large for Clang to process\\.",
[h]=a,
[f]=a,
[i]={{nil,p,w},{s,r,bb}},
[e]={{nil,o,v}},
[b]={"708859a71326",1496883381,"[ODRHash] Change the fall-back diagnostic error.","[ODRHash] Change the fall-back diagnostic error.\n\nProvide a little more information when a ODR violation is detected, but the\nspecific error could not be diagnosed.\n\nllvm-svn: 304956"},
[g]={"39f50da2a357",1568041174,"Support -fstack-clash-protection for x86","Support -fstack-clash-protection for x86\n\nImplement protection against the stack clash attack [0] through inline stack\nprobing.\n\nProbe stack allocation every PAGE_SIZE during frame lowering or dynamic\nallocation to make sure the page guard, if any, is touched when touching the\nstack, in a similar manner to GCC[1].\n\nThis extends the existing `probe-stack\' mechanism with a special value `inline-asm\'.\nTechnically the former uses function call before stack allocation while this\npatch provides inlined stack probes and chunk allocation.\n\nOnly implemented for x86.\n\n[0] https://www.qualys.com/2017/06/19/stack-clash/stack-clash.txt\n[1] https://gcc.gnu.org/ml/gcc-patches/2017-07/msg00556.html\n\nDifferential Revision: https://reviews.llvm.org/D68720"},
[j]={{U,1549,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n // ...\n Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"},{U,1645,"bool ODRDiagsEmitter::diagnoseMismatch(const RecordDecl *FirstRecord, const RecordDecl *SecondRecord) const {\n  // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstRecord << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"},{U,2098,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCInterfaceDecl *FirstID, const ObjCInterfaceDecl *SecondID, const struct ObjCInterfaceDecl::DefinitionData *SecondDD) const {\n  // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstID << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"},{U,2204,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCProtocolDecl *FirstProtocol, const ObjCProtocolDecl *SecondProtocol, const struct ObjCProtocolDecl::DefinitionData *SecondDD) const {\n // ...\n  Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_mismatch_decl_unknown) << FirstProtocol << FirstModule.empty() << FirstModule << FirstDiffType << FirstDecl->getSourceRange();"}}
[d]={{"clang/lib/Basic/SourceManager.cpp",618,"/// createFileID - Create a new FileID for the specified ContentCache and\n/// include position. This works regardless of whether the ContentCache\n/// corresponds to a file or some other input source.\nFileID SourceManager::createFileIDImpl(ContentCache &File, StringRef Filename, SourceLocation IncludePos, SrcMgr::CharacteristicKind FileCharacter, int LoadedID, SourceLocation::UIntTy LoadedOffset) {\n  // ...\n  if (!(NextLocalOffset + FileSize + 1 > NextLocalOffset && NextLocalOffset + FileSize + 1 <= CurrentLoadedOffset)) {\n   Diag.Report(IncludePos, diag::err_include_too_large);"}}
},
},
["err_module_odr_violation_missing_decl"]={
["err_incompatible_exception_specs"]={
[c]="err_module_odr_violation_missing_decl",
[b]="err_incompatible_exception_specs",
[d]="%q0 from module \'%1\' is not present in definition of %q2%select{ in module \'%4\'| provided earlier}3",
[i]="target exception specification is not superset of source",
[e]={{nil,nil,{"A from module \'B\' is not present in definition of C",{" in module \'E\'"," provided earlier"}}}},
[j]="target exception specification is not superset of source",
[f]=k,
[h]=k,
[g]="(.*?) from module \'(.*?)\' is not present in definition of (.*?)(?: in module \'(.*?)\'| provided earlier)",
[c]="target exception specification is not superset of source",
[h]=a,
[f]=a,
[i]=bb,
[e]=m,
[b]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:","Basic ODR checking for C++ modules:\n\nIf we have multiple definitions of the same entity from different modules, we\nnominate the first definition which we see as being the canonical definition.\nIf we load a declaration from a different definition and we can\'t find a\ncorresponding declaration in the canonical definition, issue a diagnostic.\n\nThis is insufficient to prevent things from going horribly wrong in all cases\n-- we might be in the middle of emitting IR for a function when we trigger some\ndeserialization and discover that it refers to an incoherent piece of the AST,\nby which point it\'s probably too late to bail out -- but we\'ll at least produce\na diagnostic.\n\nllvm-svn: 192950"},
[g]={"5d43164bc2e4",1255176250,"Implement the core checking for compatible exception specifications in assignment and initialization...","Implement the core checking for compatible exception specifications in assignment and initialization.\n\nThe exception specification of the assignee must be the same or a subset of the target. In addition, exception specifications on arguments and return types must be equivalent, but this is not implemented yet.\nThis currently produces two diagnostics for every invalid assignment/initialization, due to the diagnostic produced outside PerformImplicitConversion, e.g. in CheckSingleInitializer. I don\'t know how to suppress this; in any case I think it is the wrong place for a diagnostic, since there are other diagnostics produced inside the function. So I\'m leaving it as it is for the moment.\n\nllvm-svn: 83710"},
[j]={{Ib,9745,"void ASTReader::diagnoseOdrViolations() {\n  // ...\n  // For each declaration from a merged context, check that the canonical\n  // definition of that context also contains a declaration of the same\n  // entity.\n  //\n  // Caution: this loop does things that might invalidate iterators into\n  // PendingOdrMergeChecks. Don\'t turn this into a range-based for loop!\n  while (!PendingOdrMergeChecks.empty()) {\n    // ...\n    if (!Found) {\n      // ...\n      Diag(D->getLocation(), diag::err_module_odr_violation_missing_decl) << D << ODRDiagsEmitter::getOwningModuleNameForDiagnostic(D) << CanonDef << CanonDefModule.empty() << CanonDefModule;"}},
[d]={{"clang/lib/Sema/SemaExceptionSpec.cpp",940,"bool Sema::CheckExceptionSpecCompatibility(Expr *From, QualType ToType) {\n  // ...\n  unsigned DiagID = diag::err_incompatible_exception_specs;"}},
[l]={
[l]={
["clang/test/Modules/odr.cpp"]={"clang/test/Modules/Inputs/odr/a.h:8:7: error: \'X::n\' from module \'a\' is not present in definition of \'X\' provided earlier","clang/test/Modules/Inputs/odr/b.h:2:7: error: \'Y::m\' from module \'b\' is not present in definition of \'Y\' in module \'a\'","clang/test/Modules/Inputs/odr/b.h:5:10: error: \'e2\' from module \'b\' is not present in definition of \'E\' in module \'a\'","clang/test/Modules/Inputs/odr/b.h:3:10: error: \'Y::f\' from module \'b\' is not present in definition of \'Y\' in module \'a\'"}
["clang/test/CXX/except/except.spec/template.cpp"]={"clang/test/CXX/except/except.spec/template.cpp:9:24: error: target exception specification is not superset of source","clang/test/CXX/except/except.spec/template.cpp:12:25: error: target exception specification is not superset of source"}
}
}
},
},
["err_module_odr_violation_objc_interface"]={
["err_incompatible_fp_eval_method_options"]={
[c]={{nil,p,"err_module_odr_violation_objc_interface"}},
[b]={{nil,s,"err_incompatible_fp_eval_method_options"}},
[d]={{nil,p,"%0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%select{no super class|super class with type %5}4|instance variable \'%4\' access control is %select{|@private|@protected|@public|@package}5}3"}},
[i]={{nil,s,"option \'ffp-eval-method\' cannot be used with option %select{\'fapprox-func\'|\'mreassociate\'|\'freciprocal\'}0"}},
[e]={{nil,p,{ab,{R,L},Z,{{{"no super class","super class with type F"}},{"instance variable \'E\' access control is ",{a,"@private","@protected","@public","@package"}}}}}},
[j]={{nil,s,{"option \'ffp-eval-method\' cannot be used with option ",{"\'fapprox-func\'","\'mreassociate\'","\'freciprocal\'"}}}},
[f]=k,
[h]=k,
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(?:no super class|super class with type (.*?))|instance variable \'(.*?)\' access control is (?:|@private|@protected|@public|@package))",
[c]="option \'ffp\\-eval\\-method\' cannot be used with option (?:\'fapprox\\-func\'|\'mreassociate\'|\'freciprocal\')",
[h]=a,
[f]=a,
[i]={{nil,p,w}},
[e]={{nil,s,v}},
[b]={"f27afedc6c86",1662843785,"[Clang] Implement P2738R1 - constexpr cast from void*","[Clang] Implement P2738R1 - constexpr cast from void*\n\nReviewed By: #clang-language-wg, erichkeane\n\nDifferential Revision: https://reviews.llvm.org/D153702"},
[g]={"bac6cd5bf856",1648850628,"[misexpect] Re-implement MisExpect Diagnostics","[misexpect] Re-implement MisExpect Diagnostics\n\nReimplements MisExpect diagnostics from D66324 to reconstruct its\noriginal checking methodology only using MD_prof branch_weights\nmetadata.\n\nNew checks rely on 2 invariants:\n\n1) For frontend instrumentation, MD_prof branch_weights will always be\n  populated before llvm.expect intrinsics are lowered.\n\n2) for IR and sample profiling, llvm.expect intrinsics will always be\n  lowered before branch_weights are populated from the IR profiles.\n\nThese invariants allow the checking to assume how the existing branch\nweights are populated depending on the profiling method used, and emit\nthe correct diagnostics. If these invariants are ever invalidated, the\nMisExpect related checks would need to be updated, potentially by\nre-introducing MD_misexpect metadata, and ensuring it always will be\ntransformed the same way as branch_weights in other optimization passes.\n\nFrontend based profiling is now enabled without using LLVM Args, by\nintroducing a new CodeGen option, and checking if the -Wmisexpect flag\nhas been passed on the command line.\n\nReviewed By: tejohnson\n\nDifferential Revision: https://reviews.llvm.org/D115907"},
[j]={{U,1942,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCInterfaceDecl *FirstID, const ObjCInterfaceDecl *SecondID, const struct ObjCInterfaceDecl::DefinitionData *SecondDD) const {\n  // ...\n  auto DiagError = [FirstID, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRInterfaceDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_objc_interface) << FirstID << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
[d]={{jc,538,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  // ...\n  // When these options are used, the compiler is allowed to apply\n  // optimizations that may affect the final result. For example\n  // (x+y)+z is transformed to x+(y+z) but may not give the same\n  // final result; it\'s not value safe.\n  // Another example can be to simplify x/x to 1.0 but x could be 0.0, INF\n  // or NaN. Final result may then differ. An error is issued when the eval\n  // method is set with one of these options.\n  if (Args.hasArg(OPT_ffp_eval_method_EQ)) {\n    if (LangOpts.ApproxFunc)\n      Diags.Report(diag::err_incompatible_fp_eval_method_options) << 0;"},{jc,540,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  // ...\n  // When these options are used, the compiler is allowed to apply\n  // optimizations that may affect the final result. For example\n  // (x+y)+z is transformed to x+(y+z) but may not give the same\n  // final result; it\'s not value safe.\n  // Another example can be to simplify x/x to 1.0 but x could be 0.0, INF\n  // or NaN. Final result may then differ. An error is issued when the eval\n  // method is set with one of these options.\n  if (Args.hasArg(OPT_ffp_eval_method_EQ)) {\n    // ...\n    if (LangOpts.AllowFPReassoc)\n      Diags.Report(diag::err_incompatible_fp_eval_method_options) << 1;"},{jc,542,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  // ...\n  // When these options are used, the compiler is allowed to apply\n  // optimizations that may affect the final result. For example\n  // (x+y)+z is transformed to x+(y+z) but may not give the same\n  // final result; it\'s not value safe.\n  // Another example can be to simplify x/x to 1.0 but x could be 0.0, INF\n  // or NaN. Final result may then differ. An error is issued when the eval\n  // method is set with one of these options.\n  if (Args.hasArg(OPT_ffp_eval_method_EQ)) {\n    // ...\n    if (LangOpts.AllowRecip)\n      Diags.Report(diag::err_incompatible_fp_eval_method_options) << 2;"}}
},
["err_incompatible_qualified_id"]={
[b]={{nil,o,"err_incompatible_qualified_id"}},
[i]={{nil,o,"%select{%diff{assigning to $ from incompatible type $|assigning to type from incompatible type}0,1|%diff{passing $ to parameter of incompatible type $|passing type to parameter of incompatible type}0,1|%diff{returning $ from a function with incompatible result type $|returning type from a function with incompatible result type}0,1|%diff{converting $ to incompatible type $|converting type to incompatible type}0,1|%diff{initializing $ with an expression of incompatible type $|initializing type with an expression of incompatible type}0,1|%diff{sending $ to parameter of incompatible type $|sending type to parameter of incompatible type}0,1|%diff{casting $ to incompatible type $|casting type to incompatible type}0,1}2"}},
[j]={{nil,o,{{{{"assigning to A from incompatible type B","assigning to type from incompatible type"}},{{"passing A to parameter of incompatible type B","passing type to parameter of incompatible type"}},{{"returning A from a function with incompatible result type B","returning type from a function with incompatible result type"}},{{"converting A to incompatible type B","converting type to incompatible type"}},{{"initializing A with an expression of incompatible type B","initializing type with an expression of incompatible type"}},{{"sending A to parameter of incompatible type B","sending type to parameter of incompatible type"}},{{"casting A to incompatible type B","casting type to incompatible type"}}}}}},
[h]=k,
[c]="(?:(?:assigning to (.*?) from incompatible type (.*?)|assigning to type from incompatible type)|(?:passing (.*?) to parameter of incompatible type (.*?)|passing type to parameter of incompatible type)|(?:returning (.*?) from a function with incompatible result type (.*?)|returning type from a function with incompatible result type)|(?:converting (.*?) to incompatible type (.*?)|converting type to incompatible type)|(?:initializing (.*?) with an expression of incompatible type (.*?)|initializing type with an expression of incompatible type)|(?:sending (.*?) to parameter of incompatible type (.*?)|sending type to parameter of incompatible type)|(?:casting (.*?) to incompatible type (.*?)|casting type to incompatible type))",
[f]=a,
[e]={{nil,o,m}},
[g]={hb,1576908663,ib,fb},
[d]={{q,17682,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n  case IncompatibleObjCQualifiedId: {\n   // ...\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_incompatible_qualified_id;"},{q,17767,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  if ((DiagKind == diag::warn_incompatible_qualified_id || DiagKind == diag::err_incompatible_qualified_id) && PDecl && IFace && !IFace->hasDefinition())"}},
[l]={
[l]={
["clang/test/Modules/method_pool.m"]={"clang/test/Modules/Inputs/MethodPoolB.h:10:12: error: \'B\' has different definitions in different modules; first difference is definition in module \'MethodPoolB\' found no super class"}
["clang/test/SemaObjC/argument-checking.m"]={"clang/test/SemaObjC/argument-checking.m:24:19: error: sending \'int\' to parameter of incompatible type \'struct S\'","clang/test/SemaObjC/argument-checking.m:25:26: error: sending \'int\' to parameter of incompatible type \'struct S\'"}
}
}
},
},
["err_module_odr_violation_objc_method"]={
["err_incompatible_vectors"]={
[c]={{nil,p,"err_module_odr_violation_objc_method"}},
[b]={{nil,o,"err_incompatible_vectors"}},
[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{method %4 with return type %5|%select{class|instance}5 method %4|%select{no|\'required\'|\'optional\'}4 method control|method %4 with %select{no designated initializer|designated initializer}5|%select{regular|direct}5 method %4|method %4}3"}},
[i]={{nil,o,"incompatible vector types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2"}},
[e]={{nil,p,{ab,{R,L},Z,{"method E with return type F",{{mb,"instance"}," method E"},{{Bc,"\'required\'","\'optional\'"}," method control"},{"method E with ",{"no designated initializer","designated initializer"}},{{"regular","direct"}," method E"},"method E"}}}},
[j]={{nil,o,{"incompatible vector types ",{{{"assigning to A from B","assigning to different types"}},{{"passing A to parameter of type B","passing to parameter of different type"}},{{"returning A from a function with result type B","returning from function with different return type"}},{{"converting A to type B","converting between types"}},{{"initializing A with an expression of type B","initializing with expression of different type"}},{{"sending A to parameter of type B","sending to parameter of different type"}},{{"casting A to type B","casting between types"}}}}}},
[f]=k,
[h]=k,
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:method (.*?) with return type (.*?)|(?:class|instance) method (.*?)|(?:no|\'required\'|\'optional\') method control|method (.*?) with (?:no designated initializer|designated initializer)|(?:regular|direct) method (.*?)|method (.*?))",
[c]="incompatible vector types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))",
[h]=a,
[f]=a,
[i]={{nil,p,w}},
[e]={{nil,o,m}},
[b]={Yb,1643408541,Xb,Wb},
[g]={hb,1576908663,ib,fb},
[j]={{U,437,"bool ODRDiagsEmitter::diagnoseSubMismatchObjCMethod(const NamedDecl *FirstObjCContainer, StringRef FirstModule, StringRef SecondModule, const ObjCMethodDecl *FirstMethod, const ObjCMethodDecl *SecondMethod) const {\n  // ...\n  auto DiagError = [FirstObjCContainer, FirstModule, FirstMethod, this](ODRMethodDifference DiffType) { return Diag(FirstMethod->getLocation(), diag::err_module_odr_violation_objc_method) << FirstObjCContainer << FirstModule.empty() << FirstModule << FirstMethod->getSourceRange() << DiffType; };"}}
[d]={{q,17691,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleVectors:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_incompatible_vectors;"}}
},
},
["err_module_odr_violation_objc_property"]={
["err_incomplete_array_member_init"]={
[c]={{nil,p,"err_module_odr_violation_objc_property"}},
[b]="err_incomplete_array_member_init",
[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{property %4|property %4 with type %5|%select{no|\'required\'|\'optional\'}4 property control|property %4 with %select{default |}6\'%select{none|readonly|getter|assign|readwrite|retain|copy|nonatomic|setter|atomic|weak|strong|unsafe_unretained|nullability|null_resettable|class|direct}5\' attribute}3"}},
[i]={{nil,mb,"array bound cannot be deduced from a default member initializer"},{sb,nil,"array bound cannot be deduced from an in-class initializer"}},
[e]={{nil,p,{ab,{R,L},Z,{"property E","property E with type F",{{Bc,"\'required\'","\'optional\'"}," property control"},{"property E with ",{"default ",a},"\'",{"none","readonly","getter","assign","readwrite","retain","copy","nonatomic","setter","atomic","weak","strong","unsafe_unretained","nullability","null_resettable",mb,"direct"},"\' attribute"}}}}},
[j]={{nil,mb,"array bound cannot be deduced from a default member initializer"},{sb,nil,"array bound cannot be deduced from an in-class initializer"}},
[f]=k,
[h]=k,
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:property (.*?)|property (.*?) with type (.*?)|(?:no|\'required\'|\'optional\') property control|property (.*?) with (?:default |)\'(?:none|readonly|getter|assign|readwrite|retain|copy|nonatomic|setter|atomic|weak|strong|unsafe_unretained|nullability|null_resettable|class|direct)\' attribute)",
[c]="array bound cannot be deduced from a default member initializer",
[h]=a,
[f]=a,
[i]={{nil,p,w}},
[e]=C,
[b]={"dcb71b5e1d13",1657144706,"[ODRHash] Hash `ObjCPropertyDecl` and diagnose discovered mismatches.","[ODRHash] Hash `ObjCPropertyDecl` and diagnose discovered mismatches.\n\nDifferential Revision: https://reviews.llvm.org/D130326"},
[g]={"938f40b5aa98",1307812782,"Implement support for C++11 in-class initialization of non-static data members.","Implement support for C++11 in-class initialization of non-static data members.\n\nllvm-svn: 132878"},
[j]={{U,516,"bool ODRDiagsEmitter::diagnoseSubMismatchObjCProperty(const NamedDecl *FirstObjCContainer, StringRef FirstModule, StringRef SecondModule, const ObjCPropertyDecl *FirstProp, const ObjCPropertyDecl *SecondProp) const {\n // ...\n auto DiagError = [FirstObjCContainer, FirstModule, FirstProp, this](SourceLocation Loc, ODRPropertyDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_objc_property) << FirstObjCContainer << FirstModule.empty() << FirstModule << FirstProp->getSourceRange() << DiffType; };"}}
[d]={{U,3111,"/// 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      if (DeclaratorInfo.isArrayOfUnknownBound()) {\n       // ...\n       Diag(Tok, diag::err_incomplete_array_member_init);"}},
},
["err_module_odr_violation_record"]={
[c]={{nil,s,"err_module_odr_violation_record"}},
[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{static assert with condition|static assert with message|static assert with %select{|no }4message|%select{method %5|constructor|destructor}4|%select{method %5|constructor|destructor}4 is %select{not deleted|deleted}6|%select{method %5|constructor|destructor}4 is %select{not defaulted|defaulted}6|%select{method %5|constructor|destructor}4 is %select{|pure }6%select{not virtual|virtual}7|%select{method %5|constructor|destructor}4 is %select{not static|static}6|%select{method %5|constructor|destructor}4 is %select{not volatile|volatile}6|%select{method %5|constructor|destructor}4 is %select{not const|const}6|%select{method %5|constructor|destructor}4 is %select{not inline|inline}6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with%select{out|}7 a default argument|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with a default argument|%select{method %5|constructor|destructor}4 with %select{no |}6template arguments|%select{method %5|constructor|destructor}4 with %6 template argument%s6|%select{method %5|constructor|destructor}4 with %6 for %ordinal7 template argument|%select{method %5|constructor|destructor}4 with %select{no body|body}6|%select{method %5|constructor|destructor}4 with body|friend %select{class|function}4|friend %4|friend function %4|function template %4 with %5 template parameter%s5|function template %4 with %ordinal5 template parameter being a %select{type|non-type|template}6 template parameter|function template %4 with %ordinal5 template parameter %select{with no name|named %7}6|function template %4 with %ordinal5 template parameter with %select{no |}6default argument|function template %4 with %ordinal5 template parameter with default argument %6|function template %4 with %ordinal5 template parameter with one type|function template %4 with %ordinal5 template parameter %select{not |}6being a template parameter pack|}3"},{s,s,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{static assert with condition|static assert with message|static assert with %select{|no }4message|%select{method %5|constructor|destructor}4|%select{method %5|constructor|destructor}4 is %select{not deleted|deleted}6|%select{method %5|constructor|destructor}4 is %select{not defaulted|defaulted}6|%select{method %5|constructor|destructor}4 is %select{|pure }6%select{not virtual|virtual}7|%select{method %5|constructor|destructor}4 is %select{not static|static}6|%select{method %5|constructor|destructor}4 is %select{not volatile|volatile}6|%select{method %5|constructor|destructor}4 is %select{not const|const}6|%select{method %5|constructor|destructor}4 is %select{not inline|inline}6|%select{method %5|constructor|destructor}4 that has %6 parameter%s6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter of type %7%select{| decayed from %9}8|%select{method %5|constructor|destructor}4 with %ordinal6 parameter named %7|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with%select{out|}7 a default argument|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with a default argument|%select{method %5|constructor|destructor}4 with %select{no |}6template arguments|%select{method %5|constructor|destructor}4 with %6 template argument%s6|%select{method %5|constructor|destructor}4 with %6 for %ordinal7 template argument|%select{method %5|constructor|destructor}4 with %select{no body|body}6|%select{method %5|constructor|destructor}4 with body|friend %select{class|function}4|friend %4|friend function %4|function template %4 with %5 template parameter%s5|function template %4 with %ordinal5 template parameter being a %select{type|non-type|template}6 template parameter|function template %4 with %ordinal5 template parameter %select{with no name|named %7}6|function template %4 with %ordinal5 template parameter with %select{no |}6default argument|function template %4 with %ordinal5 template parameter with default argument %6|function template %4 with %ordinal5 template parameter with one type|function template %4 with %ordinal5 template parameter %select{not |}6being a template parameter pack|}3"}},
[e]={{nil,p,{ab,{R,L},Z,{"static assert with condition","static assert with message",{"static assert with ",{a,vb},"message"},{{E,C,B}},{{E,C,B},eb,{"not deleted","deleted"}},{{E,C,B},eb,{"not defaulted","defaulted"}},{{E,C,B},eb,{a,"pure "},{"not virtual","virtual"}},{{E,C,B},eb,{"not static","static"}},{{E,C,B},eb,{"not volatile","volatile"}},{{E,C,B},eb,{"not const","const"}},{{E,C,B},eb,{"not inline","inline"}},{{E,C,B}," with G parameter with",{"out",a}," a default argument"},{{E,C,B}," with G parameter with a default argument"},{{E,C,B}," with ",{vb,a},"template arguments"},{{E,C,B}," with G template argumentG"},{{E,C,B}," with G for H template argument"},{{E,C,B}," with ",{"no body","body"}},{{E,C,B}," with body"},{"friend ",{mb,"function"}},"friend E","friend function E","function template E with F template parameterF",{"function template E with F template parameter being a ",{"type","non-type","template"}," template parameter"},{"function template E with F template parameter ",{"with no name","named H"}},{"function template E with F template parameter with ",{vb,a},dc},"function template E with F template parameter with default argument G","function template E with F template parameter with one type",{"function template E with F template parameter ",{"not ",a},"being a template parameter pack"},a}}},{s,s,{ab,{R,L},Z,{"static assert with condition","static assert with message",{"static assert with ",{a,vb},"message"},{{E,C,B}},{{E,C,B},eb,{"not deleted","deleted"}},{{E,C,B},eb,{"not defaulted","defaulted"}},{{E,C,B},eb,{a,"pure "},{"not virtual","virtual"}},{{E,C,B},eb,{"not static","static"}},{{E,C,B},eb,{"not volatile","volatile"}},{{E,C,B},eb,{"not const","const"}},{{E,C,B},eb,{"not inline","inline"}},{{E,C,B}," that has G parameterG"},{{E,C,B}," with G parameter of type H",{a," decayed from J"}},{{E,C,B}," with G parameter named H"},{{E,C,B}," with G parameter with",{"out",a}," a default argument"},{{E,C,B}," with G parameter with a default argument"},{{E,C,B}," with ",{vb,a},"template arguments"},{{E,C,B}," with G template argumentG"},{{E,C,B}," with G for H template argument"},{{E,C,B}," with ",{"no body","body"}},{{E,C,B}," with body"},{"friend ",{mb,"function"}},"friend E","friend function E","function template E with F template parameterF",{"function template E with F template parameter being a ",{"type","non-type","template"}," template parameter"},{"function template E with F template parameter ",{"with no name","named H"}},{"function template E with F template parameter with ",{vb,a},dc},"function template E with F template parameter with default argument G","function template E with F template parameter with one type",{"function template E with F template parameter ",{"not ",a},"being a template parameter pack"},a}}}},
[f]=k,
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:static assert with condition|static assert with message|static assert with (?:|no )message|(?:method (.*?)|constructor|destructor)|(?:method (.*?)|constructor|destructor) is (?:not deleted|deleted)|(?:method (.*?)|constructor|destructor) is (?:not defaulted|defaulted)|(?:method (.*?)|constructor|destructor) is (?:|pure )(?:not virtual|virtual)|(?:method (.*?)|constructor|destructor) is (?:not static|static)|(?:method (.*?)|constructor|destructor) is (?:not volatile|volatile)|(?:method (.*?)|constructor|destructor) is (?:not const|const)|(?:method (.*?)|constructor|destructor) is (?:not inline|inline)|(?:method (.*?)|constructor|destructor) with (.*?) parameter with(?:out|) a default argument|(?:method (.*?)|constructor|destructor) with (.*?) parameter with a default argument|(?:method (.*?)|constructor|destructor) with (?:no |)template arguments|(?:method (.*?)|constructor|destructor) with (.*?) template argument(.*?)|(?:method (.*?)|constructor|destructor) with (.*?) for (.*?) template argument|(?:method (.*?)|constructor|destructor) with (?:no body|body)|(?:method (.*?)|constructor|destructor) with body|friend (?:class|function)|friend (.*?)|friend function (.*?)|function template (.*?) with (.*?) template parameter(.*?)|function template (.*?) with (.*?) template parameter being a (?:type|non\\-type|template) template parameter|function template (.*?) with (.*?) template parameter (?:with no name|named (.*?))|function template (.*?) with (.*?) template parameter with (?:no |)default argument|function template (.*?) with (.*?) template parameter with default argument (.*?)|function template (.*?) with (.*?) template parameter with one type|function template (.*?) with (.*?) template parameter (?:not |)being a template parameter pack|)",
[h]=a,
[i]={{nil,p,w},{s,s,bb}},
[b]={Yb,1643408541,Xb,Wb},
[j]={{U,960,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n // ...\n auto DiagError = [FirstRecord, &FirstModule, this](SourceLocation Loc, SourceRange Range, ODRCXXRecordDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_record) << FirstRecord << FirstModule.empty() << FirstModule << Range << DiffType; };"}},
[l]={
[l]={
[fc]={
["clang/test/SemaCXX/member-init.cpp"]={"clang/test/SemaCXX/member-init.cpp:24:12: error: array bound cannot be deduced from a default member initializer","clang/test/SemaCXX/member-init.cpp:26:12: error: array bound cannot be deduced from a default member initializer","clang/test/SemaCXX/member-init.cpp:33:12: error: array bound cannot be deduced from a default member initializer","clang/test/SemaCXX/member-init.cpp:36:19: error: array bound cannot be deduced from a default member initializer"}
[1]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:107:25: error: \'StaticAssert::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found static assert with message",
[2]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:121:3: error: \'StaticAssert::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found static assert with no message",
[3]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:135:17: error: \'StaticAssert::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found static assert with condition",
[4]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:442:8: error: \'Method::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'B\'",
[5]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:458:8: error: \'Method::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not static",
[6]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:474:8: error: \'Method::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not virtual",
[7]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:490:16: error: \'Method::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is virtual",
[8]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:505:8: error: \'Method::S6\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not inline",
[9]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:520:8: error: \'Method::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not volatile",
[10]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:536:8: error: \'Method::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' is not const",
[11]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:597:8: error: \'Method::S12\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter without a default argument",
[12]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:611:8: error: \'Method::S13\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'A\' with 1st parameter with a default argument",
[13]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:697:7: error: \'MethodBody::S2\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'BothBodies\' with body",
[14]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:711:7: error: \'MethodBody::S3\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'FirstBody\' with body",
[15]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:725:7: error: \'MethodBody::S4\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'SecondBody\' with no body",
[16]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:743:7: error: \'MethodBody::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'FirstBodySecondOutOfLine\' with no body",
[17]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:754:7: error: \'MethodBody::S6\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'FirstOutOfLineSecondBody\' with no body",
[18]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:789:7: error: \'MethodBody::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'FirstBodySecondOutOfLine\' with no body",
[19]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:800:7: error: \'MethodBody::S9\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found method \'FirstOutOfLineSecondBody\' with no body",
[20]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:816:3: error: \'MethodBody::S10\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found constructor is deleted",
[21]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:831:3: error: \'MethodBody::S11\' has different definitions in different modules; first difference is definition in module \'FirstModule\' found constructor is defaulted",
[22]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:886:8: error: \'Constructor::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'foo\'",
[23]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:945:3: error: \'Destructor::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found constructor",
[24]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:961:3: error: \'Destructor::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found destructor is not virtual",
[25]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1861:8: error: \'TemplateArgument::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with no template arguments",
[26]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1881:19: error: \'TemplateArgument::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with 2 template arguments",
[27]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1899:19: error: \'TemplateArgument::S9\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with \'b\' for 1st template argument",
[28]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1917:19: error: \'TemplateArgument::S10\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with \'b\' for 2nd template argument",
[29]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1935:19: error: \'TemplateArgument::S11\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'run\' with 3 template arguments",
[30]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1951:20: error: \'TemplateArgument::S12\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'f\' with 2 for 1st template argument",
[31]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:1981:20: error: \'TemplateArgument::S14\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'f\' with 0 for 1st template argument",
[32]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2027:20: error: \'TemplateArgument::S17\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'f\' with nullptr for 1st template argument",
[33]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2077:20: error: \'TemplateArgument::S20\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'f\' with 18446744073709551615 for 1st template argument",
[34]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2399:3: error: \'Friend::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found friend \'T1\'",
[35]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2415:3: error: \'Friend::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found friend \'struct T2\'",
[36]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2430:3: error: \'Friend::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found friend function",
[37]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2444:3: error: \'Friend::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found friend function \'T5b\'",
[38]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2990:25: error: \'FunctionTemplate::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter named \'y\'",
[39]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3033:30: error: \'FunctionTemplate::S6\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with no default argument",
[40]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3047:36: error: \'FunctionTemplate::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument \'int\'",
[41]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3065:46: error: \'FunctionTemplate::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument \'T8\'",
[42]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3081:41: error: \'FunctionTemplate::S9\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with no default argument",
[43]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3096:46: error: \'FunctionTemplate::S10\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with one type",
[44]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3111:39: error: \'FunctionTemplate::S11\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with no name",
[45]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3126:32: error: \'FunctionTemplate::S12\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 2 template parameters",
[46]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3141:32: error: \'FunctionTemplate::S13\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument \'void\'",
[47]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3155:25: error: \'FunctionTemplate::S14\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with no default argument",
[48]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3169:32: error: \'FunctionTemplate::S15\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument",
[49]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3183:29: error: \'FunctionTemplate::S16\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument",
[50]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3197:33: error: \'FunctionTemplate::S17\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with default argument 1 + 1",
[51]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3212:23: error: \'FunctionTemplate::S18\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter with one type",
[52]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3228:28: error: \'FunctionTemplate::S19\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a template parameter pack",
[53]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3244:28: error: \'FunctionTemplate::S20\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a template parameter pack",
[54]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3260:41: error: \'FunctionTemplate::S21\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter not being a template parameter pack",
[55]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3277:25: error: \'FunctionTemplate::S22\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a type template parameter",
[56]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3295:23: error: \'FunctionTemplate::S23\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a non-type template parameter",
[57]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3313:41: error: \'FunctionTemplate::S24\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found function template \'foo\' with 1st template parameter being a template template parameter",
[58]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:4633:10: error: \'DefaultArguments::S::R\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'foo\' with 1st parameter with a default argument",
[59]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:4652:8: error: \'DefaultArguments::Bravo\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found method \'charlie\' with 1st parameter with a default argument"
}
}
}
},
},
["err_module_odr_violation_referenced_protocols"]={
["err_incomplete_base_class"]={
[c]={{nil,p,"err_module_odr_violation_referenced_protocols"}},
[b]="err_incomplete_base_class",
[d]={{nil,p,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%4 referenced %plural{1:protocol|:protocols}4|%ordinal4 referenced protocol with name %5}3"}},
[i]="base class has incomplete type",
[e]={{nil,p,{ab,{R,L},Z,{{"E referenced ",{"protocol","protocols"}},"E referenced protocol with name F"}}}},
[j]="base class has incomplete type",
[f]=k,
[h]=k,
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(.*?) referenced (?:protocol|protocols)|(.*?) referenced protocol with name (.*?))",
[c]="base class has incomplete type",
[h]=a,
[f]=a,
[i]={{nil,p,w}},
[e]=m,
[b]={Yb,1643408541,Xb,Wb},
[g]={x,1237025389,y,z},
[j]={{U,375,"bool ODRDiagsEmitter::diagnoseSubMismatchProtocols(const ObjCProtocolList &FirstProtocols, const ObjCContainerDecl *FirstContainer, StringRef FirstModule, const ObjCProtocolList &SecondProtocols, const ObjCContainerDecl *SecondContainer, StringRef SecondModule) const {\n // ...\n auto DiagRefProtocolError = [FirstContainer, FirstModule, this](SourceLocation Loc, SourceRange Range, ODRReferencedProtocolDifference DiffType) { return Diag(Loc, diag::err_module_odr_violation_referenced_protocols) << FirstContainer << FirstModule.empty() << FirstModule << Range << DiffType; };"}}
[d]={{t,2738,"/// 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  if (RequireCompleteType(BaseLoc, BaseType, diag::err_incomplete_base_class, SpecifierRange)) {"}},
},
["err_module_odr_violation_template_parameter"]={
[c]={{nil,t,"err_module_odr_violation_template_parameter"}},
[d]={{nil,s,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{unnamed template parameter|template parameter %5|template parameter with %select{no |}4default argument|template parameter with default argument}3"},{S,t,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{unnamed template parameter|template parameter %4|template parameter with %select{no |}4default argument|template parameter with default argument}3"}},
[e]={{nil,s,{ab,{R,L},Z,{"unnamed template parameter","template parameter F",{"template parameter with ",{vb,a},dc},"template parameter with default argument"}}},{S,t,{ab,{R,L},Z,{"unnamed template parameter","template parameter E",{"template parameter with ",{vb,a},dc},"template parameter with default argument"}}}},
[f]=k,
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:unnamed template parameter|template parameter (.*?)|template parameter with (?:no |)default argument|template parameter with default argument)",
[h]=a,
[i]={{nil,p,w},{s,t,bb}},
[b]={"498117bf11d8",1503456239,"[ODRHash] Diagnose differing template parameters.","[ODRHash] Diagnose differing template parameters.\n\nllvm-svn: 311519"},
[j]={{U,880,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // ...\n  if (FirstTemplate && SecondTemplate) {\n    // ...\n    for (auto Pair : llvm::zip(FirstTemplateParams, SecondTemplateParams)) {\n      // ...\n      Diag(FirstDecl->getLocation(), diag::err_module_odr_violation_template_parameter) << FirstRecord << FirstModule.empty() << FirstModule << FirstDecl->getSourceRange() << ErrDiffType << hasFirstArg << FirstName;"}},
[l]={
[l]={
[fc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2490:17: error: \'TemplateParameters::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter \'B\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2502:17: error: \'TemplateParameters::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2514:17: error: \'TemplateParameters::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with no default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2526:15: error: \'TemplateParameters::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2540:31: error: \'TemplateParameters::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2552:16: error: \'TemplateParameters::S6\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found unnamed template parameter","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2564:15: error: \'TemplateParameters::S7\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2577:16: error: \'TemplateParameters::S8\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found template parameter with default argument"}
["clang/test/SemaTemplate/class-template-id-2.cpp"]={"clang/test/SemaTemplate/class-template-id-2.cpp:14:19: error: base class has incomplete type"}
}
}
},
},
["err_module_odr_violation_typedef"]={
["err_incomplete_enum"]={
[c]={{nil,s,"err_module_odr_violation_typedef"}},
[b]={{nil,w,"err_incomplete_enum"}},
[d]={{nil,s,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{%select{typedef|type alias}4 name %5|%select{typedef|type alias}4 %5 with underlying type %6}3"}},
[i]={{nil,w,"enumeration %0 is incomplete"}},
[e]={{nil,s,{ab,{R,L},Z,{{{yb,Eb}," name F"},{{yb,Eb}," F with underlying type G"}}}}},
[j]={{nil,w,"enumeration A is incomplete"}},
[f]=k,
[h]=k,
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:(?:typedef|type alias) name (.*?)|(?:typedef|type alias) (.*?) with underlying type (.*?))",
[c]="enumeration (.*?) is incomplete",
[h]=a,
[f]=a,
[i]={{nil,p,w},{s,s,bb}},
[e]={{nil,w,m}},
[b]={Yb,1643408541,Xb,Wb},
[g]={"3dbcea8b957a",1615397021,"Reland [clang] Check unsupported types in expressions","Reland [clang] Check unsupported types in expressions\n\nThis was committed as ec6c847179fd, but then reverted after a failure\nin: https://lab.llvm.org/buildbot/#/builders/84/builds/13983\n\nI was not able to reproduce the problem, but I added an extra check\nfor a NULL QualType just in case.\n\nOriginal comit message:\n\nThe patch adds missing diagnostics for cases like:\n\n  float F3 = ((__float128)F1 * (__float128)F2) / 2.0f;\n\nSema::checkDeviceDecl (renamed to checkTypeSupport) is changed to work\nwith a type without the corresponding ValueDecl. It is also refactored\nso that host diagnostics for unsupported types can be added here as\nwell.\n\nDifferential Revision: https://reviews.llvm.org/D109315"},
[j]={{U,258,"bool ODRDiagsEmitter::diagnoseSubMismatchTypedef(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const TypedefNameDecl *FirstTD, const TypedefNameDecl *SecondTD, bool IsTypeAlias) const {\n  // ...\n  auto DiagError = [FirstRecord, FirstTD, FirstModule, this](ODRTypedefDifference DiffType) { return Diag(FirstTD->getLocation(), diag::err_module_odr_violation_typedef) << FirstRecord << FirstModule.empty() << FirstModule << FirstTD->getSourceRange() << DiffType; };"}},
[d]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",299,"/// Require that the EnumDecl is completed with its enumerators defined or\n/// instantiated. SS, if provided, is the ScopeRef parsed.\n///\nbool Sema::RequireCompleteEnumDecl(EnumDecl *EnumD, SourceLocation L, CXXScopeSpec *SS) {\n  // ...\n  if (SS) {\n  // ...\n  } else {\n    Diag(L, diag::err_incomplete_enum) << QualType(EnumD->getTypeForDecl(), 0);"}},
[l]={
[l]={
["clang/test/Modules/odr_hash.mm"]={"build/tools/clang/test/Modules/Output/odr_hash.mm.tmp/Inputs/second.h:207:9: error: \'Types::ObjCObject::Invalid3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found type alias \'T\' with underlying type \'Interface2<P1>\'"}
["clang/test/SemaCXX/cxx20-using-enum.cpp"]={"clang/test/SemaCXX/cxx20-using-enum.cpp:76:20: error: enumeration \'Three::Stuart::C\' is incomplete"}
}
}
},
},
["err_module_odr_violation_variable"]={
["err_incomplete_in_exception_spec"]={
[c]={{nil,s,"err_module_odr_violation_variable"}},
[b]="err_incomplete_in_exception_spec",
[d]={{nil,s,"%q0 has different definitions in different modules; first difference is %select{definition in module \'%2\'|defined here}1 found %select{data member with name %4|data member %4 with type %5|data member %4 with%select{out|}5 an initializer|data member %4 with an initializer|data member %4 %select{is constexpr|is not constexpr}5}3"}},
[i]="%select{|pointer to |reference to }0incomplete type %1 is not allowed in exception specification",
[e]={{nil,s,{ab,{R,L},Z,{"data member with name E","data member E with type F",{"data member E with",{"out",a}," an initializer"},"data member E with an initializer",{"data member E ",{"is constexpr","is not constexpr"}}}}}},
[j]={{nil,nil,{{a,"pointer to ","reference to "},"incomplete type B is not allowed in exception specification"}}},
[f]=k,
[h]=k,
[g]="(.*?) has different definitions in different modules; first difference is (?:definition in module \'(.*?)\'|defined here) found (?:data member with name (.*?)|data member (.*?) with type (.*?)|data member (.*?) with(?:out|) an initializer|data member (.*?) with an initializer|data member (.*?) (?:is constexpr|is not constexpr))",
[c]="(?:|pointer to |reference to )incomplete type (.*?) is not allowed in exception specification",
[h]=a,
[f]=a,
[i]={{nil,p,w},{s,s,bb}},
[e]=m,
[b]={Yb,1643408541,Xb,Wb},
[g]={"d643456d450a",1243620153,"Reject incomplete types in exception specs.","Reject incomplete types in exception specs.\n\nllvm-svn: 72580"},
[j]={{U,302,"bool ODRDiagsEmitter::diagnoseSubMismatchVar(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const VarDecl *FirstVD, const VarDecl *SecondVD) const {\n  // ...\n  auto DiagError = [FirstRecord, FirstVD, FirstModule, this](ODRVarDifference DiffType) { return Diag(FirstVD->getLocation(), diag::err_module_odr_violation_variable) << FirstRecord << FirstModule.empty() << FirstModule << FirstVD->getSourceRange() << DiffType; };"}},
[d]={{"clang/lib/Sema/SemaExceptionSpec.cpp",165,"/// 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  unsigned DiagID = diag::err_incomplete_in_exception_spec;"}},
[l]={
[l]={
[fc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2235:14: error: \'VarDecl::S1\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member with name \'y\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2251:12: error: \'VarDecl::S2\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' with type \'I\' (aka \'int\')","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2265:20: error: \'VarDecl::S3\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' with an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2279:20: error: \'VarDecl::S4\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' with an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:2293:24: error: \'VarDecl::S5\' has different definitions in different modules; first difference is definition in module \'SecondModule\' found data member \'x\' is not constexpr"}
["clang/test/CXX/except/except.spec/p2-dynamic-types.cpp"]={"clang/test/CXX/except/except.spec/p2-dynamic-types.cpp:9:18: error: incomplete type \'void\' is not allowed in exception specification","clang/test/CXX/except/except.spec/p2-dynamic-types.cpp:10:18: error: incomplete type \'Incomplete\' is not allowed in exception specification","clang/test/CXX/except/except.spec/p2-dynamic-types.cpp:12:18: error: pointer to incomplete type \'Incomplete\' is not allowed in exception specification","clang/test/CXX/except/except.spec/p2-dynamic-types.cpp:13:18: error: reference to incomplete type \'Incomplete\' is not allowed in exception specification"}
}
}
},
},
["err_module_prebuilt"]={
["err_incomplete_member_access"]={
[c]="err_module_prebuilt",
[b]="err_incomplete_member_access",
[d]="error in loading module \'%0\' from prebuilt module path",
[i]="member access into incomplete type %0",
[e]="error in loading module \'A\' from prebuilt module path",
[j]="member access into incomplete type A",
[f]=V,
[h]=k,
[g]="error in loading module \'(.*?)\' from prebuilt module path",
[c]="member access into incomplete type (.*?)",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={"11f2a477721c",1471542135,"Module: add -fprebuilt-module-path to support loading prebuilt modules.","Module: add -fprebuilt-module-path to support loading prebuilt modules.\n\nIn this mode, there is no need to load any module map and the programmer can\nsimply use \"@import\" syntax to load the module directly from a prebuilt\nmodule path. When loading from prebuilt module path, we don\'t support\nrebuilding of the module files and we ignore compatible configuration\nmismatches.\n\nrdar://27290316\nDifferential Revision: http://reviews.llvm.org/D23125\n\nllvm-svn: 279096"},
[g]={"3fad61786e7c",1258435053,"Require the object type of a member access expression (\".\" or \"->\") to","Require the object type of a member access expression (\".\" or \"->\") to\nbe complete.\n\nllvm-svn: 89042"},
[j]={{wb,1880,"ModuleLoadResult CompilerInstance::findOrCompileModuleAndReadAST(StringRef ModuleName, SourceLocation ImportLoc, SourceLocation ModuleNameLoc, bool IsInclusionDirective) {\n  // ...\n  case ASTReader::Success: {\n    // ...\n    getDiagnostics().Report(ModuleNameLoc, diag::err_module_prebuilt) << ModuleName;"}}
[d]={{I,7675,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // ...\n  if (!BaseType->isDependentType() && !isThisOutsideMemberFunctionBody(BaseType) && RequireCompleteType(OpLoc, BaseType, diag::err_incomplete_member_access)) {"}},
},
["err_module_private_local"]={
[c]="err_module_private_local",
[d]="%select{local variable|parameter|typedef}0 %1 cannot be declared __module_private__",
[e]={{nil,nil,{{"local variable","parameter",yb}," B cannot be declared __module_private__"}}},
[f]=k,
[g]="(?:local variable|parameter|typedef) (.*?) cannot be declared __module_private__",
[h]=a,
[i]=O,
[b]={"41866816ce5c",1315852658,"Diagnose attempt to mark function-local declarations as __module_private__.","Diagnose attempt to mark function-local declarations as __module_private__.\n\nllvm-svn: 139519"},
[j]={{o,7846,"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().isModulePrivateSpecified()) {\n    if (IsVariableTemplateSpecialization)\n    // ...\n    else if (IsMemberSpecialization)\n    // ...\n    else if (NewVD->hasLocalStorage())\n      Diag(NewVD->getLocation(), diag::err_module_private_local) << 0 << NewVD << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{o,14816,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified())\n    Diag(New->getLocation(), diag::err_module_private_local) << 1 << New << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{o,16431,"TypedefDecl *Sema::ParseTypedefDecl(Scope *S, Declarator &D, QualType T, TypeSourceInfo *TInfo) {\n  // ...\n  if (D.getDeclSpec().isModulePrivateSpecified()) {\n    if (CurContext->isFunctionOrMethod())\n      Diag(NewTD->getLocation(), diag::err_module_private_local) << 2 << NewTD << SourceRange(D.getDeclSpec().getModulePrivateSpecLoc()) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"}},
[l]={
[l]={
["clang/test/Modules/module-private.cpp"]={"clang/test/Modules/module-private.cpp:79:47: error: parameter \'param\' cannot be declared __module_private__","clang/test/Modules/module-private.cpp:80:49: error: local variable \'local\' cannot be declared __module_private__","clang/test/Modules/module-private.cpp:82:27: error: local variable \'[x, y]\' cannot be declared __module_private__","clang/test/Modules/module-private.cpp:86:34: error: typedef \'local_typedef\' cannot be declared __module_private__","clang/test/Modules/module-private.cpp:89:42: error: parameter \'\' cannot be declared __module_private__"}
["clang/test/SemaTemplate/class-template-spec.cpp"]={"clang/test/SemaTemplate/class-template-spec.cpp:24:11: error: member access into incomplete type \'A<double, double>\'"}
}
}
},
},
["err_module_private_local_class"]={
["err_incomplete_nested_name_spec"]={
[c]="err_module_private_local_class",
[b]="err_incomplete_nested_name_spec",
[d]="local %select{struct|interface|union|class|enum}0 cannot be declared __module_private__",
[i]="incomplete type %0 named in nested name specifier",
[e]={{nil,nil,{"local ",{"struct","interface","union",mb,"enum"}," cannot be declared __module_private__"}}},
[j]="incomplete type A named in nested name specifier",
[f]=k,
[h]=k,
[g]="local (?:struct|interface|union|class|enum) cannot be declared __module_private__",
[c]="incomplete type (.*?) named in nested name specifier",
[h]=a,
[f]=a,
[i]=O,
[e]=m,
[b]={"41866816ce5c",1315852658,"Diagnose attempt to mark function-local declarations as __module_private__.","Diagnose attempt to mark function-local declarations as __module_private__.\n\nllvm-svn: 139519"},
[g]={x,1237025389,y,z},
[j]={{o,5247,"/// 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.isModulePrivateSpecified() && Tag && Tag->getDeclContext()->isFunctionOrMethod())\n    Diag(DS.getModulePrivateSpecLoc(), diag::err_module_private_local_class) << Tag->getTagKind() << FixItHint::CreateRemoval(DS.getModulePrivateSpecLoc());"}},
[d]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",244,"/// Require that the context specified by SS be complete.\n///\n/// If SS refers to a type, this routine checks whether the type is\n/// complete enough (or can be made complete enough) for name lookup\n/// into the DeclContext. A type that is not yet completed can be\n/// considered \"complete enough\" if it is a class/struct/union/enum\n/// that is currently being defined. Or, if we have a type that names\n/// a class template specialization that is not a complete type, we\n/// will attempt to instantiate that class template.\nbool Sema::RequireCompleteDeclContext(CXXScopeSpec &SS, DeclContext *DC) {\n  // ...\n  if (RequireCompleteType(loc, type, diag::err_incomplete_nested_name_spec, SS.getRange())) {"},{"clang/lib/Sema/SemaCXXScopeSpec.cpp",295,"/// Require that the EnumDecl is completed with its enumerators defined or\n/// instantiated. SS, if provided, is the ScopeRef parsed.\n///\nbool Sema::RequireCompleteEnumDecl(EnumDecl *EnumD, SourceLocation L, CXXScopeSpec *SS) {\n  // ...\n  if (SS) {\n    Diag(L, diag::err_incomplete_nested_name_spec) << QualType(EnumD->getTypeForDecl(), 0) << SS->getRange();"},{I,131,"ParsedType Sema::getConstructorName(IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, bool EnteringContext) {\n  // ...\n  if (!InjectedClassName) {\n    if (!CurClass->isInvalidDecl()) {\n      // ...\n      Diag(SS.getLastQualifierNameLoc(), diag::err_incomplete_nested_name_spec) << CurClass << SS.getRange();"}},
[l]={
[l]={
["clang/test/Modules/module-private.cpp"]={"clang/test/Modules/module-private.cpp:84:3: error: local struct cannot be declared __module_private__"}
["clang/test/CXX/temp/temp.spec/temp.explicit/p3.cpp"]={"clang/test/CXX/temp/temp.spec/temp.explicit/p3.cpp:15:15: error: incomplete type \'X0\' named in nested name specifier"}
}
}
},
},
["err_module_private_specialization"]={
["err_incomplete_object_call"]={
[c]="err_module_private_specialization",
[b]="err_incomplete_object_call",
[d]="%select{template|partial|member}0 specialization cannot be declared __module_private__",
[i]="incomplete type in call to object of type %0",
[e]={{nil,nil,{{"template","partial","member"}," specialization cannot be declared __module_private__"}}},
[j]="incomplete type in call to object of type A",
[f]=k,
[h]=k,
[g]="(?:template|partial|member) specialization cannot be declared __module_private__",
[c]="incomplete type in call to object of type (.*?)",
[h]=a,
[f]=a,
[i]=O,
[e]=m,
[b]={"3c7cd6a0c448",1315601618,"Specializations cannot be module-hidden. Diagnose attempts to do so.","Specializations cannot be module-hidden. Diagnose attempts to do so.\n\nllvm-svn: 139406"},
[g]={"74ba25ca5a34",1256105919,"Improve diagnostics and template instantiation behavior when calling","Improve diagnostics and template instantiation behavior when calling\nan overloaded function call operator.\n\nllvm-svn: 84745"},
[j]={{o,7837,"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().isModulePrivateSpecified()) {\n    if (IsVariableTemplateSpecialization)\n      Diag(NewVD->getLocation(), diag::err_module_private_specialization) << (IsPartialSpecialization ? 1 : 0) << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{o,7842,"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().isModulePrivateSpecified()) {\n    if (IsVariableTemplateSpecialization)\n    // ...\n    else if (IsMemberSpecialization)\n      Diag(NewVD->getLocation(), diag::err_module_private_specialization) << 2 << FixItHint::CreateRemoval(D.getDeclSpec().getModulePrivateSpecLoc());"},{o,9989,"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 __module_private__ was specified, mark the function accordingly.\n    if (D.getDeclSpec().isModulePrivateSpecified()) {\n      if (isFunctionTemplateSpecialization) {\n       // ...\n        Diag(ModulePrivateLoc, diag::err_module_private_specialization) << 0 << FixItHint::CreateRemoval(ModulePrivateLoc);"},{o,17605,"CreateNewDecl:\n  // ...\n  if (ModulePrivateLoc.isValid()) {\n    if (isMemberSpecialization)\n      Diag(New->getLocation(), diag::err_module_private_specialization) << 2 << FixItHint::CreateRemoval(ModulePrivateLoc);"},{Y,8921,"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 (ModulePrivateLoc.isValid())\n    Diag(Specialization->getLocation(), diag::err_module_private_specialization) << (isPartialSpecialization ? 1 : 0) << FixItHint::CreateRemoval(ModulePrivateLoc);"}},
[d]={{"clang/lib/Sema/SemaOverload.cpp",14976,"/// BuildCallToObjectOfClassType - Build a call to an object of class\n/// type (C++ [over.call.object]), which can end up invoking an\n/// overloaded function call operator (@c operator()) or performing a\n/// user-defined conversion on the object argument.\nExprResult Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc) {\n  // ...\n  if (RequireCompleteType(LParenLoc, Object.get()->getType(), diag::err_incomplete_object_call, Object.get()))"}},
[l]={
[l]={
["clang/test/Modules/module-private.cpp"]={"clang/test/Modules/module-private.cpp:56:12: error: template specialization cannot be declared __module_private__","clang/test/Modules/module-private.cpp:67:57: error: member specialization cannot be declared __module_private__","clang/test/Modules/module-private.cpp:68:54: error: member specialization cannot be declared __module_private__","clang/test/Modules/module-private.cpp:71:27: error: template specialization cannot be declared __module_private__","clang/test/Modules/module-private.cpp:74:27: error: partial specialization cannot be declared __module_private__"}
["clang/test/SemaCXX/incomplete-call.cpp"]={"clang/test/SemaCXX/incomplete-call.cpp:50:4: error: incomplete type in call to object of type \'C\'"}
}
}
},
},
["err_module_rebuild_finalized"]={
["err_incomplete_receiver_type"]={
[c]={{nil,u,"err_module_rebuild_finalized"}},
[b]="err_incomplete_receiver_type",
[d]={{nil,u,"cannot rebuild module \'%0\' as it is already finalized"}},
[i]="incomplete receiver type %0",
[e]={{nil,u,"cannot rebuild module \'A\' as it is already finalized"}},
[j]="incomplete receiver type A",
[f]=V,
[h]=k,
[g]="cannot rebuild module \'(.*?)\' as it is already finalized",
[c]="incomplete receiver type (.*?)",
[h]=a,
[f]=a,
[i]={{nil,u,y}},
[e]=m,
[b]={"ff13189c5d0d",1624436334,"[RISCV] Unify the arch string parsing logic to to RISCVISAInfo.","[RISCV] Unify the arch string parsing logic to to RISCVISAInfo.\n\nHow many place you need to modify when implementing a new extension for RISC-V?\n\nAt least 7 places as I know:\n\n- Add new SubtargetFeature at RISCV.td\n- -march parser in RISCV.cpp\n- RISCVTargetInfo::initFeatureMap@RISCV.cpp for handling feature vector.\n- RISCVTargetInfo::getTargetDefines@RISCV.cpp for pre-define marco.\n- Arch string parser for ELF attribute in RISCVAsmParser.cpp\n- ELF attribute emittion in RISCVAsmParser.cpp, and make sure it\'s in\n canonical order...\n- ELF attribute emittion in RISCVTargetStreamer.cpp, and again, must in\n canonical order...\n\nAnd now, this patch provide an unified infrastructure for handling (almost)\neverything of RISC-V arch string.\n\nAfter this patch, you only need to update 2 places for implement an extension\nfor RISC-V:\n- Add new SubtargetFeature at RISCV.td, hmmm, it\'s hard to avoid.\n- Add new entry to RISCVSupportedExtension@RISCVISAInfo.cpp or\n SupportedExperimentalExtensions@RISCVISAInfo.cpp .\n\nMost codes are come from existing -march parser, but with few new feature/bug\nfixes:\n- Accept version for -march, e.g. -march=rv32i2p0.\n- Reject version info with `p` but without minor version number like `rv32i2p`.\n\nDifferential Revision: https://reviews.llvm.org/D105168"},
[g]={"4b60a1594d2c",1383863694,"Re-instate contextual conversion to Objective-C pointers in message sends.","Re-instate contextual conversion to Objective-C pointers in message sends.\n\nWhen performing an Objective-C message send to a value of class type,\nperform a contextual conversion to an Objective-C pointer type. We\'ve\nhad this for a long time, but it recently regressed. Fixes\n<rdar://problem/15234703>.\n\nllvm-svn: 194224"},
[j]={{wb,1162,"/// Compile a module file for the given module, using the options\n/// provided by the importing compiler instance. Returns true if the module\n/// was built without errors.\nstatic bool compileModuleImpl(\n  // ...\n  // Never compile a module that\'s already finalized - this would cause the\n // existing module to be freed, causing crashes if it is later referenced\n if (ImportingInstance.getModuleCache().isPCMFinal(ModuleFileName)) {\n    ImportingInstance.getDiagnostics().Report(ImportLoc, diag::err_module_rebuild_finalized) << ModuleName;"}}
[d]={{bb,2930,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  // If we have a receiver expression, perform appropriate promotions\n  // and determine receiver type.\n  if (Receiver) {\n    // ...\n    // If the receiver is an ObjC pointer, a block pointer, or an\n    // __attribute__((NSObject)) pointer, we don\'t need to do any\n   // special conversion in order to look up a receiver.\n    if (ReceiverType->isObjCRetainableType()) {\n    // ...\n   } else if (!getLangOpts().ObjCAutoRefCount && !Context.getObjCIdType().isNull() && (ReceiverType->isPointerType() || ReceiverType->isIntegerType())) {\n    // ...\n    } else if (getLangOpts().CPlusPlus) {\n      // ...\n      if (RequireCompleteType(Loc, Receiver->getType(), diag::err_incomplete_receiver_type))"},{"clang/lib/Sema/SemaStmt.cpp",4312,"ExprResult Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {\n  // ...\n  if (!type->isDependentType() && !type->isObjCObjectPointerType()) {\n    // ...\n    if (!pointerType || !pointerType->getPointeeType()->isVoidType()) {\n     if (getLangOpts().CPlusPlus) {\n       if (RequireCompleteType(atLoc, type, diag::err_incomplete_receiver_type))"}},
},
["err_module_redeclaration"]={
[c]={{nil,t,"err_module_redeclaration"}},
[d]={{nil,t,"translation unit contains multiple module declarations"}},
[e]={{nil,t,"translation unit contains multiple module declarations"}},
[f]=k,
[g]="translation unit contains multiple module declarations",
[h]=a,
[i]={{nil,t,O}},
[b]={"18057cb34c83",1507682216,"[Modules TS] Diagnose missing/duplicate module-declaration.","[Modules TS] Diagnose missing/duplicate module-declaration.\n\nllvm-svn: 315397"},
[j]={{nb,236,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  // Only one module-declaration is permitted per source file.\n if (isCurrentModulePurview()) {\n   Diag(ModuleLoc, diag::err_module_redeclaration);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p3.cpp"]={"clang/test/CXX/basic/basic.link/p3.cpp:32:1: error: translation unit contains multiple module declarations"}
["clang/test/SemaObjCXX/contextual-convert-to-id.mm"]={"clang/test/SemaObjCXX/contextual-convert-to-id.mm:37:4: error: incomplete receiver type \'Incomplete\'"}
}
}
},
},
["err_module_redefinition"]={
["err_incomplete_synthesized_property"]={
[c]="err_module_redefinition",
[b]="err_incomplete_synthesized_property",
[d]="redefinition of module \'%0\'",
[i]="cannot synthesize property %0 with incomplete type %1",
[e]="redefinition of module \'A\'",
[j]="cannot synthesize property A with incomplete type B",
[f]=k,
[h]=k,
[g]="redefinition of module \'(.*?)\'",
[c]="cannot synthesize property (.*?) with incomplete type (.*?)",
[h]=a,
[f]=a,
[i]=O,
[e]=m,
[b]={"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\ninterface files. At the moment, all declarations (and no macros) are exported,\nand \'export\' declarations are not supported yet.\n\nllvm-svn: 279794"},
[g]={"169ec35bb3b2",1335911166,"Add a missing RequireCompleteType call when synthesizing properties<rdar://problem/11333367>.","Add a missing RequireCompleteType call when synthesizing properties. <rdar://problem/11333367>.\n\nWhile I\'m here, fix source locations for other diagnostics related to property synthesis.\n\nllvm-svn: 155953"},
[j]={{nb,313,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  case ModuleDeclKind::Interface:\n  case ModuleDeclKind::PartitionInterface: {\n    // We can\'t have parsed or imported a definition of this module or parsed a\n    // module map defining it already.\n    if (auto *M = Map.findModule(ModuleName)) {\n      Diag(Path[0].second, diag::err_module_redefinition) << ModuleName;"}}
[d]={{"clang/lib/Sema/SemaObjCProperty.cpp",1217,"/// 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   if (RequireCompleteType(PropertyDiagLoc, PropertyIvarType, diag::err_incomplete_synthesized_property, property->getDeclName())) {"}},
},
["err_module_self_import"]={
[c]="err_module_self_import",
[d]="import of module \'%0\' appears within same top-level module \'%1\'",
[e]="import of module \'A\' appears within same top-level module \'B\'",
[f]=k,
[g]="import of module \'(.*?)\' appears within same top\\-level module \'(.*?)\'",
[h]=a,
[i]=O,
[b]={"527040e0c87a",1399267893,"Make module self-import an error","Make module self-import an error\n\nIdeally, importing Foo.a from Foo.b would \"do the right thing\", but\nuntil it does, this patch makes it an error rather than allow it to\nsilently be ignored.\n\nllvm-svn: 207948"},
[j]={{nb,563,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, Module *Mod, ModuleIdPath Path) {\n  // ...\n // FIXME: we should support importing a submodule within a different submodule\n  // of the same top-level module. Until we do, make it an error rather than\n  // silently ignoring the import.\n  // FIXME: Should we warn on a redundant import of the current module?\n  if (Mod->isForBuilding(getLangOpts())) {\n    Diag(ImportLoc, getLangOpts().isCompilingModule() ? diag::err_module_self_import : diag::err_module_import_in_implementation) << Mod->getFullModuleName() << getLangOpts().CurrentModule;"}}
},
["err_module_self_import_cxx20"]={
[c]={{nil,s,"err_module_self_import_cxx20"}},
[d]={{nil,s,"import of module \'%0\' appears within its own %select{interface|implementation}1"}},
[e]={{nil,s,{"import of module \'A\' appears within its own ",{"interface","implementation"}}}},
[f]=k,
[g]="import of module \'(.*?)\' appears within its own (?:interface|implementation)",
[h]=a,
[i]={{nil,s,O}},
[b]={"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.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[j]={{nb,525,"DeclResult Sema::ActOnModuleImport(SourceLocation StartLoc, SourceLocation ExportLoc, SourceLocation ImportLoc, ModuleIdPath Path, bool IsPartition) {\n  // ...\n  if (getLangOpts().CPlusPlusModules && isCurrentModulePurview() && getCurrentModule()->Name == ModuleName) {\n    Diag(ImportLoc, diag::err_module_self_import_cxx20) << ModuleName << !ModuleScopes.back().ModuleInterface;"}}
},
["err_module_shadowed"]={
[c]={{nil,q,"err_module_shadowed"}},
[d]={{nil,q,"import of shadowed module \'%0\'"}},
[e]={{nil,q,"import of shadowed module \'A\'"}},
[f]=V,
[g]="import of shadowed module \'(.*?)\'",
[h]=a,
[i]={{nil,q,y}},
[b]={"b6ec4a33fb2b",1515032260,"[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones","[Modules] Allow modules specified by -fmodule-map-file to shadow implicitly found ones\n\nWhen modules come from module map files explicitly specified by\n-fmodule-map-file= arguments, allow those to override/shadow modules\nwith the same name that are found implicitly by header search. If such a\nmodule is looked up by name (e.g. @import), we will always find the one\nfrom -fmodule-map-file. If we try to use a shadowed module by including\none of its headers report an error.\n\nThis enables developers to force use of a specific copy of their module\nto be used if there are multiple copies that would otherwise be visible,\nfor example if they develop modules that are installed in the default\nsearch paths.\n\nPatch originally by Ben Langmuir,\nhttp://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20151116/143425.html\n\nBased on cfe-dev discussion:\nhttp://lists.llvm.org/pipermail/cfe-dev/2015-November/046164.html\n\nDifferential Revision: https://reviews.llvm.org/D31269\n\nrdar://problem/23612102\n\nllvm-svn: 321781"},
[j]={{"clang/lib/Lex/PPDirectives.cpp",1910,"bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M) {\n  // ...\n  if (MissingHeader.FileNameLoc.isValid()) {\n // ...\n } else if (ShadowingModule) {\n    Diags.Report(M->DefinitionLoc, diag::err_module_shadowed) << M->Name;"}},
[l]={
[l]={
["clang/test/Modules/shadow.m"]={"clang/test/Modules/Inputs/shadow/A2/module.modulemap:1:8: fatal error: import of shadowed module \'A\'"}
["clang/test/SemaObjCXX/property-synthesis-error.mm"]={"clang/test/SemaObjCXX/property-synthesis-error.mm:84:13: error: cannot synthesize property \'y\' with incomplete type \'IncompleteStruct\'","clang/test/SemaObjCXX/property-synthesis-error.mm:83:1: error: cannot synthesize property \'x\' with incomplete type \'IncompleteStruct\'"}
}
}
},
},
["err_module_unable_to_hash_content"]={
["err_incomplete_type"]={
[c]={{nil,n,"err_module_unable_to_hash_content"}},
[b]="err_incomplete_type",
[d]={{nil,n,"failed to hash content for \'%0\' because memory buffer cannot be retrieved"}},
[i]="incomplete type %0 where a complete type is required",
[e]={{nil,n,"failed to hash content for \'A\' because memory buffer cannot be retrieved"}},
[j]="incomplete type A where a complete type is required",
[f]=k,
[h]=k,
[g]="failed to hash content for \'(.*?)\' because memory buffer cannot be retrieved",
[c]="incomplete type (.*?) where a complete type is required",
[h]=a,
[f]=a,
[i]={{nil,n,"AST Serialization Issue"}},
[e]=m,
[b]={"2a1386c81de5",1571094123,"[Modules][PCH] Hash input files content","[Modules][PCH] Hash input files content\n\nSummary:\nWhen files often get touched during builds, the mtime based validation\nleads to different problems in implicit modules builds, even when the\ncontent doesn\'t actually change:\n\n- Modules only: module invalidation due to out of date files. Usually causing rebuild traffic.\n- Modules + PCH: build failures because clang cannot rebuild a module if it comes from building a PCH.\n- PCH: build failures because clang cannot rebuild a PCH in case one of the input headers has different mtime.\n\nThis patch proposes hashing the content of input files (headers and\nmodule maps), which is performed during serialization time. When looking\nat input files for validation, clang only computes the hash in case\nthere\'s a mtime mismatch.\n\nI\'ve tested a couple of different hash algorithms availble in LLVM in\nface of building modules+pch for `#import <Cocoa/Cocoa.h>`:\n- `hash_code`: performace diff within the noise, total module cache increased by 0.07%.\n- `SHA1`: 5% slowdown. Haven\'t done real size measurements, but it\'d be BLOCK_ID+20 bytes per input file, instead of BLOCK_ID+8 bytes from `hash_code`.\n- `MD5`: 3% slowdown. Like above, but BLOCK_ID+16 bytes per input file.\n\nGiven the numbers above, the patch uses `hash_code`. The patch also\nimproves invalidation error msgs to point out which type of problem the\nuser is facing: \"mtime\", \"size\" or \"content\".\n\nrdar://problem/29320105\n\nReviewers: dexonsmith, arphaman, rsmith, aprantl\n\nSubscribers: jkorous, cfe-commits, ributzka\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67249\n\nllvm-svn: 374841"},
[g]={"a04f2ca19aaf",1267458985,"When looking for the instantiated declaration that corresponds to a","When looking for the instantiated declaration that corresponds to a\ngiven declaration in a template, make sure that the context we\'re\nsearching through is complete. Fixes PR6376.\n\nllvm-svn: 97444"},
[j]={{"clang/lib/Serialization/ASTWriter.cpp",1597,"void ASTWriter::WriteInputFiles(SourceManager &SourceMgr, HeaderSearchOptions &HSOpts) {\n  // ...\n  for (unsigned I = 1, N = SourceMgr.local_sloc_entry_size(); I != N; ++I) {\n    // ...\n    if (PP->getHeaderSearchInfo().getHeaderSearchOpts().ValidateASTInputFilesContent) {\n     // ...\n      if (MemBuff)\n     // ...\n     else\n       PP->Diag(SourceLocation(), diag::err_module_unable_to_hash_content) << Entry.File.getName();"}}
[d]={{"clang/lib/Sema/SemaCast.cpp",3259,"void CastOperation::CheckBuiltinBitCast() {\n // ...\n if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete) || Self.RequireCompleteType(OpRange.getBegin(), SrcType, diag::err_incomplete_type)) {"},{K,1937,"static ExprResult SemaBuiltinLaunder(Sema &S, CallExpr *TheCall) {\n  // ...\n if (S.RequireCompleteType(TheCall->getBeginLoc(), ParamTy->getPointeeType(), diag::err_incomplete_type))"},{K,7214,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n // ...\n // For an arithmetic operation, the implied arithmetic must be well-formed.\n  if (Form == Arithmetic) {\n    // ...\n   if (IsC11 && ValType->isPointerType() && RequireCompleteType(Ptr->getBeginLoc(), ValType->getPointeeType(), diag::err_incomplete_type)) {"},{K,15143,"static void CheckConditionalOperand(Sema &S, Expr *E, QualType T, SourceLocation CC, bool &ICContext) {\n  // ...\n // Diagnose incomplete type for second or third operand in C.\n  if (!S.getLangOpts().CPlusPlus && E->getType()->isRecordType())\n    S.RequireCompleteExprType(E, diag::err_incomplete_type);"},{gb,1322,"bool CoroutineStmtBuilder::makeNewAndDeleteExpr() {\n // ...\n if (S.RequireCompleteType(Loc, PromiseType, diag::err_incomplete_type))"},{t,1411,"static bool checkMemberDecomposition(Sema &S, ArrayRef<BindingDecl *> Bindings, ValueDecl *Src, QualType DecompType, const CXXRecordDecl *OrigRD) {\n if (S.RequireCompleteType(Src->getLocation(), DecompType, diag::err_incomplete_type))"},{t,11627,"QualType Sema::CheckComparisonCategoryType(ComparisonCategoryType Kind, SourceLocation Loc, ComparisonCategoryUsage Usage) {\n // ...\n  if (Info && FullyCheckedComparisonCategories[static_cast<unsigned>(Kind)]) {\n   // ...\n   if (RequireCompleteType(Loc, TyForDiags(Info), diag::err_incomplete_type))"},{t,11650,"QualType Sema::CheckComparisonCategoryType(ComparisonCategoryType Kind, SourceLocation Loc, ComparisonCategoryUsage Usage) {\n  // ...\n  if (RequireCompleteType(Loc, TyForDiags(Info), diag::err_incomplete_type))"},{q,14670,"// C99 6.5.17\nstatic QualType CheckCommaOperands(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  // ...\n  if (!S.getLangOpts().CPlusPlus) {\n    // ...\n    if (!RHS.get()->getType()->isVoidType())\n      S.RequireCompleteType(Loc, RHS.get()->getType(), diag::err_incomplete_type);"},{I,8249,"/// Perform the conversions required for an expression used in a\n/// context that ignores the result.\nExprResult Sema::IgnoredValueConversions(Expr *E) {\n // ...\n if (!E->getType()->isVoidType())\n   RequireCompleteType(E->getExprLoc(), E->getType(), diag::err_incomplete_type);"},{H,8486,"ExprResult Sema::TemporaryMaterializationConversion(Expr *E) {\n  // ...\n  if (RequireCompleteType(E->getExprLoc(), T, diag::err_incomplete_type))"},{"clang/lib/Sema/SemaOpenMP.cpp",20965,"static bool checkTypeMappable(SourceLocation SL, SourceRange SR, Sema &SemaRef, DSAStackTy *Stack, QualType QTy, bool FullCheck = true) {\n  if (SemaRef.RequireCompleteType(SL, QTy, diag::err_incomplete_type))"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6273,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n///  enum Kind {\n///    KnownValue = sizeof(T)\n///  };\n///\n///  bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n  // ...\n  if (ParentDC != D->getDeclContext()) {\n   // ...\n   if (CXXRecordDecl *Spec = dyn_cast<CXXRecordDecl>(ParentDC)) {\n     if (!Spec->isDependentContext()) {\n       // ...\n       if (!Tag->isBeingDefined() && RequireCompleteType(Loc, T, diag::err_incomplete_type))"}},
},
["err_module_unavailable"]={
[c]="err_module_unavailable",
[d]="module \'%0\' %select{is incompatible with|requires}1 feature \'%2\'",
[e]={{nil,nil,{"module \'A\' ",{"is incompatible with","requires"}," feature \'C\'"}}},
[f]=k,
[g]="module \'(.*?)\' (?:is incompatible with|requires) feature \'(.*?)\'",
[h]=a,
[i]=y,
[b]={"1fb5c3a63a88",1325304344,"Implement support for module requirements, which indicate the language","Implement support for module requirements, which indicate the language\nfeatures needed for a particular module to be available. This allows\nmixed-language modules, where certain headers only work under some\nlanguage variants (e.g., in C++, std.tuple might only be available in\nC++11 mode).\n\nllvm-svn: 147387"},
[j]={{"clang/lib/Lex/PPDirectives.cpp",1916,"bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, const TargetInfo &TargetInfo, DiagnosticsEngine &Diags, Module *M) {\n  // ...\n  if (MissingHeader.FileNameLoc.isValid()) {\n // ...\n } else if (ShadowingModule) {\n // ...\n  } else {\n   // ...\n   Diags.Report(M->DefinitionLoc, diag::err_module_unavailable) << M->getFullModuleName() << Requirement.second << Requirement.first;"}},
[l]={
[l]={
["clang/test/Modules/preprocess-unavailable.cpp"]={"clang/test/Modules/preprocess-unavailable.cpp:3:10: error: module \'a.b\' requires feature \'cplusplus11\'"}
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:254:17: error: incomplete type \'struct Test21\' where a complete type is required","clang/test/Sema/exprs.c:255:4: error: incomplete type \'struct Test21\' where a complete type is required"}
}
}
},
},
["err_module_unimported_use"]={
["err_incomplete_type_objc_at_encode"]={
[c]="err_module_unimported_use",
[b]="err_incomplete_type_objc_at_encode",
[d]="%select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from module \'%2\' before it is required",
[i]="\'@encode\' of incomplete type %0",
[e]={{nil,nil,{{yc,gc,dc,"explicit specialization","partial specialization"}," of B must be imported from module \'C\' before it is required"}}},
[j]="\'@encode\' of incomplete type A",
[f]=k,
[h]=k,
[g]="(?:declaration|definition|default argument|explicit specialization|partial specialization) of (.*?) must be imported from module \'(.*?)\' before it is required",
[c]="\'@encode\' of incomplete type (.*?)",
[h]=a,
[f]=a,
[i]=O,
[e]=m,
[b]={"35c1df5cb6da",1434572192,"[modules] Improve diagnostic for a template-id that\'s invalid because a default","[modules] Improve diagnostic for a template-id that\'s invalid because a default\nargument is not visible.\n\nllvm-svn: 239934"},
[g]={"7da04c636728",1305405159,"Emit an error when trying to @encode an incomplete type.","Emit an error when trying to @encode an incomplete type.\n\nThere are APIs, e.g. [NSValue valueWithBytes:objCType:], which use the encoding to find out\nthe size of an object pointed to by a pointer. Make things safer by making it illegal to @encode\nincomplete types.\n\nllvm-svn: 131364"},
[j]={{"clang/lib/Sema/SemaLookup.cpp",5752,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  // ...\n  if (Modules.size() > 1) {\n  // ...\n  } else {\n    // ...\n   Diag(UseLoc, diag::err_module_unimported_use) << (int)MIK << Decl << Modules[0]->getFullModuleName();"}},
[d]={{bb,1140,"ExprResult Sema::BuildObjCEncodeExpression(SourceLocation AtLoc, TypeSourceInfo *EncodedTypeInfo, SourceLocation RParenLoc) {\n  // ...\n  if (EncodedType->isDependentType())\n  // ...\n  else {\n    if (!EncodedType->getAsArrayTypeUnsafe() && //// Incomplete array is handled.\n      // ...\n     if (RequireCompleteType(AtLoc, EncodedType, diag::err_incomplete_type_objc_at_encode, EncodedTypeInfo->getTypeLoc()))"}},
[l]={
[l]={
["clang/test/Modules/submodules.cpp"]={"clang/test/Modules/submodules.cpp:10:1: error: declaration of \'remove_reference\' must be imported from module \'std.type_traits\' before it is required","clang/test/Modules/submodules.cpp:24:1: error: declaration of \'hash_map\' must be imported from module \'std.hash_map\' before it is required"}
["clang/test/SemaObjC/exprs.m"]={"clang/test/SemaObjC/exprs.m:40:9: error: \'@encode\' of incomplete type \'Incomplete_ObjC_class\'","clang/test/SemaObjC/exprs.m:41:9: error: \'@encode\' of incomplete type \'struct Incomplete_struct\'"}
}
}
},
},
["err_module_unimported_use_header"]={
["err_incomplete_type_used_in_type_trait_expr"]={
[c]="err_module_unimported_use_header",
[b]="err_incomplete_type_used_in_type_trait_expr",
[d]={{nil,x,"%select{missing \'#include\'|missing \'#include %3\'}2; %select{||default argument of |explicit specialization of |partial specialization of }0%1 must be %select{declared|defined|defined|declared|declared}0 before it is used"},{n,nil,"missing \'#include %3\'; %select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from module \'%2\' before it is required"}},
[i]="incomplete type %0 used in type trait expression",
[e]={{nil,x,{{"missing \'#include\'","missing \'#include D\'"},"; ",{a,a,"default argument of ","explicit specialization of ","partial specialization of "},"B must be ",{"declared","defined","defined","declared","declared"}," before it is used"}},{n,nil,{"missing \'#include D\'; ",{yc,gc,dc,"explicit specialization","partial specialization"}," of B must be imported from module \'C\' before it is required"}}},
[j]="incomplete type A used in type trait expression",
[f]=k,
[h]=k,
[g]="(?:missing \'\\#include\'|missing \'\\#include (.*?)\'); (?:||default argument of |explicit specialization of |partial specialization of )(.*?) must be (?:declared|defined|defined|declared|declared) before it is used",
[c]="incomplete type (.*?) used in type trait expression",
[h]=a,
[f]=a,
[i]=O,
[e]=m,
[b]={"4eb8393c636b",1461794225,"[modules] When diagnosing a missing module import, suggest adding a #include if","[modules] When diagnosing a missing module import, suggest adding a #include if\nthe current language doesn\'t have an import syntax and we can figure out a\nsuitable file to include.\n\nllvm-svn: 267802"},
[g]={"1f9648da17c7",1246993562,"Some (most) type trait expressions require that the argument passed in is a complete type.","Some (most) type trait expressions require that the argument passed in is a complete type.\n\nllvm-svn: 74937"},
[j]={{"clang/lib/Sema/SemaLookup.cpp",5725,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  // ...\n  // If we have a #include we should suggest, or if all definition locations\n  // were in global module fragments, don\'t suggest an import.\n if (!HeaderName.empty() || UniqueModules.empty()) {\n    // ...\n    Diag(UseLoc, diag::err_module_unimported_use_header) << (int)MIK << Decl << !HeaderName.empty() << HeaderName;"}},
[d]={{I,4870,"/// Check the completeness of a type in a unary type trait.\n///\n/// If the particular type trait requires a complete type, tries to complete\n/// it. If completing the type fails, a diagnostic is emitted and false\n/// returned. If completing the type succeeds or no completion was required,\n/// returns true.\nstatic bool CheckUnaryTypeTraitTypeCompleteness(Sema &S, TypeTrait UTT, SourceLocation Loc, QualType ArgTy) {\n  // ...\n  case UTT_IsEmpty:\n  case UTT_IsPolymorphic:\n  case UTT_IsAbstract:\n    if (const auto *RD = ArgTy->getAsCXXRecordDecl())\n      if (!RD->isUnion())\n        return !S.RequireCompleteType(Loc, ArgTy, diag::err_incomplete_type_used_in_type_trait_expr);"},{I,4879,"/// Check the completeness of a type in a unary type trait.\n///\n/// If the particular type trait requires a complete type, tries to complete\n/// it. If completing the type fails, a diagnostic is emitted and false\n/// returned. If completing the type succeeds or no completion was required,\n/// returns true.\nstatic bool CheckUnaryTypeTraitTypeCompleteness(Sema &S, TypeTrait UTT, SourceLocation Loc, QualType ArgTy) {\n  // ...\n  case UTT_IsFinal:\n  case UTT_IsSealed:\n    if (ArgTy->getAsCXXRecordDecl())\n      return !S.RequireCompleteType(Loc, ArgTy, diag::err_incomplete_type_used_in_type_trait_expr);"},{I,4888,"/// Check the completeness of a type in a unary type trait.\n///\n/// If the particular type trait requires a complete type, tries to complete\n/// it. If completing the type fails, a diagnostic is emitted and false\n/// returned. If completing the type succeeds or no completion was required,\n/// returns true.\nstatic bool CheckUnaryTypeTraitTypeCompleteness(Sema &S, TypeTrait UTT, SourceLocation Loc, QualType ArgTy) {\n  // ...\n  // LWG3823: T shall be an array type, a complete type, or cv void.\n  case UTT_IsAggregate:\n    // ...\n    return !S.RequireCompleteType(Loc, ArgTy, diag::err_incomplete_type_used_in_type_trait_expr);"},{I,4929,"/// Check the completeness of a type in a unary type trait.\n///\n/// If the particular type trait requires a complete type, tries to complete\n/// it. If completing the type fails, a diagnostic is emitted and false\n/// returned. If completing the type succeeds or no completion was required,\n/// returns true.\nstatic bool CheckUnaryTypeTraitTypeCompleteness(Sema &S, TypeTrait UTT, SourceLocation Loc, QualType ArgTy) {\n  // ...\n  case UTT_IsDestructible:\n  case UTT_IsNothrowDestructible:\n  case UTT_IsTriviallyDestructible:\n  case UTT_HasUniqueObjectRepresentations:\n    // ...\n    return !S.RequireCompleteType(Loc, ArgTy, diag::err_incomplete_type_used_in_type_trait_expr);"},{I,5449,"static bool EvaluateBooleanTypeTrait(Sema &S, TypeTrait Kind, SourceLocation KWLoc, ArrayRef<TypeSourceInfo *> Args, SourceLocation RParenLoc, bool IsDependent) {\n  // ...\n  case clang::BTT_ReferenceBindsToTemporary:\n  case clang::TT_IsConstructible:\n  case clang::TT_IsNothrowConstructible:\n  case clang::TT_IsTriviallyConstructible: {\n    // ...\n    // Precondition: T and all types in the parameter pack Args shall be\n    // complete types, (possibly cv-qualified) void, or arrays of\n    // unknown bound.\n    for (const auto *TSI : Args) {\n      // ...\n      if (S.RequireCompleteType(KWLoc, ArgTy, diag::err_incomplete_type_used_in_type_trait_expr))"},{I,5661,"static bool EvaluateBinaryTypeTrait(Sema &Self, TypeTrait BTT, QualType LhsT, QualType RhsT, SourceLocation KeyLoc) {\n  // ...\n  case BTT_IsBaseOf: {\n    // ...\n   if (!rhsRecord || !lhsRecord) {\n      // ...\n      if (Self.RequireCompleteType(KeyLoc, RhsT, diag::err_incomplete_type_used_in_type_trait_expr))"},{I,5685,"static bool EvaluateBinaryTypeTrait(Sema &Self, TypeTrait BTT, QualType LhsT, QualType RhsT, SourceLocation KeyLoc) {\n  // ...\n  case BTT_IsBaseOf: {\n    // ...\n    if (Self.RequireCompleteType(KeyLoc, RhsT, diag::err_incomplete_type_used_in_type_trait_expr))"},{I,5781,"static bool EvaluateBinaryTypeTrait(Sema &Self, TypeTrait BTT, QualType LhsT, QualType RhsT, SourceLocation KeyLoc) {\n  // ...\n  case BTT_IsAssignable:\n  case BTT_IsNothrowAssignable:\n  case BTT_IsTriviallyAssignable: {\n    // ...\n   if (!LhsT->isVoidType() && !LhsT->isIncompleteArrayType() && Self.RequireCompleteType(KeyLoc, LhsT, diag::err_incomplete_type_used_in_type_trait_expr))"},{I,5785,"static bool EvaluateBinaryTypeTrait(Sema &Self, TypeTrait BTT, QualType LhsT, QualType RhsT, SourceLocation KeyLoc) {\n  // ...\n  case BTT_IsAssignable:\n  case BTT_IsNothrowAssignable:\n  case BTT_IsTriviallyAssignable: {\n    // ...\n    if (!RhsT->isVoidType() && !RhsT->isIncompleteArrayType() && Self.RequireCompleteType(KeyLoc, RhsT, diag::err_incomplete_type_used_in_type_trait_expr))"}},
[l]={
[l]={
["clang/test/Modules/submodule-visibility-cycles.cpp"]={"clang/test/Modules/submodule-visibility-cycles.cpp:6:1: error: missing \'#include \"cycle2.h\"\'; \'C2\' must be declared before it is used"}
["clang/test/SemaObjCXX/is-base-of.mm"]={"clang/test/SemaObjCXX/is-base-of.mm:23:45: error: incomplete type \'NSForward\' used in type trait expression"}
}
}
},
},
["err_module_unimported_use_multiple"]={
["err_incomplete_typeid"]={
[c]="err_module_unimported_use_multiple",
[b]="err_incomplete_typeid",
[d]="%select{declaration|definition|default argument|explicit specialization|partial specialization}0 of %1 must be imported from one of the following modules before it is required:%2",
[i]="\'typeid\' of incomplete type %0",
[e]={{nil,nil,{{yc,gc,dc,"explicit specialization","partial specialization"}," of B must be imported from one of the following modules before it is required:C"}}},
[j]="\'typeid\' of incomplete type A",
[f]=k,
[h]=k,
[g]="(?:declaration|definition|default argument|explicit specialization|partial specialization) of (.*?) must be imported from one of the following modules before it is required\\:(.*?)",
[c]="\'typeid\' of incomplete type (.*?)",
[h]=a,
[f]=a,
[i]=O,
[e]=m,
[b]={"35c1df5cb6da",1434572192,"[modules] Improve diagnostic for a template-id that\'s invalid because a default","[modules] Improve diagnostic for a template-id that\'s invalid because a default\nargument is not visible.\n\nllvm-svn: 239934"},
[g]={"721fb2b6e405",1261602366,"Diagnose the use of incomplete types in C++ typeid expressions","Diagnose the use of incomplete types in C++ typeid expressions\n\nllvm-svn: 92045"},
[j]={{"clang/lib/Sema/SemaLookup.cpp",5748,"void Sema::diagnoseMissingImport(SourceLocation UseLoc, const NamedDecl *Decl, SourceLocation DeclLoc, ArrayRef<Module *> Modules, MissingImportKind MIK, bool Recover) {\n  // ...\n  if (Modules.size() > 1) {\n    // ...\n    Diag(UseLoc, diag::err_module_unimported_use_multiple) << (int)MIK << Decl << ModuleList;"}}
[d]={{I,560,"/// Build a C++ typeid expression with a type operand.\nExprResult Sema::BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc, TypeSourceInfo *Operand, SourceLocation RParenLoc) {\n  // ...\n  if (T->getAs<RecordType>() && RequireCompleteType(TypeidLoc, T, diag::err_incomplete_typeid))"},{I,592,"/// Build a C++ typeid expression with an expression operand.\nExprResult Sema::BuildCXXTypeId(QualType TypeInfoType, SourceLocation TypeidLoc, Expr *E, SourceLocation RParenLoc) {\n  // ...\n  if (E && !E->isTypeDependent()) {\n    // ...\n    if (const RecordType *RecordT = T->getAs<RecordType>()) {\n     // ...\n     if (RequireCompleteType(TypeidLoc, T, diag::err_incomplete_typeid))"}},
},
["err_modules_embed_file_not_found"]={
[c]="err_modules_embed_file_not_found",
[d]="file \'%0\' specified by \'-fmodules-embed-file=\' not found",
[e]="file \'A\' specified by \'-fmodules-embed-file=\' not found",
[f]=V,
[g]="file \'(.*?)\' specified by \'\\-fmodules\\-embed\\-file\\=\' not found",
[h]=a,
[i]=w,
[b]={"fb1e7f7d1aca",1439528578,"[modules] Add an experimental -cc1 feature to embed the contents of an input","[modules] Add an experimental -cc1 feature to embed the contents of an input\nfile in the .pcm files. This allows a smaller set of files to be sent to a\nremote build worker when building with explicit modules (for instance, module\nmap files need not be sent along with the corresponding precompiled modules).\n\nThis doesn\'t actually make the embedded files visible to header search, so\nit\'s not useful as a packaging format for public header files.\n\nllvm-svn: 245028"},
[j]={{Pb,744,"bool FrontendAction::BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &RealInput) {\n  // ...\n  // Set up embedding for any specified files. Do this before we load any\n  // source files, including the primary module map for the compilation.\n  for (const auto &F : CI.getFrontendOpts().ModulesEmbedFiles) {\n    if (auto FE = CI.getFileManager().getFile(F, /*openFile*/ true))\n    // ...\n    else\n      CI.getDiagnostics().Report(diag::err_modules_embed_file_not_found) << F;"}}
},
["err_ms___leave_not_in___try"]={
[c]="err_ms___leave_not_in___try",
[d]="\'__leave\' statement not in __try block",
[e]="\'__leave\' statement not in __try block",
[f]=k,
[g]="\'__leave\' statement not in __try block",
[h]=a,
[i]=m,
[b]={"eb61d4d7c2fd",1404687199,"Sema: Check that __leave is contained in a __try block.","Sema: Check that __leave is contained in a __try block.\n\nGive scope a SEHTryScope bit, set that in ParseSEHTry(), and let Sema\nwalk the scope chain to find the SEHTry parent on __leave statements.\n(They are rare enough that it seems better to do the walk instead of\ngiving Scope a SEHTryParent pointer -- this is similar to AtCatchScope.)\n\nllvm-svn: 212422"},
[j]={{F,4647,"StmtResult Sema::ActOnSEHLeaveStmt(SourceLocation Loc, Scope *CurScope) {\n // ...\n if (!SEHTryParent)\n    return StmtError(Diag(Loc, diag::err_ms___leave_not_in___try));"}},
[l]={
[l]={
["clang/test/SemaCXX/__try.cpp"]={"clang/test/SemaCXX/__try.cpp:86:5: error: \'__leave\' statement not in __try block"}
["clang/test/SemaCXX/typeid.cpp"]={"clang/test/SemaCXX/typeid.cpp:20:9: error: \'typeid\' of incomplete type \'X\'","clang/test/SemaCXX/typeid.cpp:21:9: error: \'typeid\' of incomplete type \'X\'","clang/test/SemaCXX/typeid.cpp:22:9: error: \'typeid\' of incomplete type \'X\'"}
}
}
},
},
["err_ms_asm_bitfield_unsupported"]={
["err_inconsistent_ivar_count"]={
[c]={{nil,p,"err_ms_asm_bitfield_unsupported"}},
[b]="err_inconsistent_ivar_count",
[d]={{nil,p,"an inline asm block cannot have an operand which is a bit-field"}},
[i]="inconsistent number of instance variables specified",
[e]={{nil,p,"an inline asm block cannot have an operand which is a bit-field"}},
[j]="inconsistent number of instance variables specified",
[f]=k,
[h]=k,
[g]="an inline asm block cannot have an operand which is a bit\\-field",
[c]="inconsistent number of instance variables specified",
[h]=a,
[f]=a,
[i]={{nil,p,"Inline Assembly Issue"}},
[e]=m,
[b]={"0982db188b66",1665177226,"[Clang] reject bit-fields as instruction operands in Microsoft style inline asm blocks.","[Clang] reject bit-fields as instruction operands in Microsoft style inline asm blocks.\n\nMSVC allows bit-fields to be specified as instruction operands in inline asm\nblocks. Such references are resolved to the address of the allocation unit that\nthe named bitfield is a part of. The result is that reads and writes of such\noperands will read or mutate nearby bit-fields stored in the same allocation\nunit. This is a surprising behavior for which MSVC issues warning C4401,\n\"\'<identifier>\': member is bit field\". Intel\'s icc compiler also allows such\nbit-field references, but does not issue a diagnostic.\n\nPrior to this change, Clang fails the following assertion when a bit-field is\nreferenced in such instructions:\n  clang/lib/CodeGen/CGValue.h:338: llvm::Value* clang::CodeGen::LValue::getPointer(clang::CodeGen::CodeGenFunction&) const: Assertion `isSimple()\' failed.\nIn non-assert enabled builds, Clang\'s behavior appears to match the behavior\nof the MSVC and icc compilers, though it is unknown if that is by design or\nhappenstance.\n\nFollowing this change, attempts to use a bit-field as an instruction operand\nin Microsoft style asm blocks is diagnosed as an error due to the risk of\nunintentionally reading or writing nearby bit-fields.\n\nFixes https://github.com/llvm/llvm-project/issues/57791\n\nReviewed By: erichkeane, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D135500"},
[g]={"fff0674ae092",1385956221,"Fix inconsistent diag name","Fix inconsistent diag name\n\nllvm-svn: 196061"},
[j]={{"clang/lib/Sema/SemaStmtAsm.cpp",954,"StmtResult Sema::ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc, ArrayRef<Token> AsmToks, StringRef AsmString, unsigned NumOutputs, unsigned NumInputs, ArrayRef<StringRef> Constraints, ArrayRef<StringRef> Clobbers, ArrayRef<Expr *> Exprs, SourceLocation EndLoc) {\n  // ...\n  for (uint64_t I = 0; I < NumOutputs + NumInputs; ++I) {\n    // ...\n    if (E->getType()->isBitIntType()) {\n   // ...\n   } else if (E->refersToBitField()) {\n     // ...\n     Diag(E->getBeginLoc(), diag::err_ms_asm_bitfield_unsupported) << E->getSourceRange();"}},
[d]={{rb,2230,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n  // ...\n  if (numIvars > 0)\n    Diag(ivars[j]->getLocation(), diag::err_inconsistent_ivar_count);"},{rb,2232,"void Sema::CheckImplementationIvars(ObjCImplementationDecl *ImpDecl, ObjCIvarDecl **ivars, unsigned numIvars, SourceLocation RBrace) {\n // ...\n if (numIvars > 0)\n // ...\n else if (IVI != IVE)\n    Diag(IVI->getLocation(), diag::err_inconsistent_ivar_count);"}},
[l]={
[l]={
["clang/test/Parser/ms-inline-asm.c"]={"clang/test/Parser/ms-inline-asm.c:73:9: error: an inline asm block cannot have an operand which is a bit-field","clang/test/Parser/ms-inline-asm.c:72:14: error: an inline asm block cannot have an operand which is a bit-field"}
["clang/test/SemaObjC/conflicting-ivar-test-1.m"]={"clang/test/SemaObjC/conflicting-ivar-test-1.m:24:6: error: inconsistent number of instance variables specified","clang/test/SemaObjC/conflicting-ivar-test-1.m:49:6: error: inconsistent number of instance variables specified"}
}
}
},
},
["err_ms_attributes_not_enabled"]={
["err_incorrect_defaulted_consteval"]={
[c]={{nil,r,"err_ms_attributes_not_enabled"}},
[b]={{nil,r,"err_incorrect_defaulted_consteval"}},
[d]={{nil,r,"\'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes"}},
[i]={{nil,r,"defaulted declaration of %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 cannot be consteval because implicit definition is not constexpr"}},
[e]={{nil,r,"\'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes"}},
[j]={{nil,r,{"defaulted declaration of ",{"default constructor",ic,hc,fc,ec,ob}," cannot be consteval because implicit definition is not constexpr"}}},
[f]=k,
[h]=k,
[g]="\'__declspec\' attributes are not enabled; use \'\\-fdeclspec\' or \'\\-fms\\-extensions\' to enable support for __declspec attributes",
[c]="defaulted declaration of (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) cannot be consteval because implicit definition is not constexpr",
[h]=a,
[f]=a,
[i]={{nil,r,y}},
[e]={{nil,r,m}},
[b]={"52d0aaac139a",1487112440,"Improve diagnostic reporting when using __declspec without enabling __declspec as a keyword.","Improve diagnostic reporting when using __declspec without enabling __declspec as a keyword.\n\nFixes PR31936.\n\nllvm-svn: 295114"},
[g]={"796ed03b8412",1560502580,"[C++20] add Basic consteval specifier","[C++20] add Basic consteval specifier\n\nSummary:\nthis revision adds Lexing, Parsing and Basic Semantic for the consteval specifier as specified by http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1073r3.html\n\nwith this patch, the consteval specifier is treated as constexpr but can only be applied to function declaration.\n\nChanges:\n - add the consteval keyword.\n - add parsing of consteval specifier for normal declarations and lambdas expressions.\n - add the whether a declaration is constexpr is now represented by and enum everywhere except for variable because they can\'t be consteval.\n - adapt diagnostic about constexpr to print constexpr or consteval depending on the case.\n - add tests for basic semantic.\n\nReviewers: rsmith, martong, shafik\n\nReviewed By: rsmith\n\nSubscribers: eraman, efriedma, rnkovacs, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D61790\n\nllvm-svn: 363362"},
[j]={{hb,3639,"/// 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    ParseIdentifier : {\n      // ...\n      // If the token is an identifier named \"__declspec\" and Microsoft\n      // extensions are not enabled, it is likely that there will be cascading\n      // parse errors if this really is a __declspec attribute. Attempt to\n      // recognize that scenario and recover gracefully.\n      if (!getLangOpts().DeclSpecKeyword && Tok.is(tok::identifier) && Tok.getIdentifierInfo()->getName().equals(\"__declspec\")) {\n       Diag(Loc, diag::err_ms_attributes_not_enabled);"}},
[d]={{t,7738,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if ((getLangOpts().CPlusPlus20 || (getLangOpts().CPlusPlus14 ? !isa<CXXDestructorDecl>(MD) : isa<CXXConstructorDecl>(MD))) && MD->isConstexpr() && !Constexpr && MD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) {\n   Diag(MD->getBeginLoc(), MD->isConsteval() ? diag::err_incorrect_defaulted_consteval : diag::err_incorrect_defaulted_constexpr) << CSM;"}},
[l]={
[l]={
["clang/test/Parser/declspec-recovery.c"]={"clang/test/Parser/declspec-recovery.c:3:1: error: \'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes","clang/test/Parser/declspec-recovery.c:6:3: error: \'__declspec\' attributes are not enabled; use \'-fdeclspec\' or \'-fms-extensions\' to enable support for __declspec attributes"}
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:57:3: error: defaulted declaration of default constructor cannot be consteval because implicit definition is not constexpr"}
}
}
},
},
["err_ms_declspec_type"]={
["err_incorrect_defaulted_constexpr"]={
[c]="err_ms_declspec_type",
[b]="err_incorrect_defaulted_constexpr",
[d]="__declspec attributes must be an identifier or string literal",
[i]={{nil,A,"defaulted definition of %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 is not constexpr"},{J,nil,"defaulted definition of %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator}0 is not constexpr"}},
[e]="__declspec attributes must be an identifier or string literal",
[j]={{nil,A,{"defaulted definition of ",{"default constructor",ic,hc,fc,ec,ob}," is not constexpr"}},{J,nil,{"defaulted definition of ",{"default constructor",ic,hc,fc,ec}," is not constexpr"}}},
[f]=k,
[h]=k,
[g]="__declspec attributes must be an identifier or string literal",
[c]="defaulted definition of (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) is not constexpr",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={"38c9ad9e725c",1340113766,"Improves parsing and semantic analysis for MS __declspec attributes.  This includes support for the ...","Improves parsing and semantic analysis for MS __declspec attributes.  This includes support for the align (which fixes PR12631).\n\nllvm-svn: 158717"},
[g]={"cc36f698afe0",1324520551,"PR11614: Mark defaulted special constructors as constexpr if their implicit","PR11614: Mark defaulted special constructors as constexpr if their implicit\ndefinition would satisfy the constexpr requirements.\n\nllvm-svn: 147128"},
[j]={{hb,787,"/// [MS] decl-specifier:\n///            __declspec ( extended-decl-modifier-seq )\n///\n/// [MS] extended-decl-modifier-seq:\n///            extended-decl-modifier[opt]\n///            extended-decl-modifier extended-decl-modifier-seq\nvoid Parser::ParseMicrosoftDeclSpecs(ParsedAttributes &Attrs) {\n  // ...\n  while (Tok.is(tok::kw___declspec)) {\n    // ...\n    // An empty declspec is perfectly legal and should not warn.  Additionally,\n    // you can specify multiple attributes per declspec.\n    while (Tok.isNot(tok::r_paren)) {\n      // ...\n      if (!IsString && Tok.getKind() != tok::identifier && Tok.getKind() != tok::kw_restrict) {\n       Diag(Tok, diag::err_ms_declspec_type);"}},
[d]={{t,7739,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if ((getLangOpts().CPlusPlus20 || (getLangOpts().CPlusPlus14 ? !isa<CXXDestructorDecl>(MD) : isa<CXXConstructorDecl>(MD))) && MD->isConstexpr() && !Constexpr && MD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) {\n   Diag(MD->getBeginLoc(), MD->isConsteval() ? diag::err_incorrect_defaulted_consteval : diag::err_incorrect_defaulted_constexpr) << CSM;"}},
[l]={
[l]={
["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:68:19: error: __declspec attributes must be an identifier or string literal"}
["clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp"]={"clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp:6:3: error: defaulted definition of default constructor is not constexpr","clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp:21:3: error: defaulted definition of copy constructor is not constexpr","clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp:22:3: error: defaulted definition of move constructor is not constexpr"}
}
}
},
},
["err_ms_property_duplicate_accessor"]={
["err_incorrect_number_of_vector_initializers"]={
[c]="err_ms_property_duplicate_accessor",
[b]="err_incorrect_number_of_vector_initializers",
[d]="property declaration specifies \'%0\' accessor twice",
[i]="number of elements must be either one or match the size of the vector",
[e]="property declaration specifies \'A\' accessor twice",
[j]="number of elements must be either one or match the size of the vector",
[f]=k,
[h]=k,
[g]="property declaration specifies \'(.*?)\' accessor twice",
[c]="number of elements must be either one or match the size of the vector",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={Jb,1366097310,Kb,Lb},
[g]={"28ccef788bb2",1301218360,"supported: AltiVec vector initialization with a single literal according to PIM section 2.5.1 - afte...","supported: AltiVec vector initialization with a single literal according to PIM section 2.5.1 - after initialization all elements have the value specified by the literal\n\nllvm-svn: 128375"},
[j]={{hb,708,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n     if (Kind == AK_Invalid) {\n     // ...\n     } else if (AccessorNames[Kind] != nullptr) {\n       // ...\n        Diag(KindLoc, diag::err_ms_property_duplicate_accessor) << KindStr;"}},
[d]={{q,8599,"ExprResult Sema::BuildVectorLiteral(SourceLocation LParenLoc, SourceLocation RParenLoc, Expr *E, TypeSourceInfo *TInfo) {\n  // ...\n  if (ShouldSplatAltivecScalarInCast(VTy)) {\n    // The number of initializers must be one or must match the size of the\n    // vector. If a single value is specified in the initializer then it will\n    // be replicated to all the components of the vector\n   if (numExprs == 1) {\n   // ...\n   } else if (numExprs < numElems) {\n     Diag(E->getExprLoc(), diag::err_incorrect_number_of_vector_initializers);"}},
[l]={
[l]={
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:367:41: error: property declaration specifies \'get\' accessor twice"}
["clang/test/Sema/altivec-init.c"]={"clang/test/Sema/altivec-init.c:15:20: error: number of elements must be either one or match the size of the vector"}
}
}
},
},
["err_ms_property_expected_accessor_name"]={
["err_increment_decrement_enum"]={
[c]="err_ms_property_expected_accessor_name",
[b]="err_increment_decrement_enum",
[d]="expected name of accessor method",
[i]="cannot %select{decrement|increment}0 expression of enum type %1",
[e]="expected name of accessor method",
[j]={{nil,nil,{"cannot ",{"decrement","increment"}," expression of enum type B"}}},
[f]=k,
[h]=k,
[g]="expected name of accessor method",
[c]="cannot (?:decrement|increment) expression of enum type (.*?)",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={Jb,1366097310,Kb,Lb},
[g]={"493df1a14f5d",1375926623,"Emit an error for enum increments and decrements in C++ mode.","Emit an error for enum increments and decrements in C++ mode.\nFixes PR16394.\n\nllvm-svn: 187955"},
[j]={{hb,700,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n   // ...\n   // Parse the accessor specifications.\n    while (true) {\n     // ...\n     // Expect the method name.\n      if (!Tok.is(tok::identifier)) {\n        Diag(Tok.getLocation(), diag::err_ms_property_expected_accessor_name);"}},
[d]={{q,14723,"/// 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   S.Diag(OpLoc, diag::err_increment_decrement_enum) << IsInc << ResType;"}},
[l]={
[l]={
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:362:27: error: expected name of accessor method"}
["clang/test/SemaCXX/enum-increment.cpp"]={"clang/test/SemaCXX/enum-increment.cpp:6:4: error: cannot increment expression of enum type \'A\'","clang/test/SemaCXX/enum-increment.cpp:7:4: error: cannot decrement expression of enum type \'A\'","clang/test/SemaCXX/enum-increment.cpp:8:3: error: cannot increment expression of enum type \'A\'","clang/test/SemaCXX/enum-increment.cpp:9:3: error: cannot decrement expression of enum type \'A\'"}
}
}
},
},
["err_ms_property_expected_comma_or_rparen"]={
["err_indirect_goto_in_protected_scope"]={
[c]="err_ms_property_expected_comma_or_rparen",
[b]="err_indirect_goto_in_protected_scope",
[d]="expected \',\' or \')\' at end of property accessor list",
[i]={{nil,r,"cannot jump from this %select{indirect|asm}0 goto statement to one of its possible targets"},{V,nil,"cannot jump from this indirect goto statement to one of its possible targets"}},
[e]="expected \',\' or \')\' at end of property accessor list",
[j]={{nil,r,{"cannot jump from this ",{"indirect","asm"}," goto statement to one of its possible targets"}},{V,nil,"cannot jump from this indirect goto statement to one of its possible targets"}},
[f]=k,
[h]=k,
[g]="expected \',\' or \'\\)\' at end of property accessor list",
[c]="cannot jump from this (?:indirect|asm) goto statement to one of its possible targets",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={Jb,1366097310,Kb,Lb},
[g]={"0bf2dd2ed408",1240103126,"First half of jump scope checking for indirect goto.","First half of jump scope checking for indirect goto.\n\nllvm-svn: 69498"},
[j]={{hb,723,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    next_property_accessor:\n      // ...\n      Diag(Tok.getLocation(), diag::err_ms_property_expected_comma_or_rparen);"}},
[d]={{nb,863,"/// Produce primary diagnostic for an indirect jump statement.\nstatic void DiagnoseIndirectOrAsmJumpStmt(Sema &S, Stmt *Jump, LabelDecl *Target, bool &Diagnosed) {\n  // ...\n  S.Diag(Jump->getBeginLoc(), diag::err_indirect_goto_in_protected_scope) << IsAsmGoto;"}},
[l]={
[l]={
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:364:31: error: expected \',\' or \')\' at end of property accessor list"}
["clang/test/SemaObjC/strong-in-c-struct.m"]={"clang/test/SemaObjC/strong-in-c-struct.m:31:3: error: cannot jump from this indirect goto statement to one of its possible targets","clang/test/SemaObjC/strong-in-c-struct.m:55:3: error: cannot jump from this indirect goto statement to one of its possible targets","clang/test/SemaObjC/strong-in-c-struct.m:73:3: error: cannot jump from this indirect goto statement to one of its possible targets"}
}
}
},
},
["err_ms_property_expected_equal"]={
["err_indirect_goto_without_addrlabel"]={
[c]="err_ms_property_expected_equal",
[b]="err_indirect_goto_without_addrlabel",
[d]="expected \'=\' after \'%0\'",
[i]="indirect goto in function with no address-of-label expressions",
[e]="expected \'=\' after \'A\'",
[j]="indirect goto in function with no address-of-label expressions",
[f]=k,
[h]=k,
[g]="expected \'\\=\' after \'(.*?)\'",
[c]="indirect goto in function with no address\\-of\\-label expressions",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={Jb,1366097310,Kb,Lb},
[g]={"cf819ab38311",1273625893,"When checking scopes for indirect goto, be more permissive (but still safe)","When checking scopes for indirect goto, be more permissive (but still safe)\nabout the permitted scopes.  Specifically:\n  1) Permit labels and gotos to appear after a prologue of variable initializations.\n  2) Permit indirect gotos to jump out of scopes that don\'t require cleanup.\n  3) Diagnose possible attempts to indirect-jump out of scopes that do require\n    cleanup.\nThis requires a substantial reinvention of the algorithm for checking indirect\ngoto.  The current algorithm is Omega(M*N), with M = the number of unique\nscopes being jumped from and N = the number of unique scopes being jumped to,\nwith an additional factor that is probably (worst-case) linear in the depth\nof scopes.  Thus the entire thing is likely cubic given some truly bizarre\nill-formed code;  on well-formed code the additional factor collapses to\nan amortized constant (when amortized over the entire function) and so\nthe algorithm is quadratic.  Even this requires every label to appear in\nits own scope, which would be very unusual for indirect-goto code (and\nextremely unlikely for well-formed code);  it is far more likely that\nall labels will be in the same scope and so the algorithm becomes linear.\nFor such a marginal feature, I am fairly happy with this result.\n\n(this is using JumpDiagnostic\'s definition of scope, where successive\nvariables in a block appear in their own scope)\n\nllvm-svn: 103536"},
[j]={{hb,693,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n     // ...\n      // Consume the \'=\'.\n     if (!TryConsumeToken(tok::equal)) {\n       Diag(Tok.getLocation(), diag::err_ms_property_expected_equal) << KindStr;"}},
[d]={{nb,742,"/// VerifyIndirectJumps - Verify whether any possible indirect goto jump might\n/// cross a protection boundary.  Unlike direct jumps, indirect goto jumps\n/// count cleanups as protection boundaries: since there\'s no way to know where\n/// the jump is going, we can\'t implicitly run the right cleanups the way we\n/// can with direct jumps.  Thus, an indirect/asm jump is \"trivial\" if it\n/// bypasses no initializations and no teardowns.  More formally, an\n/// indirect/asm jump from A to B is trivial if the path out from A to DCA(A,B)\n/// is trivial and the path in from DCA(A,B) to B is trivial, where DCA(A,B) is\n/// the deepest common ancestor of A and B.  Jump-triviality is transitive but\n/// asymmetric.\n///\n/// A path in is trivial if none of the entered scopes have an InDiag.\n/// A path out is trivial is none of the exited scopes have an OutDiag.\n///\n/// Under these definitions, this function checks that the indirect\n/// jump between A and B is trivial for every indirect goto statement A\n/// and every label B whose address was taken in the function.\nvoid JumpScopeChecker::VerifyIndirectJumps() {\n  // ...\n  // If there aren\'t any address-of-label expressions in this function,\n  // complain about the first indirect goto.\n  if (IndirectJumpTargets.empty()) {\n    S.Diag(IndirectJumps[0]->getBeginLoc(), diag::err_indirect_goto_without_addrlabel);"}}
},
["err_init_capture_deduction_failure"]={
[b]="err_init_capture_deduction_failure",
[i]="cannot deduce type for lambda capture %0 from initializer of type %2",
[j]="cannot deduce type for lambda capture A from initializer of type C",
[h]=k,
[c]="cannot deduce type for lambda capture (.*?) from initializer of type (.*?)",
[f]=a,
[e]=T,
[g]={"ba71c0852340",1368685258,"First pass of semantic analysis for init-captures: check the initializer, build","First pass of semantic analysis for init-captures: check the initializer, build\na FieldDecl from it, and propagate both into the closure type and the\nLambdaExpr.\n\nYou can\'t do much useful with them yet -- you can\'t use them within the body\nof the lambda, because we don\'t have a representation for \"the this of the\nlambda, not the this of the enclosing context\". We also don\'t have support or a\nrepresentation for a nested capture of an init-capture yet, which was intended\nto work despite not being allowed by the current standard wording.\n\nllvm-svn: 181985"},
[d]={{p,12790,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  if (Result != TDK_Success && Result != TDK_AlreadyDiagnosed) {\n    if (!IsInitCapture)\n    // ...\n    else if (isa<InitListExpr>(Init))\n   // ...\n    else\n      Diag(Range.getBegin(), diag::err_init_capture_deduction_failure) << VN << TSI->getType() << (DeduceInit->getType().isNull() ? TSI->getType() : DeduceInit->getType()) << DeduceInit->getSourceRange();"},{"clang/lib/Sema/SemaTemplateDeduction.cpp",4976,"void Sema::DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init) {\n if (isa<InitListExpr>(Init))\n // ...\n  else\n    Diag(VDecl->getLocation(), VDecl->isInitCapture() ? diag::err_init_capture_deduction_failure : diag::err_auto_var_deduction_failure) << VDecl->getDeclName() << VDecl->getType() << Init->getType() << Init->getSourceRange();"}},
[l]={
[l]={
["clang/test/Parser/attr-availability.c"]={"clang/test/Parser/attr-availability.c:36:68: error: expected \'=\' after \'message\'"}
[dc]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp:51:20: error: cannot deduce type for lambda capture \'a\' from initializer of type \'<overloaded function type>\'"}
}
}
},
},
["err_ms_property_has_set_accessor"]={
["err_init_capture_deduction_failure_from_init_list"]={
[c]="err_ms_property_has_set_accessor",
[b]="err_init_capture_deduction_failure_from_init_list",
[d]="putter for property must be specified as \'put\', not \'set\'",
[i]="cannot deduce type for lambda capture %0 from initializer list",
[e]="putter for property must be specified as \'put\', not \'set\'",
[j]="cannot deduce type for lambda capture A from initializer list",
[f]=k,
[h]=k,
[g]="putter for property must be specified as \'put\', not \'set\'",
[c]="cannot deduce type for lambda capture (.*?) from initializer list",
[h]=a,
[f]=a,
[i]=y,
[e]=T,
[b]={Jb,1366097310,Kb,Lb},
[g]={"ba71c0852340",1368685258,"First pass of semantic analysis for init-captures: check the initializer, build","First pass of semantic analysis for init-captures: check the initializer, build\na FieldDecl from it, and propagate both into the closure type and the\nLambdaExpr.\n\nYou can\'t do much useful with them yet -- you can\'t use them within the body\nof the lambda, because we don\'t have a representation for \"the this of the\nlambda, not the this of the enclosing context\". We also don\'t have support or a\nrepresentation for a nested capture of an init-capture yet, which was intended\nto work despite not being allowed by the current standard wording.\n\nllvm-svn: 181985"},
[j]={{hb,665,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n      if (KindStr == \"get\") {\n      // ...\n      } else if (KindStr == \"put\") {\n     // ...\n      } else if (KindStr == \"set\") {\n       Diag(KindLoc, diag::err_ms_property_has_set_accessor) << FixItHint::CreateReplacement(KindLoc, \"put\");"}},
[d]={{p,12784,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  if (Result != TDK_Success && Result != TDK_AlreadyDiagnosed) {\n    if (!IsInitCapture)\n    // ...\n    else if (isa<InitListExpr>(Init))\n      Diag(Range.getBegin(), diag::err_init_capture_deduction_failure_from_init_list) << VN << (DeduceInit->getType().isNull() ? TSI->getType() : DeduceInit->getType()) << DeduceInit->getSourceRange();"},{"clang/lib/Sema/SemaTemplateDeduction.cpp",4971,"void Sema::DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init) {\n if (isa<InitListExpr>(Init))\n   Diag(VDecl->getLocation(), VDecl->isInitCapture() ? diag::err_init_capture_deduction_failure_from_init_list : diag::err_auto_var_deduction_failure_from_init_list) << VDecl->getDeclName() << VDecl->getType() << Init->getSourceRange();"}},
[l]={
[l]={
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:357:23: error: putter for property must be specified as \'put\', not \'set\'"}
[dc]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp:52:20: error: cannot deduce type for lambda capture \'a\' from initializer list"}
}
}
},
},
["err_ms_property_initializer"]={
["err_init_capture_multiple_expressions"]={
[c]="err_ms_property_initializer",
[b]="err_init_capture_multiple_expressions",
[d]={{nil,D,"property declaration cannot have a default member initializer"},{"11.1",nil,"property declaration cannot have an in-class initializer"}},
[i]="initializer for lambda capture %0 contains multiple expressions",
[e]={{nil,D,"property declaration cannot have a default member initializer"},{"11.1",nil,"property declaration cannot have an in-class initializer"}},
[j]="initializer for lambda capture A contains multiple expressions",
[f]=k,
[h]=k,
[g]="property declaration cannot have a default member initializer",
[c]="initializer for lambda capture (.*?) contains multiple expressions",
[h]=a,
[f]=a,
[i]=y,
[e]=T,
[b]={"87ff66ccc750",1418470456,"Parse: MS property members cannot have an in-class initializer","Parse: MS property members cannot have an in-class initializer\n\nWe would crash trying to treat a property member as a field.  These\nshoudl be forbidden anyway, reject programs which contain them.\n\nThis fixes PR21840.\n\nllvm-svn: 224193"},
[g]={"ba71c0852340",1368685258,"First pass of semantic analysis for init-captures: check the initializer, build","First pass of semantic analysis for init-captures: check the initializer, build\na FieldDecl from it, and propagate both into the closure type and the\nLambdaExpr.\n\nYou can\'t do much useful with them yet -- you can\'t use them within the body\nof the lambda, because we don\'t have a representation for \"the this of the\nlambda, not the this of the enclosing context\". We also don\'t have support or a\nrepresentation for a nested capture of an init-capture yet, which was intended\nto work despite not being allowed by the current standard wording.\n\nllvm-svn: 181985"},
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",3263,"/// ParseCXXMemberInitializer - Parse the brace-or-equal-initializer.\n/// Also detect and reject any attempted defaulted/deleted function definition.\n/// The location of the \'=\', if any, will be placed in EqualLoc.\n///\n/// This does not check for a pure-specifier; that\'s handled elsewhere.\n///\n///  brace-or-equal-initializer:\n///    \'=\' initializer-expression\n///    braced-init-list\n///\n///  initializer-clause:\n///    assignment-expression\n///    braced-init-list\n///\n///  defaulted/deleted function-definition:\n///    \'=\' \'default\'\n///    \'=\' \'delete\'\n///\n/// Prior to C++0x, the assignment-expression in an initializer-clause must\n/// be a constant-expression.\nExprResult Parser::ParseCXXMemberInitializer(Decl *D, bool IsFunction, SourceLocation &EqualLoc) {\n  // ...\n  if (const auto *PD = dyn_cast_or_null<MSPropertyDecl>(D)) {\n    Diag(Tok, diag::err_ms_property_initializer) << PD;"}},
[d]={{p,12739,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  if (DeduceInits.size() > 1) {\n    Diag(DeduceInits[1]->getBeginLoc(), IsInitCapture ? diag::err_init_capture_multiple_expressions : diag::err_auto_var_init_multiple_expressions) << VN << Type << Range;"}},
[l]={
[l]={
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:368:44: error: property declaration cannot have a default member initializer"}
[dc]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp:48:25: error: initializer for lambda capture \'a\' contains multiple expressions"}
}
}
},
},
["err_ms_property_missing_accessor_kind"]={
["err_init_capture_no_expression"]={
[c]="err_ms_property_missing_accessor_kind",
[b]="err_init_capture_no_expression",
[d]="missing \'get=\' or \'put=\'",
[i]="initializer missing for lambda capture %0",
[e]="missing \'get=\' or \'put=\'",
[j]="initializer missing for lambda capture A",
[f]=k,
[h]=k,
[g]="missing \'get\\=\' or \'put\\=\'",
[c]="initializer missing for lambda capture (.*?)",
[h]=a,
[f]=a,
[i]=y,
[e]=T,
[b]={Jb,1366097310,Kb,Lb},
[g]={"ba71c0852340",1368685258,"First pass of semantic analysis for init-captures: check the initializer, build","First pass of semantic analysis for init-captures: check the initializer, build\na FieldDecl from it, and propagate both into the closure type and the\nLambdaExpr.\n\nYou can\'t do much useful with them yet -- you can\'t use them within the body\nof the lambda, because we don\'t have a representation for \"the this of the\nlambda, not the this of the enclosing context\". We also don\'t have support or a\nrepresentation for a nested capture of an init-capture yet, which was intended\nto work despite not being allowed by the current standard wording.\n\nllvm-svn: 181985"},
[j]={{hb,672,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n     if (KindStr == \"get\") {\n     // ...\n     } else if (KindStr == \"put\") {\n      // ...\n     } else if (KindStr == \"set\") {\n     // ...\n     } else if (NextToken().is(tok::comma) || NextToken().is(tok::r_paren)) {\n        Diag(KindLoc, diag::err_ms_property_missing_accessor_kind);"}},
[d]={{p,12731,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n // ...\n // Deduction only works if we have exactly one source expression.\n if (DeduceInits.empty()) {\n   // ...\n   Diag(Init->getBeginLoc(), IsInitCapture ? diag::err_init_capture_no_expression : diag::err_auto_var_init_no_expression) << VN << Type << Range;"}},
[l]={
[l]={
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:358:23: error: missing \'get=\' or \'put=\'"}
[dc]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp:55:53: error: initializer missing for lambda capture \'a\'"}
}
}
},
},
["err_ms_property_no_getter_or_putter"]={
["err_init_capture_paren_braces"]={
[c]="err_ms_property_no_getter_or_putter",
[b]="err_init_capture_paren_braces",
[d]="property does not specify a getter or a putter",
[i]="cannot deduce type for lambda capture %1 from %select{parenthesized|nested}0 initializer list",
[e]="property does not specify a getter or a putter",
[j]={{nil,nil,{"cannot deduce type for lambda capture B from ",{"parenthesized","nested"}," initializer list"}}},
[f]=k,
[h]=k,
[g]="property does not specify a getter or a putter",
[c]="cannot deduce type for lambda capture (.*?) from (?:parenthesized|nested) initializer list",
[h]=a,
[f]=a,
[i]=y,
[e]=T,
[b]={Jb,1366097310,Kb,Lb},
[g]={"66204ecff985",1394646165,"DR1346: a parenthesized braced-init-list cannot be used as the initializer when","DR1346: a parenthesized braced-init-list cannot be used as the initializer when\nperforming auto type deduction.\n\nllvm-svn: 203683"},
[j]={{hb,647,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n  // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // Stop if this doesn\'t look like an accessor spec.\n      if (!Tok.is(tok::identifier)) {\n        // If the user wrote a completely empty list, use a special diagnostic.\n        if (Tok.is(tok::r_paren) && !HasInvalidAccessor && AccessorNames[AK_Put] == nullptr && AccessorNames[AK_Get] == nullptr) {\n          Diag(AttrNameLoc, diag::err_ms_property_no_getter_or_putter);"}},
[d]={{p,12748,"QualType Sema::deduceVarTypeFromInitializer(VarDecl *VDecl, DeclarationName Name, QualType Type, TypeSourceInfo *TSI, SourceRange Range, bool DirectInit, Expr *Init) {\n  // ...\n  if (DirectInit && isa<InitListExpr>(DeduceInit)) {\n    Diag(Init->getBeginLoc(), IsInitCapture ? diag::err_init_capture_paren_braces : diag::err_auto_var_init_paren_braces) << isa<InitListExpr>(Init) << VN << Type << Range;"}},
[l]={
[l]={
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:356:14: error: property does not specify a getter or a putter"}
[dc]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp:53:21: error: cannot deduce type for lambda capture \'a\' from nested initializer list"}
}
}
},
},
["err_ms_property_unknown_accessor"]={
["err_init_conversion_failed"]={
[c]="err_ms_property_unknown_accessor",
[b]="err_init_conversion_failed",
[d]="expected \'get\' or \'put\' in property declaration",
[i]="cannot initialize %select{a variable|a parameter|return object|an exception object|a member subobject|an array element|a new value|a value|a base class|a constructor delegation|a vector element|a block element|a complex element|a lambda capture|a compound literal initializer|a related result|a parameter of CF audited function}0 %diff{of type $ with an %select{rvalue|lvalue}2 of type $|with an %select{rvalue|lvalue}2 of incompatible type}1,3%select{|: different classes%diff{ ($ vs $)|}5,6|: different number of parameters (%5 vs %6)|: type mismatch at %ordinal5 parameter%diff{ ($ vs $)|}6,7|: different return type%diff{ ($ vs $)|}5,6|: different qualifiers (%select{none|const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}5 vs %select{none|const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}6)|: different exception specifications}4",
[e]="expected \'get\' or \'put\' in property declaration",
[j]={{nil,n,{bc,{Yb,Wb,"template parameter",Vb,"statement expression result",Pb,pb,Lb,Hb,vb,Mb,Nb,Ob,Z,Z,Qb,Rb,Sb,Ub,Kb,"a structured binding",pb},jb,{{Xb,{Y,X},Tb},{Jb,{Y,X},Db}},{a,{Ib,{W,a}},wb,{xb,{yb,a}},{zb,{W,a}},": different qualifiers (F vs G)",ub}}},{s,mb,{bc,{Yb,Wb,"template parameter",Vb,"statement expression result",Pb,pb,Lb,Hb,vb,Mb,Nb,Ob,Z,Z,Qb,Rb,Sb,Ub,Kb},jb,{{Xb,{Y,X},Tb},{Jb,{Y,X},Db}},{a,{Ib,{W,a}},wb,{xb,{yb,a}},{zb,{W,a}},": different qualifiers (F vs G)",ub}}},{sb,V,{bc,{Yb,Wb,Vb,"statement expression result",Pb,pb,Lb,Hb,vb,Mb,Nb,Ob,Z,Z,Qb,Rb,Sb,Ub,Kb},jb,{{Xb,{Y,X},Tb},{Jb,{Y,X},Db}},{a,{Ib,{W,a}},wb,{xb,{yb,a}},{zb,{W,a}},": different qualifiers (F vs G)",ub}}},{"7.1",A,{bc,{Yb,Wb,Vb,"statement expression result",Pb,pb,Lb,Hb,vb,Mb,Nb,Ob,Z,Z,Qb,Rb,Sb,Ub,Kb},jb,{{Xb,{Y,X},Tb},{Jb,{Y,X},Db}},{a,{Ib,{W,a}},wb,{xb,{yb,a}},{zb,{W,a}},{": different qualifiers (",{Bb,lb,Ab,Cb,eb,Eb,Fb,Gb}," vs ",{Bb,lb,Ab,Cb,eb,Eb,Fb,Gb},")"},ub}}},{J,E,{bc,{Yb,Wb,Vb,Pb,pb,Lb,Hb,vb,Mb,Nb,Ob,Z,Z,Qb,Rb,Sb,Ub,Kb},jb,{{Xb,{Y,X},Tb},{Jb,{Y,X},Db}},{a,{Ib,{W,a}},wb,{xb,{yb,a}},{zb,{W,a}},{": different qualifiers (",{Bb,lb,Ab,Cb,eb,Eb,Fb,Gb}," vs ",{Bb,lb,Ab,Cb,eb,Eb,Fb,Gb},")"},ub}}},{nil,nil,{bc,{Yb,Wb,Vb,Pb,pb,Lb,Hb,vb,Mb,Nb,Ob,Z,Qb,Rb,Sb,Ub,Kb},jb,{{Xb,{Y,X},Tb},{Jb,{Y,X},Db}},{a,{Ib,{W,a}},wb,{xb,{yb,a}},{zb,{W,a}},{": different qualifiers (",{Bb,lb,Ab,Cb,eb,Eb,Fb,Gb}," vs ",{Bb,lb,Ab,Cb,eb,Eb,Fb,Gb},")"},ub}}}},
[f]=k,
[h]=k,
[g]="expected \'get\' or \'put\' in property declaration",
[c]="cannot initialize (?:a variable|a parameter|template parameter|return object|statement expression result|an exception object|a member subobject|an array element|a new value|a value|a base class|a constructor delegation|a vector element|a block element|a block element|a complex element|a lambda capture|a compound literal initializer|a related result|a parameter of CF audited function|a structured binding|a member subobject) (?:of type (.*?) with an (?:rvalue|lvalue) of type (.*?)|with an (?:rvalue|lvalue) of incompatible type)(?:|\\: different classes(?: \\((.*?) vs (.*?)\\)|)|\\: different number of parameters \\((.*?) vs (.*?)\\)|\\: type mismatch at (.*?) parameter(?: \\((.*?) vs (.*?)\\)|)|\\: different return type(?: \\((.*?) vs (.*?)\\)|)|\\: different qualifiers \\((.*?) vs (.*?)\\)|\\: different exception specifications)",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={Jb,1366097310,Kb,Lb},
[g]={"e1314a64b803",1261112541,"Switch the initialization required by return statements over to the","Switch the initialization required by return statements over to the\nnew InitializationSequence. This fixes some bugs (e.g., PR5808),\nchanged some diagnostics, and caused more churn than expected. What\'s\nnew:\n\n  - InitializationSequence now has a \"C conversion sequence\" category\n    and step kind, which falls back to\n  - Changed the diagnostics for returns to always have the result type\n    of the function first and the type of the expression second.\n    CheckSingleAssignmentConstraints to peform checking in C. \n  - Improved ASTs for initialization of return values. The ASTs now\n    capture all of the temporaries we need to create, but\n    intentionally do not bind the tempoary that is actually returned,\n   so that it won\'t get destroyed twice.\n - Make sure to perform an (elidable!) copy of the class object that\n   is returned from a class.\n - Fix copy elision in CodeGen to properly see through the\n   subexpressions that occur with elidable copies.\n  - Give \"new\" its own entity kind; as with return values and thrown\n    objects, we don\'t bind the expression so we don\'t call a\n    destructor for it.\n\nNote that, with this patch, I\'ve broken returning move-only types in\nC++0x. We\'ll fix it later, when we tackle NRVO.\n\nllvm-svn: 91669"},
[j]={{hb,651,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n     // Stop if this doesn\'t look like an accessor spec.\n     if (!Tok.is(tok::identifier)) {\n       // ...\n       Diag(Tok.getLocation(), diag::err_ms_property_unknown_accessor);"},{hb,679,"bool Parser::ParseMicrosoftDeclSpecArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs) {\n // ...\n  if (AttrName->getName() == \"property\") {\n    // ...\n    // Parse the accessor specifications.\n    while (true) {\n      // ...\n     if (KindStr == \"get\") {\n      // ...\n     } else if (KindStr == \"put\") {\n     // ...\n     } else if (KindStr == \"set\") {\n     // ...\n     } else if (NextToken().is(tok::comma) || NextToken().is(tok::r_paren)) {\n      // ...\n      } else {\n        Diag(KindLoc, diag::err_ms_property_unknown_accessor);"}},
[d]={{H,9785,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ConversionFailed: {\n   // ...\n   PartialDiagnostic PDiag = S.PDiag(diag::err_init_conversion_failed) << (int)Entity.getKind() << DestType << OnlyArg->isLValue() << FromType << Args[0]->getSourceRange();"}},
[l]={
[l]={
[Mb]={"clang/test/Parser/MicrosoftExtensions.cpp:359:23: error: expected \'get\' or \'put\' in property declaration","clang/test/Parser/MicrosoftExtensions.cpp:365:32: error: expected \'get\' or \'put\' in property declaration"}
["clang/test/SemaTemplate/instantiate-typedef.cpp"]={"clang/test/SemaTemplate/instantiate-typedef.cpp:11:10: error: cannot initialize return object of type \'add_pointer<float>::type\' (aka \'float *\') with an lvalue of type \'int *\'"}
}
}
},
},
["err_ms_va_start_used_in_sysv_function"]={
["err_init_element_not_constant"]={
[c]="err_ms_va_start_used_in_sysv_function",
[b]="err_init_element_not_constant",
[d]="\'__builtin_ms_va_start\' used in System V ABI function",
[i]="initializer element is not a compile-time constant",
[e]="\'__builtin_ms_va_start\' used in System V ABI function",
[j]="initializer element is not a compile-time constant",
[f]=k,
[h]=k,
[g]="\'__builtin_ms_va_start\' used in System V ABI function",
[c]="initializer element is not a compile\\-time constant",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"c7d5c94f78c7",1442523333,"Support __builtin_ms_va_list.","Support __builtin_ms_va_list.\n\nSummary:\nThis change adds support for `__builtin_ms_va_list`, a GCC extension for\nvariadic `ms_abi` functions. The existing `__builtin_va_list` support is\ninadequate for this because `va_list` is defined differently in the Win64\nABI vs. the System V/AMD64 ABI.\n\nDepends on D1622.\n\nReviewers: rsmith, rnk, rjmccall\n\nCC: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D1623\n\nllvm-svn: 247941"},
[g]={x,1237025389,y,z},
[j]={{X,8043,"/// 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      // Don\'t allow this in System V ABI functions.\n      if (CC == CC_X86_64SysV || (!IsWindows && CC != CC_Win64))\n        return S.Diag(Fn->getBeginLoc(), diag::err_ms_va_start_used_in_sysv_function);"}},
[d]={{p,12327,"bool Sema::CheckForConstantInitializer(Expr *Init, QualType DclT) {\n  // ...\n  Diag(Culprit->getExprLoc(), diag::err_init_element_not_constant) << Culprit->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/varargs-aarch64.c"]={"clang/test/Sema/varargs-aarch64.c:5:3: error: \'__builtin_ms_va_start\' used in System V ABI function"}
["clang/test/Sema/offsetof-64.c"]={"clang/test/Sema/offsetof-64.c:22:13: error: initializer element is not a compile-time constant"}
}
}
},
},
["err_msasm_unable_to_create_target"]={
["err_init_for_function_type"]={
[c]="err_msasm_unable_to_create_target",
[b]={{nil,E,"err_init_for_function_type"}},
[d]="MS-style inline assembly is not available: %0",
[i]={{nil,E,"cannot create object of function type %0"}},
[e]="MS-style inline assembly is not available: A",
[j]={{nil,E,"cannot create object of function type A"}},
[f]=k,
[h]=k,
[g]="MS\\-style inline assembly is not available\\: (.*?)",
[c]="cannot create object of function type (.*?)",
[h]=a,
[f]=a,
[i]="Inline Assembly Issue",
[e]={{nil,E,m}},
[b]={"45cf31f7d390",1383143368,"Recover instead of crashing on MS assembly when no target is loaded","Recover instead of crashing on MS assembly when no target is loaded\n\nIt\'s possible to embed the frontend in applications that haven\'t initialized\nbackend targets so we need to handle this condition gracefully.\n\nllvm-svn: 193685"},
[g]={"49a6b6e91edf",1490318065,"Fix handling of initialization from parenthesized initializer list.","Fix handling of initialization from parenthesized initializer list.\n\nThis change fixes a crash on initialization of a reference from ({}) during\ntemplate instantiation and incidentally improves diagnostics.\n\nThis reverts a prior attempt to handle this in r286721. Instead, we teach the\ninitialization code that initialization cannot be performed if a source type\nis required and the initializer is an initializer list (which is not an\nexpression and does not have a type), and likewise for function-style cast\nexpressions.\n\nllvm-svn: 298676"},
[j]={{wc,543,"/// ParseMicrosoftAsmStatement. When -fms-extensions/-fasm-blocks is enabled,\n/// this routine is called to collect the tokens for an MS asm statement.\n///\n/// [MS]  ms-asm-statement:\n///        ms-asm-block\n///        ms-asm-block ms-asm-statement\n///\n/// [MS]  ms-asm-block:\n///        \'__asm\' ms-asm-line \'\\n\'\n///        \'__asm\' \'{\' ms-asm-instruction-block[opt] \'}\' \';\'[opt]\n///\n/// [MS]  ms-asm-instruction-block\n///        ms-asm-line\n///        ms-asm-line \'\\n\' ms-asm-instruction-block\n///\nStmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {\n  // ...\n if (!TheTriple.isX86()) {\n  // ...\n  } else {\n    // ...\n    if (!TheTarget)\n      Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << Error;"},{wc,571,"/// ParseMicrosoftAsmStatement. When -fms-extensions/-fasm-blocks is enabled,\n/// this routine is called to collect the tokens for an MS asm statement.\n///\n/// [MS]  ms-asm-statement:\n///        ms-asm-block\n///        ms-asm-block ms-asm-statement\n///\n/// [MS]  ms-asm-block:\n///        \'__asm\' ms-asm-line \'\\n\'\n///        \'__asm\' \'{\' ms-asm-instruction-block[opt] \'}\' \';\'[opt]\n///\n/// [MS]  ms-asm-instruction-block\n///        ms-asm-line\n///        ms-asm-line \'\\n\' ms-asm-instruction-block\n///\nStmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {\n  // ...\n  if (!MRI) {\n    Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << \"target MC unavailable\";"},{wc,586,"/// ParseMicrosoftAsmStatement. When -fms-extensions/-fasm-blocks is enabled,\n/// this routine is called to collect the tokens for an MS asm statement.\n///\n/// [MS]  ms-asm-statement:\n///        ms-asm-block\n///        ms-asm-block ms-asm-statement\n///\n/// [MS]  ms-asm-block:\n///        \'__asm\' ms-asm-line \'\\n\'\n///        \'__asm\' \'{\' ms-asm-instruction-block[opt] \'}\' \';\'[opt]\n///\n/// [MS]  ms-asm-instruction-block\n///        ms-asm-line\n///        ms-asm-line \'\\n\' ms-asm-instruction-block\n///\nStmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {\n  // ...\n  if (!MAI || !MII || !STI) {\n    Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << \"target MC unavailable\";"},{wc,611,"/// ParseMicrosoftAsmStatement. When -fms-extensions/-fasm-blocks is enabled,\n/// this routine is called to collect the tokens for an MS asm statement.\n///\n/// [MS]  ms-asm-statement:\n///        ms-asm-block\n///        ms-asm-block ms-asm-statement\n///\n/// [MS]  ms-asm-block:\n///        \'__asm\' ms-asm-line \'\\n\'\n///        \'__asm\' \'{\' ms-asm-instruction-block[opt] \'}\' \';\'[opt]\n///\n/// [MS]  ms-asm-instruction-block\n///        ms-asm-line\n///        ms-asm-line \'\\n\' ms-asm-instruction-block\n///\nStmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {\n  // ...\n  // Target AsmParser may not be linked in clang-based tools.\n  if (!TargetParser) {\n    Diag(AsmLoc, diag::err_msasm_unable_to_create_target) << \"target ASM parser unavailable\";"}}
[d]={{I,1575,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n // ...\n  // Only construct objects with object types.\n  // The standard doesn\'t explicitly forbid function types here, but that\'s an\n  // obvious oversight, as there\'s no way to dynamically construct a function\n  // in general.\n  if (Ty->isFunctionType())\n    return ExprError(Diag(TyBeginLoc, diag::err_init_for_function_type) << Ty << FullRange);"}},
},
["err_msasm_unsupported_arch"]={
[c]="err_msasm_unsupported_arch",
[d]={{nil,u,"unsupported architecture \'%0\' for MS-style inline assembly"},{D,nil,"Unsupported architecture \'%0\' for MS-style inline assembly"}},
[e]={{nil,u,"unsupported architecture \'A\' for MS-style inline assembly"},{D,nil,"Unsupported architecture \'A\' for MS-style inline assembly"}},
[f]=k,
[g]="unsupported architecture \'(.*?)\' for MS\\-style inline assembly",
[h]=a,
[i]="Inline Assembly Issue",
[b]={"282d675b2878",1359059074,"[ms-inline asm] Add an error when trying to compile MS-style inline assembly","[ms-inline asm] Add an error when trying to compile MS-style inline assembly\nfor an unsupported architecture.\nrdar://13063988\n\nllvm-svn: 173364"},
[j]={{wc,538,"/// ParseMicrosoftAsmStatement. When -fms-extensions/-fasm-blocks is enabled,\n/// this routine is called to collect the tokens for an MS asm statement.\n///\n/// [MS] ms-asm-statement:\n///        ms-asm-block\n///        ms-asm-block ms-asm-statement\n///\n/// [MS] ms-asm-block:\n///        \'__asm\' ms-asm-line \'\\n\'\n///        \'__asm\' \'{\' ms-asm-instruction-block[opt] \'}\' \';\'[opt]\n///\n/// [MS] ms-asm-instruction-block\n///        ms-asm-line\n///        ms-asm-line \'\\n\' ms-asm-instruction-block\n///\nStmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {\n  // ...\n  if (!TheTriple.isX86()) {\n    Diag(AsmLoc, diag::err_msasm_unsupported_arch) << TheTriple.getArchName();"}},
[l]={
[l]={
["clang/test/Sema/ms-inline-asm-invalid-arch.c"]={"clang/test/Sema/ms-inline-asm-invalid-arch.c:4:3: error: unsupported architecture \'powerpc64\' for MS-style inline assembly"}
["clang/test/SemaCXX/type-convert-construct.cpp"]={"clang/test/SemaCXX/type-convert-construct.cpp:11:3: error: cannot create object of function type \'fn_ty\' (aka \'void ()\')","clang/test/SemaCXX/type-convert-construct.cpp:13:3: error: cannot create object of function type \'fn_ty\' (aka \'void ()\')","clang/test/SemaCXX/type-convert-construct.cpp:15:3: error: cannot create object of function type \'fn_ty\' (aka \'void ()\')","clang/test/SemaCXX/type-convert-construct.cpp:16:3: error: cannot create object of function type \'fn_ty\' (aka \'void ()\')","clang/test/SemaCXX/type-convert-construct.cpp:17:3: error: cannot create object of function type \'fn_ty\' (aka \'void ()\')","clang/test/SemaCXX/type-convert-construct.cpp:18:3: error: cannot create object of function type \'fn_ty\' (aka \'void ()\')"}
}
}
},
},
["err_msvc_annotation_wide_str"]={
["err_init_incomplete_type"]={
[c]={{nil,t,"err_msvc_annotation_wide_str"}},
[b]="err_init_incomplete_type",
[d]={{nil,t,"arguments to __annotation must be wide string constants"}},
[i]="initialization of incomplete type %0",
[e]={{nil,t,"arguments to __annotation must be wide string constants"}},
[j]="initialization of incomplete type A",
[f]=k,
[h]=k,
[g]="arguments to __annotation must be wide string constants",
[c]="initialization of incomplete type (.*?)",
[h]=a,
[f]=a,
[i]={{nil,t,m}},
[e]=m,
[b]={"30701edf761c",1504643255,"[ms] Implement the __annotation intrinsic","[ms] Implement the __annotation intrinsic\n\nllvm-svn: 312572"},
[g]={"3f4f03a23553",1274393522,"Add a new failure kind, FK_Incomplete, to InitializationSequence, to","Add a new failure kind, FK_Incomplete, to InitializationSequence, to\ncapture failures when we try to initialize an incomplete\ntype. Previously, we would (ab)use FK_ConversionFailed, then\noccasionally dereference a null pointer when trying to diagnose the\nfailure. Fixes <rdar://problem/7959007>.\n\nllvm-svn: 104286"},
[j]={{X,229,"static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) {\n  // ...\n  // All arguments should be wide string literals.\n  for (Expr *Arg : TheCall->arguments()) {\n    // ...\n    if (!Literal || !Literal->isWide()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_msvc_annotation_wide_str) << Arg->getSourceRange();"}},
[d]={{H,9976,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_Incomplete:\n    S.RequireCompleteType(Kind.getLocation(), FailedIncompleteType, diag::err_init_incomplete_type);"}},
[l]={
[l]={
["clang/test/Sema/ms-annotation.c"]={"clang/test/Sema/ms-annotation.c:7:16: error: arguments to __annotation must be wide string constants","clang/test/Sema/ms-annotation.c:10:30: error: arguments to __annotation must be wide string constants"}
["clang/test/SemaCXX/cxx0x-initializer-constructor.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-constructor.cpp:285:12: error: initialization of incomplete type \'const ArrayRef\'"}
}
}
},
},
["err_mt_message"]={
["err_init_list_bad_dest_type"]={
[c]="err_mt_message",
[b]="err_init_list_bad_dest_type",
[d]="[rewriter] %0",
[i]="%select{|non-aggregate }0type %1 cannot be initialized with an initializer list",
[e]="[rewriter] A",
[j]={{nil,nil,{{a,"non-aggregate "},"type B cannot be initialized with an initializer list"}}},
[f]=k,
[h]=k,
[g]="\\[rewriter\\] (.*?)",
[c]="(?:|non\\-aggregate )type (.*?) cannot be initialized with an initializer list",
[h]=a,
[f]=a,
[i]=w,
[e]=m,
[b]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions","ARCMigrate: Introduce proper diagnostics for TransformActions\n\nThis starts to switch ARCMT to use proper diagnostic messages. The old use was\nbased on incorrect example code from the documentation.\n\nThe logic of the previous report() functions has been retained to support any\nexternal consumers that might be intercepting diagnostic messages through the\nold interface.\n\nNote that the change in test/Misc/warning-flags.c isn\'t a new warning without a\nflag, rather one that was previously invisible to the test. Adding a flag might\nbe a good idea though.\n\nllvm-svn: 200124"},
[g]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences.","Move initialization via initializer list over to InitializationSequences.\n\nllvm-svn: 91050"},
[j]={{"clang/lib/ARCMigrate/TransformActions.cpp",690,"void TransformActions::reportError(StringRef message, SourceLocation loc, SourceRange range) { report(loc, diag::err_mt_message, range) << message; }"}},
[d]={{H,9833,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_InitListBadDestinationType:\n    S.Diag(Kind.getLocation(), diag::err_init_list_bad_dest_type) << (DestType->isRecordType()) << DestType << Args[0]->getSourceRange();"}},
[l]={
[l]={
["clang/test/ARCMT/nonobjc-to-objc-cast-2.m"]={"clang/test/ARCMT/nonobjc-to-objc-cast-2.m:53:10: error: [rewriter] it is not safe to cast to \'CFStringRef\' the result of \'autorelease\' message; a __bridge cast may result in a pointer to a destroyed object and a __bridge_retained may leak the object"}
["clang/test/Parser/cxx2a-designated-init.cpp"]={"clang/test/Parser/cxx2a-designated-init.cpp:13:14: error: non-aggregate type \'A\' cannot be initialized with an initializer list"}
}
}
},
},
["err_multichar_character_literal"]={
["err_init_list_bin_op"]={
[c]={{nil,S,"err_multichar_character_literal"}},
[b]="err_init_list_bin_op",
[d]={{nil,S,"%select{wide|Unicode}0 character literals may not contain multiple characters"}},
[i]="initializer list cannot be used on the %select{left|right}0 hand side of operator \'%1\'",
[e]={{nil,S,{{"wide","Unicode"}," character literals may not contain multiple characters"}}},
[j]={{nil,nil,{"initializer list cannot be used on the ",{"left","right"}," hand side of operator \'B\'"}}},
[f]=k,
[h]=k,
[g]="(?:wide|Unicode) character literals may not contain multiple characters",
[c]="initializer list cannot be used on the (?:left|right) hand side of operator \'(.*?)\'",
[h]=a,
[f]=a,
[i]={{nil,S,A}},
[e]=C,
[b]={nc,1625925174,kc,Dc},
[g]={"5e0cac784a57",1330570757,"Reject \'a = {0} = {0}\' rather than parsing it as \'(a = {0}) = {0}\'. Also","Reject \'a = {0} = {0}\' rather than parsing it as \'(a = {0}) = {0}\'. Also\nimprove the diagnostics for some attempts to use initializer lists in\nexpressions.\n\nllvm-svn: 151794"},
[j]={{"clang/lib/Lex/LiteralSupport.cpp",1800,"/// \\verbatim\n///       user-defined-character-literal: [C++11 lex.ext]\n///        character-literal ud-suffix\n///      ud-suffix:\n///        identifier\n///      character-literal: [C++11 lex.ccon]\n///        \' c-char-sequence \'\n///        u\' c-char-sequence \'\n///         U\' c-char-sequence \'\n///        L\' c-char-sequence \'\n///         u8\' c-char-sequence \' [C++1z lex.ccon]\n///      c-char-sequence:\n///        c-char\n///        c-char-sequence c-char\n///      c-char:\n///        any member of the source character set except the single-quote \',\n///          backslash \\, or new-line character\n///        escape-sequence\n///        universal-character-name\n///      escape-sequence:\n///        simple-escape-sequence\n///         octal-escape-sequence\n///        hexadecimal-escape-sequence\n///      simple-escape-sequence:\n///         one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///      octal-escape-sequence:\n///        \\ octal-digit\n///        \\ octal-digit octal-digit\n///        \\ octal-digit octal-digit octal-digit\n///      hexadecimal-escape-sequence:\n///        \\x hexadecimal-digit\n///        hexadecimal-escape-sequence hexadecimal-digit\n///      universal-character-name: [C++11 lex.charset]\n///        \\u hex-quad\n///         \\U hex-quad hex-quad\n///       hex-quad:\n///        hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  // ...\n  if (NumCharsSoFar > 1) {\n    if (isOrdinary() && NumCharsSoFar == 4)\n   // ...\n   else if (isOrdinary())\n   // ...\n   else {\n     PP.Diag(Loc, diag::err_multichar_character_literal) << (isWide() ? 0 : 1);"}},
[d]={{Zb,472,"/// 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       if (!TernaryMiddle.isInvalid()) {\n         Diag(BraceLoc, diag::err_init_list_bin_op) << /*RHS*/ 1 << PP.getSpelling(OpToken) << Actions.getExprRange(TernaryMiddle.get());"},{Zb,575,"/// 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   // Get the precedence of the operator to the right of the RHS.  If it binds\n   // more tightly with RHS than we do, evaluate it completely first.\n   if (ThisPrec < NextTokPrec || (ThisPrec == NextTokPrec && isRightAssoc)) {\n     if (!RHS.isInvalid() && RHSIsInitList) {\n       Diag(Tok, diag::err_init_list_bin_op) << /*LHS*/ 0 << PP.getSpelling(Tok) << Actions.getExprRange(RHS.get());"},{Zb,606,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n // ...\n while (true) {\n   // ...\n   if (!RHS.isInvalid() && RHSIsInitList) {\n     if (ThisPrec == prec::Assignment) {\n     // ...\n     } else if (ColonLoc.isValid()) {\n       Diag(ColonLoc, diag::err_init_list_bin_op) << /*RHS*/ 1 << \":\" << Actions.getExprRange(RHS.get());"},{Zb,611,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  // ...\n  while (true) {\n    // ...\n    if (!RHS.isInvalid() && RHSIsInitList) {\n      if (ThisPrec == prec::Assignment) {\n     // ...\n     } else if (ColonLoc.isValid()) {\n     // ...\n     } else {\n       Diag(OpToken, diag::err_init_list_bin_op) << /*RHS*/ 1 << PP.getSpelling(OpToken) << Actions.getExprRange(RHS.get());"}},
[l]={
[l]={
["clang/test/Lexer/wchar.c"]={"clang/test/Lexer/wchar.c:6:9: error: wide character literals may not contain multiple characters","clang/test/Lexer/wchar.c:8:9: error: wide character literals may not contain multiple characters"}
["clang/test/Parser/cxx11-brace-initializers.cpp"]={"clang/test/Parser/cxx11-brace-initializers.cpp:28:24: error: initializer list cannot be used on the right hand side of operator \'?\'","clang/test/Parser/cxx11-brace-initializers.cpp:29:26: error: initializer list cannot be used on the right hand side of operator \':\'"}
}
}
},
},
["err_multiple_base_initialization"]={
["err_init_method_bad_return_type"]={
[c]="err_multiple_base_initialization",
[b]="err_init_method_bad_return_type",
[d]="multiple initializations given for base %0",
[i]="init methods must return an object pointer type, not %0",
[e]="multiple initializations given for base A",
[j]="init methods must return an object pointer type, not A",
[f]=k,
[h]=k,
[g]="multiple initializations given for base (.*?)",
[c]="init methods must return an object pointer type, not (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"23eebd9c1ee8",1270891731,"Diagnose more cases of initializing distinct members of an anonymous union","Diagnose more cases of initializing distinct members of an anonymous union\nmember.  Use a better diagnostic for this case. Also fix a bug with nested\nanonymous structs/unions for -Wreorder;  this last was PR6575.\n\nllvm-svn: 100923"},
[g]={"31168b077c36",1308178962,"Automatic Reference Counting.","Automatic Reference Counting.\n\nLanguage-design credit goes to a lot of people, but I particularly want\nto single out Blaine Garst and Patrick Beard for their contributions.\n\nCompiler implementation credit goes to Argyrios, Doug, Fariborz, and myself,\nin no particular order.\n\nllvm-svn: 133103"},
[j]={{Q,5640,"bool CheckRedundantInit(Sema &S, CXXCtorInitializer *Init, CXXCtorInitializer *&PrevInit) {\n  // ...\n  if (FieldDecl *Field = Init->getAnyMember())\n  // ...\n  else {\n    // ...\n    S.Diag(Init->getSourceLocation(), diag::err_multiple_base_initialization) << QualType(BaseClass, 0) << Init->getSourceRange();"}},
[d]={{u,2981,"static void handleObjCMethodFamilyAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (F == ObjCMethodFamilyAttr::OMF_init && !M->getReturnType()->isObjCObjectPointerType()) {\n    S.Diag(M->getLocation(), diag::err_init_method_bad_return_type) << M->getReturnType();"}}
[l]={
["clang/test/SemaCXX/class-base-member-init.cpp"]={"clang/test/SemaCXX/class-base-member-init.cpp:14:5: error: multiple initializations given for base \'S\'","clang/test/SemaCXX/class-base-member-init.cpp:35:7: error: multiple initializations given for base \'A<T>\'","clang/test/SemaCXX/class-base-member-init.cpp:42:7: error: multiple initializations given for base \'T\'","clang/test/SemaCXX/class-base-member-init.cpp:86:14: error: multiple initializations given for base \'decltype(Base(1))\' (aka \'test5::Base\')"}
}
},
},
["err_multiple_def_index"]={
["err_init_non_aggr_init_list"]={
[c]={{nil,t,"err_multiple_def_index"}},
[b]="err_init_non_aggr_init_list",
[d]={{nil,t,"multiple definitions are found for the same key in index "}},
[i]="initialization of non-aggregate type %0 with an initializer list",
[e]={{nil,t,"multiple definitions are found for the same key in index "}},
[j]="initialization of non-aggregate type A with an initializer list",
[f]=k,
[h]=k,
[g]="multiple definitions are found for the same key in index ",
[c]="initialization of non\\-aggregate type (.*?) with an initializer list",
[h]=a,
[f]=a,
[i]={{nil,t,w}},
[e]=m,
[b]={"e350b0a19629",1506078661,"Add Cross Translation Unit support library","Add Cross Translation Unit support library\n\nThis patch introduces a class that can help to build tools that require cross\ntranslation unit facilities. This class allows function definitions to be loaded\nfrom external AST files based on an index. In order to use this functionality an\nindex is required. The index format is a flat text file but it might be\nreplaced with a different solution in the near future. USRs are used as names to\nlook up the functions definitions. This class also does caching to avoid\nredundant loading of AST files.\n\nRight now only function defnitions can be loaded using this API because this is\nwhat the in progress cross translation unit feature of the Static Analyzer\nrequires. In to future this might be extended to classes, types etc.\n\nDifferential Revision: https://reviews.llvm.org/D34512\n\nllvm-svn: 313975"},
[g]={S,1236199783,R,Q},
[j]={{"clang/lib/CrossTU/CrossTranslationUnit.cpp",382,"void CrossTranslationUnitContext::emitCrossTUDiagnostics(const IndexError &IE) {\n  // ...\n  case index_error_code::multiple_definitions:\n    Context.getDiagnostics().Report(diag::err_multiple_def_index) << IE.getLineNum();"}}
[d]={{H,1727,"void InitListChecker::CheckReferenceType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  // ...\n  if (isa<InitListExpr>(expr) && !SemaRef.getLangOpts().CPlusPlus11) {\n    if (!VerifyOnly)\n      SemaRef.Diag(IList->getBeginLoc(), diag::err_init_non_aggr_init_list) << DeclType << IList->getSourceRange();"}}
},
},
["err_multiple_default_labels_defined"]={
["err_init_objc_class"]={
[c]="err_multiple_default_labels_defined",
[b]="err_init_objc_class",
[d]="multiple default labels in one switch",
[i]="cannot initialize Objective-C class type %0",
[e]="multiple default labels in one switch",
[j]="cannot initialize Objective-C class type A",
[f]=k,
[h]=k,
[g]="multiple default labels in one switch",
[c]="cannot initialize Objective\\-C class type (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={ib,1237025389,fb,gb},
[g]={"50ec46d4af82",1272911077,"Complain when we try to initialize an object of Objective-C class type","Complain when we try to initialize an object of Objective-C class type\n(which is ill-formed) with an initializer list. Also, change the\nfallback from an assertion to a generic error message, which is far\nfriendlier. Fixes <rdar://problem/7730948>.\n\nllvm-svn: 102930"},
[j]={{F,1280,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  // ...\n  for (SwitchCase *SC = SS->getSwitchCaseList(); SC && !HasDependentValue; SC = SC->getNextSwitchCase()) {\n   if (DefaultStmt *DS = dyn_cast<DefaultStmt>(SC)) {\n     if (TheDefaultStmt) {\n       Diag(DS->getDefaultLoc(), diag::err_multiple_default_labels_defined);"}},
[d]={{H,1374,"void InitListChecker::CheckListElementTypes(const InitializedEntity &Entity, InitListExpr *IList, QualType &DeclType, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool TopLevelObject) {\n  if (DeclType->isAnyComplexType() && SubobjectIsDesignatorContext) {\n  // ...\n  } else if (DeclType->isScalarType()) {\n  // ...\n  } else if (DeclType->isVectorType()) {\n  // ...\n  } else if (const RecordDecl *RD = getRecordDecl(DeclType)) {\n  // ...\n  } else if (DeclType->isArrayType()) {\n  // ...\n  } else if (DeclType->isVoidType() || DeclType->isFunctionType()) {\n // ...\n  } else if (DeclType->isReferenceType()) {\n // ...\n  } else if (DeclType->isObjCObjectType()) {\n   if (!VerifyOnly)\n      SemaRef.Diag(IList->getBeginLoc(), diag::err_init_objc_class) << DeclType;"}},
[l]={
[l]={
["clang/test/CXX/stmt.stmt/stmt.label/p1.cpp"]={"clang/test/CXX/stmt.stmt/stmt.label/p1.cpp:22:5: error: multiple default labels in one switch"}
["clang/test/SemaObjC/compound-init.m"]={"clang/test/SemaObjC/compound-init.m:6:6: error: cannot initialize Objective-C class type \'A\'"}
}
}
},
},
["err_multiple_final_overriders"]={
["err_init_priority_object_attr"]={
[c]="err_multiple_final_overriders",
[b]="err_init_priority_object_attr",
[d]="virtual function %q0 has more than one final overrider in %1",
[i]="can only use \'init_priority\' attribute on file-scope definitions of objects of class type",
[e]="virtual function A has more than one final overrider in B",
[j]="can only use \'init_priority\' attribute on file-scope definitions of objects of class type",
[f]=k,
[h]=k,
[g]="virtual function (.*?) has more than one final overrider in (.*?)",
[c]="can only use \'init_priority\' attribute on file\\-scope definitions of objects of class type",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"4165bd677248",1269388076,"Implement computation of the final overriders for each virtual","Implement computation of the final overriders for each virtual\nfunction within a class hierarchy (C++ [class.virtual]p2).\n\nWe use the final-overrider computation to determine when a particular\nclass is ill-formed because it has multiple final overriders for a\ngiven virtual function (e.g., because two virtual functions override\nthe same virtual function in the same virtual base class). Fixes\nPR5973.\n\nWe also use the final-overrider computation to determine which virtual\nmember functions are pure when determining whether a class is\nabstract or diagnosing the improper use of an abstract class. The\nprior approach to determining whether there were any pure virtual\nfunctions in a class didn\'t cope with virtual base class subobjects\nproperly, and could not easily be fixed to deal with the oddities of\nsubobject hiding. Fixes PR6631.\n\nllvm-svn: 99351"},
[g]={"0bf5ee74c473",1276902893,"More Sema Check and a test case for init_priority attr.","More Sema Check and a test case for init_priority attr.\n(radar 8076356).\n\nllvm-svn: 106350"},
[j]={{o,18999,"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 (CXXRecord) {\n      // ...\n      if (!CXXRecord->isDependentType()) {\n        if (!CXXRecord->isInvalidDecl()) {\n         // If we have virtual base classes, we may end up finding multiple\n          // final overriders for a given virtual function. Check for this\n          // problem now.\n          if (CXXRecord->getNumVBases()) {\n           // ...\n           for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(), MEnd = FinalOverriders.end(); M != MEnd; ++M) {\n              for (OverridingMethods::iterator SO = M->second.begin(), SOEnd = M->second.end(); SO != SOEnd; ++SO) {\n               // ...\n                Diag(Record->getLocation(), diag::err_multiple_final_overriders) << (const NamedDecl *)M->first << Record;"}},
[d]={{u,3856,"/// Handle __attribute__((init_priority(priority))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html\nstatic void handleInitPriorityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.getCurFunctionOrMethodDecl()) {\n    S.Diag(AL.getLoc(), diag::err_init_priority_object_attr);"},{u,3864,"/// Handle __attribute__((init_priority(priority))) attributes based on\n/// http://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html\nstatic void handleInitPriorityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (!T->getAs<RecordType>()) {\n   S.Diag(AL.getLoc(), diag::err_init_priority_object_attr);"}},
[l]={
[l]={
["clang/test/CXX/class.derived/class.virtual/p2.cpp"]={"clang/test/CXX/class.derived/class.virtual/p2.cpp:18:8: error: virtual function \'A::f\' has more than one final overrider in \'D\'","clang/test/CXX/class.derived/class.virtual/p2.cpp:22:8: error: virtual function \'A::f\' has more than one final overrider in \'E\'"}
["clang/test/SemaCXX/init-priority-attr.cpp"]={"init-priority-attr.cpp:50:23: error: can only use \'init_priority\' attribute on file-scope definitions of objects of class type","init-priority-attr.cpp:54:26: error: can only use \'init_priority\' attribute on file-scope definitions of objects of class type"}
}
}
},
},
["err_multiple_mem_initialization"]={
["err_init_reference_member_uninitialized"]={
[c]="err_multiple_mem_initialization",
[b]="err_init_reference_member_uninitialized",
[d]="multiple initializations given for non-static member %0",
[i]="reference member of type %0 uninitialized",
[e]="multiple initializations given for non-static member A",
[j]="reference member of type A uninitialized",
[f]=k,
[h]=k,
[g]="multiple initializations given for non\\-static member (.*?)",
[c]="reference member of type (.*?) uninitialized",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"23eebd9c1ee8",1270891731,"Diagnose more cases of initializing distinct members of an anonymous union","Diagnose more cases of initializing distinct members of an anonymous union\nmemberUse a better diagnostic for this case. Also fix a bug with nested\nanonymous structs/unions for -Wreorderthis last was PR6575.\n\nllvm-svn: 100923"},
[g]={S,1236199783,R,Q},
[j]={{Q,5633,"bool CheckRedundantInit(Sema &S, CXXCtorInitializer *Init, CXXCtorInitializer *&PrevInit) {\n  // ...\n  if (FieldDecl *Field = Init->getAnyMember())\n    S.Diag(Init->getSourceLocation(), diag::err_multiple_mem_initialization) << Field->getDeclName() << Init->getSourceRange();"}},
[d]={{H,735,"void InitListChecker::FillInEmptyInitForField(unsigned Init, FieldDecl *Field, const InitializedEntity &ParentEntity, InitListExpr *ILE, bool &RequiresSecondPass, bool FillWithNoInit) {\n  // ...\n if (Init >= NumInits || !ILE->getInit(Init)) {\n    // ...\n    if (Field->getType()->isReferenceType()) {\n      if (!VerifyOnly) {\n        // ...\n        SemaRef.Diag(Loc, diag::err_init_reference_member_uninitialized) << Field->getType() << (ILE->isSyntacticForm() ? ILE : ILE->getSyntacticForm())->getSourceRange();"},{H,1716,"void InitListChecker::CheckReferenceType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n if (Index >= IList->getNumInits()) {\n    // FIXME: It would be wonderful if we could point at the actual member. In\n    // general, it would be useful to pass location information down the stack,\n    // so that we know the location (or decl) of the \"current object\" being\n    // initialized.\n   if (!VerifyOnly)\n      SemaRef.Diag(IList->getBeginLoc(), diag::err_init_reference_member_uninitialized) << DeclType << IList->getSourceRange();"},{H,5612,"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  } else if (auto *RT = Entity.getType()->getAs<RecordType>()) {\n    // ...\n    for (FieldDecl *FD : RD->fields()) {\n      // ...\n      if (EntityIndexToProcess < Args.size()) {\n      // ...\n      } else {\n        // We\'ve processed all of the args, but there are still members that\n        // have to be initialized.\n        if (FD->hasInClassInitializer()) {\n        // ...\n        } else {\n          // C++ [dcl.init]p17.6.2.2\n          //  The remaining elements...otherwise are value initialzed\n          if (FD->getType()->isReferenceType()) {\n            // ...\n            if (!VerifyOnly) {\n              // ...\n              S.Diag(SR.getEnd(), diag::err_init_reference_member_uninitialized) << FD->getType() << SR;"}},
[l]={
[l]={
["clang/test/SemaCXX/class-base-member-init.cpp"]={"clang/test/SemaCXX/class-base-member-init.cpp:12:5: error: multiple initializations given for non-static member \'b1\'","clang/test/SemaCXX/class-base-member-init.cpp:51:7: error: multiple initializations given for non-static member \'t\'","clang/test/SemaCXX/class-base-member-init.cpp:97:11: error: multiple initializations given for non-static member \'a\'"}
["clang/test/SemaCXX/designated-initializers.cpp"]={"clang/test/SemaCXX/designated-initializers.cpp:90:3: error: reference member of type \'int &\' uninitialized","clang/test/SemaCXX/designated-initializers.cpp:93:3: error: reference member of type \'int &\' uninitialized"}
}
}
},
},
["err_multiple_mem_union_initialization"]={
["err_initializer_overrides_destructed"]={
[c]="err_multiple_mem_union_initialization",
[b]={{nil,F,"err_initializer_overrides_destructed"}},
[d]="initializing multiple members of union",
[i]={{nil,F,"initializer would partially override prior initialization of object of type %1 with non-trivial destruction"}},
[e]="initializing multiple members of union",
[j]={{nil,F,"initializer would partially override prior initialization of object of type B with non-trivial destruction"}},
[f]=k,
[h]=k,
[g]="initializing multiple members of union",
[c]="initializer would partially override prior initialization of object of type (.*?) with non\\-trivial destruction",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,F,m}},
[b]={"23eebd9c1ee8",1270891731,"Diagnose more cases of initializing distinct members of an anonymous union","Diagnose more cases of initializing distinct members of an anonymous union\nmember. Use a better diagnostic for this case. Also fix a bug with nested\nanonymous structs/unions for -Wreorder;  this last was PR6575.\n\nllvm-svn: 100923"},
[g]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated","[c++20] Implement semantic restrictions for C++20 designated\ninitializers.\n\nThis has some interesting interactions with our existing extensions to\nsupport C99 designated initializers as an extension in C++. Those are\nresolved as follows:\n\n * We continue to permit the full breadth of C99 designated initializers\n  in C++, with the exception that we disallow a partial overwrite of an\n  initializer with a non-trivially-destructible type. (Full overwrite\n  is OK, because we won\'t run the first initializer at all.)\n\n * The C99 extensions are disallowed in SFINAE contexts and during\n  overload resolution, where they could change the meaning of valid\n  programs.\n\n * C++20 disallows reordering of initializers. We only check for that for\n  the simple cases that the C++20 rules permit (designators of the form\n  \'.field_name =\' and continue to allow reordering in other cases).\n  It would be nice to improve this behavior in future.\n\n * All C99 designated initializer extensions produce a warning by\n  default in C++20 mode. People are going to learn the C++ rules based\n  on what Clang diagnoses, so it\'s important we diagnose these properly\n  by default.\n\n * In C++ <= 17, we apply the C++20 rules rather than the C99 rules, and\n  so still diagnose C99 extensions as described above. We continue to\n  accept designated C++20-compatible initializers in C++ <= 17 silently\n  by default (but naturally still reject under -pedantic-errors).\n\nThis is not a complete implementation of P0329R4. In particular, that\npaper introduces new non-C99-compatible syntax { .field { init } }, and\nwe do not support that yet.\n\nThis is based on a previous patch by Don Hinton, though I\'ve made\nsubstantial changes when addressing the above interactions.\n\nDifferential Revision: https://reviews.llvm.org/D59754\n\nllvm-svn: 370544"},
[j]={{o,5484,"static void checkDuplicateDefaultInit(Sema &S, CXXRecordDecl *Parent, SourceLocation DefaultInitLoc) {\n // ...\n S.Diag(DefaultInitLoc, diag::err_multiple_mem_union_initialization);"},{Q,5665,"bool CheckRedundantUnionInit(Sema &S, CXXCtorInitializer *Init, RedundantUnionMap &Unions) {\n  // ...\n  while (Parent->isAnonymousStructOrUnion() || Parent->isUnion()) {\n    if (Parent->isUnion()) {\n     // ...\n     if (En.first && En.first != Child) {\n       S.Diag(Init->getSourceLocation(), diag::err_multiple_mem_union_initialization) << Field->getDeclName() << Init->getSourceRange();"}},
[d]={{H,439,"/// 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    if (InOverloadResolution && SemaRef.getLangOpts().CPlusPlus) {\n   // ...\n   } else if (OldInit->getType().isDestructedType() && !FullyOverwritten) {\n     // ...\n      DiagID = diag::err_initializer_overrides_destructed;"}},
[l]={
[l]={
["clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp"]={"clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp:20:8: error: initializing multiple members of union","clang/test/CXX/special/class.init/class.base.init/p8-0x.cpp:26:15: error: initializing multiple members of union"}
["clang/test/SemaCXX/cxx2b-designated-initializers.cpp"]={"clang/test/SemaCXX/cxx2b-designated-initializers.cpp:43:11: error: initializer would partially override prior initialization of object of type \'NonTrivial\' with non-trivial destruction"}
}
}
},
},
["err_multiple_template_declarators"]={
["err_initializer_string_for_char_array_too_long"]={
[c]="err_multiple_template_declarators",
[b]="err_initializer_string_for_char_array_too_long",
[d]="%select{|a template declaration|an explicit template specialization|an explicit template instantiation}0 can only %select{|declare|declare|instantiate}0 a single entity",
[i]={{nil,n,"initializer-string for char array is too long, array size is %0 but initializer has size %1 (including the null terminating character)"},{s,nil,"initializer-string for char array is too long"}},
[e]={{nil,nil,{{a,"a template declaration","an explicit template specialization","an explicit template instantiation"}," can only ",{a,"declare","declare","instantiate"}," a single entity"}}},
[j]={{nil,n,"initializer-string for char array is too long, array size is A but initializer has size B (including the null terminating character)"},{s,nil,"initializer-string for char array is too long"}},
[f]=k,
[h]=k,
[g]="(?:|a template declaration|an explicit template specialization|an explicit template instantiation) can only (?:|declare|declare|instantiate) a single entity",
[c]="initializer\\-string for char array is too long, array size is (.*?) but initializer has size (.*?) \\(including the null terminating character\\)",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={"2399628cea7b",1242163911,"Refactor the parsing of declarations so that template declarations can","Refactor the parsing of declarations so that template declarations can\nparse just a single declaration and provide a reasonable diagnostic\nwhen the \"only one declarator per template declaration\" rule is\nviolated. This eliminates some ugly, ugly hackery where we used to\nrequire thatn the layout of a DeclGroup of a single element be the\nsame as the layout of a single declaration.\n\nllvm-svn: 71596"},
[g]={"554eba9c0873",1302481425,"PR9669: implement correct checking for [dcl.init.string]p2.","PR9669: implement correct checking for [dcl.init.string]p2.\n\nllvm-svn: 129260"},
[j]={{"clang/lib/Parse/ParseTemplate.cpp",367,"/// Parse a single declaration that declares a template,\n/// template specialization, or explicit instantiation of a template.\n///\n/// \\param DeclEnd will receive the source location of the last token\n/// within this declaration.\n///\n/// \\param AS the access specifier associated with this\n/// declaration. Will be AS_none for namespace-scope declarations.\n///\n/// \\returns the new declaration.\nDecl *Parser::ParseSingleDeclarationAfterTemplate(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, ParsingDeclRAIIObject &DiagsFromTParams, SourceLocation &DeclEnd, ParsedAttributes &AccessAttrs, AccessSpecifier AS) {\n // ...\n if (Tok.is(tok::comma)) {\n   Diag(Tok, diag::err_multiple_template_declarators) << (int)TemplateInfo.Kind;"}},
[d]={{H,251,"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   // [dcl.init.string]p2\n   if (StrLength > CAT->getSize().getZExtValue())\n     S.Diag(Str->getBeginLoc(), diag::err_initializer_string_for_char_array_too_long) << CAT->getSize().getZExtValue() << StrLength << Str->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/temp/p3.cpp"]={"clang/test/CXX/temp/p3.cpp:7:33: error: a template declaration can only declare a single entity"}
["clang/test/SemaCXX/pascal-strings.cpp"]={"clang/test/SemaCXX/pascal-strings.cpp:6:22: error: initializer-string for char array is too long, array size is 3 but initializer has size 4 (including the null terminating character)","clang/test/SemaCXX/pascal-strings.cpp:8:22: error: initializer-string for char array is too long, array size is 3 but initializer has size 4 (including the null terminating character)"}
}
}
},
},
["err_multiversion_after_used"]={
["err_inline_decl_follows_def"]={
[c]={{nil,q,"err_multiversion_after_used"}},
[b]="err_inline_decl_follows_def",
[d]={{nil,q,"function declaration cannot become a multiversioned function after first usage"}},
[i]="inline declaration of %0 follows non-inline definition",
[e]={{nil,q,"function declaration cannot become a multiversioned function after first usage"}},
[j]="inline declaration of A follows non-inline definition",
[f]=k,
[h]=k,
[g]="function declaration cannot become a multiversioned function after first usage",
[c]="inline declaration of (.*?) follows non\\-inline definition",
[h]=a,
[f]=a,
[i]={{nil,q,w}},
[e]=m,
[b]={bc,1515447257,Zb,ac},
[g]={"ee4f4025c3e7",1396161894,"Sema: Implement DR317","Sema: Implement DR317\n\nSummary:\nDeclaring a function as inline after it has been defined is in violation\nof [dcl.fct.spec]p4.  The program would get a strong definition instead\nof getting a function with linkonce_odr linkage.\n\nReviewers: rsmith\n\nCC: cfe-commits\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D3220\n\nllvm-svn: 205129"},
[j]={{o,11187,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n // ...\n // Only allow transition to MultiVersion if it hasn\'t been used.\n  if (OldFD && CausesMV && OldFD->isUsed(false))\n    return S.Diag(NewFD->getLocation(), diag::err_multiversion_after_used);"},{o,11661,"/// Check the validity of a mulitversion function declaration.\n/// Also sets the multiversion\'ness\' of the function itself.\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  if (!OldFD->isMultiVersion()) {\n   // ...\n   case MultiVersionKind::TargetClones:\n      if (OldFD->isUsed(false)) {\n       // ...\n       return S.Diag(NewFD->getLocation(), diag::err_multiversion_after_used);"}},
[d]={{p,4693,"/// 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  if (New->isInline() && !Old->getMostRecentDecl()->isInline()) {\n    if (VarDecl *Def = Old->getDefinition()) {\n      // ...\n      Diag(New->getLocation(), diag::err_inline_decl_follows_def) << New;"},{t,687,"/// 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++11 [dcl.constexpr]p1: If any declaration of a function or function\n  // template has a constexpr specifier then all its declarations shall\n  // contain the constexpr specifier.\n  if (New->getConstexprKind() != Old->getConstexprKind()) {\n // ...\n } else if (!Old->getMostRecentDecl()->isInlined() && New->isInlined() && Old->isDefined(Def) &&\n   // ...\n   Diag(New->getLocation(), diag::err_inline_decl_follows_def) << New;"}},
[l]={
[l]={
["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:82:62: error: function declaration cannot become a multiversioned function after first usage"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p4.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p4.cpp:6:13: error: inline declaration of \'f0\' follows non-inline definition","clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p4.cpp:15:22: error: inline declaration of \'func_02\' follows non-inline definition","clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p4.cpp:20:22: error: inline declaration of \'func_03\' follows non-inline definition","clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p4.cpp:24:13: error: inline declaration of \'func_04\' follows non-inline definition","clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p4.cpp:28:22: error: inline declaration of \'func_06\' follows non-inline definition","clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p4.cpp:33:22: error: inline declaration of \'func_07\' follows non-inline definition"}
}
}
},
},
["err_multiversion_diff"]={
["err_inline_declaration_block_scope"]={
[c]={{nil,q,"err_multiversion_diff"}},
[b]="err_inline_declaration_block_scope",
[d]={{nil,S,"multiversioned function declaration has a different %select{calling convention|return type|constexpr specification|inline specification|linkage|language linkage}0"},{u,q,"multiversioned function declaration has a different %select{calling convention|return type|constexpr specification|inline specification|storage class|linkage}0"}},
[i]="inline declaration of %0 not allowed in block scope",
[e]={{nil,S,{"multiversioned function declaration has a different ",{"calling convention","return type","constexpr specification","inline specification","linkage","language linkage"}}},{u,q,{"multiversioned function declaration has a different ",{"calling convention","return type","constexpr specification","inline specification","storage class","linkage"}}}},
[j]="inline declaration of A not allowed in block scope",
[f]=k,
[h]=k,
[g]="multiversioned function declaration has a different (?:calling convention|return type|constexpr specification|inline specification|linkage|language linkage)",
[c]="inline declaration of (.*?) not allowed in block scope",
[h]=a,
[f]=a,
[i]={{nil,q,w}},
[e]=m,
[b]={bc,1515447257,Zb,ac},
[g]={"2588691a6960",1281095050,"Diagnose the use of \"inline\" on block-scope function declarations in","Diagnose the use of \"inline\" on block-scope function declarations in\nC++, from Andrea Nall!\n\nllvm-svn: 110439"},
[j]={{o,11197,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\n  return S.areMultiversionVariantFunctionsCompatible(OldFD, NewFD, S.PDiag(diag::err_multiversion_noproto), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::note_multiversioning_caused_here)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_doesnt_support) << static_cast<unsigned>(MVKind)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_diff)),"}},
[d]={{p,7727,"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      Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_declaration_block_scope) << Name << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());"},{p,9925,"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]p3:\n    //  The inline specifier shall not appear on a block scope function\n    //  declaration.\n    if (isInline && !NewFD->isInvalidDecl()) {\n      if (CurContext->isFunctionOrMethod()) {\n        // ...\n        Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_declaration_block_scope) << Name << FixItHint::CreateRemoval(D.getDeclSpec().getInlineSpecLoc());"}},
[l]={
[l]={
[mc]={"clang/test/Sema/attr-target-mv.c:108:63: error: multiversioned function declaration has a different calling convention","clang/test/Sema/attr-target-mv.c:112:52: error: multiversioned function declaration has a different return type"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.fct.spec/p3.cpp:4:4: error: inline declaration of \'f1\' not allowed in block scope"}
}
}
},
},
["err_multiversion_disallowed_other_attr"]={
["err_inline_main"]={
[c]={{nil,D,"err_multiversion_disallowed_other_attr"}},
[b]="err_inline_main",
[d]={{nil,p,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones|target_version}0\' multiversioning cannot be combined with attribute %1"},{s,S,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones}0\' multiversioning cannot be combined with attribute %1"},{u,D,"attribute \'%select{target|cpu_specific|cpu_dispatch}0\' multiversioning cannot be combined with attribute %1"}},
[i]="\'main\' is not allowed to be declared inline",
[e]={{nil,p,{Ub,{a,Sb,Rb,Qb,"target_clones","target_version"},"\' multiversioning cannot be combined with attribute B"}},{s,S,{Ub,{a,Sb,Rb,Qb,"target_clones"},"\' multiversioning cannot be combined with attribute B"}},{u,D,{Ub,{Sb,Rb,Qb},"\' multiversioning cannot be combined with attribute B"}}},
[j]="\'main\' is not allowed to be declared inline",
[f]=k,
[h]=k,
[g]="attribute \'(?:|target|cpu_specific|cpu_dispatch|target_clones|target_version)\' multiversioning cannot be combined with attribute (.*?)",
[c]="\'main\' is not allowed to be declared inline",
[h]=a,
[f]=a,
[i]={{nil,D,w}},
[e]=m,
[b]={tc,1582847864,uc,vc},
[g]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics.","Adding FixIts to static/inline main declaration diagnostics.\n\nllvm-svn: 139282"},
[j]={{o,11014,"static bool checkNonMultiVersionCompatAttributes(Sema &S, const FunctionDecl *FD, const FunctionDecl *CausedFD, MultiVersionKind MVKind) {\n  const auto Diagnose = [FD, CausedFD, MVKind](Sema &S, const Attr *A) {\n    S.Diag(FD->getLocation(), diag::err_multiversion_disallowed_other_attr) << static_cast<unsigned>(MVKind) << A;"}},
[d]={{p,12080,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  if (FD->isInlineSpecified())\n    Diag(DS.getInlineSpecLoc(), diag::err_inline_main) << FixItHint::CreateRemoval(DS.getInlineSpecLoc());"}},
[l]={
[l]={
[mc]={"clang/test/Sema/attr-target-mv.c:91:1: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:94:68: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:98:66: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:104:75: error: attribute \'target\' multiversioning cannot be combined with attribute \'no_caller_saved_registers\'","clang/test/Sema/attr-target-mv.c:135:73: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'","clang/test/Sema/attr-target-mv.c:140:83: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'","clang/test/Sema/attr-target-mv.c:155:73: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'","clang/test/Sema/attr-target-mv.c:162:73: error: attribute \'target\' multiversioning cannot be combined with attribute \'overloadable\'"}
["clang/test/Sema/warn-main.c"]={"clang/test/Sema/warn-main.c:19:1: error: \'main\' is not allowed to be declared inline"}
}
}
},
},
["err_multiversion_doesnt_support"]={
["err_inline_namespace_alias"]={
[c]={{nil,q,"err_multiversion_doesnt_support"}},
[b]="err_inline_namespace_alias",
[d]={{nil,p,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones|target_version}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function|lambdas}1"},{s,S,"attribute \'%select{|target|cpu_specific|cpu_dispatch|target_clones}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function|lambdas}1"},{u,z,"attribute \'%select{target|cpu_specific|cpu_dispatch}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function}1"},{db,q,"attribute \'%select{target|cpu_specific|cpu_dispatch}0\' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions}1"}},
[i]="namespace alias cannot be inline",
[e]={{nil,p,{Ub,{a,Sb,Rb,Qb,"target_clones","target_version"},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions","consteval function","lambdas"}}},{s,S,{Ub,{a,Sb,Rb,Qb,"target_clones"},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions","consteval function","lambdas"}}},{u,z,{Ub,{Sb,Rb,Qb},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions","consteval function"}}},{db,q,{Ub,{Sb,Rb,Qb},"\' multiversioned functions do not yet support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions"}}}},
[j]="namespace alias cannot be inline",
[f]=k,
[h]=k,
[g]="attribute \'(?:|target|cpu_specific|cpu_dispatch|target_clones|target_version)\' multiversioned functions do not yet support (?:function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function|lambdas)",
[c]="namespace alias cannot be inline",
[h]=a,
[f]=a,
[i]={{nil,q,w}},
[e]=C,
[b]={bc,1515447257,Zb,ac},
[g]={"6766794c0b91",1282950766,"Parser support for inline namespaces","Parser support for inline namespaces\n\nllvm-svn: 112320"},
[j]={{o,11194,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\n  return S.areMultiversionVariantFunctionsCompatible(OldFD, NewFD, S.PDiag(diag::err_multiversion_noproto), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::note_multiversioning_caused_here)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_doesnt_support) << static_cast<unsigned>(MVKind)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_diff)),"},{K,3662,"static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // FIXME: We could probably figure out how to get this to work for lambdas\n  // someday.\n  if (const auto *MD = dyn_cast<CXXMethodDecl>(D)) {\n    if (MD->getParent()->isLambda()) {\n      S.Diag(D->getLocation(), diag::err_multiversion_doesnt_support) << static_cast<unsigned>(MultiVersionKind::TargetClones) << /*Lambda*/ 9;"}},
[d]={{U,146,"/// 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 (InlineLoc.isValid())\n      Diag(InlineLoc, diag::err_inline_namespace_alias) << FixItHint::CreateRemoval(InlineLoc);"}}
},
["err_inline_namespace_mismatch"]={
[b]="err_inline_namespace_mismatch",
[i]="non-inline namespace cannot be reopened as inline",
[j]="non-inline namespace cannot be reopened as inline",
[h]=k,
[c]="non\\-inline namespace cannot be reopened as inline",
[f]=a,
[e]=m,
[g]={"b5c2baa2d7a2",1283214996,"Enable inline namespaces in the AST.","Enable inline namespaces in the AST.\n\nllvm-svn: 112564"},
[d]={{t,11366,"/// Diagnose a mismatch in \'inline\' qualifiers when a namespace is\n/// reopened.\nstatic void DiagnoseNamespaceInlineMismatch(Sema &S, SourceLocation KeywordLoc, SourceLocation Loc, IdentifierInfo *II, bool *IsInline, NamespaceDecl *PrevNS) {\n  // ...\n  if (PrevNS->isInline())\n  // ...\n  else\n    S.Diag(Loc, diag::err_inline_namespace_mismatch);"}},
[l]={
[l]={
["clang/test/SemaCXX/attr-target-clones-aarch64.cpp"]={"clang/test/SemaCXX/attr-target-clones-aarch64.cpp:5:12: error: attribute \'target_clones\' multiversioned functions do not yet support lambdas","clang/test/SemaCXX/attr-target-clones-aarch64.cpp:8:12: error: attribute \'target_clones\' multiversioned functions do not yet support lambdas"}
["clang/test/SemaCXX/libstdcxx_atomic_ns_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_atomic_ns_hack.cpp:24:18: error: non-inline namespace cannot be reopened as inline"}
}
}
},
},
["err_multiversion_duplicate"]={
["err_inline_namespace_std"]={
[c]={{nil,q,"err_multiversion_duplicate"}},
[b]="err_inline_namespace_std",
[d]={{nil,q,"multiversioned function redeclarations require identical target attributes"}},
[i]="cannot declare the namespace \'std\' to be inline",
[e]={{nil,q,"multiversioned function redeclarations require identical target attributes"}},
[j]="cannot declare the namespace \'std\' to be inline",
[f]=k,
[h]=k,
[g]="multiversioned function redeclarations require identical target attributes",
[c]="cannot declare the namespace \'std\' to be inline",
[h]=a,
[f]=a,
[i]={{nil,q,w}},
[e]=m,
[b]={bc,1515447257,Zb,ac},
[g]={"bed75faf7d76",1690219823,"[Clang] Reject programs declaring namespace std to be inline","[Clang] Reject programs declaring namespace std to be inline\n\nFixes #64041\n\nDifferential Revision: https://reviews.llvm.org/D156063"},
[j]={{o,11301,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n // ...\n  if (NewTA) {\n   // ...\n    if (OldParsed == NewParsed) {\n      S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"},{o,11317,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  if (NewTVA) {\n    // ...\n    if (Feats == NewFeats) {\n      S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"},{o,11438,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Next, check ALL non-invalid non-overloads to see if this is a redeclaration\n  // of a previous member of the MultiVersion set.\n  for (NamedDecl *ND : Previous) {\n    // ...\n    case MultiVersionKind::Target: {\n      // ...\n      if (CurParsed == NewParsed) {\n        S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"},{o,11459,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n // Next, check ALL non-invalid non-overloads to see if this is a redeclaration\n // of a previous member of the MultiVersion set.\n  for (NamedDecl *ND : Previous) {\n    // ...\n    case MultiVersionKind::TargetVersion: {\n      // ...\n      if (CurFeats == NewFeats) {\n        S.Diag(NewFD->getLocation(), diag::err_multiversion_duplicate);"}},
[d]={{t,11402,"/// ActOnStartNamespaceDef - This is called at the start of a namespace\n/// definition.\nDecl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope, SourceLocation InlineLoc, SourceLocation NamespaceLoc, SourceLocation IdentLoc, IdentifierInfo *II, SourceLocation LBrace, const ParsedAttributesView &AttrList, UsingDirectiveDecl *&UD, bool IsNested) {\n  // ...\n  if (II) {\n    // C++ [namespace.std]p7:\n    //   A translation unit shall not declare namespace std to be an inline\n   //   namespace (9.8.2).\n   //\n   // Precondition: the std namespace is in the file scope and is declared to\n    // be inline\n    auto DiagnoseInlineStdNS = [&]() {\n      // ...\n      Diag(InlineLoc, diag::err_inline_namespace_std) << SourceRange(InlineLoc, InlineLoc.getLocWithOffset(6));"}},
[l]={
[l]={
[mc]={"clang/test/Sema/attr-target-mv.c:75:57: error: multiversioned function redeclarations require identical target attributes"}
["clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p7.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p7.cpp:21:1: error: cannot declare the namespace \'std\' to be inline","clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p7.cpp:22:1: error: cannot declare the namespace \'std\' to be inline"}
}
}
},
},
["err_multiversion_noproto"]={
["err_inline_nested_namespace_definition"]={
[c]={{nil,q,"err_multiversion_noproto"}},
[b]="err_inline_nested_namespace_definition",
[d]={{nil,q,"multiversioned function must have a prototype"}},
[i]="nested namespace definition cannot be \'inline\'",
[e]={{nil,q,"multiversioned function must have a prototype"}},
[j]="nested namespace definition cannot be \'inline\'",
[f]=k,
[h]=k,
[g]="multiversioned function must have a prototype",
[c]="nested namespace definition cannot be \'inline\'",
[h]=a,
[f]=a,
[i]={{nil,q,w}},
[e]=C,
[b]={bc,1515447257,Zb,ac},
[g]={"13307f5f2429",1415425054,"[c++1z] Implement nested-namespace-definitions.","[c++1z] Implement nested-namespace-definitions.\n\nThis allows \'namespace A::B { ... }\' as a shorthand for \'namespace A {\nnamespace B { ... } }\'. We already supported this correctly for error recovery;\npromote that support to a full implementation.\n\nThis is not the right implementation: we do not maintain source fidelity\nbecause we desugar the nested namespace definition in the parser. This is\ntricky to avoid, since the definition genuinely does inject one named\nentity per level in the namespace name.\n\nllvm-svn: 221574"},
[j]={{o,11190,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  // ...\n  return S.areMultiversionVariantFunctionsCompatible(OldFD, NewFD, S.PDiag(diag::err_multiversion_noproto), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::note_multiversioning_caused_here)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_doesnt_support) << static_cast<unsigned>(MVKind)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_diff)),"}},
[d]={{U,172,"/// 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    Diag(InlineLoc, diag::err_inline_nested_namespace_definition);"}},
[l]={
[l]={
[mc]={"clang/test/Sema/attr-target-mv.c:20:39: error: multiversioned function must have a prototype"}
["clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p7.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.def/p7.cpp:22:1: error: nested namespace definition cannot be \'inline\'"}
}
}
},
},
["err_multiversion_not_allowed_on_main"]={
["err_inline_non_function"]={
[c]={{nil,q,"err_multiversion_not_allowed_on_main"}},
[b]="err_inline_non_function",
[d]={{nil,q,"\'main\' cannot be a multiversioned function"}},
[i]="\'inline\' can only appear on functions%select{| and non-local variables}0",
[e]={{nil,q,"\'main\' cannot be a multiversioned function"}},
[j]={{nil,nil,{"\'inline\' can only appear on functions",{a," and non-local variables"}}}},
[f]=k,
[h]=k,
[g]="\'main\' cannot be a multiversioned function",
[c]="\'inline\' can only appear on functions(?:| and non\\-local variables)",
[h]=a,
[f]=a,
[i]={{nil,q,w}},
[e]=m,
[b]={bc,1515447257,Zb,ac},
[g]={"574c74537027",1239133077,"Diagnose uses of function specifiers on declarations which don\'t declare","Diagnose uses of function specifiers on declarations which don\'t declare\nfunctions.  Fixes PR3941.\n\nllvm-svn: 68541"},
[j]={{o,11601,"/// Check the validity of a mulitversion function declaration.\n/// Also sets the multiversion\'ness\' of the function itself.\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Main isn\'t allowed to become a multiversion function, however it IS\n  // permitted to have \'main\' be marked with the \'target\' optimization hint,\n  // for \'target_version\' only default is allowed.\n  if (NewFD->isMain()) {\n    if (MVKind != MultiVersionKind::None && !(MVKind == MultiVersionKind::Target && !NewTA->isDefaultVersion()) && !(MVKind == MultiVersionKind::TargetVersion && NewTVA->isDefaultVersion())) {\n     S.Diag(NewFD->getLocation(), diag::err_multiversion_not_allowed_on_main);"}},
[d]={{p,5114,"/// 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.isInlineSpecified())\n    Diag(DS.getInlineSpecLoc(), diag::err_inline_non_function) << getLangOpts().CPlusPlus17;"},{p,6672,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n // ...\n if (D.getDeclSpec().isInlineSpecified())\n    Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_non_function) << getLangOpts().CPlusPlus17;"},{p,7722,"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      Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_non_function) << 0;"},{p,14755,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (DS.isInlineSpecified())\n    Diag(DS.getInlineSpecLoc(), diag::err_inline_non_function) << getLangOpts().CPlusPlus17;"},{p,18014,"/// HandleField - Analyze a field of a C struct or a C++ data member.\n///\nFieldDecl *Sema::HandleField(Scope *S, RecordDecl *Record, SourceLocation DeclStart, Declarator &D, Expr *BitWidth, InClassInitStyle InitStyle, AccessSpecifier AS) {\n  // ...\n  if (D.getDeclSpec().isInlineSpecified())\n    Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_non_function) << getLangOpts().CPlusPlus17;"},{t,18838,"/// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class.\n///\nMSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record, SourceLocation DeclStart, Declarator &D, Expr *BitWidth, InClassInitStyle InitStyle, AccessSpecifier AS, const ParsedAttr &MSPropertyAttr) {\n  // ...\n  if (D.getDeclSpec().isInlineSpecified())\n    Diag(D.getDeclSpec().getInlineSpecLoc(), diag::err_inline_non_function) << getLangOpts().CPlusPlus17;"},{rb,5200,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n // ...\n  if (DS.isInlineSpecified())\n    Diag(DS.getInlineSpecLoc(), diag::err_inline_non_function) << getLangOpts().CPlusPlus17;"}},
[l]={
[l]={
["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:84:48: error: \'main\' cannot be a multiversioned function"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.inline/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.inline/p1.cpp:6:1: error: \'inline\' can only appear on functions and non-local variables","clang/test/CXX/dcl.dcl/dcl.spec/dcl.inline/p1.cpp:7:1: error: \'inline\' can only appear on functions and non-local variables"}
}
}
},
},
["err_multiversion_not_supported"]={
["err_int_to_block_pointer"]={
[c]={{nil,q,"err_multiversion_not_supported"}},
[b]="err_int_to_block_pointer",
[d]={{nil,q,"function multiversioning is not supported on the current target"}},
[i]="invalid block 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",
[e]={{nil,q,"function multiversioning is not supported on the current target"}},
[j]={{nil,nil,{"invalid block pointer conversion ",{{{"assigning to A from B","assigning to different types"}},{{"passing A to parameter of type B","passing to parameter of different type"}},{{"returning A from a function with result type B","returning from function with different return type"}},{{"converting A to type B","converting between types"}},{{"initializing A with an expression of type B","initializing with expression of different type"}},{{"sending A to parameter of type B","sending to parameter of different type"}},{{"casting A to type B","casting between types"}}}}}},
[f]=k,
[h]=k,
[g]="function multiversioning is not supported on the current target",
[c]="invalid block 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))",
[h]=a,
[f]=a,
[i]={{nil,q,w}},
[e]=m,
[b]={bc,1515447257,Zb,ac},
[g]={x,1237025389,y,z},
[j]={{o,11168,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  if (!S.getASTContext().getTargetInfo().supportsMultiVersioning()) {\n    S.Diag(NewFD->getLocation(), diag::err_multiversion_not_supported);"}},
[d]={{q,17652,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IntToBlockPointer:\n    DiagKind = diag::err_int_to_block_pointer;"}},
[l]={
[l]={
["clang/test/Sema/attr-target-mv-bad-target.c"]={"clang/test/Sema/attr-target-mv-bad-target.c:6:37: error: function multiversioning is not supported on the current target","clang/test/Sema/attr-target-mv-bad-target.c:9:40: error: function multiversioning is not supported on the current target"}
["clang/test/SemaCXX/block-call.cpp"]={"clang/test/SemaCXX/block-call.cpp:34:11: error: invalid block pointer conversion assigning to \'int *(^)()\' from \'int\'"}
}
}
},
},
["err_multiversion_required_in_redecl"]={
["err_integer_literal_too_large"]={
[c]={{nil,q,"err_multiversion_required_in_redecl"}},
[b]="err_integer_literal_too_large",
[d]={{nil,p,"function declaration is missing %select{\'target\'|\'cpu_specific\' or \'cpu_dispatch\'|\'target_version\'}0 attribute in a multiversioned function"},{s,q,"function declaration is missing %select{\'target\'|\'cpu_specific\' or \'cpu_dispatch\'}0 attribute in a multiversioned function"}},
[i]="integer literal is too large to be represented in any %select{signed |}0integer type",
[e]={{nil,p,{"function declaration is missing ",{"\'target\'","\'cpu_specific\' or \'cpu_dispatch\'","\'target_version\'"}," attribute in a multiversioned function"}},{s,q,{"function declaration is missing ",{"\'target\'","\'cpu_specific\' or \'cpu_dispatch\'"}," attribute in a multiversioned function"}}},
[j]={{nil,nil,{"integer literal is too large to be represented in any ",{"signed ",a},"integer type"}}},
[f]=k,
[h]=k,
[g]="function declaration is missing (?:\'target\'|\'cpu_specific\' or \'cpu_dispatch\'|\'target_version\') attribute in a multiversioned function",
[c]="integer literal is too large to be represented in any (?:signed |)integer type",
[h]=a,
[f]=a,
[i]={{nil,q,w}},
[e]=v,
[b]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning\n\nAs documented here: https://software.intel.com/en-us/node/682969 and\nhttps://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning\nis an ICC feature that provides for function multiversioning.\n\nThis feature is implemented with two attributes: First, cpu_specific,\nwhich specifies the individual function versions. Second, cpu_dispatch,\nwhich specifies the location of the resolver function and the list of\nresolvable functions.\n\nThis is valuable since it provides a mechanism where the resolver\'s TU\ncan be specified in one location, and the individual implementions\neach in their own translation units.\n\nThe goal of this patch is to be source-compatible with ICC, so this\nimplementation diverges from the ICC implementation in a few ways:\n1- Linux x86/64 only: This implementation uses ifuncs in order to\nproperly dispatch functions. This is is a valuable performance benefit\nover the ICC implementation. A future patch will be provided to enable\nthis feature on Windows, but it will obviously more closely fit ICC\'s\nimplementation.\n2- CPU Identification functions: ICC uses a set of custom functions to identify\nthe feature list of the host processor. This patch uses the cpu_supports\nfunctionality in order to better align with \'target\' multiversioning.\n1- cpu_dispatch function def/decl: ICC\'s cpu_dispatch requires that the function\nmarked cpu_dispatch be an empty definition. This patch supports that as well,\nhowever declarations are also permitted, since the linker will solve the\nissue of multiple emissions.\n\nDifferential Revision: https://reviews.llvm.org/D47474\n\nllvm-svn: 337552"},
[g]={"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.\n\nllvm-svn: 213865"},
[j]={{o,11332,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  for (const auto *FD : OldFD->redecls()) {\n    // ...\n    // We allow forward declarations before ANY multiversioning attributes, but\n   // nothing after the fact.\n   if (PreviousDeclsHaveMultiVersionAttribute(FD) && ((NewTA && (!CurTA || CurTA->isInherited())) || (NewTVA && (!CurTVA || CurTVA->isInherited())))) {\n      S.Diag(FD->getLocation(), diag::err_multiversion_required_in_redecl) << (NewTA ? 0 : 2);"},{o,11646,"/// Check the validity of a mulitversion function declaration.\n/// Also sets the multiversion\'ness\' of the function itself.\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// Returns true if there was an error, false otherwise.\nstatic bool CheckMultiVersionFunction(Sema &S, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n // ...\n // Multiversioned redeclarations aren\'t allowed to omit the attribute, except\n // for target_clones and target_version.\n if (OldFD->isMultiVersion() && MVKind == MultiVersionKind::None && OldFD->getMultiVersionKind() != MultiVersionKind::TargetClones && OldFD->getMultiVersionKind() != MultiVersionKind::TargetVersion) {\n   S.Diag(NewFD->getLocation(), diag::err_multiversion_required_in_redecl) << (OldFD->getMultiVersionKind() != MultiVersionKind::Target);"}},
[d]={{"clang/lib/Lex/PPExpressions.cpp",347,"/// 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     // Overflow parsing integer literal.\n     if (ValueLive)\n        PP.Diag(PeekTok, diag::err_integer_literal_too_large) << /* Unsigned */ 1;"},{q,3923,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.hasUDSuffix()) {\n    // ...\n    case LOLR_Cooked: {\n      // ...\n      if (Literal.isFloatingLiteral()) {\n      // ...\n      } else {\n       // ...\n       if (Literal.GetIntegerValue(ResultVal))\n          Diag(Tok.getLocation(), diag::err_integer_literal_too_large) << /* Unsigned */ 1;"},{q,4086,"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      Diag(Tok.getLocation(), diag::err_integer_literal_too_large) << /* Unsigned */ 1;"},{q,4127,"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      // Bit-precise integer literals are automagically-sized based on the\n     // width required by the literal.\n     if (Literal.isBitInt) {\n        // ...\n        if (Width > MaxBitIntWidth) {\n         Diag(Tok.getLocation(), diag::err_integer_literal_too_large) << Literal.isUnsigned;"}},
[l]={
[l]={
[mc]={"clang/test/Sema/attr-target-mv.c:83:5: error: function declaration is missing \'target\' attribute in a multiversioned function","clang/test/Sema/attr-target-mv.c:123:5: error: function declaration is missing \'target\' attribute in a multiversioned function"}
["clang/test/Lexer/bitint-constants.c"]={"clang/test/Lexer/bitint-constants.c:23:5: error: integer literal is too large to be represented in any integer type","clang/test/Lexer/bitint-constants.c:26:5: error: integer literal is too large to be represented in any integer type","clang/test/Lexer/bitint-constants.c:142:3: error: integer literal is too large to be represented in any signed integer type","clang/test/Lexer/bitint-constants.c:143:3: error: integer literal is too large to be represented in any integer type"}
}
}
},
},
["err_multiversion_types_mixed"]={
["err_integer_sequence_integral_element_type"]={
[c]={{nil,q,"err_multiversion_types_mixed"}},
[b]="err_integer_sequence_integral_element_type",
[d]={{nil,q,"multiversioning attributes cannot be combined"}},
[i]="integer sequences must have integral element type",
[e]={{nil,q,"multiversioning attributes cannot be combined"}},
[j]="integer sequences must have integral element type",
[f]=k,
[h]=k,
[g]="multiversioning attributes cannot be combined",
[c]="integer sequences must have integral element type",
[h]=a,
[f]=a,
[i]={{nil,q,w}},
[e]=m,
[b]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning\n\nAs documented here: https://software.intel.com/en-us/node/682969 and\nhttps://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning\nis an ICC feature that provides for function multiversioning.\n\nThis feature is implemented with two attributes: First, cpu_specific,\nwhich specifies the individual function versions. Second, cpu_dispatch,\nwhich specifies the location of the resolver function and the list of\nresolvable functions.\n\nThis is valuable since it provides a mechanism where the resolver\'s TU\ncan be specified in one location, and the individual implementions\neach in their own translation units.\n\nThe goal of this patch is to be source-compatible with ICC, so this\nimplementation diverges from the ICC implementation in a few ways:\n1- Linux x86/64 only: This implementation uses ifuncs in order to\nproperly dispatch functions. This is is a valuable performance benefit\nover the ICC implementation. A future patch will be provided to enable\nthis feature on Windows, but it will obviously more closely fit ICC\'s\nimplementation.\n2- CPU Identification functions: ICC uses a set of custom functions to identify\nthe feature list of the host processor. This patch uses the cpu_supports\nfunctionality in order to better align with \'target\' multiversioning.\n1- cpu_dispatch function def/decl: ICC\'s cpu_dispatch requires that the function\nmarked cpu_dispatch be an empty definition. This patch supports that as well,\nhowever declarations are also permitted, since the linker will solve the\nissue of multiple emissions.\n\nDifferential Revision: https://reviews.llvm.org/D47474\n\nllvm-svn: 337552"},
[g]={"d9b1a4fb710d",1446608430,"[Sema] Implement __make_integer_seq","[Sema] Implement __make_integer_seq\n\nThis new builtin template allows for incredibly fast instantiations of\ntemplates like std::integer_sequence.\n\nPerformance numbers follow:\nMy work station has 64 GB of ram + 20 Xeon Cores at 2.8 GHz.\n\n__make_integer_seq<std::integer_sequence, int, 90000> takes 0.25\nseconds.\n\nstd::make_integer_sequence<int, 90000> takes unbound time, it is still\nrunning.  Clang is consuming gigabytes of memory.\n\nDifferential Revision: http://reviews.llvm.org/D13786\n\nllvm-svn: 252036"},
[j]={{o,11372,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Disallow mixing of multiversioning types.\n if (!MultiVersionTypesCompatible(OldMVKind, NewMVKind)) {\n   S.Diag(NewFD->getLocation(), diag::err_multiversion_types_mixed);"}},
[d]={{kb,3660,"static QualType checkBuiltinTemplateIdType(Sema &SemaRef, BuiltinTemplateDecl *BTD, ArrayRef<TemplateArgument> Converted, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n  // ...\n  case BTK__make_integer_seq: {\n    // ...\n    // C++14 [inteseq.intseq]p1:\n    //  T shall be an integer type.\n   if (!OrigType->isDependentType() && !OrigType->isIntegralType(Context)) {\n     SemaRef.Diag(TemplateArgs[1].getLocation(), diag::err_integer_sequence_integral_element_type);"}},
[l]={
[l]={
["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:32:57: error: multiversioning attributes cannot be combined"}
["clang/test/SemaCXX/make_integer_seq.cpp"]={"clang/test/SemaCXX/make_integer_seq.cpp:38:1: error: integer sequences must have integral element type"}
}
}
},
},
["err_musttail_callconv_mismatch"]={
["err_integer_sequence_negative_length"]={
[c]={{nil,u,"err_musttail_callconv_mismatch"}},
[b]="err_integer_sequence_negative_length",
[d]={{nil,u,"cannot perform a tail call to function%select{| %1}0 because it uses an incompatible calling convention"}},
[i]="integer sequences must have non-negative sequence length",
[e]={{nil,u,{"cannot perform a tail call to function",{a," B"}," because it uses an incompatible calling convention"}}},
[j]="integer sequences must have non-negative sequence length",
[f]=k,
[h]=k,
[g]="cannot perform a tail call to function(?:| (.*?)) because it uses an incompatible calling convention",
[c]="integer sequences must have non\\-negative sequence length",
[h]=a,
[f]=a,
[i]={{nil,u,m}},
[e]=m,
[b]={pb,1607502387,qb,sb},
[g]={"d9b1a4fb710d",1446608430,"[Sema] Implement __make_integer_seq","[Sema] Implement __make_integer_seq\n\nThis new builtin template allows for incredibly fast instantiations of\ntemplates like std::integer_sequence.\n\nPerformance numbers follow:\nMy work station has 64 GB of ram + 20 Xeon Cores at 2.8 GHz.\n\n__make_integer_seq<std::integer_sequence, int, 90000> takes 0.25\nseconds.\n\nstd::make_integer_sequence<int, 90000> takes unbound time, it is still\nrunning. Clang is consuming gigabytes of memory.\n\nDifferential Revision: http://reviews.llvm.org/D13786\n\nllvm-svn: 252036"},
[j]={{F,774,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n // Caller and callee must have matching calling conventions.\n  //\n  // Some calling conventions are physically capable of supporting tail calls\n // even if the function types don\'t perfectly match. LLVM is currently too\n // strict to allow this, but if LLVM added support for this in the future, we\n // could exit early here and skip the remaining checks if the functions are\n // using such a calling convention.\n  if (CallerType.Func->getCallConv() != CalleeType.Func->getCallConv()) {\n   if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n      Diag(St->getBeginLoc(), diag::err_musttail_callconv_mismatch) << true << ND->getDeclName();"},{F,777,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Caller and callee must have matching calling conventions.\n //\n  // Some calling conventions are physically capable of supporting tail calls\n  // even if the function types don\'t perfectly match. LLVM is currently too\n  // strict to allow this, but if LLVM added support for this in the future, we\n  // could exit early here and skip the remaining checks if the functions are\n  // using such a calling convention.\n if (CallerType.Func->getCallConv() != CalleeType.Func->getCallConv()) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n    // ...\n    else\n      Diag(St->getBeginLoc(), diag::err_musttail_callconv_mismatch) << false;"}},
[d]={{kb,3689,"static QualType checkBuiltinTemplateIdType(Sema &SemaRef, BuiltinTemplateDecl *BTD, ArrayRef<TemplateArgument> Converted, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n  // ...\n  case BTK__make_integer_seq: {\n   // ...\n   if (llvm::APSInt NumArgs = NumArgsArg.getAsIntegral(); NumArgs >= 0) {\n    // ...\n    } else {\n      // ...\n      SemaRef.Diag(TemplateArgs[2].getLocation(), diag::err_integer_sequence_negative_length);"}},
[l]={
[l]={
[Vb]={"clang/test/SemaCXX/attr-musttail.cpp:157:3: error: cannot perform a tail call to function \'RegCallReturnsInt\' because it uses an incompatible calling convention"}
["clang/test/SemaCXX/make_integer_seq.cpp"]={"clang/test/SemaCXX/make_integer_seq.cpp:38:45: error: integer sequences must have non-negative sequence length"}
}
}
},
},
["err_musttail_forbidden_from_this_context"]={
["err_introducing_special_friend"]={
[c]={{nil,u,"err_musttail_forbidden_from_this_context"}},
[b]="err_introducing_special_friend",
[d]={{nil,u,"%0 attribute cannot be used from %select{a block|an Objective-C function|this context}1"}},
[i]="must use a qualified name when declaring a %select{constructor|destructor|conversion operator}0 as a friend",
[e]={{nil,u,{"A attribute cannot be used from ",{"a block","an Objective-C function","this context"}}}},
[j]={{nil,E,{{"must use a qualified name when declaring","cannot declare"}," a ",{"constructor",ob,"conversion operator","deduction guide"}," as a friend"}},{nil,nil,{"must use a qualified name when declaring a ",{"constructor",ob,"conversion operator"}," as a friend"}}},
[f]=k,
[h]=k,
[g]="(.*?) attribute cannot be used from (?:a block|an Objective\\-C function|this context)",
[c]="(?:must use a qualified name when declaring|cannot declare) a (?:constructor|destructor|conversion operator|deduction guide) as a friend",
[h]=a,
[f]=a,
[i]={{nil,u,m}},
[e]=m,
[b]={pb,1607502387,qb,sb},
[g]={"07e91c04ba33",1249524943,"First pass at friend semantics.","First pass at friend semantics.\n\nllvm-svn: 78274"},
[j]={{F,711,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Find caller function signature.\n  if (!CallerDecl) {\n    // ...\n    Diag(St->getBeginLoc(), diag::err_musttail_forbidden_from_this_context) << &MTA << ContextType;"}},
[d]={{t,17709,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  // ...\n  if (!DC->isRecord()) {\n    // ...\n    // This implies that it has to be an operator or function.\n    if (DiagArg >= 0) {\n      Diag(Loc, diag::err_introducing_special_friend) << DiagArg;"}},
[l]={
[l]={
["clang/test/Sema/attr-musttail.m"]={"clang/test/Sema/attr-musttail.m:5:31: error: \'musttail\' attribute cannot be used from a block","clang/test/Sema/attr-musttail.m:23:29: error: \'musttail\' attribute cannot be used from an Objective-C function"}
["clang/test/CXX/temp/temp.deduct.guide/p1.cpp"]={"clang/test/CXX/temp/temp.deduct.guide/p1.cpp:55:8: error: cannot declare a deduction guide as a friend"}
}
}
},
},
["err_musttail_member_mismatch"]={
["err_invalid_asm_cast_lvalue"]={
[c]={{nil,u,"err_musttail_member_mismatch"}},
[b]="err_invalid_asm_cast_lvalue",
[d]={{nil,u,"%select{non-member|static member|non-static member}0 function cannot perform a tail call to %select{non-member|static member|non-static member|pointer-to-member}1 function%select{| %3}2"}},
[i]={{nil,mb,"invalid use of a cast in a inline asm context requiring an lvalue: remove the cast or build with -fheinous-gnu-extensions"},{sb,nil,"invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions"}},
[e]={{nil,u,{{"non-member","static member","non-static member"}," function cannot perform a tail call to ",{"non-member","static member","non-static member","pointer-to-member"}," function",{a," D"}}}},
[j]={{nil,mb,"invalid use of a cast in a inline asm context requiring an lvalue: remove the cast or build with -fheinous-gnu-extensions"},{sb,nil,"invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions"}},
[f]=k,
[h]=k,
[g]="(?:non\\-member|static member|non\\-static member) function cannot perform a tail call to (?:non\\-member|static member|non\\-static member|pointer\\-to\\-member) function(?:| (.*?))",
[c]="invalid use of a cast in a inline asm context requiring an lvalue\\: remove the cast or build with \\-fheinous\\-gnu\\-extensions",
[h]=a,
[f]=a,
[i]={{nil,u,m}},
[e]="Inline Assembly Issue",
[b]={pb,1607502387,qb,sb},
[g]={x,1237025389,y,z},
[j]={{F,793,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Caller and callee must match in whether they have a \"this\" parameter.\n if (CallerType.This.isNull() != CalleeType.This.isNull()) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl())) {\n      Diag(St->getBeginLoc(), diag::err_musttail_member_mismatch) << CallerType.MemberType << CalleeType.MemberType << true << ND->getDeclName();"},{F,799,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Caller and callee must match in whether they have a \"this\" parameter.\n  if (CallerType.This.isNull() != CalleeType.This.isNull()) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl())) {\n    // ...\n    } else\n      Diag(St->getBeginLoc(), diag::err_musttail_member_mismatch) << CallerType.MemberType << CalleeType.MemberType << false;"}},
[d]={{"clang/lib/Sema/SemaStmtAsm.cpp",76,"/// Emit a warning about usage of \"noop\"-like casts for lvalues (GNU extension)\n/// and fix the argument with removing LValueToRValue cast from the expression.\nstatic void emitAndFixInvalidAsmCastLValue(const Expr *LVal, Expr *BadArgument, Sema &S) {\n  if (!S.getLangOpts().HeinousExtensions) {\n    S.Diag(LVal->getBeginLoc(), diag::err_invalid_asm_cast_lvalue) << BadArgument->getSourceRange();"}},
[l]={
[l]={
[Vb]={"clang/test/SemaCXX/attr-musttail.cpp:41:3: error: non-member function cannot perform a tail call to non-static member function \'MemberFunction\'","clang/test/SemaCXX/attr-musttail.cpp:48:5: error: non-static member function cannot perform a tail call to non-member function \'ReturnsVoid\'","clang/test/SemaCXX/attr-musttail.cpp:87:3: error: non-member function cannot perform a tail call to pointer-to-member function \'p_mem\'","clang/test/SemaCXX/attr-musttail.cpp:163:3: error: non-member function cannot perform a tail call to non-static member function \'operator()\'","clang/test/SemaCXX/attr-musttail.cpp:175:3: error: non-member function cannot perform a tail call to non-static member function \'operator()\'","clang/test/SemaCXX/attr-musttail.cpp:253:3: error: static member function cannot perform a tail call to pointer-to-member function"}
["clang/test/Sema/heinous-extensions-off.c"]={"clang/test/Sema/heinous-extensions-off.c:6:33: error: invalid use of a cast in a inline asm context requiring an lvalue: remove the cast or build with -fheinous-gnu-extensions","clang/test/Sema/heinous-extensions-off.c:8:36: error: invalid use of a cast in a inline asm context requiring an lvalue: remove the cast or build with -fheinous-gnu-extensions"}
}
}
},
},
["err_musttail_mismatch"]={
["err_invalid_asm_value_for_constraint"]={
[c]={{nil,u,"err_musttail_mismatch"}},
[b]="err_invalid_asm_value_for_constraint",
[d]={{nil,u,"cannot perform a tail call to function%select{| %1}0 because its signature is incompatible with the calling function"}},
[i]="value \'%0\' out of range for constraint \'%1\'",
[e]={{nil,u,{"cannot perform a tail call to function",{a," B"}," because its signature is incompatible with the calling function"}}},
[j]="value \'A\' out of range for constraint \'B\'",
[f]=k,
[h]=k,
[g]="cannot perform a tail call to function(?:| (.*?)) because its signature is incompatible with the calling function",
[c]="value \'(.*?)\' out of range for constraint \'(.*?)\'",
[h]=a,
[f]=a,
[i]={{nil,u,m}},
[e]="Inline Assembly Issue",
[b]={pb,1607502387,qb,sb},
[g]={"a2823578e6c5",1420518394,"Sema: analyze I,J,K,M,N,O constraints","Sema: analyze I,J,K,M,N,O constraints\n\nAdd additional constraint checking for target specific behaviour for inline\nassembly constraints.  We would previously silently let all arguments through\nfor these constraints.  In cases where the constraints were violated, we could\nend up failing to select instructions and triggering assertions or worse,\nsilently ignoring instructions.\n\nllvm-svn: 225244"},
[j]={{F,854,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (!CheckTypesMatch(CallerType, CalleeType, PD)) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n      Diag(St->getBeginLoc(), diag::err_musttail_mismatch) << true << ND->getDeclName();"},{F,857,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n // ...\n if (!CheckTypesMatch(CallerType, CalleeType, PD)) {\n   if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl()))\n   // ...\n   else\n      Diag(St->getBeginLoc(), diag::err_musttail_mismatch) << false;"}},
[d]={{"clang/lib/Sema/SemaStmtAsm.cpp",423,"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  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    // Only allow void types for memory constraints.\n    if (Info.allowsMemory() && !Info.allowsRegister()) {\n    // ...\n    } else {\n      // ...\n      if (Info.requiresImmediateConstant() && !Info.allowsRegister()) {\n        if (!InputExpr->isValueDependent()) {\n         // ...\n         if (InputExpr->EvaluateAsRValue(EVResult, Context, true)) {\n           // ...\n            if (EVResult.Val.toIntegralConstant(IntResult, InputExpr->getType(), Context))\n             if (!Info.isValidAsmImmediate(IntResult))\n               return StmtError(Diag(InputExpr->getBeginLoc(), diag::err_invalid_asm_value_for_constraint) << toString(IntResult, 10) << Info.getConstraintStr() << InputExpr->getSourceRange());"}},
[l]={
[l]={
[Vb]={"clang/test/SemaCXX/attr-musttail.cpp:20:3: error: cannot perform a tail call to function \'NoParams\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:26:3: error: cannot perform a tail call to function \'LongParam\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:32:3: error: cannot perform a tail call to function \'ReturnsLong\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:136:3: error: cannot perform a tail call to function \'TakesShortParam\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:140:3: error: cannot perform a tail call to function \'TakesIntParam\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:150:5: error: cannot perform a tail call to function \'ToFunction\' because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:234:3: error: cannot perform a tail call to function because its signature is incompatible with the calling function","clang/test/SemaCXX/attr-musttail.cpp:111:3: error: cannot perform a tail call to function \'TemplateFunc\' because its signature is incompatible with the calling function"}
["clang/test/Sema/inline-asm-validate-amdgpu.cl"]={"clang/test/Sema/inline-asm-validate-amdgpu.cl:25:52: error: value \'-17\' out of range for constraint \'I\'","clang/test/Sema/inline-asm-validate-amdgpu.cl:26:52: error: value \'65\' out of range for constraint \'I\'","clang/test/Sema/inline-asm-validate-amdgpu.cl:32:52: error: value \'-32769\' out of range for constraint \'J\'","clang/test/Sema/inline-asm-validate-amdgpu.cl:33:52: error: value \'32768\' out of range for constraint \'J\'"}
}
}
},
},
["err_musttail_needs_call"]={
["err_invalid_astype_of_different_size"]={
[c]={{nil,u,"err_musttail_needs_call"}},
[b]="err_invalid_astype_of_different_size",
[d]={{nil,u,"%0 attribute requires that the return value is the result of a function call"}},
[i]="invalid reinterpretation: sizes of %0 and %1 must match",
[e]={{nil,u,"A attribute requires that the return value is the result of a function call"}},
[j]="invalid reinterpretation: sizes of A and B must match",
[f]=k,
[h]=k,
[g]="(.*?) attribute requires that the return value is the result of a function call",
[c]="invalid reinterpretation\\: sizes of (.*?) and (.*?) must match",
[h]=a,
[f]=a,
[i]={{nil,u,m}},
[e]=m,
[b]={pb,1607502387,qb,sb},
[g]={"55808c1026bd",1307148467,"Add support for builtin astype:","Add support for builtin astype:\n__builtin_astype(): Used to reinterpreted as another data type of the same size using for both scalar and vector data types.\nAdded test case.\n\nllvm-svn: 132612"},
[j]={{F,653,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (!CE) {\n    Diag(St->getBeginLoc(), diag::err_musttail_needs_call) << &MTA;"}},
[d]={{q,7341,"/// Create a new AsTypeExpr node (bitcast) from the arguments.\nExprResult Sema::BuildAsTypeExpr(Expr *E, QualType DestTy, SourceLocation BuiltinLoc, SourceLocation RParenLoc) {\n  // ...\n  if (!SrcTy->isDependentType() && Context.getTypeSize(DestTy) != Context.getTypeSize(SrcTy))\n    return ExprError(Diag(BuiltinLoc, diag::err_invalid_astype_of_different_size) << DestTy << SrcTy << E->getSourceRange());"}},
[l]={
[l]={
[Vb]={"clang/test/SemaCXX/attr-musttail.cpp:7:23: error: \'musttail\' attribute requires that the return value is the result of a function call","clang/test/SemaCXX/attr-musttail.cpp:12:23: error: \'musttail\' attribute requires that the return value is the result of a function call","clang/test/SemaCXX/attr-musttail.cpp:78:23: error: \'musttail\' attribute requires that the return value is the result of a function call","clang/test/SemaCXX/attr-musttail.cpp:204:23: error: \'musttail\' attribute requires that the return value is the result of a function call"}
["clang/test/Parser/opencl-astype.cl"]={"clang/test/Parser/opencl-astype.cl:14:16: error: invalid reinterpretation: sizes of \'double4\' (vector of 4 \'double\' values) and \'__private float4\' (vector of 4 \'float\' values) must match"}
}
}
},
},
["err_musttail_needs_prototype"]={
["err_invalid_base_in_interface"]={
[c]={{nil,u,"err_musttail_needs_prototype"}},
[b]="err_invalid_base_in_interface",
[d]={{nil,u,"%0 attribute requires that both caller and callee functions have a prototype"}},
[i]={{nil,A,"interface type cannot inherit from %select{struct|non-public interface|class}0 %1"},{J,nil,"interface type cannot inherit from %select{\'struct|non-public \'interface|\'class}0 %1\'"}},
[e]={{nil,u,"A attribute requires that both caller and callee functions have a prototype"}},
[j]={{nil,A,{"interface type cannot inherit from ",{"struct","non-public interface","class"}," B"}},{J,nil,{"interface type cannot inherit from ",{"\'struct","non-public \'interface","\'class"}," B\'"}}},
[f]=k,
[h]=k,
[g]="(.*?) attribute requires that both caller and callee functions have a prototype",
[c]="interface type cannot inherit from (?:struct|non\\-public interface|class) (.*?)",
[h]=a,
[f]=a,
[i]={{nil,u,m}},
[e]=m,
[b]={pb,1607502387,qb,sb},
[g]={"db632ac004ae",1348558359,"Fix for r163013 regression and further __interface enhancement.","Fix for r163013 regression and further __interface enhancement.\nPatch by Andy Gibbs!\n\nllvm-svn: 164590"},
[j]={{F,755,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Both caller and callee must have a prototype (no K&R declarations).\n if (!CalleeType.Func || !CallerType.Func) {\n   Diag(St->getBeginLoc(), diag::err_musttail_needs_prototype) << &MTA;"}},
[d]={{t,2930,"/// Performs the actual work of attaching the given base class\n/// specifiers to a C++ class.\nbool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, MutableArrayRef<CXXBaseSpecifier *> Bases) {\n  // ...\n  for (unsigned idx = 0; idx < Bases.size(); ++idx) {\n    // ...\n    if (KnownBase) {\n    // ...\n    } else {\n      // ...\n      if (const RecordType *Record = NewBaseType->getAs<RecordType>()) {\n        // ...\n       if (Class->isInterface() && (!RD->isInterfaceLike() || KnownBase->getAccessSpecifier() != AS_public)) {\n         // ...\n          Diag(KnownBase->getBeginLoc(), diag::err_invalid_base_in_interface) << getRecordDiagFromTagKind(RD->getTagKind()) << RD << RD->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/attr-musttail.c"]={"clang/test/Sema/attr-musttail.c:5:29: error: \'musttail\' attribute requires that both caller and callee functions have a prototype","clang/test/Sema/attr-musttail.c:10:29: error: \'musttail\' attribute requires that both caller and callee functions have a prototype"}
["clang/test/SemaCXX/ms-iunknown-inline-def.cpp"]={"clang/test/SemaCXX/ms-iunknown-inline-def.cpp:8:24: error: interface type cannot inherit from struct \'IUnknown\'"}
}
}
},
},
["err_musttail_needs_trivial_args"]={
["err_invalid_branch_protection_spec"]={
[c]={{nil,u,"err_musttail_needs_trivial_args"}},
[b]={{nil,F,"err_invalid_branch_protection_spec"}},
[d]={{nil,u,"tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible"}},
[i]={{nil,F,"invalid or misplaced branch protection specification \'%0\'"}},
[e]={{nil,u,"tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible"}},
[j]={{nil,F,"invalid or misplaced branch protection specification \'A\'"}},
[f]=k,
[h]=k,
[g]="tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible",
[c]="invalid or misplaced branch protection specification \'(.*?)\'",
[h]=a,
[f]=a,
[i]={{nil,u,m}},
[e]={{nil,F,m}},
[b]={pb,1607502387,qb,sb},
[g]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining","[SYCL] Add sycl_kernel attribute for accelerated code outlining\n\nSYCL is single source offload programming model relying on compiler to\nseparate device code (i.e. offloaded to an accelerator) from the code\nexecuted on the host.\n\nHere is code example of the SYCL program to demonstrate compiler\noutlining work:\n\n```\nint foo(int x) { return ++x; }\nint bar(int x) { throw std::exception(\"CPU code only!\"); }\n...\nusing namespace cl::sycl;\nqueue Q;\nbuffer<int, 1> a(range<1>{1024});\nQ.submit([&](handler& cgh) {\n  auto A = a.get_access<access::mode::write>(cgh);\n  cgh.parallel_for<init_a>(range<1>{1024}, [=](id<1> index) {\n    A[index] = index[0] + foo(42);\n  });\n}\n...\n```\n\nSYCL device compiler must compile lambda expression passed to\ncl::sycl::handler::parallel_for method and function foo called from this\nlambda expression for an \"accelerator\". SYCL device compiler also must\nignore bar function as it\'s not required for offloaded code execution.\n\nThis patch adds the sycl_kernel attribute, which is used to mark code\npassed to cl::sycl::handler::parallel_for as \"accelerated code\".\n\nAttribute must be applied to function templates which parameters include\nat least \"kernel name\" and \"kernel function object\". These parameters\nwill be used to establish an ABI between the host application and\noffloaded part.\n\nReviewers: jlebar, keryell, Naghasan, ABataev, Anastasia, bader, aaron.ballman, rjmccall, rsmith\n\nReviewed By: keryell, bader\n\nSubscribers: mgorny, OlegM, ArturGainullin, agozillon, aaron.ballman, ebevhan, Anastasia, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D60455\n\nSigned-off-by: Alexey Bader <alexey.bader@intel.com>"},
[j]={{F,659,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (const auto *EWC = dyn_cast<ExprWithCleanups>(E)) {\n    if (EWC->cleanupsHaveSideEffects()) {\n     Diag(St->getBeginLoc(), diag::err_musttail_needs_trivial_args) << &MTA;"}},
[d]={{u,3459,"// Check for things we\'d like to warn about. Multiversioning issues are\n// handled later in the process, once we know how many exist.\nbool Sema::checkTargetAttr(SourceLocation LiteralLoc, StringRef AttrStr) {\n  // ...\n  if (!Context.getTargetInfo().validateBranchProtection(ParsedAttrs.BranchProtection, ParsedAttrs.CPU, BPI, DiagMsg)) {\n    // ...\n   return Diag(LiteralLoc, diag::err_invalid_branch_protection_spec) << DiagMsg;"}},
[l]={
[l]={
[Vb]={"clang/test/SemaCXX/attr-musttail.cpp:66:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible","clang/test/SemaCXX/attr-musttail.cpp:74:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible","clang/test/SemaCXX/attr-musttail.cpp:124:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible","clang/test/SemaCXX/attr-musttail.cpp:179:23: error: tail call requires that the return value, all parameters, and any temporaries created by the expression are trivially destructible"}
["clang/test/Sema/arm-branch-protection-attr-err.c"]={"clang/test/Sema/arm-branch-protection-attr-err.c:3:23: error: invalid or misplaced branch protection specification \'foo\'","clang/test/Sema/arm-branch-protection-attr-err.c:7:23: error: invalid or misplaced branch protection specification \'<empty>\'","clang/test/Sema/arm-branch-protection-attr-err.c:11:23: error: invalid or misplaced branch protection specification \'<empty>\'","clang/test/Sema/arm-branch-protection-attr-err.c:15:23: error: invalid or misplaced branch protection specification \'bkey\'","clang/test/Sema/arm-branch-protection-attr-err.c:23:23: error: invalid or misplaced branch protection specification \'leaf\'","clang/test/Sema/arm-branch-protection-attr-err.c:27:23: error: invalid or misplaced branch protection specification \'leaf\'","clang/test/Sema/arm-branch-protection-attr-err.c:31:23: error: invalid or misplaced branch protection specification \'leaf\'"}
}
}
},
},
["err_musttail_no_variadic"]={
["err_invalid_char_raw_delim"]={
[c]={{nil,u,"err_musttail_no_variadic"}},
[b]="err_invalid_char_raw_delim",
[d]={{nil,u,"%0 attribute may not be used with variadic functions"}},
[i]="invalid character \'%0\' character in raw string delimiter; use PREFIX( )PREFIX to delimit raw string",
[e]={{nil,u,"A attribute may not be used with variadic functions"}},
[j]="invalid character \'A\' character in raw string delimiter; use PREFIX( )PREFIX to delimit raw string",
[f]=k,
[h]=k,
[g]="(.*?) attribute may not be used with variadic functions",
[c]="invalid character \'(.*?)\' character in raw string delimiter; use PREFIX\\( \\)PREFIX to delimit raw string",
[h]=a,
[f]=a,
[i]={{nil,u,m}},
[e]=O,
[b]={pb,1607502387,qb,sb},
[g]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals.","Add support for C++0x raw string literals.\n\nllvm-svn: 137298"},
[j]={{F,786,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  if (CalleeType.Func->isVariadic() || CallerType.Func->isVariadic()) {\n    Diag(St->getBeginLoc(), diag::err_musttail_no_variadic) << &MTA;"}},
[d]={{"clang/lib/Lex/Lexer.cpp",2160,"/// LexRawStringLiteral - Lex the remainder of a raw string literal, after\n/// having lexed R\", LR\", u8R\", uR\", or UR\".\nbool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // ...\n  // If the last character was not a \'(\', then we didn\'t lex a valid delimiter.\n  if (CurPtr[PrefixLen] != \'(\') {\n    if (!isLexingRawMode()) {\n      // ...\n      if (PrefixLen == 16) {\n      // ...\n      } else {\n        Diag(PrefixEnd, diag::err_invalid_char_raw_delim) << StringRef(PrefixEnd, 1);"}}
[l]={
[Vb]={"clang/test/SemaCXX/attr-musttail.cpp:129:23: error: \'musttail\' attribute may not be used with variadic functions"}
}
},
},
["err_musttail_scope"]={
["err_invalid_character_to_charify"]={
[c]={{nil,u,"err_musttail_scope"}},
[b]="err_invalid_character_to_charify",
[d]={{nil,u,"cannot perform a tail call from this return statement"}},
[i]="invalid argument to convert to character",
[e]={{nil,u,"cannot perform a tail call from this return statement"}},
[j]="invalid argument to convert to character",
[f]=k,
[h]=k,
[g]="cannot perform a tail call from this return statement",
[c]="invalid argument to convert to character",
[h]=a,
[f]=a,
[i]={{nil,u,m}},
[e]=O,
[b]={pb,1607502387,qb,sb},
[g]={S,1236199783,R,Q},
[j]={{"clang/lib/Sema/JumpDiagnostics.cpp",1006,"void JumpScopeChecker::VerifyMustTailStmts() {\n  for (AttributedStmt *AS : MustTailStmts) {\n    for (unsigned I = LabelAndGotoScopes[AS]; I; I = Scopes[I].ParentScope) {\n     if (Scopes[I].OutDiag) {\n       S.Diag(AS->getBeginLoc(), diag::err_musttail_scope);"}},
[d]={{"clang/lib/Lex/MacroArgs.cpp",300,"/// StringifyArgument - Implement C99 6.10.3.2p2, converting a sequence of\n/// tokens into the literal string token that should be produced by the C #\n/// preprocessor operator.  If Charify is true, then it should be turned into\n/// a character literal for the Microsoft charize (#@) extension.\n///\nToken MacroArgs::StringifyArgument(const Token *ArgToks, Preprocessor &PP, bool Charify, SourceLocation ExpansionLocStart, SourceLocation ExpansionLocEnd) {\n  // ...\n  // If this is the charify operation and the result is not a legal character\n  // constant, diagnose it.\n  if (Charify) {\n    // ...\n   if (isBad) {\n     PP.Diag(ArgTokStart[0], diag::err_invalid_character_to_charify);"}}
[l]={
["clang/test/Sema/attr-musttail.m"]={"clang/test/Sema/attr-musttail.m:13:3: error: cannot perform a tail call from this return statement"}
}
},
},
["err_musttail_structors_forbidden"]={
["err_invalid_character_udl"]={
[c]={{nil,u,"err_musttail_structors_forbidden"}},
[b]="err_invalid_character_udl",
[d]={{nil,u,"cannot perform a tail call %select{from|to}0 a %select{constructor|destructor}1"}},
[i]="character literal with user-defined suffix cannot be used here",
[e]={{nil,u,{"cannot perform a tail call ",{"from","to"}," a ",{C,B}}}},
[j]="character literal with user-defined suffix cannot be used here",
[f]=k,
[h]=k,
[g]="cannot perform a tail call (?:from|to) a (?:constructor|destructor)",
[c]="character literal with user\\-defined suffix cannot be used here",
[h]=a,
[f]=a,
[i]={{nil,u,m}},
[e]=O,
[b]={pb,1607502387,qb,sb},
[g]={"bcc22fc4e1b2",1331280036,"Support for raw and template forms of numeric user-defined literals,","Support for raw and template forms of numeric user-defined literals,\nand lots of tidying up.\n\nllvm-svn: 152392"},
[j]={{F,682,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n auto GetMethodType = [this, St, MTA](const CXXMethodDecl *CMD, FuncType &Type, bool IsCallee) -> bool {\n    if (isa<CXXConstructorDecl, CXXDestructorDecl>(CMD)) {\n      Diag(St->getBeginLoc(), diag::err_musttail_structors_forbidden) << IsCallee << isa<CXXDestructorDecl>(CMD);"},{F,743,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // ...\n  // Find callee function signature.\n  if (const CXXMethodDecl *CMD = dyn_cast_or_null<CXXMethodDecl>(CE->getCalleeDecl())) {\n  // ...\n  } else if (CalleeBinOp && CalleeBinOp->isPtrMemOp()) {\n  // ...\n  } else if (isa<CXXPseudoDestructorExpr>(CalleeExpr)) {\n    Diag(St->getBeginLoc(), diag::err_musttail_structors_forbidden) << /* IsCallee = */ 1 << /* IsDestructor = */ 1;"}},
[d]={{q,3772,"ExprResult Sema::ActOnCharacterConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  // Make sure we\'re allowed user-defined literals here.\n  if (!UDLScope)\n    return ExprError(Diag(UDSuffixLoc, diag::err_invalid_character_udl));"}}
[l]={
[Vb]={"clang/test/SemaCXX/attr-musttail.cpp:186:5: error: cannot perform a tail call from a destructor","clang/test/SemaCXX/attr-musttail.cpp:193:5: error: cannot perform a tail call to a destructor","clang/test/SemaCXX/attr-musttail.cpp:212:3: error: cannot perform a tail call to a constructor","clang/test/SemaCXX/attr-musttail.cpp:241:3: error: cannot perform a tail call to a destructor"}
}
},
},
["err_mutable_const"]={
["err_invalid_collection_element"]={
[c]="err_mutable_const",
[b]="err_invalid_collection_element",
[d]="\'mutable\' and \'const\' cannot be mixed",
[i]="collection element of type %0 is not an Objective-C object",
[e]="\'mutable\' and \'const\' cannot be mixed",
[j]="collection element of type A is not an Objective-C object",
[f]=k,
[h]=k,
[g]="\'mutable\' and \'const\' cannot be mixed",
[c]="collection element of type (.*?) is not an Objective\\-C object",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={J,1236199783,H,I},
[g]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,","Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,\nNSNumber, and boolean literals.  This includes both Sema and Codegen support.\nIncluded is also support for new Objective-C container subscripting.\n\nMy apologies for the large patch.  It was very difficult to break apart.\nThe patch introduces changes to the driver as well to cause clang to link\nin additional runtime support when needed to support the new language features.\n\nDocs are forthcoming to document the implementation and behavior of these features.\n\nllvm-svn: 152137"},
[j]={{o,18189,"/// 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    // ...\n    else if (T.isConstQualified())\n      DiagID = diag::err_mutable_const;"}},
[d]={{bb,468,"/// Check that the given expression is a valid element of an Objective-C\n/// collection literal.\nstatic ExprResult CheckObjCCollectionLiteralElement(Sema &S, Expr *Element, QualType T, bool ArrayLiteral = false) {\n  // ...\n  // Make sure that we have an Objective-C pointer type or block.\n  if (!Element->getType()->isObjCObjectPointerType() && !Element->getType()->isBlockPointerType()) {\n    // ...\n    if (!Recovered) {\n      S.Diag(Element->getBeginLoc(), diag::err_invalid_collection_element) << Element->getType();"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:7:3: error: \'mutable\' and \'const\' cannot be mixed","clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:8:3: error: \'mutable\' and \'const\' cannot be mixed"}
["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:108:43: error: collection element of type \'int\' is not an Objective-C object"}
}
}
},
},
["err_mutable_function"]={
["err_invalid_complex_spec"]={
[c]="err_mutable_function",
[b]="err_invalid_complex_spec",
[d]="\'mutable\' cannot be applied to functions",
[i]="\'_Complex %0\' is invalid",
[e]="\'mutable\' cannot be applied to functions",
[j]="\'_Complex A\' is invalid",
[f]=k,
[h]=k,
[g]="\'mutable\' cannot be applied to functions",
[c]="\'_Complex (.*?)\' is invalid",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={J,1236199783,H,I},
[g]={S,1236199783,R,Q},
[j]={{Q,3486,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  case DeclSpec::SCS_mutable:\n   if (isFunc) {\n     Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_function);"}},
[d]={{D,1321,"/// 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.\if (TypeSpecComplex != TSC_unspecified) {\n   if (TypeSpecType == TST_unspecified) {\n    // ...\n    } else if (TypeSpecType == TST_int || TypeSpecType == TST_char || TypeSpecType == TST_bitint) {\n   // ...\n    } else if (TypeSpecType != TST_float && TypeSpecType != TST_double && TypeSpecType != TST_float128 && TypeSpecType != TST_float16 && TypeSpecType != TST_ibm128) {\n      // ...\n      S.Diag(TSCLoc, diag::err_invalid_complex_spec) << getSpecifierName((TST)TypeSpecType, Policy);"},{K,8377,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n  // ...\n  // We don\'t allow _Complex _Float16 nor _Complex __fp16 as type specifiers;\n  // don\'t allow this builtin to form those types either.\n  // FIXME: Should we allow these types?\n  if (Real->getType()->isFloat16Type())\n    return Diag(TheCall->getBeginLoc(), diag::err_invalid_complex_spec) << \"_Float16\";"},{K,8380,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n // ...\n  if (Real->getType()->isHalfType())\n   return Diag(TheCall->getBeginLoc(), diag::err_invalid_complex_spec) << \"half\";"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:12:3: error: \'mutable\' cannot be applied to functions"}
["clang/test/Sema/fp16-sema.c"]={"clang/test/Sema/fp16-sema.c:34:3: error: \'_Complex half\' is invalid","clang/test/Sema/fp16-sema.c:36:7: error: \'_Complex half\' is invalid"}
}
}
},
},
["err_mutable_nonmember"]={
["err_invalid_consteval_call"]={
[c]="err_mutable_nonmember",
[b]={{nil,o,"err_invalid_consteval_call"}},
[d]="\'mutable\' can only be applied to member variables",
[i]="call to %select{immediate|consteval}1 function %q0 is not a constant expression",
[e]="\'mutable\' can only be applied to member variables",
[j]={{nil,nil,{"call to ",{"immediate","consteval"}," function A is not a constant expression"}},{n,o,"call to consteval function A is not a constant expression"}},
[f]=k,
[h]=k,
[g]="\'mutable\' can only be applied to member variables",
[c]="call to (?:immediate|consteval) function (.*?) is not a constant expression",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,o,m}},
[b]={J,1236199783,H,I},
[g]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling","[OpenMP][Part 2] Use reusable OpenMP context/traits handling\n\nThis patch implements an almost complete handling of OpenMP\ncontexts/traits such that we can reuse most of the logic in Flang\nthrough the OMPContext.{h,cpp} in llvm/Frontend/OpenMP.\n\nAll but construct SIMD specifiers, e.g., inbranch, and the device ISA\nselector are define in `llvm/lib/Frontend/OpenMP/OMPKinds.def`. From\nthese definitions we generate the enum classes `TraitSet`,\n`TraitSelector`, and `TraitProperty` as well as conversion and helper\nfunctions in `llvm/lib/Frontend/OpenMP/OMPContext.{h,cpp}`.\n\nThe above enum classes are used in the parser, sema, and the AST\nattribute. The latter is not a collection of multiple primitive variant\narguments that contain encodings via numbers and strings but instead a\ntree that mirrors the `match` clause (see `struct OpenMPTraitInfo`).\n\nThe changes to the parser make it more forgiving when wrong syntax is\nread and they also resulted in more specialized diagnostics. The tests\nare updated and the core issues are detected as before. Here and\nelsewhere this patch tries to be generic, thus we do not distinguish\nwhat selector set, selector, or property is parsed except if they do\nbehave exceptionally, as for example `user={condition(EXPR)}` does.\n\nThe sema logic changed in two ways: First, the OMPDeclareVariantAttr\nrepresentation changed, as mentioned above, and the sema was adjusted to\nwork with the new `OpenMPTraitInfo`. Second, the matching and scoring\nlogic moved into `OMPContext.{h,cpp}`. It is implemented on a flat\nrepresentation of the `match` clause that is not tied to clang.\n`OpenMPTraitInfo` provides a method to generate this flat structure (see\n`struct VariantMatchInfo`) by computing integer score values and boolean\nuser conditions from the `clang::Expr` we keep for them.\n\nThe OpenMP context is now an explicit object (see `struct OMPContext`).\nThis is in anticipation of construct traits that need to be tracked. The\nOpenMP context, as well as the `VariantMatchInfo`, are basically made up\nof a set of active or respectively required traits, e.g., \'host\', and an\nordered container of constructs which allows duplication. Matching and\nscoring is kept as generic as possible to allow easy extension in the\nfuture.\n\n---\n\nTest changes:\n\nThe messages checked in `OpenMP/declare_variant_messages.{c,cpp}` have\nbeen auto generated to match the new warnings and notes of the parser.\nThe \"subset\" checks were reversed causing the wrong version to be\npicked. The tests have been adjusted to correct this.\nWe do not print scores if the user did not provide one.\nWe print spaces to make lists in the `match` clause more legible.\n\nReviewers: kiranchandramohan, ABataev, RaviNarayanaswamy, gtbercea, grokos, sdmitriev, JonChesterfield, hfinkel, fghanim\n\nSubscribers: merge_guards_bot, rampitec, mgorny, hiraditya, aheejin, fedor.sergeev, simoncook, bollu, guansong, dexonsmith, jfb, s.egerton, llvm-commits, cfe-commits\n\nTags: #clang, #llvm\n\nDifferential Revision: https://reviews.llvm.org/D71830"},
[j]={{o,5290,"/// 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 // Note that a linkage-specification sets a storage class, but\n  // \'extern \"C\" struct foo;\' is actually valid and not theoretically\n  // useless.\if (DeclSpec::SCS SCS = DS.getStorageClassSpec()) {\n    if (SCS == DeclSpec::SCS_mutable)\n     // ...\n      Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_nonmember);"},{o,5716,"/// 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 (RecordDecl *OwningClass = dyn_cast<RecordDecl>(Owner)) {\n // ...\n  } else {\n    // ...\n   if (SCSpec == DeclSpec::SCS_mutable) {\n     // ...\n     Diag(Record->getLocation(), diag::err_mutable_nonmember);"},{o,7484,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (SCSpec == DeclSpec::SCS_mutable) {\n    // ...\n    Diag(D.getIdentifierLoc(), diag::err_mutable_nonmember);"}},
[d]={{q,18266,"static void EvaluateAndDiagnoseImmediateInvocation(Sema &SemaRef, Sema::ImmediateInvocationCandidate Candidate) {\n  // ...\n  if (!Result || !Notes.empty()) {\n    // ...\n    SemaRef.Diag(CE->getBeginLoc(), diag::err_invalid_consteval_call) << FD << FD->isConsteval();"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:11:3: error: \'mutable\' can only be applied to member variables"}
["clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp"]={"clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp:95:12: error: call to consteval function \'f\' is not a constant expression"}
}
}
},
},
["err_mutable_reference"]={
["err_invalid_consteval_decl_kind"]={
[c]="err_mutable_reference",
[b]={{nil,o,"err_invalid_consteval_decl_kind"}},
[d]="\'mutable\' cannot be applied to references",
[i]={{nil,o,"%0 cannot be declared consteval"}},
[e]="\'mutable\' cannot be applied to references",
[j]={{nil,o,"A cannot be declared consteval"}},
[f]=k,
[h]=k,
[g]="\'mutable\' cannot be applied to references",
[c]="(.*?) cannot be declared consteval",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,o,m}},
[b]={J,1236199783,H,I},
[g]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling","[OpenMP][Part 2] Use reusable OpenMP context/traits handling\n\nThis patch implements an almost complete handling of OpenMP\ncontexts/traits such that we can reuse most of the logic in Flang\nthrough the OMPContext.{h,cpp} in llvm/Frontend/OpenMP.\n\nAll but construct SIMD specifiers, e.g., inbranch, and the device ISA\nselector are define in `llvm/lib/Frontend/OpenMP/OMPKinds.def`. From\nthese definitions we generate the enum classes `TraitSet`,\n`TraitSelector`, and `TraitProperty` as well as conversion and helper\nfunctions in `llvm/lib/Frontend/OpenMP/OMPContext.{h,cpp}`.\n\nThe above enum classes are used in the parser, sema, and the AST\nattribute. The latter is not a collection of multiple primitive variant\narguments that contain encodings via numbers and strings but instead a\ntree that mirrors the `match` clause (see `struct OpenMPTraitInfo`).\n\nThe changes to the parser make it more forgiving when wrong syntax is\nread and they also resulted in more specialized diagnostics. The tests\nare updated and the core issues are detected as before. Here and\nelsewhere this patch tries to be generic, thus we do not distinguish\nwhat selector set, selector, or property is parsed except if they do\nbehave exceptionally, as for example `user={condition(EXPR)}` does.\n\nThe sema logic changed in two ways: First, the OMPDeclareVariantAttr\nrepresentation changed, as mentioned above, and the sema was adjusted to\nwork with the new `OpenMPTraitInfo`. Second, the matching and scoring\nlogic moved into `OMPContext.{h,cpp}`. It is implemented on a flat\nrepresentation of the `match` clause that is not tied to clang.\n`OpenMPTraitInfo` provides a method to generate this flat structure (see\n`struct VariantMatchInfo`) by computing integer score values and boolean\nuser conditions from the `clang::Expr` we keep for them.\n\nThe OpenMP context is now an explicit object (see `struct OMPContext`).\nThis is in anticipation of construct traits that need to be tracked. The\nOpenMP context, as well as the `VariantMatchInfo`, are basically made up\nof a set of active or respectively required traits, e.g., \'host\', and an\nordered container of constructs which allows duplication. Matching and\nscoring is kept as generic as possible to allow easy extension in the\nfuture.\n\n---\n\nTest changes:\n\nThe messages checked in `OpenMP/declare_variant_messages.{c,cpp}` have\nbeen auto generated to match the new warnings and notes of the parser.\nThe \"subset\" checks were reversed causing the wrong version to be\npicked. The tests have been adjusted to correct this.\nWe do not print scores if the user did not provide one.\nWe print spaces to make lists in the `match` clause more legible.\n\nReviewers: kiranchandramohan, ABataev, RaviNarayanaswamy, gtbercea, grokos, sdmitriev, JonChesterfield, hfinkel, fghanim\n\nSubscribers: merge_guards_bot, rampitec, mgorny, hiraditya, aheejin, fedor.sergeev, simoncook, bollu, guansong, dexonsmith, jfb, s.egerton, llvm-commits, cfe-commits\n\nTags: #clang, #llvm\n\nDifferential Revision: https://reviews.llvm.org/D71830"},
[j]={{o,18187,"/// 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;"}},
[d]={{p,9978,"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 (ConstexprKind != ConstexprSpecKind::Unspecified) {\n     // ...\n     // C++20 [dcl.constexpr]p2: An allocation function, or a\n      // deallocation function shall not be declared with the consteval\n      // specifier.\n      if (ConstexprKind == ConstexprSpecKind::Consteval && (NewFD->getOverloadedOperator() == OO_New || NewFD->getOverloadedOperator() == OO_Array_New || NewFD->getOverloadedOperator() == OO_Delete || NewFD->getOverloadedOperator() == OO_Array_Delete)) {\n       Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_invalid_consteval_decl_kind) << NewFD;"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:9:3: error: \'mutable\' cannot be applied to references","clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p10.cpp:10:3: error: \'mutable\' cannot be applied to references"}
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:110:3: error: \'operator new\' cannot be declared consteval","clang/test/SemaCXX/cxx2a-consteval.cpp:112:3: error: \'operator new[]\' cannot be declared consteval","clang/test/SemaCXX/cxx2a-consteval.cpp:114:3: error: \'operator delete\' cannot be declared consteval","clang/test/SemaCXX/cxx2a-consteval.cpp:116:3: error: \'operator delete[]\' cannot be declared consteval"}
}
}
},
},
["err_namespace_nonnamespace_scope"]={
["err_invalid_consteval_take_address"]={
[c]="err_namespace_nonnamespace_scope",
[b]={{nil,o,"err_invalid_consteval_take_address"}},
[d]="namespaces can only be defined in global or namespace scope",
[i]="cannot take address of %select{immediate|consteval}2 %select{function|call operator of}1 %0 outside of an immediate invocation",
[e]="namespaces can only be defined in global or namespace scope",
[j]={{nil,nil,{"cannot take address of ",{"immediate","consteval"},jb,{"function","call operator of"}," A outside of an immediate invocation"}},{n,o,"cannot take address of consteval function A outside of an immediate invocation"}},
[f]=k,
[h]=k,
[g]="namespaces can only be defined in global or namespace scope",
[c]="cannot take address of (?:immediate|consteval) (?:function|call operator of) (.*?) outside of an immediate invocation",
[h]=a,
[f]=a,
[i]=y,
[e]={{nil,o,m}},
[b]={"05cfc295f45d",1273813702,"Namespaces can only be defined at global or namespace scope. Fixes PR6596.","Namespaces can only be defined at global or namespace scope. Fixes PR6596.\n\nllvm-svn: 103767"},
[g]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling","[OpenMP][Part 2] Use reusable OpenMP context/traits handling\n\nThis patch implements an almost complete handling of OpenMP\ncontexts/traits such that we can reuse most of the logic in Flang\nthrough the OMPContext.{h,cpp} in llvm/Frontend/OpenMP.\n\nAll but construct SIMD specifiers, e.g., inbranch, and the device ISA\nselector are define in `llvm/lib/Frontend/OpenMP/OMPKinds.def`. From\nthese definitions we generate the enum classes `TraitSet`,\n`TraitSelector`, and `TraitProperty` as well as conversion and helper\nfunctions in `llvm/lib/Frontend/OpenMP/OMPContext.{h,cpp}`.\n\nThe above enum classes are used in the parser, sema, and the AST\nattribute. The latter is not a collection of multiple primitive variant\narguments that contain encodings via numbers and strings but instead a\ntree that mirrors the `match` clause (see `struct OpenMPTraitInfo`).\n\nThe changes to the parser make it more forgiving when wrong syntax is\nread and they also resulted in more specialized diagnostics. The tests\nare updated and the core issues are detected as before. Here and\nelsewhere this patch tries to be generic, thus we do not distinguish\nwhat selector set, selector, or property is parsed except if they do\nbehave exceptionally, as for example `user={condition(EXPR)}` does.\n\nThe sema logic changed in two ways: First, the OMPDeclareVariantAttr\nrepresentation changed, as mentioned above, and the sema was adjusted to\nwork with the new `OpenMPTraitInfo`. Second, the matching and scoring\nlogic moved into `OMPContext.{h,cpp}`. It is implemented on a flat\nrepresentation of the `match` clause that is not tied to clang.\n`OpenMPTraitInfo` provides a method to generate this flat structure (see\n`struct VariantMatchInfo`) by computing integer score values and boolean\nuser conditions from the `clang::Expr` we keep for them.\n\nThe OpenMP context is now an explicit object (see `struct OMPContext`).\nThis is in anticipation of construct traits that need to be tracked. The\nOpenMP context, as well as the `VariantMatchInfo`, are basically made up\nof a set of active or respectively required traits, e.g., \'host\', and an\nordered container of constructs which allows duplication. Matching and\nscoring is kept as generic as possible to allow easy extension in the\nfuture.\n\n---\n\nTest changes:\n\nThe messages checked in `OpenMP/declare_variant_messages.{c,cpp}` have\nbeen auto generated to match the new warnings and notes of the parser.\nThe \"subset\" checks were reversed causing the wrong version to be\npicked. The tests have been adjusted to correct this.\nWe do not print scores if the user did not provide one.\nWe print spaces to make lists in the `match` clause more legible.\n\nReviewers: kiranchandramohan, ABataev, RaviNarayanaswamy, gtbercea, grokos, sdmitriev, JonChesterfield, hfinkel, fghanim\n\nSubscribers: merge_guards_bot, rampitec, mgorny, hiraditya, aheejin, fedor.sergeev, simoncook, bollu, guansong, dexonsmith, jfb, s.egerton, llvm-commits, cfe-commits\n\nTags: #clang, #llvm\n\nDifferential Revision: https://reviews.llvm.org/D71830"},
[j]={{"clang/lib/Parse/ParseDeclCXX.cpp",164,"/// 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 (getCurScope()->isClassScope() || getCurScope()->isTemplateParamScope() || getCurScope()->isInObjcMethodScope() || getCurScope()->getBlockParent() || getCurScope()->getFnParent()) {\n   Diag(T.getOpenLocation(), diag::err_namespace_nonnamespace_scope);"}},
[d]={{q,18446,"static void HandleImmediateInvocations(Sema &SemaRef, Sema::ExpressionEvaluationContextRecord &Rec) {\n  // ...\n  for (auto *DR : Rec.ReferenceToConsteval) {\n    // ...\n    if (!Rec.InImmediateEscalatingFunctionContext || (SemaRef.inTemplateInstantiation() && !ImmediateEscalating)) {\n     SemaRef.Diag(DR->getBeginLoc(), diag::err_invalid_consteval_take_address) << ND << isa<CXXRecordDecl>(ND) << FD->isConsteval();"}},
[l]={
[l]={
["clang/test/Parser/namespaces.cpp"]={"clang/test/Parser/namespaces.cpp:7:15: error: namespaces can only be defined in global or namespace scope"}
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:79:19: error: cannot take address of consteval function \'f_eval\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:81:37: error: cannot take address of consteval function \'f_eval\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:84:10: error: cannot take address of consteval function \'f_eval\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:87:12: error: cannot take address of consteval function \'f1\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:89:12: error: cannot take address of consteval call operator of \'(lambda at clang/test/SemaCXX/cxx2a-consteval.cpp:16:25)\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:97:13: error: cannot take address of consteval function \'f\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:101:11: error: cannot take address of consteval function \'f\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:168:13: error: cannot take address of consteval function \'operator\"\"_test\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:253:11: error: cannot take address of immediate call operator of \'(lambda at clang/test/SemaCXX/cxx2a-consteval.cpp:253:11)\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:593:28: error: cannot take address of consteval function \'f_eval\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:586:25: error: cannot take address of consteval function \'f_eval\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:579:19: error: cannot take address of consteval function \'f_eval\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:600:33: error: cannot take address of consteval function \'f_eval\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:730:24: error: cannot take address of consteval function \'f\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:734:15: error: cannot take address of consteval function \'f\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:1035:23: error: cannot take address of consteval call operator of \'(lambda at clang/test/SemaCXX/cxx2a-consteval.cpp:1035:23)\' outside of an immediate invocation","clang/test/SemaCXX/cxx2a-consteval.cpp:1043:28: error: cannot take address of consteval call operator of \'(lambda at clang/test/SemaCXX/cxx2a-consteval.cpp:1043:28)\' outside of an immediate invocation"}
}
}
},
},
["err_need_header_before_placement_new"]={
["err_invalid_constexpr"]={
[c]={{nil,u,"err_need_header_before_placement_new"}},
[b]="err_invalid_constexpr",
[d]={{nil,u,"no matching %0 function for non-allocating placement new expression; include <new>"}},
[i]={{nil,F,"%select{function parameter|typedef}0 cannot be %select{<ERROR>|constexpr|consteval|constinit}1"},{r,r,"%select{function parameter|typedef|non-static data member}0 cannot be %select{constexpr|consteval}1"},{V,nil,"%select{function parameter|typedef|non-static data member}0 cannot be constexpr"}},
[e]={{nil,u,"no matching A function for non-allocating placement new expression; include <new>"}},
[j]={{nil,F,{{"function parameter","typedef"}," cannot be ",{"constexpr","consteval","constinit"}}},{r,r,{{"function parameter","typedef","non-static data member"}," cannot be ",{"constexpr","consteval"}}},{V,nil,{{"function parameter","typedef","non-static data member"}," cannot be constexpr"}}},
[f]=k,
[h]=k,
[g]="no matching (.*?) function for non\\-allocating placement new expression; include \\<new\\>",
[c]="(?:function parameter|typedef) cannot be (?:constexpr|consteval|constinit)",
[h]=a,
[f]=a,
[i]={{nil,u,m}},
[e]=m,
[b]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
[g]={"a77a0a6bf221",1313442247,"Track in the AST whether a function is constexpr.","Track in the AST whether a function is constexpr.\n\nllvm-svn: 137653"},
[j]={{tb,2568,"static bool resolveAllocationOverload(Sema &S, LookupResult &R, SourceRange Range, SmallVectorImpl<Expr *> &Args, bool &PassAlignment, FunctionDecl *&Operator, OverloadCandidateSet *AlignedCandidates, Expr *AlignArg, bool Diagnose) {\n  // ...\n  case OR_No_Viable_Function:\n    // ...\n    if (Diagnose) {\n      // If this is an allocation of the form \'new (p) X\' for some object\n     // pointer p (or an expression that will decay to such a pointer),\n     // diagnose the missing inclusion of <new>.\n     if (!R.isClassLookup() && Args.size() == 2 && (Args[1]->getType()->isObjectPointerType() || Args[1]->getType()->isArrayType())) {\n       S.Diag(R.getNameLoc(), diag::err_need_header_before_placement_new) << R.getLookupName() << Range;"}},
[d]={{p,6675,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n  // ...\n  if (D.getDeclSpec().hasConstexprSpecifier())\n    Diag(D.getDeclSpec().getConstexprSpecLoc(), diag::err_invalid_constexpr) << 1 << static_cast<int>(D.getDeclSpec().getConstexprSpecifier());"},{p,14758,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n // ...\n if (DS.hasConstexprSpecifier())\n   Diag(DS.getConstexprSpecLoc(), diag::err_invalid_constexpr) << 0 << static_cast<int>(D.getDeclSpec().getConstexprSpecifier());"}},
[l]={
[l]={
["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:136:9: error: no matching \'operator new\' function for non-allocating placement new expression; include <new>","clang/test/SemaCXX/new-delete.cpp:152:9: error: no matching \'operator new\' function for non-allocating placement new expression; include <new>","clang/test/SemaCXX/new-delete.cpp:153:9: error: no matching \'operator new\' function for non-allocating placement new expression; include <new>","clang/test/SemaCXX/new-delete.cpp:154:9: error: no matching \'operator new\' function for non-allocating placement new expression; include <new>"}
["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:29:16: error: function parameter cannot be constexpr"}
}
}
},
},
["err_need_header_before_typeid"]={
["err_invalid_constexpr_member"]={
[c]="err_need_header_before_typeid",
[b]="err_invalid_constexpr_member",
[d]="you need to include <typeinfo> before using the \'typeid\' operator",
[i]="non-static data member cannot be constexpr%select{; did you intend to make it %select{const|static}0?|}1",
[e]="you need to include <typeinfo> before using the \'typeid\' operator",
[j]={{nil,nil,{"non-static data member cannot be constexpr",{{"; did you intend to make it ",{lb,"static"},"?"},a}}}},
[f]=k,
[h]=k,
[g]="you need to include \\<typeinfo\\> before using the \'typeid\' operator",
[c]="non\\-static data member cannot be constexpr(?:; did you intend to make it (?:const|static)\\?|)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={ib,1237025389,fb,gb},
[g]={"35506f82025c",1359508938,"Provide a fixit for constexpr non-static data members.","Provide a fixit for constexpr non-static data members.\n\nIf the member has an initializer, assume it was probably intended to be static\nand suggest/recover with that.\n\nIf the member doesn\'t have an initializer, assume it was probably intended to\nbe const instead of constexpr and suggest that.\n\n(if the attempt to apply these changes fails, don\'t make any suggestion &\nproduce the same diagnostic experience as before. The only case where this can\ncome up that I know of is with a mutable constexpr with an initializer, since\nmutable is incompatible with static (but it\'s already incompatible with\nconst anyway))\n\nllvm-svn: 173873"},
[j]={{tb,661,"/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);\nExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) {\n // ...\n // Find the std::type_info type.\n if (!getStdNamespace())\n   return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));"},{tb,675,"/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);\nExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) {\n  // ...\n  if (!CXXTypeInfoDecl) {\n    // ...\n    if (!CXXTypeInfoDecl)\n      return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid));"}},
[d]={{t,3506,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (DS.hasConstexprSpecifier() && isInstField) {\n    SemaDiagnosticBuilder B = Diag(DS.getConstexprSpecLoc(), diag::err_invalid_constexpr_member);"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx1z-copy-omission.cpp"]={"clang/test/SemaCXX/cxx1z-copy-omission.cpp:109:3: error: you need to include <typeinfo> before using the \'typeid\' operator","clang/test/SemaCXX/cxx1z-copy-omission.cpp:110:3: error: you need to include <typeinfo> before using the \'typeid\' operator","clang/test/SemaCXX/cxx1z-copy-omission.cpp:112:3: error: you need to include <typeinfo> before using the \'typeid\' operator"}
["clang/test/SemaCXX/cxx1y-variable-templates_in_class.cpp"]={"clang/test/SemaCXX/cxx1y-variable-templates_in_class.cpp:158:26: error: non-static data member cannot be constexpr; did you intend to make it const?","clang/test/SemaCXX/cxx1y-variable-templates_in_class.cpp:160:26: error: non-static data member cannot be constexpr; did you intend to make it static?","clang/test/SemaCXX/cxx1y-variable-templates_in_class.cpp:163:26: error: non-static data member cannot be constexpr; did you intend to make it const?","clang/test/SemaCXX/cxx1y-variable-templates_in_class.cpp:165:26: error: non-static data member cannot be constexpr; did you intend to make it static?"}
}
}
},
},
["err_nested_name_member_ref_lookup_ambiguous"]={
["err_invalid_constexpr_var_decl"]={
[c]="err_nested_name_member_ref_lookup_ambiguous",
[b]="err_invalid_constexpr_var_decl",
[d]="lookup of %0 in member access expression is ambiguous",
[i]="constexpr variable declaration must be a definition",
[e]="lookup of A in member access expression is ambiguous",
[j]="constexpr variable declaration must be a definition",
[f]=k,
[h]=k,
[g]="lookup of (.*?) in member access expression is ambiguous",
[c]="constexpr variable declaration must be a definition",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"b7bfe794129f",1251932376,"Rewrite of our handling of name lookup in C++ member access expressions, e.g.,","Rewrite of our handling of name lookup in C++ member access expressions, e.g.,\n\n  x->Base::f\n\nWe no longer try to \"enter\" the context of the type that \"x\" points\nto. Instead, we drag that object type through the parser and pass it\ninto the Sema routines that need to know how to perform lookup within\nmember access expressions.\n\nWe now implement most of the crazy name lookup rules in C++\n[basic.lookup.classref] for non-templated code, including performing\nlookup both in the context of the type referred to by the member\naccess and in the scope of the member access itself and then detecting\nambiguities when the two lookups collide (p1 and p4; p3 and p7 are\nstill TODO). This change also corrects our handling of name lookup\nwithin template arguments of template-ids inside the\nnested-name-specifier (p6; we used to look into the scope of the\nobject expression for them) and fixes PR4703.\n\nI have disabled some tests that involve member access expressions\nwhere the object expression has dependent type, because we don\'t yet\nhave the ability to describe dependent nested-name-specifiers starting\nwith an identifier.\n\nllvm-svn: 80843"},
[g]={"2316cd8b798b",1317323497,"constexpr: semantic checking for constexpr variables.","constexpr: semantic checking for constexpr variables.\n\nWe had an extension which allowed const static class members of floating-point type to have in-class initializers, \'as a C++0x extension\'. However, C++0x does not allow this. The extension has been kept, and extended to all literal types in C++0x mode (with a fixit to add the \'constexpr\' specifier).\n\nllvm-svn: 140801"},
[j]={{cc,682,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///      \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery. This means that it should not emit diagnostics, it should\n/// just return true on failure. It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  // ...\n  if (AcceptSpec) {\n    if (!ObjectType.isNull() && !ObjectTypeSearchedInScope && !getLangOpts().CPlusPlus11) {\n      // ...\n      if (isAcceptableNestedNameSpecifier(OuterDecl) && OuterDecl->getCanonicalDecl() != SD->getCanonicalDecl() && (!isa<TypeDecl>(OuterDecl) || !isa<TypeDecl>(SD) || !Context.hasSameType(Context.getTypeDeclType(cast<TypeDecl>(OuterDecl)), Context.getTypeDeclType(cast<TypeDecl>(SD))))) {\n       // ...\n        Diag(IdInfo.IdentifierLoc, diag::err_nested_name_member_ref_lookup_ambiguous) << IdInfo.Identifier;"}},
[d]={{p,13692,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n // ...\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n   // ...\n   // C++11 [class.static.data]p3: A static data member can be declared with\n   // the constexpr specifier; if so, its declaration shall specify\n   // a brace-or-equal-initializer.\n   // C++11 [dcl.constexpr]p1: The constexpr specifier shall be applied only to\n   // the definition of a variable [...] or the declaration of a static data\n   // member.\n    if (Var->isConstexpr() && !Var->isThisDeclarationADefinition() && !Var->isThisDeclarationADemotedDefinition()) {\n      if (Var->isStaticDataMember()) {\n     // ...\n      } else {\n        Diag(Var->getLocation(), diag::err_invalid_constexpr_var_decl);"}},
[l]={
[l]={
["clang/test/SemaCXX/qual-id-test.cpp"]={"clang/test/SemaCXX/qual-id-test.cpp:98:10: error: lookup of \'base\' in member access expression is ambiguous"}
["clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp"]={"clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:17:37: error: constexpr variable declaration must be a definition"}
}
}
},
},
["err_nested_name_spec_is_not_class"]={
["err_invalid_conversion_between_ext_vectors"]={
[c]="err_nested_name_spec_is_not_class",
[b]="err_invalid_conversion_between_ext_vectors",
[d]="%0 cannot appear before \'::\' because it is not a class%select{ or namespace|, namespace, or enumeration}1; did you mean \':\'?",
[i]="invalid conversion between ext-vector type %0 and %1",
[e]={{nil,nil,{"A cannot appear before \'::\' because it is not a class",{" or namespace",", namespace, or enumeration"},"; did you mean \':\'?"}}},
[j]="invalid conversion between ext-vector type A and B",
[f]=k,
[h]=k,
[g]="(.*?) cannot appear before \'\\:\\:\' because it is not a class(?: or namespace|, namespace, or enumeration); did you mean \'\\:\'\\?",
[c]="invalid conversion between ext\\-vector type (.*?) and (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"6a7ffbed8ab4",1397407923,"Improve error recovery around colon.","Improve error recovery around colon.\n\nParse of nested name spacifier is modified so that it properly recovers\nif colon is mistyped as double colon in case statement.\nThis patch fixes PR15133.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2870\n\nllvm-svn: 206135"},
[g]={"c69b740df42c",1245977428,"OpenCL 1.0 support: explicit casts to ext-vector types","OpenCL 1.0 support: explicit casts to ext-vector types\n\nllvm-svn: 74247"},
[j]={{cc,589,"/// 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) {\n    // ...\n    if (!R.empty()) {\n      // ...\n      // The identifier is found in ordinary lookup. If correction to colon is\n      // allowed, suggest replacement to \':\'.\n      if (IsCorrectedToColon) {\n       // ...\n        Diag(IdInfo.CCLoc, diag::err_nested_name_spec_is_not_class) << IdInfo.Identifier << getLangOpts().CPlusPlus << FixItHint::CreateReplacement(IdInfo.CCLoc, \":\");"}},
[d]={{q,8375,"ExprResult Sema::CheckExtVectorCast(SourceRange R, QualType DestTy, Expr *CastExpr, CastKind &Kind) {\n  // ...\n // If SrcTy is a VectorType, the total size must match to explicitly cast to\n  // an ExtVectorType.\n  // In OpenCL, casts between vectors of different types are not allowed.\n // (See OpenCL 6.2).\n  if (SrcTy->isVectorType()) {\n    if (!areLaxCompatibleVectorTypes(SrcTy, DestTy) || (getLangOpts().OpenCL && !Context.hasSameUnqualifiedType(DestTy, SrcTy))) {\n     Diag(R.getBegin(), diag::err_invalid_conversion_between_ext_vectors) << DestTy << SrcTy << R;"}},
[l]={
[l]={
["clang/test/Parser/recovery.cpp"]={"clang/test/Parser/recovery.cpp:160:16: error: \'V1\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:161:16: error: \'V2\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:162:16: error: \'V3\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:163:12: error: \'V4\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:164:12: error: \'V6\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:170:17: error: \'V5\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:192:21: error: \'n\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:195:21: error: \'nn\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?","clang/test/Parser/recovery.cpp:198:21: error: \'nn\' cannot appear before \'::\' because it is not a class, namespace, or enumeration; did you mean \':\'?"}
["clang/test/SemaOpenCL/vector-conv.cl"]={"clang/test/SemaOpenCL/vector-conv.cl:11:12: error: invalid conversion between ext-vector type \'int4\' (vector of 4 \'int\' values) and \'uint4\' (vector of 4 \'unsigned int\' values)","clang/test/SemaOpenCL/vector-conv.cl:13:14: error: invalid conversion between ext-vector type \'uint3\' (vector of 3 \'unsigned int\' values) and \'uint4\' (vector of 4 \'unsigned int\' values)"}
}
}
},
},
["err_nested_name_spec_non_tag"]={
["err_invalid_conversion_between_matrix_and_type"]={
[c]="err_nested_name_spec_non_tag",
[b]={{nil,w,"err_invalid_conversion_between_matrix_and_type"}},
[d]="type %0 cannot be used prior to \'::\' because it has no members",
[i]={{nil,w,"conversion between matrix type %0 and incompatible type %1 is not allowed"}},
[e]="type A cannot be used prior to \'::\' because it has no members",
[j]={{nil,w,"conversion between matrix type A and incompatible type B is not allowed"}},
[f]=k,
[h]=k,
[g]="type (.*?) cannot be used prior to \'\\:\\:\' because it has no members",
[c]="conversion between matrix type (.*?) and incompatible type (.*?) is not allowed",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,w,m}},
[b]={"333489bba35d",1238195448,"Initial implementation of parsing, semantic analysis, and template","Initial implementation of parsing, semantic analysis, and template\ninstantiation for C++ typename-specifiers such as\n\n  typename T::type\n\nThe parsing of typename-specifiers is relatively easy thanks to\nannotation tokens. When we see the \"typename\", we parse the\ntypename-specifier and produce a typename annotation token. There are\nonly a few places where we need to handle this. We currently parse the\ntypename-specifier form that terminates in an identifier, but not the\nsimple-template-id form, e.g.,\n\n  typename T::template apply<U, V>\n\nParsing of nested-name-specifiers has a similar problem, since at this\npoint we don\'t have any representation of a class template\nspecialization whose template-name is unknown.\n\nSemantic analysis is only partially complete, with some support for\ntemplate instantiation that works for simple examples. \n\nllvm-svn: 67875"},
[g]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095"},
[j]={{cc,961,"bool Sema::ActOnCXXNestedNameSpecifier(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy OpaqueTemplate, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, SourceLocation CCLoc, bool EnteringContext) {\n  // ...\n  // Alias template specializations can produce types which are not valid\n  // nested name specifiers.\n  if (!T->isDependentType() && !T->getAs<TagType>()) {\n    Diag(TemplateNameLoc, diag::err_nested_name_spec_non_tag) << T;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",1635,"NamedDecl *TemplateInstantiator::TransformFirstQualifierInScope(NamedDecl *D, SourceLocation Loc) {\n  // If the first part of the nested-name-specifier was a template type\n  // parameter, instantiate that type parameter down to a tag type.\n  if (TemplateTypeParmDecl *TTPD = dyn_cast_or_null<TemplateTypeParmDecl>(D)) {\n   // ...\n   if (TTP->getDepth() < TemplateArgs.getNumLevels()) {\n     // ...\n      getSema().Diag(Loc, diag::err_nested_name_spec_non_tag) << T;"}},
[d]={{q,8287,"bool Sema::CheckMatrixCast(SourceRange R, QualType DestTy, QualType SrcTy, CastKind &Kind) {\n  if (SrcTy->isMatrixType() && DestTy->isMatrixType()) {\n  // ...\n  } else if (SrcTy->isMatrixType()) {\n    return Diag(R.getBegin(), diag::err_invalid_conversion_between_matrix_and_type) << SrcTy << DestTy << R;"},{q,8303,"bool Sema::CheckMatrixCast(SourceRange R, QualType DestTy, QualType SrcTy, CastKind &Kind) {\n  if (SrcTy->isMatrixType() && DestTy->isMatrixType()) {\n  // ...\n  } else if (SrcTy->isMatrixType()) {\n // ...\n } else if (DestTy->isMatrixType()) {\n   return Diag(R.getBegin(), diag::err_invalid_conversion_between_matrix_and_type) << DestTy << SrcTy << R;"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.noreturn/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.noreturn/p1.cpp:37:42: error: type \'int (*)() __attribute__((noreturn))\' cannot be used prior to \'::\' because it has no members"}
["clang/test/Sema/matrix-cast.c"]={"clang/test/Sema/matrix-cast.c:29:7: error: conversion between matrix type \'ix5x5\' (aka \'int __attribute__((matrix_type(5, 5)))\') and incompatible type \'int\' is not allowed","clang/test/Sema/matrix-cast.c:31:8: error: conversion between matrix type \'ix5x5\' (aka \'int __attribute__((matrix_type(5, 5)))\') and incompatible type \'int\' is not allowed","clang/test/Sema/matrix-cast.c:33:7: error: conversion between matrix type \'ix5x5\' (aka \'int __attribute__((matrix_type(5, 5)))\') and incompatible type \'vec\' (vector of 1 \'int\' value) is not allowed","clang/test/Sema/matrix-cast.c:35:8: error: conversion between matrix type \'ix5x5\' (aka \'int __attribute__((matrix_type(5, 5)))\') and incompatible type \'vec\' (vector of 1 \'int\' value) is not allowed","clang/test/Sema/matrix-cast.c:37:7: error: conversion between matrix type \'sx4x4\' (aka \'short __attribute__((matrix_type(4, 4)))\') and incompatible type \'test_struct *\' (aka \'struct test_struct *\') is not allowed","clang/test/Sema/matrix-cast.c:39:8: error: conversion between matrix type \'sx4x4\' (aka \'short __attribute__((matrix_type(4, 4)))\') and incompatible type \'test_struct *\' (aka \'struct test_struct *\') is not allowed","clang/test/Sema/matrix-cast.c:71:7: error: conversion between matrix type \'signed_int_12x12\' (aka \'int __attribute__((matrix_type(12, 12)))\') and incompatible type \'float\' is not allowed","clang/test/Sema/matrix-cast.c:73:8: error: conversion between matrix type \'signed_int_12x12\' (aka \'int __attribute__((matrix_type(12, 12)))\') and incompatible type \'float\' is not allowed"}
}
}
},
},
["err_nested_non_static_member_use"]={
["err_invalid_conversion_between_matrixes"]={
[c]="err_nested_non_static_member_use",
[b]={{nil,w,"err_invalid_conversion_between_matrixes"}},
[d]="%select{call to non-static member function|use of non-static data member}0 %2 of %1 from nested type %3",
[i]={{nil,w,"conversion between matrix types%diff{ $ and $|}0,1 of different size is not allowed"}},
[e]={{nil,nil,{{"call to non-static member function","use of non-static data member"}," C of B from nested type D"}}},
[j]={{nil,w,{"conversion between matrix types",{" A and B",a}," of different size is not allowed"}}},
[f]=k,
[h]=k,
[g]="(?:call to non\\-static member function|use of non\\-static data member) (.*?) of (.*?) from nested type (.*?)",
[c]="conversion between matrix types(?: (.*?) and (.*?)|) of different size is not allowed",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,w,m}},
[b]={"fa0a1f531f7d",1333588384,"Improve diagnostics for invalid use of non-static members / this:","Improve diagnostics for invalid use of non-static members / this:\n\n* s/nonstatic/non-static/ in the diagnostics, since the latter form outvoted\n the former by 28-2 in our diagnostics.\n* Fix the \"use of member in static member function\" diagnostic to correctly\n  detect this situation inside a block or lambda.\n* Produce a more specific \"invalid use of non-static member\" diagnostic for\n  the case where a nested class member refers to a member of a\n  lexically-surrounding class.\n\nllvm-svn: 154073"},
[g]={"b83b23275b74",1607502387,"Introduce -Wreserved-identifier","Introduce -Wreserved-identifier\n\nWarn when a declaration uses an identifier that doesn\'t obey the reserved\nidentifier rule from C and/or C++.\n\nDifferential Revision: https://reviews.llvm.org/D93095"},
[j]={{Tb,228,"/// Diagnose a reference to a field with no object available.\nstatic void diagnoseInstanceReference(Sema &SemaRef, const CXXScopeSpec &SS, NamedDecl *Rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  if (IsField && InStaticMethod)\n  // ...\n  else if (ContextClass && RepClass && SS.isEmpty() && !InStaticMethod && !RepClass->Equals(ContextClass) && RepClass->Encloses(ContextClass))\n    // ...\n   SemaRef.Diag(Loc, diag::err_nested_non_static_member_use) << IsField << RepClass << nameInfo.getName() << ContextClass << Range;"}},
[d]={{q,8283,"bool Sema::CheckMatrixCast(SourceRange R, QualType DestTy, QualType SrcTy, CastKind &Kind) {\n  if (SrcTy->isMatrixType() && DestTy->isMatrixType()) {\n    if (!areMatrixTypesOfTheSameDimension(SrcTy, DestTy)) {\n     return Diag(R.getBegin(), diag::err_invalid_conversion_between_matrixes) << DestTy << SrcTy << R;"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.res/temp.dep/p3.cpp"]={"clang/test/CXX/temp/temp.res/temp.dep/p3.cpp:60:24: error: call to non-static member function \'f\' of \'A\' from nested type \'D\'"}
["clang/test/Sema/matrix-cast.c"]={"clang/test/Sema/matrix-cast.c:24:8: error: conversion between matrix types \'ix5x5\' (aka \'int __attribute__((matrix_type(5, 5)))\') and \'sx4x4\' (aka \'short __attribute__((matrix_type(4, 4)))\') of different size is not allowed","clang/test/Sema/matrix-cast.c:61:8: error: conversion between matrix types \'double_10x10\' (aka \'double __attribute__((matrix_type(10, 10)))\') and \'float2_8x8\' (aka \'float __attribute__((matrix_type(8, 8)))\') of different size is not allowed","clang/test/Sema/matrix-cast.c:68:8: error: conversion between matrix types \'unsigned_int_10x10\' (aka \'unsigned int __attribute__((matrix_type(10, 10)))\') and \'signed_int_12x12\' (aka \'int __attribute__((matrix_type(12, 12)))\') of different size is not allowed"}
}
}
},
},
["err_nested_pointer_qualifier_mismatch"]={
["err_invalid_conversion_between_vector_and_integer"]={
[c]={{nil,x,"err_nested_pointer_qualifier_mismatch"}},
[b]="err_invalid_conversion_between_vector_and_integer",
[d]={{nil,x,"%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"}},
[i]="invalid conversion between vector type %0 and integer type %1 of different size",
[e]={{nil,x,{{{{"assigning to A from B","assigning to different types"}},{{"passing A to parameter of type B","passing to parameter of different type"}},{{"returning A from a function with result type B","returning from function with different return type"}},{{"converting A to type B","converting between types"}},{{"initializing A with an expression of type B","initializing with expression of different type"}},{{"sending A to parameter of type B","sending to parameter of different type"}},{{"casting A to type B","casting between types"}}}," discards qualifiers in nested pointer types"}}},
[j]="invalid conversion between vector type A and integer type B of different size",
[f]=k,
[h]=k,
[g]="(?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types)) discards qualifiers in nested pointer types",
[c]="invalid conversion between vector type (.*?) and integer type (.*?) of different size",
[h]=a,
[f]=a,
[i]={{nil,x,m}},
[e]=m,
[b]={"6f3de50ca73e",1257666394,"Test commit - minor terminology change to my recent patch suggested by John McCall","Test commit - minor terminology change to my recent patch suggested by John McCall\n\nllvm-svn: 86442"},
[g]={x,1237025389,y,z},
[j]={{W,17640,"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      DiagKind = diag::err_nested_pointer_qualifier_mismatch;"}}
[d]={{"clang/lib/Sema/SemaCast.cpp",2702,"bool Sema::CheckAltivecInitFromScalar(SourceRange R, QualType VecTy, QualType SrcTy) {\n  // ...\n  if (this->getLangOpts().AltiVec && SrcCompatGCC) {\n   this->Diag(R.getBegin(), diag::err_invalid_conversion_between_vector_and_integer) << VecTy << SrcTy << R;"},{q,8308,"bool Sema::CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty, CastKind &Kind) {\n  // ...\n  if (Ty->isVectorType() || Ty->isIntegralType(Context)) {\n   if (!areLaxCompatibleVectorTypes(Ty, VectorTy))\n     return Diag(R.getBegin(), Ty->isVectorType() ? diag::err_invalid_conversion_between_vectors : diag::err_invalid_conversion_between_vector_and_integer) << VectorTy << Ty << R;"}},
},
["err_nested_redefinition"]={
[c]="err_nested_redefinition",
[d]="nested redefinition of %0",
[e]="nested redefinition of A",
[f]=k,
[g]="nested redefinition of (.*?)",
[h]=a,
[i]=m,
[b]={ib,1237025389,fb,gb},
[j]={{o,17384,"/// 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        if (!Invalid) {\n          // ...\n          // Diagnose attempts to redefine a tag.\n          if (TUK == TUK_Definition) {\n            if (NamedDecl *Def = PrevTagDecl->getDefinition()) {\n            // ...\n            } else {\n              // ...\n              if (TD->isBeingDefined()) {\n                Diag(NameLoc, diag::err_nested_redefinition) << Name;"}},
[l]={
[l]={
["clang/test/Sema/nested-redef.c"]={"clang/test/Sema/nested-redef.c:3:10: error: nested redefinition of \'X\'"}
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:37:9: error: invalid conversion between vector type \'int4\' (vector of 4 \'int\' values) and integer type \'int\' of different size"}
}
}
},
},
["err_new_abi_tag_on_redeclaration"]={
["err_invalid_conversion_between_vector_and_scalar"]={
[c]="err_new_abi_tag_on_redeclaration",
[b]="err_invalid_conversion_between_vector_and_scalar",
[d]="\'abi_tag\' %0 missing in original declaration",
[i]="invalid conversion between vector type %0 and scalar type %1",
[e]="\'abi_tag\' A missing in original declaration",
[j]="invalid conversion between vector type A and scalar type B",
[f]=k,
[h]=k,
[g]="\'abi_tag\' (.*?) missing in original declaration",
[c]="invalid conversion between vector type (.*?) and scalar type (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"bf17ecf59a9b",1457537453,"[GCC] PR23529 Sema part of attrbute abi_tag support","[GCC] PR23529 Sema part of attrbute abi_tag support\n\nOriginal patch by Stefan Bühler http://reviews.llvm.org/D12834\n\nDifference between original and this one:\n- fixed all comments in original code review\n- added more tests, all new diagnostics now covered by tests\n- moved abi_tag on re-declaration checks to Sema::mergeDeclAttributes\n  where they actually may work as designed\n- clang-format + other stylistic changes\n\nMangle part will be sent for review as a separate patch.\n\nDifferential Revision: http://reviews.llvm.org/D17567\n\nllvm-svn: 263015"},
[g]={x,1237025389,y,z},
[j]={{o,3257,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  // ...\n  // Re-declaration cannot add abi_tag\'s.\n  if (const auto *NewAbiTagAttr = New->getAttr<AbiTagAttr>()) {\n   if (const auto *OldAbiTagAttr = Old->getAttr<AbiTagAttr>()) {\n     for (const auto &NewTag : NewAbiTagAttr->tags()) {\n        if (!llvm::is_contained(OldAbiTagAttr->tags(), NewTag)) {\n         Diag(NewAbiTagAttr->getLocation(), diag::err_new_abi_tag_on_redeclaration) << NewTag;"}},
[d]={{q,8362,"bool Sema::CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty, CastKind &Kind) {\n // ...\n if (Ty->isVectorType() || Ty->isIntegralType(Context)) {\n  // ...\n } else\n    return Diag(R.getBegin(), diag::err_invalid_conversion_between_vector_and_scalar) << VectorTy << Ty << R;"},{q,8418,"ExprResult Sema::CheckExtVectorCast(SourceRange R, QualType DestTy, Expr *CastExpr, CastKind &Kind) {\n  // ...\n  // All non-pointer scalars can be cast to ExtVector type. The appropriate\n  // conversion will take place first from scalar to elt type, and then\n // splat from elt type to vector.\n if (SrcTy->isPointerType())\n   return Diag(R.getBegin(), diag::err_invalid_conversion_between_vector_and_scalar) << DestTy << SrcTy << R;"}},
[l]={
[l]={
["clang/test/SemaCXX/attr-abi-tag-syntax.cpp"]={"clang/test/SemaCXX/attr-abi-tag-syntax.cpp:27:16: error: \'abi_tag\' C missing in original declaration"}
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:40:13: error: invalid conversion between vector type \'int4\' (vector of 4 \'int\' values) and scalar type \'int *\'"}
}
}
},
},
["err_new_array_init_args"]={
["err_invalid_conversion_between_vectors"]={
[c]="err_new_array_init_args",
[b]="err_invalid_conversion_between_vectors",
[d]="array \'new\' cannot have initialization arguments",
[i]="invalid conversion between vector type%diff{ $ and $|}0,1 of different size",
[e]="array \'new\' cannot have initialization arguments",
[j]={{nil,nil,{"invalid conversion between vector type",{" A and B",a}," of different size"}}},
[f]=k,
[h]=k,
[g]="array \'new\' cannot have initialization arguments",
[c]="invalid conversion between vector type(?: (.*?) and (.*?)|) of different size",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"c6bb0e117f98",1272901523,"The array form of \'new\' can never have initializers.","The array form of \'new\' can never have initializers.\n\nllvm-svn: 102917"},
[g]={x,1237025389,y,z},
[j]={{tb,2377,"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  // Array \'new\' can\'t have any initializers except empty parentheses.\n // Initializer lists are also allowed, in C++11. Rely on the parser for the\n  // dialect distinction.\n  if (ArraySize && !isLegalArrayNewInitializer(initStyle, Initializer)) {\n   // ...\n    Diag(StartLoc, diag::err_new_array_init_args) << InitRange;"}},
[d]={{q,8304,"bool Sema::CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty, CastKind &Kind) {\n  // ...\n  if (Ty->isVectorType() || Ty->isIntegralType(Context)) {\n   if (!areLaxCompatibleVectorTypes(Ty, VectorTy))\n     return Diag(R.getBegin(), Ty->isVectorType() ? diag::err_invalid_conversion_between_vectors : diag::err_invalid_conversion_between_vector_and_integer) << VectorTy << Ty << R;"}},
[l]={
[l]={
["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:343:9: error: array \'new\' cannot have initialization arguments","clang/test/SemaCXX/new-delete.cpp:346:9: error: array \'new\' cannot have initialization arguments","clang/test/SemaCXX/new-delete.cpp:351:9: error: array \'new\' cannot have initialization arguments","clang/test/SemaCXX/new-delete.cpp:356:9: error: array \'new\' cannot have initialization arguments","clang/test/SemaCXX/new-delete.cpp:561:22: error: array \'new\' cannot have initialization arguments"}
["clang/test/Sema/fp16vec-sema.c"]={"clang/test/Sema/fp16vec-sema.c:38:9: error: invalid conversion between vector type \'half4\' (vector of 4 \'__fp16\' values) and \'float4\' (vector of 4 \'float\' values) of different size","clang/test/Sema/fp16vec-sema.c:39:9: error: invalid conversion between vector type \'float4\' (vector of 4 \'float\' values) and \'half4\' (vector of 4 \'__fp16\' values) of different size"}
}
}
},
},
["err_new_array_nonconst"]={
["err_invalid_cpu_is"]={
[c]="err_new_array_nonconst",
[b]={{nil,J,"err_invalid_cpu_is"}},
[d]="only the first dimension of an allocated array may have dynamic size",
[i]={{nil,J,"invalid cpu name for builtin"}},
[e]="only the first dimension of an allocated array may have dynamic size",
[j]={{nil,J,"invalid cpu name for builtin"}},
[f]=k,
[h]=k,
[g]="only the first dimension of an allocated array may have dynamic size",
[c]="invalid cpu name for builtin",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,J,m}},
[b]={ib,1237025389,fb,gb},
[g]={"699ae0c173bd",1502396910,"[X86] Implement __builtin_cpu_is","[X86] Implement __builtin_cpu_is\n\nThis patch adds support for __builtin_cpu_is. I\'ve tried to match the strings supported to the latest version of gcc.\n\nDifferential Revision: https://reviews.llvm.org/D35449\n\nllvm-svn: 310657"},
[j]={{tb,1899,"/// Parsed a C++ \'new\' expression (C++ 5.3.4).\n///\n/// E.g.:\n/// @code new (memory) int[size][4] @endcode\n/// or\n/// @code ::new Foo(23, \"hello\") @endcode\n///\n/// \\param StartLoc The first location of the expression.\n/// \\param UseGlobal True if \'new\' was prefixed with \'::\'.\n/// \\param PlacementLParen Opening paren of the placement arguments.\n/// \\param PlacementArgs Placement new arguments.\n/// \\param PlacementRParen Closing paren of the placement arguments.\n/// \\param TypeIdParens If the type is in parens, the source range.\n/// \\param D The type to be allocated, as well as array dimensions.\n/// \\param Initializer The initializing expression or initializer-list, or null\n///   if there is none.\nExprResult Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, Declarator &D, Expr *Initializer) {\n  // ...\n  // Every dimension shall be of constant size.\n  if (ArraySize) {\n    for (unsigned I = 0, N = D.getNumTypeObjects(); I < N; ++I) {\n     // ...\n      if (Expr *NumElts = (Expr *)Array.NumElts) {\n        if (!NumElts->isTypeDependent() && !NumElts->isValueDependent()) {\n          // FIXME: GCC permits constant folding here. We should either do so consistently\n          // or not do so at all, rather than changing behavior in C++14 onwards.\n          if (getLangOpts().CPlusPlus14) {\n          // ...\n          } else {\n            Array.NumElts = VerifyIntegerConstantExpression(NumElts, nullptr, diag::err_new_array_nonconst, AllowFold).get();"}},
[d]={{K,5493,"/// SemaBuiltinCpuIs - Handle __builtin_cpu_is(char *).\n/// This checks that the target supports __builtin_cpu_is and\n/// that the string argument is constant and valid.\nstatic bool SemaBuiltinCpuIs(Sema &S, const TargetInfo &TI, CallExpr *TheCall) {\n  // ...\n  if (!TI.validateCpuIs(Feature))\n   return S.Diag(TheCall->getBeginLoc(), diag::err_invalid_cpu_is) << Arg->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:99:20: error: only the first dimension of an allocated array may have dynamic size","clang/test/SemaCXX/new-delete.cpp:100:21: error: only the first dimension of an allocated array may have dynamic size"}
["clang/test/Sema/check-aux-builtins.c"]={"clang/test/Sema/check-aux-builtins.c:5:3: error: invalid cpu name for builtin"}
}
}
},
},
["err_new_array_of_auto"]={
["err_invalid_cpu_specific_dispatch_value"]={
[c]="err_new_array_of_auto",
[b]={{nil,A,"err_invalid_cpu_specific_dispatch_value"}},
[d]="cannot allocate array of \'auto\'",
[i]={{nil,A,"invalid option \'%0\' for %select{cpu_specific|cpu_dispatch}1"}},
[e]="cannot allocate array of \'auto\'",
[j]={{nil,A,{"invalid option \'A\' for ",{"cpu_specific","cpu_dispatch"}}}},
[f]=k,
[h]=k,
[g]="cannot allocate array of \'auto\'",
[c]="invalid option \'(.*?)\' for (?:cpu_specific|cpu_dispatch)",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,A,m}},
[b]={"30482bc78659",1298171975,"Implement the C++0x deduced \'auto\' feature.","Implement the C++0x deduced \'auto\' feature.\n\nThis fixes PR 8738, 9060 and 9132.\n\nllvm-svn: 126069"},
[g]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning\n\nAs documented here: https://software.intel.com/en-us/node/682969 and\nhttps://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning\nis an ICC feature that provides for function multiversioning.\n\nThis feature is implemented with two attributes: First, cpu_specific,\nwhich specifies the individual function versions. Second, cpu_dispatch,\nwhich specifies the location of the resolver function and the list of\nresolvable functions.\n\nThis is valuable since it provides a mechanism where the resolver\'s TU\ncan be specified in one location, and the individual implementions\neach in their own translation units.\n\nThe goal of this patch is to be source-compatible with ICC, so this\nimplementation diverges from the ICC implementation in a few ways:\n1- Linux x86/64 only: This implementation uses ifuncs in order to\nproperly dispatch functions. This is is a valuable performance benefit\nover the ICC implementation. A future patch will be provided to enable\nthis feature on Windows, but it will obviously more closely fit ICC\'s\nimplementation.\n2- CPU Identification functions: ICC uses a set of custom functions to identify\nthe feature list of the host processor. This patch uses the cpu_supports\nfunctionality in order to better align with \'target\' multiversioning.\n1- cpu_dispatch function def/decl: ICC\'s cpu_dispatch requires that the function\nmarked cpu_dispatch be an empty definition. This patch supports that as well,\nhowever declarations are also permitted, since the linker will solve the\nissue of multiple emissions.\n\nDifferential Revision: https://reviews.llvm.org/D47474\n\nllvm-svn: 337552"},
[j]={{tb,1863,"/// Parsed a C++ \'new\' expression (C++ 5.3.4).\n///\n/// E.g.:\n/// @code new (memory) int[size][4] @endcode\n/// or\n/// @code ::new Foo(23, \"hello\") @endcode\n///\n/// \\param StartLoc The first location of the expression.\n/// \\param UseGlobal True if \'new\' was prefixed with \'::\'.\n/// \\param PlacementLParen Opening paren of the placement arguments.\n/// \\param PlacementArgs Placement new arguments.\n/// \\param PlacementRParen Closing paren of the placement arguments.\n/// \\param TypeIdParens If the type is in parens, the source range.\n/// \\param D The type to be allocated, as well as array dimensions.\n/// \\param Initializer The initializing expression or initializer-list, or null\n///  if there is none.\nExprResult Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, Declarator &D, Expr *Initializer) {\n  // ...\n // If the specified type is an array, unwrap it and save the expression.\n  if (D.getNumTypeObjects() > 0 && D.getTypeObject(0).Kind == DeclaratorChunk::Array) {\n    // ...\n    if (D.getDeclSpec().hasAutoTypeSpec())\n      return ExprError(Diag(Chunk.Loc, diag::err_new_array_of_auto) << D.getSourceRange());"}}
[d]={{u,2109,"static void handleCPUSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned ArgNo = 0; ArgNo < getNumAttributeArgs(AL); ++ArgNo) {\n    // ...\n    if (!S.Context.getTargetInfo().validateCPUSpecificCPUDispatch(CPUName)) {\n      S.Diag(CPUArg->Loc, diag::err_invalid_cpu_specific_dispatch_value) << CPUName << (AL.getKind() == ParsedAttr::AT_CPUDispatch);"}},
},
["err_new_array_size_unknown_from_init"]={
[c]={{nil,z,"err_new_array_size_unknown_from_init"}},
[d]={{nil,z,"cannot determine allocated array size from initializer"}},
[e]={{nil,z,"cannot determine allocated array size from initializer"}},
[f]=k,
[g]="cannot determine allocated array size from initializer",
[h]=a,
[i]={{nil,z,m}},
[b]={"b9fb121a62de",1557114435,"[c++20] Implement P1009R2: allow omitting the array bound in an array","[c++20] Implement P1009R2: allow omitting the array bound in an array\nnew expression.\n\nThis was voted into C++20 as a defect report resolution, so we\nretroactively apply it to all prior language modes (though it can never\nactually be used before C++11 mode).\n\nllvm-svn: 360006"},
[j]={{tb,2426,"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 we can perform the initialization, and we\'ve not already done so,\n  // do it now.\n  if (!AllocType->isDependentType() && !Expr::hasAnyTypeDependentArguments(Exprs)) {\n    // ...\n    if (ArraySize && !*ArraySize) {\n      // ...\n      if (CAT) {\n      // ...\n      } else {\n        Diag(TypeRange.getEnd(), diag::err_new_array_size_unknown_from_init) << Initializer->getSourceRange();"}},
[l]={
[l]={
["clang/test/AST/issue53742.cpp"]={"clang/test/AST/issue53742.cpp:11:14: error: cannot determine allocated array size from initializer"}
["clang/test/Sema/attr-cpuspecific.c"]={"clang/test/Sema/attr-cpuspecific.c:106:33: error: invalid option \'INVALID\' for cpu_specific"}
}
}
},
},
["err_new_incomplete_or_sizeless_type"]={
["err_invalid_cpu_supports"]={
[c]={{nil,x,"err_new_incomplete_or_sizeless_type"}},
[b]="err_invalid_cpu_supports",
[d]={{nil,x,"allocation of %select{incomplete|sizeless}0 type %1"}},
[i]="invalid cpu feature string for builtin",
[e]={{nil,x,{"allocation of ",{"incomplete","sizeless"}," type B"}}},
[j]="invalid cpu feature string for builtin",
[f]=k,
[h]=k,
[g]="allocation of (?:incomplete|sizeless) type (.*?)",
[c]="invalid cpu feature string for builtin",
[h]=a,
[f]=a,
[i]={{nil,x,m}},
[e]=m,
[b]={Hb,1576908663,Gb,Fb},
[g]={"d983270976d2",1435611605,"Add support for the x86 builtin __builtin_cpu_supports.","Add support for the x86 builtin __builtin_cpu_supports.\n\nThis matches the implementation of the gcc support for the same\nfeature, including checking the values set up by libgcc at runtime.\nThe structure looks like this:\n\n  unsigned int __cpu_vendor;\n  unsigned int __cpu_type;\n  unsigned int __cpu_subtype;\n  unsigned int __cpu_features[1];\n\nwith a set of enums to match various fields that are field out after\nparsing the output of the cpuid instruction.\nThis also adds a set of errors checking for valid input (and cpu).\n\ncompiler-rt support for this and the other builtins in this family\n(__builtin_cpu_init and __builtin_cpu_is) are forthcoming.\n\nllvm-svn: 240994"},
[j]={{tb,2465,"/// 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  // ...\n  else if (!AllocType->isDependentType() && RequireCompleteSizedType(Loc, AllocType, diag::err_new_incomplete_or_sizeless_type, R))"}},
[d]={{K,5473,"/// SemaBuiltinCpuSupports - Handle __builtin_cpu_supports(char *).\n/// This checks that the target supports __builtin_cpu_supports and\n/// that the string argument is constant and valid.\nstatic bool SemaBuiltinCpuSupports(Sema &S, const TargetInfo &TI, CallExpr *TheCall) {\n  // ...\n  if (!TI.validateCpuSupports(Feature))\n    return S.Diag(TheCall->getBeginLoc(), diag::err_invalid_cpu_supports) << Arg->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/auto-subst-failure.cpp"]={"clang/test/SemaCXX/auto-subst-failure.cpp:12:13: error: allocation of incomplete type \'void\'"}
["clang/test/Sema/builtin-cpu-supports.c"]={"clang/test/Sema/builtin-cpu-supports.c:10:7: error: invalid cpu feature string for builtin"}
}
}
},
},
["err_no_accessor_for_property"]={
["err_invalid_cxx_abi"]={
[c]="err_no_accessor_for_property",
[b]={{nil,w,"err_invalid_cxx_abi"}},
[d]="no %select{getter|setter}0 defined for property %1",
[i]={{nil,B,"invalid C++ ABI name \'%0\'"},{w,w,"Invalid C++ ABI name \'%0\'"}},
[e]={{nil,nil,{vb,{"getter","setter"}," defined for property B"}}},
[j]={{nil,B,"invalid C++ ABI name \'A\'"},{w,w,"Invalid C++ ABI name \'A\'"}},
[f]=k,
[h]=k,
[g]="no (?:getter|setter) defined for property (.*?)",
[c]="invalid C\\+\\+ ABI name \'(.*?)\'",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,w,v}},
[b]={"213cf41a5874",1388075704,"s/getter_setter/accessor No functional changes intended.","s/getter_setter/accessor No functional changes intended.\n\nThanks to Alp Toker for the naming suggestion!\n\nllvm-svn: 198052"},
[g]={"683b308c07bf",1597194187,"[clang] Add -fc++-abi= flag for specifying which C++ ABI to use","[clang] Add -fc++-abi= flag for specifying which C++ ABI to use\n\nThis implements the flag proposed in RFC http://lists.llvm.org/pipermail/cfe-dev/2020-August/066437.html.\n\nThe goal is to add a way to override the default target C++ ABI through\na compiler flag. This makes it easier to test and transition between different\nC++ ABIs through compile flags rather than build flags.\n\nIn this patch:\n- Store `-fc++-abi=` in a LangOpt. This isn\'t stored in a\n  CodeGenOpt because there are instances outside of codegen where Clang\n  needs to know what the ABI is (particularly through\n ASTContext::createCXXABI), and we should be able to override the\n  target default if the flag is provided at that point.\n- Expose the existing ABIs in TargetCXXABI as values that can be passed\n  through this flag.\n  - Create a .def file for these ABIs to make it easier to check flag\n    values.\n  - Add an error for diagnosing bad ABI flag values.\n\nDifferential Revision: https://reviews.llvm.org/D85802"},
[j]={{P,1471,"ExprResult MSPropertyOpBuilder::buildGet() {\n  if (!RefExpr->getPropertyDecl()->hasGetter()) {\n   S.Diag(RefExpr->getMemberLoc(), diag::err_no_accessor_for_property) << 0 /* getter */ << RefExpr->getPropertyDecl();"},{P,1500,"ExprResult MSPropertyOpBuilder::buildSet(Expr *op, SourceLocation sl, bool captureSetValueAsResult) {\n  if (!RefExpr->getPropertyDecl()->hasSetter()) {\n    S.Diag(RefExpr->getMemberLoc(), diag::err_no_accessor_for_property) << 1 /* setter */ << RefExpr->getPropertyDecl();"}},
[d]={{jc,4022,"#include \"clang/Driver/Options.inc\"\// ...\n  if (!CXXABI.empty()) {\n    if (!TargetCXXABI::isABI(CXXABI)) {\n      Diags.Report(diag::err_invalid_cxx_abi) << CXXABI;"}}
[l]={
["clang/test/SemaCUDA/cuda-builtin-vars.cu"]={"clang/test/SemaCUDA/cuda-builtin-vars.cu:9:13: error: no setter defined for property \'x\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:11:13: error: no setter defined for property \'y\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:13:13: error: no setter defined for property \'z\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:16:12: error: no setter defined for property \'x\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:18:12: error: no setter defined for property \'y\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:20:12: error: no setter defined for property \'z\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:23:12: error: no setter defined for property \'x\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:25:12: error: no setter defined for property \'y\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:27:12: error: no setter defined for property \'z\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:30:11: error: no setter defined for property \'x\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:32:11: error: no setter defined for property \'y\'","clang/test/SemaCUDA/cuda-builtin-vars.cu:34:11: error: no setter defined for property \'z\'"}
}
},
},
["err_no_base_classes"]={
["err_invalid_decl_spec_combination"]={
[c]="err_no_base_classes",
[b]="err_invalid_decl_spec_combination",
[d]="invalid use of \'__super\', %0 has no base classes",
[i]="cannot combine with previous \'%0\' declaration specifier",
[e]="invalid use of \'__super\', A has no base classes",
[j]="cannot combine with previous \'A\' declaration specifier",
[f]=k,
[h]=k,
[g]="invalid use of \'__super\', (.*?) has no base classes",
[c]="cannot combine with previous \'(.*?)\' declaration specifier",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236).","-ms-extensions: Implement __super scope specifier (PR13236).\n\nWe build a NestedNameSpecifier that records the CXXRecordDecl in which\n__super appeared. Name lookup is performed in all base classes of the\nrecorded CXXRecordDecl. Use of __super is allowed only inside class and\nmember function scope.\n\nllvm-svn: 218484"},
[g]={S,1236199783,R,Q},
[j]={{cc,337,"bool Sema::ActOnSuperScopeSpecifier(SourceLocation SuperLoc, SourceLocation ColonColonLoc, CXXScopeSpec &SS) {\n  // ...\n  if (!RD) {\n  // ...\n  } else if (RD->getNumBases() == 0) {\n    Diag(SuperLoc, diag::err_no_base_classes) << RD->getName();"}},
[d]={{D,480,"template <class T> static bool BadSpecifier(T TNew, T TPrev, const char *&PrevSpec, unsigned &DiagID, bool IsExtension = true) {\n  // ...\n  if (TNew != TPrev)\n    DiagID = diag::err_invalid_decl_spec_combination;"},{D,759,"bool DeclSpec::SetTypeSpecType(TST T, SourceLocation TagKwLoc, SourceLocation TagNameLoc, const char *&PrevSpec, unsigned &DiagID, ParsedType Rep, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType != TST_unspecified) {\n    // ...\n    DiagID = diag::err_invalid_decl_spec_combination;"},{D,781,"bool DeclSpec::SetTypeSpecType(TST T, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, Expr *Rep, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType != TST_unspecified) {\n   // ...\n    DiagID = diag::err_invalid_decl_spec_combination;"},{D,813,"bool DeclSpec::SetTypeSpecType(TST T, SourceLocation TagKwLoc, SourceLocation TagNameLoc, const char *&PrevSpec, unsigned &DiagID, Decl *Rep, bool Owned, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType != TST_unspecified) {\n    // ...\n    DiagID = diag::err_invalid_decl_spec_combination;"},{D,843,"bool DeclSpec::SetTypeSpecType(TST T, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy) {\n  // ...\n if (TypeSpecType != TST_unspecified) {\n    // ...\n    DiagID = diag::err_invalid_decl_spec_combination;"},{D,892,"bool DeclSpec::SetTypePipe(bool isPipe, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType != TST_unspecified) {\n    // ...\n    DiagID = diag::err_invalid_decl_spec_combination;"},{D,953,"bool DeclSpec::SetBitIntType(SourceLocation KWLoc, Expr *BitsExpr, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType != TST_unspecified) {\n    // ...\n    DiagID = diag::err_invalid_decl_spec_combination;"},{D,1341,"/// 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  // C11 6.7.1/3, C++11 [dcl.stc]p1, GNU TLS: __thread, thread_local and\n  // _Thread_local can only appear with the \'static\' and \'extern\' storage class\n  // specifiers. We also allow __private_extern__ as an extension.\n  if (ThreadStorageClassSpec != TSCS_unspecified) {\n    // ...\n    default:\n      if (S.getSourceManager().isBeforeInTranslationUnit(getThreadStorageClassSpecLoc(), getStorageClassSpecLoc()))\n        S.Diag(getStorageClassSpecLoc(), diag::err_invalid_decl_spec_combination) << DeclSpec::getSpecifierName(getThreadStorageClassSpec()) << SourceRange(getThreadStorageClassSpecLoc());"},{D,1346,"/// 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  // C11 6.7.1/3, C++11 [dcl.stc]p1, GNU TLS: __thread, thread_local and\n  // _Thread_local can only appear with the \'static\' and \'extern\' storage class\n  // specifiers. We also allow __private_extern__ as an extension.\n  if (ThreadStorageClassSpec != TSCS_unspecified) {\n    // ...\n    default:\n      if (S.getSourceManager().isBeforeInTranslationUnit(getThreadStorageClassSpecLoc(), getStorageClassSpecLoc()))\n      // ...\n      else\n        S.Diag(getThreadStorageClassSpecLoc(), diag::err_invalid_decl_spec_combination) << DeclSpec::getSpecifierName(getStorageClassSpec()) << SourceRange(getStorageClassSpecLoc());"}},
[l]={
[l]={
["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:5:3: error: invalid use of \'__super\', Errors has no base classes"}
["clang/test/Parser/check-syntax-1.m"]={"clang/test/Parser/check-syntax-1.m:3:5: error: cannot combine with previous \'int\' declaration specifier"}
}
}
},
},
["err_no_declarators"]={
["err_invalid_decl_specifier_in_nontype_parm"]={
[c]={{nil,D,"err_no_declarators"}},
[b]={{nil,J,"err_invalid_decl_specifier_in_nontype_parm"}},
[d]={{nil,D,"declaration does not declare anything"}},
[i]={{nil,J,"invalid declaration specifier in template non-type parameter"}},
[e]={{nil,D,"declaration does not declare anything"}},
[j]={{nil,J,"invalid declaration specifier in template non-type parameter"}},
[f]=k,
[h]=k,
[g]="declaration does not declare anything",
[c]="invalid declaration specifier in template non\\-type parameter",
[h]=a,
[f]=a,
[i]={{nil,D,m}},
[e]={{nil,J,m}},
[b]={J,1236199783,H,I},
[g]={"a223d1c856db",1513914655,"Diagnose the various invalid decl-specifiers on nontype template parameters.","Diagnose the various invalid decl-specifiers on nontype template parameters.\n\nThe standard correctly forbids various decl-specifiers that dont make sense on non-type template parameters - such as the extern in:\n    template<extern int> struct X;\n\nThis patch implements those restrictions (in a fashion similar to the corresponding checks on function parameters within ActOnParamDeclarator).\n\nCredit goes to miyuki (Mikhail Maltsev) for drawing attention to this issue,  authoring the initial versions of this patch, and supporting the effort to re-engineer it slightly. Thank you!\n\nFor details of how this patch evolved please see: https://reviews.llvm.org/D40705\n\nllvm-svn: 321339"},
[j]={{o,5265,"/// 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();"}},
[d]={{kb,1514,"NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, unsigned Depth, unsigned Position, SourceLocation EqualLoc, Expr *Default) {\n  // ...\n  // Check that we have valid decl-specifiers specified.\n  auto CheckValidDeclSpecifiers = [this, &D] {\n   // ...\n   auto EmitDiag = [this](SourceLocation Loc) { Diag(Loc, diag::err_invalid_decl_specifier_in_nontype_parm) << FixItHint::CreateRemoval(Loc); };"}},
[l]={
[l]={
["clang/test/SemaCXX/PR16677.cpp"]={"clang/test/SemaCXX/PR16677.cpp:13:2: error: declaration does not declare anything"}
["clang/test/CXX/temp/temp.param/p2.cpp"]={"clang/test/CXX/temp/temp.param/p2.cpp:20:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:21:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:22:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:22:17: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:23:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:24:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:25:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:26:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:27:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:28:10: error: invalid declaration specifier in template non-type parameter","clang/test/CXX/temp/temp.param/p2.cpp:29:10: error: invalid declaration specifier in template non-type parameter"}
}
}
},
},
["err_no_dynamic_cast_with_fno_rtti"]={
["err_invalid_declaration_in_hlsl_buffer"]={
[c]="err_no_dynamic_cast_with_fno_rtti",
[b]={{nil,n,"err_invalid_declaration_in_hlsl_buffer"}},
[d]={{nil,q,"use of dynamic_cast requires -frtti"},{t,nil,"cannot use dynamic_cast with -fno-rtti"}},
[i]={{nil,n,"invalid declaration inside %select{tbuffer|cbuffer}0"}},
[e]={{nil,q,"use of dynamic_cast requires -frtti"},{t,nil,"cannot use dynamic_cast with -fno-rtti"}},
[j]={{nil,n,{"invalid declaration inside ",{"tbuffer","cbuffer"}}}},
[f]=k,
[h]=k,
[g]="use of dynamic_cast requires \\-frtti",
[c]="invalid declaration inside (?:tbuffer|cbuffer)",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,n,v}},
[b]={"cb6f943ada4c",1375345712,"Check dynamic_cast is not used with -fno-rtti, unless it is a noop or can be resolved statically.","Check dynamic_cast is not used with -fno-rtti, unless it is a noop or can be resolved statically.\n\nllvm-svn: 187564"},
[g]={"782ac2182c2b",1657907157,"[HLSL] Support cbuffer/tbuffer for hlsl.","[HLSL] Support cbuffer/tbuffer for hlsl.\n\nThis is first part for support cbuffer/tbuffer.\n\nThe format for cbuffer/tbuffer is\nBufferType [Name] [: register(b#)] { VariableDeclaration [: packoffset(c#.xyzw)]; ... };\n\nMore details at https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-constants\n\nNew keyword \'cbuffer\' and \'tbuffer\' are added.\nNew AST node HLSLBufferDecl is added.\nBuild AST for simple cbuffer/tbuffer without attribute support.\n\nThe special thing is variables declared inside cbuffer is exposed into global scope.\nSo isTransparentContext should return true for HLSLBuffer.\n\nReviewed By: aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D129883"},
[j]={{"clang/lib/Sema/SemaCast.cpp",922,"/// CheckDynamicCast - Check that a dynamic_cast\\<DestType\\>(SrcExpr) is valid.\n/// Refer to C++ 5.2.7 for details. Dynamic casts are used mostly for runtime-\n/// checked downcasts in class hierarchies.\nvoid CastOperation::CheckDynamicCast() {\n // ...\n // dynamic_cast is not available with -fno-rtti.\n  // As an exception, dynamic_cast to void* is available because it doesn\'t\n  // use RTTI.\n  if (!Self.getLangOpts().RTTI && !DestPointee->isVoidType()) {\n    Self.Diag(OpRange.getBegin(), diag::err_no_dynamic_cast_with_fno_rtti);"}},
[d]={{"clang/lib/Parse/ParseHLSL.cpp",38,"static bool validateDeclsInsideHLSLBuffer(Parser::DeclGroupPtrTy DG, SourceLocation BufferLoc, bool IsCBuffer, Parser &P) {\n // ...\n // Only allow function, variable, record decls inside HLSLBuffer.\n  for (DeclGroupRef::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {\n   // ...\n   // FIXME: support nested HLSLBuffer and namespace inside HLSLBuffer.\n    if (isa<HLSLBufferDecl, NamespaceDecl>(D)) {\n      P.Diag(D->getLocation(), diag::err_invalid_declaration_in_hlsl_buffer) << IsCBuffer;"},{"clang/lib/Parse/ParseHLSL.cpp",45,"static bool validateDeclsInsideHLSLBuffer(Parser::DeclGroupPtrTy DG, SourceLocation BufferLoc, bool IsCBuffer, Parser &P) {\n  // ...\n  // Only allow function, variable, record decls inside HLSLBuffer.\n  for (DeclGroupRef::iterator I = Decls.begin(), E = Decls.end(); I != E; ++I) {\n    // ...\n    P.Diag(D->getLocation(), diag::err_invalid_declaration_in_hlsl_buffer) << IsCBuffer;"}},
[l]={
[l]={
["clang/test/SemaCXX/no-rtti.cpp"]={"clang/test/SemaCXX/no-rtti.cpp:23:10: error: use of dynamic_cast requires -frtti"}
["clang/test/ParserHLSL/cb_error.hlsl"]={"clang/test/ParserHLSL/cb_error.hlsl:35:13: error: invalid declaration inside cbuffer","clang/test/ParserHLSL/cb_error.hlsl:41:11: error: invalid declaration inside cbuffer"}
}
}
},
},
["err_no_external_assembler"]={
["err_invalid_declarator_global_scope"]={
[c]="err_no_external_assembler",
[b]="err_invalid_declarator_global_scope",
[d]="there is no external assembler that can be used on this platform",
[i]="definition or redeclaration of %0 cannot name the global scope",
[e]="there is no external assembler that can be used on this platform",
[j]="definition or redeclaration of A cannot name the global scope",
[f]=k,
[h]=k,
[g]="there is no external assembler that can be used on this platform",
[c]="definition or redeclaration of (.*?) cannot name the global scope",
[h]=a,
[f]=a,
[i]=w,
[e]=m,
[b]={"c8d4f0fa1d27",1385108866,"Tidy up the no-external-assembler diag","Tidy up the no-external-assembler diag\n\nDiags aren\'t usually in the first person, and \'windows\' isn\'t the correct\nproduct spelling to use in prose. Sidestep issues completely by making this\nerror message platform-neutral.\n\nllvm-svn: 195422"},
[g]={x,1237025389,y,z},
[j]={{"clang/lib/Driver/ToolChains/MSVC.cpp",463,"Tool *MSVCToolChain::buildAssembler() const {\n // ...\n getDriver().Diag(clang::diag::err_no_external_assembler);"},{"clang/lib/Driver/ToolChains/PS4CPU.cpp",333,"Tool *toolchains::PS5CPU::buildAssembler() const {\n // ...\n getDriver().Diag(clang::diag::err_no_external_assembler);"}}
[d]={{p,6194,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // Check whether the qualifying scope encloses the scope of the original\n  // declaration. For a template-id, we perform the checks in\n  // CheckTemplateSpecializationScope.\n  if (!Cur->Encloses(DC) && !IsTemplateId) {\n    if (Cur->isRecord())\n    // ...\n    else if (isa<TranslationUnitDecl>(DC))\n      Diag(Loc, diag::err_invalid_declarator_global_scope) << Name << SS.getRange();"}},
},
["err_no_matching_local_friend"]={
[c]="err_no_matching_local_friend",
[d]="no matching function found in local scope",
[e]="no matching function found in local scope",
[f]=k,
[g]="no matching function found in local scope",
[h]=a,
[i]=m,
[b]={"f7cfb2212c65",1286948715,"Support friend function declarations in local classes correctly.","Support friend function declarations in local classes correctly.\nFixes a crash and diagnoses the error condition of an unqualified\nfriend which doesn\'t resolve to something.  I\'m still not certain how\nthis is useful.\n\nllvm-svn: 116393"},
[j]={{o,8956,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  // ...\n  unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"}},
[l]={
[l]={
["clang/test/CXX/class.access/class.friend/p11.cpp"]={"clang/test/CXX/class.access/class.friend/p11.cpp:16:19: error: no matching function found in local scope","clang/test/CXX/class.access/class.friend/p11.cpp:36:21: error: no matching function found in local scope","clang/test/CXX/class.access/class.friend/p11.cpp:89:23: error: no matching function found in local scope"}
["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:160:10: error: definition or redeclaration of \'global_func\' cannot name the global scope"}
}
}
},
},
["err_no_matching_local_friend_suggest"]={
["err_invalid_declarator_in_block"]={
[c]="err_no_matching_local_friend_suggest",
[b]="err_invalid_declarator_in_block",
[d]="no matching function %0 found in local scope; did you mean %3?",
[i]="definition or redeclaration of %0 not allowed inside a block",
[e]="no matching function A found in local scope; did you mean D?",
[j]="definition or redeclaration of A not allowed inside a block",
[f]=k,
[h]=k,
[g]="no matching function (.*?) found in local scope; did you mean (.*?)\\?",
[c]="definition or redeclaration of (.*?) not allowed inside a block",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"fd81a350e262",1313691552,"Rework DiagnoseInvalidRedeclaration to add the ability to correct typos when","Rework DiagnoseInvalidRedeclaration to add the ability to correct typos when\ndiagnosing invalid function redeclarations.\n\nllvm-svn: 137966"},
[g]={"e2358c1debe9",1376344441,"Fix crash w/BlockDecl and invalid qualified decl.","Fix crash w/BlockDecl and invalid qualified decl.\n\nI\'m not really satisfied with the ad-hoc nature of\nSema::diagnoseQualifiedDeclaration, but I\'m not sure how to fix it.\n\nFixes <rdar://problem/14639501>.\n\nllvm-svn: 188208"},
[j]={{o,9041,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  // ...\n  if (!Prev.empty()) {\n // ...\n } else if ((Correction = SemaRef.CorrectTypo(Prev.getLookupNameInfo(), Prev.getLookupKind(), S, &ExtraArgs.D.getCXXScopeSpec(), CCC, Sema::CTK_ErrorRecovery, IsLocalFriend ? nullptr : NewDC))) {\n    // ...\n    if (Result) {\n     // ...\n      SemaRef.diagnoseTypo(Correction, SemaRef.PDiag(IsLocalFriend ? diag::err_no_matching_local_friend_suggest : diag::err_member_decl_does_not_match_suggest) << Name << NewDC << IsDefinition);"}},
[d]={{p,6200,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // Check whether the qualifying scope encloses the scope of the original\n  // declaration. For a template-id, we perform the checks in\n  // CheckTemplateSpecializationScope.\n  if (!Cur->Encloses(DC) && !IsTemplateId) {\n   if (Cur->isRecord())\n    // ...\n   else if (isa<TranslationUnitDecl>(DC))\n    // ...\n    else if (isa<FunctionDecl>(Cur))\n   // ...\n    else if (isa<BlockDecl>(Cur))\n      Diag(Loc, diag::err_invalid_declarator_in_block) << Name << SS.getRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/function-redecl.cpp"]={"clang/test/SemaCXX/function-redecl.cpp:49:19: error: no matching function \'bar\' found in local scope; did you mean \'Bar\'?"}
["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:52:28: error: definition or redeclaration of \'Af\' not allowed inside a block"}
}
}
},
},
["err_no_matching_param"]={
["err_invalid_declarator_in_function"]={
[c]="err_no_matching_param",
[b]="err_invalid_declarator_in_function",
[d]="parameter named %0 is missing",
[i]="definition or redeclaration of %0 not allowed inside a function",
[e]="parameter named A is missing",
[j]="definition or redeclaration of A not allowed inside a function",
[f]=k,
[h]=k,
[g]="parameter named (.*?) is missing",
[c]="definition or redeclaration of (.*?) not allowed inside a function",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={J,1236199783,H,I},
[g]={x,1237025389,y,z},
[j]={{Nb,1564,"/// ParseKNRParamDeclarations - Parse \'declaration-list[opt]\' which provides\n/// types for a function with a K&R-style identifier list for arguments.\nvoid Parser::ParseKNRParamDeclarations(Declarator &D) {\n  // ...\n  // Read all the argument declarations.\n  while (isDeclarationSpecifier(ImplicitTypenameContext::No)) {\n    // ...\n    // Handle the full declarator list.\n    while (true) {\n      // ...\n      if (Param &&\n        // ...\n        // Scan the argument list looking for the correct param to apply this\n        // type.\n        for (unsigned i = 0;; ++i) {\n          // C99 6.9.1p6: those declarators shall declare only identifiers from\n          // the identifier list.\n          if (i == FTI.NumParams) {\n            Diag(ParmDeclarator.getIdentifierLoc(), diag::err_no_matching_param) << ParmDeclarator.getIdentifier();"}}
[d]={{p,6197,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // Check whether the qualifying scope encloses the scope of the original\n  // declaration. For a template-id, we perform the checks in\n  // CheckTemplateSpecializationScope.\n  if (!Cur->Encloses(DC) && !IsTemplateId) {\n    if (Cur->isRecord())\n    // ...\n    else if (isa<TranslationUnitDecl>(DC))\n    // ...\n    else if (isa<FunctionDecl>(Cur))\n     Diag(Loc, diag::err_invalid_declarator_in_function) << Name << SS.getRange();"}},
},
["err_no_member"]={
[c]="err_no_member",
[d]="no member named %0 in %1",
[e]="no member named A in B",
[f]=k,
[g]="no member named (.*?) in (.*?)",
[h]=a,
[i]=m,
[b]={"e40876a50cf3",1255468604,"Unify our diagnostic printing for errors of the form, \"we didn\'t like","Unify our diagnostic printing for errors of the form, \"we didn\'t like\nwhat we found when we looked into <blah>\", where <blah> is a\nDeclContext*. We can now format DeclContext*\'s in nice ways, e.g.,\n\"namespace N\", \"the global namespace\", \"\'class Foo\'\".\n\nThis is part of PR3990, but we\'re not quite there yet.\n\nllvm-svn: 84028"},
[j]={{"clang/lib/Sema/SemaCoroutine.cpp",316,"static ExprResult buildMemberCall(Sema &S, Expr *Base, SourceLocation Loc, StringRef Name, MultiExprArg Args) {\n  // ...\n  // We meant exactly what we asked for. No need for typo correction.\n  if (auto *TE = dyn_cast<TypoExpr>(Result.get())) {\n    // ...\n   S.Diag(Loc, diag::err_no_member) << NameInfo.getName() << Base->getType()->getAsCXXRecordDecl() << Base->getSourceRange();"},{cc,823,"/// 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    Diag(IdInfo.IdentifierLoc, diag::err_no_member) << IdInfo.Identifier << LookupCtx << SS.getRange();"},{o,8033,"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    // Merge the decl with the existing one if appropriate.\n    if (!Previous.empty()) {\n    // ...\n    } else if (D.getCXXScopeSpec().isSet()) {\n      // ...\n      Diag(D.getIdentifierLoc(), diag::err_no_member) << Name << computeDeclContext(D.getCXXScopeSpec(), true) << D.getCXXScopeSpec().getRange();"},{Q,12762,"/// 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  // Try to correct typos if possible. If constructor name lookup finds no\n  // results, that means the named class has no explicit constructors, and we\n  // suppressed declaring implicit ones (probably because it\'s dependent or\n  // invalid).\n  if (R.empty() && NameInfo.getName().getNameKind() != DeclarationName::CXXConstructorName) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery)) {\n    // ...\n    } else {\n      Diag(IdentLoc, diag::err_no_member) << NameInfo.getName() << LookupContext << SS.getRange();"},{W,2277,"static void emitEmptyLookupTypoDiagnostic(const TypoCorrection &TC, Sema &SemaRef, const CXXScopeSpec &SS, DeclarationName Typo, SourceLocation TypoLoc, ArrayRef<Expr *> Args, unsigned DiagnosticID, unsigned DiagnosticSuggestID) {\n  // ...\n  if (!TC) {\n    // Emit a special diagnostic for failed member lookups.\n    // FIXME: computing the declaration context might fail here (?)\n    if (Ctx)\n      SemaRef.Diag(TypoLoc, diag::err_no_member) << Typo << Ctx << SS.getRange();"},{W,2525,"/// 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  // Emit a special diagnostic for failed member lookups.\n  // FIXME: computing the declaration context might fail here (?)\n  if (!SS.isEmpty()) {\n    Diag(R.getNameLoc(), diag::err_no_member) << Name << computeDeclContext(SS, false) << SS.getRange();"},{W,2869,"/// 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 (R.empty()) {\n    // ...\n    Diag(NameInfo.getLoc(), diag::err_no_member) << NameInfo.getName() << DC << SS.getRange();"},{W,16687,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  // ...\n  for (const OffsetOfComponent &OC : Components) {\n    // ...\n    if (!MemberDecl)\n      return ExprError(Diag(BuiltinLoc, diag::err_no_member) << OC.U.IdentInfo << RD << SourceRange(OC.LocStart, OC.LocEnd));"},{Tb,720,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  // ...\n  TE = SemaRef.CorrectTypoDelayed(\n      // ...\n      [=, &SemaRef](const TypoCorrection &TC) {\n        if (TC) {\n        // ...\n        } else {\n          SemaRef.Diag(TypoLoc, diag::err_no_member) << Typo << DC << BaseRange;"},{Tb,1029,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  // ...\n  if (R.empty()) {\n    // ...\n    Diag(R.getNameLoc(), diag::err_no_member) << MemberName << DC << (BaseExpr ? BaseExpr->getSourceRange() : SourceRange());"},{Y,5035,"// We actually only call this from template instantiation.\nExprResult Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n // ...\n  if (R.empty()) {\n    Diag(NameInfo.getLoc(), diag::err_no_member) << NameInfo.getName() << DC << SS.getRange();"},{Y,5159,"/// 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        Diag(Name.getBeginLoc(), diag::err_no_member) << DNI.getName() << LookupCtx << SS.getRange();"}},
[l]={
[l]={
["clang/test/SemaTemplate/dependent-class-member-operator.cpp"]={"clang/test/SemaTemplate/dependent-class-member-operator.cpp:9:17: error: no member named \'operator+\' in \'C1<int>\'"}
["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:51:11: error: definition or redeclaration of \'Af\' not allowed inside a function"}
}
}
},
},
["err_no_member_overloaded_arrow"]={
["err_invalid_declarator_scope"]={
[c]="err_no_member_overloaded_arrow",
[b]="err_invalid_declarator_scope",
[d]="no member named %0 in %1; did you mean to use \'->\' instead of \'.\'?",
[i]="cannot define or redeclare %0 here because namespace %1 does not enclose namespace %2",
[e]="no member named A in B; did you mean to use \'->\' instead of \'.\'?",
[j]="cannot define or redeclare A here because namespace B does not enclose namespace C",
[f]=k,
[h]=k,
[g]="no member named (.*?) in (.*?); did you mean to use \'\\-\\>\' instead of \'\\.\'\\?",
[c]="cannot define or redeclare (.*?) here because namespace (.*?) does not enclose namespace (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"76e07347ba02",1335383394,"Add an error message with fixit hint for changing \'.\' to \'->\'.","Add an error message with fixit hint for changing \'.\' to \'->\'.\n\nThis is mainly for attempting to recover in cases where a class provides\na custom operator-> and a \'.\' was accidentally used instead of \'->\' when\naccessing a member of the object returned by the current object\'s\noperator->.\n\nllvm-svn: 155580"},
[g]={x,1237025389,y,z},
[j]={{Tb,1023,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  // ...\n  if (R.empty()) {\n    // ...\n    if (ExtraArgs) {\n     // ...\n     if (RetryExpr.isUsable()) {\n       Diag(OpLoc, diag::err_no_member_overloaded_arrow) << MemberName << DC << FixItHint::CreateReplacement(OpLoc, \"->\");"}},
[d]={{p,6211,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  // Check whether the qualifying scope encloses the scope of the original\n  // declaration. For a template-id, we perform the checks in\n  // CheckTemplateSpecializationScope.\n  if (!Cur->Encloses(DC) && !IsTemplateId) {\n    if (Cur->isRecord())\n    // ...\n    else if (isa<TranslationUnitDecl>(DC))\n    // ...\n    else if (isa<FunctionDecl>(Cur))\n   // ...\n   else if (isa<BlockDecl>(Cur))\n    // ...\n    else if (isa<ExportDecl>(Cur)) {\n   // ...\n    } else\n      Diag(Loc, diag::err_invalid_declarator_scope) << Name << cast<NamedDecl>(Cur) << cast<NamedDecl>(DC) << SS.getRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/arrow-operator.cpp"]={"clang/test/SemaCXX/arrow-operator.cpp:61:9: error: no member named \'DoSomething\' in \'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>\'; did you mean to use \'->\' instead of \'.\'?","clang/test/SemaCXX/arrow-operator.cpp:62:9: error: no member named \'DoSamething\' in \'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>\'; did you mean to use \'->\' instead of \'.\'?"}
["clang/test/SemaCXX/pr36536.cpp"]={"clang/test/SemaCXX/pr36536.cpp:17:11: error: cannot define or redeclare \'f\' here because namespace \'bar\' does not enclose namespace \'Foo\'"}
}
}
},
},
["err_no_member_suggest"]={
["err_invalid_digit"]={
[c]="err_no_member_suggest",
[b]="err_invalid_digit",
[d]="no member named %0 in %1; did you mean %select{|simply }2%3?",
[i]="invalid digit \'%0\' in %select{decimal|octal|binary}1 constant",
[e]={{nil,nil,{"no member named A in B; did you mean ",{a,"simply "},"D?"}}},
[j]={{nil,nil,{"invalid digit \'A\' in ",{"decimal","octal","binary"}," constant"}}},
[f]=k,
[h]=k,
[g]="no member named (.*?) in (.*?); did you mean (?:|simply )(.*?)\\?",
[c]="invalid digit \'(.*?)\' in (?:decimal|octal|binary) constant",
[h]=a,
[f]=a,
[i]=m,
[e]=O,
[b]={"598b08f8182e",1262236813,"Implement typo correction for id-expressions, e.g.,","Implement typo correction for id-expressions, e.g.,\n\ntypo.cpp:22:10: error: use of undeclared identifier \'radious\'; did\n      you mean \'radius\'?\n  return radious * pi;\n        ^~~~~~~\n        radius\n\nThis was super-easy, since we already had decent recovery by looking\nfor names in dependent base classes.\n\nllvm-svn: 92341"},
[g]={"7f5ff2175f68",1447466995,"Use %select to merge similar diagnostics. NFC","Use %select to merge similar diagnostics. NFC\n\nllvm-svn: 253119"},
[j]={{cc,623,"/// 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        diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest) << Name << LookupCtx << DroppedSpecifier << SS.getRange());"},{o,1010,"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        unsigned QualifiedDiag = diag::err_no_member_suggest;"},{Q,12722,"/// Builds a using declaration.\n///\n/// \\param IsInstantiation - Whether this call arises from an\n///   instantiation of an unresolved using declarationWe 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  // Try to correct typos if possible. If constructor name lookup finds no\n  // results, that means the named class has no explicit constructors, and we\n  // suppressed declaring implicit ones (probably because it\'s dependent or\n  // invalid).\n  if (R.empty() && NameInfo.getName().getNameKind() != DeclarationName::CXXConstructorName) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery)) {\n      // ...\n      diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest) << NameInfo.getName() << LookupContext << 0 << SS.getRange());"},{W,2294,"static void emitEmptyLookupTypoDiagnostic(const TypoCorrection &TC, Sema &SemaRef, const CXXScopeSpec &SS, DeclarationName Typo, SourceLocation TypoLoc, ArrayRef<Expr *> Args, unsigned DiagnosticID, unsigned DiagnosticSuggestID) {\n // ...\n if (!Ctx)\n // ...\n  else\n    SemaRef.diagnoseTypo(TC, SemaRef.PDiag(diag::err_no_member_suggest) << Typo << Ctx << DroppedSpecifier << SS.getRange(), SemaRef.PDiag(NoteID));"},{W,2511,"/// 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 (S && Out) {\n  // ...\n  } else if (S && (Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery))) {\n    // ...\n    if (AcceptableWithRecovery || AcceptableWithoutRecovery) {\n      // ...\n      if (SS.isEmpty())\n      // ...\n      else\n        diagnoseTypo(Corrected, PDiag(diag::err_no_member_suggest) << Name << computeDeclContext(SS, false) << DroppedSpecifier << SS.getRange(), PDiag(NoteID), AcceptableWithRecovery);"},{Tb,716,"static bool LookupMemberExprInRecord(Sema &SemaRef, LookupResult &R, Expr *BaseExpr, const RecordType *RTy, SourceLocation OpLoc, bool IsArrow, CXXScopeSpec &SS, bool HasTemplateArgs, SourceLocation TemplateKWLoc, TypoExpr *&TE) {\n  // ...\n  TE = SemaRef.CorrectTypoDelayed(\n      // ...\n      [=, &SemaRef](const TypoCorrection &TC) {\n        if (TC) {\n          // ...\n          SemaRef.diagnoseTypo(TC, SemaRef.PDiag(diag::err_no_member_suggest) << Typo << DC << DroppedSpecifier << SS.getRange());"},{"clang/unittests/Sema/ExternalSemaSourceTest.cpp",65,"/// 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    } else if (Info.getID() == diag::err_no_member_suggest) {"}},
[d]={{ab,1182,"/// ParseDecimalOrOctalCommon - This method is called for decimal or octal\n/// numbers. It issues an error for illegal digits, and handles floating point\n/// parsing. If it detects a floating point number, the radix is set to 10.\nvoid NumericLiteralParser::ParseDecimalOrOctalCommon(SourceLocation TokLoc) {\n // ...\n // If we have a hex digit other than \'e\' (which denotes a FP exponent) then\n // the code is using an incorrect base.\n  if (isHexDigit(*s) && *s != \'e\' && *s != \'E\' && !isValidUDSuffix(LangOpts, StringRef(s, ThisTokEnd - s))) {\n    Diags.Report(Lexer::AdvanceToTokenCharacter(TokLoc, s - ThisTokBegin, SM, LangOpts), diag::err_invalid_digit) << StringRef(s, 1) << (radix == 8 ? 1 : 0);"},{ab,1361,"/// 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   if (s == ThisTokEnd) {\n   // ...\n    } else if (isHexDigit(*s) && !isValidUDSuffix(LangOpts, StringRef(s, ThisTokEnd - s))) {\n      Diags.Report(Lexer::AdvanceToTokenCharacter(TokLoc, s - ThisTokBegin, SM, LangOpts), diag::err_invalid_digit) << StringRef(s, 1) << 2;"}},
[l]={
[l]={
["clang/test/SemaCXX/pr13394-crash-on-invalid.cpp"]={"clang/test/SemaCXX/pr13394-crash-on-invalid.cpp:27:5: error: no member named \'Bar\' in namespace \'Foo\'; did you mean simply \'Bar\'?"}
["clang/test/Lexer/c2x_digit_separators.c"]={"clang/test/Lexer/c2x_digit_separators.c:12:12: error: invalid digit \'b\' in octal constant","clang/test/Lexer/c2x_digit_separators.c:13:11: error: invalid digit \'b\' in octal constant"}
}
}
},
},
["err_no_member_template"]={
["err_invalid_feature_combination"]={
[c]={{nil,r,"err_no_member_template"}},
[b]={{nil,B,"err_invalid_feature_combination"}},
[d]={{nil,r,"no template named %0 in %1"}},
[i]={{nil,B,"invalid feature combination: %0"}},
[e]={{nil,r,"no template named A in B"}},
[j]={{nil,B,"invalid feature combination: A"}},
[f]=k,
[h]=k,
[g]="no template named (.*?) in (.*?)",
[c]="invalid feature combination\\: (.*?)",
[h]=a,
[f]=a,
[i]={{nil,r,m}},
[e]={{nil,B,v}},
[b]={"52f8d19ceda6",1494451936,"Improve diagnosis of unknown template name.","Improve diagnosis of unknown template name.\n\nWhen an undeclared identifier in a context that requires a type is followed by\n\'<\', only look for type templates when typo-correcting, tweak the diagnostic\ntext to say that a template name (not a type name) was undeclared, and parse\nthe template arguments when recovering from the error.\n\nllvm-svn: 302732"},
[g]={"ff13189c5d0d",1624436334,"[RISCV] Unify the arch string parsing logic to to RISCVISAInfo.","[RISCV] Unify the arch string parsing logic to to RISCVISAInfo.\n\nHow many place you need to modify when implementing a new extension for RISC-V?\n\nAt least 7 places as I know:\n\n- Add new SubtargetFeature at RISCV.td\n- -march parser in RISCV.cpp\n- RISCVTargetInfo::initFeatureMap@RISCV.cpp for handling feature vector.\n- RISCVTargetInfo::getTargetDefines@RISCV.cpp for pre-define marco.\n- Arch string parser for ELF attribute in RISCVAsmParser.cpp\n- ELF attribute emittion in RISCVAsmParser.cpp, and make sure it\'s in\n  canonical order...\n- ELF attribute emittion in RISCVTargetStreamer.cpp, and again, must in\n  canonical order...\n\nAnd now, this patch provide an unified infrastructure for handling (almost)\neverything of RISC-V arch string.\n\nAfter this patch, you only need to update 2 places for implement an extension\nfor RISC-V:\n- Add new SubtargetFeature at RISCV.td, hmmm, it\'s hard to avoid.\n- Add new entry to RISCVSupportedExtension@RISCVISAInfo.cpp or\n  SupportedExperimentalExtensions@RISCVISAInfo.cpp .\n\nMost codes are come from existing -march parser, but with few new feature/bug\nfixes:\n- Accept version for -march, e.g. -march=rv32i2p0.\n- Reject version info with `p` but without minor version number like `rv32i2p`.\n\nDifferential Revision: https://reviews.llvm.org/D105168"},
[j]={{o,812,"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();"}}
[d]={{"clang/lib/Basic/Targets/AMDGPU.cpp",191,"bool AMDGPUTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeatureVec) const {\n // ...\n if (!insertWaveSizeFeature(CPU, getTriple(), Features, ErrorMsg)) {\n   Diags.Report(diag::err_invalid_feature_combination) << ErrorMsg;"},{"clang/lib/Basic/Targets/RISCV.cpp",248,"bool RISCVTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!ParseResult) {\n    // ...\n    Diags.Report(diag::err_invalid_feature_combination) << OutputErrMsg.str();"},{"clang/lib/Basic/Targets/RISCV.cpp",314,"/// Perform initialization based on the user configured set of features.\nbool RISCVTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n // ...\n if (!ParseResult) {\n   // ...\n   Diags.Report(diag::err_invalid_feature_combination) << OutputErrMsg.str();"}}
},
["err_no_member_template_suggest"]={
[c]="err_no_member_template_suggest",
[d]="no template named %0 in %1; did you mean %select{|simply }2%3?",
[e]={{nil,nil,{"no template named A in B; did you mean ",{a,"simply "},"D?"}}},
[f]=k,
[g]="no template named (.*?) in (.*?); did you mean (?:|simply )(.*?)\\?",
[h]=a,
[i]=m,
[b]={"ff18cc114111",1262247077,"Typo correction for template names, e.g.,","Typo correction for template names, e.g.,\n\ntypo.cpp:27:8: error: no template named \'basic_sting\' in namespace \'std\'; \n    did you mean \'basic_string\'?\n  std::basic_sting<char> b2;\n ~~~~~^~~~~~~~~~~\n      basic_string\n\nllvm-svn: 92348"},
[j]={{o,764,"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);"},{o,1017,"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          QualifiedDiag = diag::err_no_member_template_suggest;"},{Y,535,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  // ...\n  if (Found.empty() && !IsDependent && AllowTypoCorrection) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, FilterCCC, CTK_ErrorRecovery, LookupCtx)) {\n      // ...\n      if (Found.isAmbiguous()) {\n     // ...\n     } else if (!Found.empty()) {\n       // ...\n       if (LookupCtx) {\n          // ...\n          diagnoseTypo(Corrected, PDiag(diag::err_no_member_template_suggest) << Name << LookupCtx << DroppedSpecifier << SS.getRange());"}},
[l]={
["clang/test/SemaTemplate/typo-dependent-name.cpp"]={"clang/test/SemaTemplate/typo-dependent-name.cpp:40:18: error: no template named \'inner\' in \'Y<T>\'; did you mean \'Inner\'?"}
}
},
},
["err_no_nsconstant_string_class"]={
["err_invalid_form_pointer_member_function"]={
[c]="err_no_nsconstant_string_class",
[b]="err_invalid_form_pointer_member_function",
[d]="cannot find interface declaration for %0",
[i]="cannot create a non-constant pointer to member function",
[e]="cannot find interface declaration for A",
[j]="cannot create a non-constant pointer to member function",
[f]=k,
[h]=k,
[g]="cannot find interface declaration for (.*?)",
[c]="cannot create a non\\-constant pointer to member function",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"0731763efc6f",1272064744,"With -fno-constant-cfstrrings, class NSConstantString","With -fno-constant-cfstrrings, class NSConstantString\nmust be there or it is error (Next runtime).\n\nllvm-svn: 102223"},
[g]={"8d08b9b408ca",1282900108,"Propagate whether an id-expression is the immediate argument of","Propagate whether an id-expression is the immediate argument of\nan \'&\' expression from the second caller of ActOnIdExpression.\n\nTeach template argument deduction that an overloaded id-expression\ndoesn\'t give a valid type for deduction purposes to a non-static\nmember function unless the expression has the correct syntactic\nform.\n\nTeach ActOnIdExpression that it shouldn\'t try to create implicit\nmember expressions for \'&function\', because this isn\'t a        \npermitted form of use for member functions.\n\nTeach CheckAddressOfOperand to diagnose these more carefully.\nSome of these cases aren\'t reachable right now because earlier\ndiagnostics interrupt them.\n\nllvm-svn: 112258"},
[j]={{G,113,"ExprResult Sema::BuildObjCStringLiteral(SourceLocation AtLoc, StringLiteral *S) {\n // ...\n if (!Ty.isNull()) {\n // ...\n  } else if (getLangOpts().NoConstantCFStrings) {\n    // ...\n    if (ObjCInterfaceDecl *StrIF = dyn_cast_or_null<ObjCInterfaceDecl>(IF)) {\n   // ...\n   } else {\n     // ...\n      Diag(S->getBeginLoc(), diag::err_no_nsconstant_string_class) << NSIdent << S->getSourceRange();"}},
[d]={{q,14881,"/// 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 (const BuiltinType *PTy = OrigOp.get()->getType()->getAsPlaceholderType()) {\n    if (PTy->getKind() == BuiltinType::Overload) {\n     // ...\n     if (isa<UnresolvedMemberExpr>(Ovl))\n        if (!ResolveSingleFunctionTemplateSpecialization(Ovl)) {\n          Diag(OpLoc, diag::err_invalid_form_pointer_member_function) << OrigOp.get()->getSourceRange();"},{q,14906,"/// 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 (const BuiltinType *PTy = OrigOp.get()->getType()->getAsPlaceholderType()) {\n    // ...\n    if (PTy->getKind() == BuiltinType::BoundMember) {\n      Diag(OpLoc, diag::err_invalid_form_pointer_member_function) << OrigOp.get()->getSourceRange();"},{q,14959,"/// 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    // If the underlying expression isn\'t a decl ref, give up.\n    if (!isa<DeclRefExpr>(op)) {\n      Diag(OpLoc, diag::err_invalid_form_pointer_member_function) << OrigOp.get()->getSourceRange();"},{"clang/lib/Sema/SemaOverload.cpp",12640,"// A helper class to help with address of function resolution\n// - allows us to avoid passing around all those ugly parameters\nclass AddressOfFunctionResolver {\n  // ...\n  void ComplainIsStaticMemberFunctionFromBoundPointer() const { S.Diag(OvlExpr->getBeginLoc(), diag::err_invalid_form_pointer_member_function) << OvlExpr->getSourceRange(); }"}},
[l]={
[l]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:34:17: error: cannot find interface declaration for \'Q\'"}
["clang/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp"]={"clang/test/CXX/expr/expr.unary/expr.unary.op/p4.cpp:43:26: error: cannot create a non-constant pointer to member function"}
}
}
},
},
["err_no_submodule"]={
["err_invalid_incomplete_type_use"]={
[c]="err_no_submodule",
[b]="err_invalid_incomplete_type_use",
[d]="no submodule named %0 in module \'%1\'",
[i]="invalid use of incomplete type %0",
[e]="no submodule named A in module \'B\'",
[j]="invalid use of incomplete type A",
[f]=k,
[h]=k,
[g]="no submodule named (.*?) in module \'(.*?)\'",
[c]="invalid use of incomplete type (.*?)",
[h]=a,
[f]=a,
[i]=w,
[e]=m,
[b]={"5196bc6b39b5",1322625824,"When loading a module that involves submodules (e.g., std.vector),","When loading a module that involves submodules (e.g., std.vector),\ncheck whether the named submodules themselves are actually\nvalid, and drill down to the named submodule (although we don\'t do\nanything with it yet). Perform typo correction on the submodule names\nwhen possible.\n\nllvm-svn: 145477"},
[g]={x,1237025389,y,z},
[j]={{wb,2093,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  // ...\n  for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n    // ...\n    if (!Sub) {\n      // ...\n      getDiagnostics().Report(Path[I].second, diag::err_no_submodule) << Path[I].first << Module->getFullModuleName() << SourceRange(Path[0].second, Path[I - 1].second);"}},
[d]={{I,1583,"ExprResult Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, SourceLocation LParenOrBraceLoc, MultiExprArg Exprs, SourceLocation RParenOrBraceLoc, bool ListInitialization) {\n  // ...\n  if (!Ty->isVoidType() && RequireCompleteType(TyBeginLoc, ElemTy, diag::err_invalid_incomplete_type_use, FullRange))"}},
[l]={
[l]={
["clang/test/Modules/submodules.cpp"]={"clang/test/Modules/submodules.cpp:19:20: error: no submodule named \'compare\' in module \'std.vector\'"}
["clang/test/SemaTemplate/instantiate-self.cpp"]={"clang/test/SemaTemplate/instantiate-self.cpp:43:13: error: invalid use of incomplete type \'typename A<typename M<int>::type>::B\'"}
}
}
},
},
["err_no_submodule_suggest"]={
["err_invalid_macos_32bit_deployment_target"]={
[c]="err_no_submodule_suggest",
[b]={{nil,w,"err_invalid_macos_32bit_deployment_target"}},
[d]="no submodule named %0 in module \'%1\'; did you mean \'%2\'?",
[i]={{nil,w,"32-bit targets are not supported when building for Mac Catalyst"}},
[e]="no submodule named A in module \'B\'; did you mean \'C\'?",
[j]={{nil,w,"32-bit targets are not supported when building for Mac Catalyst"}},
[f]=k,
[h]=k,
[g]="no submodule named (.*?) in module \'(.*?)\'; did you mean \'(.*?)\'\\?",
[c]="32\\-bit targets are not supported when building for Mac Catalyst",
[h]=a,
[f]=a,
[i]=w,
[e]={{nil,w,v}},
[b]={"5196bc6b39b5",1322625824,"When loading a module that involves submodules (e.g., std.vector),","When loading a module that involves submodules (e.g., std.vector),\ncheck whether the named submodules themselves are actually\nvalid, and drill down to the named submodule (although we don\'t do\nanything with it yet). Perform typo correction on the submodule names\nwhen possible.\n\nllvm-svn: 145477"},
[g]={"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.\n\nThis is support for the user-facing options to create importable header units\nfrom headers in the user or system search paths (or to be given an absolute path).\n\nThis means that an incomplete header path will be passed by the driver and the\nlookup carried out using the search paths present when the front end is run.\n\nTo support this, we introduce file fypes for c++-{user,system,header-unit}-header.\nThese terms are the same as the ones used by GCC, to minimise the differences for\ntooling (and users).\n\nThe preprocessor checks for headers before issuing a warning for\n\"#pragma once\" in a header build. We ensure that the importable header units\nare recognised as headers in order to avoid such warnings.\n\nDifferential Revision: https://reviews.llvm.org/D121096"},
[j]={{wb,2080,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  // ...\n  for (unsigned I = 1, N = Path.size(); I != N; ++I) {\n   // ...\n   if (!Sub) {\n     // ...\n     // If there was a clear winner, user it.\n     if (Best.size() == 1) {\n       getDiagnostics().Report(Path[I].second, diag::err_no_submodule_suggest) << Path[I].first << Module->getFullModuleName() << Best[0] << SourceRange(Path[0].second, Path[I - 1].second) << FixItHint::CreateReplacement(SourceRange(Path[I].second), Best[0]);"}},
[d]={{"clang/lib/Driver/ToolChains/Darwin.cpp",2289,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  // Set the tool chain target information.\n  if (Platform == MacOS) {\n // ...\n } else if (Platform == IPhoneOS) {\n   // ...\n   // For 32-bit targets, the deployment target for iOS has to be earlier than\n    // iOS 11.\n   if (getTriple().isArch32Bit() && Major >= 11) {\n     // If the deployment target is explicitly specified, print a diagnostic.\n      if (OSTarget->isExplicitlySpecified()) {\n        if (OSTarget->getEnvironment() == MacCatalyst)\n          getDriver().Diag(diag::err_invalid_macos_32bit_deployment_target);"}}
[l]={
["clang/test/Modules/submodules.cpp"]={"clang/test/Modules/submodules.cpp:14:13: error: no submodule named \'typetraits\' in module \'std\'; did you mean \'type_traits\'?"}
}
},
},
["err_no_subobject_property_setting"]={
["err_invalid_mask_type_size"]={
[c]="err_no_subobject_property_setting",
[b]={{nil,V,"err_invalid_mask_type_size"}},
[d]="expression is not assignable",
[i]={{nil,V,"mask type size must be between 1-byte and 8-bytes"}},
[e]="expression is not assignable",
[j]={{nil,V,"mask type size must be between 1-byte and 8-bytes"}},
[f]=k,
[h]=k,
[g]="expression is not assignable",
[c]="mask type size must be between 1\\-byte and 8\\-bytes",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,V,m}},
[b]={Bb,1480718311,Ab,zb},
[g]={"d572cf496ded",1541487914,"os_log: Allow specifying mask type in format string.","os_log: Allow specifying mask type in format string.\n\nA mask type is a 1 to 8-byte string that follows the \"mask.\" annotation\nin the format string. This enables obfuscating data in the event the\nprovided privacy level isn\'t enabled.\n\nrdar://problem/36756282\n\nllvm-svn: 346211"},
[j]={{W,14417,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not,\n/// emit an error and return true. If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n // ...\n case Expr::MLV_SubObjCPropertySetting:\n    DiagID = diag::err_no_subobject_property_setting;"}},
[d]={{K,10531,"void CheckPrintfHandler::handleInvalidMaskType(StringRef MaskType) { S.Diag(getLocationOfByte(MaskType.data()), diag::err_invalid_mask_type_size); }"}},
[l]={
[l]={
["clang/test/Sema/va_arg_x86_32.c"]={"clang/test/Sema/va_arg_x86_32.c:4:3: error: expression is not assignable"}
["clang/test/SemaObjC/format-strings-oslog.m"]={"clang/test/SemaObjC/format-strings-oslog.m:44:40: error: mask type size must be between 1-byte and 8-bytes","clang/test/SemaObjC/format-strings-oslog.m:45:40: error: mask type size must be between 1-byte and 8-bytes"}
}
}
},
},
["err_no_suitable_delete_member_function_found"]={
["err_invalid_member_in_interface"]={
[c]="err_no_suitable_delete_member_function_found",
[b]="err_invalid_member_in_interface",
[d]="no suitable member %0 in %1",
[i]="%select{data member |non-public member function |static member function |user-declared constructor|user-declared destructor|operator |nested class }0%1 is not permitted within an interface type",
[e]="no suitable member A in B",
[j]={{nil,nil,{{"data member ","non-public member function ","static member function ","user-declared constructor","user-declared destructor","operator ","nested class "},"B is not permitted within an interface type"}}},
[f]=k,
[h]=k,
[g]="no suitable member (.*?) in (.*?)",
[c]="(?:data member |non\\-public member function |static member function |user\\-declared constructor|user\\-declared destructor|operator |nested class )(.*?) is not permitted within an interface type",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,V,v},{"7.1",nil,m}},
[b]={"2c9e274e57c6",1258303395,"If we find a deallocation function in the class scope, but it is a placement function we should not ...","If we find a deallocation function in the class scope, but it is a placement function we should not look for a deallocation function in the global scope.\n\nllvm-svn: 88851"},
[g]={"db632ac004ae",1348558359,"Fix for r163013 regression and further __interface enhancement.","Fix for r163013 regression and further __interface enhancement.\nPatch by Andy Gibbs!\n\nllvm-svn: 164590"},
[j]={{tb,3312,"bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, DeclarationName Name, FunctionDecl *&Operator, bool Diagnose, bool WantSize, bool WantAligned) {\n  // ...\n  // We did find operator delete/operator delete[] declarations, but\n  // none of them were suitable.\n  if (!Found.empty()) {\n    if (Diagnose) {\n      Diag(StartLoc, diag::err_no_suitable_delete_member_function_found) << Name << RD;"}},
[d]={{U,3466,"/// 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  if (!ClassStack.empty()) {\n    for (const Scope *S = getCurScope(); S; S = S->getParent()) {\n      if (S->isClassScope()) {\n        // ...\n        // The Microsoft extension __interface does not permit nested classes.\n        if (getCurrentClass().IsInterface) {\n          Diag(RecordLoc, diag::err_invalid_member_in_interface) << /*ErrorType=*/6 << (isa<NamedDecl>(TagDecl) ? cast<NamedDecl>(TagDecl)->getQualifiedNameAsString() : \"(anonymous)\");"},{t,3465,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (cast<CXXRecordDecl>(CurContext)->isInterface()) {\n    // ...\n    if (InvalidDecl) {\n      if (ShowDeclName)\n        Diag(Loc, diag::err_invalid_member_in_interface) << (InvalidDecl - 1) << Name;"},{t,3468,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (cast<CXXRecordDecl>(CurContext)->isInterface()) {\n    // ...\n    if (InvalidDecl) {\n      if (ShowDeclName)\n      // ...\n      else\n        Diag(Loc, diag::err_invalid_member_in_interface) << (InvalidDecl - 1) << \"\";"}},
[l]={
[l]={
["clang/test/SemaCXX/coroutine-no-valid-dealloc.cpp"]={"clang/test/SemaCXX/coroutine-no-valid-dealloc.cpp:24:6: error: no suitable member \'operator delete\' in \'promise_type\'","clang/test/SemaCXX/coroutine-no-valid-dealloc.cpp:24:6: error: no suitable member \'operator delete\' in \'promise_type\'"}
["clang/test/SemaCXX/ms-interface.cpp"]={"clang/test/SemaCXX/ms-interface.cpp:5:3: error: user-declared constructor is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:7:3: error: user-declared destructor is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:10:8: error: operator \'operator!\' is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:12:3: error: operator \'operator int\' is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:14:3: error: nested class I1::(unnamed struct at clang/test/SemaCXX/ms-interface.cpp:14:3) is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:27:7: error: data member \'i\' is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:29:14: error: static member function \'fn1\' is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:32:8: error: non-public member function \'fn2\' is not permitted within an interface type","clang/test/SemaCXX/ms-interface.cpp:35:8: error: non-public member function \'fn3\' is not permitted within an interface type"}
}
}
},
},
["err_no_super_class_message"]={
["err_invalid_member_use_in_static_method"]={
[c]="err_no_super_class_message",
[b]="err_invalid_member_use_in_static_method",
[d]="no @interface declaration found in class messaging of %0",
[i]="invalid use of member %0 in static member function",
[e]="no @interface declaration found in class messaging of A",
[j]="invalid use of member A in static member function",
[f]=k,
[h]=k,
[g]="no @interface declaration found in class messaging of (.*?)",
[c]="invalid use of member (.*?) in static member function",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={Bb,1480718311,Ab,zb},
[g]={x,1237025389,y,z},
[j]={{G,2397,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n  // ...\n  if (!Class) {\n    Diag(SuperLoc, diag::err_no_super_class_message) << Method->getDeclName();"}},
[d]={{"clang/lib/Sema/SemaExprMember.cpp",222,"/// Diagnose a reference to a field with no object available.\nstatic void diagnoseInstanceReference(Sema &SemaRef, const CXXScopeSpec &SS, NamedDecl *Rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  if (IsField && InStaticMethod)\n    // ...\n    SemaRef.Diag(Loc, diag::err_invalid_member_use_in_static_method) << Range << nameInfo.getName();"}},
[l]={
[l]={
["clang/test/SemaObjC/undef-class-messagin-error.m"]={"clang/test/SemaObjC/undef-class-messagin-error.m:12:24: error: no @interface declaration found in class messaging of \'flushCache2\'"}
["clang/test/SemaCXX/address-of.cpp"]={"clang/test/SemaCXX/address-of.cpp:15:10: error: invalid use of member \'var\' in static member function"}
}
}
},
},
["err_no_template"]={
["err_invalid_module_name"]={
[c]={{nil,r,"err_no_template"}},
[b]={{nil,n,"err_invalid_module_name"}},
[d]={{nil,r,"no template named %0"}},
[i]="%0 is an invalid name for a module",
[e]={{nil,r,"no template named A"}},
[j]="A is an invalid name for a module",
[f]=k,
[h]=k,
[g]="no template named (.*?)",
[c]="(.*?) is an invalid name for a module",
[h]=a,
[f]=a,
[i]={{nil,r,m}},
[e]={{nil,n,ac}},
[b]={"52f8d19ceda6",1494451936,"Improve diagnosis of unknown template name.","Improve diagnosis of unknown template name.\n\nWhen an undeclared identifier in a context that requires a type is followed by\n\'<\', only look for type templates when typo-correcting, tweak the diagnostic\ntext to say that a template name (not a type name) was undeclared, and parse\nthe template arguments when recovering from the error.\n\nllvm-svn: 302732"},
[g]={N,1625925174,M,L},
[j]={{o,808,"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;"},{Y,4120,"bool Sema::resolveAssumedTemplateNameAsType(Scope *S, TemplateName &Name, SourceLocation NameLoc, bool Diagnose) {\n  // ...\n  if (Diagnose)\n    Diag(R.getNameLoc(), diag::err_no_template) << R.getLookupName();"}},
[d]={{"clang/lib/Sema/SemaModule.cpp",165,"/// Tests whether the given identifier is reserved as a module name and\n/// diagnoses if it is. Returns true if a diagnostic is emitted and false\n/// otherwise.\nstatic bool DiagReservedModuleName(Sema &S, const IdentifierInfo *II, SourceLocation Loc) {\n  // ...\n  case Invalid:\n    return S.Diag(Loc, diag::err_invalid_module_name) << II;"}}
[l]={
["clang/test/FixIt/typo-crash.cpp"]={"clang/test/FixIt/typo-crash.cpp:5:3: error: no template named \'template_id2\'"}
}
},
},
["err_no_template_suggest"]={
["err_invalid_neon_type_code"]={
[c]="err_no_template_suggest",
[b]="err_invalid_neon_type_code",
[d]="no template named %0; did you mean %1?",
[i]="incompatible constant for this __builtin_neon function",
[e]="no template named A; did you mean B?",
[j]="incompatible constant for this __builtin_neon function",
[f]=k,
[h]=k,
[g]="no template named (.*?); did you mean (.*?)\\?",
[c]="incompatible constant for this __builtin_neon function",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"ff18cc114111",1262247077,"Typo correction for template names, e.g.,","Typo correction for template names, e.g.,\n\ntypo.cpp:27:8: error: no template named \'basic_sting\' in namespace \'std\'; \n    did you mean \'basic_string\'?\n  std::basic_sting<char> b2;\n  ~~~~~^~~~~~~~~~~\n      basic_string\n\nllvm-svn: 92348"},
[g]={"d773fe67dd67",1276404472,"Most of NEON sema checking & fix to polynomial type detection","Most of NEON sema checking & fix to polynomial type detection\n\nllvm-svn: 105908"},
[j]={{o,747,"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);"},{o,755,"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);"},{o,1016,"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          UnqualifiedDiag = diag::err_no_template_suggest;"},{Y,539,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  // ...\n  if (Found.empty() && !IsDependent && AllowTypoCorrection) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(Found.getLookupNameInfo(), Found.getLookupKind(), S, &SS, FilterCCC, CTK_ErrorRecovery, LookupCtx)) {\n      // ...\n      if (Found.isAmbiguous()) {\n      // ...\n      } else if (!Found.empty()) {\n        // ...\n        if (LookupCtx) {\n        // ...\n        } else {\n          diagnoseTypo(Corrected, PDiag(diag::err_no_template_suggest) << Name);"},{Y,4113,"bool Sema::resolveAssumedTemplateNameAsType(Scope *S, TemplateName &Name, SourceLocation NameLoc, bool Diagnose) {\n  // ...\n  if (Corrected && Corrected.getFoundDecl()) {\n    diagnoseTypo(Corrected, PDiag(diag::err_no_template_suggest) << ATN->getDeclName());"}},
[d]={{K,3056,"#include \"clang/Basic/arm_neon.inc\"\n  // ...\n  if (mask) {\n    // ...\n    if ((TV > 63) || (mask & (1ULL << TV)) == 0)\n      return Diag(TheCall->getBeginLoc(), diag::err_invalid_neon_type_code) << TheCall->getArg(ImmArg)->getSourceRange();"}}
[l]={
["clang/test/SemaCXX/GH59446.cpp"]={"clang/test/SemaCXX/GH59446.cpp:9:10: error: no template named \'X\'; did you mean \'N::X\'?"}
}
},
},
["err_no_typeid_with_fno_rtti"]={
["err_invalid_non_static_member_use"]={
[c]="err_no_typeid_with_fno_rtti",
[b]="err_invalid_non_static_member_use",
[d]={{nil,q,"use of typeid requires -frtti"},{t,nil,"cannot use typeid with -fno-rtti"}},
[i]="invalid use of non-static data member %0",
[e]={{nil,q,"use of typeid requires -frtti"},{t,nil,"cannot use typeid with -fno-rtti"}},
[j]="invalid use of non-static data member A",
[f]=k,
[h]=k,
[g]="use of typeid requires \\-frtti",
[c]="invalid use of non\\-static data member (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"1b7f39de3d58",1337477241,"Error when using typeid() with -fno-rtti. PR 12888.","Error when using typeid() with -fno-rtti. PR 12888.\n\nllvm-svn: 157139"},
[g]={x,1237025389,y,z},
[j]={{tb,679,"/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);\nExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) {\n  // ...\n  if (!getLangOpts().RTTI) {\n    return ExprError(Diag(OpLoc, diag::err_no_typeid_with_fno_rtti));"}},
[d]={{q,18114,"// Handle the case where we conclude a expression which we speculatively\n// considered to be unevaluated is actually evaluated.\nclass TransformToPE : public TreeTransform<TransformToPE> {\n  // ...\n  // We need to special-case DeclRefExprs referring to FieldDecls which\n  // are not part of a member pointer formation; normal TreeTransforming\n  // doesn\'t catch this case because of the way we represent them in the AST.\n  // FIXME: This is a bit ugly; is it really the best way to handle this\n  // case?\n  //\n  // Error on DeclRefExprs referring to FieldDecls.\n  ExprResult TransformDeclRefExpr(DeclRefExpr *E) {\n    if (isa<FieldDecl>(E->getDecl()) && !SemaRef.isUnevaluatedContext())\n      return SemaRef.Diag(E->getLocation(), diag::err_invalid_non_static_member_use) << E->getDecl() << E->getSourceRange();"},{"clang/lib/Sema/SemaExprMember.cpp",231,"/// Diagnose a reference to a field with no object available.\nstatic void diagnoseInstanceReference(Sema &SemaRef, const CXXScopeSpec &SS, NamedDecl *Rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  if (IsField && InStaticMethod)\n  // ...\n  else if (ContextClass && RepClass && SS.isEmpty() && !InStaticMethod && !RepClass->Equals(ContextClass) && RepClass->Encloses(ContextClass))\n  // ...\n  else if (IsField)\n    SemaRef.Diag(Loc, diag::err_invalid_non_static_member_use) << nameInfo.getName() << Range;"}},
[l]={
[l]={
["clang/test/SemaCXX/no-rtti.cpp"]={"clang/test/SemaCXX/no-rtti.cpp:9:9: error: use of typeid requires -frtti"}
["clang/test/SemaCXX/cxx1y-initializer-aggregates.cpp"]={"clang/test/SemaCXX/cxx1y-initializer-aggregates.cpp:44:15: error: invalid use of non-static data member \'k\'"}
}
}
},
},
["err_no_viable_destructor"]={
["err_invalid_nsnumber_type"]={
[c]={{nil,s,"err_no_viable_destructor"}},
[b]="err_invalid_nsnumber_type",
[d]={{nil,s,"no viable destructor found for class %0"}},
[i]="%0 is not a valid literal type for NSNumber",
[e]={{nil,s,"no viable destructor found for class A"}},
[j]="A is not a valid literal type for NSNumber",
[f]=k,
[h]=k,
[g]="no viable destructor found for class (.*?)",
[c]="(.*?) is not a valid literal type for NSNumber",
[h]=a,
[f]=a,
[i]={{nil,s,m}},
[e]=m,
[b]={nc,1625925174,kc,Dc},
[g]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,","Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,\nNSNumber, and boolean literals.  This includes both Sema and Codegen support.\nIncluded is also support for new Objective-C container subscripting.\n\nMy apologies for the large patch.  It was very difficult to break apart.\nThe patch introduces changes to the driver as well to cause clang to link\nin additional runtime support when needed to support the new language features.\n\nDocs are forthcoming to document the implementation and behavior of these features.\n\nllvm-svn: 152137"},
[j]={{o,18545,"/// [class.dtor]p4:\n///  At the end of the definition of a class, overload resolution is\n///  performed among the prospective destructors declared in that class with\n///  an empty argument list to select the destructor for the class, also\n///  known as the selected destructor.\n///\n/// We do the overload resolution here, then mark the selected constructor in the AST.\n/// Later CXXRecordDecl::getDestructor() will return the selected constructor.\nstatic void ComputeSelectedDestructor(Sema &S, CXXRecordDecl *Record) {\n  // ...\n  case OR_No_Viable_Function:\n    Msg = diag::err_no_viable_destructor;"}},
[d]={{bb,253,"/// Retrieve the NSNumber factory method that should be used to create\n/// an Objective-C literal for the given type.\nstatic ObjCMethodDecl *getNSNumberFactoryMethod(Sema &S, SourceLocation Loc, QualType NumberType, bool isLiteral = false, SourceRange R = SourceRange()) {\n  // ...\n  if (!Kind) {\n    if (isLiteral) {\n      S.Diag(Loc, diag::err_invalid_nsnumber_type) << NumberType << R;"}},
[l]={
[l]={
["clang/test/CXX/class/class.dtor/p4.cpp"]={"clang/test/CXX/class/class.dtor/p4.cpp:61:17: error: no viable destructor found for class \'D<0>\'"}
["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:57:28: error: \'long double\' is not a valid literal type for NSNumber"}
}
}
},
},
["err_nogetter_property_compound_assignment"]={
["err_invalid_numeric_udl"]={
[c]="err_nogetter_property_compound_assignment",
[b]="err_invalid_numeric_udl",
[d]="a getter method is needed to perform a compound assignment on a property",
[i]="numeric literal with user-defined suffix cannot be used here",
[e]="a getter method is needed to perform a compound assignment on a property",
[j]="numeric literal with user-defined suffix cannot be used here",
[f]=k,
[h]=k,
[g]="a getter method is needed to perform a compound assignment on a property",
[c]="numeric literal with user\\-defined suffix cannot be used here",
[h]=a,
[f]=a,
[i]=m,
[e]=O,
[b]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
[g]={"bcc22fc4e1b2",1331280036,"Support for raw and template forms of numeric user-defined literals,","Support for raw and template forms of numeric user-defined literals,\nand lots of tidying up.\n\nllvm-svn: 152392"},
[j]={{P,917,"/// @property-specific behavior for doing assignments.\nExprResult ObjCPropertyOpBuilder::buildAssignmentOperation(Scope *Sc, SourceLocation opcLoc, BinaryOperatorKind opcode, Expr *LHS, Expr *RHS) {\n  // ...\n  // Verify that we can do a compound assignment.\n if (opcode != BO_Assign && !findGetter()) {\n   S.Diag(opcLoc, diag::err_nogetter_property_compound_assignment) << LHS->getSourceRange() << RHS->getSourceRange();"}}
[d]={{q,3881,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.hasUDSuffix()) {\n    // ...\n    // Make sure we\'re allowed user-defined literals here.\n   if (!UDLScope)\n     return ExprError(Diag(UDSuffixLoc, diag::err_invalid_numeric_udl));"}}
},
},
["err_nogetter_property_incdec"]={
["err_invalid_operator_on_type"]={
[c]="err_nogetter_property_incdec",
[b]="err_invalid_operator_on_type",
[d]="no getter method %1 for %select{increment|decrement}0 of property",
[i]="cannot use %select{dot|arrow}0 operator on a type",
[e]={{nil,nil,{"no getter method B for ",{"increment","decrement"}," of property"}}},
[j]={{nil,nil,{"cannot use ",{"dot","arrow"}," operator on a type"}}},
[f]=k,
[h]=k,
[g]="no getter method (.*?) for (?:increment|decrement) of property",
[c]="cannot use (?:dot|arrow) operator on a type",
[h]=a,
[f]=a,
[i]=m,
[e]=C,
[b]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
[g]={"9c67267a7bce",1359167498,"Give a more informative error message when the dot or arrow operator is used","Give a more informative error message when the dot or arrow operator is used\non a type.  Currently, it gives a generic \"expected unqualified-id\" error.\nThe new error message is \"cannot use (dot|arrow) operator on a type\".\n\nllvm-svn: 173556"},
[j]={{P,963,"/// @property-specific behavior for doing increments and decrements.\nExprResult ObjCPropertyOpBuilder::buildIncDecOperation(Scope *Sc, SourceLocation opcLoc, UnaryOperatorKind opcode, Expr *op) {\n  // ...\n  // We also need a getter.\n  if (!findGetter()) {\n    // ...\n    S.Diag(opcLoc, diag::err_nogetter_property_incdec) << unsigned(UnaryOperator::isDecrementOp(opcode)) << GetterSelector << op->getSourceRange();"}},
[d]={{P,6621,"/// 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      // ...\n      } else if (getLangOpts().CPlusPlus) {\n        if (Tok.isOneOf(tok::period, tok::arrow))\n          Diag(Tok, diag::err_invalid_operator_on_type) << Tok.is(tok::arrow);"}},
[l]={
[l]={
["clang/test/SemaObjC/error-implicit-property.m"]={"clang/test/SemaObjC/error-implicit-property.m:18:8: error: no getter method \'P\' for increment of property","clang/test/SemaObjC/error-implicit-property.m:19:3: error: no getter method \'P\' for decrement of property"}
["clang/test/Parser/cxx1z-class-template-argument-deduction.cpp"]={"clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:255:18: error: cannot use dot operator on a type"}
}
}
},
},
["err_non_asm_stmt_in_naked_function"]={
["err_invalid_pcs"]={
[c]="err_non_asm_stmt_in_naked_function",
[b]="err_invalid_pcs",
[d]="non-ASM statement in naked function is not supported",
[i]="invalid PCS type",
[e]="non-ASM statement in naked function is not supported",
[j]="invalid PCS type",
[f]=k,
[h]=k,
[g]="non\\-ASM statement in naked function is not supported",
[c]="invalid PCS type",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"d62cdd2c14c4",1409869000,"Don\'t allow non-ASM statements in naked functions","Don\'t allow non-ASM statements in naked functions\n\nNaked functions don\'t have prologues or epilogues, so doing\ncodegen for anything other than inline assembly would be completely\nhit or miss.\n\nDifferential Revision: http://reviews.llvm.org/D5183\n\nllvm-svn: 217199"},
[g]={"231e875b5c44",1302811609,"Implement ARM pcs attribute. Basically it\'s another way of calling convention selection (AAPCS or","Implement ARM pcs attribute. Basically it\'s another way of calling convention selection (AAPCS or\nAAPCS+VFP), similar to fastcall / stdcall / whatevercall seen on x86.\n\nIn particular, all library functions should always be AAPCS regardless of floating point ABI used.\n\nllvm-svn: 129534"},
[j]={{o,15935,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  // ...\n  {\n    // ...\n    // Verify and clean out per-function state.\n    if (Body && (!FD || !FD->isDefaulted())) {\n      // ...\n      if (FD && FD->hasAttr<NakedAttr>()) {\n        for (const Stmt *S : Body->children()) {\n          // ...\n          if (!isa<AsmStmt>(S) && !isa<NullStmt>(S)) {\n            Diag(S->getBeginLoc(), diag::err_non_asm_stmt_in_naked_function);"}},
[d]={{u,5385,"bool Sema::CheckCallingConvAttr(const ParsedAttr &Attrs, CallingConv &CC, const FunctionDecl *FD) {\n  // ...\n  case ParsedAttr::AT_Pcs: {\n    // ...\n    Diag(Attrs.getLoc(), diag::err_invalid_pcs);"}},
[l]={
[l]={
["clang/test/Sema/attr-naked.c"]={"clang/test/Sema/attr-naked.c:14:3: error: non-ASM statement in naked function is not supported","clang/test/Sema/attr-naked.c:53:3: error: non-ASM statement in naked function is not supported","clang/test/Sema/attr-naked.c:57:3: error: non-ASM statement in naked function is not supported","clang/test/Sema/attr-naked.c:61:3: error: non-ASM statement in naked function is not supported"}
["clang/test/Sema/callingconv-iamcu.c"]={"clang/test/Sema/callingconv-iamcu.c:37:20: error: invalid PCS type","clang/test/Sema/callingconv-iamcu.c:43:20: error: invalid PCS type"}
}
}
},
},
["err_non_bool_atomic_constraint"]={
["err_invalid_pixel_decl_spec_combination"]={
[c]={{nil,n,"err_non_bool_atomic_constraint"}},
[b]="err_invalid_pixel_decl_spec_combination",
[d]={{nil,n,"atomic constraint must be of type \'bool\' (found %0)"}},
[i]="\'__pixel\' must be preceded by \'__vector\'\'%0\' declaration specifier not allowed here",
[e]={{nil,n,"atomic constraint must be of type \'bool\' (found A)"}},
[j]="\'__pixel\' must be preceded by \'__vector\'\'A\' declaration specifier not allowed here",
[f]=k,
[h]=k,
[g]="atomic constraint must be of type \'bool\' \\(found (.*?)\\)",
[c]="\'__pixel\' must be preceded by \'__vector\'\\.  \'(.*?)\' declaration specifier not allowed here",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]=m,
[b]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n  int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[g]={"2233460de6ed",1265328742,"First stage of adding AltiVec support","First stage of adding AltiVec support\n\nllvm-svn: 95335"},
[j]={{"clang/lib/Sema/SemaConcept.cpp",149,"bool Sema::CheckConstraintExpression(const Expr *ConstraintExpression, Token NextToken, bool *PossibleNonPrimary, bool IsTrailingRequiresClause) {\n  // ...\n  if (!Context.hasSameUnqualifiedType(Type, Context.BoolTy)) {\n    Diag(ConstraintExpression->getExprLoc(), diag::err_non_bool_atomic_constraint) << Type << ConstraintExpression->getSourceRange();"}},
[d]={{D,910,"bool DeclSpec::SetTypeAltiVecPixel(bool isAltiVecPixel, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy) {\n  // ...\n  if (!TypeAltiVecVector || TypeAltiVecPixel || (TypeSpecType != TST_unspecified)) {\n    // ...\n    DiagID = diag::err_invalid_pixel_decl_spec_combination;"}}
[l]={
["clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:26:34: error: atomic constraint must be of type \'bool\' (found \'int\')","clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:75:34: error: atomic constraint must be of type \'bool\' (found \'int\')"}
}
},
},
["err_non_c_like_anon_struct_in_typedef"]={
["err_invalid_property_name"]={
[c]={{nil,x,"err_non_c_like_anon_struct_in_typedef"}},
[b]="err_invalid_property_name",
[d]={{nil,x,"anonymous non-C-compatible type given name for linkage purposes by %select{typedef|alias}0 declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"}},
[i]="%0 is not a valid property name (accessing an object of type %1)",
[e]={{nil,x,{"anonymous non-C-compatible type given name for linkage purposes by ",{yb,"alias"}," declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"}}},
[j]="A is not a valid property name (accessing an object of type B)",
[f]=k,
[h]=k,
[g]="anonymous non\\-C\\-compatible type given name for linkage purposes by (?:typedef|alias) declaration after its linkage was computed; add a tag name here to establish linkage prior to definition",
[c]="(.*?) is not a valid property name \\(accessing an object of type (.*?)\\)",
[h]=a,
[f]=a,
[i]={{nil,x,m}},
[e]=m,
[b]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling","[OpenMP][Part 2] Use reusable OpenMP context/traits handling\n\nThis patch implements an almost complete handling of OpenMP\ncontexts/traits such that we can reuse most of the logic in Flang\nthrough the OMPContext.{h,cpp} in llvm/Frontend/OpenMP.\n\nAll but construct SIMD specifiers, e.g., inbranch, and the device ISA\nselector are define in `llvm/lib/Frontend/OpenMP/OMPKinds.def`. From\nthese definitions we generate the enum classes `TraitSet`,\n`TraitSelector`, and `TraitProperty` as well as conversion and helper\nfunctions in `llvm/lib/Frontend/OpenMP/OMPContext.{h,cpp}`.\n\nThe above enum classes are used in the parser, sema, and the AST\nattribute. The latter is not a collection of multiple primitive variant\narguments that contain encodings via numbers and strings but instead a\ntree that mirrors the `match` clause (see `struct OpenMPTraitInfo`).\n\nThe changes to the parser make it more forgiving when wrong syntax is\nread and they also resulted in more specialized diagnostics. The tests\nare updated and the core issues are detected as before. Here and\nelsewhere this patch tries to be generic, thus we do not distinguish\nwhat selector set, selector, or property is parsed except if they do\nbehave exceptionally, as for example `user={condition(EXPR)}` does.\n\nThe sema logic changed in two ways: First, the OMPDeclareVariantAttr\nrepresentation changed, as mentioned above, and the sema was adjusted to\nwork with the new `OpenMPTraitInfo`. Second, the matching and scoring\nlogic moved into `OMPContext.{h,cpp}`. It is implemented on a flat\nrepresentation of the `match` clause that is not tied to clang.\n`OpenMPTraitInfo` provides a method to generate this flat structure (see\n`struct VariantMatchInfo`) by computing integer score values and boolean\nuser conditions from the `clang::Expr` we keep for them.\n\nThe OpenMP context is now an explicit object (see `struct OMPContext`).\nThis is in anticipation of construct traits that need to be tracked. The\nOpenMP context, as well as the `VariantMatchInfo`, are basically made up\nof a set of active or respectively required traits, e.g., \'host\', and an\nordered container of constructs which allows duplication. Matching and\nscoring is kept as generic as possible to allow easy extension in the\nfuture.\n\n---\n\nTest changes:\n\nThe messages checked in `OpenMP/declare_variant_messages.{c,cpp}` have\nbeen auto generated to match the new warnings and notes of the parser.\nThe \"subset\" checks were reversed causing the wrong version to be\npicked. The tests have been adjusted to correct this.\nWe do not print scores if the user did not provide one.\nWe print spaces to make lists in the `match` clause more legible.\n\nReviewers: kiranchandramohan, ABataev, RaviNarayanaswamy, gtbercea, grokos, sdmitriev, JonChesterfield, hfinkel, fghanim\n\nSubscribers: merge_guards_bot, rampitec, mgorny, hiraditya, aheejin, fedor.sergeev, simoncook, bollu, guansong, dexonsmith, jfb, s.egerton, llvm-commits, cfe-commits\n\nTags: #clang, #llvm\n\nDifferential Revision: https://reviews.llvm.org/D71830"},
[g]={"d645931066c1",1303323595,"Fix a crash-on-invalid involving non-identifier names in a member","Fix a crash-on-invalid involving non-identifier names in a member\naccess expression that appears to be a property reference. Fixes\n<rdar://problem/8985943>.\n\nllvm-svn: 129865"},
[j]={{o,5017,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n  // ...\n  if (NonCLike || ChangesLinkage) {\n    // ...\n    if (ChangesLinkage) {\n      // If the linkage changes, we can\'t accept this as an extension.\n      if (NonCLike.Kind == NonCLikeKind::None)\n      // ...\n      else\n        DiagID = diag::err_non_c_like_anon_struct_in_typedef;"}},
[d]={{bb,1985,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  if (!MemberName.isIdentifier()) {\n    Diag(MemberLoc, diag::err_invalid_property_name) << MemberName << QualType(OPT, 0);"}},
[l]={
[l]={
["clang/test/SemaCXX/linkage2.cpp"]={"clang/test/SemaCXX/linkage2.cpp:250:17: error: anonymous non-C-compatible type given name for linkage purposes by typedef declaration after its linkage was computed; add a tag name here to establish linkage prior to definition"}
["clang/test/SemaObjCXX/propert-dot-error.mm"]={"clang/test/SemaObjCXX/propert-dot-error.mm:49:5: error: \'operator+\' is not a valid property name (accessing an object of type \'B *\')"}
}
}
},
},
["err_non_constant_constraint_expression"]={
["err_invalid_protocol_qualifiers"]={
[c]={{nil,n,"err_non_constant_constraint_expression"}},
[b]="err_invalid_protocol_qualifiers",
[d]={{nil,n,"substitution into constraint expression resulted in a non-constant expression"}},
[i]="invalid protocol qualifiers on non-ObjC type",
[e]={{nil,n,"substitution into constraint expression resulted in a non-constant expression"}},
[j]="invalid protocol qualifiers on non-ObjC type",
[f]=k,
[h]=k,
[g]="substitution into constraint expression resulted in a non\\-constant expression",
[c]="invalid protocol qualifiers on non\\-ObjC type",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]=m,
[b]={"7c11da0cfd33",1567434909,"[clang] New __attribute__((__clang_arm_mve_alias)).","[clang] New __attribute__((__clang_arm_mve_alias)).\n\nThis allows you to declare a function with a name of your choice (say\n`foo`), but have clang treat it as if it were a builtin function (say\n`__builtin_foo`), by writing\n\n  static __inline__ __attribute__((__clang_arm_mve_alias(__builtin_foo)))\n int foo(args);\n\nI\'m intending to use this for the ACLE intrinsics for MVE, which have\nto be polymorphic on their argument types and also need to be\nimplemented by builtins. To avoid having to implement the polymorphism\nwith several layers of nested _Generic and make error reporting\nhideous, I want to make all the user-facing intrinsics correspond\ndirectly to clang builtins, so that after clang resolves\n__attribute__((overloadable)) polymorphism it\'s already holding the\nright BuiltinID for the intrinsic it selected.\n\nHowever, this commit itself just introduces the new attribute, and\ndoesn\'t use it for anything.\n\nTo avoid unanticipated side effects if this attribute is used to make\naliases to other builtins, there\'s a restriction mechanism: only\n(BuiltinID, alias) pairs that are approved by the function\nArmMveAliasValid() will be permitted. At present, that function\ndoesn\'t permit anything, because the Tablegen that will generate its\nlist of valid pairs isn\'t yet implemented. So the only test of this\nfacility is one that checks that an unapproved builtin _can\'t_ be\naliased.\n\nReviewers: dmgreen, miyuki, ostannard\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D67159"},
[g]={x,1237025389,y,z},
[j]={{"clang/lib/Sema/SemaConcept.cpp",276,"template <typename AtomicEvaluator> static ExprResult calculateConstraintSatisfaction(Sema &S, const Expr *ConstraintExpr, ConstraintSatisfaction &Satisfaction, AtomicEvaluator &&Evaluator) {\n  // ...\n  if (!SubstitutedAtomicExpr.get()->EvaluateAsConstantExpr(EvalResult, S.Context) || !EvaluationDiags.empty()) {\n    // ...\n    S.Diag(SubstitutedAtomicExpr.get()->getBeginLoc(), diag::err_non_constant_constraint_expression) << SubstitutedAtomicExpr.get()->getSourceRange();"}},
[d]={{G,1056,"QualType Sema::BuildObjCTypeParamType(const ObjCTypeParamDecl *Decl, SourceLocation ProtocolLAngleLoc, ArrayRef<ObjCProtocolDecl *> Protocols, ArrayRef<SourceLocation> ProtocolLocs, SourceLocation ProtocolRAngleLoc, bool FailOnError) {\n // ...\n  if (!Protocols.empty()) {\n   // ...\n   if (HasError) {\n     Diag(SourceLocation(), diag::err_invalid_protocol_qualifiers) << SourceRange(ProtocolLAngleLoc, ProtocolRAngleLoc);"},{G,1088,"QualType Sema::BuildObjCObjectType(QualType BaseType, SourceLocation Loc, SourceLocation TypeArgsLAngleLoc, ArrayRef<TypeSourceInfo *> TypeArgs, SourceLocation TypeArgsRAngleLoc, SourceLocation ProtocolLAngleLoc, ArrayRef<ObjCProtocolDecl *> Protocols, ArrayRef<SourceLocation> ProtocolLocs, SourceLocation ProtocolRAngleLoc, bool FailOnError, bool Rebuilding) {\n  // ...\n  if (!Protocols.empty()) {\n    // ...\n    if (HasError) {\n      Diag(Loc, diag::err_invalid_protocol_qualifiers) << SourceRange(ProtocolLAngleLoc, ProtocolRAngleLoc);"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp:29:14: error: substitution into constraint expression resulted in a non-constant expression"}
["clang/test/SemaObjC/protocol-archane.m"]={"clang/test/SemaObjC/protocol-archane.m:30:1: error: invalid protocol qualifiers on non-ObjC type"}
}
}
},
},
["err_non_consteval_override"]={
["err_invalid_qualified_constructor"]={
[c]={{nil,x,"err_non_consteval_override"}},
[b]="err_invalid_qualified_constructor",
[d]={{nil,x,"non-consteval function %0 cannot override a consteval function"}},
[i]="\'%0\' qualifier is not allowed on a constructor",
[e]={{nil,x,"non-consteval function A cannot override a consteval function"}},
[j]="\'A\' qualifier is not allowed on a constructor",
[f]=k,
[h]=k,
[g]="non\\-consteval function (.*?) cannot override a consteval function",
[c]="\'(.*?)\' qualifier is not allowed on a constructor",
[h]=a,
[f]=a,
[i]={{nil,x,m}},
[e]=m,
[b]={Hb,1576908663,Gb,Fb},
[g]={S,1236199783,R,Q},
[j]={{Q,7041,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///       parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  // Perform checks that can\'t be done until we know all the properties of a\n  // member function (whether it\'s defaulted, deleted, virtual, overriding,\n  // ...).\n  auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n    // ...\n    if (ReportOverrides(*this, MD->isConsteval() ? diag::err_consteval_override : diag::err_non_consteval_override, MD, [&](const CXXMethodDecl *V) { return MD->isConsteval() != V->isConsteval(); })) {"}},
[d]={{t,10741,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor 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 invalid bit to true. In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  // ...\n  checkMethodTypeQualifiers(*this, D, diag::err_invalid_qualified_constructor);"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:460:10: error: non-consteval function \'f\' cannot override a consteval function","clang/test/SemaCXX/cxx2a-consteval.cpp:472:28: error: non-consteval function \'operator==\' cannot override a consteval function"}
["clang/test/SemaCXX/constructor.cpp"]={"clang/test/SemaCXX/constructor.cpp:16:13: error: \'const\' qualifier is not allowed on a constructor"}
}
}
},
},
["err_non_default_visibility_dllimport"]={
["err_invalid_qualified_destructor"]={
[c]={{nil,p,"err_non_default_visibility_dllimport"}},
[b]="err_invalid_qualified_destructor",
[d]={{nil,p,"non-default visibility cannot be applied to \'dllimport\' declaration"}},
[i]="\'%0\' qualifier is not allowed on a destructor",
[e]={{nil,p,"non-default visibility cannot be applied to \'dllimport\' declaration"}},
[j]="\'A\' qualifier is not allowed on a destructor",
[f]=k,
[h]=k,
[g]="non\\-default visibility cannot be applied to \'dllimport\' declaration",
[c]="\'(.*?)\' qualifier is not allowed on a destructor",
[h]=a,
[f]=a,
[i]={{nil,p,w}},
[e]=m,
[b]={"6f9c4851ab7c",1663023396,"[MinGW] Reject explicit hidden visibility applied to dllexport and hidden/protected applied to dllim...","[MinGW] Reject explicit hidden visibility applied to dllexport and hidden/protected applied to dllimport\n\nHidden visibility is incompatible with dllexport.\nHidden and protected visibilities are incompatible with dllimport.\n(PlayStation uses dllexport protected.)\n\nWhen an explicit visibility attribute applies on a dllexport/dllimport\ndeclaration, report a Frontend error (Sema does not compute visibility).\n\nReviewed By: mstorsjo\n\nDifferential Revision: https://reviews.llvm.org/D133266"},
[g]={S,1236199783,R,Q},
[j]={{"clang/lib/CodeGen/CodeGenModule.cpp",1388,"void CodeGenModule::setGlobalVisibility(llvm::GlobalValue *GV, const NamedDecl *D) const {\n // ...\n  if (GV->hasDLLExportStorageClass() || GV->hasDLLImportStorageClass()) {\n   // ...\n    if (GV->hasDLLExportStorageClass()) {\n   // ...\n   } else if (LV.getVisibility() != DefaultVisibility) {\n      getDiags().Report(D->getLocation(), diag::err_non_default_visibility_dllimport);"}}
[d]={{t,10918,"/// 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 checkMethodTypeQualifiers(*this, D, diag::err_invalid_qualified_destructor);"}}
},
},
["err_non_deleted_override"]={
["err_invalid_qualified_function_type"]={
[c]="err_non_deleted_override",
[b]="err_invalid_qualified_function_type",
[d]="non-deleted function %0 cannot override a deleted function",
[i]="%select{static |non-}0member function %select{of type %2 |}1cannot have \'%3\' qualifier",
[e]="non-deleted function A cannot override a deleted function",
[j]={{nil,E,{{"non-member function","static member function","deduction guide"},jb,{"of type C ",a},"cannot have \'D\' qualifier"}},{nil,nil,{{"static ","non-"},"member function ",{"of type C ",a},"cannot have \'D\' qualifier"}}},
[f]=k,
[h]=k,
[g]="non\\-deleted function (.*?) cannot override a deleted function",
[c]="(?:non\\-member function|static member function|deduction guide) (?:of type (.*?) |)cannot have \'(.*?)\' qualifier",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"7e414261f647",1350434878,"Implement C++ 10.3p16 - overrides involving deleted functions must match.","Implement C++ 10.3p16 - overrides involving deleted functions must match.\n\nOnly deleted functions may override deleted functions and non-deleted functions\nmay only override non-deleted functions.\n\nllvm-svn: 166082"},
[g]={x,1237025389,y,z},
[j]={{Q,7027,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n // ...\n // Perform checks that can\'t be done until we know all the properties of a\n // member function (whether it\'s defaulted, deleted, virtual, overriding,\n // ...).\n auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n   // ...\n   if (ReportOverrides(*this, MD->isDeleted() ? diag::err_deleted_override : diag::err_non_deleted_override, MD, [&](const CXXMethodDecl *V) { return MD->isDeleted() != V->isDeleted(); })) {"}},
[d]={{G,5852,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n if (LangOpts.CPlusPlus && T->isFunctionType()) {\n    // ...\n   // C++11 [dcl.fct]p6 (w/DR1417):\n    // An attempt to specify a function type with a cv-qualifier-seq or a\n   // ref-qualifier (including by typedef-name) is ill-formed unless it is:\n    //  - the function type for a non-static member function,\n   // - the function type to which a pointer to member refers,\n   // - the top-level function type of a function typedef declaration or\n    //   alias-declaration,\n   // - the type-id in the default argument of a type-parameter, or\n   // - the type-id of a template-argument for a type-parameter\n   //\n    // FIXME: Checking this here is insufficient. We accept-invalid on:\n   //\n   //   template<typename T> struct S { void f(T); };\n   //   S<int() const> s;\n    //\n   // ... for instance.\n   if (IsQualifiedFunction && !(Kind == Member && D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_static) && !IsTypedefName && D.getContext() != DeclaratorContext::TemplateArg && D.getContext() != DeclaratorContext::TemplateTypeArg) {\n     // ...\n     S.Diag(Loc, diag::err_invalid_qualified_function_type) << Kind << D.isFunctionDeclarator() << T << getFunctionQualifiersAsString(FnTy) << FixItHint::CreateRemoval(RemovalRange);"}},
[l]={
[l]={
["clang/test/CXX/class.derived/class.abstract/p16.cpp"]={"clang/test/CXX/class.derived/class.abstract/p16.cpp:10:16: error: non-deleted function \'b\' cannot override a deleted function"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:5:10: error: non-member function cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:6:1: error: non-member function of type \'F\' (aka \'void () const\') cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:10:19: error: non-member function cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:11:19: error: static member function cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:13:3: error: non-member function of type \'F\' (aka \'void () const\') cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:14:3: error: static member function of type \'F\' (aka \'void () const\') cannot have \'const\' qualifier","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p6.cpp:19:21: error: non-member function cannot have \'const\' qualifier"}
}
}
},
},
["err_non_designated_init_used"]={
["err_invalid_receiver_class_message"]={
[c]={{nil,s,"err_non_designated_init_used"}},
[b]="err_invalid_receiver_class_message",
[d]={{nil,s,"a randomized struct can only be initialized with a designated initializer"}},
[i]="receiver type %0 is not an Objective-C class",
[e]={{nil,s,"a randomized struct can only be initialized with a designated initializer"}},
[j]="receiver type A is not an Objective-C class",
[f]=k,
[h]=k,
[g]="a randomized struct can only be initialized with a designated initializer",
[c]="receiver type (.*?) is not an Objective\\-C class",
[h]=a,
[f]=a,
[i]={{nil,s,w}},
[e]=m,
[b]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[g]={"0c78ad96653c",1271879840,"Rework the Parser-Sema interaction for Objective-C message","Rework the Parser-Sema interaction for Objective-C message\nsends. Major changes include:\n\n  - Expanded the interface from two actions (ActOnInstanceMessage,\n    ActOnClassMessage), where ActOnClassMessage also handled sends to\n   \"super\" by checking whether the identifier was \"super\", to three\n    actions (ActOnInstanceMessage, ActOnClassMessage,\n    ActOnSuperMessage). Code completion has the same changes.\n  - The parser now resolves the type to which we are sending a class\n    message, so ActOnClassMessage now accepts a TypeTy* (rather than\n    an IdentifierInfo *). This opens the door to more interesting\n    types (for Objective-C++ support).\n  - Split ActOnInstanceMessage and ActOnClassMessage into parser\n    action functions (with their original names) and semantic\n    functions (BuildInstanceMessage and BuildClassMessage,\n    respectively). At present, this split is onyl used by\n   ActOnSuperMessage, which decides which kind of super message it\n    has and forwards to the appropriate Build*Message. In the future,\n    Build*Message will be used by template instantiation.\n  - Use getObjCMessageKind() within the disambiguation of Objective-C\n    message sends vs. array designators.\n\nTwo notes about substandard bits in this patch:\n  - There is some redundancy in the code in ParseObjCMessageExpr and\n  ParseInitializerWithPotentialDesignator; this will be addressed\n  shortly by centralizing the mapping from identifiers to type names\n  for the message receiver.\n  - There is some #if 0\'d code that won\'t likely ever be used---it\n  handles the use of \'super\' in methods whose class does not have a\n  superclass---but could be used to model GCC\'s behavior more\n  closely. This code will die in my next check-in, but I want it in\n  Subversion.\n\nllvm-svn: 102021"},
[j]={{"clang/lib/Sema/SemaInit.cpp",2320,"void InitListChecker::CheckStructUnionTypes(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, CXXRecordDecl::base_class_const_range Bases, RecordDecl::field_iterator Field, bool SubobjectIsDesignatorContext, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool TopLevelObject) {\n  // ...\n  while (Index < IList->getNumInits()) {\n    // ...\n    // Don\'t allow non-designated initializers on randomized structures.\n    if (RD->isRandomized() && !IsZeroInitializer(Init)) {\n     if (!VerifyOnly)\n        SemaRef.Diag(InitLoc, diag::err_non_designated_init_used);"}},
[d]={{bb,2648,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // ...\n  if (!ClassType || !(Class = ClassType->getInterface())) {\n   Diag(Loc, diag::err_invalid_receiver_class_message) << ReceiverType;"}},
[l]={
[l]={
["clang/test/Sema/init-randomized-struct.c"]={"clang/test/Sema/init-randomized-struct.c:41:30: error: a randomized struct can only be initialized with a designated initializer","clang/test/Sema/init-randomized-struct.c:52:26: error: a randomized struct can only be initialized with a designated initializer","clang/test/Sema/init-randomized-struct.c:53:59: error: a randomized struct can only be initialized with a designated initializer"}
["clang/test/SemaObjC/invalid-receiver.m"]={"clang/test/SemaObjC/invalid-receiver.m:8:4: error: receiver type \'NotAClass\' (aka \'struct NotAClass\') is not an Objective-C class"}
}
}
},
},
["err_non_extern_extern"]={
["err_invalid_receiver_to_message_super"]={
[c]="err_non_extern_extern",
[b]="err_invalid_receiver_to_message_super",
[d]="non-extern declaration of %0 follows extern declaration",
[i]="\'super\' is only valid in a method body",
[e]="non-extern declaration of A follows extern declaration",
[j]="\'super\' is only valid in a method body",
[f]=k,
[h]=k,
[g]="non\\-extern declaration of (.*?) follows extern declaration",
[c]="\'super\' is only valid in a method body",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"819f61094216",1296457486,"Diagnose if extern local variable is followed by non-extern and vice-versa.","Diagnose if extern local variable is followed by non-extern and vice-versa.\n\nllvm-svn: 124579"},
[g]={"a36ec4243bea",1270974494,"fix PR6811 by not parsing \'super\' as a magic expression in","fix PR6811 by not parsing \'super\' as a magic expression in\nLookupInObjCMethod.  Doing so allows all sorts of invalid code\nto slip through to codegen.  This patch does not change the \nAST representation of super, though that would now be a natural\nthing to do since it can only be in the receiver position and\nin the base of a ObjCPropertyRefExpr.\n\nThere are still several ugly areas handling super in the parser,\nbut this is definitely a step in the right direction.\n\nllvm-svn: 100959"},
[j]={{o,4667,"/// 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  if (Old->hasLinkage() && New->isLocalVarDeclOrParm() && !New->hasExternalStorage()) {\n   Diag(New->getLocation(), diag::err_non_extern_extern) << New->getDeclName();"}},
[d]={{bb,2391,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n  // ...\n  if (!Method) {\n    Diag(SuperLoc, diag::err_invalid_receiver_to_message_super);"}}
},
["err_invalid_reference_qualifier_application"]={
[b]="err_invalid_reference_qualifier_application",
[i]="\'%0\' qualifier may not be applied to a reference",
[j]="\'A\' qualifier may not be applied to a reference",
[h]=k,
[c]="\'(.*?)\' qualifier may not be applied to a reference",
[f]=a,
[e]=C,
[g]={S,1236199783,R,Q},
[d]={{P,6286,"/// 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    // C++ 8.3.2p1: cv-qualified references are ill-formed except when the\n    // cv-qualifiers are introduced through the use of a typedef or of a\n    // template type argument, in which case the cv-qualifiers are ignored.\n    if (DS.getTypeQualifiers() != DeclSpec::TQ_unspecified) {\n      if (DS.getTypeQualifiers() & DeclSpec::TQ_const)\n        Diag(DS.getConstSpecLoc(), diag::err_invalid_reference_qualifier_application) << \"const\";"},{P,6289,"/// 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    // C++ 8.3.2p1: cv-qualified references are ill-formed except when the\n    // cv-qualifiers are introduced through the use of a typedef or of a\n   // template type argument, in which case the cv-qualifiers are ignored.\n    if (DS.getTypeQualifiers() != DeclSpec::TQ_unspecified) {\n      // ...\n      if (DS.getTypeQualifiers() & DeclSpec::TQ_volatile)\n        Diag(DS.getVolatileSpecLoc(), diag::err_invalid_reference_qualifier_application) << \"volatile\";"},{P,6293,"/// 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    // C++ 8.3.2p1: cv-qualified references are ill-formed except when the\n    // cv-qualifiers are introduced through the use of a typedef or of a\n    // template type argument, in which case the cv-qualifiers are ignored.\n    if (DS.getTypeQualifiers() != DeclSpec::TQ_unspecified) {\n      // ...\n      // \'restrict\' is permitted as an extension.\n      if (DS.getTypeQualifiers() & DeclSpec::TQ_atomic)\n       Diag(DS.getAtomicSpecLoc(), diag::err_invalid_reference_qualifier_application) << \"_Atomic\";"}},
[l]={
[l]={
["clang/test/Sema/private-extern.c"]={"clang/test/Sema/private-extern.c:34:7: error: non-extern declaration of \'g8\' follows extern declaration","clang/test/Sema/private-extern.c:39:7: error: non-extern declaration of \'g9\' follows extern declaration"}
["clang/test/SemaCXX/atomic-type.cpp"]={"clang/test/SemaCXX/atomic-type.cpp:56:14: error: \'_Atomic\' qualifier may not be applied to a reference"}
}
}
},
},
["err_non_first_default_compare_deletes"]={
["err_invalid_saturation_spec"]={
[c]={{nil,n,"err_non_first_default_compare_deletes"}},
[b]={{nil,A,"err_invalid_saturation_spec"}},
[d]={{nil,n,"defaulting %select{this %select{<ERROR>|equality|three-way|equality|relational}1 comparison operator|the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'}0 would delete it after its first declaration"}},
[i]={{nil,A,"\'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'%0\'"}},
[e]={{nil,n,{"defaulting ",{{"this ",{"equality","three-way","equality","relational"}," comparison operator"},"the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'"}," would delete it after its first declaration"}}},
[j]={{nil,A,"\'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'A\'"}},
[f]=k,
[h]=k,
[g]="defaulting (?:this (?:equality|three\\-way|equality|relational) comparison operator|the corresponding implicit \'operator\\=\\=\' for this defaulted \'operator\\<\\=\\>\') would delete it after its first declaration",
[c]="\'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'(.*?)\'",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]={{nil,A,m}},
[b]={"5253d9138eb3",1573070592,"[c++20] Determine whether a defaulted comparison should be deleted or","[c++20] Determine whether a defaulted comparison should be deleted or\nconstexpr."},
[g]={"ab80f3c8b71e",1528988031,"[Fixed Point Arithmetic] Addition of the remaining fixed point types and their saturated equivalents","[Fixed Point Arithmetic] Addition of the remaining fixed point types and their saturated equivalents\n\nThis diff includes changes for the remaining _Fract and _Sat fixed point types.\n\n```\nsigned short _Fract s_short_fract;\nsigned _Fract s_fract;\nsigned long _Fract s_long_fract;\nunsigned short _Fract u_short_fract;\nunsigned _Fract u_fract;\nunsigned long _Fract u_long_fract;\n\n// Aliased fixed point types\nshort _Accum short_accum;\n_Accum accum;\nlong _Accum long_accum;\nshort _Fract short_fract;\n_Fract fract;\nlong _Fract long_fract;\n\n// Saturated fixed point types\n_Sat signed short _Accum sat_s_short_accum;\n_Sat signed _Accum sat_s_accum;\n_Sat signed long _Accum sat_s_long_accum;\n_Sat unsigned short _Accum sat_u_short_accum;\n_Sat unsigned _Accum sat_u_accum;\n_Sat unsigned long _Accum sat_u_long_accum;\n_Sat signed short _Fract sat_s_short_fract;\n_Sat signed _Fract sat_s_fract;\n_Sat signed long _Fract sat_s_long_fract;\n_Sat unsigned short _Fract sat_u_short_fract;\n_Sat unsigned _Fract sat_u_fract;\n_Sat unsigned long _Fract sat_u_long_fract;\n\n// Aliased saturated fixed point types\n_Sat short _Accum sat_short_accum;\n_Sat _Accum sat_accum;\n_Sat long _Accum sat_long_accum;\n_Sat short _Fract sat_short_fract;\n_Sat _Fract sat_fract;\n_Sat long _Fract sat_long_fract;\n```\n\nThis diff only allows for declaration of these fixed point types. Assignment and other operations done on fixed point types according to http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1169.pdf will be added in future patches.\n\nDifferential Revision: https://reviews.llvm.org/D46911\n\nllvm-svn: 334718"},
[j]={{Q,8889,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (!First) {\n   if (Info.Deleted) {\n     // ...\n      Diag(FD->getLocation(), diag::err_non_first_default_compare_deletes) << FD->isImplicit() << (int)DCK;"}},
[d]={{G,1783,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  // ...\n  // Only fixed point types can be saturated\n if (DS.isTypeSpecSat() && !IsFixedPointType)\n   S.Diag(DS.getTypeSpecSatLoc(), diag::err_invalid_saturation_spec) << DS.getSpecifierName(DS.getTypeSpecType(), Context.getPrintingPolicy());"}},
[l]={
[l]={
["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:147:15: error: defaulting this equality comparison operator would delete it after its first declaration","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:149:15: error: defaulting this three-way comparison operator would delete it after its first declaration"}
["clang/test/Frontend/fixed_point_errors.c"]={"clang/test/Frontend/fixed_point_errors.c:74:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'float\'","clang/test/Frontend/fixed_point_errors.c:75:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'double\'","clang/test/Frontend/fixed_point_errors.c:76:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'_Bool\'","clang/test/Frontend/fixed_point_errors.c:77:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'char\'","clang/test/Frontend/fixed_point_errors.c:78:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'int\'","clang/test/Frontend/fixed_point_errors.c:132:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'type-name\'","clang/test/Frontend/fixed_point_errors.c:133:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'type-name\'","clang/test/Frontend/fixed_point_errors.c:134:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'type-name\'","clang/test/Frontend/fixed_point_errors.c:135:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'type-name\'","clang/test/Frontend/fixed_point_errors.c:136:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'type-name\'","clang/test/Frontend/fixed_point_errors.c:137:1: error: \'_Sat\' specifier is only valid on \'_Fract\' or \'_Accum\', not \'type-name\'"}
}
}
},
},
["err_non_first_default_compare_in_class"]={
["err_invalid_sign_spec"]={
[c]={{nil,p,"err_non_first_default_compare_in_class"}},
[b]="err_invalid_sign_spec",
[d]={{nil,p,"defaulting this %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator is not allowed because it was already declared outside the class"}},
[i]="\'%0\' cannot be signed or unsigned",
[e]={{nil,p,{"defaulting this ",{"equality","three-way","equality","relational"}," comparison operator is not allowed because it was already declared outside the class"}}},
[j]="\'A\' cannot be signed or unsigned",
[f]=k,
[h]=k,
[g]="defaulting this (?:equality|three\\-way|equality|relational) comparison operator is not allowed because it was already declared outside the class",
[c]="\'(.*?)\' cannot be signed or unsigned",
[h]=a,
[f]=a,
[i]={{nil,p,m}},
[e]=m,
[b]={nc,1625925174,kc,Dc},
[g]={S,1236199783,R,Q},
[j]={{Q,8900,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (!First) {\n    // ...\n    if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) {\n      // ...\n      Diag(FD->getLocation(), diag::err_non_first_default_compare_in_class) << (int)DCK;"}},
[d]={{D,1264,"/// 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  // signed/unsigned are only valid with int/char/wchar_t/_Accum.\n  if (getTypeSpecSign() != TypeSpecifierSign::Unspecified) {\n    if (TypeSpecType == TST_unspecified)\n    // ...\n    else if (TypeSpecType != TST_int && TypeSpecType != TST_int128 && TypeSpecType != TST_char && TypeSpecType != TST_wchar && !IsFixedPointType && TypeSpecType != TST_bitint) {\n      S.Diag(TSSLoc, diag::err_invalid_sign_spec) << getSpecifierName((TST)TypeSpecType, Policy);"}},
[l]={
[l]={
["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:148:15: error: defaulting this equality comparison operator is not allowed because it was already declared outside the class","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:150:15: error: defaulting this relational comparison operator is not allowed because it was already declared outside the class"}
["clang/test/Sema/pr9812.c"]={"clang/test/Sema/pr9812.c:6:10: error: \'bool\' cannot be signed or unsigned","clang/test/Sema/pr9812.c:16:10: error: \'type-name\' cannot be signed or unsigned","clang/test/Sema/pr9812.c:17:11: error: \'_Bool\' cannot be signed or unsigned"}
}
}
},
},
["err_non_local_variable_decl_in_for"]={
["err_invalid_storage_class_in_func_decl"]={
[c]="err_non_local_variable_decl_in_for",
[b]="err_invalid_storage_class_in_func_decl",
[d]="declaration of non-local variable in \'for\' loop",
[i]="invalid storage class specifier in function declarator",
[e]="declaration of non-local variable in \'for\' loop",
[j]="invalid storage class specifier in function declarator",
[f]=k,
[h]=k,
[g]="declaration of non\\-local variable in \'for\' loop",
[c]="invalid storage class specifier in function declarator",
[h]=a,
[f]=a,
[i]=m,
[e]=C,
[b]={"2eb1c57b9daf",1365454344,"<rdar://problem/13540921> Fix a crasher when an Objective-C for-in loop gets a non-variable iteratio...","<rdar://problem/13540921> Fix a crasher when an Objective-C for-in loop gets a non-variable iteration declaration.\n\nllvm-svn: 179053"},
[g]={S,1236199783,R,Q},
[j]={{F,2150,"StmtResult Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, Stmt *First, ConditionResult Second, FullExprArg third, SourceLocation RParenLoc, Stmt *Body) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n    if (DeclStmt *DS = dyn_cast_or_null<DeclStmt>(First)) {\n      // ...\n     for (auto *DI : DS->decls()) {\n       if (VarDecl *VD = dyn_cast<VarDecl>(DI)) {\n         // ...\n         if (VD->isLocalVarDecl() && !VD->hasLocalStorage()) {\n           Diag(DI->getLocation(), diag::err_non_local_variable_decl_in_for);"},{F,2308,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  // ...\n  if (First) {\n   // ...\n   if (DeclStmt *DS = dyn_cast<DeclStmt>(First)) {\n     // ...\n     // C99 6.8.5p3: The declaration part of a \'for\' statement shall only\n      // declare identifiers for objects having storage class \'auto\' or\n      // \'register\'.\n      if (!D->hasLocalStorage())\n       return StmtError(Diag(D->getLocation(), diag::err_non_local_variable_decl_in_for));"}},
[d]={{cb,1531,"/// ParseKNRParamDeclarations - Parse \'declaration-list[opt]\' which provides\n/// types for a function with a K&R-style identifier list for arguments.\nvoid Parser::ParseKNRParamDeclarations(Declarator &D) {\n  // ...\n  // Read all the argument declarations.\n  while (isDeclarationSpecifier(ImplicitTypenameContext::No)) {\n    // ...\n    // C99 6.9.1p6: Declarations shall contain no storage-class specifiers other\n    // than register.\n    if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified && DS.getStorageClassSpec() != DeclSpec::SCS_register) {\n      Diag(DS.getStorageClassSpecLoc(), diag::err_invalid_storage_class_in_func_decl);"},{cb,1536,"/// ParseKNRParamDeclarations - Parse \'declaration-list[opt]\' which provides\n/// types for a function with a K&R-style identifier list for arguments.\nvoid Parser::ParseKNRParamDeclarations(Declarator &D) {\n // ...\n  // Read all the argument declarations.\n  while (isDeclarationSpecifier(ImplicitTypenameContext::No)) {\n   // ...\n   if (DS.getThreadStorageClassSpec() != DeclSpec::TSCS_unspecified) {\n     Diag(DS.getThreadStorageClassSpecLoc(), diag::err_invalid_storage_class_in_func_decl);"},{p,14747,"/// 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 } else if (getLangOpts().CPlusPlus && DS.getStorageClassSpec() == DeclSpec::SCS_auto) {\n // ...\n } else if (DS.getStorageClassSpec() != DeclSpec::SCS_unspecified) {\n   Diag(DS.getStorageClassSpecLoc(), diag::err_invalid_storage_class_in_func_decl);"}},
[l]={
[l]={
["clang/test/Sema/for.c"]={"clang/test/Sema/for.c:6:34: error: declaration of non-local variable in \'for\' loop","clang/test/Sema/for.c:11:48: error: declaration of non-local variable in \'for\' loop"}
["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:29:26: error: invalid storage class specifier in function declarator"}
}
}
},
},
["err_non_static_static"]={
["err_invalid_string_udl"]={
[c]="err_non_static_static",
[b]="err_invalid_string_udl",
[d]="non-static declaration of %0 follows static declaration",
[i]="string literal with user-defined suffix cannot be used here",
[e]="non-static declaration of A follows static declaration",
[j]="string literal with user-defined suffix cannot be used here",
[f]=k,
[h]=k,
[g]="non\\-static declaration of (.*?) follows static declaration",
[c]="string literal with user\\-defined suffix cannot be used here",
[h]=a,
[f]=a,
[i]=m,
[e]=O,
[b]={ib,1237025389,fb,gb},
[g]={"d67aea28f6cb",1331004107,"User-defined literals: reject string and character UDLs in all places where the","User-defined literals: reject string and character UDLs in all places where the\ngrammar requires a string-literal and not a user-defined-string-literal. The\ntwo constructs are still represented by the same TokenKind, in order to prevent\na combinatorial explosion of different kinds of token. A flag on Token tracks\nwhether a ud-suffix is present, in order to prevent clients from needing to look\nat the token\'s spelling.\n\nllvm-svn: 152098"},
[j]={{o,4653,"/// 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  // C99 6.2.2p4:\n  //   For an identifier declared with the storage-class specifier\n  //   extern in a scope in which a prior declaration of that\n  //   identifier is visible,23) if the prior declaration specifies\n //   internal or external linkage, the linkage of the identifier at\n  //   the later declaration is the same as the linkage specified at\n  //   the prior declaration. If no prior declaration is visible, or\n //   if the prior declaration specifies no linkage, then the\n  //   identifier has external linkage.\n  if (New->hasExternalStorage() && Old->hasLinkage())\n  // ...\n  else if (New->getCanonicalDecl()->getStorageClass() != SC_Static && !New->isStaticDataMember() && Old->getCanonicalDecl()->getStorageClass() == SC_Static) {\n    Diag(New->getLocation(), diag::err_non_static_static) << New->getDeclName();"}},
[d]={{"clang/lib/Lex/ModuleMap.cpp",1656,"retry:\n  // ...\n  case tok::string_literal: {\n    if (LToken.hasUDSuffix()) {\n      Diags.Report(LToken.getLocation(), diag::err_invalid_string_udl);"},{"clang/lib/Lex/PPDirectives.cpp",1440,"/// 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 the StrTok is \"eod\", then it wasn\'t presentOtherwise, 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   Diag(StrTok, diag::err_invalid_string_udl);"},{"clang/lib/Lex/PPDirectives.cpp",1591,"/// 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    Diag(StrTok, diag::err_invalid_string_udl);"},{"clang/lib/Lex/PPDirectives.cpp",1681,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\n  // ...\n  if (StrTok.hasUDSuffix()) {\n   Diag(StrTok, diag::err_invalid_string_udl);"},{"clang/lib/Lex/Pragma.cpp",240,"/// Handle_Pragma - Read a _Pragma directive, slice it up, process it, then\n/// return the first token after the directive.  The _Pragma token has just\n/// been read into \'Tok\'.\nvoid Preprocessor::Handle_Pragma(Token &Tok) {\n  // ...\n  if (Tok.hasUDSuffix()) {\n    Diag(Tok, diag::err_invalid_string_udl);"},{"clang/lib/Lex/Pragma.cpp",594,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  // ...\n  if (Tok.hasUDSuffix()) {\n    Diag(Tok, diag::err_invalid_string_udl);"},{"clang/lib/Lex/Preprocessor.cpp",1375,"bool Preprocessor::FinishLexStringLiteral(Token &Result, std::string &String, const char *DiagnosticTag, bool AllowMacroExpansion) {\n  // ...\n  do {\n    // ...\n    if (Result.hasUDSuffix())\n      Diag(Result, diag::err_invalid_string_udl);"},{q,1944,"ExprResult Sema::ActOnUnevaluatedStringLiteral(ArrayRef<Token> StringToks) {\n  // ...\n  if (!Literal.getUDSuffix().empty()) {\n    // ...\n    return ExprError(Diag(UDSuffixLoc, diag::err_invalid_string_udl));"},{q,2031,"/// ActOnStringLiteral - The specified tokens were lexed as pasted string\n/// fragments (e.g. \"foo\" \"bar\" L\"baz\").  The result string has to handle string\n/// concatenation ([C99 5.1.1.2, translation phase #6]), so it may come from\n/// multiple tokens.  However, the common case is that StringToks points to one\n/// string.\n///\nExprResult Sema::ActOnStringLiteral(ArrayRef<Token> StringToks, Scope *UDLScope) {\n  // ...\n  // Make sure we\'re allowed user-defined literals here.\n  if (!UDLScope)\n    return ExprError(Diag(UDSuffixLoc, diag::err_invalid_string_udl));"}},
[l]={
[l]={
["clang/test/Sema/warn-shadow.c"]={"clang/test/Sema/warn-shadow.c:85:7: error: non-static declaration of \'i\' follows static declaration"}
["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:6:9: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:7:5: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:8:8: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:9:9: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:10:22: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:11:1: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:12:17: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:13:20: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:14:19: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:18:13: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:21:23: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:24:26: error: string literal with user-defined suffix cannot be used here","clang/test/Parser/cxx11-user-defined-literals.cpp:26:81: error: string literal with user-defined suffix cannot be used here"}
}
}
},
},
["err_non_template_in_member_template_id_suggest"]={
["err_invalid_suffix_constant"]={
[c]={{nil,r,"err_non_template_in_member_template_id_suggest"}},
[b]="err_invalid_suffix_constant",
[d]={{nil,r,"member %0 of %1 is not a template; did you mean %select{|simply }2%3?"}},
[i]={{nil,o,"invalid suffix \'%0\' on %select{integer|floating|fixed-point}1 constant"},{F,nil,"invalid suffix \'%0\' on %select{integer|floating}1 constant"}},
[e]={{nil,r,{"member A of B is not a template; did you mean ",{a,"simply "},"D?"}}},
[j]={{nil,o,{"invalid suffix \'A\' on ",{"integer","floating","fixed-point"}," constant"}},{F,nil,{"invalid suffix \'A\' on ",{"integer","floating"}," constant"}}},
[f]=k,
[h]=k,
[g]="member (.*?) of (.*?) is not a template; did you mean (?:|simply )(.*?)\\?",
[c]="invalid suffix \'(.*?)\' on (?:integer|floating|fixed\\-point) constant",
[h]=a,
[f]=a,
[i]={{nil,r,m}},
[e]=O,
[b]={"42bc73a3f15f",1494383428,"When we see a \'<\' operator, check whether it\'s a probable typo for a template-id.","When we see a \'<\' operator, check whether it\'s a probable typo for a template-id.\n\nThe heuristic that we use here is:\n * the left-hand side must be a simple identifier or a class member access\n * the right-hand side must be \'<\' followed by either a \'>\' or by a type-id that\n   cannot be an expression (in particular, not followed by \'(\' or \'{\')\n * there is a \'>\' token matching the \'<\' token\n\nThe second condition guarantees the expression would otherwise be ill-formed.\n\nIf we\'re confident that the user intended the name before the \'<\' to be\ninterpreted as a template, diagnose the fact that we didn\'t interpret it\nthat way, rather than diagnosing that the template arguments are not valid\nexpressions.\n\nllvm-svn: 302615"},
[g]={"71a51ff10ee1",1447313810,"Use %select to merge two diagnostics that only differ in one word and are emitted in the same place....","Use %select to merge two diagnostics that only differ in one word and are emitted in the same place. NFC\n\nllvm-svn: 252861"},
[j]={{Y,704,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(NameInfo, LookupKind, S, &SS, CCC, CTK_ErrorRecovery, LookupCtx)) {\n    // ...\n    if (ND || Corrected.isKeyword()) {\n      if (LookupCtx) {\n        // ...\n       diagnoseTypo(Corrected, PDiag(diag::err_non_template_in_member_template_id_suggest) << Name << LookupCtx << DroppedSpecifier << SS.getRange(), false);"}},
[d]={{ab,1158,"///      integer-constant: [C99 6.4.4.1]\n///        decimal-constant integer-suffix\n///        octal-constant integer-suffix\n///        hexadecimal-constant integer-suffix\n///        binary-literal integer-suffix [GNU, C++1y]\n///      user-defined-integer-literal: [C++11 lex.ext]\n///        decimal-literal ud-suffix\n///        octal-literal ud-suffix\n///        hexadecimal-literal ud-suffix\n///        binary-literal ud-suffix [GNU, C++1y]\n///      decimal-constant:\n///        nonzero-digit\n///        decimal-constant digit\n///      octal-constant:\n///        0\n///        octal-constant octal-digit\n///      hexadecimal-constant:\n///        hexadecimal-prefix hexadecimal-digit\n///        hexadecimal-constant hexadecimal-digit\n///      hexadecimal-prefix: one of\n///        0x 0X\n///      binary-literal:\n///        0b binary-digit\n///        0B binary-digit\n///        binary-literal binary-digit\n///      integer-suffix:\n///        unsigned-suffix [long-suffix]\n///        unsigned-suffix [long-long-suffix]\n///        long-suffix [unsigned-suffix]\n///        long-long-suffix [unsigned-sufix]\n///      nonzero-digit:\n///        1 2 3 4 5 6 7 8 9\n///      octal-digit:\n///        0 1 2 3 4 5 6 7\n///      hexadecimal-digit:\n///        0 1 2 3 4 5 6 7 8 9\n///        a b c d e f\n///        A B C D E F\n///      binary-digit:\n///        0\n///        1\n///      unsigned-suffix: one of\n///        u U\n///      long-suffix: one of\n///        l L\n///      long-long-suffix: one of\n///        ll LL\n///\n///      floating-constant: [C99 6.4.4.2]\n///        TODO: add rules...\n///\nNumericLiteralParser::NumericLiteralParser(StringRef TokSpelling, SourceLocation TokLoc, const SourceManager &SM, const LangOptions &LangOpts, const TargetInfo &Target, DiagnosticsEngine &Diags) : SM(SM), LangOpts(LangOpts), Diags(Diags), ThisTokBegin(TokSpelling.begin()), ThisTokEnd(TokSpelling.end()) {\n  // ...\n  // \"i\", \"if\", and \"il\" are user-defined suffixes in C++1y.\n  if (s != ThisTokEnd || isImaginary) {\n    // ...\n    if (s != ThisTokEnd) {\n      // ...\n     Diags.Report(Lexer::AdvanceToTokenCharacter(TokLoc, SuffixBegin - ThisTokBegin, SM, LangOpts), diag::err_invalid_suffix_constant) << StringRef(SuffixBegin, ThisTokEnd - SuffixBegin) << (isFixedPointConstant ? 2 : isFPConstant);"}},
[l]={
[l]={
["clang/test/SemaTemplate/typo-template-name.cpp"]={"clang/test/SemaTemplate/typo-template-name.cpp:28:35: error: member \'goo\' of \'InExpr::Derived2\' is not a template; did you mean \'foo\'?"}
["clang/test/Lexer/c2x_digit_separators.c"]={"clang/test/Lexer/c2x_digit_separators.c:9:12: error: invalid suffix \'xff\' on integer constant","clang/test/Lexer/c2x_digit_separators.c:10:11: error: invalid suffix \'x\'ff\' on integer constant","clang/test/Lexer/c2x_digit_separators.c:14:14: error: invalid suffix \'+1\' on integer constant","clang/test/Lexer/c2x_digit_separators.c:25:13: error: invalid suffix \'x\'0.0p0\' on integer constant","clang/test/Lexer/c2x_digit_separators.c:123459:11: error: invalid suffix \'\\u1234\'5\' on integer constant","clang/test/Lexer/c2x_digit_separators.c:123463:11: error: invalid suffix \'\'5\' on integer constant"}
}
}
},
},
["err_non_template_in_template_id"]={
["err_invalid_super_scope"]={
[c]={{nil,r,"err_non_template_in_template_id"}},
[b]="err_invalid_super_scope",
[d]={{nil,r,"%0 does not name a template but is followed by template arguments"}},
[i]="invalid use of \'__super\', this keyword can only be used inside class or member function scope",
[e]={{nil,r,"A does not name a template but is followed by template arguments"}},
[j]="invalid use of \'__super\', this keyword can only be used inside class or member function scope",
[f]=k,
[h]=k,
[g]="(.*?) does not name a template but is followed by template arguments",
[c]="invalid use of \'__super\', this keyword can only be used inside class or member function scope",
[h]=a,
[f]=a,
[i]={{nil,r,m}},
[e]=m,
[b]={"42bc73a3f15f",1494383428,"When we see a \'<\' operator, check whether it\'s a probable typo for a template-id.","When we see a \'<\' operator, check whether it\'s a probable typo for a template-id.\n\nThe heuristic that we use here is:\n * the left-hand side must be a simple identifier or a class member access\n * the right-hand side must be \'<\' followed by either a \'>\' or by a type-id that\n  cannot be an expression (in particular, not followed by \'(\' or \'{\')\n * there is a \'>\' token matching the \'<\' token\n\nThe second condition guarantees the expression would otherwise be ill-formed.\n\nIf we\'re confident that the user intended the name before the \'<\' to be\ninterpreted as a template, diagnose the fact that we didn\'t interpret it\nthat way, rather than diagnosing that the template arguments are not valid\nexpressions.\n\nllvm-svn: 302615"},
[g]={"67860249e064",1411691300,"-ms-extensions: Implement __super scope specifier (PR13236).","-ms-extensions: Implement __super scope specifier (PR13236).\n\nWe build a NestedNameSpecifier that records the CXXRecordDecl in which\n__super appeared. Name lookup is performed in all base classes of the\nrecorded CXXRecordDecl. Use of __super is allowed only inside class and\nmember function scope.\n\nllvm-svn: 218484"},
[j]={{Y,719,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // ...\n  Diag(NameInfo.getLoc(), diag::err_non_template_in_template_id) << Name << SourceRange(Less, Greater);"}},
[d]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",334,"bool Sema::ActOnSuperScopeSpecifier(SourceLocation SuperLoc, SourceLocation ColonColonLoc, CXXScopeSpec &SS) {\n  // ...\n  if (!RD) {\n    Diag(SuperLoc, diag::err_invalid_super_scope);"}}
[l]={
["clang/test/SemaTemplate/typo-template-name.cpp"]={"clang/test/SemaTemplate/typo-template-name.cpp:23:33: error: \'foo\' does not name a template but is followed by template arguments"}
}
},
},
["err_non_template_in_template_id_suggest"]={
["err_invalid_this_use"]={
[c]={{nil,r,"err_non_template_in_template_id_suggest"}},
[b]="err_invalid_this_use",
[d]={{nil,r,"%0 does not name a template but is followed by template arguments; did you mean %1?"}},
[i]="invalid use of \'this\' outside of a non-static member function",
[e]={{nil,r,"A does not name a template but is followed by template arguments; did you mean B?"}},
[j]="invalid use of \'this\' outside of a non-static member function",
[f]=k,
[h]=k,
[g]="(.*?) does not name a template but is followed by template arguments; did you mean (.*?)\\?",
[c]="invalid use of \'this\' outside of a non\\-static member function",
[h]=a,
[f]=a,
[i]={{nil,r,m}},
[e]=m,
[b]={"42bc73a3f15f",1494383428,"When we see a \'<\' operator, check whether it\'s a probable typo for a template-id.","When we see a \'<\' operator, check whether it\'s a probable typo for a template-id.\n\nThe heuristic that we use here is:\n * the left-hand side must be a simple identifier or a class member access\n * the right-hand side must be \'<\' followed by either a \'>\' or by a type-id that\n  cannot be an expression (in particular, not followed by \'(\' or \'{\')\n * there is a \'>\' token matching the \'<\' token\n\nThe second condition guarantees the expression would otherwise be ill-formed.\n\nIf we\'re confident that the user intended the name before the \'<\' to be\ninterpreted as a template, diagnose the fact that we didn\'t interpret it\nthat way, rather than diagnosing that the template arguments are not valid\nexpressions.\n\nllvm-svn: 302615"},
[g]={x,1237025389,y,z},
[j]={{Y,709,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(NameInfo, LookupKind, S, &SS, CCC, CTK_ErrorRecovery, LookupCtx)) {\n    // ...\n    if (ND || Corrected.isKeyword()) {\n      if (LookupCtx) {\n      // ...\n      } else {\n        diagnoseTypo(Corrected, PDiag(diag::err_non_template_in_template_id_suggest) << Name, false);"}},
[d]={{I,1398,"ExprResult Sema::ActOnCXXThis(SourceLocation Loc) {\n  // ...\n  if (ThisTy.isNull())\n    return Diag(Loc, diag::err_invalid_this_use);"}},
[l]={
[l]={
["clang/test/SemaTemplate/typo-template-name.cpp"]={"clang/test/SemaTemplate/typo-template-name.cpp:8:21: error: \'typo_first_a\' does not name a template but is followed by template arguments; did you mean \'typo_first_b\'?","clang/test/SemaTemplate/typo-template-name.cpp:13:18: error: \'typo_first_b\' does not name a template but is followed by template arguments; did you mean \'A::typo_first_b\'?","clang/test/SemaTemplate/typo-template-name.cpp:33:5: error: \'foo\' does not name a template but is followed by template arguments; did you mean \'Base::foo\'?","clang/test/SemaTemplate/typo-template-name.cpp:34:5: error: \'foo\' does not name a template but is followed by template arguments; did you mean \'Base::foo\'?","clang/test/SemaTemplate/typo-template-name.cpp:35:5: error: \'foo\' does not name a template but is followed by template arguments; did you mean \'Base::foo\'?"}
["clang/test/CXX/expr/expr.prim/expr.prim.general/p4-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p4-0x.cpp:5:12: error: invalid use of \'this\' outside of a non-static member function","clang/test/CXX/expr/expr.prim/expr.prim.general/p4-0x.cpp:7:18: error: invalid use of \'this\' outside of a non-static member function","clang/test/CXX/expr/expr.prim/expr.prim.general/p4-0x.cpp:10:32: error: invalid use of \'this\' outside of a non-static member function"}
}
}
},
},
["err_non_thread_thread"]={
["err_invalid_thread"]={
[c]="err_non_thread_thread",
[b]="err_invalid_thread",
[d]="non-thread-local declaration of %0 follows thread-local declaration",
[i]="\'%0\' is only allowed on variable declarations",
[e]="non-thread-local declaration of A follows thread-local declaration",
[j]="\'A\' is only allowed on variable declarations",
[f]=k,
[h]=k,
[g]="non\\-thread\\-local declaration of (.*?) follows thread\\-local declaration",
[c]="\'(.*?)\' is only allowed on variable declarations",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers.","Add more thorough/correct checking for invalid __thread specifiers.\n\nllvm-svn: 69542"},
[g]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers.","Add more thorough/correct checking for invalid __thread specifiers.\n\nllvm-svn: 69542"},
[j]={{o,4710,"/// 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  if (New->getTLSKind() != Old->getTLSKind()) {\n    if (!Old->getTLSKind()) {\n   // ...\n   } else if (!New->getTLSKind()) {\n     Diag(New->getLocation(), diag::err_non_thread_thread) << New->getDeclName();"}},
[d]={{p,9685,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())\n    Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_invalid_thread) << DeclSpec::getSpecifierName(TSCS);"},{p,14752,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n if (DeclSpec::TSCS TSCS = DS.getThreadStorageClassSpec())\n   Diag(DS.getThreadStorageClassSpecLoc(), diag::err_invalid_thread) << DeclSpec::getSpecifierName(TSCS);"},{p,18018,"/// HandleField - Analyze a field of a C struct or a C++ data member.\n///\nFieldDecl *Sema::HandleField(Scope *S, RecordDecl *Record, SourceLocation DeclStart, Declarator &D, Expr *BitWidth, InClassInitStyle InitStyle, AccessSpecifier AS) {\n // ...\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())\n   Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_invalid_thread) << DeclSpec::getSpecifierName(TSCS);"},{t,18842,"/// HandleMSProperty - Analyze a __delcspec(property) field of a C++ class.\n///\nMSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record, SourceLocation DeclStart, Declarator &D, Expr *BitWidth, InClassInitStyle InitStyle, AccessSpecifier AS, const ParsedAttr &MSPropertyAttr) {\n  // ...\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())\n    Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_invalid_thread) << DeclSpec::getSpecifierName(TSCS);"},{rb,5204,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n // ...\n if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec())\n   Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_invalid_thread) << DeclSpec::getSpecifierName(TSCS);"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx11-thread-local.cpp"]={"clang/test/SemaCXX/cxx11-thread-local.cpp:13:8: error: non-thread-local declaration of \'d\' follows thread-local declaration"}
["clang/test/SemaCXX/cxx11-thread-local.cpp"]={"clang/test/SemaCXX/cxx11-thread-local.cpp:6:3: error: \'thread_local\' is only allowed on variable declarations"}
}
}
},
},
["err_non_trivial_c_union_in_invalid_context"]={
["err_invalid_token_after_declarator_suggest_equal"]={
[c]={{nil,z,"err_non_trivial_c_union_in_invalid_context"}},
[b]="err_invalid_token_after_declarator_suggest_equal",
[d]={{nil,z,"cannot %select{use type %1 for a function/method parameter|use type %1 for function/method return|default-initialize an object of type %1|declare an automatic variable of type %1|copy-initialize an object of type %1|assign to a variable of type %1|construct an automatic compound literal of type %1|capture a variable of type %1|cannot use volatile type %1 where it causes an lvalue-to-rvalue conversion}3 since it %select{contains|is}2 a union that is non-trivial to %select{default-initialize|destruct|copy}0"}},
[i]="invalid %0 at end of declaration; did you mean \'=\'?",
[e]={{nil,z,{"cannot ",{"use type B for a function/method parameter","use type B for function/method return","default-initialize an object of type B","declare an automatic variable of type B","copy-initialize an object of type B","assign to a variable of type B","construct an automatic compound literal of type B","capture a variable of type B","cannot use volatile type B where it causes an lvalue-to-rvalue conversion"}," since it ",{"contains","is"}," a union that is non-trivial to ",{"default-initialize","destruct","copy"}}}},
[j]="invalid A at end of declaration; did you mean \'=\'?",
[f]=k,
[h]=k,
[g]="cannot (?:use type (.*?) for a function\\/method parameter|use type (.*?) for function\\/method return|default\\-initialize an object of type (.*?)|declare an automatic variable of type (.*?)|copy\\-initialize an object of type (.*?)|assign to a variable of type (.*?)|construct an automatic compound literal of type (.*?)|capture a variable of type (.*?)|cannot use volatile type (.*?) where it causes an lvalue\\-to\\-rvalue conversion) since it (?:contains|is) a union that is non\\-trivial to (?:default\\-initialize|destruct|copy)",
[c]="invalid (.*?) at end of declaration; did you mean \'\\=\'\\?",
[h]=a,
[f]=a,
[i]={{nil,z,m}},
[e]=C,
[b]={"81b03d4a08b1",1562982435,"[Sema] Diagnose default-initialization, destruction, and copying of","[Sema] Diagnose default-initialization, destruction, and copying of\nnon-trivial C union types\n\nThis patch diagnoses uses of non-trivial C unions and structs/unions\ncontaining non-trivial C unions in the following contexts, which require\ndefault-initialization, destruction, or copying of the union objects,\ninstead of disallowing fields of non-trivial types in C unions, which is\nwhat we currently do:\n\n- function parameters.\n- function returns.\n- assignments.\n- compound literals.\n- block captures except capturing of `__block` variables by non-escaping\n  blocks.\n- local and global variable definitions.\n- lvalue-to-rvalue conversions of volatile types.\n\nSee the discussion in https://reviews.llvm.org/D62988 for more background.\n\nrdar://problem/50679094\n\nDifferential Revision: https://reviews.llvm.org/D63753\n\nllvm-svn: 365985"},
[g]={"4972a6dd080f",1327010511,"Extend the error of invalid token after declarations to include fixits for ","Extend the error of invalid token after declarations to include fixits for \n!=, %=, ^=, &=, *=, -=, |=, /=, <<=, <=, >=, and >>= to =.\n\nllvm-svn: 148499"},
[j]={{o,12933,"struct DiagNonTrivalCUnionDefaultInitializeVisitor : DefaultInitializedTypeVisitor<DiagNonTrivalCUnionDefaultInitializeVisitor, void> {\n  // ...\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n   // ...\n   if (RD->isUnion()) {\n      if (OrigLoc.isValid()) {\n        // ...\n       S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context) << 0 << OrigTy << IsUnion << UseContext;"},{o,12998,"struct DiagNonTrivalCUnionDestructedTypeVisitor : DestructedTypeVisitor<DiagNonTrivalCUnionDestructedTypeVisitor, void> {\n  // ...\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n   // ...\n    if (RD->isUnion()) {\n      if (OrigLoc.isValid()) {\n        // ...\n       S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context) << 1 << OrigTy << IsUnion << UseContext;"},{o,13064,"struct DiagNonTrivalCUnionCopyVisitor : CopiedTypeVisitor<DiagNonTrivalCUnionCopyVisitor, false, void> {\n  // ...\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    // ...\n   if (RD->isUnion()) {\n      if (OrigLoc.isValid()) {\n        // ...\n       S.Diag(OrigLoc, diag::err_non_trivial_c_union_in_invalid_context) << 2 << OrigTy << IsUnion << UseContext;"}},
[d]={{cb,2215,"bool Parser::isTokenEqualOrEqualTypo() {\n  // ...\n  case tok::ampequal:            // &=\n  case tok::starequal:          // *=\n case tok::plusequal:          // +=\n case tok::minusequal:          // -=\n case tok::exclaimequal:       // !=\n case tok::slashequal:         // /=\n  case tok::percentequal:        // %=\n  case tok::lessequal:          // <=\n case tok::lesslessequal:      // <<=\n case tok::greaterequal:       // >=\n case tok::greatergreaterequal: // >>=\n  case tok::caretequal:          // ^=\n  case tok::pipeequal:          // |=\n case tok::equalequal:          // ==\n   Diag(Tok, diag::err_invalid_token_after_declarator_suggest_equal) << Kind << FixItHint::CreateReplacement(SourceRange(Tok.getLocation()), \"=\");"}},
[l]={
[l]={
["clang/test/SemaObjC/non-trivial-c-union.m"]={
["clang/test/Parser/cxx0x-condition.cpp"]={"clang/test/Parser/cxx0x-condition.cpp:34:11: error: invalid \'==\' at end of declaration; did you mean \'=\'?"}
[1]="clang/test/SemaObjC/non-trivial-c-union.m:16:4: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
[2]="clang/test/SemaObjC/non-trivial-c-union.m:18:4: error: cannot default-initialize an object of type \'S0\' since it contains a union that is non-trivial to default-initialize",
[3]="clang/test/SemaObjC/non-trivial-c-union.m:20:10: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
[4]="clang/test/SemaObjC/non-trivial-c-union.m:22:11: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to destruct",
[5]="clang/test/SemaObjC/non-trivial-c-union.m:22:11: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to copy",
[6]="clang/test/SemaObjC/non-trivial-c-union.m:22:1: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to destruct",
[7]="clang/test/SemaObjC/non-trivial-c-union.m:22:1: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to copy",
[8]="clang/test/SemaObjC/non-trivial-c-union.m:23:11: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to destruct",
[9]="clang/test/SemaObjC/non-trivial-c-union.m:23:11: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to copy",
[10]="clang/test/SemaObjC/non-trivial-c-union.m:23:1: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to destruct",
[11]="clang/test/SemaObjC/non-trivial-c-union.m:23:1: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to copy",
[12]="clang/test/SemaObjC/non-trivial-c-union.m:26:1: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to destruct",
[13]="clang/test/SemaObjC/non-trivial-c-union.m:26:1: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to copy",
[14]="clang/test/SemaObjC/non-trivial-c-union.m:26:13: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to destruct",
[15]="clang/test/SemaObjC/non-trivial-c-union.m:26:13: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to copy",
[16]="clang/test/SemaObjC/non-trivial-c-union.m:27:1: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to destruct",
[17]="clang/test/SemaObjC/non-trivial-c-union.m:27:1: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to copy",
[18]="clang/test/SemaObjC/non-trivial-c-union.m:27:13: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to destruct",
[19]="clang/test/SemaObjC/non-trivial-c-union.m:27:13: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to copy",
[20]="clang/test/SemaObjC/non-trivial-c-union.m:31:14: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to destruct",
[21]="clang/test/SemaObjC/non-trivial-c-union.m:31:14: error: cannot use type \'U0\' for a function/method parameter since it is a union that is non-trivial to copy",
[22]="clang/test/SemaObjC/non-trivial-c-union.m:31:9: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to destruct",
[23]="clang/test/SemaObjC/non-trivial-c-union.m:31:9: error: cannot use type \'U0\' for function/method return since it is a union that is non-trivial to copy",
[24]="clang/test/SemaObjC/non-trivial-c-union.m:32:14: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to destruct",
[25]="clang/test/SemaObjC/non-trivial-c-union.m:32:14: error: cannot use type \'S0\' for a function/method parameter since it contains a union that is non-trivial to copy",
[26]="clang/test/SemaObjC/non-trivial-c-union.m:32:9: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to destruct",
[27]="clang/test/SemaObjC/non-trivial-c-union.m:32:9: error: cannot use type \'S0\' for function/method return since it contains a union that is non-trivial to copy",
[28]="clang/test/SemaObjC/non-trivial-c-union.m:35:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct",
[29]="clang/test/SemaObjC/non-trivial-c-union.m:35:6: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
[30]="clang/test/SemaObjC/non-trivial-c-union.m:36:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct",
[31]="clang/test/SemaObjC/non-trivial-c-union.m:36:11: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy",
[32]="clang/test/SemaObjC/non-trivial-c-union.m:37:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct",
[33]="clang/test/SemaObjC/non-trivial-c-union.m:38:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct",
[34]="clang/test/SemaObjC/non-trivial-c-union.m:39:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct",
[35]="clang/test/SemaObjC/non-trivial-c-union.m:39:6: error: cannot default-initialize an object of type \'S0\' since it contains a union that is non-trivial to default-initialize",
[36]="clang/test/SemaObjC/non-trivial-c-union.m:40:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct",
[37]="clang/test/SemaObjC/non-trivial-c-union.m:40:11: error: cannot copy-initialize an object of type \'S0\' since it contains a union that is non-trivial to copy",
[38]="clang/test/SemaObjC/non-trivial-c-union.m:41:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct",
[39]="clang/test/SemaObjC/non-trivial-c-union.m:41:13: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy",
[40]="clang/test/SemaObjC/non-trivial-c-union.m:42:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct",
[41]="clang/test/SemaObjC/non-trivial-c-union.m:42:19: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy",
[42]="clang/test/SemaObjC/non-trivial-c-union.m:43:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct",
[43]="clang/test/SemaObjC/non-trivial-c-union.m:43:11: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
[44]="clang/test/SemaObjC/non-trivial-c-union.m:47:3: error: cannot assign to a variable of type \'U0\' since it is a union that is non-trivial to copy",
[45]="clang/test/SemaObjC/non-trivial-c-union.m:48:3: error: cannot assign to a variable of type \'S0\' since it contains a union that is non-trivial to copy",
[46]="clang/test/SemaObjC/non-trivial-c-union.m:51:10: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy",
[47]="clang/test/SemaObjC/non-trivial-c-union.m:52:10: error: cannot copy-initialize an object of type \'S0\' since it contains a union that is non-trivial to copy",
[48]="clang/test/SemaObjC/non-trivial-c-union.m:53:16: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
[49]="clang/test/SemaObjC/non-trivial-c-union.m:56:19: error: cannot construct an automatic compound literal of type \'U0\' since it is a union that is non-trivial to destruct",
[50]="clang/test/SemaObjC/non-trivial-c-union.m:57:19: error: cannot construct an automatic compound literal of type \'U0\' since it is a union that is non-trivial to destruct",
[51]="clang/test/SemaObjC/non-trivial-c-union.m:58:19: error: cannot construct an automatic compound literal of type \'S0\' since it contains a union that is non-trivial to destruct",
[52]="clang/test/SemaObjC/non-trivial-c-union.m:58:31: error: cannot copy-initialize an object of type \'U0\' since it is a union that is non-trivial to copy",
[53]="clang/test/SemaObjC/non-trivial-c-union.m:59:19: error: cannot construct an automatic compound literal of type \'S0\' since it contains a union that is non-trivial to destruct",
[54]="clang/test/SemaObjC/non-trivial-c-union.m:59:23: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
[55]="clang/test/SemaObjC/non-trivial-c-union.m:67:6: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct",
[56]="clang/test/SemaObjC/non-trivial-c-union.m:67:6: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
[57]="clang/test/SemaObjC/non-trivial-c-union.m:68:6: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct",
[58]="clang/test/SemaObjC/non-trivial-c-union.m:68:6: error: cannot default-initialize an object of type \'S0\' since it contains a union that is non-trivial to default-initialize",
[59]="clang/test/SemaObjC/non-trivial-c-union.m:69:14: error: cannot declare an automatic variable of type \'U0\' since it is a union that is non-trivial to destruct",
[60]="clang/test/SemaObjC/non-trivial-c-union.m:69:14: error: cannot default-initialize an object of type \'U0\' since it is a union that is non-trivial to default-initialize",
[61]="clang/test/SemaObjC/non-trivial-c-union.m:70:14: error: cannot declare an automatic variable of type \'S0\' since it contains a union that is non-trivial to destruct",
[62]="clang/test/SemaObjC/non-trivial-c-union.m:70:14: error: cannot default-initialize an object of type \'S0\' since it contains a union that is non-trivial to default-initialize",
[63]="clang/test/SemaObjC/non-trivial-c-union.m:72:16: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to destruct",
[64]="clang/test/SemaObjC/non-trivial-c-union.m:72:16: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to copy",
[65]="clang/test/SemaObjC/non-trivial-c-union.m:77:18: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to destruct",
[66]="clang/test/SemaObjC/non-trivial-c-union.m:77:18: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to copy",
[67]="clang/test/SemaObjC/non-trivial-c-union.m:76:18: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to destruct",
[68]="clang/test/SemaObjC/non-trivial-c-union.m:76:18: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to copy",
[69]="clang/test/SemaObjC/non-trivial-c-union.m:75:16: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to destruct",
[70]="clang/test/SemaObjC/non-trivial-c-union.m:75:16: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to copy",
[71]="clang/test/SemaObjC/non-trivial-c-union.m:74:16: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to destruct",
[72]="clang/test/SemaObjC/non-trivial-c-union.m:74:16: error: cannot capture a variable of type \'U0\' since it is a union that is non-trivial to copy",
[73]="clang/test/SemaObjC/non-trivial-c-union.m:73:16: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to destruct",
[74]="clang/test/SemaObjC/non-trivial-c-union.m:73:16: error: cannot capture a variable of type \'S0\' since it contains a union that is non-trivial to copy",
[75]="clang/test/SemaObjC/non-trivial-c-union.m:83:9: error: cannot cannot use volatile type \'volatile U0\' where it causes an lvalue-to-rvalue conversion since it is a union that is non-trivial to destruct",
[76]="clang/test/SemaObjC/non-trivial-c-union.m:83:9: error: cannot cannot use volatile type \'volatile U0\' where it causes an lvalue-to-rvalue conversion since it is a union that is non-trivial to copy",
[77]="clang/test/SemaObjC/non-trivial-c-union.m:88:42: error: cannot use type \'U1_SystemHeader\' for a function/method parameter since it is a union that is non-trivial to destruct",
[78]="clang/test/SemaObjC/non-trivial-c-union.m:88:42: error: cannot use type \'U1_SystemHeader\' for a function/method parameter since it is a union that is non-trivial to copy"
}
}
}
},
},
["err_non_type_template_arg_addr_label_diff"]={
["err_invalid_token_after_toplevel_declarator"]={
[c]="err_non_type_template_arg_addr_label_diff",
[b]="err_invalid_token_after_toplevel_declarator",
[d]="template argument / label address difference / what did you expect?",
[i]="expected \';\' after top level declarator",
[e]="template argument / label address difference / what did you expect?",
[j]="expected \';\' after top level declarator",
[f]=k,
[h]=k,
[g]="template argument \\/ label address difference \\/ what did you expect\\?",
[c]="expected \';\' after top level declarator",
[h]=a,
[f]=a,
[i]=m,
[e]=C,
[b]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).","[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).\n\nWe don\'t yet support pointer-to-member template arguments that have undergone\npointer-to-member conversions, mostly because we don\'t have a mangling for them yet.\n\nllvm-svn: 222807"},
[g]={S,1236199783,R,Q},
[j]={{Y,7397,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  if (getLangOpts().CPlusPlus17) {\n    // ...\n    case APValue::AddrLabelDiff:\n      return Diag(StartLoc, diag::err_non_type_template_arg_addr_label_diff);"}},
[d]={{P,2326,"/// 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 (ExpectSemi && ExpectAndConsumeSemi(Context == DeclaratorContext::File ? diag::err_invalid_token_after_toplevel_declarator : diag::err_expected_semi_declaration)) {"}},
[l]={
[l]={
["clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:58:18: error: template argument / label address difference / what did you expect?"}
["clang/test/Lexer/c2x_digit_separators.c"]={"clang/test/Lexer/c2x_digit_separators.c:8:13: error: expected \';\' after top level declarator","clang/test/Lexer/c2x_digit_separators.c:26:15: error: expected \';\' after top level declarator","clang/test/Lexer/c2x_digit_separators.c:123460:11: error: expected \';\' after top level declarator","clang/test/Lexer/c2x_digit_separators.c:123464:11: error: expected \';\' after top level declarator"}
}
}
},
},
["err_non_type_template_arg_subobject"]={
["err_invalid_type_for_program_scope_var"]={
[c]="err_non_type_template_arg_subobject",
[b]="err_invalid_type_for_program_scope_var",
[d]="non-type template argument refers to subobject \'%0\'",
[i]="the %0 type cannot be used to declare a program scope variable",
[e]="non-type template argument refers to subobject \'A\'",
[j]="the A type cannot be used to declare a program scope variable",
[f]=k,
[h]=k,
[g]="non\\-type template argument refers to subobject \'(.*?)\'",
[c]="the (.*?) type cannot be used to declare a program scope variable",
[h]=a,
[f]=a,
[i]=m,
[e]="Related Result Type Issue",
[b]={"410cc893745e",1416972413,"[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).","[c++1z] Most of N4268 (allow constant evaluation for non-type template arguments).\n\nWe don\'t yet support pointer-to-member template arguments that have undergone\npointer-to-member conversions, mostly because we don\'t have a mangling for them yet.\n\nllvm-svn: 222807"},
[g]={"c211c6c8844a",1480414900,"[OpenCL] Prohibit using reserve_id_t in program scope.","[OpenCL] Prohibit using reserve_id_t in program scope.\n\nPatch by Egor Churaev (echuraev).\n\nReviewers: Anastasia\n\nSubscribers: cfe-commits, yaxunl, bader\n\nDifferential Revision: https://reviews.llvm.org/D27099\n\nllvm-svn: 288126"},
[j]={{Y,7369,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  if (getLangOpts().CPlusPlus17) {\n    // ...\n   case APValue::LValue: {\n     // ...\n     // -- a subobject\n     // FIXME: Until C++20\n     if (Value.hasLValuePath() && Value.getLValuePath().size() == 1 && VD && VD->getType()->isArrayType() && Value.getLValuePath()[0].getAsArrayIndex() == 0 && !Value.isLValueOnePastTheEnd() && ParamType->isPointerType()) {\n     // ...\n      } else if (!Value.hasLValuePath() || Value.getLValuePath().size() || Value.isLValueOnePastTheEnd()) {\n       Diag(StartLoc, diag::err_non_type_template_arg_subobject) << Value.getAsString(Context, ParamType);"}},
[d]={{p,7332,"/// Returns true if there hasn\'t been any invalid type diagnosed.\nstatic bool diagnoseOpenCLTypes(Sema &Se, VarDecl *NewVD) {\n  // ...\n  // OpenCL v1.2 s6.9.r:\n // The event type cannot be used to declare a program scope variable.\n // OpenCL v2.0 s6.9.q:\n // The clk_event_t and reserve_id_t types cannot be declared in program\n // scope.\n if (NewVD->hasGlobalStorage() && !NewVD->isStaticLocal()) {\n   if (R->isReserveIDT() || R->isClkEventT() || R->isEventT()) {\n     Se.Diag(NewVD->getLocation(), diag::err_invalid_type_for_program_scope_var) << R;"}},
[l]={
[l]={
["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:20:20: error: non-type template argument refers to subobject \'&n + 1\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:21:20: error: non-type template argument refers to subobject \'&n + 1\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:23:20: error: non-type template argument refers to subobject \'&s.n[2]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:24:20: error: non-type template argument refers to subobject \'&s.n[2]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:26:20: error: non-type template argument refers to subobject \'&s.n[3]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:27:20: error: non-type template argument refers to subobject \'&s.n[3]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:33:20: error: non-type template argument refers to subobject \'s.n[2]\'","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:34:20: error: non-type template argument refers to subobject \'s.n[2]\'"}
["clang/test/SemaOpenCLCXX/template-opencl-types.clcpp"]={"clang/test/SemaOpenCLCXX/template-opencl-types.clcpp:6:13: error: the \'__global clk_event_t\' type cannot be used to declare a program scope variable","clang/test/SemaOpenCLCXX/template-opencl-types.clcpp:4:3: error: the \'__global clk_event_t\' type cannot be used to declare a program scope variable"}
}
}
},
},
["err_non_type_template_arg_unsupported"]={
["err_invalid_ucn_name"]={
[c]={{nil,D,"err_non_type_template_arg_unsupported"}},
[b]={{nil,s,"err_invalid_ucn_name"}},
[d]={{nil,D,"sorry, non-type template argument of type %0 is not yet supported"}},
[i]={{nil,s,"\'%0\' is not a valid Unicode character name"}},
[e]={{nil,D,"sorry, non-type template argument of type A is not yet supported"}},
[j]={{nil,s,"\'A\' is not a valid Unicode character name"}},
[f]=k,
[h]=k,
[g]="sorry, non\\-type template argument of type (.*?) is not yet supported",
[c]="\'(.*?)\' is not a valid Unicode character name",
[h]=a,
[f]=a,
[i]={{nil,D,m}},
[e]={{nil,s,O}},
[b]={tc,1582847864,uc,vc},
[g]={N,1625925174,M,L},
[j]={{Y,7404,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  if (getLangOpts().CPlusPlus17) {\n    // ...\n    case APValue::FixedPoint:\n   case APValue::Float:\n    case APValue::ComplexInt:\n   case APValue::ComplexFloat:\n    case APValue::Vector:\n    case APValue::Array:\n      return Diag(StartLoc, diag::err_non_type_template_arg_unsupported) << ParamType;"}},
[d]={{"clang/lib/Lex/Lexer.cpp",3424,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  // ...\n  if (!Match) {\n    // ...\n    if (Diagnose) {\n     Diag(StartName, diag::err_invalid_ucn_name) << StringRef(Buffer.data(), Buffer.size()) << makeCharRange(*this, StartName, CurPtr - CharSize);"},{ab,535,"static void DiagnoseInvalidUnicodeCharacterName(DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc Loc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, llvm::StringRef Name) {\n Diag(Diags, Features, Loc, TokBegin, TokRangeBegin, TokRangeEnd, diag::err_invalid_ucn_name) << Name;"}},
[l]={
[l]={
["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:11:18: error: sorry, non-type template argument of type \'float\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:12:18: error: sorry, non-type template argument of type \'float\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:51:23: error: sorry, non-type template argument of type \'_Complex int\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:52:23: error: sorry, non-type template argument of type \'_Complex int\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:55:25: error: sorry, non-type template argument of type \'_Complex float\' is not yet supported","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:56:25: error: sorry, non-type template argument of type \'_Complex float\' is not yet supported"}
["clang/test/CXX/drs/dr26xx.cpp"]={"clang/test/CXX/drs/dr26xx.cpp:87:8: error: \'Λ\' is not a valid Unicode character name","clang/test/CXX/drs/dr26xx.cpp:89:25: error: \'🤡\' is not a valid Unicode character name","clang/test/CXX/drs/dr26xx.cpp:94:20: error: \'abc\' is not a valid Unicode character name"}
}
}
},
},
["err_non_type_template_in_nested_name_specifier"]={
["err_invalid_use_of_array_type"]={
[c]="err_non_type_template_in_nested_name_specifier",
[b]="err_invalid_use_of_array_type",
[d]="qualified name refers into a specialization of %select{function|variable}0 template %1",
[i]="an array type is not allowed here",
[e]={{nil,nil,{"qualified name refers into a specialization of ",{"function","variable"}," template B"}}},
[j]="an array type is not allowed here",
[f]=k,
[h]=k,
[g]="qualified name refers into a specialization of (?:function|variable) template (.*?)",
[c]="an array type is not allowed here",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"8b6070bb9df4",1299274634,"Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType","Teach Sema::ActOnCXXNestedNameSpecifier and Sema::CheckTemplateIdType\nto cope with non-type templates by providing appropriate\nerrors. Previously, we would either assert, crash, or silently build a\ndependent type when we shouldn\'t. Fixes PR9226.\n\nllvm-svn: 127037"},
[g]={x,1237025389,y,z},
[j]={{cc,946,"bool Sema::ActOnCXXNestedNameSpecifier(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy OpaqueTemplate, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, SourceLocation CCLoc, bool EnteringContext) {\n  // ...\n  if (Template.getAsOverloadedTemplate() || DTN || isa<FunctionTemplateDecl>(TD) || isa<VarTemplateDecl>(TD)) {\n   // ...\n    Diag(CCLoc, diag::err_non_type_template_in_nested_name_specifier) << (TD && isa<VarTemplateDecl>(TD)) << Template << R;"}},
[d]={{I,4013,"/// Check the use of the given variable as a C++ condition in an if,\n/// while, do-while, or switch statement.\nExprResult Sema::CheckConditionVariable(VarDecl *ConditionVar, SourceLocation StmtLoc, ConditionKind CK) {\n  // ...\n  // C++ [stmt.select]p2:\n  //  The declarator shall not specify a function or an array.\n  if (T->isFunctionType())\n // ...\n  else if (T->isArrayType())\n    return ExprError(Diag(ConditionVar->getLocation(), diag::err_invalid_use_of_array_type) << ConditionVar->getSourceRange());"}},
[l]={
[l]={
["clang/test/SemaTemplate/nested-name-spec-template.cpp"]={"clang/test/SemaTemplate/nested-name-spec-template.cpp:114:9: error: qualified name refers into a specialization of function template \'nt\'","clang/test/SemaTemplate/nested-name-spec-template.cpp:124:11: error: qualified name refers into a specialization of function template \'f\'"}
["clang/test/SemaCXX/decomposed-condition.cpp"]={"clang/test/SemaCXX/decomposed-condition.cpp:33:12: error: an array type is not allowed here"}
}
}
},
},
["err_non_type_template_parm_type_deduction_failure"]={
["err_invalid_use_of_function_type"]={
[c]="err_non_type_template_parm_type_deduction_failure",
[b]="err_invalid_use_of_function_type",
[d]="non-type template parameter %0 with type %1 has incompatible initializer of type %2",
[i]="a function type is not allowed here",
[e]="non-type template parameter A with type B has incompatible initializer of type C",
[j]="a function type is not allowed here",
[f]=k,
[h]=k,
[g]="non\\-type template parameter (.*?) with type (.*?) has incompatible initializer of type (.*?)",
[c]="a function type is not allowed here",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"5f274389d1d9",1475106927,"P0127R2: Support type deduction for types of non-type template parameters in","P0127R2: Support type deduction for types of non-type template parameters in\nC++1z.\n\nPatch by James Touton! Some bugfixes and rebasing by me.\n\nllvm-svn: 282651"},
[g]={x,1237025389,y,z},
[j]={{Y,7171,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  if (getLangOpts().CPlusPlus17 && DeducedT && !DeducedT->isDeduced()) {\n    // ...\n    if (isa<DeducedTemplateSpecializationType>(DeducedT)) {\n   // ...\n    } else {\n     // ...\n     if (Result == TDK_AlreadyDiagnosed) {\n     // ...\n     } else if (Result != TDK_Success) {\n       Diag(Arg->getExprLoc(), diag::err_non_type_template_parm_type_deduction_failure) << Param->getDeclName() << Param->getType() << Arg->getType() << Arg->getSourceRange();"}},
[d]={{t,18220,"/// ActOnCXXConditionDeclarationExpr - Parsed a condition declaration of a\n/// C++ if/switch/while/for statement.\n/// e.g: \"if (int x = f()) {...}\"\nDeclResult Sema::ActOnCXXConditionDeclaration(Scope *S, Declarator &D) {\n  // ...\n  if (isa<FunctionDecl>(Dcl)) { // The declarator shall not specify a function.\n    Diag(Dcl->getLocation(), diag::err_invalid_use_of_function_type) << D.getSourceRange();"},{I,4009,"/// Check the use of the given variable as a C++ condition in an if,\n/// while, do-while, or switch statement.\nExprResult Sema::CheckConditionVariable(VarDecl *ConditionVar, SourceLocation StmtLoc, ConditionKind CK) {\n // ...\n // C++ [stmt.select]p2:\n //   The declarator shall not specify a function or an array.\n if (T->isFunctionType())\n   return ExprError(Diag(ConditionVar->getLocation(), diag::err_invalid_use_of_function_type) << ConditionVar->getSourceRange());"}},
[l]={
[l]={
["clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:465:5: error: non-type template parameter \'f\' with type \'auto (*)() -> auto\' has incompatible initializer of type \'std::nullptr_t\'"}
["clang/test/Parser/cxx1z-init-statement.cpp"]={"clang/test/Parser/cxx1z-init-statement.cpp:22:9: error: a function type is not allowed here","clang/test/Parser/cxx1z-init-statement.cpp:23:9: error: a function type is not allowed here"}
}
}
},
},
["err_non_variable_decl_in_for"]={
["err_invalid_utf8"]={
[c]="err_non_variable_decl_in_for",
[b]="err_invalid_utf8",
[d]="non-variable declaration in \'for\' loop",
[i]="source file is not valid UTF-8",
[e]="non-variable declaration in \'for\' loop",
[j]="source file is not valid UTF-8",
[f]=k,
[h]=k,
[g]="non\\-variable declaration in \'for\' loop",
[c]="source file is not valid UTF\\-8",
[h]=a,
[f]=a,
[i]=m,
[e]=O,
[b]={ib,1237025389,fb,gb},
[g]={"7f43dddae066",1359060646,"Handle universal character names and Unicode characters outside of literals.","Handle universal character names and Unicode characters outside of literals.\n\nThis is a missing piece for C99 conformance.\n\nThis patch handles UCNs by adding a \'\\\\\' case to LexTokenInternal and\nLexIdentifier -- if we see a backslash, we tentatively try to read in a UCN.\nIf the UCN is not syntactically well-formed, we fall back to the old\ntreatment: a backslash followed by an identifier beginning with \'u\' (or \'U\').\n\nBecause the spelling of an identifier with UCNs still has the UCN in it, we\nneed to convert that to UTF-8 in Preprocessor::LookUpIdentifierInfo.\n\nOf course, valid code that does *not* use UCNs will see only a very minimal\nperformance hit (checks after each identifier for non-ASCII characters,\nchecks when converting raw_identifiers to identifiers that they do not\ncontain UCNs, and checks when getting the spelling of an identifier that it\ndoes not contain a UCN).\n\nThis patch also adds basic support for actual UTF-8 in the source. This is\ntreated almost exactly the same as UCNs except that we consider stray\nUnicode characters to be mistakes and offer a fixit to remove them.\n\nllvm-svn: 173369"},
[j]={{F,100,"void Sema::ActOnForEachDeclStmt(DeclGroupPtrTy dg) {\n // ...\n if (!var) {\n    Diag(decl->getLocation(), diag::err_non_variable_decl_in_for);"},{F,2164,"StmtResult Sema::ActOnForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, Stmt *First, ConditionResult Second, FullExprArg third, SourceLocation RParenLoc, Stmt *Body) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n    if (DeclStmt *DS = dyn_cast_or_null<DeclStmt>(First)) {\n      // ...\n     // Diagnose if we saw a non-variable declaration but no variable\n      // declarations.\n      if (NonVarSeen && !VarDeclSeen)\n        Diag(NonVarSeen->getLocation(), diag::err_non_variable_decl_in_for);"}},
[d]={{"clang/lib/Lex/Lexer.cpp",4342,"LexStart:\n  // ...\n  default: {\n    // ...\n   Diag(CurPtr, diag::err_invalid_utf8);"}},
[l]={
[l]={
["clang/test/Sema/for.c"]={"clang/test/Sema/for.c:5:28: error: non-variable declaration in \'for\' loop","clang/test/Sema/for.c:7:35: error: non-variable declaration in \'for\' loop","clang/test/Sema/for.c:10:30: error: non-variable declaration in \'for\' loop","clang/test/Sema/for.c:13:31: error: non-variable declaration in \'for\' loop"}
["clang/test/Lexer/utf8-invalid.c"]={"clang/test/Lexer/utf8-invalid.c:6:12: error: source file is not valid UTF-8"}
}
}
},
},
["err_non_virtual_pure"]={
["err_invalid_var_template_spec_type"]={
[c]="err_non_virtual_pure",
[b]="err_invalid_var_template_spec_type",
[d]="%0 is not virtual and cannot be declared pure",
[i]="type %2 of %select{explicit instantiation|explicit specialization|partial specialization|redeclaration}0 of %1 does not match expected type %3",
[e]="A is not virtual and cannot be declared pure",
[j]={{nil,nil,{"type C of ",{"explicit instantiation","explicit specialization","partial specialization","redeclaration"}," of B does not match expected type D"}}},
[f]=k,
[h]=k,
[g]="(.*?) is not virtual and cannot be declared pure",
[c]="type (.*?) of (?:explicit instantiation|explicit specialization|partial specialization|redeclaration) of (.*?) does not match expected type (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={J,1236199783,H,I},
[g]={"39a1e507ff0b",1375750985,"Started implementing variable templates. Top level declarations should be fully supported, up to som...","Started implementing variable templates. Top level declarations should be fully supported, up to some limitations documented as FIXMEs or TODO. Static data member templates work very partially. Static data member templates of class templates need particular attention...\n\nllvm-svn: 187762"},
[j]={{Q,18141,"/// Mark the given method pure.\n///\n/// \\param Method the method to be marked pure.\n///\n/// \\param InitRange the source range that covers the \"0\" initializer.\nbool Sema::CheckPureMethod(CXXMethodDecl *Method, SourceRange InitRange) {\n  // ...\n  if (!Method->isInvalidDecl())\n    Diag(Method->getLocation(), diag::err_non_virtual_pure) << Method->getDeclName() << InitRange;"}},
[d]={{kb,10557,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // ...\n  if (!R->isFunctionType()) {\n    // ...\n    // Check the new variable specialization against the parsed input.\n    if (PrevTemplate && !Context.hasSameType(Prev->getType(), R)) {\n      Diag(T->getTypeLoc().getBeginLoc(), diag::err_invalid_var_template_spec_type) << 0 << PrevTemplate << R << Prev->getType();"}},
[l]={
[l]={
["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:7:8: error: \'h\' is not virtual and cannot be declared pure","clang/test/SemaCXX/virtuals.cpp:25:8: error: \'g\' is not virtual and cannot be declared pure"}
["clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp"]={"clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:130:12: error: type \'float\' of explicit instantiation of \'pi0a\' does not match expected type \'int\'","clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:134:18: error: type \'const int\' of explicit instantiation of \'pi0b\' does not match expected type \'int\'","clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:138:12: error: type \'int\' of explicit instantiation of \'pi0c\' does not match expected type \'const int\'","clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:147:12: error: type \'int\' of explicit instantiation of \'pi1a\' does not match expected type \'const int\'","clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:151:12: error: type \'int\' of explicit instantiation of \'pi1b\' does not match expected type \'const const int\'","clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp:268:14: error: type \'float\' of explicit instantiation of \'pi0\' does not match expected type \'int\'"}
}
}
},
},
["err_nonfunction_block_type"]={
["err_invalid_vector_bool_decl_spec"]={
[c]="err_nonfunction_block_type",
[b]="err_invalid_vector_bool_decl_spec",
[d]="block pointer to non-function type is invalid",
[i]="cannot use \'%0\' with \'__vector bool\'",
[e]="block pointer to non-function type is invalid",
[j]="cannot use \'A\' with \'__vector bool\'",
[f]=k,
[h]=k,
[g]="block pointer to non\\-function type is invalid",
[c]="cannot use \'(.*?)\' with \'__vector bool\'",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={ib,1237025389,fb,gb},
[g]={"37141f4fb4ac",1277272824,"improve altivec vector bool/pixel support, patch by Anton Yartsev","improve altivec vector bool/pixel support, patch by Anton Yartsev\nwith several tweaks by me.\n\nllvm-svn: 106619"},
[j]={{cb,3138,"/// Build a block pointer type.\n///\n/// \\param T The type to which we\'ll be building a block pointer.\n///\n/// \\param Loc The source location, used for diagnostics.\n///\n/// \\param Entity The name of the entity that involves the block pointer\n/// type, if known.\n///\n/// \\returns A suitable block pointer type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildBlockPointerType(QualType T, SourceLocation Loc, DeclarationName Entity) {\n  if (!T->isFunctionType()) {\n   Diag(Loc, diag::err_nonfunction_block_type);"}},
[d]={{D,927,"bool DeclSpec::SetTypeAltiVecBool(bool isAltiVecBool, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy) {\n  // ...\n  if (!TypeAltiVecVector || TypeAltiVecBool || (TypeSpecType != TST_unspecified)) {\n    // ...\n   DiagID = diag::err_invalid_vector_bool_decl_spec;"},{D,1181,"/// 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  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    if (TypeAltiVecBool) {\n      // Sign specifiers are not allowed with vector bool. (PIM 2.1)\n     if (getTypeSpecSign() != TypeSpecifierSign::Unspecified) {\n        S.Diag(TSSLoc, diag::err_invalid_vector_bool_decl_spec) << getSpecifierName(getTypeSpecSign());"},{D,1190,"/// 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  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n   // ...\n    if (TypeAltiVecBool) {\n      // ...\n      // Only char/int are valid with vector bool prior to Power10.\n      // Power10 adds instructions that produce vector bool data\n     // for quadwords as well so allow vector bool __int128.\n      if (((TypeSpecType != TST_unspecified) && (TypeSpecType != TST_char) && (TypeSpecType != TST_int) && (TypeSpecType != TST_int128)) || TypeAltiVecPixel) {\n        S.Diag(TSTLoc, diag::err_invalid_vector_bool_decl_spec) << (TypeAltiVecPixel ? \"__pixel\" : getSpecifierName((TST)TypeSpecType, Policy));"},{D,1203,"/// 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  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    if (TypeAltiVecBool) {\n      // ...\n      // Only \'short\' and \'long long\' are valid with vector bool. (PIM 2.1)\n      if ((getTypeSpecWidth() != TypeSpecifierWidth::Unspecified) && (getTypeSpecWidth() != TypeSpecifierWidth::Short) && (getTypeSpecWidth() != TypeSpecifierWidth::LongLong))\n       S.Diag(TSWRange.getBegin(), diag::err_invalid_vector_bool_decl_spec) << getSpecifierName(getTypeSpecWidth());"}},
[l]={
[l]={
["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:61:14: error: block pointer to non-function type is invalid"}
["clang/test/Parser/altivec-bool-128.c"]={"clang/test/Parser/altivec-bool-128.c:16:15: error: cannot use \'unsigned\' with \'__vector bool\'","clang/test/Parser/altivec-bool-128.c:17:15: error: cannot use \'signed\' with \'__vector bool\'","clang/test/Parser/altivec-bool-128.c:18:13: error: cannot use \'unsigned\' with \'__vector bool\'","clang/test/Parser/altivec-bool-128.c:19:13: error: cannot use \'signed\' with \'__vector bool\'","clang/test/Parser/altivec-bool-128.c:20:17: error: cannot use \'signed\' with \'__vector bool\'","clang/test/Parser/altivec-bool-128.c:21:15: error: cannot use \'signed\' with \'__vector bool\'"}
}
}
},
},
["err_nonstatic_member_out_of_line"]={
["err_invalid_vector_bool_int128_decl_spec"]={
[c]="err_nonstatic_member_out_of_line",
[b]={{nil,o,"err_invalid_vector_bool_int128_decl_spec"}},
[d]="non-static data member defined out-of-line",
[i]={{nil,o,"use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)"}},
[e]="non-static data member defined out-of-line",
[j]={{nil,o,"use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)"}},
[f]=k,
[h]=k,
[g]="non\\-static data member defined out\\-of\\-line",
[c]="use of \'__int128\' with \'__vector bool\' requires VSX support enabled \\(on POWER10 or later\\)",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,o,m}},
[b]={ib,1237025389,fb,gb},
[g]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574"},
[j]={{o,8026,"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   // Merge the decl with the existing one if appropriate.\n    if (!Previous.empty()) {\n      if (Previous.isSingleResult() && isa<FieldDecl>(Previous.getFoundDecl()) && D.getCXXScopeSpec().isSet()) {\n        // ...\n        Diag(NewVD->getLocation(), diag::err_nonstatic_member_out_of_line) << D.getCXXScopeSpec().getRange();"}},
[d]={{D,1197,"/// 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  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n   // ...\n   if (TypeAltiVecBool) {\n     // ...\n     // vector bool __int128 requires Power10.\n      if ((TypeSpecType == TST_int128) && (!S.Context.getTargetInfo().hasFeature(\"power10-vector\")))\n        S.Diag(TSTLoc, diag::err_invalid_vector_bool_int128_decl_spec);"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx11-thread-local.cpp"]={"clang/test/SemaCXX/cxx11-thread-local.cpp:12:21: error: non-static data member defined out-of-line"}
["clang/test/Parser/altivec-bool-128.c"]={"clang/test/Parser/altivec-bool-128.c:12:15: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:13:17: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:14:13: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:15:15: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:16:24: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:17:22: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:18:22: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:19:20: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:20:24: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)","clang/test/Parser/altivec-bool-128.c:21:22: error: use of \'__int128\' with \'__vector bool\' requires VSX support enabled (on POWER10 or later)"}
}
}
},
},
["err_nontemporal_builtin_must_be_pointer"]={
["err_invalid_vector_decl_spec_combination"]={
[c]="err_nontemporal_builtin_must_be_pointer",
[b]="err_invalid_vector_decl_spec_combination",
[d]="address argument to nontemporal builtin must be a pointer (%0 invalid)",
[i]="cannot combine with previous \'%0\' declaration specifier. \'__vector\' must be first",
[e]="address argument to nontemporal builtin must be a pointer (A invalid)",
[j]="cannot combine with previous \'A\' declaration specifier. \'__vector\' must be first",
[f]=k,
[h]=k,
[g]="address argument to nontemporal builtin must be a pointer \\((.*?) invalid\\)",
[c]="cannot combine with previous \'(.*?)\' declaration specifier\\. \'__vector\' must be first",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"84df12375cde",1441756353,"Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.","Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.\n\nSummary:\nCurrently clang provides no general way to generate nontemporal loads/stores.\nThere are some architecture specific builtins for doing so (e.g. in x86), but\nthere is no way to generate non-temporal store on, e.g. AArch64. This patch adds\ngeneric builtins which are expanded to a simple store with \'!nontemporal\'\nattribute in IR.\n\nDifferential Revision: http://reviews.llvm.org/D12313\n\nllvm-svn: 247104"},
[g]={"2233460de6ed",1265328742,"First stage of adding AltiVec support","First stage of adding AltiVec support\n\nllvm-svn: 95335"},
[j]={{X,5289,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case RISCV::BI__builtin_riscv_ntl_load:\n  case RISCV::BI__builtin_riscv_ntl_store:\n    // ...\n    if (!PtrType) {\n     Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer) << PointerArg->getType() << PointerArg->getSourceRange();"},{X,7934,"/// SemaBuiltinNontemporalOverloaded - We have a call to\n/// __builtin_nontemporal_store or __builtin_nontemporal_load, which is an\n/// overloaded function based on the pointer type of its last argument.\n///\n/// This function goes through and does final semantic checking for these\n/// builtins.\nExprResult Sema::SemaBuiltinNontemporalOverloaded(ExprResult TheCallResult) {\n  // ...\n  if (!pointerType) {\n    Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer) << PointerArg->getType() << PointerArg->getSourceRange();"}}
[d]={{D,877,"bool DeclSpec::SetTypeAltiVecVector(bool isAltiVecVector, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy) {\n  // ...\n  if (TypeSpecType != TST_unspecified) {\n   // ...\n    DiagID = diag::err_invalid_vector_decl_spec_combination;"}}
},
},
["err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector"]={
["err_invalid_vector_double_decl_spec"]={
[c]="err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector",
[b]="err_invalid_vector_double_decl_spec",
[d]="address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types (%0 invalid)",
[i]="use of \'double\' with \'__vector\' requires VSX support to be enabled (available on POWER7 or later)",
[e]="address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types (A invalid)",
[j]="use of \'double\' with \'__vector\' requires VSX support to be enabled (available on POWER7 or later)",
[f]=k,
[h]=k,
[g]="address argument to nontemporal builtin must be a pointer to integer, float, pointer, or a vector of such types \\((.*?) invalid\\)",
[c]="use of \'double\' with \'__vector\' requires VSX support to be enabled \\(available on POWER7 or later\\)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"84df12375cde",1441756353,"Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.","Introduce __builtin_nontemporal_store and __builtin_nontemporal_load.\n\nSummary:\nCurrently clang provides no general way to generate nontemporal loads/stores.\nThere are some architecture specific builtins for doing so (e.g. in x86), but\nthere is no way to generate non-temporal store on, e.g. AArch64. This patch adds\ngeneric builtins which are expanded to a simple store with \'!nontemporal\'\nattribute in IR.\n\nDifferential Revision: http://reviews.llvm.org/D12313\n\nllvm-svn: 247104"},
[g]={"691e01d94e53",1414783164,"[PowerPC] Initial VSX intrinsic support, with min/max for vector double","[PowerPC] Initial VSX intrinsic support, with min/max for vector double\n\nNow that we have initial support for VSX, we can begin adding\nintrinsics for programmer access to VSX instructions. This patch\nperforms the necessary enablement in the front end, and tests it by\nimplementing intrinsics for minimum and maximum using the vector\ndouble data type.\n\nThe main change in the front end is to no longer disallow \"vector\" and\n\"double\" in the same declaration (lib/Sema/DeclSpec.cpp), but \"vector\"\nand \"long double\" must still be disallowed. The new intrinsics are\naccessed via vec_max and vec_min with changes in\nlib/Headers/altivec.hNote that for v4f32, we already access\ncorresponding VMX builtins, but with VSX enabled we should use the\nforms that allow all 64 vector registers.\n\nThe new built-ins are defined in include/clang/Basic/BuiltinsPPC.def.\n\nI\'ve added a new test in test/CodeGen/builtins-ppc-vsx.c that is\nsimilar to, but much smaller than, builtins-ppc-altivec.c. This\nallows us to test VSX IR generation without duplicating CHECK lines\nfor the existing bazillion Altivec tests.\n\nSince vector double is now legal when VSX is available, I\'ve modified\nthe error message, and changed where we test for it and for vector\nlong double, since the target machine isn\'t visible in the old place.\nThis serendipitously removed a not-pertinent warning about \'long\'\nbeing deprecated when used with \'vector\', when \"vector long double\" is\nencountered and we just want to issue an error.  The existing tests\ntest/Parser/altivec.c and test/Parser/cxx-altivec.cpp have been\nupdated accordingly, and I\'ve added test/Parser/vsx.c to verify that\n\"vector double\" is now legitimate with VSX enabled.\n\nThere is a companion patch for LLVM.\n\nllvm-svn: 220989"},
[j]={{X,5300,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n case RISCV::BI__builtin_riscv_ntl_load:\n  case RISCV::BI__builtin_riscv_ntl_store:\n    // ...\n   if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType() && !ValType->isFloatingType() && !ValType->isVectorType() && !ValType->isRVVType()) {\n      Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector) << PointerArg->getType() << PointerArg->getSourceRange();"},{X,7947,"/// SemaBuiltinNontemporalOverloaded - We have a call to\n/// __builtin_nontemporal_store or __builtin_nontemporal_load, which is an\n/// overloaded function based on the pointer type of its last argument.\n///\n/// This function goes through and does final semantic checking for these\n/// builtins.\nExprResult Sema::SemaBuiltinNontemporalOverloaded(ExprResult TheCallResult) {\n  // ...\n if (!ValType->isIntegerType() && !ValType->isAnyPointerType() && !ValType->isBlockPointerType() && !ValType->isFloatingType() && !ValType->isVectorType()) {\n    Diag(DRE->getBeginLoc(), diag::err_nontemporal_builtin_must_be_pointer_intfltptr_or_vector) << PointerArg->getType() << PointerArg->getSourceRange();"}}
[d]={{D,1220,"/// 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 // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n   // ...\n   if (TypeAltiVecBool) {\n    // ...\n    } else if (TypeSpecType == TST_double) {\n      // vector long double and vector long long double are never allowed.\n     // vector double is OK for Power7 and later, and ZVector.\n     if (getTypeSpecWidth() == TypeSpecifierWidth::Long || getTypeSpecWidth() == TypeSpecifierWidth::LongLong)\n     // ...\n     else if (!S.Context.getTargetInfo().hasFeature(\"vsx\") && !S.getLangOpts().ZVector)\n       S.Diag(TSTLoc, diag::err_invalid_vector_double_decl_spec);"}},
},
["err_noreturn_block_has_return_expr"]={
[c]="err_noreturn_block_has_return_expr",
[d]="block declared \'noreturn\' should not return",
[e]="block declared \'noreturn\' should not return",
[f]=k,
[g]="block declared \'noreturn\' should not return",
[h]=a,
[i]=m,
[b]={"88788feddd21",1241031793,"Sema and CodeGen support for attributes on blocks. Radar 6441502","Sema and CodeGen support for attributes on blocks. Radar 6441502\n\nllvm-svn: 70403"},
[j]={{Ac,597,"struct CheckFallThroughDiagnostics {\n // ...\n  static CheckFallThroughDiagnostics MakeForBlock() {\n   // ...\n   D.diag_MaybeFallThrough_HasNoReturn = diag::err_noreturn_block_has_return_expr;"},{Ac,601,"struct CheckFallThroughDiagnostics {\n // ...\n static CheckFallThroughDiagnostics MakeForBlock() {\n    // ...\n    D.diag_AlwaysFallThrough_HasNoReturn = diag::err_noreturn_block_has_return_expr;"},{F,3657,"/// 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 if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n    if (CurBlock->FunctionType->castAs<FunctionType>()->getNoReturnAttr()) {\n     Diag(ReturnLoc, diag::err_noreturn_block_has_return_expr);"}},
[l]={
[l]={
["clang/test/Sema/block-return-2.c"]={"clang/test/Sema/block-return-2.c:4:40: error: block declared \'noreturn\' should not return"}
["clang/test/Parser/altivec.c"]={"clang/test/Parser/altivec.c:104:10: error: use of \'double\' with \'__vector\' requires VSX support to be enabled (available on POWER7 or later)","clang/test/Parser/altivec.c:105:8: error: use of \'double\' with \'__vector\' requires VSX support to be enabled (available on POWER7 or later)"}
}
}
},
},
["err_noreturn_lambda_has_return_expr"]={
["err_invalid_vector_float_decl_spec"]={
[c]="err_noreturn_lambda_has_return_expr",
[b]="err_invalid_vector_float_decl_spec",
[d]="lambda declared \'noreturn\' should not return",
[i]="cannot use \'float\' with \'__vector\'",
[e]="lambda declared \'noreturn\' should not return",
[j]="cannot use \'float\' with \'__vector\'",
[f]=k,
[h]=k,
[g]="lambda declared \'noreturn\' should not return",
[c]="cannot use \'float\' with \'__vector\'",
[h]=a,
[f]=a,
[i]="Lambda Issue",
[e]=m,
[b]={"cf11eb76ed8d",1329322815,"Specialize noreturn diagnostics for lambda expressions.","Specialize noreturn diagnostics for lambda expressions.\n\nllvm-svn: 150586"},
[g]={"3c5038a535c8",1438265316,"Add support for System z vector language extensions","Add support for System z vector language extensions\n\nThe z13 vector facility has an associated language extension,\nclosely modeled on AltiVec/VSX. The main differences are:\n\n- vector long, vector float and vector pixel are not supported\n\n- vector long long and vector double are supported (like VSX)\n\n- comparison operators return a vector rather than a scalar integer\n\n- shift operators behave like the OpenCL shift operators\n\n- vector bool is only supported as argument to certain operators;\n  some operators allow mixing a bool with a non-bool vector \n\nThis patch adds clang support for the extension.  It is closely modelled\non the AltiVec support.  Similarly to the -faltivec option, there\'s a\nnew -fzvector option to enable the extensions (as well as an -mzvector\nalias for compatibility with GCC). There\'s also a separate LangOpt.\n\nThe extension as implemented here is intended to be compatible with\nthe -mzvector extension recently implemented by GCC.\n\nBased on a patch by Richard Sandiford.\n\nDifferential Revision: http://reviews.llvm.org/D11001\n\nllvm-svn: 243642"},
[j]={{Ac,612,"struct CheckFallThroughDiagnostics {\n // ...\n static CheckFallThroughDiagnostics MakeForLambda() {\n   // ...\n   D.diag_MaybeFallThrough_HasNoReturn = diag::err_noreturn_lambda_has_return_expr;"},{Ac,616,"struct CheckFallThroughDiagnostics {\n  // ...\n static CheckFallThroughDiagnostics MakeForLambda() {\n   // ...\n   D.diag_AlwaysFallThrough_HasNoReturn = diag::err_noreturn_lambda_has_return_expr;"},{F,3668,"/// 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  if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n // ...\n } else if (auto *CurRegion = dyn_cast<CapturedRegionScopeInfo>(CurCap)) {\n // ...\n } else {\n    // ...\n    if (CurLambda->CallOperator->getType()->castAs<FunctionType>()->getNoReturnAttr()) {\n      Diag(ReturnLoc, diag::err_noreturn_lambda_has_return_expr);"}}
[d]={{D,1226,"/// 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  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n   // ...\n   if (TypeAltiVecBool) {\n   // ...\n   } else if (TypeSpecType == TST_double) {\n    // ...\n    } else if (TypeSpecType == TST_float) {\n      // vector float is unsupported for ZVector unless we have the\n     // vector-enhancements facility 1 (ISA revision 12).\n     if (S.getLangOpts().ZVector && !S.Context.getTargetInfo().hasFeature(\"arch12\"))\n       S.Diag(TSTLoc, diag::err_invalid_vector_float_decl_spec);"}},
},
["err_noreturn_non_function"]={
[c]="err_noreturn_non_function",
[d]="\'_Noreturn\' can only appear on functions",
[e]="\'_Noreturn\' can only appear on functions",
[f]=k,
[g]="\'_Noreturn\' can only appear on functions",
[h]=a,
[i]=m,
[b]={"0015f0987792",1358460971,"Parsing support for C11\'s _Noreturn keyword. No semantics yet.","Parsing support for C11\'s _Noreturn keyword. No semantics yet.\n\nllvm-svn: 172761"},
[j]={{o,6653,"/// Diagnose function specifiers on a declaration of an identifier that\n/// does not identify a function.\nvoid Sema::DiagnoseFunctionSpecifiers(const DeclSpec &DS) {\n  // ...\n  if (DS.isNoreturnSpecified())\n   Diag(DS.getNoreturnSpecLoc(), diag::err_noreturn_non_function);"}},
[l]={
[l]={
["clang/test/Parser/c11-noreturn.c"]={"clang/test/Parser/c11-noreturn.c:9:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:10:6: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:12:9: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:14:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:15:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:16:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:22:1: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:23:11: error: \'_Noreturn\' can only appear on functions","clang/test/Parser/c11-noreturn.c:24:8: error: \'_Noreturn\' can only appear on functions"}
["clang/test/Sema/zvector.c"]={"clang/test/Sema/zvector.c:24:8: error: cannot use \'float\' with \'__vector\'","clang/test/Sema/zvector.c:55:10: error: cannot use \'float\' with \'__vector\'"}
}
}
},
},
["err_nosetter_property_assignment"]={
["err_invalid_vector_int128_decl_spec"]={
[c]="err_nosetter_property_assignment",
[b]={{nil,B,"err_invalid_vector_int128_decl_spec"}},
[d]="%select{assignment to readonly property|no setter method %1 for assignment to property}0",
[i]={{nil,B,"use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)"}},
[e]={{nil,nil,{{"assignment to readonly property","no setter method B for assignment to property"}}}},
[j]={{nil,B,"use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)"}},
[f]=k,
[h]=k,
[g]="(?:assignment to readonly property|no setter method (.*?) for assignment to property)",
[c]="use of \'__int128\' with \'__vector\' requires extended Altivec support \\(available on POWER8 or later\\)",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,B,m}},
[b]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
[g]={"3dbcea8b957a",1615397021,"Reland [clang] Check unsupported types in expressions","Reland [clang] Check unsupported types in expressions\n\nThis was committed as ec6c847179fd, but then reverted after a failure\nin: https://lab.llvm.org/buildbot/#/builders/84/builds/13983\n\nI was not able to reproduce the problem, but I added an extra check\nfor a NULL QualType just in case.\n\nOriginal comit message:\n\nThe patch adds missing diagnostics for cases like:\n\n  float F3 = ((__float128)F1 * (__float128)F2) / 2.0f;\n\nSema::checkDeviceDecl (renamed to checkTypeSupport) is changed to work\nwith a type without the corresponding ValueDecl. It is also refactored\nso that host diagnostics for unsupported types can be added here as\nwell.\n\nDifferential Revision: https://reviews.llvm.org/D109315"},
[j]={{P,906,"/// @property-specific behavior for doing assignments.\nExprResult ObjCPropertyOpBuilder::buildAssignmentOperation(Scope *Sc, SourceLocation opcLoc, BinaryOperatorKind opcode, Expr *LHS, Expr *RHS) {\n  // ...\n  // If there\'s no setter, we have no choice but to try to assign to\n  // the result of the getter.\n  if (!findSetter()) {\n    // ...\n    S.Diag(opcLoc, diag::err_nosetter_property_assignment) << unsigned(RefExpr->isImplicitProperty()) << SetterSelector << LHS->getSourceRange() << RHS->getSourceRange();"}},
[d]={{D,1176,"/// 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  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    // No vector __int128 prior to Power8.\n    if ((TypeSpecType == TST_int128) && !S.Context.getTargetInfo().hasFeature(\"power8-vector\"))\n      S.Diag(TSTLoc, diag::err_invalid_vector_int128_decl_spec);"}},
[l]={
[l]={
["clang/test/SemaObjC/property-category-1.m"]={"clang/test/SemaObjC/property-category-1.m:51:11: error: assignment to readonly property"}
["clang/test/Parser/cxx-altivec-bool-128.cpp"]={"clang/test/Parser/cxx-altivec-bool-128.cpp:14:15: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:15:17: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:16:13: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:17:15: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:18:24: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:19:22: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:20:22: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:21:20: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:22:24: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)","clang/test/Parser/cxx-altivec-bool-128.cpp:23:22: error: use of \'__int128\' with \'__vector\' requires extended Altivec support (available on POWER8 or later)"}
}
}
},
},
["err_nosetter_property_incdec"]={
["err_invalid_vector_long_decl_spec"]={
[c]="err_nosetter_property_incdec",
[b]="err_invalid_vector_long_decl_spec",
[d]="%select{%select{increment|decrement}1 of readonly property|no setter method %2 for %select{increment|decrement}1 of property}0",
[i]="cannot use \'long\' with \'__vector\'",
[e]={{nil,nil,{{{{"increment","decrement"}," of readonly property"},{"no setter method C for ",{"increment","decrement"}," of property"}}}}},
[j]="cannot use \'long\' with \'__vector\'",
[f]=k,
[h]=k,
[g]="(?:(?:increment|decrement) of readonly property|no setter method (.*?) for (?:increment|decrement) of property)",
[c]="cannot use \'long\' with \'__vector\'",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"c4a2d3259f9e",1319527676,"Introduce a placeholder type for \"pseudo object\"","Introduce a placeholder type for \"pseudo object\"\nexpressions: expressions which refer to a logical rather\nthan a physical l-value, where the logical object is\nactually accessed via custom getter/setter code.\nA subsequent patch will generalize the AST for these\nso that arbitrary \"implementing\" sub-expressions can\nbe provided.\n\nRight now the only client is ObjC properties, but\nthis should be generalizable to similar language\nfeatures, e.g. Managed C++\'s __property methods.\n\nllvm-svn: 142914"},
[g]={"3c5038a535c8",1438265316,"Add support for System z vector language extensions","Add support for System z vector language extensions\n\nThe z13 vector facility has an associated language extension,\nclosely modeled on AltiVec/VSX.  The main differences are:\n\n- vector long, vector float and vector pixel are not supported\n\n- vector long long and vector double are supported (like VSX)\n\n- comparison operators return a vector rather than a scalar integer\n\n- shift operators behave like the OpenCL shift operators\n\n- vector bool is only supported as argument to certain operators;\n  some operators allow mixing a bool with a non-bool vector \n\nThis patch adds clang support for the extension.  It is closely modelled\non the AltiVec support.  Similarly to the -faltivec option, there\'s a\nnew -fzvector option to enable the extensions (as well as an -mzvector\nalias for compatibility with GCC).  There\'s also a separate LangOpt.\n\nThe extension as implemented here is intended to be compatible with\nthe -mzvector extension recently implemented by GCC.\n\nBased on a patch by Richard Sandiford.\n\nDifferential Revision: http://reviews.llvm.org/D11001\n\nllvm-svn: 243642"},
[j]={{P,950,"/// @property-specific behavior for doing increments and decrements.\nExprResult ObjCPropertyOpBuilder::buildIncDecOperation(Scope *Sc, SourceLocation opcLoc, UnaryOperatorKind opcode, Expr *op) {\n  // If there\'s no setter, we have no choice but to try to assign to\n  // the result of the getter.\n  if (!findSetter()) {\n    // ...\n    S.Diag(opcLoc, diag::err_nosetter_property_incdec) << unsigned(RefExpr->isImplicitProperty()) << unsigned(UnaryOperator::isDecrementOp(opcode)) << SetterSelector << op->getSourceRange();"}},
[d]={{D,1238,"/// 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  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    if (TypeAltiVecBool) {\n    // ...\n    } else if (TypeSpecType == TST_double) {\n    // ...\n    } else if (TypeSpecType == TST_float) {\n    // ...\n    } else if (getTypeSpecWidth() == TypeSpecifierWidth::Long) {\n      // Vector long is unsupported for ZVector, or without VSX, and deprecated\n      // for AltiVec.\n      // It has also been historically deprecated on AIX (as an alias for\n      // \"vector int\" in both 32-bit and 64-bit modes). It was then made\n      // unsupported in the Clang-based XL compiler since the deprecated type\n      // has a number of conflicting semantics and continuing to support it\n      // is a disservice to users.\n      if (S.getLangOpts().ZVector || !S.Context.getTargetInfo().hasFeature(\"vsx\") || S.Context.getTargetInfo().getTriple().isOSAIX())\n        S.Diag(TSWRange.getBegin(), diag::err_invalid_vector_long_decl_spec);"}},
[l]={
[l]={
["clang/test/SemaObjC/error-implicit-property.m"]={"clang/test/SemaObjC/error-implicit-property.m:22:8: error: no setter method \'setP:\' for increment of property","clang/test/SemaObjC/error-implicit-property.m:23:8: error: no setter method \'setP:\' for decrement of property"}
["clang/test/Sema/zvector.c"]={"clang/test/Sema/zvector.c:23:8: error: cannot use \'long\' with \'__vector\'","clang/test/Sema/zvector.c:54:10: error: cannot use \'long\' with \'__vector\'"}
}
}
},
},
["err_not_class_template_specialization"]={
["err_invalid_vector_long_double_decl_spec"]={
[c]="err_not_class_template_specialization",
[b]="err_invalid_vector_long_double_decl_spec",
[d]="cannot specialize a %select{dependent template|template template parameter}0",
[i]="cannot use \'long double\' with \'__vector\'",
[e]={{nil,nil,{"cannot specialize a ",{"dependent template","template template parameter"}}}},
[j]="cannot use \'long double\' with \'__vector\'",
[f]=k,
[h]=k,
[g]="cannot specialize a (?:dependent template|template template parameter)",
[c]="cannot use \'long double\' with \'__vector\'",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"dd6c0356bae5",1257986780,"Improve recovery in a wonky case where one tries to specialize a","Improve recovery in a wonky case where one tries to specialize a\ntemplate template parameter.\n\nWhen building a template-id type, check whether the template-name\nitself is dependent (even if the template arguments are not!) and\nhandle it as a template-id type.\n\nllvm-svn: 86913"},
[g]={"691e01d94e53",1414783164,"[PowerPC] Initial VSX intrinsic support, with min/max for vector double","[PowerPC] Initial VSX intrinsic support, with min/max for vector double\n\nNow that we have initial support for VSX, we can begin adding\nintrinsics for programmer access to VSX instructions.  This patch\nperforms the necessary enablement in the front end, and tests it by\nimplementing intrinsics for minimum and maximum using the vector\ndouble data type.\n\nThe main change in the front end is to no longer disallow \"vector\" and\n\"double\" in the same declaration (lib/Sema/DeclSpec.cpp), but \"vector\"\nand \"long double\" must still be disallowed.  The new intrinsics are\naccessed via vec_max and vec_min with changes in\nlib/Headers/altivec.h.  Note that for v4f32, we already access\ncorresponding VMX builtins, but with VSX enabled we should use the\nforms that allow all 64 vector registers.\n\nThe new built-ins are defined in include/clang/Basic/BuiltinsPPC.def.\n\nI\'ve added a new test in test/CodeGen/builtins-ppc-vsx.c that is\nsimilar to, but much smaller than, builtins-ppc-altivec.c.  This\nallows us to test VSX IR generation without duplicating CHECK lines\nfor the existing bazillion Altivec tests.\n\nSince vector double is now legal when VSX is available, I\'ve modified\nthe error message, and changed where we test for it and for vector\nlong double, since the target machine isn\'t visible in the old place.\nThis serendipitously removed a not-pertinent warning about \'long\'\nbeing deprecated when used with \'vector\', when \"vector long double\" is\nencountered and we just want to issue an error.  The existing tests\ntest/Parser/altivec.c and test/Parser/cxx-altivec.cpp have been\nupdated accordingly, and I\'ve added test/Parser/vsx.c to verify that\n\"vector double\" is now legitimate with VSX enabled.\n\nThere is a companion patch for LLVM.\n\nllvm-svn: 220989"},
[j]={{Y,8632,"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 (!ClassTemplate) {\n    Diag(TemplateNameLoc, diag::err_not_class_template_specialization) << (Name.getAsTemplateDecl() && isa<TemplateTemplateParmDecl>(Name.getAsTemplateDecl()));"}},
[d]={{D,1217,"/// 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  // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n    // ...\n    if (TypeAltiVecBool) {\n    // ...\n    } else if (TypeSpecType == TST_double) {\n      // vector long double and vector long long double are never allowed.\n      // vector double is OK for Power7 and later, and ZVector.\n      if (getTypeSpecWidth() == TypeSpecifierWidth::Long || getTypeSpecWidth() == TypeSpecifierWidth::LongLong)\n        S.Diag(TSWRange.getBegin(), diag::err_invalid_vector_long_double_decl_spec);"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.spec/part.spec.cpp"]={"clang/test/CXX/temp/temp.spec/part.spec.cpp:339:96: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:345:96: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:371:99: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:374:99: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:399:97: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:402:97: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:449:98: error: cannot specialize a dependent template","clang/test/CXX/temp/temp.spec/part.spec.cpp:472:73: error: cannot specialize a dependent template"}
["clang/test/Parser/vsx.c"]={"clang/test/Parser/vsx.c:9:10: error: cannot use \'long double\' with \'__vector\'","clang/test/Parser/vsx.c:10:8: error: cannot use \'long double\' with \'__vector\'"}
}
}
},
},
["err_not_direct_base_or_virtual"]={
["err_invalid_vector_long_long_decl_spec"]={
[c]="err_not_direct_base_or_virtual",
[b]="err_invalid_vector_long_long_decl_spec",
[d]="type %0 is not a direct or virtual base of %1",
[i]={{nil,B,"use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled"},{w,nil,"use of \'long long\' with \'__vector bool\' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled"}},
[e]="type A is not a direct or virtual base of B",
[j]={{nil,B,"use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled"},{w,nil,"use of \'long long\' with \'__vector bool\' requires VSX support (available on POWER7 or later) or extended Altivec support (available on POWER8 or later) to be enabled"}},
[f]=k,
[h]=k,
[g]="type (.*?) is not a direct or virtual base of (.*?)",
[c]="use of \'long long\' with \'__vector\' requires VSX support \\(available on POWER7 or later\\) to be enabled",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"7baa71e2dd9c",1246383292,"More diagnostics related to initialization of direct bases","More diagnostics related to initialization of direct bases\nin ctor-initializer list.\n\nllvm-svn: 74541"},
[g]={"2351bec3ead0",1425413323,"[PowerPC]Activate \"vector bool long long\" (and alternate spellings) as a valid type for Altivec supp...","[PowerPC]Activate \"vector bool long long\" (and alternate spellings) as a valid type for Altivec support for Power.\n\nThere are two test case updates for very basic testing. While I was editing cxx-altivec.cpp I also updated it to better match some other changes in altivec.c.\n\nNote: \"vector bool long\" was not also added because its use is considered deprecated.\n\nhttp://reviews.llvm.org/D7235\n\nllvm-svn: 231118"},
[j]={{Q,4743,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n  // ...\n  if (!Dependent) {\n    // ...\n    // C++ [base.class.init]p2:\n    // Unless the mem-initializer-id names a nonstatic data member of the\n   // constructor\'s class or a direct or virtual base of that class, the\n   // mem-initializer is ill-formed.\n    if (!DirectBaseSpec && !VirtualBaseSpec) {\n     // If the class has any dependent bases, then it\'s possible that\n     // one of those types will resolve to the same type as\n      // BaseType. Therefore, just treat this as a dependent base\n     // class initialization. FIXME: Should we try to check the\n     // initialization anyway? It seems odd.\n     if (ClassDecl->hasAnyDependentBases())\n      // ...\n      else\n        return Diag(BaseLoc, diag::err_not_direct_base_or_virtual) << BaseType << Context.getTypeDeclType(ClassDecl) << BaseTInfo->getTypeLoc().getSourceRange();"}},
[d]={{D,1171,"/// 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 // Validate and finalize AltiVec vector declspec.\n  if (TypeAltiVecVector) {\n   // No vector long long without VSX (or ZVector).\n   if ((getTypeSpecWidth() == TypeSpecifierWidth::LongLong) && !S.Context.getTargetInfo().hasFeature(\"vsx\") && !S.getLangOpts().ZVector)\n      S.Diag(TSWRange.getBegin(), diag::err_invalid_vector_long_long_decl_spec);"}},
[l]={
[l]={
["clang/test/SemaTemplate/class-template-ctor-initializer.cpp"]={"clang/test/SemaTemplate/class-template-ctor-initializer.cpp:26:14: error: type \'TmplB<int>\' is not a direct or virtual base of \'TmplC\'","clang/test/SemaTemplate/class-template-ctor-initializer.cpp:32:13: error: type \'Tmpl<int>\' is not a direct or virtual base of \'TmplD\'"}
["clang/test/Parser/altivec.c"]={"clang/test/Parser/altivec.c:106:15: error: use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled","clang/test/Parser/altivec.c:107:17: error: use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled","clang/test/Parser/altivec.c:108:13: error: use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled","clang/test/Parser/altivec.c:109:15: error: use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled","clang/test/Parser/altivec.c:133:8: error: use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled","clang/test/Parser/altivec.c:134:15: error: use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled","clang/test/Parser/altivec.c:135:17: error: use of \'long long\' with \'__vector\' requires VSX support (available on POWER7 or later) to be enabled"}
}
}
},
},
["err_not_found_by_two_phase_lookup"]={
["err_invalid_vfs_overlay"]={
[c]="err_not_found_by_two_phase_lookup",
[b]="err_invalid_vfs_overlay",
[d]="call to function %0 that is neither visible in the template definition nor found by argument-dependent lookup",
[i]="invalid virtual filesystem overlay file \'%0\'",
[e]="call to function A that is neither visible in the template definition nor found by argument-dependent lookup",
[j]="invalid virtual filesystem overlay file \'A\'",
[f]=k,
[h]=tb,
[g]="call to function (.*?) that is neither visible in the template definition nor found by argument\\-dependent lookup",
[c]="invalid virtual filesystem overlay file \'(.*?)\'",
[h]=a,
[f]=a,
[i]=m,
[e]=v,
[b]={"998a591e3261",1307313768,"Fix PR10053: Improve diagnostics and error recovery for code which some compilers incorrectly accept...","Fix PR10053: Improve diagnostics and error recovery for code which some compilers incorrectly accept due to a lack of proper support for two-phase name lookup.\n\nllvm-svn: 132672"},
[g]={"801272a98c71",1393352627,"Add a driver option -ivfsoverlay","Add a driver option -ivfsoverlay\n\nReads the description of a virtual filesystem from a file and overlays\nit over the real file system.\n\nllvm-svn: 202176"},
[j]={{pc,13203,"/// Attempt to recover from an ill-formed use of a non-dependent name in a\n/// template, where the non-dependent name was declared after the template\n/// was defined. This is common in code written for a compilers which do not\n/// correctly implement two-stage name lookup.\n///\n/// Returns true if a viable candidate was found and a diagnostic was issued.\nstatic bool DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc, const CXXScopeSpec &SS, LookupResult &R, OverloadCandidateSet::CandidateSetKind CSK, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, CXXRecordDecl **FoundInClass = nullptr) {\n  // ...\n  for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {\n    // ...\n    if (!R.empty()) {\n      // ...\n      SemaRef.Diag(R.getNameLoc(), diag::err_not_found_by_two_phase_lookup) << R.getLookupName();"}},
[d]={{jc,4699,"IntrusiveRefCntPtr<llvm::vfs::FileSystem> clang::createVFSFromOverlayFiles(ArrayRef<std::string> VFSOverlayFiles, DiagnosticsEngine &Diags, IntrusiveRefCntPtr<llvm::vfs::FileSystem> BaseFS) {\n  // ...\n  // earlier vfs files are on the bottom\n  for (const auto &File : VFSOverlayFiles) {\n    // ...\n    if (!FS) {\n      Diags.Report(diag::err_invalid_vfs_overlay) << File;"}}
[l]={
["clang/test/SemaTemplate/dependent-names-no-std.cpp"]={"clang/test/SemaTemplate/dependent-names-no-std.cpp:14:7: error: call to function \'f\' that is neither visible in the template definition nor found by argument-dependent lookup"}
}
},
},
["err_not_integral_type_anon_bitfield"]={
["err_invalid_width_spec"]={
[c]="err_not_integral_type_anon_bitfield",
[b]="err_invalid_width_spec",
[d]="anonymous bit-field has non-integral type %0",
[i]="\'%select{|short|long|long long}0 %1\' is invalid",
[e]="anonymous bit-field has non-integral type A",
[j]={{nil,nil,{"\'",{a,"short","long","long long"}," B\' is invalid"}}},
[f]=k,
[h]=k,
[g]="anonymous bit\\-field has non\\-integral type (.*?)",
[c]="\'(?:|short|long|long long) (.*?)\' is invalid",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"f9b00eb7dc88",1240248578,"clean up anonymous bitfield diagnostics, PR4017","clean up anonymous bitfield diagnostics, PR4017\n\nllvm-svn: 69608"},
[g]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select.","Merge some similar diagnostics using %select.\n\nllvm-svn: 253136"},
[j]={{o,17901,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\n  // C99 6.7.2.1p4 - verify the field type.\n  // C++ 9.6p3: A bit-field shall have integral or enumeration type.\n if (!FieldTy->isDependentType() && !FieldTy->isIntegralOrEnumerationType()) {\n    // ...\n    return Diag(FieldLoc, diag::err_not_integral_type_anon_bitfield) << FieldTy << BitWidth->getSourceRange();"}},
[d]={{D,1282,"/// 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  case TypeSpecifierWidth::Short:    // short int\n  case TypeSpecifierWidth::LongLong: // long long int\n    if (TypeSpecType == TST_unspecified)\n    // ...\n   else if (!(TypeSpecType == TST_int || (IsFixedPointType && getTypeSpecWidth() != TypeSpecifierWidth::LongLong))) {\n      S.Diag(TSWRange.getBegin(), diag::err_invalid_width_spec) << (int)TypeSpecWidth << getSpecifierName((TST)TypeSpecType, Policy);"},{D,1294,"/// 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  case TypeSpecifierWidth::Long: // long double, long int\n    if (TypeSpecType == TST_unspecified)\n    // ...\n    else if (TypeSpecType != TST_int && TypeSpecType != TST_double && !IsFixedPointType) {\n      S.Diag(TSWRange.getBegin(), diag::err_invalid_width_spec) << (int)TypeSpecWidth << getSpecifierName((TST)TypeSpecType, Policy);"}},
[l]={
[l]={
["clang/test/Sema/bitfield.c"]={"clang/test/Sema/bitfield.c:27:3: error: anonymous bit-field has non-integral type \'float\'","clang/test/Sema/bitfield.c:44:3: error: anonymous bit-field has non-integral type \'double\'"}
["clang/test/Parser/declarators.c"]={"clang/test/Parser/declarators.c:99:1: error: \'long struct\' is invalid"}
}
}
},
},
["err_not_integral_type_bitfield"]={
["err_ivar_access_using_property_syntax_suggest"]={
[c]="err_not_integral_type_bitfield",
[b]="err_ivar_access_using_property_syntax_suggest",
[d]="bit-field %0 has non-integral type %1",
[i]="property %0 not found on object of type %1; did you mean to access instance variable %2?",
[e]="bit-field A has non-integral type B",
[j]="property A not found on object of type B; did you mean to access instance variable C?",
[f]=k,
[h]=k,
[g]="bit\\-field (.*?) has non\\-integral type (.*?)",
[c]="property (.*?) not found on object of type (.*?); did you mean to access instance variable (.*?)\\?",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={J,1236199783,H,I},
[g]={"c297cd883641",1309219252,"Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.","Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.\n// rdar://7811841\n\nllvm-svn: 133970"},
[j]={{o,17899,"// Note that FieldName may be null for anonymous bitfields.\nExprResult Sema::VerifyBitField(SourceLocation FieldLoc, IdentifierInfo *FieldName, QualType FieldTy, bool IsMsStruct, Expr *BitWidth) {\n  // ...\// C99 6.7.2.1p4 - verify the field type.\n  // C++ 9.6p3: A bit-field shall have integral or enumeration type.\n  if (!FieldTy->isDependentType() && !FieldTy->isIntegralOrEnumerationType()) {\n   // ...\n   if (FieldName)\n      return Diag(FieldLoc, diag::err_not_integral_type_bitfield) << FieldName << FieldTy << BitWidth->getSourceRange();"},{Q,3635,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (isInstField) {\n  // ...\n  } else {\n    // ...\n    // Non-instance-fields can\'t have a bitfield.\n    if (BitWidth) {\n      if (Member->isInvalidDecl()) {\n      // ...\n      } else if (isa<VarDecl>(Member) || isa<VarTemplateDecl>(Member)) {\n     // ...\n     } else if (isa<TypedefDecl>(Member)) {\n      // ...\n      } else {\n        // ...\n        Diag(Loc, diag::err_not_integral_type_bitfield) << Name << cast<ValueDecl>(Member)->getType() << BitWidth->getSourceRange();"}},
[d]={{bb,2143,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface. This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  if (ObjCIvarDecl *Ivar = IFace->lookupInstanceVariable(Member, ClassDeclared)) {\n   // ...\n   Diag(MemberLoc, diag::err_ivar_access_using_property_syntax_suggest) << MemberName << QualType(OPT, 0) << Ivar->getDeclName() << FixItHint::CreateReplacement(OpLoc, \"->\");"}},
[l]={
[l]={
["clang/test/SemaTemplate/instantiate-field.cpp"]={"clang/test/SemaTemplate/instantiate-field.cpp:8:5: error: bit-field \'bitfield\' has non-integral type \'float\'"}
["clang/test/FixIt/fixit-objc.m"]={"clang/test/FixIt/fixit-objc.m:52:36: error: property \'x\' not found on object of type \'Radar7861841 *\'; did you mean to access instance variable \'x\'?"}
}
}
},
},
["err_not_tag_in_scope"]={
["err_ivar_in_superclass_use"]={
[c]="err_not_tag_in_scope",
[b]="err_ivar_in_superclass_use",
[d]="no %select{struct|interface|union|class|enum}0 named %1 in %2",
[i]="property %0 attempting to use instance variable %1 declared in super class %2",
[e]={{nil,nil,{vb,{"struct","interface","union",mb,"enum"}," named B in C"}}},
[j]="property A attempting to use instance variable B declared in super class C",
[f]=k,
[h]=k,
[g]="no (?:struct|interface|union|class|enum) named (.*?) in (.*?)",
[c]="property (.*?) attempting to use instance variable (.*?) declared in super class (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={ib,1237025389,fb,gb},
[g]={"f881267db9a9",1480718311,"Mass-rename the handful of error_* diagnostics to err_*.","Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545"},
[j]={{o,16976,"/// 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    if (Previous.empty()) {\n     // ...\n     Diag(NameLoc, diag::err_not_tag_in_scope) << Kind << Name << DC << SS.getRange();"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1659,"Decl *TemplateDeclInstantiator::VisitClassTemplateDecl(ClassTemplateDecl *D) {\n  // ...\n  if (isFriend) {\n    // ...\n    if (!PrevClassTemplate && QualifierLoc) {\n      SemaRef.Diag(Pattern->getLocation(), diag::err_not_tag_in_scope) << D->getTemplatedDecl()->getTagKind() << Pattern->getDeclName() << DC << QualifierLoc.getSourceRange();"}},
[d]={{"clang/lib/Sema/SemaObjCProperty.cpp",1352,"/// 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    if (!Ivar) {\n   // ...\n   } else if (getLangOpts().ObjCRuntime.isNonFragile() && !declaresSameEntity(ClassDeclared, IDecl)) {\n      Diag(PropertyDiagLoc, diag::err_ivar_in_superclass_use) << property->getDeclName() << Ivar->getDeclName() << ClassDeclared->getDeclName();"}},
[l]={
[l]={
["clang/test/Parser/recovery.cpp"]={"clang/test/Parser/recovery.cpp:215:10: error: no struct named \'foo\' in the global namespace"}
["clang/test/SemaObjC/ivar-sem-check-2.m"]={"clang/test/SemaObjC/ivar-sem-check-2.m:20:13: error: property \'prop\' attempting to use instance variable \'value2\' declared in super class \'Super\'"}
}
}
},
},
["err_ns_attribute_wrong_parameter_type"]={
["err_ivar_reference_type"]={
[c]="err_ns_attribute_wrong_parameter_type",
[b]="err_ivar_reference_type",
[d]="%0 attribute only applies to %select{Objective-C object|pointer|pointer-to-CF-pointer}1 parameters",
[i]="instance variables cannot be of reference type",
[e]={{nil,nil,{"A attribute only applies to ",{"Objective-C object","pointer","pointer-to-CF-pointer"}," parameters"}}},
[j]="instance variables cannot be of reference type",
[f]=k,
[h]=k,
[g]="(.*?) attribute only applies to (?:Objective\\-C object|pointer|pointer\\-to\\-CF\\-pointer) parameters",
[c]="instance variables cannot be of reference type",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"3b5a8f5ffc83",1456963803,"Improve some infrastructure for extended parameter infos and","Improve some infrastructure for extended parameter infos and\nfix a bug with the instantiation of ns_consumed parameter\nattributes in ARC.\n\nllvm-svn: 262551"},
[g]={"0103d67f9816",1272319623,"Diagnose declaration of reference typed ivars.","Diagnose declaration of reference typed ivars.\n\nllvm-svn: 102390"},
[j]={{K,5910,"void Sema::AddXConsumedAttr(Decl *D, const AttributeCommonInfo &CI, RetainOwnershipKind K, bool IsTemplateInstantiation) {\n  // ...\n  case RetainOwnershipKind::NS:\n    handleSimpleAttributeOrDiagnose<NSConsumedAttr>(*this, VD, CI, isValidSubjectOfNSAttribute(VD->getType()),\n                                                    // ...\n                                                    ((IsTemplateInstantiation && getLangOpts().ObjCAutoRefCount) ? diag::err_ns_attribute_wrong_parameter_type : diag::warn_ns_attribute_wrong_parameter_type),"}}
[d]={{p,18379,"/// ActOnIvar - Each ivar field of an objective-c class is passed into this\n/// in order to create an IvarDecl object for it.\nDecl *Sema::ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D, Expr *BitfieldWidth, tok::ObjCKeywordKind Visibility) {\n  // ...\n  if (T->isReferenceType()) {\n    Diag(Loc, diag::err_ivar_reference_type);"}},
},
["err_nsconsumed_attribute_mismatch"]={
[c]="err_nsconsumed_attribute_mismatch",
[d]="overriding method has mismatched ns_consumed attribute on its parameter",
[e]="overriding method has mismatched ns_consumed attribute on its parameter",
[f]=k,
[g]="overriding method has mismatched ns_consumed attribute on its parameter",
[h]=a,
[i]=m,
[b]={"ac8dbf0fc70c",1317162936,"objcetive-c-arc: When overriding a method, its ns_consumed patameter","objcetive-c-arc: When overriding a method, its ns_consumed patameter\nattribute must match its overriden method. Same also for\nns_returns_retained/not_retained on the result type.\nThis is one half of // rdar://10187884\n\nllvm-svn: 140649"},
[j]={{T,215,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  // ...\n  for (ObjCMethodDecl::param_iterator ni = NewMethod->param_begin(), ne = NewMethod->param_end(); ni != ne && oi != oe; ++ni, ++oi) {\n    // ...\n    if (newDecl->hasAttr<NSConsumedAttr>() != oldDecl->hasAttr<NSConsumedAttr>()) {\n      Diag(newDecl->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsconsumed_attribute_mismatch : diag::warn_nsconsumed_attribute_mismatch);"}},
[l]={
[l]={
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:126:45: error: overriding method has mismatched ns_consumed attribute on its parameter"}
["clang/test/SemaObjCXX/ivar-reference-type.mm"]={"clang/test/SemaObjCXX/ivar-reference-type.mm:3:8: error: instance variables cannot be of reference type"}
}
}
},
},
["err_nserrordomain_invalid_decl"]={
["err_ivar_use_in_class_method"]={
[c]={{nil,D,"err_nserrordomain_invalid_decl"}},
[b]="err_ivar_use_in_class_method",
[d]={{nil,D,"domain argument %select{|%1 }0does not refer to global constant"}},
[i]="instance variable %0 accessed in class method",
[e]={{nil,D,{"domain argument ",{a,"B "},"does not refer to global constant"}}},
[j]="instance variable A accessed in class method",
[f]=k,
[h]=k,
[g]="domain argument (?:|(.*?) )does not refer to global constant",
[c]="instance variable (.*?) accessed in class method",
[h]=a,
[f]=a,
[i]={{nil,D,m}},
[e]=m,
[b]={tc,1582847864,uc,vc},
[g]={"f881267db9a9",1480718311,"Mass-rename the handful of error_* diagnostics to err_*.","Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545"},
[j]={{K,6151,"static void handleNSErrorDomain(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!DRE) {\n    S.Diag(Loc, diag::err_nserrordomain_invalid_decl) << 0;"},{K,6157,"static void handleNSErrorDomain(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!VD) {\n    S.Diag(Loc, diag::err_nserrordomain_invalid_decl) << 1 << DRE->getDecl();"}},
[d]={{q,2963,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n  // ...\n  if (LookForIvars) {\n    // ...\n    if (IFace && (IV = IFace->lookupInstanceVariable(II, ClassDeclared))) {\n      // Diagnose using an ivar in a class method.\n      if (IsClassMethod) {\n        Diag(Loc, diag::err_ivar_use_in_class_method) << IV->getDeclName();"},{q,2991,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n  // ...\n  if (LookForIvars) {\n  // ...\n  } else if (CurMethod->isInstanceMethod()) {\n  // ...\n  } else if (Lookup.isSingleResult() && Lookup.getFoundDecl()->isDefinedOutsideFunctionOrMethod()) {\n    // If accessing a stand-alone ivar in a class method, this is an error.\n    if (const ObjCIvarDecl *IV = dyn_cast<ObjCIvarDecl>(Lookup.getFoundDecl())) {\n      Diag(Loc, diag::err_ivar_use_in_class_method) << IV->getDeclName();"}},
[l]={
[l]={
["clang/test/Sema/ns_error_enum.m"]={"clang/test/Sema/ns_error_enum.m:76:58: error: domain argument does not refer to global constant","clang/test/Sema/ns_error_enum.m:80:66: error: domain argument \'foo\' does not refer to global constant"}
["clang/test/SemaObjC/ivar-lookup-resolution-builtin.m"]={"clang/test/SemaObjC/ivar-lookup-resolution-builtin.m:18:10: error: instance variable \'index\' accessed in class method"}
}
}
},
},
["err_nserrordomain_wrong_type"]={
["err_kern_call_not_global_function"]={
[c]={{nil,D,"err_nserrordomain_wrong_type"}},
[b]="err_kern_call_not_global_function",
[d]={{nil,D,"domain argument %0 does not point to an NSString or CFString constant"}},
[i]="kernel call to non-global function %0",
[e]={{nil,D,"domain argument A does not point to an NSString or CFString constant"}},
[j]="kernel call to non-global function A",
[f]=k,
[h]=k,
[g]="domain argument (.*?) does not point to an NSString or CFString constant",
[c]="kernel call to non\\-global function (.*?)",
[h]=a,
[f]=a,
[i]={{nil,D,m}},
[e]=m,
[b]={tc,1582847864,uc,vc},
[g]={"4b66c47a16ee",1298426009,"Sema: diagnose kernel calls to non-global functions","Sema: diagnose kernel calls to non-global functions\n\nllvm-svn: 126292"},
[j]={{K,6163,"static void handleNSErrorDomain(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!isNSStringType(VD->getType(), S.Context) && !isCFStringType(VD->getType(), S.Context)) {\n   S.Diag(Loc, diag::err_nserrordomain_wrong_type) << VD;"}},
[d]={{q,7490,"/// 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  if (getLangOpts().CUDA) {\n    if (Config) {\n      // CUDA: Kernel calls must be to global functions\n      if (FDecl && !FDecl->hasAttr<CUDAGlobalAttr>())\n       return ExprError(Diag(LParenLoc, diag::err_kern_call_not_global_function) << FDecl << Fn->getSourceRange());"}},
[l]={
[l]={
["clang/test/Sema/ns_error_enum.m"]={"clang/test/Sema/ns_error_enum.m:55:37: error: domain argument \'WrongErrorDomainType\' does not point to an NSString or CFString constant"}
["clang/test/SemaCUDA/kernel-call.cu"]={"clang/test/SemaCUDA/kernel-call.cu:22:15: error: kernel call to non-global function \'h1\'"}
}
}
},
},
["err_nsnumber_nonliteral_unary"]={
["err_kern_is_nonstatic_method"]={
[c]="err_nsnumber_nonliteral_unary",
[b]="err_kern_is_nonstatic_method",
[d]="@%0 must be followed by a number to form an NSNumber object",
[i]="kernel function %0 must be a free function or static member function",
[e]="@A must be followed by a number to form an NSNumber object",
[j]="kernel function A must be a free function or static member function",
[f]=k,
[h]=k,
[g]="@(.*?) must be followed by a number to form an NSNumber object",
[c]="kernel function (.*?) must be a free function or static member function",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={jb,1331064356,kb,lb},
[g]={"c66a10652a94",1453249617,"[CUDA] Only allow __global__ on free functions and static member functions.","[CUDA] Only allow __global__ on free functions and static member functions.\n\nSummary:\nWarn for NVCC compatibility if you declare a static member function or\ninline function as __global__.\n\nReviewers: tra\n\nSubscribers: jhen, echristo, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D16261\n\nllvm-svn: 258263"},
[j]={{N,2852,"ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) {\n  // ...\n  case tok::minus:\n  case tok::plus: {\n    // ...\n    if (!Tok.is(tok::numeric_constant)) {\n      // ...\n      Diag(Tok, diag::err_nsnumber_nonliteral_unary) << Symbol;"}},
[d]={{u,5051,"static void handleGlobalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (const auto *Method = dyn_cast<CXXMethodDecl>(FD)) {\n    if (Method->isInstance()) {\n      S.Diag(Method->getBeginLoc(), diag::err_kern_is_nonstatic_method) << Method;"}},
[l]={
[l]={
["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:66:5: error: @- must be followed by a number to form an NSNumber object","clang/test/SemaObjC/objc-literal-nsnumber.m:67:5: error: @+ must be followed by a number to form an NSNumber object"}
["clang/test/SemaCUDA/bad-attributes.cu"]={"clang/test/SemaCUDA/bad-attributes.cu:54:3: error: kernel function \'foo\' must be a free function or static member function"}
}
}
},
},
["err_nsobject_attribute"]={
["err_kern_type_not_void_return"]={
[c]="err_nsobject_attribute",
[b]="err_kern_type_not_void_return",
[d]="\'NSObject\' attribute is for pointer types only",
[i]="kernel function type %0 must have void return type",
[e]="\'NSObject\' attribute is for pointer types only",
[j]="kernel function type A must have void return type",
[f]=k,
[h]=k,
[g]="\'NSObject\' attribute is for pointer types only",
[c]="kernel function type (.*?) must have void return type",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={J,1236199783,H,I},
[g]={"e8cfaf4258ca",1292194977,"Sema: diagnose kernel functions with non-void return type","Sema: diagnose kernel functions with non-void return type\n\nllvm-svn: 121653"},
[j]={{K,2994,"static void handleObjCNSObject(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n    // ...\n    if (!T->isCARCBridgableType()) {\n      S.Diag(TD->getLocation(), diag::err_nsobject_attribute);"},{K,3001,"static void handleObjCNSObject(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n // ...\n } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n    // ...\n    if (!T->isCARCBridgableType()) {\n     S.Diag(PD->getLocation(), diag::err_nsobject_attribute);"}},
[d]={{u,5043,"static void handleGlobalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!FD->getReturnType()->isVoidType() && !FD->getReturnType()->getAs<AutoType>() && !FD->getReturnType()->isInstantiationDependentType()) {\n    // ...\n    S.Diag(FD->getTypeSpecStartLoc(), diag::err_kern_type_not_void_return) << FD->getType() << (RTRange.isValid() ? FixItHint::CreateReplacement(RTRange, \"void\") : FixItHint());"},{q,7495,"/// 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  if (getLangOpts().CUDA) {\n    if (Config) {\n      // ...\n      // CUDA: Kernel function must have \'void\' return type\n      if (!FuncT->getReturnType()->isVoidType() && !FuncT->getReturnType()->getAs<AutoType>() && !FuncT->getReturnType()->isInstantiationDependentType())\n        return ExprError(Diag(LParenLoc, diag::err_kern_type_not_void_return) << Fn->getType() << Fn->getSourceRange());"},{"clang/lib/Sema/SemaStmt.cpp",3883,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  // ...\n  // CUDA: Kernel function must have \'void\' return type.\n  if (getLangOpts().CUDA && FD->hasAttr<CUDAGlobalAttr>() && !Deduced->isVoidType()) {\n    Diag(FD->getLocation(), diag::err_kern_type_not_void_return) << FD->getType() << FD->getSourceRange();"},{"clang/lib/Sema/SemaTemplateDeduction.cpp",3347,"/// Substitute the explicitly-provided template arguments into the\n/// given function template according to C++ [temp.arg.explicit].\n///\n/// \\param FunctionTemplate the function template into which the explicit\n/// template arguments will be substituted.\n///\n/// \\param ExplicitTemplateArgs the explicitly-specified template\n/// arguments.\n///\n/// \\param Deduced the deduced template arguments, which will be populated\n/// with the converted and checked explicit template arguments.\n///\n/// \\param ParamTypes will be populated with the instantiated function\n/// parameters.\n///\n/// \\param FunctionType if non-NULL, the result type of the function template\n/// will also be instantiated and the pointed-to value will be updated with\n/// the instantiated function type.\n///\n/// \\param Info if substitution fails for any reason, this object will be\n/// populated with more information about the failure.\n///\n/// \\returns TDK_Success if substitution was successful, or some failure\n/// condition.\nSema::TemplateDeductionResult Sema::SubstituteExplicitTemplateArguments(FunctionTemplateDecl *FunctionTemplate, TemplateArgumentListInfo &ExplicitTemplateArgs, SmallVectorImpl<DeducedTemplateArgument> &Deduced, SmallVectorImpl<QualType> &ParamTypes, QualType *FunctionType, TemplateDeductionInfo &Info) {\n  // ...\n  {\n    // ...\n    // CUDA: Kernel function must have \'void\' return type.\n    if (getLangOpts().CUDA)\n      if (Function->hasAttr<CUDAGlobalAttr>() && !ResultType->isVoidType()) {\n       Diag(Function->getLocation(), diag::err_kern_type_not_void_return) << Function->getType() << Function->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/nsobject-attribute.m"]={"clang/test/SemaObjC/nsobject-attribute.m:9:47: error: \'NSObject\' attribute is for pointer types only","clang/test/SemaObjC/nsobject-attribute.m:64:49: error: \'NSObject\' attribute is for pointer types only"}
["clang/test/SemaCUDA/autoret-global.cu"]={"clang/test/SemaCUDA/autoret-global.cu:19:17: error: kernel function type \'auto (int)\' must have void return type"}
}
}
},
},
["err_nsreturns_retained_attribute_mismatch"]={
["err_kernel_arg_address_space"]={
[c]="err_nsreturns_retained_attribute_mismatch",
[b]="err_kernel_arg_address_space",
[d]="overriding method has mismatched ns_returns_%select{not_retained|retained}0 attributes",
[i]="pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space",
[e]={{nil,nil,{"overriding method has mismatched ns_returns_",{"not_retained","retained"}," attributes"}}},
[j]="pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space",
[f]=k,
[h]=k,
[g]="overriding method has mismatched ns_returns_(?:not_retained|retained) attributes",
[c]="pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"ac8dbf0fc70c",1317162936,"objcetive-c-arc: When overriding a method, its ns_consumed patameter","objcetive-c-arc: When overriding a method, its ns_consumed patameter\nattribute must match its overriden method. Same also for\nns_returns_retained/not_retained on the result type.\nThis is one half of // rdar://10187884\n\nllvm-svn: 140649"},
[g]={"de82a65053de",1481638043,"[OpenCL] Improve address space diagnostics.","[OpenCL] Improve address space diagnostics.\n\nReviewers: Anastasia\n\nSubscribers: bader, yaxunl, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D27671\n\nllvm-svn: 289536"},
[j]={{T,189,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  // ...\n  if ((NewMethod->hasAttr<NSReturnsRetainedAttr>() != Overridden->hasAttr<NSReturnsRetainedAttr>())) {\n    Diag(NewMethod->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsreturns_retained_attribute_mismatch : diag::warn_nsreturns_retained_attribute_mismatch) << 1;"},{T,198,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  // ...\n  if ((NewMethod->hasAttr<NSReturnsNotRetainedAttr>() != Overridden->hasAttr<NSReturnsNotRetainedAttr>())) {\n    Diag(NewMethod->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsreturns_retained_attribute_mismatch : diag::warn_nsreturns_retained_attribute_mismatch) << 0;"}},
[d]={{p,9463,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  // ...\n  case InvalidAddrSpacePtrKernelParam:\n    // ...\n    S.Diag(Param->getLocation(), diag::err_kernel_arg_address_space);"}},
[l]={
[l]={
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:129:1: error: overriding method has mismatched ns_returns_not_retained attributes","clang/test/SemaObjC/arc-decls.m:130:1: error: overriding method has mismatched ns_returns_retained attributes"}
["clang/test/SemaOpenCL/invalid-kernel-parameters.cl"]={"clang/test/SemaOpenCL/invalid-kernel-parameters.cl:18:44: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:21:45: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:24:34: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:27:35: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:30:40: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:32:54: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:34:67: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:36:67: error: pointer arguments to kernel functions must reside in \'__global\', \'__constant\' or \'__local\' address space"}
}
}
},
},
["err_nullability_conflicting"]={
["err_keyword_as_parameter"]={
[c]="err_nullability_conflicting",
[b]={{nil,o,"err_keyword_as_parameter"}},
[d]="nullability specifier %0 conflicts with existing specifier %1",
[i]={{nil,o,"invalid parameter name: \'%0\' is a keyword"}},
[e]="nullability specifier A conflicts with existing specifier B",
[j]={{nil,o,"invalid parameter name: \'A\' is a keyword"}},
[f]=k,
[h]=k,
[g]="nullability specifier (.*?) conflicts with existing specifier (.*?)",
[c]="invalid parameter name\\: \'(.*?)\' is a keyword",
[h]=a,
[f]=a,
[i]="Nullability Issue",
[e]={{nil,o,C}},
[b]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++.","Introduce type nullability specifiers for C/C++.\n\nIntroduces the type specifiers __nonnull, __nullable, and\n__null_unspecified that describe the nullability of the pointer type\nto which the specifier appertains. Nullability type specifiers improve\non the existing nonnull attributes in a few ways:\n  - They apply to types, so one can represent a pointer to a non-null\n    pointer, use them in function pointer types, etc.\n - As type specifiers, they are syntactically more lightweight than\n   __attribute__s or [[attribute]]s.\n - They can express both the notion of \'should never be null\' and\n also \'it makes sense for this to be null\', and therefore can more\n easily catch errors of omission where one forgot to annotate the\n  nullability of a particular pointer (this will come in a subsequent\n patch).\n\nNullability type specifiers are maintained as type sugar, and\ntherefore have no effect on mangling, encoding, overloading,\netc. Nonetheless, they will be used for warnings about, e.g., passing\n\'null\' to a method that does not accept it.\n\nThis is the C/C++ part of rdar://problem/18868820.\n\nllvm-svn: 240146"},
[g]={"625acd8f6847",1586351328,"[Parser] Improve diagnostic and error recovery when C++ keywords are used as identifiers.","[Parser] Improve diagnostic and error recovery when C++ keywords are used as identifiers.\n\nSummary:\nPreviously, clang emitted a less-usefull diagnostic and didnt recover\nwell when the keywords is used as identifier in function paramter.\n\n```\nvoid foo(int case, int x); // previously we drop all parameters after\n`int case`.\n```\n\nReviewers: sammccall\n\nReviewed By: sammccall\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D77633"},
[j]={{N,854,"/// Diagnose redundant or conflicting nullability information.\nstatic void diagnoseRedundantPropertyNullability(Parser &P, ObjCDeclSpec &DS, NullabilityKind nullability, SourceLocation nullabilityLoc) {\n // ...\n P.Diag(nullabilityLoc, diag::err_nullability_conflicting) << DiagNullabilityKind(nullability, true) << DiagNullabilityKind(DS.getNullability(), true) << SourceRange(DS.getNullabilityLoc());"},{T,4563,"/// Merge type nullability from for a redeclaration of the same entity,\n/// producing the updated type of the redeclared entity.\nstatic QualType mergeTypeNullabilityForRedecl(Sema &S, SourceLocation loc, QualType type, bool usesCSKeyword, SourceLocation prevLoc, QualType prevType, bool prevUsesCSKeyword) {\n // ...\n // Easy case: both have nullability.\n if (nullability.has_value() == prevNullability.has_value()) {\n   // ...\n   S.Diag(loc, diag::err_nullability_conflicting) << DiagNullabilityKind(*nullability, usesCSKeyword) << DiagNullabilityKind(*prevNullability, prevUsesCSKeyword);"},{cb,7501,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  while (auto attributed = dyn_cast<AttributedType>(desugared.getTypePtr())) {\n    // Check whether there is already a null\n    if (auto existingNullability = attributed->getImmediateNullability()) {\n     // ...\n     S.Diag(nullabilityLoc, diag::err_nullability_conflicting) << DiagNullabilityKind(nullability, isContextSensitive) << DiagNullabilityKind(*existingNullability, false);"},{cb,7516,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n // ...\n // If there is already a different nullability specifier, complain.\n // This (unlike the code above) looks through typedefs that might\n // have nullability specifiers on them, which means we cannot\n // provide a useful Fix-It.\n if (auto existingNullability = desugared->getNullability()) {\n    if (nullability != *existingNullability) {\n     S.Diag(nullabilityLoc, diag::err_nullability_conflicting) << DiagNullabilityKind(nullability, isContextSensitive) << DiagNullabilityKind(*existingNullability, false);"}},
[d]={{P,7428,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///       parameter-list: [C99 6.7.5]\n///         parameter-declaration\n///         parameter-list \',\' parameter-declaration\n///\n///       parameter-declaration: [C99 6.7.5]\n///         declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///           \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n   // ...\n   } else {\n     // ...\n     // Now we are at the point where declarator parsing is finished.\n     //\n     // Try to catch keywords in place of the identifier in a declarator, and\n     // in particular the common case where:\n     //   1 identifier comes at the end of the declarator\n     //   2 if the identifier is dropped, the declarator is valid but anonymous\n     //     (no identifier)\n     //   3 declarator parsing succeeds, and then we have a trailing keyword,\n     //     which is never valid in a param list (e.g. missing a \',\')\n     // And we can\'t handle this in ParseDeclarator because in general keywords\n     // may be allowed to follow the declarator. (And in some cases there\'d be\n      // better recovery like inserting punctuation). ParseDeclarator is just\n     // treating this as an anonymous parameter, and fortunately at this point\n     // we\'ve already almost done that.\n     //\n     // We care about case 1) where the declarator type should be known, and\n     // the identifier should be null.\n     if (!ParmDeclarator.isInvalidType() && !ParmDeclarator.hasName() && Tok.isNot(tok::raw_identifier) && !Tok.isAnnotation() && Tok.getIdentifierInfo() && Tok.getIdentifierInfo()->isKeyword(getLangOpts())) {\n       Diag(Tok, diag::err_keyword_as_parameter) << PP.getSpelling(Tok);"}},
[l]={
[l]={
["clang/test/SemaObjC/nullability.m"]={"clang/test/SemaObjC/nullability.m:39:4: error: nullability specifier \'nonnull\' conflicts with existing specifier \'_Nullable\'","clang/test/SemaObjC/nullability.m:45:27: error: nullability specifier \'null_unspecified\' conflicts with existing specifier \'_Nullable\'","clang/test/SemaObjC/nullability.m:48:43: error: nullability specifier \'nullable\' conflicts with existing specifier \'null_unspecified\'","clang/test/SemaObjC/nullability.m:56:27: error: nullability specifier \'null_unspecified\' conflicts with existing specifier \'_Nullable\'","clang/test/SemaObjC/nullability.m:102:13: error: nullability specifier \'nullable\' conflicts with existing specifier \'nonnull\'","clang/test/SemaObjC/nullability.m:102:54: error: nullability specifier \'null_unspecified\' conflicts with existing specifier \'nonnull\'","clang/test/SemaObjC/nullability.m:168:4: error: nullability specifier \'nonnull\' conflicts with existing specifier \'_Nullable\'"}
["clang/test/Parser/cxx-keyword-identifiers.cpp"]={"clang/test/Parser/cxx-keyword-identifiers.cpp:4:14: error: invalid parameter name: \'case\' is a keyword","clang/test/Parser/cxx-keyword-identifiers.cpp:4:24: error: invalid parameter name: \'throw\' is a keyword","clang/test/Parser/cxx-keyword-identifiers.cpp:10:14: error: invalid parameter name: \'case\' is a keyword","clang/test/Parser/cxx-keyword-identifiers.cpp:18:14: error: invalid parameter name: \'case\' is a keyword"}
}
}
},
},
["err_nullability_cs_multilevel"]={
["err_keyword_misplaced"]={
[c]="err_nullability_cs_multilevel",
[b]="err_keyword_misplaced",
[d]="nullability keyword %0 cannot be applied to multi-level pointer type %1",
[i]="misplaced %0; expected %0 here",
[e]="nullability keyword A cannot be applied to multi-level pointer type B",
[j]="misplaced A; expected A here",
[f]=k,
[h]=k,
[g]="nullability keyword (.*?) cannot be applied to multi\\-level pointer type (.*?)",
[c]="misplaced (.*?); expected (.*?) here",
[h]=a,
[f]=a,
[i]="Nullability Issue",
[e]=C,
[b]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C.","Extend type nullability qualifiers for Objective-C.\n\nIntroduce context-sensitive, non-underscored nullability specifiers\n(nonnull, nullable, null_unspecified) for Objective-C method return\ntypes, method parameter types, and properties.\n\nIntroduce Objective-C-specific semantics, including computation of the\nnullability of the result of a message send, merging of nullability\ninformation from the @interface of a class into its @implementation,\netc .\n\nThis is the Objective-C part of rdar://problem/18868820.\n\nllvm-svn: 240154"},
[g]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives\n\nCUDA and HIP have kernel attributes to tune the code generation (in the\nbackend). To reuse this functionality for OpenMP target regions we\nintroduce the `ompx_attribute` clause that takes these kernel\nattributes and emits code as if they had been attached to the kernel\nfuction (which is implicitly generated).\n\nTo limit the impact, we only support three kernel attributes:\n`amdgpu_waves_per_eu`, for AMDGPU\n`amdgpu_flat_work_group_size`, for AMDGPU\n`launch_bounds`, for NVPTX\n\nThe existing implementations of those attributes are used for error\nchecking and code generation. `ompx_attribute` can be attached to any\nexecutable target region and it can hold more than one kernel attribute.\n\nDifferential Revision: https://reviews.llvm.org/D156184"},
[j]={{cb,7558,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  // For the context-sensitive keywords/Objective-C property\n  // attributes, require that the type be a single-level pointer.\n  if (isContextSensitive) {\n    // ...\n    if (pointeeType && (pointeeType->isAnyPointerType() || pointeeType->isObjCObjectPointerType() || pointeeType->isMemberPointerType())) {\n      S.Diag(nullabilityLoc, diag::err_nullability_cs_multilevel) << DiagNullabilityKind(nullability, true) << type;"}},
[d]={{P,1718,"void Parser::DiagnoseProhibitedAttributes(const ParsedAttributesView &Attrs, const SourceLocation CorrectLocation) {\n  // ...\n  if (CorrectLocation.isValid()) {\n    // ...\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(CorrectLocation, diag::err_keyword_misplaced) << FirstAttr : Diag(CorrectLocation, diag::err_attributes_misplaced)) << FixItHint::CreateInsertionFromRange(CorrectLocation, AttrRange) << FixItHint::CreateRemoval(AttrRange);"}},
[l]={
[l]={
["clang/test/SemaObjC/nullability.m"]={"clang/test/SemaObjC/nullability.m:37:4: error: nullability keyword \'nonnull\' cannot be applied to multi-level pointer type \'NSFoo **\'","clang/test/SemaObjC/nullability.m:43:19: error: nullability keyword \'nullable\' cannot be applied to multi-level pointer type \'NSFoo **\'","clang/test/SemaObjC/nullability.m:54:19: error: nullability keyword \'nullable\' cannot be applied to multi-level pointer type \'NSFoo **\'","clang/test/SemaObjC/nullability.m:283:22: error: nullability keyword \'nonnull\' cannot be applied to multi-level pointer type \'void * _Nullable[2]\'"}
["clang/test/Parser/cxx0x-keyword-attributes.cpp"]={"clang/test/Parser/cxx0x-keyword-attributes.cpp:56:23: error: misplaced \'__arm_streaming\'; expected \'__arm_streaming\' here","clang/test/Parser/cxx0x-keyword-attributes.cpp:57:22: error: misplaced \'__arm_streaming\'; expected \'__arm_streaming\' here","clang/test/Parser/cxx0x-keyword-attributes.cpp:58:22: error: misplaced \'__arm_streaming\'; expected \'__arm_streaming\' here","clang/test/Parser/cxx0x-keyword-attributes.cpp:59:21: error: misplaced \'__arm_streaming\'; expected \'__arm_streaming\' here","clang/test/Parser/cxx0x-keyword-attributes.cpp:92:23: error: misplaced \'__arm_streaming\'; expected \'__arm_streaming\' here"}
}
}
},
},
["err_nullability_nonpointer"]={
["err_keyword_not_allowed"]={
[c]="err_nullability_nonpointer",
[b]="err_keyword_not_allowed",
[d]="nullability specifier %0 cannot be applied to non-pointer type %1",
[i]="%0 cannot appear here",
[e]="nullability specifier A cannot be applied to non-pointer type B",
[j]="A cannot appear here",
[f]=k,
[h]=k,
[g]="nullability specifier (.*?) cannot be applied to non\\-pointer type (.*?)",
[c]="(.*?) cannot appear here",
[h]=a,
[f]=a,
[i]="Nullability Issue",
[e]=C,
[b]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++.","Introduce type nullability specifiers for C/C++.\n\nIntroduces the type specifiers __nonnull, __nullable, and\n__null_unspecified that describe the nullability of the pointer type\nto which the specifier appertains. Nullability type specifiers improve\non the existing nonnull attributes in a few ways:\n  - They apply to types, so one can represent a pointer to a non-null\n    pointer, use them in function pointer types, etc.\n - As type specifiers, they are syntactically more lightweight than\n    __attribute__s or [[attribute]]s.\n - They can express both the notion of \'should never be null\' and\n  also \'it makes sense for this to be null\', and therefore can more\n  easily catch errors of omission where one forgot to annotate the\n  nullability of a particular pointer (this will come in a subsequent\n  patch).\n\nNullability type specifiers are maintained as type sugar, and\ntherefore have no effect on mangling, encoding, overloading,\netc. Nonetheless, they will be used for warnings about, e.g., passing\n\'null\' to a method that does not accept it.\n\nThis is the C/C++ part of rdar://problem/18868820.\n\nllvm-svn: 240146"},
[g]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives\n\nCUDA and HIP have kernel attributes to tune the code generation (in the\nbackend). To reuse this functionality for OpenMP target regions we\nintroduce the `ompx_attribute` clause that takes these kernel\nattributes and emits code as if they had been attached to the kernel\nfuction (which is implicitly generated).\n\nTo limit the impact, we only support three kernel attributes:\n`amdgpu_waves_per_eu`, for AMDGPU\n`amdgpu_flat_work_group_size`, for AMDGPU\n`launch_bounds`, for NVPTX\n\nThe existing implementations of those attributes are used for error\nchecking and code generation. `ompx_attribute` can be attached to any\nexecutable target region and it can hold more than one kernel attribute.\n\nDifferential Revision: https://reviews.llvm.org/D156184"},
[j]={{cb,7540,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  // If this definitely isn\'t a pointer type, reject the specifier.\n if (!desugared->canHaveNullability() && !(allowOnArrayType && desugared->isArrayType())) {\n    S.Diag(nullabilityLoc, diag::err_nullability_nonpointer) << DiagNullabilityKind(nullability, isContextSensitive) << type;"}},
[d]={{P,1706,"/// We have found the opening square brackets of a C++11\n/// attribute-specifier in a location where an attribute is not permitted, but\n/// we know where the attributes ought to be written. Parse them anyway, and\n/// provide a fixit moving them to the right place.\nvoid Parser::DiagnoseMisplacedCXX11Attribute(ParsedAttributes &Attrs, SourceLocation CorrectLocation) {\n  // ...\n  (Keyword ? Diag(Loc, diag::err_keyword_not_allowed) << Keyword : Diag(Loc, diag::err_attributes_not_allowed)) << FixItHint::CreateInsertionFromRange(CorrectLocation, AttrRange) << FixItHint::CreateRemoval(AttrRange);"},{P,1725,"void Parser::DiagnoseProhibitedAttributes(const ParsedAttributesView &Attrs, const SourceLocation CorrectLocation) {\n  // ...\n  if (CorrectLocation.isValid()) {\n  // ...\n  } else {\n    // ...\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Range.getBegin(), diag::err_keyword_not_allowed) << FirstAttr : Diag(Range.getBegin(), diag::err_attributes_not_allowed)) << Range;"},{P,5053,"/// 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   ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{P,6704,"PastIdentifier:\n  // ...\n  while (true) {\n    if (Tok.is(tok::l_paren)) {\n    // ...\n    } else if (Tok.is(tok::l_square)) {\n    // ...\n    } else if (Tok.isRegularKeywordAttribute()) {\n      // ...\n      Diag(Tok, diag::err_keyword_not_allowed) << Tok.getIdentifierInfo();"},{U,776,"/// 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 we had any misplaced attributes from earlier, this is where they\n  // should have been written.\n  if (MisplacedAttrs.Range.isValid()) {\n    // ...\n    (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Range.getBegin(), diag::err_keyword_not_allowed) << FirstAttr : Diag(Range.getBegin(), diag::err_attributes_not_allowed)) << FixItHint::CreateInsertionFromRange(Tok.getLocation(), CharSourceRange::getTokenRange(Range)) << FixItHint::CreateRemoval(Range);"},{U,1931,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  // Forbid misplaced attributes. In cases of a reference, we pass attributes\n // to caller to handle.\n  if (TUK != Sema::TUK_Reference) {\n    // ...\n    if (AttrRange.isValid()) {\n     // ...\n      (FirstAttr && FirstAttr->isRegularKeywordAttribute() ? Diag(Loc, diag::err_keyword_not_allowed) << FirstAttr : Diag(Loc, diag::err_attributes_not_allowed)) << AttrRange << FixItHint::CreateInsertionFromRange(AttrFixitLoc, CharSourceRange(AttrRange, true)) << FixItHint::CreateRemoval(AttrRange);"},{U,1980,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n if (TemplateId) {\n    // ...\n    if (TemplateId->isInvalid()) {\n    // ...\n   } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n      // ...\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{U,1997,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (TemplateId) {\n   // ...\n    if (TemplateId->isInvalid()) {\n    // ...\n    } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n    // ...\n    } else if (TUK == Sema::TUK_Reference || (TUK == Sema::TUK_Friend && TemplateInfo.Kind == ParsedTemplateInfo::NonTemplate)) {\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{U,2067,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (TemplateId) {\n  // ...\n  } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n  // ...\n } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n    ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{U,2078,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n if (TemplateId) {\n  // ...\n  } else if (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation && TUK == Sema::TUK_Declaration) {\n  // ...\n  } else if (TUK == Sema::TUK_Friend && TemplateInfo.Kind != ParsedTemplateInfo::NonTemplate) {\n  // ...\n  } else {\n    if (TUK != Sema::TUK_Declaration && TUK != Sema::TUK_Definition)\n      ProhibitCXX11Attributes(attrs, diag::err_attributes_not_allowed, diag::err_keyword_not_allowed,"},{U,3059,"/// 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 (DS.isFriendSpecified()) {\n      // C++11 [dcl.attr.grammar] p4: If an attribute-specifier-seq appertains\n      // to a friend declaration, that declaration shall be a definition.\n      //\n      // Diagnose attributes that appear in a friend member function declarator:\n      //  friend int foo [[]] ();\n      for (const ParsedAttr &AL : DeclaratorInfo.getAttributes())\n       if (AL.isCXX11Attribute() || AL.isRegularKeywordAttribute()) {\n          // ...\n          (AL.isRegularKeywordAttribute() ? Diag(Loc, diag::err_keyword_not_allowed) << AL : Diag(Loc, diag::err_attributes_not_allowed)) << AL.getRange();"},{U,4663,"void Parser::DiagnoseAndSkipCXX11Attributes() {\n  // ...\n  if (EndLoc.isValid()) {\n    // ...\n    (Keyword ? Diag(StartLoc, diag::err_keyword_not_allowed) << Keyword : Diag(StartLoc, diag::err_attributes_not_allowed)) << Range;"},{"clang/lib/Parse/ParseStmt.cpp",342,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::kw_asm: {\n    for (const ParsedAttr &AL : CXX11Attrs)\n      // ...\n      (AL.isRegularKeywordAttribute() ? Diag(AL.getRange().getBegin(), diag::err_keyword_not_allowed) : Diag(AL.getRange().getBegin(), diag::warn_attribute_ignored)) << AL;"}},
[l]={
[l]={
["clang/test/SemaObjC/block-omitted-return-type.m"]={"clang/test/SemaObjC/block-omitted-return-type.m:16:34: error: nullability specifier \'_Nonnull\' cannot be applied to non-pointer type \'void\'"}
["clang/test/Parser/cxx0x-keyword-attributes.cpp"]={
[1]="clang/test/Parser/cxx0x-keyword-attributes.cpp:40:7: error: \'__arm_streaming\' cannot appear here",
[2]="clang/test/Parser/cxx0x-keyword-attributes.cpp:64:30: error: \'__arm_streaming\' cannot appear here",
[3]="clang/test/Parser/cxx0x-keyword-attributes.cpp:68:35: error: \'__arm_streaming\' cannot appear here",
[4]="clang/test/Parser/cxx0x-keyword-attributes.cpp:78:3: error: \'__arm_streaming\' cannot appear here",
[5]="clang/test/Parser/cxx0x-keyword-attributes.cpp:80:3: error: \'__arm_streaming\' cannot appear here",
[6]="clang/test/Parser/cxx0x-keyword-attributes.cpp:83:3: error: \'__arm_streaming\' cannot appear here",
[7]="clang/test/Parser/cxx0x-keyword-attributes.cpp:85:3: error: \'__arm_streaming\' cannot appear here",
[8]="clang/test/Parser/cxx0x-keyword-attributes.cpp:93:20: error: \'__arm_streaming\' cannot appear here",
[9]="clang/test/Parser/cxx0x-keyword-attributes.cpp:96:3: error: \'__arm_streaming\' cannot appear here",
[10]="clang/test/Parser/cxx0x-keyword-attributes.cpp:111:18: error: \'__arm_streaming\' cannot appear here",
[11]="clang/test/Parser/cxx0x-keyword-attributes.cpp:112:10: error: \'__arm_streaming\' cannot appear here",
[12]="clang/test/Parser/cxx0x-keyword-attributes.cpp:113:10: error: \'__arm_streaming\' cannot appear here",
[13]="clang/test/Parser/cxx0x-keyword-attributes.cpp:113:30: error: \'__arm_streaming\' cannot appear here",
[14]="clang/test/Parser/cxx0x-keyword-attributes.cpp:117:14: error: \'__arm_streaming\' cannot appear here",
[15]="clang/test/Parser/cxx0x-keyword-attributes.cpp:118:1: error: \'__arm_streaming\' cannot appear here",
[16]="clang/test/Parser/cxx0x-keyword-attributes.cpp:119:1: error: \'__arm_streaming\' cannot appear here",
[17]="clang/test/Parser/cxx0x-keyword-attributes.cpp:120:1: error: \'__arm_streaming\' cannot appear here",
[18]="clang/test/Parser/cxx0x-keyword-attributes.cpp:121:1: error: \'__arm_streaming\' cannot appear here",
[19]="clang/test/Parser/cxx0x-keyword-attributes.cpp:122:1: error: \'__arm_streaming\' cannot appear here",
[20]="clang/test/Parser/cxx0x-keyword-attributes.cpp:130:7: error: \'__arm_streaming\' cannot appear here",
[21]="clang/test/Parser/cxx0x-keyword-attributes.cpp:135:7: error: \'__arm_streaming\' cannot appear here",
[22]="clang/test/Parser/cxx0x-keyword-attributes.cpp:139:1: error: \'__arm_streaming\' cannot appear here",
[23]="clang/test/Parser/cxx0x-keyword-attributes.cpp:159:7: error: \'__arm_streaming\' cannot appear here",
[24]="clang/test/Parser/cxx0x-keyword-attributes.cpp:164:20: error: \'__arm_streaming\' cannot appear here",
[25]="clang/test/Parser/cxx0x-keyword-attributes.cpp:165:26: error: \'__arm_streaming\' cannot appear here",
[26]="clang/test/Parser/cxx0x-keyword-attributes.cpp:175:8: error: \'__arm_streaming\' cannot appear here",
[27]="clang/test/Parser/cxx0x-keyword-attributes.cpp:176:8: error: \'__arm_streaming\' cannot appear here",
[28]="clang/test/Parser/cxx0x-keyword-attributes.cpp:177:8: error: \'__arm_streaming\' cannot appear here",
[29]="clang/test/Parser/cxx0x-keyword-attributes.cpp:178:17: error: \'__arm_streaming\' cannot appear here",
[30]="clang/test/Parser/cxx0x-keyword-attributes.cpp:191:6: error: \'__arm_streaming\' cannot appear here",
[31]="clang/test/Parser/cxx0x-keyword-attributes.cpp:192:6: error: \'__arm_streaming\' cannot appear here",
[32]="clang/test/Parser/cxx0x-keyword-attributes.cpp:197:16: error: \'__arm_streaming\' cannot appear here",
[33]="clang/test/Parser/cxx0x-keyword-attributes.cpp:200:3: error: \'__arm_streaming\' cannot appear here",
[34]="clang/test/Parser/cxx0x-keyword-attributes.cpp:203:3: error: \'__arm_streaming\' cannot appear here",
[35]="clang/test/Parser/cxx0x-keyword-attributes.cpp:204:17: error: \'__arm_streaming\' cannot appear here",
[36]="clang/test/Parser/cxx0x-keyword-attributes.cpp:204:40: error: \'__arm_streaming\' cannot appear here",
[37]="clang/test/Parser/cxx0x-keyword-attributes.cpp:204:63: error: \'__arm_streaming\' cannot appear here",
[38]="clang/test/Parser/cxx0x-keyword-attributes.cpp:206:16: error: \'__arm_streaming\' cannot appear here",
[39]="clang/test/Parser/cxx0x-keyword-attributes.cpp:207:3: error: \'__arm_streaming\' cannot appear here",
[40]="clang/test/Parser/cxx0x-keyword-attributes.cpp:208:3: error: \'__arm_streaming\' cannot appear here",
[41]="clang/test/Parser/cxx0x-keyword-attributes.cpp:211:10: error: \'__arm_streaming\' cannot appear here",
[42]="clang/test/Parser/cxx0x-keyword-attributes.cpp:235:5: error: \'__arm_streaming\' cannot appear here",
[43]="clang/test/Parser/cxx0x-keyword-attributes.cpp:264:8: error: \'__arm_streaming\' cannot appear here",
[44]="clang/test/Parser/cxx0x-keyword-attributes.cpp:265:10: error: \'__arm_streaming\' cannot appear here",
[45]="clang/test/Parser/cxx0x-keyword-attributes.cpp:268:10: error: \'__arm_streaming\' cannot appear here",
[46]="clang/test/Parser/cxx0x-keyword-attributes.cpp:271:12: error: \'__arm_streaming\' cannot appear here",
[47]="clang/test/Parser/cxx0x-keyword-attributes.cpp:283:10: error: \'__arm_streaming\' cannot appear here",
[48]="clang/test/Parser/cxx0x-keyword-attributes.cpp:285:9: error: \'__arm_streaming\' cannot appear here",
[49]="clang/test/Parser/cxx0x-keyword-attributes.cpp:302:51: error: \'__arm_streaming\' cannot appear here",
[50]="clang/test/Parser/cxx0x-keyword-attributes.cpp:307:17: error: \'__arm_streaming\' cannot appear here",
[51]="clang/test/Parser/cxx0x-keyword-attributes.cpp:323:28: error: \'__arm_streaming\' cannot appear here",
[52]="clang/test/Parser/cxx0x-keyword-attributes.cpp:328:33: error: \'__arm_streaming\' cannot appear here",
[53]="clang/test/Parser/cxx0x-keyword-attributes.cpp:338:19: error: \'__arm_streaming\' cannot appear here",
[54]="clang/test/Parser/cxx0x-keyword-attributes.cpp:340:20: error: \'__arm_streaming\' cannot appear here"
}
}
}
},
},
["err_nullptr_cast"]={
["err_keyword_not_import_attr"]={
[c]={{nil,p,"err_nullptr_cast"}},
[b]="err_keyword_not_import_attr",
[d]={{nil,p,"cannot cast an object of type %select{\'nullptr_t\' to %1|%1 to \'nullptr_t\'}0"}},
[i]="%0 cannot be applied to a module import",
[e]={{nil,p,{"cannot cast an object of type ",{"\'nullptr_t\' to B","B to \'nullptr_t\'"}}}},
[j]="A cannot be applied to a module import",
[f]=k,
[h]=k,
[g]="cannot cast an object of type (?:\'nullptr_t\' to (.*?)|(.*?) to \'nullptr_t\')",
[c]="(.*?) cannot be applied to a module import",
[h]=a,
[f]=a,
[i]={{nil,p,m}},
[e]=ac,
[b]={nc,1625925174,kc,Dc},
[g]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives\n\nCUDA and HIP have kernel attributes to tune the code generation (in the\nbackend). To reuse this functionality for OpenMP target regions we\nintroduce the `ompx_attribute` clause that takes these kernel\nattributes and emits code as if they had been attached to the kernel\nfuction (which is implicitly generated).\n\nTo limit the impact, we only support three kernel attributes:\n`amdgpu_waves_per_eu`, for AMDGPU\n`amdgpu_flat_work_group_size`, for AMDGPU\n`launch_bounds`, for NVPTX\n\nThe existing implementations of those attributes are used for error\nchecking and code generation. `ompx_attribute` can be attached to any\nexecutable target region and it can hold more than one kernel attribute.\n\nDifferential Revision: https://reviews.llvm.org/D156184"},
[j]={{"clang/lib/Sema/SemaCast.cpp",3075,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n  // C2x 6.5.4p4:\n //  The type nullptr_t shall not be converted to any type other than void,\n //  bool, or a pointer type. No type other than nullptr_t shall be converted\n //  to nullptr_t.\n if (SrcType->isNullPtrType()) {\n    // FIXME: 6.3.2.4p2 says that nullptr_t can be converted to itself, but\n    // 6.5.4p4 is a constraint check and nullptr_t is not void, bool, or a\n    // pointer type. We\'re not going to diagnose that as a constraint violation.\n   if (!DestType->isVoidType() && !DestType->isBooleanType() && !DestType->isPointerType() && !DestType->isNullPtrType()) {\n      Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_nullptr_cast) << /*nullptr to type*/ 0 << DestType;"},{"clang/lib/Sema/SemaCast.cpp",3090,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n  if (DestType->isNullPtrType() && !SrcType->isNullPtrType()) {\n   Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_nullptr_cast) << /*type to nullptr*/ 1 << SrcType;"}},
[d]={{cb,2535,"/// 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  ProhibitCXX11Attributes(Attrs, diag::err_attribute_not_import_attr, diag::err_keyword_not_import_attr,"}}
[l]={
["clang/test/C/C2x/n3042.c"]={"clang/test/C/C2x/n3042.c:80:14: error: cannot cast an object of type \'int\' to \'nullptr_t\'","clang/test/C/C2x/n3042.c:81:10: error: cannot cast an object of type \'nullptr_t\' to \'float\'","clang/test/C/C2x/n3042.c:82:10: error: cannot cast an object of type \'nullptr_t\' to \'float\'","clang/test/C/C2x/n3042.c:83:14: error: cannot cast an object of type \'int\' to \'nullptr_t\'","clang/test/C/C2x/n3042.c:84:14: error: cannot cast an object of type \'void *\' to \'nullptr_t\'","clang/test/C/C2x/n3042.c:85:14: error: cannot cast an object of type \'int *\' to \'nullptr_t\'"}
}
},
},
["err_objc_array_of_interfaces"]={
["err_keyword_not_module_attr"]={
[c]="err_objc_array_of_interfaces",
[b]="err_keyword_not_module_attr",
[d]="array of interface %0 is invalid (probably should be an array of pointers)",
[i]="%0 cannot be applied to a module",
[e]="array of interface A is invalid (probably should be an array of pointers)",
[j]="A cannot be applied to a module",
[f]=k,
[h]=k,
[g]="array of interface (.*?) is invalid \\(probably should be an array of pointers\\)",
[c]="(.*?) cannot be applied to a module",
[h]=a,
[f]=a,
[i]=m,
[e]=ac,
[b]={"669e32f8c0d1",1240797356,"rdar://6827200 - [sema] reject statically allocated arrays of interface types","rdar://6827200 - [sema] reject statically allocated arrays of interface types\n\nUpgrade \"array of interface\" warning to an error. In addition to being a\nterrible idea, this crashes codegen.\n\nllvm-svn: 70178"},
[g]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives\n\nCUDA and HIP have kernel attributes to tune the code generation (in the\nbackend). To reuse this functionality for OpenMP target regions we\nintroduce the `ompx_attribute` clause that takes these kernel\nattributes and emits code as if they had been attached to the kernel\nfuction (which is implicitly generated).\n\nTo limit the impact, we only support three kernel attributes:\n`amdgpu_waves_per_eu`, for AMDGPU\n`amdgpu_flat_work_group_size`, for AMDGPU\n`launch_bounds`, for NVPTX\n\nThe existing implementations of those attributes are used for error\nchecking and code generation. `ompx_attribute` can be attached to any\nexecutable target region and it can hold more than one kernel attribute.\n\nDifferential Revision: https://reviews.llvm.org/D156184"},
[j]={{cb,2542,"/// 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  // ...\n  } else if (T->isObjCObjectType()) {\n    Diag(Loc, diag::err_objc_array_of_interfaces) << T;"}},
[d]={{cb,2465,"/// 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  ProhibitCXX11Attributes(Attrs, diag::err_attribute_not_module_attr, diag::err_keyword_not_module_attr,"}}
[l]={
["clang/test/SemaObjC/interface-1.m"]={"clang/test/SemaObjC/interface-1.m:24:11: error: array of interface \'INT1\' is invalid (probably should be an array of pointers)"}
}
},
},
["err_objc_attr_not_id"]={
["err_keyword_not_supported_on_target"]={
[c]="err_objc_attr_not_id",
[b]="err_keyword_not_supported_on_target",
[d]="parameter of %0 attribute must be a single name of an Objective-C %select{class|protocol}1",
[i]="%0 is not supported on this target",
[e]={{nil,nil,{"parameter of A attribute must be a single name of an Objective-C ",{mb,"protocol"}}}},
[j]="A is not supported on this target",
[f]=k,
[h]=k,
[g]="parameter of (.*?) attribute must be a single name of an Objective\\-C (?:class|protocol)",
[c]="(.*?) is not supported on this target",
[h]=a,
[f]=a,
[i]=m,
[e]=v,
[b]={"2d3379e394ee",1385018434,"Refactor some of handleObjCBridgeAttr to make it more concise and the diagnostic reusable.","Refactor some of handleObjCBridgeAttr to make it more concise and the diagnostic reusable.\n\nllvm-svn: 195322"},
[g]={"33ee5c466346",1680613513,"[clang] Add Parse and Sema support for RegularKeyword attributes","[clang] Add Parse and Sema support for RegularKeyword attributes\n\nThis patch adds the Parse and Sema support for RegularKeyword attributes,\nfollowing on from a previous patch that added Attr.td support.\n\nThe patch is quite large.  However, nothing outside the tests is\nspecific to the first RegularKeyword attribute (__arm_streaming).\nThe patch should therefore be a one-off, up-front cost.  Other\nattributes just need an entry in Attr.td and the usual Sema support.\n\nThe approach taken in the patch is that the keywords can be used with\nany language version.  If standard attributes were added in language\nversion Y, the keyword rules for version X<Y are the same as they were\nfor version Y (to the extent possible).  Any extensions beyond Y are\nhandled in the same way for both keywords and attributes.  This ensures\nthat existing C++11 successors like C++17 are not treated differently\nfrom versions that have yet to be defined.\n\nSome notes on the implementation:\n\n* The patch emits errors rather than warnings for diagnostics that\nrelate to keywords.\n\n* Where possible, the patch drops “attribute” from diagnostics\nrelating to keywords.\n\n* One exception to the previous point is that warnings about C++\nextensions do still mention attributes.  The use there seemed OK\nsince the diagnostics are noting a change in the production rules.\n\n* If a diagnostic string needs to be different for keywords and\nattributes, the patch standardizes on passing the attribute/\nname/token followed by 0 for attributes and 1 for keywords.\n\n* Although the patch updates warn_attribute_wrong_decl_type_str,\nwarn_attribute_wrong_decl_type, and warn_attribute_wrong_decl_type,\nonly the error forms of these strings are used for keywords.\n\n* I couldn\'t trigger the warnings in checkUnusedDeclAttributes,\neven for existing attributes.  An assert on the warnings caused\nno failures in the testsuite.  I think in practice all standard\nattributes would be diagnosed before this.\n\n* The patch drops a call to standardAttributesAllowed in\nParseFunctionDeclarator.  This is because MaybeParseCXX11Attributes\nchecks the same thing itself, where appropriate.\n\n* The new tests are based on c2x-attributes.c and\ncxx0x-attributes.cpp.  The C++ test also incorporates a version of\ncxx11-base-spec-attributes.cpp.  The FIXMEs are carried across from\nthe originals.\n\nDifferential Revision: https://reviews.llvm.org/D148702"},
[j]={{K,6174,"static void handleObjCBridgeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!Parm) {\n    S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0;"},{K,6201,"static void handleObjCBridgeMutableAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!Parm) {\n    S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0;"},{K,6214,"static void handleObjCBridgeRelatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!RelatedClass) {\n    S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0;"}},
[d]={{u,2230,"bool Sema::CheckAttrTarget(const ParsedAttr &AL) {\n  // Check whether the attribute is valid on the current target.\n  if (!AL.existsInTarget(Context.getTargetInfo())) {\n    Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? diag::err_keyword_not_supported_on_target : diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{u,8732,"/// ProcessDeclAttribute - Apply the specific attribute to the specified decl if\n/// the attribute applies to decls.  If the attribute is a type attribute, just\n/// silently ignore it if a GNU attribute.\nstatic void ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL, const Sema::ProcessDeclAttributeOptions &Options) {\n  // ...\n  // Unknown attributes are automatically warned on. Target-specific attributes\n  // which do not apply to the current target architecture are treated as\n  // though they were unknown attributes.\n  if (AL.getKind() == ParsedAttr::UnknownAttribute || !AL.existsInTarget(S.Context.getTargetInfo())) {\n    S.Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? (unsigned)diag::err_keyword_not_supported_on_target : AL.isDeclspecAttribute() ? (unsigned)diag::warn_unhandled_ms_attribute_ignored : (unsigned)diag::warn_unknown_attribute_ignored) << AL << AL.getRange();"},{"clang/lib/Sema/SemaStmtAttr.cpp",495,"static Attr *ProcessStmtAttribute(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  // ...\n  if (A.getKind() == ParsedAttr::UnknownAttribute || !(A.existsInTarget(S.Context.getTargetInfo()) || (S.Context.getLangOpts().SYCLIsDevice && Aux && A.existsInTarget(*Aux)))) {\n    S.Diag(A.getLoc(), A.isRegularKeywordAttribute() ? (unsigned)diag::err_keyword_not_supported_on_target : A.isDeclspecAttribute() ? (unsigned)diag::warn_unhandled_ms_attribute_ignored : (unsigned)diag::warn_unknown_attribute_ignored) << A << A.getRange();"}},
[l]={
[l]={
["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:8:9: error: parameter of \'objc_bridge\' attribute must be a single name of an Objective-C class"}
["clang/test/SemaCUDA/amdgpu-bf16.cu"]={"clang/test/SemaCUDA/amdgpu-bf16.cu:16:45: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:18:45: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:20:45: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:22:46: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:25:30: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:25:43: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:26:3: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:30:47: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:35:47: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:40:47: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:45:48: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:51:15: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:51:1: error: __bf16 is not supported on this target","clang/test/SemaCUDA/amdgpu-bf16.cu:57:9: error: __bf16 is not supported on this target"}
}
}
},
},
["err_objc_attr_protocol_requires_definition"]={
["err_l_square_l_square_not_attribute"]={
[c]="err_objc_attr_protocol_requires_definition",
[b]="err_l_square_l_square_not_attribute",
[d]="attribute %0 can only be applied to @protocol definitions, not forward declarations",
[i]="C++11 only allows consecutive left square brackets when introducing an attribute",
[e]="attribute A can only be applied to @protocol definitions, not forward declarations",
[j]="C++11 only allows consecutive left square brackets when introducing an attribute",
[f]=k,
[h]=k,
[g]="attribute (.*?) can only be applied to @protocol definitions, not forward declarations",
[c]="C\\+\\+11 only allows consecutive left square brackets when introducing an attribute",
[h]=a,
[f]=a,
[i]=m,
[e]=C,
[b]={"27cfe10df899",1393022944,"Add requirement that attribute \'objc_protocol_requires_explicit_implementation\' can only be applied ...","Add requirement that attribute \'objc_protocol_requires_explicit_implementation\' can only be applied to protocol definitions.\n\nllvm-svn: 201899"},
[g]={"7bdcc4a9da8c",1334021532,"Disambiguation of \'[[\':","Disambiguation of \'[[\':\n * In C++11, \'[[\' is ill-formed unless it starts an attribute-specifier. Reject\n  array sizes and array indexes which begin with a lambda-expression. Recover by\n  parsing the lambda as a lambda.\n * In Objective-C++11, either \'[\' could be the start of a message-send.\n  Fully disambiguate this case: it turns out that the grammars of message-sends,\n  lambdas and attributes do not actually overlap. Accept any occurrence of \'[[\'\n  where either \'[\' starts a message send, but reject a lambda in an array index\n  just like in C++11 mode.\n\nImplement a couple of changes to the attribute wording which occurred after our\nattributes implementation landed:\n * In a function-declaration, the attributes go after the exception specification,\n  not after the right paren.\n * A reference type can have attributes applied.\n * An \'identifier\' in an attribute can also be a keyword. Support for alternative\n  tokens (iso646 keywords) in attributes to follow.\n\nAnd some bug fixes:\n * Parse attributes after declarator-ids, even if they are not simple identifiers.\n * Do not accept attributes after a parenthesized declarator.\n * Accept attributes after an array size in a new-type-id.\n * Partially disamiguate \'delete\' followed by a lambda. More work is required\n  here for the case where the lambda-introducer is \'[]\'.\n\nllvm-svn: 154369"},
[j]={{K,2376,"static void handleObjCSuppresProtocolAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n if (!cast<ObjCProtocolDecl>(D)->isThisDeclarationADefinition()) {\n    S.Diag(AL.getLoc(), diag::err_objc_attr_protocol_requires_definition) << AL << AL.getRange();"}},
[d]={{P,1673,"/// DiagnoseProhibitedCXX11Attribute - We have found the opening square brackets\n/// of a C++11 attribute-specifier in a location where an attribute is not\n/// permitted. By C++11 [dcl.attr.grammar]p6, this is ill-formed. Diagnose this\n/// situation.\n///\n/// \\return \\c true if we skipped an attribute-like chunk of tokens, \\c false if\n/// this doesn\'t appear to actually be an attribute-specifier, and the caller\n/// should try to parse it.\nbool Parser::DiagnoseProhibitedCXX11Attribute() {\n  // ...\n  case CAK_InvalidAttributeSpecifier:\n    Diag(Tok.getLocation(), diag::err_l_square_l_square_not_attribute);"}},
[l]={
[l]={
["clang/test/SemaObjC/protocols-suppress-conformance.m"]={"clang/test/SemaObjC/protocols-suppress-conformance.m:170:16: error: attribute \'objc_protocol_requires_explicit_implementation\' can only be applied to @protocol definitions, not forward declarations"}
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.grammar/p6.cpp:11:4: error: C++11 only allows consecutive left square brackets when introducing an attribute"}
}
}
},
},
["err_objc_attr_typedef_not_id"]={
["err_lambda_after_delete"]={
[c]="err_objc_attr_typedef_not_id",
[b]={{nil,r,"err_lambda_after_delete"}},
[d]="parameter of %0 attribute must be \'id\' when used on a typedef",
[i]={{nil,r,"\'[]\' after delete interpreted as \'delete[]\'; add parentheses to treat this as a lambda-expression"}},
[e]="parameter of A attribute must be \'id\' when used on a typedef",
[j]={{nil,r,"\'[]\' after delete interpreted as \'delete[]\'; add parentheses to treat this as a lambda-expression"}},
[f]=k,
[h]=k,
[g]="parameter of (.*?) attribute must be \'id\' when used on a typedef",
[c]="\'\\[\\]\' after delete interpreted as \'delete\\[\\]\'; add parentheses to treat this as a lambda\\-expression",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,r,C}},
[b]={"2859258e2faf",1422830046,"Allow objc_bridge(id) to be used on typedefs of [cv] void*.","Allow objc_bridge(id) to be used on typedefs of [cv] void*.\n\nrdar://19678874\n\nllvm-svn: 227774"},
[g]={"f53d1727107e",1558278478,"Added a better diagnostic when using the delete operator with lambdas","Added a better diagnostic when using the delete operator with lambdas\n\nSummary:\nThis adds a new error for missing parentheses around lambdas in delete operators.\n\n```\nint main() {\n  delete []() { return new int(); }();\n}\n```\n\nThis will result in:\n\n```\ntest.cpp:2:3: error: \'[]\' after delete interpreted as \'delete[]\'\n  delete []() { return new int(); }();\n  ^~~~~~~~~\ntest.cpp:2:9: note: add parentheses around the lambda\n  delete []() { return new int(); }();\n        ^\n        (                          )\n```\n\nReviewers: rsmith\n\nReviewed By: rsmith\n\nSubscribers: riccibruno, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D36357\n\nllvm-svn: 361119"},
[j]={{K,6181,"static void handleObjCBridgeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Typedefs only allow objc_bridge(id) and have some additional checking.\n if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n   if (!Parm->Ident->isStr(\"id\")) {\n      S.Diag(AL.getLoc(), diag::err_objc_attr_typedef_not_id) << AL;"}},
[d]={{db,3427,"/// ParseCXXDeleteExpression - Parse a C++ delete-expression. Delete is used\n/// to free memory allocated by new.\n///\n/// This method is called to parse the \'delete\' expression after the optional\n/// \'::\' has been already parsed.  If the \'::\' was present, \"UseGlobal\" is true\n/// and \"Start\" is its location.  Otherwise, \"Start\" is the location of the\n/// \'delete\' token.\n///\n///        delete-expression:\n///                  \'::\'[opt] \'delete\' cast-expression\n///                  \'::\'[opt] \'delete\' \'[\' \']\' cast-expression\nExprResult Parser::ParseCXXDeleteExpression(bool UseGlobal, SourceLocation Start) {\n  // ...\n  if (Tok.is(tok::l_square) && NextToken().is(tok::r_square)) {\n    // ...\n    // Basic lookahead to check if we have a lambda expression.\n   if (Next.isOneOf(tok::l_brace, tok::less) || (Next.is(tok::l_paren) && (GetLookAheadToken(3).is(tok::r_paren) || (GetLookAheadToken(3).is(tok::identifier) && GetLookAheadToken(4).is(tok::identifier))))) {\n     // ...\n      if (EmitFixIt)\n        Diag(Start, diag::err_lambda_after_delete) << SourceRange(Start, RSquareLoc) << FixItHint::CreateInsertion(LSquareLoc, \"(\") << FixItHint::CreateInsertion(Lexer::getLocForEndOfToken(RBraceLoc, 0, Actions.getSourceManager(), getLangOpts()), \")\");"},{db,3435,"/// ParseCXXDeleteExpression - Parse a C++ delete-expression. Delete is used\n/// to free memory allocated by new.\n///\n/// This method is called to parse the \'delete\' expression after the optional\n/// \'::\' has been already parsed.  If the \'::\' was present, \"UseGlobal\" is true\n/// and \"Start\" is its location.  Otherwise, \"Start\" is the location of the\n/// \'delete\' token.\n///\n///        delete-expression:\n///                  \'::\'[opt] \'delete\' cast-expression\n///                  \'::\'[opt] \'delete\' \'[\' \']\' cast-expression\nExprResult Parser::ParseCXXDeleteExpression(bool UseGlobal, SourceLocation Start) {\n  // ...\n  if (Tok.is(tok::l_square) && NextToken().is(tok::r_square)) {\n    // ...\n    // Basic lookahead to check if we have a lambda expression.\n    if (Next.isOneOf(tok::l_brace, tok::less) || (Next.is(tok::l_paren) && (GetLookAheadToken(3).is(tok::r_paren) || (GetLookAheadToken(3).is(tok::identifier) && GetLookAheadToken(4).is(tok::identifier))))) {\n      // ...\n      if (EmitFixIt)\n      // ...\n      else\n        Diag(Start, diag::err_lambda_after_delete) << SourceRange(Start, RSquareLoc);"}},
[l]={
[l]={
["clang/test/SemaObjC/objcbridge-attribute.m"]={"clang/test/SemaObjC/objcbridge-attribute.m:12:33: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:14:44: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:18:40: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:22:53: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:24:41: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:26:41: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef"}
["clang/test/SemaCXX/new-delete-0x.cpp"]={"clang/test/SemaCXX/new-delete-0x.cpp:37:3: error: \'[]\' after delete interpreted as \'delete[]\'; add parentheses to treat this as a lambda-expression"}
}
}
},
},
["err_objc_attr_typedef_not_void_pointer"]={
["err_lambda_capture_anonymous_var"]={
[c]="err_objc_attr_typedef_not_void_pointer",
[b]="err_lambda_capture_anonymous_var",
[d]="\'objc_bridge(id)\' is only allowed on structs and typedefs of void pointers",
[i]="unnamed variable cannot be implicitly captured in a lambda expression",
[e]="\'objc_bridge(id)\' is only allowed on structs and typedefs of void pointers",
[j]="unnamed variable cannot be implicitly captured in a lambda expression",
[f]=k,
[h]=k,
[g]="\'objc_bridge\\(id\\)\' is only allowed on structs and typedefs of void pointers",
[c]="unnamed variable cannot be implicitly captured in a lambda expression",
[h]=a,
[f]=a,
[i]=m,
[e]=T,
[b]={"2859258e2faf",1422830046,"Allow objc_bridge(id) to be used on typedefs of [cv] void*.","Allow objc_bridge(id) to be used on typedefs of [cv] void*.\n\nrdar://19678874\n\nllvm-svn: 227774"},
[g]={"24af85047046",1328309257,"Implement implicit capture for lambda expressions.","Implement implicit capture for lambda expressions.\n\nStill left: explicit captures in lambdas need to cause implicit capture, and I need to take a look at the diagnostics for some cases.\n\nllvm-svn: 149718"},
[j]={{K,6188,"static void handleObjCBridgeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Typedefs only allow objc_bridge(id) and have some additional checking.\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n   // ...\n   if (!T->isVoidPointerType()) {\n      S.Diag(AL.getLoc(), diag::err_objc_attr_typedef_not_void_pointer);"}},
[d]={{q,19156,"// 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  // Lambdas are not allowed to capture unnamed variables\n  // (e.g. anonymous unions).\n  // FIXME: The C++11 rule don\'t actually state this explicitly, but I\'m\n // assuming that\'s the intent.\n if (IsLambda && !Var->getDeclName()) {\n    if (Diagnose) {\n      S.Diag(Loc, diag::err_lambda_capture_anonymous_var);"}},
[l]={
[l]={
["clang/test/SemaObjC/objcbridge-attribute.m"]={"clang/test/SemaObjC/objcbridge-attribute.m:33:49: error: \'objc_bridge(id)\' is only allowed on structs and typedefs of void pointers"}
["clang/test/SemaCXX/cxx1z-decomposition.cpp"]={"clang/test/SemaCXX/cxx1z-decomposition.cpp:98:28: error: unnamed variable cannot be implicitly captured in a lambda expression"}
}
}
},
},
["err_objc_bridged_related_invalid_class"]={
["err_lambda_capture_default_arg"]={
[c]="err_objc_bridged_related_invalid_class",
[b]="err_lambda_capture_default_arg",
[d]="could not find Objective-C class %0 to convert %1 to %2",
[i]="lambda expression in default argument cannot capture any entity",
[e]="could not find Objective-C class A to convert B to C",
[j]="lambda expression in default argument cannot capture any entity",
[f]=k,
[h]=k,
[g]="could not find Objective\\-C class (.*?) to convert (.*?) to (.*?)",
[c]="lambda expression in default argument cannot capture any entity",
[h]=a,
[f]=a,
[i]=m,
[e]=T,
[b]={"1f0b3bfd7502",1386376463,"ObjectiveC. Continuing implementation of objc_bridge_related","ObjectiveC. Continuing implementation of objc_bridge_related\nattribute in sema and issuing a variety of diagnostics lazily \nfor misuse of this attribute (and what to do) when converting \nfrom CF types to ObjectiveC types (and vice versa).\n// rdar://15499111\n\nllvm-svn: 196629"},
[g]={"f0d495100cf4",1328916622,"Implement C++11 [expr.lambda.prim]p13, which prohibits lambdas in","Implement C++11 [expr.lambda.prim]p13, which prohibits lambdas in\ndefault arguments if in fact those lambdas capture any entity.\n\nllvm-svn: 150282"},
[j]={{G,4246,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n  if (!LookupName(R, TUScope)) {\n    if (Diagnose) {\n      Diag(Loc, diag::err_objc_bridged_related_invalid_class) << RCId << SrcType << DestType;"}},
[d]={{t,168,"bool CheckDefaultArgumentVisitor::VisitLambdaExpr(const LambdaExpr *Lambda) {\n  // ...\n  for (const LambdaCapture &LC : Lambda->captures()) {\n    if (!Lambda->isInitCapture(&LC))\n      return S.Diag(LC.getLocation(), diag::err_lambda_capture_default_arg);"}},
[l]={
[l]={
["clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m"]={"clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:29:30: error: could not find Objective-C class \'XNSColor\' to convert \'CGColorRef1\' (aka \'struct CGColor1 *\') to \'NSColor *\'","clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:31:13: error: could not find Objective-C class \'XNSColor\' to convert \'NSColor *\' to \'CGColorRef1\' (aka \'struct CGColor1 *\')"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p13.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p13.cpp:9:19: error: lambda expression in default argument cannot capture any entity","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p13.cpp:10:19: error: lambda expression in default argument cannot capture any entity","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p13.cpp:11:30: error: lambda expression in default argument cannot capture any entity"}
}
}
},
},
["err_objc_bridged_related_invalid_class_name"]={
["err_lambda_capture_flexarray_type"]={
[c]="err_objc_bridged_related_invalid_class_name",
[b]="err_lambda_capture_flexarray_type",
[d]="%0 must be name of an Objective-C class to be able to convert %1 to %2",
[i]="variable %0 with flexible array member cannot be captured in a lambda expression",
[e]="A must be name of an Objective-C class to be able to convert B to C",
[j]="variable A with flexible array member cannot be captured in a lambda expression",
[f]=k,
[h]=k,
[g]="(.*?) must be name of an Objective\\-C class to be able to convert (.*?) to (.*?)",
[c]="variable (.*?) with flexible array member cannot be captured in a lambda expression",
[h]=a,
[f]=a,
[i]=m,
[e]=T,
[b]={"1f0b3bfd7502",1386376463,"ObjectiveC. Continuing implementation of objc_bridge_related","ObjectiveC. Continuing implementation of objc_bridge_related\nattribute in sema and issuing a variety of diagnostics lazily \nfor misuse of this attribute (and what to do) when converting \nfrom CF types to ObjectiveC types (and vice versa).\n// rdar://15499111\n\nllvm-svn: 196629"},
[g]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture ","objectiveC blocks: It is impractical to capture \nstruct variables with flexiable array members in\nblocks (and lambdas). Issue error instead of\ncrashing in IRGen. // rdar://12655829\n\nllvm-svn: 171912"},
[j]={{G,4257,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n  if (Target && isa<ObjCInterfaceDecl>(Target))\n  // ...\n  else {\n    if (Diagnose) {\n     Diag(Loc, diag::err_objc_bridged_related_invalid_class_name) << RCId << SrcType << DestType;"}},
[d]={{q,19178,"// 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  // Prohibit structs with flexible array members too.\n  // We cannot capture what is in the tail end of the struct.\n  if (const RecordType *VTTy = Var->getType()->getAs<RecordType>()) {\n    if (VTTy->getDecl()->hasFlexibleArrayMember()) {\n      if (Diagnose) {\n       if (IsBlock)\n        // ...\n        else\n          S.Diag(Loc, diag::err_lambda_capture_flexarray_type) << Var;"}},
[l]={
[l]={
["clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m"]={"clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:36:30: error: \'PNsColor\' must be name of an Objective-C class to be able to convert \'CGColorRef2\' (aka \'struct CGColor2 *\') to \'NSColor *\'","clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:38:13: error: \'PNsColor\' must be name of an Objective-C class to be able to convert \'NSColor *\' to \'CGColorRef2\' (aka \'struct CGColor2 *\')"}
["clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm"]={"clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm:7:15: error: variable \'a\' with flexible array member cannot be captured in a lambda expression"}
}
}
},
},
["err_objc_bridged_related_known_method"]={
["err_lambda_capture_misplaced_ellipsis"]={
[c]="err_objc_bridged_related_known_method",
[b]={{nil,r,"err_lambda_capture_misplaced_ellipsis"}},
[d]="%0 must be explicitly converted to %1; use %select{%objcclass2|%objcinstance2}3 method for this conversion",
[i]={{nil,r,"ellipsis in pack %select{|init-}0capture must appear %select{after|before}0 the name of the capture"}},
[e]={{nil,nil,{"A must be explicitly converted to B; use ",{"C","C"}," method for this conversion"}}},
[j]={{nil,r,{"ellipsis in pack ",{a,"init-"},"capture must appear ",{"after","before"}," the name of the capture"}}},
[f]=k,
[h]=k,
[g]="(.*?) must be explicitly converted to (.*?); use (?:(.*?)|(.*?)) method for this conversion",
[c]="ellipsis in pack (?:|init\\-)capture must appear (?:after|before) the name of the capture",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,r,C}},
[b]={"1f0b3bfd7502",1386376463,"ObjectiveC. Continuing implementation of objc_bridge_related","ObjectiveC. Continuing implementation of objc_bridge_related\nattribute in sema and issuing a variety of diagnostics lazily \nfor misuse of this attribute (and what to do) when converting \nfrom CF types to ObjectiveC types (and vice versa).\n// rdar://15499111\n\nllvm-svn: 196629"},
[g]={"b2997f579a8b",1558469450,"[c++20] P0780R2: Support pack-expansion of init-captures.","[c++20] P0780R2: Support pack-expansion of init-captures.\n\nThis permits an init-capture to introduce a new pack:\n\n  template<typename ...T> auto x = [...a = T()] { /* a is a pack */ };\n\nTo support this, the mechanism for allowing ParmVarDecls to be packs has\nbeen extended to support arbitrary local VarDecls.\n\nllvm-svn: 361300"},
[j]={{G,4272,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n // ...\n // Check for an existing class method with the given selector name.\n if (CfToNs && CMId) {\n   // ...\n   if (!ClassMethod) {\n     if (Diagnose) {\n        Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << Sel << false;"},{G,4286,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n  // Check for an existing instance method with the given selector name.\n  if (!CfToNs && IMId) {\n    // ...\n    if (!InstanceMethod) {\n      if (Diagnose) {\n        Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << Sel << true;"},{G,4327,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n // ...\n if (CfToNs) {\n    // Implicit conversion from CF to ObjC object is needed.\n    if (ClassMethod) {\n      if (Diagnose) {\n        // ...\n        Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << ClassMethod->getSelector() << false << FixItHint::CreateInsertion(SrcExpr->getBeginLoc(), ExpressionString) << FixItHint::CreateInsertion(SrcExprEndLoc, \"]\");"},{G,4360,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n // ...\n  if (CfToNs) {\n // ...\n } else {\n   // Implicit conversion from ObjC type to CF object is needed.\n   if (InstanceMethod) {\n     if (Diagnose) {\n       // ...\n        if (InstanceMethod->isPropertyAccessor())\n          if (const ObjCPropertyDecl *PDecl = InstanceMethod->findPropertyDecl()) {\n           // ...\n            Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << InstanceMethod->getSelector() << true << FixItHint::CreateInsertion(SrcExprEndLoc, ExpressionString);"},{G,4370,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n  // ...\n  if (CfToNs) {\n // ...\n  } else {\n    // Implicit conversion from ObjC type to CF object is needed.\n    if (InstanceMethod) {\n      if (Diagnose) {\n       // ...\n       if (ExpressionString.empty()) {\n          // ...\n          Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << InstanceMethod->getSelector() << true << FixItHint::CreateInsertion(SrcExpr->getBeginLoc(), \"[\") << FixItHint::CreateInsertion(SrcExprEndLoc, ExpressionString);"}},
[d]={{db,1087,"/// Parse a lambda introducer.\n/// \\param Intro A LambdaIntroducer filled in with information about the\n///        contents of the lambda-introducer.\n/// \\param Tentative If non-null, we are disambiguating between a\n///        lambda-introducer and some other construct. In this mode, we do not\n///        produce any diagnostics or take any other irreversible action unless\n///        we\'re sure that this is a lambda-expression.\n/// \\return \\c true if parsing (or disambiguation) failed with a diagnostic and\n///        the caller should bail out / recover.\nbool Parser::ParseLambdaIntroducer(LambdaIntroducer &Intro, LambdaIntroducerTentativeParse *Tentative) {\n  // ...\n  while (Tok.isNot(tok::r_square)) {\n    // ...\n    if (llvm::any_of(EllipsisLocs, [](SourceLocation Loc) { return Loc.isValid(); })) {\n     // ...\n     if (EllipsisLoc.isInvalid()) {\n        DiagID = diag::err_lambda_capture_misplaced_ellipsis;"},{db,1114,"/// Parse a lambda introducer.\n/// \\param Intro A LambdaIntroducer filled in with information about the\n///        contents of the lambda-introducer.\n/// \\param Tentative If non-null, we are disambiguating between a\n///        lambda-introducer and some other construct. In this mode, we do not\n///        produce any diagnostics or take any other irreversible action unless\n///        we\'re sure that this is a lambda-expression.\n/// \\return \\c true if parsing (or disambiguation) failed with a diagnostic and\n///        the caller should bail out / recover.\nbool Parser::ParseLambdaIntroducer(LambdaIntroducer &Intro, LambdaIntroducerTentativeParse *Tentative) {\n  // ...\n  while (Tok.isNot(tok::r_square)) {\n   // ...\n    if (llvm::any_of(EllipsisLocs, [](SourceLocation Loc) { return Loc.isValid(); })) {\n     // ...\n     if (DiagID) {\n        NonTentativeAction([&] {\n          // ...\n          if (DiagID == diag::err_lambda_capture_misplaced_ellipsis) {"}},
[l]={
[l]={
["clang/test/SemaObjC/objcbridge-related-attribute.m"]={"clang/test/SemaObjC/objcbridge-related-attribute.m:22:7: error: \'CGColorRef\' (aka \'struct CGColor *\') must be explicitly converted to \'NSColor *\'; use \'+colorWithCGColor:\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:23:31: error: \'CGColorRef\' (aka \'struct CGColor *\') must be explicitly converted to \'NSColor *\'; use \'+colorWithCGColor:\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:24:10: error: \'CGColorRef\' (aka \'struct CGColor *\') must be explicitly converted to \'NSColor *\'; use \'+colorWithCGColor:\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:34:14: error: \'NSColor *\' must be explicitly converted to \'CGColorRef\' (aka \'struct CGColor *\'); use \'-CGColor\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:35:10: error: \'NSColor *\' must be explicitly converted to \'CGColorRef\' (aka \'struct CGColor *\'); use \'-CGColor\' method for this conversion"}
["clang/test/CXX/temp/temp.decls/temp.variadic/init-capture.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/init-capture.cpp:46:45: error: ellipsis in pack init-capture must appear before the name of the capture"}
}
}
},
},
["err_objc_cf_bridged_not_interface"]={
["err_lambda_capture_multiple_ellipses"]={
[c]="err_objc_cf_bridged_not_interface",
[b]={{nil,r,"err_lambda_capture_multiple_ellipses"}},
[d]="CF object of type %0 is bridged to %1, which is not an Objective-C class",
[i]={{nil,r,"multiple ellipses in pack capture"}},
[e]="CF object of type A is bridged to B, which is not an Objective-C class",
[j]={{nil,r,"multiple ellipses in pack capture"}},
[f]=k,
[h]=k,
[g]="CF object of type (.*?) is bridged to (.*?), which is not an Objective\\-C class",
[c]="multiple ellipses in pack capture",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,r,C}},
[b]={"8a0210e535c5",1384629392,"ObjectiveC ARC. Validate toll free bridge casting","ObjectiveC ARC. Validate toll free bridge casting\nof ObjectiveC objects to CF types when CF type\nhas the objc_bridge attribute.\n\nllvm-svn: 194930"},
[g]={"b2997f579a8b",1558469450,"[c++20] P0780R2: Support pack-expansion of init-captures.","[c++20] P0780R2: Support pack-expansion of init-captures.\n\nThis permits an init-capture to introduce a new pack:\n\n  template<typename ...T> auto x = [...a = T()] { /* a is a pack */ };\n\nTo support this, the mechanism for allowing ParmVarDecls to be packs has\nbeen extended to support arbitrary local VarDecls.\n\nllvm-svn: 361300"},
[j]={{G,4053,"template <typename TB> static bool CheckObjCBridgeNSCast(Sema &S, QualType castType, Expr *castExpr, bool &HadTheAttribute, bool warn) {\n  // ...\n  while (const auto *TD = T->getAs<TypedefType>()) {\n    // ...\n    if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {\n      if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {\n       // ...\n       if (S.LookupName(R, S.TUScope)) {\n        // ...\n        } else if (!castType->isObjCIdType()) {\n          S.Diag(castExpr->getBeginLoc(), diag::err_objc_cf_bridged_not_interface) << castExpr->getType() << Parm;"}},
[d]={{db,1097,"/// Parse a lambda introducer.\n/// \\param Intro A LambdaIntroducer filled in with information about the\n///        contents of the lambda-introducer.\n/// \\param Tentative If non-null, we are disambiguating between a\n///        lambda-introducer and some other construct. In this mode, we do not\n///        produce any diagnostics or take any other irreversible action unless\n///        we\'re sure that this is a lambda-expression.\n/// \\return \\c true if parsing (or disambiguation) failed with a diagnostic and\n///        the caller should bail out / recover.\nbool Parser::ParseLambdaIntroducer(LambdaIntroducer &Intro, LambdaIntroducerTentativeParse *Tentative) {\n  // ...\n  while (Tok.isNot(tok::r_square)) {\n    // ...\n    if (llvm::any_of(EllipsisLocs, [](SourceLocation Loc) { return Loc.isValid(); })) {\n      // ...\n      if (EllipsisLoc.isInvalid()) {\n     // ...\n     } else {\n        // ...\n        if (NumEllipses > 1)\n          DiagID = diag::err_lambda_capture_multiple_ellipses;"}}
[l]={
["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:30:34: error: CF object of type \'CFTestingRef\' (aka \'__CFError *\') is bridged to \'NSTesting\', which is not an Objective-C class"}
}
},
},
["err_objc_concat_string"]={
["err_lambda_decl_ref_not_modifiable_lvalue"]={
[c]="err_objc_concat_string",
[b]="err_lambda_decl_ref_not_modifiable_lvalue",
[d]="unexpected token after Objective-C string",
[i]="cannot assign to a variable captured by copy in a non-mutable lambda",
[e]="unexpected token after Objective-C string",
[j]="cannot assign to a variable captured by copy in a non-mutable lambda",
[f]=k,
[h]=k,
[g]="unexpected token after Objective\\-C string",
[c]="cannot assign to a variable captured by copy in a non\\-mutable lambda",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={J,1236199783,H,I},
[g]={"5fa2ef4445fa",1331599021,"Alternate fix to PR12248:  put Sema in charge of special-casing","Alternate fix to PR12248:  put Sema in charge of special-casing\nthe diagnostic for assigning to a copied block capture.  This has\nthe pleasant side-effect of letting us special-case the diagnostic\nfor assigning to a copied lambda capture as well, without introducing\na new non-modifiable enumerator for it.\n\nllvm-svn: 152593"},
[j]={{N,3397,"ExprResult Parser::ParseObjCStringLiteral(SourceLocation AtLoc) {\n  // ...\n  while (Tok.is(tok::at)) {\n    // ...\n    // Invalid unless there is a string literal.\n    if (!isTokenStringLiteral())\n      return ExprError(Diag(Tok, diag::err_objc_concat_string));"}},
[d]={{q,14303,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return true.  If so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  // ...\n  case Expr::MLV_ConstQualified:\n    // Use a specialized diagnostic when we\'re assigning to an object\n    // from an enclosing function or block.\n    if (NonConstCaptureKind NCCK = isReferenceToNonConstCapture(S, E)) {\n      if (NCCK == NCCK_Block)\n      // ...\n      else\n        DiagID = diag::err_lambda_decl_ref_not_modifiable_lvalue;"}},
[l]={
[l]={
["clang/test/SemaObjC/string.m"]={"clang/test/SemaObjC/string.m:14:17: error: unexpected token after Objective-C string"}
["clang/test/SemaCXX/captured-statements.cpp"]={"clang/test/SemaCXX/captured-statements.cpp:11:9: error: cannot assign to a variable captured by copy in a non-mutable lambda","clang/test/SemaCXX/captured-statements.cpp:24:9: error: cannot assign to a variable captured by copy in a non-mutable lambda"}
}
}
},
},
["err_objc_decls_may_only_appear_in_global_scope"]={
["err_lambda_decl_specifier_repeated"]={
[c]="err_objc_decls_may_only_appear_in_global_scope",
[b]="err_lambda_decl_specifier_repeated",
[d]="Objective-C declarations may only appear in global scope",
[i]={{nil,n,"%select{\'mutable\'|\'static\'|\'constexpr\'|\'consteval\'}0 cannot appear multiple times in a lambda declarator"},{s,r,"%select{\'mutable\'|\'constexpr\'|\'consteval\'}0 cannot appear multiple times in a lambda declarator"},{V,nil,"%select{\'mutable\'|\'constexpr\'}0 cannot appear multiple times in a lambda declarator"}},
[e]="Objective-C declarations may only appear in global scope",
[j]={{nil,n,{{"\'mutable\'","\'static\'","\'constexpr\'","\'consteval\'"}," cannot appear multiple times in a lambda declarator"}},{s,r,{{"\'mutable\'","\'constexpr\'","\'consteval\'"}," cannot appear multiple times in a lambda declarator"}},{V,nil,{{"\'mutable\'","\'constexpr\'"}," cannot appear multiple times in a lambda declarator"}}},
[f]=k,
[h]=k,
[g]="Objective\\-C declarations may only appear in global scope",
[c]="(?:\'mutable\'|\'static\'|\'constexpr\'|\'consteval\') cannot appear multiple times in a lambda declarator",
[h]=a,
[f]=a,
[i]=m,
[e]=C,
[b]={J,1236199783,H,I},
[g]={"a734ab980865",1459008697,"[Cxx1z-constexpr-lambda-P0170R1]  Support parsing of constexpr specifier (and its inference) on lamb...","[Cxx1z-constexpr-lambda-P0170R1]  Support parsing of constexpr specifier (and its inference) on lambda expressions\n\nSupport the constexpr specifier on lambda expressions - and support its inference from the lambda call operator\'s body.\n\ni.e.\n  auto L = [] () constexpr { return 5; };\n  static_assert(L() == 5); // OK\n  auto Implicit = [] (auto a) { return a; };\n  static_assert(Implicit(5) == 5); \n\nWe do not support evaluation of lambda\'s within constant expressions just yet.\n\nImplementation Strategy:\n  - teach ParseLambdaExpressionAfterIntroducer to expect a constexpr specifier and mark the invented function call operator\'s declarator\'s decl-specifier with it; Have it emit fixits for multiple decl-specifiers (mutable or constexpr) in this location.\n  - for cases where constexpr is not explicitly specified, have buildLambdaExpr check whether the invented function call operator satisfies the requirements of a constexpr function, by calling CheckConstexprFunctionDecl/Body.\n\nMuch obliged to Richard Smith for his patience and his care, in ensuring the code is clang-worthy.\n\nllvm-svn: 264513"},
[j]={{T,5092,"bool Sema::CheckObjCDeclScope(Decl *D) {\n  // ...\n  Diag(D->getLocation(), diag::err_objc_decls_may_only_appear_in_global_scope);"}},
[d]={{db,1178,"static void tryConsumeLambdaSpecifierToken(Parser &P, SourceLocation &MutableLoc, SourceLocation &StaticLoc, SourceLocation &ConstexprLoc, SourceLocation &ConstevalLoc, SourceLocation &DeclEndLoc) {\n  // ...\n  auto ConsumeLocation = [&P, &DeclEndLoc](SourceLocation &SpecifierLoc, int DiagIndex) {\n    if (SpecifierLoc.isValid()) {\n      P.Diag(P.getCurToken().getLocation(), diag::err_lambda_decl_specifier_repeated) << DiagIndex << FixItHint::CreateRemoval(P.getCurToken().getLocation());"}},
[l]={
[l]={
["clang/test/SemaObjC/invalid-code.m"]={"clang/test/SemaObjC/invalid-code.m:53:41: error: Objective-C declarations may only appear in global scope"}
["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:26:33: error: \'mutable\' cannot appear multiple times in a lambda declarator","clang/test/Parser/cxx2b-lambdas.cpp:27:33: error: \'constexpr\' cannot appear multiple times in a lambda declarator","clang/test/Parser/cxx2b-lambdas.cpp:42:24: error: \'static\' cannot appear multiple times in a lambda declarator"}
}
}
},
},
["err_objc_direct_duplicate_decl"]={
["err_lambda_impcap"]={
[c]={{nil,n,"err_objc_direct_duplicate_decl"}},
[b]="err_lambda_impcap",
[d]={{nil,x,"%select{|direct }0%select{method|property}1 declaration conflicts with previous %select{|direct }2declaration of %select{method|property}1 %3"},{n,n,"%select{|direct }0method declaration conflicts with previous %select{|direct }1declaration of method %2"}},
[i]="variable %0 cannot be implicitly captured in a lambda with no capture-default specified",
[e]={{nil,x,{{a,"direct "},{ob,"property"}," declaration conflicts with previous ",{a,"direct "},"declaration of ",{ob,"property"}," D"}},{n,n,{{a,"direct "},"method declaration conflicts with previous ",{a,"direct "},"declaration of method C"}}},
[j]="variable A cannot be implicitly captured in a lambda with no capture-default specified",
[f]=k,
[h]=k,
[g]="(?:|direct )(?:method|property) declaration conflicts with previous (?:|direct )declaration of (?:method|property) (.*?)",
[c]="variable (.*?) cannot be implicitly captured in a lambda with no capture\\-default specified",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]=T,
[b]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[g]={"24af85047046",1328309257,"Implement implicit capture for lambda expressions.","Implement implicit capture for lambda expressions.\n\nStill left: explicit captures in lambdas need to cause implicit capture, and I need to take a look at the diagnostics for some cases.\n\nllvm-svn: 149718"},
[j]={{T,4685,"static void checkObjCDirectMethodClashes(Sema &S, ObjCInterfaceDecl *IDecl, ObjCMethodDecl *Method, ObjCImplDecl *ImpDecl = nullptr) {\n  // ...\n  auto diagClash = [&](const ObjCMethodDecl *IMD) {\n    // ...\n    if (Method->isDirectMethod() || IMD->isDirectMethod()) {\n      S.Diag(Method->getLocation(), diag::err_objc_direct_duplicate_decl) << Method->isDirectMethod() << /* method */ 0 << IMD->isDirectMethod() << Method->getDeclName();"},{M,2417,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n // ...\n  // synthesizing accessors must not result in a direct method that is not\n  // monomorphic\n  if (!GetterMethod) {\n   if (const ObjCCategoryDecl *CatDecl = dyn_cast<ObjCCategoryDecl>(CD)) {\n     // ...\n      if (ExistingGetter) {\n        if (ExistingGetter->isDirectMethod() || property->isDirectProperty()) {\n          Diag(property->getLocation(), diag::err_objc_direct_duplicate_decl) << property->isDirectProperty() << 1 /* property */"},{M,2433,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  // ...\n  if (!property->isReadOnly() && !SetterMethod) {\n   if (const ObjCCategoryDecl *CatDecl = dyn_cast<ObjCCategoryDecl>(CD)) {\n      // ...\n      if (ExistingSetter) {\n        if (ExistingSetter->isDirectMethod() || property->isDirectProperty()) {\n          Diag(property->getLocation(), diag::err_objc_direct_duplicate_decl) << property->isDirectProperty() << 1 /* property */"}},
[d]={{q,19666,"bool Sema::tryCaptureVariable(ValueDecl *Var, SourceLocation ExprLoc, TryCaptureKind Kind, SourceLocation EllipsisLoc, bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const unsigned *const FunctionScopeIndexToStopAt) {\n  // ...\n  do {\n    // ...\n    // If we are instantiating a generic lambda call operator body,\n   // we do not want to capture new variables. What was captured\n   // during either a lambdas transformation or initial parsing\n   // should be used.\n   if (isGenericLambdaCallOperatorSpecialization(DC)) {\n     if (BuildAndDiagnose) {\n       // ...\n        if (LSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_None) {\n          Diag(ExprLoc, diag::err_lambda_impcap) << Var;"},{q,19746,"bool Sema::tryCaptureVariable(ValueDecl *Var, SourceLocation ExprLoc, TryCaptureKind Kind, SourceLocation EllipsisLoc, bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const unsigned *const FunctionScopeIndexToStopAt) {\n  // ...\n  do {\n    // ...\n    if (CSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_None && !Explicit) {\n     // No capture-default, and this is not an explicit capture\n      // so cannot capture this variable.\n      if (BuildAndDiagnose) {\n        Diag(ExprLoc, diag::err_lambda_impcap) << Var;"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct-one-definition.m"]={"clang/test/SemaObjC/method-direct-one-definition.m:51:1: error: direct method declaration conflicts with previous direct declaration of method \'B_implOnly\'","clang/test/SemaObjC/method-direct-one-definition.m:62:1: error: method declaration conflicts with previous direct declaration of method \'C1\'","clang/test/SemaObjC/method-direct-one-definition.m:63:1: error: direct method declaration conflicts with previous declaration of method \'C2\'"}
["clang/test/SemaCXX/cxx20-decomposition.cpp"]={"clang/test/SemaCXX/cxx20-decomposition.cpp:172:33: error: variable \'b\' cannot be implicitly captured in a lambda with no capture-default specified","clang/test/SemaCXX/cxx20-decomposition.cpp:172:33: error: variable \'b\' cannot be implicitly captured in a lambda with no capture-default specified","clang/test/SemaCXX/cxx20-decomposition.cpp:182:16: error: variable \'a\' cannot be implicitly captured in a lambda with no capture-default specified","clang/test/SemaCXX/cxx20-decomposition.cpp:182:16: error: variable \'a\' cannot be implicitly captured in a lambda with no capture-default specified","clang/test/SemaCXX/cxx20-decomposition.cpp:182:16: error: variable \'a\' cannot be implicitly captured in a lambda with no capture-default specified"}
}
}
},
},
["err_objc_direct_dynamic_property"]={
["err_lambda_in_constant_expression"]={
[c]={{nil,x,"err_objc_direct_dynamic_property"}},
[b]="err_lambda_in_constant_expression",
[d]={{nil,x,"direct property cannot be @dynamic"}},
[i]="a lambda expression may not appear inside of a constant expression",
[e]={{nil,x,"direct property cannot be @dynamic"}},
[j]="a lambda expression may not appear inside of a constant expression",
[f]=k,
[h]=k,
[g]="direct property cannot be @dynamic",
[c]="a lambda expression may not appear inside of a constant expression",
[h]=a,
[f]=a,
[i]={{nil,x,m}},
[e]=T,
[b]={Hb,1576908663,Gb,Fb},
[g]={"9adc361008e2",1382692372,"Sema: Do not allow lambda expressions to appear inside of constant expressions","Sema: Do not allow lambda expressions to appear inside of constant expressions\n\nWe would previously not diagnose this which would lead to crashes (on\nvery strange code).\n\nThis fixes PR17675.\n\nllvm-svn: 193397"},
[j]={{M,1618,"/// 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 (PIDecl->getPropertyImplementation() == ObjCPropertyImplDecl::Dynamic && PIDecl->getPropertyDecl() && PIDecl->getPropertyDecl()->isDirectProperty()) {\n   Diag(PropertyLoc, diag::err_objc_direct_dynamic_property);"}},
[d]={{q,18487,"void Sema::PopExpressionEvaluationContext() {\n // ...\n if (!Rec.Lambdas.empty()) {\n   // ...\n    if (!getLangOpts().CPlusPlus20 && (Rec.ExprContext == ExpressionKind::EK_TemplateArgument || Rec.isUnevaluated() || (Rec.isConstantEvaluated() && !getLangOpts().CPlusPlus17))) {\n     // ...\n     if (Rec.isUnevaluated()) {\n      // ...\n      } else if (Rec.isConstantEvaluated() && !getLangOpts().CPlusPlus17) {\n       // ...\n        D = diag::err_lambda_in_constant_expression;"}},
[l]={
[l]={
["clang/test/SemaObjC/dynamic-direct-properties.m"]={"clang/test/SemaObjC/dynamic-direct-properties.m:11:10: error: direct property cannot be @dynamic","clang/test/SemaObjC/dynamic-direct-properties.m:21:10: error: direct property cannot be @dynamic"}
["clang/test/SemaCXX/new-delete-0x.cpp"]={"clang/test/SemaCXX/new-delete-0x.cpp:24:24: error: a lambda expression may not appear inside of a constant expression"}
}
}
},
},
["err_objc_direct_impl_decl_mismatch"]={
["err_lambda_in_invalid_context"]={
[c]={{nil,n,"err_objc_direct_impl_decl_mismatch"}},
[b]={{nil,A,"err_lambda_in_invalid_context"}},
[d]={{nil,n,"direct method was declared in %select{the primary interface|an extension|a category}0 but is implemented in %select{the primary interface|a category|a different category}1"}},
[i]={{nil,A,"a lambda expression cannot appear in this context"}},
[e]={{nil,n,{"direct method was declared in ",{"the primary interface","an extension","a category"}," but is implemented in ",{"the primary interface","a category","a different category"}}}},
[j]={{nil,A,"a lambda expression cannot appear in this context"}},
[f]=k,
[h]=k,
[g]="direct method was declared in (?:the primary interface|an extension|a category) but is implemented in (?:the primary interface|a category|a different category)",
[c]="a lambda expression cannot appear in this context",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]={{nil,A,T}},
[b]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[g]={"b6d5c5871857",1531421141,"[C++17] Disallow lambdas in template parameters (PR33696).","[C++17] Disallow lambdas in template parameters (PR33696).\n\nSummary: This revision disallows lambdas in template parameters, as reported in PR33696.\n\nReviewers: rsmith\n\nReviewed By: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D37442\n\nllvm-svn: 336930"},
[j]={{T,4923,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  if (ObjCImplDecl *ImpDecl = dyn_cast<ObjCImplDecl>(ClassDecl)) {\n    // ...\n    // Merge information from the @interface declaration into the\n    // @implementation.\n    if (ObjCInterfaceDecl *IDecl = ImpDecl->getClassInterface()) {\n      if (auto *IMD = IDecl->lookupMethod(ObjCMethod->getSelector(), ObjCMethod->isInstanceMethod())) {\n       // ...\n       // The Idecl->lookupMethod() above will find declarations for ObjCMethod\n        // in one of these places:\n        //\n        // (1) the canonical declaration in an @interface container paired\n        //    with the ImplDecl,\n        // (2) non canonical declarations in @interface not paired with the\n       //     ImplDecl for the same Class,\n        // (3) any superclass container.\n       //\n        // Direct methods only allow for canonical declarations in the matching\n        // container (case 1).\n        //\n        // Direct methods overriding a superclass declaration (case 3) is\n        // handled during overrides checks in CheckObjCMethodOverrides().\n       //\n        // We deal with same-class container mismatches (Case 2) here.\n       if (IDecl == IMD->getClassInterface()) {\n         auto diagContainerMismatch = [&] {\n            // ...\n           Diag(ObjCMethod->getLocation(), diag::err_objc_direct_impl_decl_mismatch) << decl << impl;"}},
[d]={{q,18503,"void Sema::PopExpressionEvaluationContext() {\n  // ...\n  if (!Rec.Lambdas.empty()) {\n    // ...\n    if (!getLangOpts().CPlusPlus20 && (Rec.ExprContext == ExpressionKind::EK_TemplateArgument || Rec.isUnevaluated() || (Rec.isConstantEvaluated() && !getLangOpts().CPlusPlus17))) {\n     // ...\n     if (Rec.isUnevaluated()) {\n     // ...\n     } else if (Rec.isConstantEvaluated() && !getLangOpts().CPlusPlus17) {\n     // ...\n     } else if (Rec.ExprContext == ExpressionKind::EK_TemplateArgument) {\n       // ...\n       D = diag::err_lambda_in_invalid_context;"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct-one-definition.m"]={"clang/test/SemaObjC/method-direct-one-definition.m:12:1: error: direct method was declared in a category but is implemented in the primary interface","clang/test/SemaObjC/method-direct-one-definition.m:43:1: error: direct method was declared in the primary interface but is implemented in a category","clang/test/SemaObjC/method-direct-one-definition.m:45:1: error: direct method was declared in an extension but is implemented in a different category","clang/test/SemaObjC/method-direct-one-definition.m:49:1: error: direct method was declared in a category but is implemented in a different category"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2-template-parameter.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2-template-parameter.cpp:6:13: error: a lambda expression cannot appear in this context"}
}
}
},
},
["err_objc_direct_missing_on_decl"]={
["err_lambda_incomplete_result"]={
[c]={{nil,n,"err_objc_direct_missing_on_decl"}},
[b]="err_lambda_incomplete_result",
[d]={{nil,n,"direct method implementation was previously declared not direct"}},
[i]="incomplete result type %0 in lambda expression",
[e]={{nil,n,"direct method implementation was previously declared not direct"}},
[j]="incomplete result type A in lambda expression",
[f]=k,
[h]=k,
[g]="direct method implementation was previously declared not direct",
[c]="incomplete result type (.*?) in lambda expression",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]=T,
[b]={rb,1573050950,xb,ub},
[g]={"621003e7b956",1329254444,"Check the return type of lambda expressions.","Check the return type of lambda expressions.\n\nllvm-svn: 150503"},
[j]={{T,4933,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  if (ObjCImplDecl *ImpDecl = dyn_cast<ObjCImplDecl>(ClassDecl)) {\n    // ...\n    // Merge information from the @interface declaration into the\n    // @implementation.\n    if (ObjCInterfaceDecl *IDecl = ImpDecl->getClassInterface()) {\n      if (auto *IMD = IDecl->lookupMethod(ObjCMethod->getSelector(), ObjCMethod->isInstanceMethod())) {\n        // ...\n        // The Idecl->lookupMethod() above will find declarations for ObjCMethod\n        // in one of these places:\n        //\n        // (1) the canonical declaration in an @interface container paired\n       //    with the ImplDecl,\n        // (2) non canonical declarations in @interface not paired with the\n        //    ImplDecl for the same Class,\n        // (3) any superclass container.\n        //\n        // Direct methods only allow for canonical declarations in the matching\n        // container (case 1).\n        //\n        // Direct methods overriding a superclass declaration (case 3) is\n        // handled during overrides checks in CheckObjCMethodOverrides().\n        //\n        // We deal with same-class container mismatches (Case 2) here.\n        if (IDecl == IMD->getClassInterface()) {\n          // ...\n          if (ObjCMethod->isDirectMethod()) {\n            // ...\n            if (ObjCMethod->getCanonicalDecl() != IMD) {\n            // ...\n            } else if (!IMD->isDirectMethod()) {\n              Diag(attr->getLocation(), diag::err_objc_direct_missing_on_decl);"}},
[d]={{"clang/lib/Sema/SemaLambda.cpp",443,"static void buildLambdaScopeReturnType(Sema &S, LambdaScopeInfo *LSI, CXXMethodDecl *CallOperator, bool ExplicitResultType) {\n  if (ExplicitResultType) {\n    // ...\n    if (!LSI->ReturnType->isDependentType() && !LSI->ReturnType->isVoidType())\n     S.RequireCompleteType(CallOperator->getBeginLoc(), LSI->ReturnType, diag::err_lambda_incomplete_result);"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:117:41: error: direct method implementation was previously declared not direct","clang/test/SemaObjC/method-direct.m:120:46: error: direct method implementation was previously declared not direct"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp:48:22: error: incomplete result type \'Incomplete\' in lambda expression","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp:56:21: error: incomplete result type \'Incomplete\' in lambda expression"}
}
}
},
},
["err_objc_direct_on_override"]={
["err_lambda_return_init_list"]={
[c]={{nil,n,"err_objc_direct_on_override"}},
[b]="err_lambda_return_init_list",
[d]={{nil,n,"methods that %select{override superclass methods|implement protocol requirements}0 cannot be direct"}},
[i]="cannot deduce lambda return type from initializer list",
[e]={{nil,n,{"methods that ",{"override superclass methods","implement protocol requirements"}," cannot be direct"}}},
[j]="cannot deduce lambda return type from initializer list",
[f]=k,
[h]=k,
[g]="methods that (?:override superclass methods|implement protocol requirements) cannot be direct",
[c]="cannot deduce lambda return type from initializer list",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]=T,
[b]={rb,1573050950,xb,ub},
[g]={"940a550f0d35",1328812839,"Don\'t allow deduction of a lambda result type from an initializer","Don\'t allow deduction of a lambda result type from an initializer\nlist; it is not an expression.\n\nllvm-svn: 150194"},
[j]={{T,4433,"void Sema::CheckObjCMethodDirectOverrides(ObjCMethodDecl *method, ObjCMethodDecl *overridden) {\n  if (overridden->isDirectMethod()) {\n // ...\n } else if (method->isDirectMethod()) {\n    // ...\n    Diag(attr->getLocation(), diag::err_objc_direct_on_override) << isa<ObjCProtocolDecl>(overridden->getDeclContext());"}},
[d]={{"clang/lib/Sema/SemaStmt.cpp",3641,"/// 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  if (HasDeducedReturnType) {\n  // ...\n  } else if (CurCap->HasImplicitReturnType) {\n    // For blocks/lambdas with implicit return types, we check each return\n    // statement individually, and deduce the common return type when the block\n    // or lambda is completed.\n    // FIXME: Fold this into the \'auto\' codepath above.\n    if (RetValExp && !isa<InitListExpr>(RetValExp)) {\n   // ...\n   } else {\n      if (RetValExp) {\n        // ...\n        Diag(ReturnLoc, diag::err_lambda_return_init_list) << RetValExp->getSourceRange();"},{"clang/lib/Sema/SemaStmt.cpp",3798,"/// Deduce the return type for a function from a returned expression, per\n/// C++1y [dcl.spec.auto]p6.\nbool Sema::DeduceFunctionTypeFromReturnExpr(FunctionDecl *FD, SourceLocation ReturnLoc, Expr *RetExpr, const AutoType *AT) {\n  // ...\n  if (RetExpr && isa<InitListExpr>(RetExpr)) {\n    // ...\n    Diag(RetExpr->getExprLoc(), getCurLambda() ? diag::err_lambda_return_init_list : diag::err_auto_fn_return_init_list) << RetExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:62:36: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:63:41: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:64:36: error: methods that implement protocol requirements cannot be direct","clang/test/SemaObjC/method-direct.m:65:41: error: methods that implement protocol requirements cannot be direct","clang/test/SemaObjC/method-direct.m:66:45: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:67:50: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:68:44: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:69:49: error: methods that override superclass methods cannot be direct"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp:21:20: error: cannot deduce lambda return type from initializer list"}
}
}
},
},
["err_objc_direct_on_protocol"]={
["err_lambda_template_parameter_list_empty"]={
[c]={{nil,n,"err_objc_direct_on_protocol"}},
[b]={{nil,r,"err_lambda_template_parameter_list_empty"}},
[d]={{nil,n,"\'objc_direct\' attribute cannot be applied to %select{methods|properties}0 declared in an Objective-C protocol"}},
[i]={{nil,r,"lambda template parameter list cannot be empty"}},
[e]={{nil,n,{"\'objc_direct\' attribute cannot be applied to ",{"methods","properties"}," declared in an Objective-C protocol"}}},
[j]={{nil,r,"lambda template parameter list cannot be empty"}},
[f]=k,
[h]=k,
[g]="\'objc_direct\' attribute cannot be applied to (?:methods|properties) declared in an Objective\\-C protocol",
[c]="lambda template parameter list cannot be empty",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]={{nil,r,C}},
[b]={rb,1573050950,xb,ub},
[g]={"8205a814a691",1556966986,"[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas","[c++20] Implement P0428R2 - Familiar template syntax for generic lambdas\n\nDifferential Revision: https://reviews.llvm.org/D36527\n\nllvm-svn: 359967"},
[j]={{K,2944,"static void handleObjCDirectAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // objc_direct cannot be set on methods declared in the context of a protocol\n if (isa<ObjCProtocolDecl>(D->getDeclContext())) {\n    S.Diag(AL.getLoc(), diag::err_objc_direct_on_protocol) << false;"},{T,4699,"static void checkObjCDirectMethodClashes(Sema &S, ObjCInterfaceDecl *IDecl, ObjCMethodDecl *Method, ObjCImplDecl *ImpDecl = nullptr) {\n  // ...\n  //  diag::err_objc_direct_on_protocol has already been emitted"},{M,710,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n // ...\n  if ((Attributes & ObjCPropertyAttribute::kind_direct) || CDecl->hasAttr<ObjCDirectMembersAttr>()) {\n    if (isa<ObjCProtocolDecl>(CDecl)) {\n      Diag(PDecl->getLocation(), diag::err_objc_direct_on_protocol) << true;"}},
[d]={{db,1344,"/// ParseLambdaExpressionAfterIntroducer - Parse the rest of a lambda\n/// expression.\nExprResult Parser::ParseLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro) {\n  // ...\n  if (Tok.is(tok::less)) {\n   // ...\n    if (TemplateParams.empty()) {\n      Diag(RAngleLoc, diag::err_lambda_template_parameter_list_empty);"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct-properties.m"]={"clang/test/SemaObjC/method-direct-properties.m:4:34: error: \'objc_direct\' attribute cannot be applied to properties declared in an Objective-C protocol"}
["clang/test/Parser/cxx2a-template-lambdas.cpp"]={"clang/test/Parser/cxx2a-template-lambdas.cpp:4:14: error: lambda template parameter list cannot be empty"}
}
}
},
},
["err_objc_direct_protocol_conformance"]={
["err_lambda_unevaluated_operand"]={
[c]={{nil,D,"err_objc_direct_protocol_conformance"}},
[b]="err_lambda_unevaluated_operand",
[d]={{nil,D,"%select{category %1|class extension}0 cannot conform to protocol %2 because of direct members declared in interface %3"}},
[i]="lambda expression in an unevaluated operand",
[e]={{nil,D,{{"category B","class extension"}," cannot conform to protocol C because of direct members declared in interface D"}}},
[j]="lambda expression in an unevaluated operand",
[f]=k,
[h]=k,
[g]="(?:category (.*?)|class extension) cannot conform to protocol (.*?) because of direct members declared in interface (.*?)",
[c]="lambda expression in an unevaluated operand",
[h]=a,
[f]=a,
[i]={{nil,D,m}},
[e]=T,
[b]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
[g]={"896254916416",1328775283,"Implement C++ [expr.prim.lambda]p2, which bans lambda expressions in","Implement C++ [expr.prim.lambda]p2, which bans lambda expressions in\nunevaluated operands. Be certain that we\'re marking everything\nreferenced within a capture initializer as odr-used.\n\nllvm-svn: 150163"},
[j]={{T,3969,"static void DiagnoseCategoryDirectMembersProtocolConformance(Sema &S, ObjCProtocolDecl *PDecl, ObjCCategoryDecl *CDecl) {\n  // ...\n  if (!DirectMembers.empty()) {\n    S.Diag(CDecl->getLocation(), diag::err_objc_direct_protocol_conformance) << CDecl->IsClassExtension() << CDecl << PDecl << IDecl;"}},
[d]={{q,18483,"void Sema::PopExpressionEvaluationContext() {\n  // ...\n  if (!Rec.Lambdas.empty()) {\n    // ...\n    if (!getLangOpts().CPlusPlus20 && (Rec.ExprContext == ExpressionKind::EK_TemplateArgument || Rec.isUnevaluated() || (Rec.isConstantEvaluated() && !getLangOpts().CPlusPlus17))) {\n      // ...\n      if (Rec.isUnevaluated()) {\n        // ...\n        D = diag::err_lambda_unevaluated_operand;"}},
[l]={
[l]={
["clang/test/SemaObjC/category-direct-members-protocol-conformance.m"]={"clang/test/SemaObjC/category-direct-members-protocol-conformance.m:21:12: error: category \'Cat1\' cannot conform to protocol \'P\' because of direct members declared in interface \'I\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:54:12: error: category \'CatExpDirect\' cannot conform to protocol \'P\' because of direct members declared in interface \'ExpDirect\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:64:12: error: class extension cannot conform to protocol \'PRecursive1\' because of direct members declared in interface \'ExpDirect\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:81:12: error: class extension cannot conform to protocol \'PProp\' because of direct members declared in interface \'IProp1\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:97:12: error: class extension cannot conform to protocol \'PProp2\' because of direct members declared in interface \'IProp2\'"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp:18:19: error: lambda expression in an unevaluated operand","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp:20:38: error: lambda expression in an unevaluated operand","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp:40:14: error: lambda expression in an unevaluated operand"}
}
}
},
},
["err_objc_directive_only_in_protocol"]={
["err_language_linkage_spec_unknown"]={
[c]="err_objc_directive_only_in_protocol",
[b]="err_language_linkage_spec_unknown",
[d]="directive may only be specified in protocols only",
[i]="unknown linkage language",
[e]="directive may only be specified in protocols only",
[j]="unknown linkage language",
[f]=k,
[h]=k,
[g]="directive may only be specified in protocols only",
[c]="unknown linkage language",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={J,1236199783,H,I},
[g]={"4ee696d55cbb",1392679527,"PR18870: Parse language linkage specifiers properly if the string-literal is","PR18870: Parse language linkage specifiers properly if the string-literal is\nspelled in an interesting way.\n\nllvm-svn: 201536"},
[j]={{N,756,"///   objc-interface-decl-list:\n///     empty\n///     objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///     objc-interface-decl-list declaration\n///     objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n   // ...\n   case tok::objc_required:\n    case tok::objc_optional:\n     // This is only valid on protocols.\n     if (contextKey != tok::objc_protocol)\n       Diag(AtLoc, diag::err_objc_directive_only_in_protocol);"}},
[d]={{t,16534,"/// ActOnStartLinkageSpecification - Parsed the beginning of a C++\n/// linkage specification, including the language and (if present)\n/// the \'{\'. ExternLoc is the location of the \'extern\', Lang is the\n/// language string literal. LBraceLoc, if valid, provides the location of\n/// the \'{\' brace. Otherwise, this linkage specification does not\n/// have any braces.\nDecl *Sema::ActOnStartLinkageSpecification(Scope *S, SourceLocation ExternLoc, Expr *LangStr, SourceLocation LBraceLoc) {\n  // ...\n  if (Lang == \"C\")\n // ...\n else if (Lang == \"C++\")\n // ...\n else {\n   Diag(LangStr->getExprLoc(), diag::err_language_linkage_spec_unknown) << LangStr->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/protocols.m"]={"clang/test/SemaObjC/protocols.m:4:1: error: directive may only be specified in protocols only","clang/test/SemaObjC/protocols.m:8:1: error: directive may only be specified in protocols only"}
["clang/test/SemaCXX/extern-c.cpp"]={"clang/test/SemaCXX/extern-c.cpp:264:10: error: unknown linkage language"}
}
}
},
},
["err_objc_exceptions_disabled"]={
["err_late_asm_label_name"]={
[c]="err_objc_exceptions_disabled",
[b]="err_late_asm_label_name",
[d]="cannot use \'%0\' with Objective-C exceptions disabled",
[i]="cannot apply asm label to %select{variable|function}0 after its first use",
[e]="cannot use \'A\' with Objective-C exceptions disabled",
[j]={{nil,nil,{"cannot apply asm label to ",{"variable","function"}," after its first use"}}},
[f]=k,
[h]=k,
[g]="cannot use \'(.*?)\' with Objective\\-C exceptions disabled",
[c]="cannot apply asm label to (?:variable|function) after its first use",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"ce8dd3a5d474",1298159634,"Add a new ObjCExceptions member variable to LangOptions. This controls whether Objective-C exception...","Add a new ObjCExceptions member variable to LangOptions. This controls whether Objective-C exceptions are enabled or not (they are by default).\n\nllvm-svn: 126061"},
[g]={"6ee53bc0850c",1449869335,"Error on redeclaring with a conflicting asm label and on redeclaring with an asm label after the fir...","Error on redeclaring with a conflicting asm label and on redeclaring with an asm label after the first ODR-use. Detects problems like the one in PR22830 where gcc and clang both compiled the file but with different behaviour.\n\nllvm-svn: 255371"},
[j]={{F,4239,"StmtResult Sema::ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try, MultiStmtArg CatchStmts, Stmt *Finally) {\n  if (!getLangOpts().ObjCExceptions)\n    Diag(AtLoc, diag::err_objc_exceptions_disabled) << \"@try\";"},{F,4283,"StmtResult Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, Scope *CurScope) {\n if (!getLangOpts().ObjCExceptions)\n   Diag(AtLoc, diag::err_objc_exceptions_disabled) << \"@throw\";"}},
[d]={{p,3246,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  // ...\n  if (AsmLabelAttr *NewA = New->getAttr<AsmLabelAttr>()) {\n    if (AsmLabelAttr *OldA = Old->getAttr<AsmLabelAttr>()) {\n   // ...\n    } else if (Old->isUsed()) {\n      // ...\n     Diag(New->getLocation(), diag::err_late_asm_label_name) << isa<FunctionDecl>(Old) << New->getAttr<AsmLabelAttr>()->getRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/no-objc-exceptions.m"]={"clang/test/SemaObjC/no-objc-exceptions.m:4:3: error: cannot use \'@throw\' with Objective-C exceptions disabled","clang/test/SemaObjC/no-objc-exceptions.m:8:3: error: cannot use \'@try\' with Objective-C exceptions disabled"}
["clang/test/Sema/asm-label.c"]={"clang/test/Sema/asm-label.c:10:6: error: cannot apply asm label to function after its first use","clang/test/Sema/asm-label.c:21:5: error: cannot apply asm label to variable after its first use"}
}
}
},
},
["err_objc_expected_equal_for_getter"]={
["err_lexing_char"]={
[c]="err_objc_expected_equal_for_getter",
[b]={{nil,B,"err_lexing_char"}},
[d]="expected \'=\' for Objective-C getter",
[i]={{nil,B,"failure when lexing a character literal"}},
[e]="expected \'=\' for Objective-C getter",
[j]={{nil,B,"failure when lexing a character literal"}},
[f]=k,
[h]=k,
[g]="expected \'\\=\' for Objective\\-C getter",
[c]="failure when lexing a character literal",
[h]=a,
[f]=a,
[i]=y,
[e]={{nil,B,O}},
[b]={"fe15a78ff24f",1286041521,"Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR81...","Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR8169.\n\nllvm-svn: 115411"},
[g]={N,1625925174,M,L},
[j]={{N,932,"///   Parse property attribute declarations.\n///\n///   property-attr-decl: \'(\' property-attrlist \')\'\n///   property-attrlist:\n///     property-attribute\n///     property-attrlist \',\' property-attribute\n///   property-attribute:\n///     getter \'=\' identifier\n///     setter \'=\' identifier \':\'\n///     direct\n///    readonly\n///     readwrite\n///    assign\n///    retain\n///     copy\n///     nonatomic\n///     atomic\n///     strong\n///     weak\n///    unsafe_unretained\n///     nonnull\n///    nullable\n///    null_unspecified\n///     null_resettable\n///     class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n // ...\n  while (true) {\n    // ...\n    if (II->isStr(\"readonly\"))\n   // ...\n    else if (II->isStr(\"assign\"))\n   // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n   // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n   // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n      // ...\n      unsigned DiagID = IsSetter ? diag::err_objc_expected_equal_for_setter : diag::err_objc_expected_equal_for_getter;"}}
[d]={{ab,1671,"/// \\verbatim\n///       user-defined-character-literal: [C++11 lex.ext]\n///         character-literal ud-suffix\n///       ud-suffix:\n///         identifier\n///       character-literal: [C++11 lex.ccon]\n///         \' c-char-sequence \'\n///         u\' c-char-sequence \'\n///        U\' c-char-sequence \'\n///         L\' c-char-sequence \'\n///         u8\' c-char-sequence \' [C++1z lex.ccon]\n///       c-char-sequence:\n///         c-char\n///         c-char-sequence c-char\n///       c-char:\n///         any member of the source character set except the single-quote \',\n///           backslash \\, or new-line character\n///         escape-sequence\n///         universal-character-name\n///       escape-sequence:\n///         simple-escape-sequence\n///        octal-escape-sequence\n///        hexadecimal-escape-sequence\n///       simple-escape-sequence:\n///         one of \\\' \\\" \\? \\\\ \\a \\b \\f \\n \\r \\t \\v\n///       octal-escape-sequence:\n///         \\ octal-digit\n///         \\ octal-digit octal-digit\n///         \\ octal-digit octal-digit octal-digit\n///       hexadecimal-escape-sequence:\n///         \\x hexadecimal-digit\n///         hexadecimal-escape-sequence hexadecimal-digit\n///       universal-character-name: [C++11 lex.charset]\n///         \\u hex-quad\n///         \\U hex-quad hex-quad\n///       hex-quad:\n///         hex-digit hex-digit hex-digit hex-digit\n/// \\endverbatim\n///\nCharLiteralParser::CharLiteralParser(const char *begin, const char *end, SourceLocation Loc, Preprocessor &PP, tok::TokenKind kind) {\n  // ...\n  // Skip over the entry quote.\n if (begin[0] != \'\\\'\') {\n    PP.Diag(Loc, diag::err_lexing_char);"}}
},
["err_objc_expected_equal_for_setter"]={
[c]="err_objc_expected_equal_for_setter",
[d]="expected \'=\' for Objective-C setter",
[e]="expected \'=\' for Objective-C setter",
[f]=k,
[g]="expected \'\\=\' for Objective\\-C setter",
[h]=a,
[i]=y,
[b]={"fe15a78ff24f",1286041521,"Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR81...","Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR8169.\n\nllvm-svn: 115411"},
[j]={{N,931,"///  Parse property attribute declarations.\n///\n///   property-attr-decl: \'(\' property-attrlist \')\'\n///   property-attrlist:\n///    property-attribute\n///     property-attrlist \',\' property-attribute\n///  property-attribute:\n///     getter \'=\' identifier\n///     setter \'=\' identifier \':\'\n///     direct\n///    readonly\n///    readwrite\n///     assign\n///     retain\n///     copy\n///    nonatomic\n///    atomic\n///     strong\n///    weak\n///    unsafe_unretained\n///     nonnull\n///     nullable\n///     null_unspecified\n///    null_resettable\n///    class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n  // ...\n  while (true) {\n    // ...\n   if (II->isStr(\"readonly\"))\n    // ...\n    else if (II->isStr(\"assign\"))\n    // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n    // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n      // ...\n      unsigned DiagID = IsSetter ? diag::err_objc_expected_equal_for_setter : diag::err_objc_expected_equal_for_getter;"}}
},
},
["err_objc_expected_property_attr"]={
["err_lexing_numeric"]={
[c]="err_objc_expected_property_attr",
[b]={{nil,B,"err_lexing_numeric"}},
[d]="unknown property attribute %0",
[i]={{nil,B,"failure when lexing a numeric literal"}},
[e]="unknown property attribute A",
[j]={{nil,B,"failure when lexing a numeric literal"}},
[f]=k,
[h]=k,
[g]="unknown property attribute (.*?)",
[c]="failure when lexing a numeric literal",
[h]=a,
[f]=a,
[i]=y,
[e]={{nil,B,O}},
[b]={J,1236199783,H,I},
[g]={N,1625925174,M,L},
[j]={{N,1007,"///   Parse property attribute declarations.\n///\n///   property-attr-decl: \'(\' property-attrlist \')\'\n///   property-attrlist:\n///     property-attribute\n///     property-attrlist \',\' property-attribute\n///   property-attribute:\n///     getter \'=\' identifier\n///     setter \'=\' identifier \':\'\n///     direct\n///     readonly\n///     readwrite\n///     assign\n///     retain\n///     copy\n///     nonatomic\n///     atomic\n///     strong\n///     weak\n///     unsafe_unretained\n///     nonnull\n///     nullable\n///     null_unspecified\n///     null_resettable\n///     class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n // ...\n while (true) {\n    // ...\n    if (II->isStr(\"readonly\"))\n   // ...\n    else if (II->isStr(\"assign\"))\n   // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n   // ...\n    else if (II->isStr(\"readwrite\"))\n   // ...\n   else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n   // ...\n   else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n   // ...\n   else if (II->isStr(\"atomic\"))\n    // ...\n   else if (II->isStr(\"weak\"))\n    // ...\n   else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n    // ...\n    } else if (II->isStr(\"nonnull\")) {\n   // ...\n   } else if (II->isStr(\"nullable\")) {\n    // ...\n   } else if (II->isStr(\"null_unspecified\")) {\n    // ...\n    } else if (II->isStr(\"null_resettable\")) {\n   // ...\n   } else if (II->isStr(\"class\")) {\n    // ...\n    } else if (II->isStr(\"direct\")) {\n   // ...\n    } else {\n     Diag(AttrName, diag::err_objc_expected_property_attr) << II;"},{N,2437,"///   property-dynamic:\n///     @dynamic  property-list\n///\n///   property-list:\n///     identifier\n///    property-list \',\' identifier\n///\nDecl *Parser::ParseObjCPropertyDynamic(SourceLocation atLoc) {\n  // ...\n  if (Tok.is(tok::l_paren)) {\n   // ...\n   if (!II) {\n      Diag(Tok, diag::err_objc_expected_property_attr) << II;"},{N,2449,"///   property-dynamic:\n///    @dynamic property-list\n///\n///  property-list:\n///    identifier\n///    property-list \',\' identifier\n///\nDecl *Parser::ParseObjCPropertyDynamic(SourceLocation atLoc) {\n // ...\n  if (Tok.is(tok::l_paren)) {\n    // ...\n    if (!II) {\n    // ...\n    } else {\n      // ...\n     if (II->isStr(\"class\")) {\n     // ...\n      } else {\n        Diag(AttrName, diag::err_objc_expected_property_attr) << II;"}},
[d]={{ab,922,"///       integer-constant: [C99 6.4.4.1]\n///         decimal-constant integer-suffix\n///         octal-constant integer-suffix\n///         hexadecimal-constant integer-suffix\n///         binary-literal integer-suffix [GNU, C++1y]\n///       user-defined-integer-literal: [C++11 lex.ext]\n///         decimal-literal ud-suffix\n///         octal-literal ud-suffix\n///         hexadecimal-literal ud-suffix\n///         binary-literal ud-suffix [GNU, C++1y]\n///       decimal-constant:\n///         nonzero-digit\n///         decimal-constant digit\n///       octal-constant:\n///         0\n///         octal-constant octal-digit\n///       hexadecimal-constant:\n///         hexadecimal-prefix hexadecimal-digit\n///         hexadecimal-constant hexadecimal-digit\n///       hexadecimal-prefix: one of\n///         0x 0X\n///       binary-literal:\n///         0b binary-digit\n///         0B binary-digit\n///         binary-literal binary-digit\n///       integer-suffix:\n///        unsigned-suffix [long-suffix]\n///        unsigned-suffix [long-long-suffix]\n///        long-suffix [unsigned-suffix]\n///        long-long-suffix [unsigned-sufix]\n///      nonzero-digit:\n///        1 2 3 4 5 6 7 8 9\n///      octal-digit:\n///        0 1 2 3 4 5 6 7\n///      hexadecimal-digit:\n///        0 1 2 3 4 5 6 7 8 9\n///        a b c d e f\n///        A B C D E F\n///      binary-digit:\n///        0\n///        1\n///      unsigned-suffix: one of\n///        u U\n///      long-suffix: one of\n///        l L\n///       long-long-suffix: one of\n///         ll LL\n///\n///       floating-constant: [C99 6.4.4.2]\n///         TODO: add rules...\n///\nNumericLiteralParser::NumericLiteralParser(StringRef TokSpelling, SourceLocation TokLoc, const SourceManager &SM, const LangOptions &LangOpts, const TargetInfo &Target, DiagnosticsEngine &Diags) : SM(SM), LangOpts(LangOpts), Diags(Diags), ThisTokBegin(TokSpelling.begin()), ThisTokEnd(TokSpelling.end()) {\n // ...\n // This routine assumes that the range begin/end matches the regex for integer\n  // and FP constants (specifically, the \'pp-number\' regex), and assumes that\n // the byte at \"*end\" is both valid and not part of the regex. Because of\n  // this, it doesn\'t have to check for \'overscan\' in various places.\n if (isPreprocessingNumberBody(*ThisTokEnd)) {\n   Diags.Report(TokLoc, diag::err_lexing_numeric);"}}
[l]={
["clang/test/SemaObjC/property-9.m"]={"clang/test/SemaObjC/property-9.m:56:12: error: unknown property attribute \'readonlyx\'"}
}
},
},
["err_objc_expected_selector_for_getter_setter"]={
["err_lexing_string"]={
[c]="err_objc_expected_selector_for_getter_setter",
[b]="err_lexing_string",
[d]="expected selector for Objective-C %select{setter|getter}0",
[i]={{nil,B,"failure when lexing a string literal"},{w,nil,"failure when lexing a string"}},
[e]={{nil,nil,{"expected selector for Objective-C ",{"setter","getter"}}}},
[j]={{nil,B,"failure when lexing a string literal"},{w,nil,"failure when lexing a string"}},
[f]=k,
[h]=k,
[g]="expected selector for Objective\\-C (?:setter|getter)",
[c]="failure when lexing a string literal",
[h]=a,
[f]=a,
[i]=y,
[e]=O,
[b]={"fe15a78ff24f",1286041521,"Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR81...","Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR8169.\n\nllvm-svn: 115411"},
[g]={"9933e3ac88ad",1336067432,"In StringLiteralParser::init, make sure we emit an error when","In StringLiteralParser::init, make sure we emit an error when\nfailing to lex the string, as suggested by Eli.\n\nPart of rdar://11305263.\n\nllvm-svn: 156081"},
[j]={{N,952,"///  Parse property attribute declarations.\n///\n///  property-attr-decl: \'(\' property-attrlist \')\'\n///  property-attrlist:\n///    property-attribute\n///    property-attrlist \',\' property-attribute\n///  property-attribute:\n///    getter \'=\' identifier\n///    setter \'=\' identifier \':\'\n///    direct\n///    readonly\n///    readwrite\n///    assign\n///    retain\n///    copy\n///    nonatomic\n///    atomic\n///    strong\n///    weak\n///    unsafe_unretained\n///    nonnull\n///    nullable\n///    null_unspecified\n///    null_resettable\n///    class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n  // ...\n  while (true) {\n    // ...\n    if (II->isStr(\"readonly\"))\n    // ...\n    else if (II->isStr(\"assign\"))\n    // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n    // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n      // ...\n      if (!SelIdent) {\n        Diag(Tok, diag::err_objc_expected_selector_for_getter_setter) << IsSetter;"}}
[d]={{ab,2289,"void StringLiteralParser::DiagnoseLexingError(SourceLocation Loc) {\n  // ...\n  if (Diags)\n    Diags->Report(Loc, diag::err_lexing_string);"}}
},
},
["err_objc_expected_type_parameter"]={
["err_lifetimebound_ctor_dtor"]={
[c]="err_objc_expected_type_parameter",
[b]={{nil,A,"err_lifetimebound_ctor_dtor"}},
[d]="expected type parameter name",
[i]={{nil,A,"\'lifetimebound\' attribute cannot be applied to a %select{constructor|destructor}0"}},
[e]="expected type parameter name",
[j]={{nil,A,{"\'lifetimebound\' attribute cannot be applied to a ",{"constructor",ob}}}},
[f]=k,
[h]=k,
[g]="expected type parameter name",
[c]="\'lifetimebound\' attribute cannot be applied to a (?:constructor|destructor)",
[h]=a,
[f]=a,
[i]=sc,
[e]={{nil,A,m}},
[b]={rc,1436241435,qc,xc},
[g]={"f4e248c23e05",1533083605,"[P0936R0] add [[clang::lifetimebound]] attribute","[P0936R0] add [[clang::lifetimebound]] attribute\n\nThis patch adds support for a new attribute, [[clang::lifetimebound]], that\nindicates that the lifetime of a function result is related to one of the\nfunction arguments. When walking an initializer to make sure that the lifetime\nof the initial value is at least as long as the lifetime of the initialized\nobject, we step through parameters (including the implicit object parameter of\na non-static member function) that are marked with this attribute.\n\nThere\'s nowhere to write an attribute on the implicit object parameter, so in\nlieu of that, it may be applied to a function type (where it appears\nimmediately after the cv-qualifiers and ref-qualifier, which is as close to a\ndeclaration of the implicit object parameter as we have). I\'m currently\nmodeling this in the AST as the attribute appertaining to the function type.\n\nDifferential Revision: https://reviews.llvm.org/D49922\n\nllvm-svn: 338464"},
[j]={{N,518,"/// Parse an Objective-C type parameter list, if present, or capture\n/// the locations of the protocol identifiers for a list of protocol\n/// references.\n///\n///  objc-type-parameter-list:\n///    \'<\' objc-type-parameter (\',\' objc-type-parameter)* \'>\'\n///\n///  objc-type-parameter:\n///    objc-type-parameter-variance? identifier objc-type-parameter-bound[opt]\n///\n///  objc-type-parameter-bound:\n///    \':\' type-name\n///\n///  objc-type-parameter-variance:\n///    \'__covariant\'\n///    \'__contravariant\'\n///\n/// \\param lAngleLoc The location of the starting \'<\'.\n///\n/// \\param protocolIdents Will capture the list of identifiers, if the\n/// angle brackets contain a list of protocol references rather than a\n/// type parameter list.\n///\n/// \\param rAngleLoc The location of the ending \'>\'.\nObjCTypeParamList *Parser::parseObjCTypeParamListOrProtocolRefs(ObjCTypeParamListScope &Scope, SourceLocation &lAngleLoc, SmallVectorImpl<IdentifierLocPair> &protocolIdents, SourceLocation &rAngleLoc, bool mayBeProtocolList) {\n // ...\n do {\n   // ...\n   // Parse the identifier.\n    if (!Tok.is(tok::identifier)) {\n     // ...\n      Diag(Tok, diag::err_objc_expected_type_parameter);"}},
[d]={{p,7027,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n // ...\n // Check the attributes on the function type, if any.\n if (const auto *FD = dyn_cast<FunctionDecl>(&ND)) {\n   // ...\n   for (TypeLoc TL = FD->getTypeSourceInfo()->getTypeLoc(); (ATL = TL.getAsAdjusted<AttributedTypeLoc>()); TL = ATL.getModifiedLoc()) {\n     // The [[lifetimebound]] attribute can be applied to the implicit object\n     // parameter of a non-static member function (other than a ctor or dtor)\n     // by applying it to the function type.\n     if (const auto *A = ATL.getAttrAs<LifetimeBoundAttr>()) {\n       // ...\n       if (!MD || MD->isStatic()) {\n       // ...\n       } else if (isa<CXXConstructorDecl>(MD) || isa<CXXDestructorDecl>(MD)) {\n         S.Diag(A->getLocation(), diag::err_lifetimebound_ctor_dtor) << isa<CXXDestructorDecl>(MD) << A->getRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/kindof.m"]={"clang/test/SemaObjC/kindof.m:465:19: error: expected type parameter name","clang/test/SemaObjC/kindof.m:471:25: error: expected type parameter name"}
["clang/test/SemaCXX/attr-lifetimebound.cpp"]={"clang/test/SemaCXX/attr-lifetimebound.cpp:9:11: error: \'lifetimebound\' attribute cannot be applied to a constructor","clang/test/SemaCXX/attr-lifetimebound.cpp:10:12: error: \'lifetimebound\' attribute cannot be applied to a destructor"}
}
}
},
},
["err_objc_for_range_init_stmt"]={
["err_lifetimebound_no_object_param"]={
[c]={{nil,db,"err_objc_for_range_init_stmt"}},
[b]={{nil,A,"err_lifetimebound_no_object_param"}},
[d]={{nil,db,"initialization statement is not supported when iterating over Objective-C collection"}},
[i]={{nil,A,"\'lifetimebound\' attribute cannot be applied; %select{static |non-}0member function has no implicit object parameter"}},
[e]={{nil,db,"initialization statement is not supported when iterating over Objective-C collection"}},
[j]={{nil,A,{"\'lifetimebound\' attribute cannot be applied; ",{"static ","non-"},"member function has no implicit object parameter"}}},
[f]=k,
[h]=k,
[g]="initialization statement is not supported when iterating over Objective\\-C collection",
[c]="\'lifetimebound\' attribute cannot be applied; (?:static |non\\-)member function has no implicit object parameter",
[h]=a,
[f]=a,
[i]={{nil,db,m}},
[e]={{nil,A,m}},
[b]={"8baa50013c86",1538160249,"[cxx2a] P0614R1: Support init-statements in range-based for loops.","[cxx2a] P0614R1: Support init-statements in range-based for loops.\n\nWe don\'t yet support this for the case where a range-based for loop is\nimplicitly rewritten to an ObjC for..in statement.\n\nllvm-svn: 343350"},
[g]={"f4e248c23e05",1533083605,"[P0936R0] add [[clang::lifetimebound]] attribute","[P0936R0] add [[clang::lifetimebound]] attribute\n\nThis patch adds support for a new attribute, [[clang::lifetimebound]], that\nindicates that the lifetime of a function result is related to one of the\nfunction arguments. When walking an initializer to make sure that the lifetime\nof the initial value is at least as long as the lifetime of the initialized\nobject, we step through parameters (including the implicit object parameter of\na non-static member function) that are marked with this attribute.\n\nThere\'s nowhere to write an attribute on the implicit object parameter, so in\nlieu of that, it may be applied to a function type (where it appears\nimmediately after the cv-qualifiers and ref-qualifier, which is as close to a\ndeclaration of the implicit object parameter as we have). I\'m currently\nmodeling this in the AST as the attribute appertaining to the function type.\n\nDifferential Revision: https://reviews.llvm.org/D49922\n\nllvm-svn: 338464"},
[j]={{F,2495,"/// ActOnCXXForRangeStmt - Check and build a C++11 for-range statement.\n///\n/// C++11 [stmt.ranged]:\n///  A range-based for statement is equivalent to\n///\n///  {\n///    auto && __range = range-init;\n///    for ( auto __begin = begin-expr,\n///          __end = end-expr;\n///          __begin != __end;\n///          ++__begin ) {\n///      for-range-declaration = *__begin;\n///      statement\n///    }\n///  }\n///\n/// The body of the loop is not available yet, since it cannot be analysed until\n/// we have determined the type of the for-range-declaration.\nStmtResult Sema::ActOnCXXForRangeStmt(Scope *S, SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, Stmt *First, SourceLocation ColonLoc, Expr *Range, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n // ...\n if (Range && ObjCEnumerationCollection(Range)) {\n   // FIXME: Support init-statements in Objective-C++20 ranged for statement.\n    if (InitStmt)\n      return Diag(InitStmt->getBeginLoc(), diag::err_objc_for_range_init_stmt) << InitStmt->getSourceRange();"}},
[d]={{p,7024,"static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) {\n // ...\n // Check the attributes on the function type, if any.\n if (const auto *FD = dyn_cast<FunctionDecl>(&ND)) {\n   // ...\n   for (TypeLoc TL = FD->getTypeSourceInfo()->getTypeLoc(); (ATL = TL.getAsAdjusted<AttributedTypeLoc>()); TL = ATL.getModifiedLoc()) {\n     // The [[lifetimebound]] attribute can be applied to the implicit object\n     // parameter of a non-static member function (other than a ctor or dtor)\n     // by applying it to the function type.\n      if (const auto *A = ATL.getAttrAs<LifetimeBoundAttr>()) {\n       // ...\n       if (!MD || MD->isStatic()) {\n         S.Diag(A->getLocation(), diag::err_lifetimebound_no_object_param) << !MD << A->getRange();"}},
[l]={
[l]={
["clang/test/SemaObjCXX/foreach.mm"]={"clang/test/SemaObjCXX/foreach.mm:18:8: error: initialization statement is not supported when iterating over Objective-C collection","clang/test/SemaObjCXX/foreach.mm:21:8: error: initialization statement is not supported when iterating over Objective-C collection"}
["clang/test/SemaCXX/attr-lifetimebound.cpp"]={"clang/test/SemaCXX/attr-lifetimebound.cpp:7:29: error: \'lifetimebound\' attribute cannot be applied; non-member function has no implicit object parameter","clang/test/SemaCXX/attr-lifetimebound.cpp:11:41: error: \'lifetimebound\' attribute cannot be applied; static member function has no implicit object parameter"}
}
}
},
},
["err_objc_illegal_boxed_expression_type"]={
["err_list_init_in_parens"]={
[c]="err_objc_illegal_boxed_expression_type",
[b]="err_list_init_in_parens",
[d]="illegal type %0 used in a boxed expression",
[i]="list-initializer for non-class type %0 must not be parenthesized",
[e]="illegal type A used in a boxed expression",
[j]="list-initializer for non-class type A must not be parenthesized",
[f]=k,
[h]=k,
[g]="illegal type (.*?) used in a boxed expression",
[c]="cannot initialize (?:non\\-class|reference) type (.*?) with a parenthesized initializer list",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"0caa39474bfc",1334795112,"Implements boxed expressions for Objective-C. <rdar://problem/10194391>","Implements boxed expressions for Objective-C. <rdar://problem/10194391>\n\nllvm-svn: 155082"},
[g]={"3852637005b1",1478965135,"Use descriptive message if list initializer is incorrectly parenthesized.","Use descriptive message if list initializer is incorrectly parenthesized.\n\nIf initializer contains parentheses around braced list where it is not allowed,\nas in construct int({0}), clang issued message like `functional-style cast\nfrom \'void\' to \'int\' is not allowed`, which does not help much. Both gcc and\nmsvc issue message `list-initializer for non-class type must not be\nparenthesized`, which is more descriptive. This change implements similar\nmessage for clang.\n\nDifferential Revision: https://reviews.llvm.org/D25816\n\nllvm-svn: 286721"},
[j]={{G,732,"ExprResult Sema::BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr) {\n  // ...\n  if (!BoxingMethod) {\n    Diag(Loc, diag::err_objc_illegal_boxed_expression_type) << ValueType << ValueExpr->getSourceRange();"}},
[d]={{H,9573,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ParenthesizedListInitForReference:\n    S.Diag(Kind.getLocation(), diag::err_list_init_in_parens) << 1 << Entity.getType() << Args[0]->getSourceRange();"},{H,9823,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ParenthesizedListInitForScalar:\n    S.Diag(Kind.getLocation(), diag::err_list_init_in_parens) << 0 << Entity.getType() << Args[0]->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:16:13: error: illegal type \'int\' used in a boxed expression","clang/test/SemaObjC/objc-literal-nsnumber.m:26:13: error: illegal type \'int\' used in a boxed expression"}
["clang/test/SemaCXX/cxx0x-initializer-scalars.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:94:9: error: cannot initialize non-class type \'int\' with a parenthesized initializer list","clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:95:12: error: cannot initialize non-class type \'int\' with a parenthesized initializer list","clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:96:9: error: cannot initialize non-class type \'int\' with a parenthesized initializer list","clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:98:10: error: cannot initialize non-class type \'int *\' with a parenthesized initializer list","clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:100:14: error: cannot initialize non-class type \'intptr\' (aka \'int *\') with a parenthesized initializer list"}
}
}
},
},
["err_objc_illegal_interface_qual"]={
["err_literal_operator_bad_param_count"]={
[c]="err_objc_illegal_interface_qual",
[b]="err_literal_operator_bad_param_count",
[d]="illegal interface qualifier",
[i]="non-template literal operator must have one or two parameters",
[e]="illegal interface qualifier",
[j]="non-template literal operator must have one or two parameters",
[f]=k,
[h]=k,
[g]="illegal interface qualifier",
[c]="non\\-template literal operator must have one or two parameters",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={J,1236199783,H,I},
[g]={cc,1455667444,gc,kc},
[j]={{N,738,"///   objc-interface-decl-list:\n///     empty\n///     objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n   // ...\n   default:\n     // ...\n     Diag(AtLoc, diag::err_objc_illegal_interface_qual);"}},
[d]={{t,16481,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n // ...\n // template <char...> type operator \"\" name() and\n // template <class T, T...> type operator \"\" name() are the only valid\n // template signatures, and the only valid signatures with no parameters.\n //\n // C++20 also allows template <SomeClass T> type operator \"\" name().\n if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n // ...\n } else if (FnDecl->param_size() == 2) {\n // ...\n } else {\n    Diag(FnDecl->getLocation(), diag::err_literal_operator_bad_param_count);"}},
[l]={
[l]={
["clang/test/Parser/missing-end-4.m"]={"clang/test/Parser/missing-end-4.m:41:1: error: illegal interface qualifier","clang/test/Parser/missing-end-4.m:42:1: error: illegal interface qualifier"}
["clang/test/CXX/over/over.oper/over.literal/p5.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p5.cpp:15:15: error: non-template literal operator must have one or two parameters"}
}
}
},
},
["err_objc_illegal_visibility_spec"]={
["err_literal_operator_default_argument"]={
[c]="err_objc_illegal_visibility_spec",
[b]="err_literal_operator_default_argument",
[d]="illegal visibility specification",
[i]="literal operator cannot have a default argument",
[e]="illegal visibility specification",
[j]="literal operator cannot have a default argument",
[f]=k,
[h]=k,
[g]="illegal visibility specification",
[c]="literal operator cannot have a default argument",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={J,1236199783,H,I},
[g]={"768ceccc75f0",1331280982,"Literal operators can\'t have default arguments.","Literal operators can\'t have default arguments.\n\nllvm-svn: 152394"},
[j]={{N,1999,"///  objc-class-instance-variables:\n///    \'{\' objc-instance-variable-decl-list[opt] \'}\'\n///\n///  objc-instance-variable-decl-list:\n///    objc-visibility-spec\n///    objc-instance-variable-decl \';\'\n///    \';\'\n///    objc-instance-variable-decl-list objc-visibility-spec\n///    objc-instance-variable-decl-list objc-instance-variable-decl \';\'\n///    objc-instance-variable-decl-list static_assert-declaration\n///    objc-instance-variable-decl-list \';\'\n///\n///  objc-visibility-spec:\n///    @private\n///    @protected\n///    @public\n///    @package [OBJC2]\n///\n///  objc-instance-variable-decl:\n///    struct-declaration\n///\nvoid Parser::ParseObjCClassInstanceVariables(ObjCContainerDecl *interfaceDecl, tok::ObjCKeywordKind visibility, SourceLocation atLoc) {\n  // ...\n  // While we still have something to read, read the instance variables.\n  while (Tok.isNot(tok::r_brace) && !isEofOrEom()) {\n    // ...\n    // Set the default visibility to private.\n    if (TryConsumeToken(tok::at)) { // parse objc-visibility-spec\n      // ...\n      default:\n        Diag(Tok, diag::err_objc_illegal_visibility_spec);"}}
[d]={{t,16492,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // A parameter-declaration-clause containing a default argument is not\n  // equivalent to any of the permitted forms.\n  for (auto *Param : FnDecl->parameters()) {\n    if (Param->hasDefaultArg()) {\n      Diag(Param->getDefaultArgRange().getBegin(), diag::err_literal_operator_default_argument) << Param->getDefaultArgRange();"}},
},
["err_objc_incomplete_boxed_expression_type"]={
[c]="err_objc_incomplete_boxed_expression_type",
[d]="incomplete type %0 used in a boxed expression",
[e]="incomplete type A used in a boxed expression",
[f]=k,
[g]="incomplete type (.*?) used in a boxed expression",
[h]=a,
[i]=m,
[b]={"8e6951d81b79",1337109464,"Allow objc @() syntax for enum types.","Allow objc @() syntax for enum types.\n\nPreviously we would reject it as illegal using a value of\nenum type and on ObjC++ it was illegal to use an enumerator\nas well.\n\nrdar://11454917\n\nllvm-svn: 156843"},
[j]={{G,640,"ExprResult Sema::BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr) {\n // ...\n  if (const PointerType *PT = ValueType->getAs<PointerType>()) {\n  // ...\n  } else if (ValueType->isBuiltinType()) {\n  // ...\n  } else if (const EnumType *ET = ValueType->getAs<EnumType>()) {\n    if (!ET->getDecl()->isComplete()) {\n      Diag(Loc, diag::err_objc_incomplete_boxed_expression_type) << ValueType << ValueExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjCXX/boxing-illegal-types.mm"]={"clang/test/SemaObjCXX/boxing-illegal-types.mm:57:9: error: incomplete type \'enum ForwE\' used in a boxed expression"}
["clang/test/CXX/over/over.oper/over.literal/p3.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p3.cpp:40:44: error: literal operator cannot have a default argument"}
}
}
},
},
["err_objc_index_incomplete_class_type"]={
["err_literal_operator_extern_c"]={
[c]="err_objc_index_incomplete_class_type",
[b]="err_literal_operator_extern_c",
[d]="Objective-C index expression has incomplete class type %0",
[i]="literal operator must have C++ linkage",
[e]="Objective-C index expression has incomplete class type A",
[j]="literal operator must have C++ linkage",
[f]=k,
[h]=k,
[g]="Objective\\-C index expression has incomplete class type (.*?)",
[c]="literal operator must have C\\+\\+ linkage",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={jb,1331064356,kb,lb},
[g]={"72eebee0cb6a",1330854076,"Add tests for [over.literal]. Fix a few bugs which were exposed by the tests.","Add tests for [over.literal]. Fix a few bugs which were exposed by the tests.\n\nllvm-svn: 151997"},
[j]={{P,1080,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n if (RequireCompleteType(FromE->getExprLoc(), T, diag::err_objc_index_incomplete_class_type, FromE))"}}
[d]={{t,16353,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n // ...\n if (FnDecl->isExternC()) {\n   Diag(FnDecl->getLocation(), diag::err_literal_operator_extern_c);"}},
},
["err_objc_indexing_method_result_type"]={
[c]="err_objc_indexing_method_result_type",
[d]="method for accessing %select{dictionary|array}1 element must have Objective-C object return type instead of %0",
[e]={{nil,nil,{"method for accessing ",{"dictionary","array"}," element must have Objective-C object return type instead of A"}}},
[f]=k,
[g]="method for accessing (?:dictionary|array) element must have Objective\\-C object return type instead of (.*?)",
[h]=a,
[i]=m,
[b]={jb,1331064356,kb,lb},
[j]={{P,1238,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n // ...\n  if (AtIndexGetter) {\n   // ...\n   if (!R->isObjCObjectPointerType()) {\n     S.Diag(RefExpr->getKeyExpr()->getExprLoc(), diag::err_objc_indexing_method_result_type) << R << arrayRef;"}},
[l]={
[l]={
["clang/test/SemaObjC/objc-container-subscripting-3.m"]={"clang/test/SemaObjC/objc-container-subscripting-3.m:16:18: error: method for accessing array element must have Objective-C object return type instead of \'int\'","clang/test/SemaObjC/objc-container-subscripting-3.m:21:15: error: method for accessing dictionary element must have Objective-C object return type instead of \'int\'"}
["clang/test/CXX/over/over.oper/over.literal/p6.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p6.cpp:4:17: error: literal operator must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:9:8: error: literal operator must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:12:10: error: literal operator must have C++ linkage"}
}
}
},
},
["err_objc_kindof_nonobject"]={
["err_literal_operator_id_outside_namespace"]={
[c]="err_objc_kindof_nonobject",
[b]="err_literal_operator_id_outside_namespace",
[d]="\'__kindof\' specifier cannot be applied to non-object type %0",
[i]="non-namespace scope \'%0\' cannot have a literal operator member",
[e]="\'__kindof\' specifier cannot be applied to non-object type A",
[j]="non-namespace scope \'A\' cannot have a literal operator member",
[f]=k,
[h]=k,
[g]="\'__kindof\' specifier cannot be applied to non\\-object type (.*?)",
[c]="non\\-namespace scope \'(.*?)\' cannot have a literal operator member",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"ab209d83be5d",1436241522,"Implement the Objective-C __kindof type qualifier.","Implement the Objective-C __kindof type qualifier.\n\nThe __kindof type qualifier can be applied to Objective-C object\n(pointer) types to indicate id-like behavior, which includes implicit\n\"downcasting\" of __kindof types to subclasses and id-like message-send\nbehavior. __kindof types provide better type bounds for substitutions\ninto unspecified generic types, which preserves more type information.\n\nllvm-svn: 241548"},
[g]={"d091dc179dbd",1386205113,"Reject template-ids containing literal-operator-ids that have a dependent","Reject template-ids containing literal-operator-ids that have a dependent\nnested-name-specifier, rather than crashing. (In fact, reject all\nliteral-operator-ids that have a non-namespace nested-name-specifier). The\ngrammar doesn\'t allow these in some cases, and in other cases does allow them\nbut instantiation will always fail.\n\nllvm-svn: 196443"},
[j]={{cb,7597,"/// Check the application of the Objective-C \'__kindof\' qualifier to\n/// the given type.\nstatic bool checkObjCKindOfType(TypeProcessingState &state, QualType &type, ParsedAttr &attr) {\n  // ...\n  // If not, we can\'t apply __kindof.\n  if (!objType) {\n    // ...\n    S.Diag(attr.getLoc(), diag::err_objc_kindof_nonobject) << type;"}},
[d]={{I,531,"bool Sema::checkLiteralOperatorId(const CXXScopeSpec &SS, const UnqualifiedId &Name, bool IsUDSuffix) {\n  // ...\n  case NestedNameSpecifier::Identifier:\n  case NestedNameSpecifier::TypeSpec:\n  case NestedNameSpecifier::TypeSpecWithTemplate:\n    // ...\n    Diag(Name.getBeginLoc(), diag::err_literal_operator_id_outside_namespace) << SS.getScopeRep();"}},
[l]={
[l]={
["clang/test/SemaObjC/kindof.m"]={"clang/test/SemaObjC/kindof.m:64:9: error: \'__kindof\' specifier cannot be applied to non-object type \'int\'","clang/test/SemaObjC/kindof.m:66:9: error: \'__kindof\' specifier cannot be applied to non-object type \'NSObject_ptr_ptr\' (aka \'NSObject **\')"}
["clang/test/SemaCXX/cxx11-user-defined-literals.cpp"]={"clang/test/SemaCXX/cxx11-user-defined-literals.cpp:153:17: error: non-namespace scope \'T::\' cannot have a literal operator member","clang/test/SemaCXX/cxx11-user-defined-literals.cpp:154:17: error: non-namespace scope \'T::\' cannot have a literal operator member","clang/test/SemaCXX/cxx11-user-defined-literals.cpp:155:8: error: non-namespace scope \'T::\' cannot have a literal operator member","clang/test/SemaCXX/cxx11-user-defined-literals.cpp:156:26: error: non-namespace scope \'T::\' cannot have a literal operator member","clang/test/SemaCXX/cxx11-user-defined-literals.cpp:158:8: error: non-namespace scope \'T::\' cannot have a literal operator member","clang/test/SemaCXX/cxx11-user-defined-literals.cpp:165:8: error: non-namespace scope \'S::\' cannot have a literal operator member"}
}
}
},
},
["err_objc_kindof_wrong_position"]={
["err_literal_operator_invalid_param"]={
[c]="err_objc_kindof_wrong_position",
[b]="err_literal_operator_invalid_param",
[d]="\'__kindof\' type specifier must precede the declarator",
[i]="parameter of literal operator must have type \'unsigned long long\', \'long double\', \'char\', \'wchar_t\', \'char16_t\', \'char32_t\', or \'const char *\'",
[e]="\'__kindof\' type specifier must precede the declarator",
[j]="parameter of literal operator must have type \'unsigned long long\', \'long double\', \'char\', \'wchar_t\', \'char16_t\', \'char32_t\', or \'const char *\'",
[f]=k,
[h]=k,
[g]="\'__kindof\' type specifier must precede the declarator",
[c]="parameter of literal operator must have type \'unsigned long long\', \'long double\', \'char\', \'wchar_t\', \'char16_t\', \'char32_t\', or \'const char \\*\'",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"ab209d83be5d",1436241522,"Implement the Objective-C __kindof type qualifier.","Implement the Objective-C __kindof type qualifier.\n\nThe __kindof type qualifier can be applied to Objective-C object\n(pointer) types to indicate id-like behavior, which includes implicit\n\"downcasting\" of __kindof types to subclasses and id-like message-send\nbehavior. __kindof types provide better type bounds for substitutions\ninto unspecified generic types, which preserves more type information.\n\nllvm-svn: 241548"},
[g]={cc,1455667444,gc,kc},
[j]={{cb,8729,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  // ...\n  for (ParsedAttr &attr : AttrsCopy) {\n    // ...\n    case ParsedAttr::AT_ObjCKindOf:\n     // ...\n     case TAL_DeclChunk:\n      case TAL_DeclName:\n        state.getSema().Diag(attr.getLoc(), diag::err_objc_kindof_wrong_position) << FixItHint::CreateRemoval(attr.getLoc()) << FixItHint::CreateInsertion(state.getDeclarator().getDeclSpec().getBeginLoc(), \"__kindof \");"}},
[d]={{t,16421,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n // ...\n // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n    // ...\n    // Only unsigned long long int, long double, any character type, and const\n   // char * are allowed as the only parameters.\n   if (ParamType->isSpecificBuiltinType(BuiltinType::ULongLong) || ParamType->isSpecificBuiltinType(BuiltinType::LongDouble) || Context.hasSameType(ParamType, Context.CharTy) || Context.hasSameType(ParamType, Context.WideCharTy) || Context.hasSameType(ParamType, Context.Char8Ty) || Context.hasSameType(ParamType, Context.Char16Ty) || Context.hasSameType(ParamType, Context.Char32Ty)) {\n    } else if (const PointerType *Ptr = ParamType->getAs<PointerType>()) {\n    // ...\n    } else if (ParamType->isRealFloatingType()) {\n    // ...\n    } else if (ParamType->isIntegerType()) {\n    // ...\n    } else {\n      Diag(Param->getSourceRange().getBegin(), diag::err_literal_operator_invalid_param) << ParamType << Param->getSourceRange();"}}
[l]={
["clang/test/SemaObjC/kindof.m"]={"clang/test/SemaObjC/kindof.m:69:20: error: \'__kindof\' type specifier must precede the declarator"}
}
},
},
["err_objc_literal_method_sig"]={
["err_literal_operator_outside_namespace"]={
[c]="err_objc_literal_method_sig",
[b]="err_literal_operator_outside_namespace",
[d]="literal construction method %0 has incompatible signature",
[i]="literal operator %0 must be in a namespace or global scope",
[e]="literal construction method A has incompatible signature",
[j]="literal operator A must be in a namespace or global scope",
[f]=k,
[h]=k,
[g]="literal construction method (.*?) has incompatible signature",
[c]="literal operator (.*?) must be in a namespace or global scope",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={jb,1331064356,kb,lb},
[g]={"c88db06565fc",1263373262,"Implement semantic checking for C++ literal operators.","Implement semantic checking for C++ literal operators.\nThis now rejects literal operators that don\'t meet the requirements.\nTemplates are not yet checked for.\n\nllvm-svn: 93315"},
[j]={{G,161,"/// 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  // ...\n  if (!ReturnType->isObjCObjectPointerType()) {\n    S.Diag(Loc, diag::err_objc_literal_method_sig) << Sel;"},{G,849,"ExprResult Sema::BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements) {\n  // ...\n if (!ArrayWithObjectsMethod) {\n    // ...\n    if (!PtrT || !Context.hasSameUnqualifiedType(PtrT->getPointeeType(), IdT)) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{G,860,"ExprResult Sema::BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements) {\n  // ...\n if (!ArrayWithObjectsMethod) {\n    // ...\n    // Check that the \'count\' parameter is integral.\n    if (!Method->parameters()[1]->getType()->isIntegerType()) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{G,1020,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n // ...\n  if (!DictionaryWithObjectsMethod) {\n    // ...\n    if (!PtrValue || !Context.hasSameUnqualifiedType(PtrValue->getPointeeType(), IdT)) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{G,1054,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  // ...\n  if (!DictionaryWithObjectsMethod) {\n    // ...\n    if (!PtrKey || !Context.hasSameUnqualifiedType(PtrKey->getPointeeType(), IdT)) {\n     // ...\n      if (err) {\n        Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{G,1067,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  // ...\n  if (!DictionaryWithObjectsMethod) {\n    // ...\n    if (!CountType->isIntegerType()) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"}},
[d]={{t,16347,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  if (isa<CXXMethodDecl>(FnDecl)) {\n   Diag(FnDecl->getLocation(), diag::err_literal_operator_outside_namespace) << FnDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/SemaObjC/objc-literal-sig.m"]={"clang/test/SemaObjC/objc-literal-sig.m:45:9: error: literal construction method \'numberWithBool:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:46:9: error: literal construction method \'numberWithBool:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:47:14: error: literal construction method \'arrayWithObjects:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:48:15: error: literal construction method \'arrayWithObjects:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:49:13: error: literal construction method \'dictionaryWithObjects:forKeys:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:50:14: error: literal construction method \'dictionaryWithObjects:forKeys:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:51:12: error: literal construction method \'stringWithUTF8String:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:52:13: error: literal construction method \'stringWithUTF8String:\' has incompatible signature"}
["clang/test/CXX/over/over.oper/over.literal/p2.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p2.cpp:14:8: error: literal operator \'operator\"\"_c\' must be in a namespace or global scope","clang/test/CXX/over/over.oper/over.literal/p2.cpp:16:15: error: literal operator \'operator\"\"_c\' must be in a namespace or global scope","clang/test/CXX/over/over.oper/over.literal/p2.cpp:40:10: error: literal operator \'operator\"\"_x\' must be in a namespace or global scope"}
}
}
},
},
["err_objc_method_unsupported_param_ret_type"]={
["err_literal_operator_param"]={
[c]={{nil,r,"err_objc_method_unsupported_param_ret_type"}},
[b]="err_literal_operator_param",
[d]={{nil,r,"%0 %select{parameter|return}1 type is unsupported; support for vector types for this target is introduced in %2"}},
[i]="invalid literal operator parameter type %0, did you mean %1?",
[e]={{nil,r,{"A ",{"parameter","return"}," type is unsupported; support for vector types for this target is introduced in C"}}},
[j]="invalid literal operator parameter type A, did you mean B?",
[f]=k,
[h]=k,
[g]="(.*?) (?:parameter|return) type is unsupported; support for vector types for this target is introduced in (.*?)",
[c]="invalid literal operator parameter type (.*?), did you mean (.*?)\\?",
[h]=a,
[f]=a,
[i]={{nil,r,m}},
[e]=m,
[b]={"a8a372d85e09",1493289828,"[ObjC] Disallow vector parameters and return values in Objective-C methods","[ObjC] Disallow vector parameters and return values in Objective-C methods\nfor iOS < 9 and OS X < 10.11 X86 targets\n\nThis commit adds a new error that disallows methods that have parameters/return\nvalues with a vector type for some older X86 targets. This diagnostic is\nneeded because objc_msgSend doesn\'t support SIMD vector registers/return values\non X86 in iOS < 9 and OS X < 10.11. Note that we don\'t necessarily know if the\nvector argument/return value will use a SIMD register, so instead we chose to\nbe conservative and prohibit all vector types.\n\nrdar://21662309\n\nDifferential Revision: https://reviews.llvm.org/D28670\n\nllvm-svn: 301532"},
[g]={cc,1455667444,gc,kc},
[j]={{T,4660,"/// Verify that the method parameters/return value have types that are supported\n/// by the x86 target.\nstatic void checkObjCMethodX86VectorTypes(Sema &SemaRef, const ObjCMethodDecl *Method) {\n  // ...\n  SemaRef.Diag(Loc, diag::err_objc_method_unsupported_param_ret_type) << T << (Method->getReturnType()->isVectorType() ? /*return value*/ 1 : /*parameter*/ 0) << (Triple.isMacOSX() ? \"macOS 10.11\" : \"iOS 9\");"}},
[d]={{t,16404,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n    // ...\n    // Only unsigned long long int, long double, any character type, and const\n    // char * are allowed as the only parameters.\n    if (ParamType->isSpecificBuiltinType(BuiltinType::ULongLong) || ParamType->isSpecificBuiltinType(BuiltinType::LongDouble) || Context.hasSameType(ParamType, Context.CharTy) || Context.hasSameType(ParamType, Context.WideCharTy) || Context.hasSameType(ParamType, Context.Char8Ty) || Context.hasSameType(ParamType, Context.Char16Ty) || Context.hasSameType(ParamType, Context.Char32Ty)) {\n    } else if (const PointerType *Ptr = ParamType->getAs<PointerType>()) {\n      // ...\n      // Pointer parameter must be a const char *.\n      if (!(Context.hasSameType(InnerType.getUnqualifiedType(), Context.CharTy) && InnerType.isConstQualified() && !InnerType.isVolatileQualified())) {\n        Diag(Param->getSourceRange().getBegin(), diag::err_literal_operator_param) << ParamType << \"\'const char *\'\" << Param->getSourceRange();"},{t,16410,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n    // ...\n    // Only unsigned long long int, long double, any character type, and const\n    // char * are allowed as the only parameters.\n    if (ParamType->isSpecificBuiltinType(BuiltinType::ULongLong) || ParamType->isSpecificBuiltinType(BuiltinType::LongDouble) || Context.hasSameType(ParamType, Context.CharTy) || Context.hasSameType(ParamType, Context.WideCharTy) || Context.hasSameType(ParamType, Context.Char8Ty) || Context.hasSameType(ParamType, Context.Char16Ty) || Context.hasSameType(ParamType, Context.Char32Ty)) {\n    } else if (const PointerType *Ptr = ParamType->getAs<PointerType>()) {\n    // ...\n    } else if (ParamType->isRealFloatingType()) {\n      Diag(Param->getSourceRange().getBegin(), diag::err_literal_operator_param) << ParamType << Context.LongDoubleTy << Param->getSourceRange();"},{t,16415,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n } else if (FnDecl->param_size() == 1) {\n    // ...\n    // Only unsigned long long int, long double, any character type, and const\n   // char * are allowed as the only parameters.\n    if (ParamType->isSpecificBuiltinType(BuiltinType::ULongLong) || ParamType->isSpecificBuiltinType(BuiltinType::LongDouble) || Context.hasSameType(ParamType, Context.CharTy) || Context.hasSameType(ParamType, Context.WideCharTy) || Context.hasSameType(ParamType, Context.Char8Ty) || Context.hasSameType(ParamType, Context.Char16Ty) || Context.hasSameType(ParamType, Context.Char32Ty)) {\n    } else if (const PointerType *Ptr = ParamType->getAs<PointerType>()) {\n    // ...\n    } else if (ParamType->isRealFloatingType()) {\n    // ...\n   } else if (ParamType->isIntegerType()) {\n      Diag(Param->getSourceRange().getBegin(), diag::err_literal_operator_param) << ParamType << Context.UnsignedLongLongTy << Param->getSourceRange();"},{t,16439,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n  // ...\n  } else if (FnDecl->param_size() == 2) {\n    // ...\n    if (!PT) {\n      Diag((*Param)->getSourceRange().getBegin(), diag::err_literal_operator_param) << FirstParamType << \"\'const char *\'\" << (*Param)->getSourceRange();"},{t,16448,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n  // ...\n  } else if (FnDecl->param_size() == 2) {\n    // ...\n    // First parameter must be const\n    if (!PointeeType.isConstQualified() || PointeeType.isVolatileQualified()) {\n      Diag((*Param)->getSourceRange().getBegin(), diag::err_literal_operator_param) << FirstParamType << \"\'const char *\'\" << (*Param)->getSourceRange();"},{t,16463,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n  // ...\n  } else if (FnDecl->param_size() == 2) {\n    // ...\n    // Only const char *, const wchar_t*, const char8_t*, const char16_t*, and\n    // const char32_t* are allowed as the first parameter to a two-parameter\n    // function\n    if (!(Context.hasSameType(InnerType, Context.CharTy) || Context.hasSameType(InnerType, Context.WideCharTy) || Context.hasSameType(InnerType, Context.Char8Ty) || Context.hasSameType(InnerType, Context.Char16Ty) || Context.hasSameType(InnerType, Context.Char32Ty))) {\n      Diag((*Param)->getSourceRange().getBegin(), diag::err_literal_operator_param) << FirstParamType << \"\'const char *\'\" << (*Param)->getSourceRange();"},{t,16475,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n  // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n  //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n  // ...\n  } else if (FnDecl->param_size() == 1) {\n  // ...\n  } else if (FnDecl->param_size() == 2) {\n    // ...\n    if (!Context.hasSameType(SecondParamType, Context.getSizeType())) {\n      Diag((*Param)->getSourceRange().getBegin(), diag::err_literal_operator_param) << SecondParamType << Context.getSizeType() << (*Param)->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/x86-method-vector-values.m"]={"clang/test/SemaObjC/x86-method-vector-values.m:40:20: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:48:3: error: \'float3\' (vector of 3 \'float\' values) return type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:51:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:54:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:57:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:60:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:63:4: error: \'__m128\' (vector of 4 \'float\' values) return type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:66:19: error: \'__m128\' (vector of 4 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9"}
["clang/test/CXX/over/over.oper/over.literal/p8.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p8.cpp:14:27: error: invalid literal operator parameter type \'double\', did you mean \'long double\'?"}
}
}
},
},
["err_objc_missing_end"]={
["err_literal_operator_string_not_empty"]={
[c]="err_objc_missing_end",
[b]="err_literal_operator_string_not_empty",
[d]="missing \'@end\'",
[i]="string literal after \'operator\' must be \'\"\"\'",
[e]="missing \'@end\'",
[j]="string literal after \'operator\' must be \'\"\"\'",
[f]=k,
[h]=k,
[g]="missing \'@end\'",
[c]="string literal after \'operator\' must be \'\"\"\'",
[h]=a,
[f]=a,
[i]=y,
[e]=C,
[b]={J,1236199783,H,I},
[g]={"d67aea28f6cb",1331004107,"User-defined literals: reject string and character UDLs in all places where the","User-defined literals: reject string and character UDLs in all places where the\ngrammar requires a string-literal and not a user-defined-string-literal. The\ntwo constructs are still represented by the same TokenKind, in order to prevent\na combinatorial explosion of different kinds of token. A flag on Token tracks\nwhether a ud-suffix is present, in order to prevent clients from needing to look\nat the token\'s spelling.\n\nllvm-svn: 152098"},
[j]={{N,201,"void Parser::CheckNestedObjCContexts(SourceLocation AtLoc) {\n  // ...\n  Diag(AtLoc, diag::err_objc_missing_end) << FixItHint::CreateInsertion(AtLoc, \"@end\\n\");"},{N,745,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    case tok::objc_implementation:\n    case tok::objc_interface:\n      Diag(AtLoc, diag::err_objc_missing_end) << FixItHint::CreateInsertion(AtLoc, \"@end\\n\");"},{N,829,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///   objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  // We break out of the big loop in two cases: when we see @end or when we see\n  // EOF. In the former case, eat the @end. In the later case, emit an error.\n  if (Tok.is(tok::code_completion)) {\n // ...\n } else if (Tok.isObjCAtKeyword(tok::objc_end)) {\n  // ...\n  } else {\n    Diag(Tok, diag::err_objc_missing_end) << FixItHint::CreateInsertion(Tok.getLocation(), \"\\n@end\\n\");"},{N,2307,"Parser::ObjCImplParsingDataRAII::~ObjCImplParsingDataRAII() {\n  if (!Finished) {\n   // ...\n    if (P.isEofOrEom()) {\n      P.Diag(P.Tok, diag::err_objc_missing_end) << FixItHint::CreateInsertion(P.Tok.getLocation(), \"\\n@end\\n\");"}},
[d]={{db,2778,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  if (getLangOpts().CPlusPlus11 && isTokenStringLiteral()) {\n   // ...\n   // The string literal must be empty.\n    if (!Literal.GetString().empty() || Literal.Pascal) {\n     // ...\n      DiagId = diag::err_literal_operator_string_not_empty;"}},
[l]={
[l]={
["clang/test/SemaObjC/missing-atend-metadata.m"]={"clang/test/SemaObjC/missing-atend-metadata.m:9:1: error: missing \'@end\'","clang/test/SemaObjC/missing-atend-metadata.m:15:1: error: missing \'@end\'","clang/test/SemaObjC/missing-atend-metadata.m:22:1: error: missing \'@end\'","clang/test/SemaObjC/missing-atend-metadata.m:22:110: error: missing \'@end\'"}
["clang/test/Parser/cxx0x-literal-operators.cpp"]={"clang/test/Parser/cxx0x-literal-operators.cpp:4:15: error: string literal after \'operator\' must be \'\"\"\'"}
}
}
},
},
["err_objc_multiple_subscript_type_conversion"]={
["err_literal_operator_string_prefix"]={
[c]="err_objc_multiple_subscript_type_conversion",
[b]="err_literal_operator_string_prefix",
[d]="indexing expression is invalid because subscript type %0 has multiple type conversion functions",
[i]="string literal after \'operator\' cannot have an encoding prefix",
[e]="indexing expression is invalid because subscript type A has multiple type conversion functions",
[j]="string literal after \'operator\' cannot have an encoding prefix",
[f]=k,
[h]=k,
[g]="indexing expression is invalid because subscript type (.*?) has multiple type conversion functions",
[c]="string literal after \'operator\' cannot have an encoding prefix",
[h]=a,
[f]=a,
[i]=m,
[e]=C,
[b]={jb,1331064356,kb,lb},
[g]={"7d182a790988",1331247962,"Fix a couple of issues with literal-operator-id parsing, and provide recovery","Fix a couple of issues with literal-operator-id parsing, and provide recovery\nfor a few kinds of error. Specifically:\n\nSince we\'re after translation phase 6, the \"\" token might be formed by multiple\nsource-level string literals. Checking the token width is not a correct way of\ndetecting empty string literals, due to escaped newlines. Diagnose and recover\nfrom a missing space between \"\" and suffix, and from string literals other than\n\"\", which are followed by a suffix.\n\nllvm-svn: 152348"},
[j]={{P,1113,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n // ...\n Diag(FromE->getExprLoc(), diag::err_objc_multiple_subscript_type_conversion) << FromE->getType();"}},
[d]={{db,2741,"#include \"clang/Basic/OperatorKinds.def\"\n // ...\n  if (getLangOpts().CPlusPlus11 && isTokenStringLiteral()) {\n   // ...\n   while (isTokenStringLiteral()) {\n      if (!Tok.is(tok::string_literal) && !DiagId) {\n        // ...\n        DiagId = diag::err_literal_operator_string_prefix;"}},
[l]={
[l]={
["clang/test/SemaObjCXX/objc-container-subscripting.mm"]={"clang/test/SemaObjCXX/objc-container-subscripting.mm:136:16: error: indexing expression is invalid because subscript type \'WeirdIndex\' has multiple type conversion functions"}
["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:109:15: error: string literal after \'operator\' cannot have an encoding prefix","clang/test/Parser/cxx11-user-defined-literals.cpp:111:1: error: string literal after \'operator\' cannot have an encoding prefix"}
}
}
},
},
["err_objc_non_runtime_protocol_in_protocol_expr"]={
["err_literal_operator_template"]={
[c]={{nil,D,"err_objc_non_runtime_protocol_in_protocol_expr"}},
[b]="err_literal_operator_template",
[d]={{nil,D,"cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression"}},
[i]="template parameter list for literal operator must be either \'char...\' or \'typename T, T...\'",
[e]={{nil,D,"cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression"}},
[j]="template parameter list for literal operator must be either \'char...\' or \'typename T, T...\'",
[f]=k,
[h]=k,
[g]="cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression",
[c]="template parameter list for literal operator must be either \'char\\.\\.\\.\' or \'typename T, T\\.\\.\\.\'",
[h]=a,
[f]=a,
[i]={{nil,D,m}},
[e]=m,
[b]={tc,1582847864,uc,vc},
[g]={cc,1455667444,gc,kc},
[j]={{G,1397,"ExprResult Sema::ParseObjCProtocolExpression(IdentifierInfo *ProtocolId, SourceLocation AtLoc, SourceLocation ProtoLoc, SourceLocation LParenLoc, SourceLocation ProtoIdLoc, SourceLocation RParenLoc) {\n  // ...\n  if (PDecl->isNonRuntimeProtocol())\n    Diag(ProtoLoc, diag::err_objc_non_runtime_protocol_in_protocol_expr) << PDecl;"}}
[d]={{t,16337,"static bool checkLiteralOperatorTemplateParameterList(Sema &SemaRef, FunctionTemplateDecl *TpDecl) {\n  // ...\n  SemaRef.Diag(TpDecl->getTemplateParameters()->getSourceRange().getBegin(), diag::err_literal_operator_template) << TpDecl->getTemplateParameters()->getSourceRange();"}},
},
["err_objc_non_trivially_copyable_boxed_expression_type"]={
[c]="err_objc_non_trivially_copyable_boxed_expression_type",
[d]="non-trivially copyable type %0 cannot be used in a boxed expression",
[e]="non-trivially copyable type A cannot be used in a boxed expression",
[f]=k,
[g]="non\\-trivially copyable type (.*?) cannot be used in a boxed expression",
[h]=a,
[i]=m,
[b]={"fde64956f95c",1435296516,"[ObjC] Add NSValue support for objc_boxed_expressions","[ObjC] Add NSValue support for objc_boxed_expressions\n\nPatch extends ObjCBoxedExpr to accept records (structs and unions):\n\ntypedef struct __attribute__((objc_boxable)) _Color {\n  int r, g, b;\n} Color;\n\nColor color;\nNSValue *boxedColor = @(color); // [NSValue valueWithBytes:&color objCType:@encode(Color)];\n\nllvm-svn: 240761"},
[j]={{G,722,"ExprResult Sema::BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr) {\n  // ...\n  if (const PointerType *PT = ValueType->getAs<PointerType>()) {\n  // ...\n  } else if (ValueType->isBuiltinType()) {\n  // ...\n  } else if (const EnumType *ET = ValueType->getAs<EnumType>()) {\n  // ...\n  } else if (ValueType->isObjCBoxableRecordType()) {\n    // ...\n    if (!ValueType.isTriviallyCopyableType(Context)) {\n      Diag(Loc, diag::err_objc_non_trivially_copyable_boxed_expression_type) << ValueType << ValueExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm"]={"clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm:87:15: error: non-trivially copyable type \'NonTriviallyCopyable\' cannot be used in a boxed expression","clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm:112:68: error: non-trivially copyable type \'NonTriviallyCopyable\' cannot be used in a boxed expression","clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm:105:45: error: non-trivially copyable type \'NonTriviallyCopyable\' cannot be used in a boxed expression"}
["clang/test/CXX/over/over.oper/over.literal/p5.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p5.cpp:18:1: error: template parameter list for literal operator must be either \'char...\' or \'typename T, T...\'","clang/test/CXX/over/over.oper/over.literal/p5.cpp:20:1: error: template parameter list for literal operator must be either \'char...\' or \'typename T, T...\'"}
}
}
},
},
["err_objc_ns_bridged_invalid_cfobject"]={
["err_literal_operator_template_with_params"]={
[c]="err_objc_ns_bridged_invalid_cfobject",
[b]="err_literal_operator_template_with_params",
[d]="ObjectiveC object of type %0 is bridged to %1, which is not valid CF object",
[i]="literal operator template cannot have any parameters",
[e]="ObjectiveC object of type A is bridged to B, which is not valid CF object",
[j]="literal operator template cannot have any parameters",
[f]=k,
[h]=k,
[g]="ObjectiveC object of type (.*?) is bridged to (.*?), which is not valid CF object",
[c]="literal operator template cannot have any parameters",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"8a0210e535c5",1384629392,"ObjectiveC ARC. Validate toll free bridge casting","ObjectiveC ARC. Validate toll free bridge casting\nof ObjectiveC objects to CF types when CF type\nhas the objc_bridge attribute.\n\nllvm-svn: 194930"},
[g]={cc,1455667444,gc,kc},
[j]={{G,4121,"template <typename TB> static bool CheckObjCBridgeCFCast(Sema &S, QualType castType, Expr *castExpr, bool &HadTheAttribute, bool warn) {\n  // ...\n  while (const auto *TD = T->getAs<TypedefType>()) {\n    // ...\n    if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {\n      if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {\n       // ...\n        S.Diag(castExpr->getBeginLoc(), diag::err_objc_ns_bridged_invalid_cfobject) << castExpr->getType() << castType;"}}
[d]={{t,16375,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // template <char...> type operator \"\" name() and\n // template <class T, T...> type operator \"\" name() are the only valid\n  // template signatures, and the only valid signatures with no parameters.\n //\n  // C++20 also allows template <SomeClass T> type operator \"\" name().\n  if (TpDecl) {\n    if (FnDecl->param_size() != 0) {\n      Diag(FnDecl->getLocation(), diag::err_literal_operator_template_with_params);"}},
},
["err_objc_object_assignment"]={
[c]="err_objc_object_assignment",
[d]="cannot assign to class object (%0 invalid)",
[e]="cannot assign to class object (A invalid)",
[f]=k,
[g]="cannot assign to class object \\((.*?) invalid\\)",
[h]=a,
[i]=m,
[b]={"3c4225a8581f",1327428345,"objc: issue error if assigning objects in fragile-abi too.","objc: issue error if assigning objects in fragile-abi too.\n// rdar://10731065\n\nllvm-svn: 148823"},
[j]={{W,14499,"// C99 6.5.16.1\nQualType Sema::CheckAssignmentOperands(Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType, BinaryOperatorKind Opc) {\n  // ...\n  if (CompoundType.isNull()) {\n    // ...\n    if (ConvTy == Compatible && LHSType->isObjCObjectType())\n      Diag(Loc, diag::err_objc_object_assignment) << LHSType;"}},
[l]={
[l]={
["clang/test/SemaObjCXX/fragile-abi-object-assign.m"]={"clang/test/SemaObjCXX/fragile-abi-object-assign.m:10:23: error: cannot assign to class object (\'MyView\' invalid)"}
["clang/test/CXX/over/over.oper/over.literal/p8.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p8.cpp:15:23: error: literal operator template cannot have any parameters"}
}
}
},
},
["err_objc_object_catch"]={
["err_loader_uninitialized_cant_init"]={
[c]="err_objc_object_catch",
[b]={{nil,o,"err_loader_uninitialized_cant_init"}},
[d]="cannot catch an Objective-C object by value",
[i]={{nil,o,"variable with \'loader_uninitialized\' attribute cannot have an initializer"}},
[e]="cannot catch an Objective-C object by value",
[j]={{nil,o,"variable with \'loader_uninitialized\' attribute cannot have an initializer"}},
[f]=k,
[h]=k,
[g]="cannot catch an Objective\\-C object by value",
[c]="variable with \'loader_uninitialized\' attribute cannot have an initializer",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,o,m}},
[b]={"2ca705eb134f",1279931843,"Support catching Objective C pointers in C++ under the non-fragile NeXT runtime.","Support catching Objective C pointers in C++ under the non-fragile NeXT runtime.\nDiagnose attempts to do this under the GNU or fragile NeXT runtimes.\n\nllvm-svn: 109298"},
[g]={hb,1576908663,ib,fb},
[j]={{Q,16673,"/// 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  // Only the non-fragile NeXT runtime currently supports C++ catches\n  // of ObjC types, and no runtime supports catching ObjC types by value.\n  if (!Invalid && getLangOpts().ObjC) {\n    // ...\n    if (T->isObjCObjectType()) {\n      Diag(Loc, diag::err_objc_object_catch);"}},
[d]={{p,13276,"/// 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  // The LoaderUninitialized attribute acts as a definition (of undef).\n  if (VDecl->hasAttr<LoaderUninitializedAttr>()) {\n    Diag(VDecl->getLocation(), diag::err_loader_uninitialized_cant_init);"}},
[l]={
[l]={
["clang/test/SemaObjCXX/exceptions.mm"]={"clang/test/SemaObjCXX/exceptions.mm:8:26: error: cannot catch an Objective-C object by value"}
["clang/test/Sema/attr-loader-uninitialized.c"]={"clang/test/Sema/attr-loader-uninitialized.c:20:5: error: variable with \'loader_uninitialized\' attribute cannot have an initializer","clang/test/Sema/attr-loader-uninitialized.c:37:24: error: variable with \'loader_uninitialized\' attribute cannot have an initializer"}
}
}
},
},
["err_objc_override_direct_method"]={
["err_loader_uninitialized_extern_decl"]={
[c]={{nil,n,"err_objc_override_direct_method"}},
[b]={{nil,o,"err_loader_uninitialized_extern_decl"}},
[d]={{nil,n,"cannot override a method that is declared direct by a superclass"}},
[i]={{nil,o,"variable %0 cannot be declared both \'extern\' and with the \'loader_uninitialized\' attribute"}},
[e]={{nil,n,"cannot override a method that is declared direct by a superclass"}},
[j]={{nil,o,"variable A cannot be declared both \'extern\' and with the \'loader_uninitialized\' attribute"}},
[f]=k,
[h]=k,
[g]="cannot override a method that is declared direct by a superclass",
[c]="variable (.*?) cannot be declared both \'extern\' and with the \'loader_uninitialized\' attribute",
[h]=a,
[f]=a,
[i]={{nil,n,m}},
[e]={{nil,o,m}},
[b]={rb,1573050950,xb,ub},
[g]={hb,1576908663,ib,fb},
[j]={{T,4429,"void Sema::CheckObjCMethodDirectOverrides(ObjCMethodDecl *method, ObjCMethodDecl *overridden) {\n  if (overridden->isDirectMethod()) {\n    // ...\n    Diag(method->getLocation(), diag::err_objc_override_direct_method);"}},
[d]={{p,13722,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    if (!Var->isInvalidDecl() && RealDecl->hasAttr<LoaderUninitializedAttr>()) {\n      if (Var->getStorageClass() == SC_Extern) {\n        Diag(Var->getLocation(), diag::err_loader_uninitialized_extern_decl) << Var;"}},
[l]={
[l]={
["clang/test/SemaObjC/method-direct-properties.m"]={"clang/test/SemaObjC/method-direct-properties.m:64:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:65:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:66:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:67:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:69:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:71:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:72:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:73:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:74:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:77:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:79:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:120:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:123:1: error: cannot override a method that is declared direct by a superclass"}
["clang/test/Sema/attr-loader-uninitialized.c"]={"clang/test/Sema/attr-loader-uninitialized.c:10:12: error: variable \'external_rejected\' cannot be declared both \'extern\' and with the \'loader_uninitialized\' attribute","clang/test/Sema/attr-loader-uninitialized.c:14:17: error: variable \'incomplete_external_rejected\' cannot be declared both \'extern\' and with the \'loader_uninitialized\' attribute","clang/test/Sema/attr-loader-uninitialized.c:40:50: error: variable \'extern_hidden\' cannot be declared both \'extern\' and with the \'loader_uninitialized\' attribute"}
}
}
},
},
["err_objc_parameterized_category_nonclass"]={
["err_loader_uninitialized_redeclaration"]={
[c]="err_objc_parameterized_category_nonclass",
[b]={{nil,o,"err_loader_uninitialized_redeclaration"}},
[d]="%select{extension|category}0 of non-parameterized class %1 cannot have type parameters",
[i]={{nil,o,"redeclaration cannot add \'loader_uninitialized\' attribute"}},
[e]={{nil,nil,{{"extension","category"}," of non-parameterized class B cannot have type parameters"}}},
[j]={{nil,o,"redeclaration cannot add \'loader_uninitialized\' attribute"}},
[f]=k,
[h]=k,
[g]="(?:extension|category) of non\\-parameterized class (.*?) cannot have type parameters",
[c]="redeclaration cannot add \'loader_uninitialized\' attribute",
[h]=a,
[f]=a,
[i]=sc,
[e]={{nil,o,m}},
[b]={rc,1436241435,qc,xc},
[g]={hb,1576908663,ib,fb},
[j]={{T,1877,"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 we have a type parameter list, check it.\n if (typeParamList) {\n    if (auto prevTypeParamList = IDecl->getTypeParamList()) {\n    // ...\n    } else {\n      Diag(typeParamList->getLAngleLoc(), diag::err_objc_parameterized_category_nonclass) << (CategoryName != nullptr) << ClassName << typeParamList->getSourceRange();"}},
[d]={{p,3099,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  // ...\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    // ...\n    if (isa<C11NoReturnAttr>(NewAttribute)) {\n    // ...\n   } else if (isa<UuidAttr>(NewAttribute)) {\n    // ...\n    } else if (const AlignedAttr *AA = dyn_cast<AlignedAttr>(NewAttribute)) {\n    // ...\n    } else if (isa<LoaderUninitializedAttr>(NewAttribute)) {\n      // If there is a C definition followed by a redeclaration with this\n      // attribute then there are two different definitions. In C++, prefer the\n      // standard diagnostics.\n      if (!S.getLangOpts().CPlusPlus) {\n        S.Diag(NewAttribute->getLocation(), diag::err_loader_uninitialized_redeclaration);"}},
[l]={
[l]={
[oc]={"clang/test/SemaObjC/parameterized_classes.m:156:20: error: category of non-parameterized class \'NSObject\' cannot have type parameters","clang/test/SemaObjC/parameterized_classes.m:159:20: error: extension of non-parameterized class \'NSObject\' cannot have type parameters"}
["clang/test/Sema/attr-loader-uninitialized.c"]={"clang/test/Sema/attr-loader-uninitialized.c:27:52: error: redeclaration cannot add \'loader_uninitialized\' attribute"}
}
}
},
},
["err_objc_parameterized_forward_class"]={
["err_loader_uninitialized_trivial_ctor"]={
[c]="err_objc_parameterized_forward_class",
[b]={{nil,o,"err_loader_uninitialized_trivial_ctor"}},
[d]="forward declaration of non-parameterized class %0 cannot have type parameters",
[i]={{nil,o,"variable with \'loader_uninitialized\' attribute must have a trivial default constructor"}},
[e]="forward declaration of non-parameterized class A cannot have type parameters",
[j]={{nil,o,"variable with \'loader_uninitialized\' attribute must have a trivial default constructor"}},
[f]=k,
[h]=k,
[g]="forward declaration of non\\-parameterized class (.*?) cannot have type parameters",
[c]="variable with \'loader_uninitialized\' attribute must have a trivial default constructor",
[h]=a,
[f]=a,
[i]=sc,
[e]={{nil,o,m}},
[b]={rc,1436241435,qc,xc},
[g]={hb,1576908663,ib,fb},
[j]={{T,3132,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  // ...\n  for (unsigned i = 0; i != NumElts; ++i) {\n    // ...\n    if (PrevIDecl && TypeParams) {\n      if (ObjCTypeParamList *PrevTypeParams = PrevIDecl->getTypeParamList()) {\n      // ...\n      } else if (ObjCInterfaceDecl *Def = PrevIDecl->getDefinition()) {\n        // ...\n       Diag(IdentLocs[i], diag::err_objc_parameterized_forward_class) << ClassName << TypeParams->getSourceRange();"}},
[d]={{p,13734,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    if (!Var->isInvalidDecl() && RealDecl->hasAttr<LoaderUninitializedAttr>()) {\n      // ...\n      if (CXXRecordDecl *RD = Var->getType()->getAsCXXRecordDecl()) {\n        if (!RD->hasTrivialDefaultConstructor()) {\n         Diag(Var->getLocation(), diag::err_loader_uninitialized_trivial_ctor);"}},
[l]={
[l]={
[oc]={"clang/test/SemaObjC/parameterized_classes.m:106:8: error: forward declaration of non-parameterized class \'NSObject\' cannot have type parameters"}
["clang/test/Sema/attr-loader-uninitialized.cpp"]={"clang/test/Sema/attr-loader-uninitialized.cpp:62:12: error: variable with \'loader_uninitialized\' attribute must have a trivial default constructor"}
}
}
},
},
["err_objc_parameterized_forward_class_first"]={
["err_local_cant_init"]={
[c]="err_objc_parameterized_forward_class_first",
[b]="err_local_cant_init",
[d]="class %0 previously declared with type parameters",
[i]="\'__local\' variable cannot have an initializer",
[e]="class A previously declared with type parameters",
[j]="\'__local\' variable cannot have an initializer",
[f]=k,
[h]=k,
[g]="class (.*?) previously declared with type parameters",
[c]="\'__local\' variable cannot have an initializer",
[h]=a,
[f]=a,
[i]=sc,
[e]=m,
[b]={rc,1436241435,qc,xc},
[g]={"2dbb708b8ade",1316466875,"OpenCL: introduce support for function scope __local variables","OpenCL: introduce support for function scope __local variables\n\nllvm-svn: 140068"},
[j]={{T,1026,"ObjCInterfaceDecl *Sema::ActOnStartClassInterface(Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  // ...\n  // If there was a forward declaration with type parameters, check\n  // for consistency.\n  if (PrevIDecl) {\n    if (ObjCTypeParamList *prevTypeParamList = PrevIDecl->getTypeParamList()) {\n      if (typeParamList) {\n     // ...\n      } else {\n        Diag(ClassLoc, diag::err_objc_parameterized_forward_class_first) << ClassName;"}},
[d]={{p,13269,"/// 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  // OpenCL 1.1 6.5.2: \"Variables allocated in the __local address space inside\n  // a kernel function cannot be initialized.\"\n  if (VDecl->getType().getAddressSpace() == LangAS::opencl_local) {\n   Diag(VDecl->getLocation(), diag::err_local_cant_init);"}},
[l]={
[l]={
[oc]={"clang/test/SemaObjC/parameterized_classes.m:112:12: error: class \'NSNumber\' previously declared with type parameters"}
["clang/test/SemaOpenCL/atomic-init.cl"]={"clang/test/SemaOpenCL/atomic-init.cl:9:20: error: \'__local\' variable cannot have an initializer"}
}
}
},
},
["err_objc_parameterized_implementation"]={
["err_loongarch_builtin_requires_la32"]={
[c]="err_objc_parameterized_implementation",
[b]={{nil,n,"err_loongarch_builtin_requires_la32"}},
[d]="@implementation cannot have type parameters",
[i]={{nil,n,"this builtin requires target: loongarch32"}},
[e]="@implementation cannot have type parameters",
[j]={{nil,n,"this builtin requires target: loongarch32"}},
[f]=k,
[h]=k,
[g]="@implementation cannot have type parameters",
[c]="this builtin requires target\\: loongarch32",
[h]=a,
[f]=a,
[i]=sc,
[e]={{nil,n,v}},
[b]={rc,1436241435,qc,xc},
[g]={N,1625925174,M,L},
[j]={{N,2192,"///  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      Diag(diagLoc, diag::err_objc_parameterized_implementation) << SourceRange(diagLoc, PrevTokLocation);"}},
[d]={{K,3840,"bool Sema::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case LoongArch::BI__builtin_loongarch_cacop_w: {\n    if (BuiltinID == LoongArch::BI__builtin_loongarch_cacop_w && !TI.hasFeature(\"32bit\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_loongarch_builtin_requires_la32) << TheCall->getSourceRange();"}}
[l]={
[oc]={"clang/test/SemaObjC/parameterized_classes.m:165:20: error: @implementation cannot have type parameters","clang/test/SemaObjC/parameterized_classes.m:171:20: error: @implementation cannot have type parameters","clang/test/SemaObjC/parameterized_classes.m:174:20: error: @implementation cannot have type parameters"}
}
},
},
["err_objc_postfix_attribute"]={
["err_loongarch_builtin_requires_la64"]={
[c]="err_objc_postfix_attribute",
[b]={{nil,n,"err_loongarch_builtin_requires_la64"}},
[d]="postfix attributes are not allowed on Objective-C directives",
[i]={{nil,n,"this builtin requires target: loongarch64"}},
[e]="postfix attributes are not allowed on Objective-C directives",
[j]={{nil,n,"this builtin requires target: loongarch64"}},
[f]=k,
[h]=k,
[g]="postfix attributes are not allowed on Objective\\-C directives",
[c]="this builtin requires target\\: loongarch64",
[h]=a,
[f]=a,
[i]=y,
[e]={{nil,n,v}},
[b]={"04e213b6b6fb",1365010571,"Emit a nicer diagnostic for misplaced attributes on ObjC directives.","Emit a nicer diagnostic for misplaced attributes on ObjC directives.\n\nllvm-svn: 178670"},
[g]={N,1625925174,M,L},
[j]={{N,37,"/// Skips attributes after an Objective-C @ directive. Emits a diagnostic.\nvoid Parser::MaybeSkipAttributes(tok::ObjCKeywordKind Kind) {\n  // ...\n  if (Tok.is(tok::kw___attribute)) {\n    if (Kind == tok::objc_interface || Kind == tok::objc_protocol)\n   // ...\n    else\n      Diag(Tok, diag::err_objc_postfix_attribute);"}},
[d]={{K,3833,"bool Sema::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case LoongArch::BI__builtin_loongarch_cacop_d:\n    if (!TI.hasFeature(\"64bit\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_loongarch_builtin_requires_la64) << TheCall->getSourceRange();"},{K,3861,"bool Sema::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n case LoongArch::BI__builtin_loongarch_crc_w_b_w:\n  case LoongArch::BI__builtin_loongarch_crc_w_h_w:\n  case LoongArch::BI__builtin_loongarch_crc_w_w_w:\n  case LoongArch::BI__builtin_loongarch_crc_w_d_w:\n  case LoongArch::BI__builtin_loongarch_crcc_w_b_w:\n  case LoongArch::BI__builtin_loongarch_crcc_w_h_w:\n  case LoongArch::BI__builtin_loongarch_crcc_w_w_w:\n  case LoongArch::BI__builtin_loongarch_crcc_w_d_w:\n  case LoongArch::BI__builtin_loongarch_iocsrrd_d:\n  case LoongArch::BI__builtin_loongarch_iocsrwr_d:\n  case LoongArch::BI__builtin_loongarch_asrtle_d:\n  case LoongArch::BI__builtin_loongarch_asrtgt_d:\n    if (!TI.hasFeature(\"64bit\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_loongarch_builtin_requires_la64) << TheCall->getSourceRange();"},{K,3879,"bool Sema::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case LoongArch::BI__builtin_loongarch_csrrd_d:\n    if (!TI.hasFeature(\"64bit\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_loongarch_builtin_requires_la64) << TheCall->getSourceRange();"},{K,3885,"bool Sema::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case LoongArch::BI__builtin_loongarch_csrwr_d:\n    if (!TI.hasFeature(\"64bit\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_loongarch_builtin_requires_la64) << TheCall->getSourceRange();"},{K,3891,"bool Sema::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case LoongArch::BI__builtin_loongarch_csrxchg_d:\n    if (!TI.hasFeature(\"64bit\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_loongarch_builtin_requires_la64) << TheCall->getSourceRange();"},{K,3898,"bool Sema::CheckLoongArchBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n // ...\n  case LoongArch::BI__builtin_loongarch_lddir_d:\n  case LoongArch::BI__builtin_loongarch_ldpte_d:\n    if (!TI.hasFeature(\"64bit\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_loongarch_builtin_requires_la64) << TheCall->getSourceRange();"}},
[l]={
[l]={
["clang/test/Parser/attributes.mm"]={"clang/test/Parser/attributes.mm:19:17: error: postfix attributes are not allowed on Objective-C directives","clang/test/Parser/attributes.mm:22:8: error: postfix attributes are not allowed on Objective-C directives"}
["clang/test/CodeGen/LoongArch/intrinsic-la32-error.c"]={"clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:6:3: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:51:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:55:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:59:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:63:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:66:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:70:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:74:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:78:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:82:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:86:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:90:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:112:10: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:116:3: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:120:3: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:124:3: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:128:3: error: this builtin requires target: loongarch64","clang/test/CodeGen/LoongArch/intrinsic-la32-error.c:132:3: error: this builtin requires target: loongarch64"}
}
}
},
},
["err_objc_postfix_attribute_hint"]={
["err_lvalue_reference_bind_to_initlist"]={
[c]="err_objc_postfix_attribute_hint",
[b]="err_lvalue_reference_bind_to_initlist",
[d]="postfix attributes are not allowed on Objective-C directives, place them in front of \'%select{@interface|@protocol}0\'",
[i]="%select{non-const|volatile}0 lvalue reference to type %1 cannot bind to an initializer list temporary",
[e]={{nil,nil,{"postfix attributes are not allowed on Objective-C directives, place them in front of \'",{"@interface","@protocol"},"\'"}}},
[j]={{nil,nil,{{"non-const",eb}," lvalue reference to type B cannot bind to an initializer list temporary"}}},
[f]=k,
[h]=k,
[g]="postfix attributes are not allowed on Objective\\-C directives, place them in front of \'(?:@interface|@protocol)\'",
[c]="(?:non\\-const|volatile) lvalue reference to type (.*?) cannot bind to an initializer list temporary",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={"69a7914fec81",1365034510,"Make the ObjC attributes diagnostics a bit more informative.","Make the ObjC attributes diagnostics a bit more informative.\n\nllvm-svn: 178720"},
[g]={"29526f09cee8",1322412607,"Reference initialization with initializer lists.","Reference initialization with initializer lists.\n\nThis supports single-element initializer lists for references according to DR1288, as well as creating temporaries and binding to them for other initializer lists.\n\nllvm-svn: 145186"},
[j]={{N,34,"/// Skips attributes after an Objective-C @ directive. Emits a diagnostic.\nvoid Parser::MaybeSkipAttributes(tok::ObjCKeywordKind Kind) {\n  // ...\n  if (Tok.is(tok::kw___attribute)) {\n    if (Kind == tok::objc_interface || Kind == tok::objc_protocol)\n      Diag(Tok, diag::err_objc_postfix_attribute_hint) << (Kind == tok::objc_protocol);"}},
[d]={{H,9694,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToTemporary:\n    if (isa<InitListExpr>(Args[0])) {\n      S.Diag(Kind.getLocation(), diag::err_lvalue_reference_bind_to_initlist) << DestType.getNonReferenceType().isVolatileQualified() << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}},
[l]={
[l]={
["clang/test/Parser/attributes.mm"]={"clang/test/Parser/attributes.mm:16:12: error: postfix attributes are not allowed on Objective-C directives, place them in front of \'@interface\'","clang/test/Parser/attributes.mm:25:11: error: postfix attributes are not allowed on Objective-C directives, place them in front of \'@protocol\'"}
["clang/test/SemaCXX/auto-invalid-init-crash.cpp"]={"clang/test/SemaCXX/auto-invalid-init-crash.cpp:7:14: error: non-const lvalue reference to type \'std::initializer_list<int>\' cannot bind to an initializer list temporary"}
}
}
},
},
["err_objc_precise_lifetime_bad_type"]={
["err_lvalue_reference_bind_to_temporary"]={
[c]="err_objc_precise_lifetime_bad_type",
[b]="err_lvalue_reference_bind_to_temporary",
[d]="objc_precise_lifetime only applies to retainable types; type here is %0",
[i]="%select{non-const|volatile}0 lvalue reference %diff{to type $ cannot bind to a temporary of type $|cannot bind to incompatible temporary}1,2",
[e]="objc_precise_lifetime only applies to retainable types; type here is A",
[j]={{nil,nil,{{"non-const",eb}," lvalue reference ",{"to type B cannot bind to a temporary of type C","cannot bind to incompatible temporary"}}}},
[f]=k,
[h]=k,
[g]="objc_precise_lifetime only applies to retainable types; type here is (.*?)",
[c]="(?:non\\-const|volatile) lvalue reference (?:to type (.*?) cannot bind to a temporary of type (.*?)|cannot bind to incompatible temporary)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"31168b077c36",1308178962,"Automatic Reference Counting.","Automatic Reference Counting.\n\nLanguage-design credit goes to a lot of people, but I particularly want\nto single out Blaine Garst and Patrick Beard for their contributions.\n\nCompiler implementation credit goes to Argyrios, Doug, Fariborz, and myself,\nin no particular order.\n\nllvm-svn: 133103"},
[g]={"3e1e52782604",1260399737,"Reimplement reference initialization (C++ [dcl.init.ref]) using the","Reimplement reference initialization (C++ [dcl.init.ref]) using the\nnew notion of an \"initialization sequence\", which encapsulates the\ncomputation of the initialization sequence along with diagnostic\ninformation and the capability to turn the computed sequence into an\nexpression. At present, I\'ve only switched one CheckReferenceInit\ncallers over to this new mechanism; more will follow.\n\nAside from (hopefully) being much more true to the standard, the\ndiagnostics provided by this reference-initialization code are a bit\nbetter than before. Some examples:\n\np5-var.cpp:54:12: error: non-const lvalue reference to type \'struct\nDerived\'\n     cannot bind to a value of unrelated type \'struct Base\'\n  Derived &dr2 = b; // expected-error{{non-const lvalue reference to\n  ...\n           ^    ~\np5-var.cpp:55:9: error: binding of reference to type \'struct Base\' to\na value of\n      type \'struct Base const\' drops qualifiers\n  Base &br3 = bc; // expected-error{{drops qualifiers}}\n       ^    ~~\n\np5-var.cpp:57:15: error: ambiguous conversion from derived class\n      \'struct Diamond\' to base class \'struct Base\':\n    struct Diamond -> struct Derived -> struct Base\n    struct Diamond -> struct Derived2 -> struct Base\n Base &br5 = diamond; // expected-error{{ambiguous conversion from\n     ...\n             ^~~~~~~\np5-var.cpp:59:9: error: non-const lvalue reference to type \'long\'\n     cannot bind to\n     a value of unrelated type \'int\'\n  long &lr = i; // expected-error{{non-const lvalue reference to type\n      ...\n       ^    ~\n\np5-var.cpp:74:9: error: non-const lvalue reference to type \'struct\nBase\' cannot\n      bind to a temporary of type \'struct Base\'\n  Base &br1 = Base(); // expected-error{{non-const lvalue reference to\n  ...\n       ^    ~~~~~~\n\np5-var.cpp:102:9: error: non-const reference cannot bind to bit-field\n\'i\'\n  int & ir1 = (ib.i); // expected-error{{non-const reference cannot\n  ...\n       ^    ~~~~~~\np5-var.cpp:98:7: note: bit-field is declared here\n int i : 17; // expected-note{{bit-field is declared here}}\n     ^\n\nllvm-svn: 90992"},
[j]={{K,6301,"static void handleObjCPreciseLifetimeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!QT->isDependentType() && !QT->isObjCLifetimeType()) {\n    S.Diag(AL.getLoc(), diag::err_objc_precise_lifetime_bad_type) << QT;"}}
[d]={{H,9705,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToUnrelated:\n    S.Diag(Kind.getLocation(), Failure == FK_NonConstLValueReferenceBindingToTemporary ? diag::err_lvalue_reference_bind_to_temporary : diag::err_lvalue_reference_bind_to_unrelated) << DestType.getNonReferenceType().isVolatileQualified() << DestType.getNonReferenceType() << OnlyArg->getType() << Args[0]->getSourceRange();"}},
},
["err_objc_property_attr_mutually_exclusive"]={
[c]="err_objc_property_attr_mutually_exclusive",
[d]="property attributes \'%0\' and \'%1\' are mutually exclusive",
[e]="property attributes \'A\' and \'B\' are mutually exclusive",
[f]=k,
[g]="property attributes \'(.*?)\' and \'(.*?)\' are mutually exclusive",
[h]=a,
[i]=m,
[b]={J,1236199783,H,I},
[j]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",290,"static void checkAllAtProps(MigrationContext &MigrateCtx, SourceLocation AtLoc, IndivPropsTy &IndProps) {\n  // ...\n  for (unsigned i = 0, e = ATLs.size(); i != e; ++i) {\n    // ...\n    TA.clearDiagnostic(diag::err_objc_property_attr_mutually_exclusive, AtLoc);"},{M,2644,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  if ((Attributes & ObjCPropertyAttribute::kind_readonly) && (Attributes & ObjCPropertyAttribute::kind_readwrite))\n    Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"readonly\""},{M,2681,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    if (Attributes & ObjCPropertyAttribute::kind_copy) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{M,2686,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_retain) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{M,2691,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_strong) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{M,2697,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    // ...\n    if (getLangOpts().ObjCAutoRefCount && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{M,2705,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n    if (Attributes & ObjCPropertyAttribute::kind_copy) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{M,2710,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n if (Attributes & ObjCPropertyAttribute::kind_assign) {\n // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_retain) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{M,2715,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_strong) {\n     Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{M,2721,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n // ...\n } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n    // ...\n    if (getLangOpts().ObjCAutoRefCount && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{M,2727,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n // ...\n // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n    if (Attributes & ObjCPropertyAttribute::kind_retain) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"copy\""},{M,2732,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n // Check for more than one of { assign, copy, retain }.\n if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_strong) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"copy\""},{M,2737,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_weak) {\n     Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"copy\""},{M,2743,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n  // ...\n  } else if ((Attributes & ObjCPropertyAttribute::kind_retain) && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n   Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"retain\""},{M,2748,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n // ...\n } else if ((Attributes & ObjCPropertyAttribute::kind_retain) && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n  // ...\n  } else if ((Attributes & ObjCPropertyAttribute::kind_strong) && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n    Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"strong\""},{M,2757,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  if (Attributes & ObjCPropertyAttribute::kind_weak) {\n    // \'weak\' and \'nonnull\' are mutually exclusive.\n    if (auto nullability = PropertyTy->getNullability()) {\n      if (*nullability == NullabilityKind::NonNull)\n        Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"nonnull\""},{M,2764,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  if ((Attributes & ObjCPropertyAttribute::kind_atomic) && (Attributes & ObjCPropertyAttribute::kind_nonatomic)) {\n    Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"atomic\""}},
[l]={
[l]={
["clang/test/SemaObjC/weak-property.m"]={"clang/test/SemaObjC/weak-property.m:13:1: error: property attributes \'assign\' and \'weak\' are mutually exclusive","clang/test/SemaObjC/weak-property.m:14:1: error: property attributes \'copy\' and \'weak\' are mutually exclusive","clang/test/SemaObjC/weak-property.m:15:1: error: property attributes \'retain\' and \'weak\' are mutually exclusive","clang/test/SemaObjC/weak-property.m:16:1: error: property attributes \'assign\' and \'weak\' are mutually exclusive"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp:6:9: error: non-const lvalue reference to type \'(lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp:6:13)\' cannot bind to a temporary of type \'(lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p2.cpp:6:13)\'"}
}
}
},
},
["err_objc_property_bitfield"]={
["err_lvalue_reference_bind_to_unrelated"]={
[c]="err_objc_property_bitfield",
[b]="err_lvalue_reference_bind_to_unrelated",
[d]="property name cannot be a bit-field",
[i]="%select{non-const|volatile}0 lvalue reference %diff{to type $ cannot bind to a value of unrelated type $|cannot bind to a value of unrelated type}1,2",
[e]="property name cannot be a bit-field",
[j]={{nil,nil,{{"non-const",eb}," lvalue reference ",{"to type B cannot bind to a value of unrelated type C","cannot bind to a value of unrelated type"}}}},
[f]=k,
[h]=k,
[g]="property name cannot be a bit\\-field",
[c]="(?:non\\-const|volatile) lvalue reference (?:to type (.*?) cannot bind to a value of unrelated type (.*?)|cannot bind to a value of unrelated type)",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={J,1236199783,H,I},
[g]={"3e1e52782604",1260399737,"Reimplement reference initialization (C++ [dcl.init.ref]) using the","Reimplement reference initialization (C++ [dcl.init.ref]) using the\nnew notion of an \"initialization sequence\", which encapsulates the\ncomputation of the initialization sequence along with diagnostic\ninformation and the capability to turn the computed sequence into an\nexpression. At present, I\'ve only switched one CheckReferenceInit\ncallers over to this new mechanism; more will follow.\n\nAside from (hopefully) being much more true to the standard, the\ndiagnostics provided by this reference-initialization code are a bit\nbetter than before. Some examples:\n\np5-var.cpp:54:12: error: non-const lvalue reference to type \'struct\nDerived\'\n     cannot bind to a value of unrelated type \'struct Base\'\n Derived &dr2 = b; // expected-error{{non-const lvalue reference to\n  ...\n          ^    ~\np5-var.cpp:55:9: error: binding of reference to type \'struct Base\' to\na value of\n      type \'struct Base const\' drops qualifiers\n Base &br3 = bc; // expected-error{{drops qualifiers}}\n        ^     ~~\n\np5-var.cpp:57:15: error: ambiguous conversion from derived class\n      \'struct Diamond\' to base class \'struct Base\':\n    struct Diamond -> struct Derived -> struct Base\n    struct Diamond -> struct Derived2 -> struct Base\n Base &br5 = diamond; // expected-error{{ambiguous conversion from\n      ...\n              ^~~~~~~\np5-var.cpp:59:9: error: non-const lvalue reference to type \'long\'\n      cannot bind to\n      a value of unrelated type \'int\'\n long &lr = i; // expected-error{{non-const lvalue reference to type\n      ...\n        ^    ~\n\np5-var.cpp:74:9: error: non-const lvalue reference to type \'struct\nBase\' cannot\n     bind to a temporary of type \'struct Base\'\n Base &br1 = Base(); // expected-error{{non-const lvalue reference to\n ...\n       ^     ~~~~~~\n\np5-var.cpp:102:9: error: non-const reference cannot bind to bit-field\n\'i\'\n  int & ir1 = (ib.i); // expected-error{{non-const reference cannot\n ...\n       ^    ~~~~~~\np5-var.cpp:98:7: note: bit-field is declared here\n int i : 17; // expected-note{{bit-field is declared here}}\n      ^\n\nllvm-svn: 90992"},
[j]={{N,778,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///     objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///     @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n // ...\n  while (true) {\n   // ...\n   case tok::objc_property:\n     // ...\n      auto ObjCPropertyCallback = [&](ParsingFieldDeclarator &FD) {\n       // ...\n       if (FD.BitfieldSize) {\n         Diag(AtLoc, diag::err_objc_property_bitfield) << FD.D.getSourceRange();"}},
[d]={{H,9706,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_NonConstLValueReferenceBindingToUnrelated:\n   S.Diag(Kind.getLocation(), Failure == FK_NonConstLValueReferenceBindingToTemporary ? diag::err_lvalue_reference_bind_to_temporary : diag::err_lvalue_reference_bind_to_unrelated) << DestType.getNonReferenceType().isVolatileQualified() << DestType.getNonReferenceType() << OnlyArg->getType() << Args[0]->getSourceRange();"}},
[l]={
[l]={
["clang/test/Parser/objc-property-syntax.m"]={"clang/test/Parser/objc-property-syntax.m:7:1: error: property name cannot be a bit-field"}
["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:32:36: error: non-const lvalue reference to type \'float\' cannot bind to a value of unrelated type \'int\'"}
}
}
},
},
["err_objc_property_requires_field_name"]={
["err_lvalue_to_rvalue_ref"]={
[c]="err_objc_property_requires_field_name",
[b]="err_lvalue_to_rvalue_ref",
[d]="property requires fields to be named",
[i]="rvalue reference %diff{to type $ cannot bind to lvalue of type $|cannot bind to incompatible lvalue}0,1",
[e]="property requires fields to be named",
[j]={{nil,nil,{"rvalue reference ",{"to type A cannot bind to lvalue of type B","cannot bind to incompatible lvalue"}}}},
[f]=k,
[h]=k,
[g]="property requires fields to be named",
[c]="rvalue reference (?:to type (.*?) cannot bind to lvalue of type (.*?)|cannot bind to incompatible lvalue)",
[h]=a,
[f]=a,
[i]=y,
[e]=m,
[b]={J,1236199783,H,I},
[g]={"0f8b23f71fbe",1237245728,"Almost complete implementation of rvalue references. One bug, and a few unclear areas. Maybe Doug ca...","Almost complete implementation of rvalue references. One bug, and a few unclear areas. Maybe Doug can shed some light on some of the fixmes.\n\nllvm-svn: 67059"},
[j]={{N,773,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    case tok::objc_property:\n     // ...\n      auto ObjCPropertyCallback = [&](ParsingFieldDeclarator &FD) {\n        if (FD.D.getIdentifier() == nullptr) {\n          Diag(AtLoc, diag::err_objc_property_requires_field_name) << FD.D.getSourceRange();"}},
[d]={{H,9738,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_RValueReferenceBindingToLValue:\n   S.Diag(Kind.getLocation(), diag::err_lvalue_to_rvalue_ref) << DestType.getNonReferenceType() << OnlyArg->getType() << Args[0]->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/property-9.m"]={"clang/test/SemaObjC/property-9.m:48:1: error: property requires fields to be named"}
["clang/test/SemaCXX/coroutine-rvo.cpp"]={"clang/test/SemaCXX/coroutine-rvo.cpp:79:13: error: rvalue reference to type \'NoCopyNoMove\' cannot bind to lvalue of type \'NoCopyNoMove\'","clang/test/SemaCXX/coroutine-rvo.cpp:118:15: error: rvalue reference to type \'RetThis\' cannot bind to lvalue of type \'RetThis\'"}
}
}
},
},
["err_objc_property_requires_object"]={
["err_machine_mode"]={
[c]="err_objc_property_requires_object",
[b]="err_machine_mode",
[d]="property with \'%0\' attribute must be of object type",
[i]="%select{unknown|unsupported}0 machine mode %1",
[e]="property with \'A\' attribute must be of object type",
[j]={{nil,nil,{{"unknown","unsupported"}," machine mode B"}}},
[f]=k,
[h]=k,
[g]="property with \'(.*?)\' attribute must be of object type",
[c]="(?:unknown|unsupported) machine mode (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={J,1236199783,H,I},
[g]={"0390908588fa",1387812191,"Consolidating some mode attribute diagnostics. No functional changes intended.","Consolidating some mode attribute diagnostics. No functional changes intended.\n\nllvm-svn: 197911"},
[j]={{M,2657,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for copy or retain on non-object types.\n  if ((Attributes & (ObjCPropertyAttribute::kind_weak | ObjCPropertyAttribute::kind_copy | ObjCPropertyAttribute::kind_retain | ObjCPropertyAttribute::kind_strong)) && !PropertyTy->isObjCRetainableType() && !PropertyDecl->hasAttr<ObjCNSObjectAttr>()) {\n    Diag(Loc, diag::err_objc_property_requires_object) << (Attributes & ObjCPropertyAttribute::kind_weak ? \"weak\" : Attributes & ObjCPropertyAttribute::kind_copy ? \"copy\" : \"retain (or strong)\");"}},
[d]={{u,4776,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  // FIXME: Sync this with InitializePredefinedMacros; we need to match int8_t\n  // and friends, at least with glibc.\n  // FIXME: Make sure floating-point mappings are accurate\n  // FIXME: Support XF and TF types\n  if (!DestWidth) {\n    Diag(AttrLoc, diag::err_machine_mode) << 0 /*Unknown*/ << Name;"},{u,4838,"void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, IdentifierInfo *Name, bool InInstantiation) {\n  // ...\n  if (NewElemTy.isNull()) {\n    Diag(AttrLoc, diag::err_machine_mode) << 1 /*Unsupported*/ << Name;"}},
[l]={
[l]={
["clang/test/SemaObjC/property-10.m"]={"clang/test/SemaObjC/property-10.m:8:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:9:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:11:1: error: property with \'copy\' attribute must be of object type","clang/test/SemaObjC/property-10.m:30:1: error: property with \'copy\' attribute must be of object type","clang/test/SemaObjC/property-10.m:35:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:36:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:37:1: error: property with \'copy\' attribute must be of object type","clang/test/SemaObjC/property-10.m:38:1: error: property with \'weak\' attribute must be of object type"}
["clang/test/Sema/attr-mode-vector-types.c"]={"clang/test/Sema/attr-mode-vector-types.c:21:30: error: unsupported machine mode \'QC\'","clang/test/Sema/attr-mode-vector-types.c:34:28: error: unknown machine mode \'V3QI\'"}
}
}
},
},
["err_objc_root_class_subclass"]={
["err_main_arg_wrong"]={
[c]="err_objc_root_class_subclass",
[b]="err_main_arg_wrong",
[d]="objc_root_class attribute may only be specified on a root class declaration",
[i]="%select{first|second|third|fourth}0 parameter of \'main\' (%select{argument count|argument array|environment|platform-specific data}0) must be of type %1",
[e]="objc_root_class attribute may only be specified on a root class declaration",
[j]={{nil,nil,{{"first","second","third","fourth"}," parameter of \'main\' (",{"argument count","argument array","environment","platform-specific data"},") must be of type B"}}},
[f]=k,
[h]=k,
[g]="objc_root_class attribute may only be specified on a root class declaration",
[c]="(?:first|second|third|fourth) parameter of \'main\' \\((?:argument count|argument array|environment|platform\\-specific data)\\) must be of type (.*?)",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"acfbe9e1f228",1333735942,"Added a new attribute, objc_root_class, which informs the compiler when a root class is intentionall...","Added a new attribute, objc_root_class, which informs the compiler when a root class is intentionally declared.\nThe warning this inhibits, -Wobjc-root-class, is opt-in for now. However, all clang unit tests that would trigger\nthe warning have been updated to use -Wno-objc-root-class. <rdar://problem/7446698>\n\nllvm-svn: 154187"},
[g]={"02dee0a46a39",1248496613,"Semantic checking for main().","Semantic checking for main().\n\nFix some invalid main() methods in the test suite that were nicely\nexposed by the new checks.\n\nllvm-svn: 77047"},
[j]={{T,4155,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    // ...\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      // ...\n      if (IDecl->getSuperClass() == nullptr) {\n      // ...\n      } else if (HasRootClassAttr) {\n        // ...\n        Diag(IDecl->getLocation(), diag::err_objc_root_class_subclass);"}},
[d]={{p,12211,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  for (unsigned i = 0; i < nparams; ++i) {\n    // ...\n    if (mismatch) {\n      Diag(FD->getLocation(), diag::err_main_arg_wrong) << i << Expected[i];"}},
[l]={
[l]={
["clang/test/SemaObjC/attr-root-class.m"]={"clang/test/SemaObjC/attr-root-class.m:9:12: error: objc_root_class attribute may only be specified on a root class declaration"}
["clang/test/CXX/basic/basic.start/basic.start.main/p2.cpp"]={"clang/test/CXX/basic/basic.start/basic.start.main/p2.cpp:60:1: error: first parameter of \'main\' (argument count) must be of type \'int\'"}
}
}
},
},
["err_objc_runtime_visible_category"]={
["err_main_global_variable"]={
[c]="err_objc_runtime_visible_category",
[b]="err_main_global_variable",
[d]="cannot implement a category for class %0 that is only visible via the Objective-C runtime",
[i]="main cannot be declared as global variable",
[e]="cannot implement a category for class A that is only visible via the Objective-C runtime",
[j]="main cannot be declared as global variable",
[f]=k,
[h]=k,
[g]="cannot implement a category for class (.*?) that is only visible via the Objective\\-C runtime",
[c]="main cannot be declared as global variable",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"24ae22c04796",1459553032,"[Objective-C] Introduce objc_runtime_visible attribute.","[Objective-C] Introduce objc_runtime_visible attribute.\n\nThe objc_runtime_visible attribute deals with an odd corner case where\na particular Objective-C class is known to the Objective-C runtime\n(and, therefore, accessible by name) but its symbol has been hidden\nfor some reason. For such classes, teach CodeGen to use\nobjc_lookUpClass to retrieve the Class object, rather than referencing\nthe class symbol directly.\n\nClasses annotated with objc_runtime_visible have two major limitations\nthat fall out from places where Objective-C metadata needs to refer to\nthe class (or metaclass) symbol directly:\n\n* One cannot implement a subclass of an objc_runtime_visible class.\n* One cannot implement a category on an objc_runtime_visible class.\n\nImplements rdar://problem/25494092.\n\nllvm-svn: 265201"},
[g]={"da8a3b903b45",1439561609,"[Sema] main can\'t be declared as global variable, in C++.","[Sema] main can\'t be declared as global variable, in C++.\n\nSo, we now reject that. We also warn for any external-linkage global\nvariable named main in C, because it results in undefined behavior.\n\nPR:   24309\nDifferential Revision: http://reviews.llvm.org/D11658\nReviewed by: rsmith\n\nllvm-svn: 245051"},
[j]={{T,1957,"/// 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  // If the interface has the objc_runtime_visible attribute, we\n  // cannot implement a category for it.\n  if (IDecl && IDecl->hasAttr<ObjCRuntimeVisibleAttr>()) {\n    Diag(ClassLoc, diag::err_objc_runtime_visible_category) << IDecl->getDeclName();"}},
[d]={{p,8109,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  // Special handling of variable named \'main\'.\n  if (Name.getAsIdentifierInfo() && Name.getAsIdentifierInfo()->isStr(\"main\") && NewVD->getDeclContext()->getRedeclContext()->isTranslationUnit() && !getLangOpts().Freestanding && !NewVD->getDescribedVarTemplate()) {\n    // C++ [basic.start.main]p3\n    // A program that declares a variable main at global scope is ill-formed.\n    if (getLangOpts().CPlusPlus)\n      Diag(D.getBeginLoc(), diag::err_main_global_variable);"}},
[l]={
[l]={
["clang/test/SemaObjC/attr-objc-runtime-visible.m"]={"clang/test/SemaObjC/attr-objc-runtime-visible.m:10:17: error: cannot implement a category for class \'A\' that is only visible via the Objective-C runtime"}
["clang/test/CXX/basic/basic.start/basic.start.main/p3.cpp"]={"clang/test/CXX/basic/basic.start/basic.start.main/p3.cpp:49:3: error: main cannot be declared as global variable"}
}
}
},
},
["err_objc_runtime_visible_subclass"]={
["err_main_returns_nonint"]={
[c]="err_objc_runtime_visible_subclass",
[b]="err_main_returns_nonint",
[d]="cannot implement subclass %0 of a superclass %1 that is only visible via the Objective-C runtime",
[i]="\'main\' must return \'int\'",
[e]="cannot implement subclass A of a superclass B that is only visible via the Objective-C runtime",
[j]="\'main\' must return \'int\'",
[f]=k,
[h]=k,
[g]="cannot implement subclass (.*?) of a superclass (.*?) that is only visible via the Objective\\-C runtime",
[c]="\'main\' must return \'int\'",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={"24ae22c04796",1459553032,"[Objective-C] Introduce objc_runtime_visible attribute.","[Objective-C] Introduce objc_runtime_visible attribute.\n\nThe objc_runtime_visible attribute deals with an odd corner case where\na particular Objective-C class is known to the Objective-C runtime\n(and, therefore, accessible by name) but its symbol has been hidden\nfor some reason. For such classes, teach CodeGen to use\nobjc_lookUpClass to retrieve the Class object, rather than referencing\nthe class symbol directly.\n\nClasses annotated with objc_runtime_visible have two major limitations\nthat fall out from places where Objective-C metadata needs to refer to\nthe class (or metaclass) symbol directly:\n\n* One cannot implement a subclass of an objc_runtime_visible class.\n* One cannot implement a category on an objc_runtime_visible class.\n\nImplements rdar://problem/25494092.\n\nllvm-svn: 265201"},
[g]={"02dee0a46a39",1248496613,"Semantic checking for main().","Semantic checking for main().\n\nFix some invalid main() methods in the test suite that were nicely\nexposed by the new checks.\n\nllvm-svn: 77047"},
[j]={{T,2107,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  // If the superclass has the objc_runtime_visible attribute, we\n  // cannot implement a subclass of it.\n if (IDecl->getSuperClass() && IDecl->getSuperClass()->hasAttr<ObjCRuntimeVisibleAttr>()) {\n   Diag(ClassLoc, diag::err_objc_runtime_visible_subclass) << IDecl->getDeclName() << IDecl->getSuperClass()->getDeclName();"}},
[d]={{p,12145,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  if (getLangOpts().GNUMode && !getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    // All the standards say that main() should return \'int\'.\n   if (Context.hasSameType(FT->getReturnType(), Context.IntTy))\n    // ...\n    else {\n     // ...\n      Diag(FD->getTypeSpecStartLoc(), diag::err_main_returns_nonint) << (RTRange.isValid() ? FixItHint::CreateReplacement(RTRange, \"int\") : FixItHint());"}},
[l]={
[l]={
["clang/test/SemaObjC/attr-objc-runtime-visible.m"]={"clang/test/SemaObjC/attr-objc-runtime-visible.m:16:17: error: cannot implement subclass \'B\' of a superclass \'A\' that is only visible via the Objective-C runtime"}
["clang/test/Sema/c89.c"]={"clang/test/Sema/c89.c:108:1: error: \'main\' must return \'int\'","clang/test/Sema/c89.c:110:7: error: \'main\' must return \'int\'"}
}
}
},
},
["err_objc_subscript_base_type"]={
["err_main_surplus_args"]={
[c]="err_objc_subscript_base_type",
[b]="err_main_surplus_args",
[d]="%select{dictionary|array}1 subscript base type %0 is not an Objective-C object",
[i]="too many parameters (%0) for \'main\': must be 0, 2, or 3",
[e]={{nil,nil,{{"dictionary","array"}," subscript base type A is not an Objective-C object"}}},
[j]="too many parameters (A) for \'main\': must be 0, 2, or 3",
[f]=k,
[h]=k,
[g]="(?:dictionary|array) subscript base type (.*?) is not an Objective\\-C object",
[c]="too many parameters \\((.*?)\\) for \'main\'\\: must be 0, 2, or 3",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={jb,1331064356,kb,lb},
[g]={"02dee0a46a39",1248496613,"Semantic checking for main().","Semantic checking for main().\n\nFix some invalid main() methods in the test suite that were nicely\nexposed by the new checks.\n\nllvm-svn: 77047"},
[j]={{P,1166,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n // ...\n  if (ResultType.isNull()) {\n   S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_base_type) << BaseExpr->getType() << arrayRef;"},{P,1270,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (ResultType.isNull()) {\n    S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_base_type) << BaseExpr->getType() << arrayRef;"}}
[d]={{p,12174,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  if (HasExtraParameters) {\n    Diag(FD->getLocation(), diag::err_main_surplus_args) << nparams;"}}
},
},
["err_objc_subscript_dic_object_type"]={
["err_mainlike_template_decl"]={
[c]="err_objc_subscript_dic_object_type",
[b]="err_mainlike_template_decl",
[d]="method object parameter type %0 is not object type",
[i]="%0 cannot be a template",
[e]="method object parameter type A is not object type",
[j]="A cannot be a template",
[f]=k,
[h]=k,
[g]="method object parameter type (.*?) is not object type",
[c]="(.*?) cannot be a template",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={jb,1331064356,kb,lb},
[g]={"c729b0b50669",1379371460,"[-cxx-abi microsoft] Correctly identify Win32 entry points","[-cxx-abi microsoft] Correctly identify Win32 entry points\n\nSummary:\nThis fixes several issues with the original implementation:\n- Win32 entry points cannot be in namespaces\n- A Win32 entry point cannot be a function template, diagnose if we it.\n- Win32 entry points cannot be overloaded.\n- Win32 entry points implicitly return, similar to main.\n\nReviewers: rnk, rsmith, whunt, timurrrr\n\nReviewed By: rnk\n\nCC: cfe-commits, nrieck\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D1683\n\nllvm-svn: 190818"},
[j]={{P,1369,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n // ...\n  } else if (AtIndexSetter && !arrayRef)\n    for (unsigned i = 0; i < 2; i++) {\n     // ...\n     if (!T->isObjCObjectPointerType()) {\n       if (i == 1)\n        // ...\n        else\n          S.Diag(RefExpr->getBaseExpr()->getExprLoc(), diag::err_objc_subscript_dic_object_type) << T;"}},
[d]={{p,12222,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  if (!FD->isInvalidDecl() && FD->getDescribedFunctionTemplate()) {\n   Diag(FD->getLocation(), diag::err_mainlike_template_decl) << FD;"},{p,12276,"void Sema::CheckMSVCRTEntryPoint(FunctionDecl *FD) {\n // ...\n if (!FD->isInvalidDecl() && FD->getDescribedFunctionTemplate()) {\n   Diag(FD->getLocation(), diag::err_mainlike_template_decl) << FD;"}},
[l]={
[l]={
[lc]={"clang/test/SemaObjC/objc-container-subscripting.m:40:3: error: method object parameter type \'void *\' is not object type"}
["clang/test/SemaCXX/ms-overload-entry-point.cpp"]={"clang/test/SemaCXX/ms-overload-entry-point.cpp:4:5: error: \'wmain\' cannot be a template"}
}
}
},
},
["err_objc_subscript_index_type"]={
["err_make_signed_integral_only"]={
[c]="err_objc_subscript_index_type",
[b]={{nil,n,"err_make_signed_integral_only"}},
[d]="method index parameter type %0 is not integral type",
[i]={{nil,n,"\'%select{make_unsigned|make_signed}0\' is only compatible with non-%select{bool|_BitInt(1)}1 integers and enum types, but was given %2%select{| whose underlying type is %4}3"}},
[e]="method index parameter type A is not integral type",
[j]={{nil,n,{"\'",{"make_unsigned","make_signed"},"\' is only compatible with non-",{"bool","_BitInt(1)"}," integers and enum types, but was given C",{a," whose underlying type is E"}}}},
[f]=k,
[h]=k,
[g]="method index parameter type (.*?) is not integral type",
[c]="\'(?:make_unsigned|make_signed)\' is only compatible with non\\-(?:bool|_BitInt\\(1\\)) integers and enum types, but was given (.*?)(?:| whose underlying type is (.*?))",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,n,m}},
[b]={jb,1331064356,kb,lb},
[g]={N,1625925174,M,L},
[j]={{P,1229,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n // ...\n if (AtIndexGetter) {\n   // ...\n   if ((arrayRef && !T->isIntegralOrEnumerationType()) || (!arrayRef && !T->isObjCObjectPointerType())) {\n      S.Diag(RefExpr->getKeyExpr()->getExprLoc(), arrayRef ? diag::err_objc_subscript_index_type : diag::err_objc_subscript_key_type) << T;"},{P,1346,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n    // ...\n    if (!T->isIntegralOrEnumerationType()) {\n      S.Diag(RefExpr->getKeyExpr()->getExprLoc(), diag::err_objc_subscript_index_type) << T;"}},
[d]={{G,9638,"static QualType ChangeIntegralSignedness(Sema &S, QualType BaseType, bool IsMakeSigned, SourceLocation Loc) {\n  if (BaseType->isEnumeralType()) {\n   // ...\n   if (auto *BitInt = dyn_cast<BitIntType>(Underlying)) {\n     // ...\n     S.Diag(Loc, diag::err_make_signed_integral_only) << IsMakeSigned << /*_BitInt(1)*/ true << BaseType << 1 << Underlying;"},{G,9643,"static QualType ChangeIntegralSignedness(Sema &S, QualType BaseType, bool IsMakeSigned, SourceLocation Loc) {\n  if (BaseType->isEnumeralType()) {\n    // ...\n    if (Underlying->isBooleanType()) {\n      S.Diag(Loc, diag::err_make_signed_integral_only) << IsMakeSigned << /*_BitInt(1)*/ false << BaseType << 1 << Underlying;"},{G,9683,"QualType Sema::BuiltinChangeSignedness(QualType BaseType, UTTKind UKind, SourceLocation Loc) {\n  // ...\n  if ((!BaseType->isIntegerType() && !BaseType->isEnumeralType()) || BaseType->isBooleanType() || (BaseType->isBitIntType() && BaseType->getAs<BitIntType>()->getNumBits() < 2)) {\n    Diag(Loc, diag::err_make_signed_integral_only) << IsMakeSigned << BaseType->isBitIntType() << BaseType << 0;"}},
[l]={
[l]={
[lc]={"clang/test/SemaObjC/objc-container-subscripting.m:15:25: error: method index parameter type \'double\' is not integral type","clang/test/SemaObjC/objc-container-subscripting.m:16:9: error: method index parameter type \'void *\' is not integral type"}
["clang/test/SemaCXX/type-traits.cpp"]={"clang/test/SemaCXX/type-traits.cpp:3995:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'bool\'","clang/test/SemaCXX/type-traits.cpp:3997:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'UnscopedBool\' whose underlying type is \'bool\'","clang/test/SemaCXX/type-traits.cpp:3999:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'ScopedBool\' whose underlying type is \'bool\'","clang/test/SemaCXX/type-traits.cpp:4001:27: error: \'make_signed\' is only compatible with non-_BitInt(1) integers and enum types, but was given \'unsigned _BitInt(1)\'","clang/test/SemaCXX/type-traits.cpp:4003:27: error: \'make_signed\' is only compatible with non-_BitInt(1) integers and enum types, but was given \'UnscopedBit\' whose underlying type is \'unsigned _BitInt(1)\'","clang/test/SemaCXX/type-traits.cpp:4005:27: error: \'make_signed\' is only compatible with non-_BitInt(1) integers and enum types, but was given \'ScopedBit\' whose underlying type is \'unsigned _BitInt(1)\'","clang/test/SemaCXX/type-traits.cpp:4007:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'int[]\'","clang/test/SemaCXX/type-traits.cpp:4009:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'int[5]\'","clang/test/SemaCXX/type-traits.cpp:4011:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'void\'","clang/test/SemaCXX/type-traits.cpp:4013:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'int *\'","clang/test/SemaCXX/type-traits.cpp:4015:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'int &\'","clang/test/SemaCXX/type-traits.cpp:4017:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'int &&\'","clang/test/SemaCXX/type-traits.cpp:4019:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'float\'","clang/test/SemaCXX/type-traits.cpp:4021:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'double\'","clang/test/SemaCXX/type-traits.cpp:4023:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'long double\'","clang/test/SemaCXX/type-traits.cpp:4025:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'S\'","clang/test/SemaCXX/type-traits.cpp:4027:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'S *\'","clang/test/SemaCXX/type-traits.cpp:4029:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'int S::*\'","clang/test/SemaCXX/type-traits.cpp:4031:27: error: \'make_signed\' is only compatible with non-bool integers and enum types, but was given \'int (S::*)()\'","clang/test/SemaCXX/type-traits.cpp:4092:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'bool\'","clang/test/SemaCXX/type-traits.cpp:4094:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'UnscopedBool\' whose underlying type is \'bool\'","clang/test/SemaCXX/type-traits.cpp:4096:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'ScopedBool\' whose underlying type is \'bool\'","clang/test/SemaCXX/type-traits.cpp:4098:27: error: \'make_unsigned\' is only compatible with non-_BitInt(1) integers and enum types, but was given \'unsigned _BitInt(1)\'","clang/test/SemaCXX/type-traits.cpp:4100:27: error: \'make_unsigned\' is only compatible with non-_BitInt(1) integers and enum types, but was given \'UnscopedBit\' whose underlying type is \'unsigned _BitInt(1)\'","clang/test/SemaCXX/type-traits.cpp:4102:27: error: \'make_unsigned\' is only compatible with non-_BitInt(1) integers and enum types, but was given \'ScopedBit\' whose underlying type is \'unsigned _BitInt(1)\'","clang/test/SemaCXX/type-traits.cpp:4104:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'int[]\'","clang/test/SemaCXX/type-traits.cpp:4106:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'int[5]\'","clang/test/SemaCXX/type-traits.cpp:4108:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'void\'","clang/test/SemaCXX/type-traits.cpp:4110:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'int *\'","clang/test/SemaCXX/type-traits.cpp:4112:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'int &\'","clang/test/SemaCXX/type-traits.cpp:4114:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'int &&\'","clang/test/SemaCXX/type-traits.cpp:4116:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'float\'","clang/test/SemaCXX/type-traits.cpp:4118:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'double\'","clang/test/SemaCXX/type-traits.cpp:4120:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'long double\'","clang/test/SemaCXX/type-traits.cpp:4122:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'S\'","clang/test/SemaCXX/type-traits.cpp:4124:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'S *\'","clang/test/SemaCXX/type-traits.cpp:4126:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'int S::*\'","clang/test/SemaCXX/type-traits.cpp:4128:27: error: \'make_unsigned\' is only compatible with non-bool integers and enum types, but was given \'int (S::*)()\'"}
}
}
},
},
["err_objc_subscript_key_type"]={
["err_malformed_std_coroutine_handle"]={
[c]="err_objc_subscript_key_type",
[b]={{nil,E,"err_malformed_std_coroutine_handle"}},
[d]="method key parameter type %0 is not object type",
[i]={{nil,B,"std::coroutine_handle isn\'t a class template"},{w,E,"std::experimental::coroutine_handle must be a class template"}},
[e]="method key parameter type A is not object type",
[j]={{nil,B,"std::coroutine_handle isn\'t a class template"},{w,E,"std::experimental::coroutine_handle must be a class template"}},
[f]=k,
[h]=k,
[g]="method key parameter type (.*?) is not object type",
[c]="std\\:\\:coroutine_handle isn\'t a class template",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,E,qb}},
[b]={jb,1331064356,kb,lb},
[g]={"6dcb0eb301c7",1489028983,"[coroutines] Build and pass coroutine_handle to await_suspend","[coroutines] Build and pass coroutine_handle to await_suspend\n\nSummary:\nThis patch adds passing a coroutine_handle object to await_suspend calls.\nIt builds the coroutine_handle using coroutine_handle<PromiseType>::from_address(__builtin_coro_frame()).\n\n(a revision of https://reviews.llvm.org/D26316 that for some reason refuses to apply via arc patch)\n\nReviewers: GorNishanov\n\nSubscribers: mehdi_amini, cfe-commits, EricWF\n\nDifferential Revision: https://reviews.llvm.org/D30769\n\nllvm-svn: 297356"},
[j]={{P,1230,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n // ...\n if (AtIndexGetter) {\n   // ...\n   if ((arrayRef && !T->isIntegralOrEnumerationType()) || (!arrayRef && !T->isObjCObjectPointerType())) {\n      S.Diag(RefExpr->getKeyExpr()->getExprLoc(), arrayRef ? diag::err_objc_subscript_index_type : diag::err_objc_subscript_key_type) << T;"},{P,1366,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n  // ...\n  } else if (AtIndexSetter && !arrayRef)\n    for (unsigned i = 0; i < 2; i++) {\n      // ...\n     if (!T->isObjCObjectPointerType()) {\n        if (i == 1)\n          S.Diag(RefExpr->getKeyExpr()->getExprLoc(), diag::err_objc_subscript_key_type) << T;"}},
[d]={{gb,160,"/// Look up the std::coroutine_handle<PromiseType>.\nstatic QualType lookupCoroutineHandleType(Sema &S, QualType PromiseType, SourceLocation Loc) {\n  // ...\n  if (!CoroHandle) {\n    // ...\n   S.Diag(Found->getLocation(), diag::err_malformed_std_coroutine_handle);"}}
[l]={
[lc]={"clang/test/SemaObjC/objc-container-subscripting.m:39:26: error: method key parameter type \'id *\' is not object type","clang/test/SemaObjC/objc-container-subscripting.m:40:14: error: method key parameter type \'id *\' is not object type"}
}
},
},
["err_objc_subscript_method_not_found"]={
["err_malformed_std_coroutine_traits"]={
[c]="err_objc_subscript_method_not_found",
[b]="err_malformed_std_coroutine_traits",
[d]="expected method to %select{read|write}1 %select{dictionary|array}2 element not found on object of type %0",
[i]={{nil,B,"std::coroutine_traits isn\'t a class template"},{w,nil,"\'std::experimental::coroutine_traits\' must be a class template"}},
[e]={{nil,nil,{"expected method to ",{"read","write"}," ",{"dictionary","array"}," element not found on object of type A"}}},
[j]={{nil,B,"std::coroutine_traits isn\'t a class template"},{w,nil,"\'std::experimental::coroutine_traits\' must be a class template"}},
[f]=k,
[h]=k,
[g]="expected method to (?:read|write) (?:dictionary|array) element not found on object of type (.*?)",
[c]="std\\:\\:coroutine_traits isn\'t a class template",
[h]=a,
[f]=a,
[i]=m,
[e]=qb,
[b]={jb,1331064356,kb,lb},
[g]={"9f690bd80bb6",1445925765,"[coroutines] Creation of promise object, lookup of operator co_await, building","[coroutines] Creation of promise object, lookup of operator co_await, building\nof await_* calls, and AST representation for same.\n\nllvm-svn: 251387"},
[j]={{P,1214,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n if (!AtIndexGetter) {\n    if (!BaseT->isObjCIdType()) {\n      S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_method_not_found) << BaseExpr->getType() << 0 << arrayRef;"},{P,1331,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (!AtIndexSetter) {\n    if (!BaseT->isObjCIdType()) {\n     S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_method_not_found) << BaseExpr->getType() << 1 << arrayRef;"}},
[d]={{gb,1,"ClassTemplateDecl *Sema::lookupCoroutineTraits(SourceLocation KwLoc, SourceLocation FuncLoc) {\n  // ...\n  if (!StdCoroutineTraitsCache) {\n    // ...\n   Diag(Found->getLocation(), diag::err_malformed_std_coroutine_traits);"}}
[l]={
[lc]={"clang/test/SemaObjC/objc-container-subscripting.m:20:3: error: expected method to write array element not found on object of type \'I *\'","clang/test/SemaObjC/objc-container-subscripting.m:21:10: error: expected method to read array element not found on object of type \'I *\'"}
}
},
},
["err_objc_subscript_object_type"]={
["err_malformed_std_initializer_list"]={
[c]="err_objc_subscript_object_type",
[b]="err_malformed_std_initializer_list",
[d]="cannot assign to this %select{dictionary|array}1 because assigning method\'s 2nd parameter of type %0 is not an Objective-C pointer type",
[i]="std::initializer_list must be a class template with a single type parameter",
[e]={{nil,nil,{"cannot assign to this ",{"dictionary","array"}," because assigning method\'s 2nd parameter of type A is not an Objective-C pointer type"}}},
[j]="std::initializer_list must be a class template with a single type parameter",
[f]=k,
[h]=k,
[g]="cannot assign to this (?:dictionary|array) because assigning method\'s 2nd parameter of type (.*?) is not an Objective\\-C pointer type",
[c]="std\\:\\:initializer_list must be a class template with a single type parameter",
[h]=a,
[f]=a,
[i]=m,
[e]=m,
[b]={jb,1331064356,kb,lb},
[g]={"42acd4a05b52",1326840608,"Auto deduction support for std::initializer_list, including for-range support. This means you can no...","Auto deduction support for std::initializer_list, including for-range support. This means you can now write:\n\nfor (int i : {1, 4, 512, 23, 251}) {}\n\nllvm-svn: 148353"},
[j]={{P,1354,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n    // ...\n    if (!T->isObjCObjectPointerType()) {\n      S.Diag(RefExpr->getBaseExpr()->getExprLoc(), diag::err_objc_subscript_object_type) << T << arrayRef;"}},
[d]={{t,11809,"static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc) {\n  // ...\n  if (!Template) {\n    // ...\n    S.Diag(Found->getLocation(), diag::err_malformed_std_initializer_list);"},{t,11818,"static ClassTemplateDecl *LookupStdInitializerList(Sema &S, SourceLocation Loc) {\n  // ...\n  if (Params->getMinRequiredArguments() != 1 || !isa<TemplateTypeParmDecl>(Params->getParam(0))) {\n    S.Diag(Template->getLocation(), diag::err_malformed_std_initializer_list);"}}
[l]={
[lc]={"clang/test/SemaObjC/objc-container-subscripting.m:16:3: error: cannot assign to this array because assigning method\'s 2nd parameter of type \'id *\' is not an Objective-C pointer type"}
}
},
},
["err_objc_subscript_pointer"]={
["err_malformed_std_nothrow"]={
[c]="err_objc_subscript_pointer",
[b]={{nil,E,"err_malformed_std_nothrow"}},
[d]="indexing expression is invalid because subscript type %0 is not an Objective-C pointer",
[i]={{nil,E,"std::nothrow must be a valid variable declaration"}},
[e]="indexing expression is invalid because subscript type A is not an Objective-C pointer",
[j]={{nil,E,"std::nothrow must be a valid variable declaration"}},
[f]=k,
[h]=k,
[g]="indexing expression is invalid because subscript type (.*?) is not an Objective\\-C pointer",
[c]="std\\:\\:nothrow must be a valid variable declaration",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,E,qb}},
[b]={"ba0afde486f5",1332957409,"objective-c: Improve diagnostics and","objective-c: Improve diagnostics and\nprovide \'fixit\' hint when dictionary index \nis not of proper type. // rdar://11062080\n\nllvm-svn: 153584"},
[g]={"627a63cf5081",1492334399,"[coroutines] Fix building of new/delete expressions when get_return_object_on_allocation_failure() i...","[coroutines] Fix building of new/delete expressions when get_return_object_on_allocation_failure() is present.\n\nSummary:\nThis patch implements [dcl.fct.def.coroutine]p8:\n> The unqualified-id get_return_object_on_allocation_failure is looked up in the scope of\n> class P by class member access lookup (3.4.5). If a declaration is found, ..., and if a \n> global allocation function is selected, the ::operator new(size_t, nothrow_t) form shall be used.\n> [...]\n> The allocation function used in this case must have a non-throwing noexcept-specification.\n\nReviewers: GorNishanov, rsmith, majnemer, aaron.ballman\n\nReviewed By: GorNishanov\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D31562\n\nllvm-svn: 300420"},
[j]={{P,1070,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (!getLangOpts().CPlusPlus || !RecordTy || RecordTy->isIncompleteType()) {\n    // ...\n    if (isa<StringLiteral>(IndexExpr))\n      Diag(FromE->getExprLoc(), diag::err_objc_subscript_pointer) << T << FixItHint::CreateInsertion(FromE->getExprLoc(), \"@\");"}},
[d]={{gb,1029,"/// Look up the std::nothrow object.\nstatic Expr *buildStdNoThrowDeclRef(Sema &S, SourceLocation Loc) {\n  // ...\n  if (!VD) {\n    // ...\n    S.Diag(Found->getLocation(), diag::err_malformed_std_nothrow);"}}
[l]={
["clang/test/SemaObjC/objc-dictionary-literal.m"]={"clang/test/SemaObjC/objc-dictionary-literal.m:50:14: error: indexing expression is invalid because subscript type \'char *\' is not an Objective-C pointer"}
}
},
},
["err_objc_subscript_type_conversion"]={
["err_matrix_incomplete_index"]={
[c]="err_objc_subscript_type_conversion",
[b]={{nil,o,"err_matrix_incomplete_index"}},
[d]="indexing expression is invalid because subscript type %0 is not an integral or Objective-C pointer type",
[i]={{nil,o,"single subscript expressions are not allowed for matrix values"}},
[e]="indexing expression is invalid because subscript type A is not an integral or Objective-C pointer type",
[j]={{nil,o,"single subscript expressions are not allowed for matrix values"}},
[f]=k,
[h]=k,
[g]="indexing expression is invalid because subscript type (.*?) is not an integral or Objective\\-C pointer type",
[c]="single subscript expressions are not allowed for matrix values",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,o,v}},
[b]={jb,1331064356,kb,lb},
[g]={hb,1576908663,ib,fb},
[j]={{P,1073,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (!getLangOpts().CPlusPlus || !RecordTy || RecordTy->isIncompleteType()) {\n    // ...\n    if (isa<StringLiteral>(IndexExpr))\n    // ...\n    else\n      Diag(FromE->getExprLoc(), diag::err_objc_subscript_type_conversion) << T;"},{P,1109,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (NoIntegrals == 0 && NoObjCIdPointers == 0) {\n    // ...\n    Diag(FromE->getExprLoc(), diag::err_objc_subscript_type_conversion) << FromE->getType();"}},
[d]={{q,21634,"/// 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::IncompleteMatrixIdx:\n    Diag(cast<MatrixSubscriptExpr>(E->IgnoreParens())->getRowIdx()->getBeginLoc(), diag::err_matrix_incomplete_index);"}},
[l]={
[l]={
["clang/test/SemaObjC/objc-container-subscripting-2.m"]={"clang/test/SemaObjC/objc-container-subscripting-2.m:19:9: error: indexing expression is invalid because subscript type \'float\' is not an integral or Objective-C pointer type","clang/test/SemaObjC/objc-container-subscripting-2.m:20:16: error: indexing expression is invalid because subscript type \'double\' is not an integral or Objective-C pointer type"}
["clang/test/Sema/matrix-type-operators.c"]={"clang/test/Sema/matrix-type-operators.c:171:5: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:174:6: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:181:16: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:186:17: error: single subscript expressions are not allowed for matrix values","clang/test/Sema/matrix-type-operators.c:223:17: error: single subscript expressions are not allowed for matrix values"}
}
}
},
},
["err_objc_synchronized_expects_object"]={
["err_matrix_index_not_integer"]={
[c]="err_objc_synchronized_expects_object",
[b]={{nil,o,"err_matrix_index_not_integer"}},
[d]="@synchronized requires an Objective-C object type (%0 invalid)",
[i]={{nil,o,"matrix %select{row|column}0 index is not an integer"}},
[e]="@synchronized requires an Objective-C object type (A invalid)",
[j]={{nil,o,{"matrix ",{"row","column"}," index is not an integer"}}},
[f]=k,
[h]=k,
[g]="@synchronized requires an Objective\\-C object type \\((.*?) invalid\\)",
[c]="matrix (?:row|column) index is not an integer",
[h]=a,
[f]=a,
[i]=m,
[e]={{nil,o,v}},
[b]={Bb,1480718311,Ab,zb},
[g]={hb,1576908663,ib,fb},
[j]={{F,4313,"ExprResult Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {\n  // ...\n  if (!type->isDependentType() && !type->isObjCObjectPointerType()) {\n    // ...\n   if (!pointerType || !pointerType->getPointeeType()->isVoidType()) {\n     if (getLangOpts().CPlusPlus) {\n       if (RequireCompleteType(atLoc, type, diag::err_incomplete_receiver_type))\n          return Diag(atLoc, diag::err_objc_synchronized_expects_object) << type << operand->getSourceRange();"},{F,4320,"ExprResult Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {\n  // ...\n  if (!type->isDependentType() && !type->isObjCObjectPointerType()) {\n    // ...\n    if (!pointerType || !pointerType->getPointeeType()->isVoidType()) {\n      if (getLangOpts().CPlusPlus) {\n        // ...\n        if (!result.isUsable())\n          return Diag(atLoc, diag::err_objc_synchronized_expects_object) << type << operand->getSourceRange();"},{F,4325,"ExprResult Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {\n  // ...\n  if (!type->isDependentType() && !type->isObjCObjectPointerType()) {\n   // ...\n    if (!pointerType || !pointerType->getPointeeType()->isVoidType()) {\n      if (getLangOpts().CPlusPlus) {\n      // ...\n      } else {\n        return Diag(atLoc, diag::err_objc_synchronized_expects_object) << type << operand->getSourceRange();"}},
[d]={{q,5171,"ExprResult Sema::CreateBuiltinMatrixSubscriptExpr(Expr *Base, Expr *RowIdx, Expr *ColumnIdx, SourceLocation RBLoc) {\n  // ...\n  // Check that IndexExpr is an integer expression. If it is a constant\n // expression, check that it is less than Dim (= the number of elements in the\n // corresponding dimension).\n auto IsIndexValid = [&](Expr *IndexExpr, unsigned Dim, bool IsColumnIdx) -> Expr * {\n    if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent()) {\n     Diag(IndexExpr->getBeginLoc(), diag::err_matrix_index_not_integer) << IsColumnIdx;"}},
[l]={
[l]={
["clang/test/SemaObjCXX/synchronized.mm"]={"clang/test/SemaObjCXX/synchronized.mm:18:3: error: @synchronized requires an Objective-C object type (\'struct y\' invalid)"}
["clang/test/SemaObjC/matrix-type-operators.m"]={"clang/test/SemaObjC/matrix-type-operators.m:14:12: error: matrix row index is not an integer","clang/test/SemaObjC/matrix-type-operators.m:14:22: error: matrix column index is not an integer"}
}
},
["err_objc_throw_expects_object"]={
[c]="err_objc_throw_expects_object",
[d]="@throw requires an Objective-C object type (%0 invalid)",
[e]="@throw requires an Objective-C object type (A invalid)",
[f]=k,
[g]="@throw requires an Objective\\-C object type \\((.*?) invalid\\)",
[h]=a,
[i]=m,
[b]={Bb,1480718311,Ab,zb},
[j]={{F,4271,"StmtResult Sema::BuildObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw) {\n  if (Throw) {\n    // ...\n    // Make sure the expression type is an ObjC pointer or \"void *\".\n    if (!ThrowType->isDependentType() && !ThrowType->isObjCObjectPointerType()) {\n      // ...\n      if (!PT || !PT->getPointeeType()->isVoidType())\n        return StmtError(Diag(AtLoc, diag::err_objc_throw_expects_object) << Throw->getType() << Throw->getSourceRange());"}},
[l]={
["clang/test/SemaObjC/try-catch.m"]={"clang/test/SemaObjC/try-catch.m:48:3: error: @throw requires an Objective-C object type (\'int\' invalid)","clang/test/SemaObjC/try-catch.m:49:3: error: @throw requires an Objective-C object type (\'struct s\' invalid)","clang/test/SemaObjC/try-catch.m:50:3: error: @throw requires an Objective-C object type (\'struct s *\' invalid)"}
}
},
["err_objc_type_arg_does_not_match_bound"]={
[c]="err_objc_type_arg_does_not_match_bound",
[d]="type argument %0 does not satisfy the bound (%1) of type parameter %2",
[e]="type argument A does not satisfy the bound (B) of type parameter C",
[f]=k,
[g]="type argument (.*?) does not satisfy the bound \\((.*?)\\) of type parameter (.*?)",
[h]=a,
[i]=w,
[b]={"e9d95f1ecc98",1436241455,"Handle Objective-C type arguments.","Handle Objective-C type arguments.\n\nObjective-C type arguments can be provided in angle brackets following\nan Objective-C interface type. Syntactically, this is the same\nposition as one would provide protocol qualifiers (e.g.,\nid<NSCopying>), so parse both together and let Sema sort out the\nambiguous cases. This applies both when parsing types and when parsing\nthe superclass of an Objective-C class, which can now be a specialized\ntype (e.g., NSMutableArray<T> inherits from NSArray<T>).\n\nCheck Objective-C type arguments against the type parameters of the\ncorresponding class. Verify the length of the type argument list and\nthat each type argument satisfies the corresponding bound.\n\nSpecializations of parameterized Objective-C classes are represented\nin the type system as distinct types. Both specialized types (e.g.,\nNSArray<NSString *> *) and unspecialized types (NSArray *) are\nrepresented, separately.\n\nllvm-svn: 241542"},
[j]={{cb,969,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    // ...\n    // Objective-C object pointer types must be substitutable for the bounds.\n    if (const auto *typeArgObjC = typeArg->getAs<ObjCObjectPointerType>()) {\n      // ...\n      S.Diag(typeArgInfo->getTypeLoc().getBeginLoc(), diag::err_objc_type_arg_does_not_match_bound) << typeArg << bound << typeParam->getDeclName();"},{cb,997,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    // ...\n    // Block pointer types are permitted for unqualified \'id\' bounds.\n    if (typeArg->isBlockPointerType()) {\n      // ...\n      S.Diag(typeArgInfo->getTypeLoc().getBeginLoc(), diag::err_objc_type_arg_does_not_match_bound) << typeArg << bound << typeParam->getDeclName();"}},
[l]={
[oc]={"clang/test/SemaObjC/parameterized_classes.m:272:14: error: type argument \'NSObject *\' does not satisfy the bound (\'id<NSCopying>\') of type parameter \'V\'","clang/test/SemaObjC/parameterized_classes.m:275:14: error: type argument \'id\' does not satisfy the bound (\'NSObject *\') of type parameter \'U\'","clang/test/SemaObjC/parameterized_classes.m:279:14: error: type argument \'id\' does not satisfy the bound (\'id<NSCopying>\') of type parameter \'V\'","clang/test/SemaObjC/parameterized_classes.m:323:29: error: type argument \'T\' (aka \'id\') does not satisfy the bound (\'NSObject *\') of type parameter \'U\'"}
}
}
}
}
};
};
Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557

edits

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

Navigation menu