Module:ClangDiags/DiagsLongData7: 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="id_hist";
local b="source";
local c="message_hist";
local c="regex2";
local d="hierarchical_hist";
local d="id_hist";
local e="regex1";
local e="message_hist";
local f="commit";
local f="commit";
local g="regex2";
local g="category_hist";
local h="regex3";
local h="regex3";
local i="category_hist";
local i="hierarchical_hist";
local j="source";
local j="regex1";
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="clang/lib/Sema/SemaExpr.cpp";
local n="clang/lib/Sema/SemaOpenMP.cpp";
local o="clang/lib/Sema/SemaTemplate.cpp";
local o="OpenMP Issue";
local p="5a8987ca5113";
local p="11.0";
local q="Update tablegen diagnostic files to be in sync with the def files.";
local q="5.0";
local r="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local r="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local s="11.0";
local s="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 t="clang/lib/Sema/SemaDecl.cpp";
local t="b1c4d5507fad";
local u="10.0";
local u="8.0";
local v="12.0";
local v="9.0";
local w="clang/lib/Sema/SemaChecking.cpp";
local w="10.0";
local x="15.0";
local x="Lexical or Preprocessor Issue";
local y="None";
local y="clang/lib/Sema/SemaDeclCXX.cpp";
local z="14.0";
local z="7.0";
local A="6.0";
local A="clang/lib/Sema/SemaChecking.cpp";
local B="13.0";
local B="clang/lib/Sema/SemaOverload.cpp";
local C="clang/lib/Sema/SemaDeclCXX.cpp";
local C="13.0";
local D="16.0";
local D="clang/lib/Serialization/ASTReader.cpp";
local E="5.0";
local E="clang/lib/Sema/SemaExpr.cpp";
local F="clang/lib/Sema/SemaType.cpp";
local F="6.0";
local G="Parse Issue";
local G="clang/lib/Sema/SemaDecl.cpp";
local H="7.0";
local H="clang/lib/Sema/SemaType.cpp";
local I="9.0";
local I="clang/lib/Lex/PPDirectives.cpp";
local J="clang/lib/Sema/SemaExprCXX.cpp";
local J="15.0";
local K="clang/test/SemaSYCL/zero-length-arrays.cpp:9:3: error: zero-length arrays are not permitted in SYCL device code";
local K="Parse Issue";
local L="function";
local L="clang/lib/Parse/ParseOpenMP.cpp";
local M="clang/lib/Sema/SemaDeclAttr.cpp";
local M="14.0";
local N="[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 N="clang/lib/Sema/SemaExprCXX.cpp";
local O="[WebAssembly] Improve clang diagnostics for wasm attributes";
local O="16.0";
local P="method";
local P="AST Deserialization Issue";
local Q="931fcd3ba011";
local Q="clang/lib/Sema/SemaDeclAttr.cpp";
local R="8.0";
local R="clang/lib/Lex/PPExpressions.cpp";
local S="clang/lib/Sema/SemaStmt.cpp";
local S="clang/lib/Lex/PPMacroExpansion.cpp";
local T="kernel function";
local T="clang/lib/Lex/Pragma.cpp";
local U="block";
local U="clang/test/SemaOpenCL/invalid-block.cl";
local V="execution configuration ";
local V="None";
local W="arguments to ";
local W="931fcd3ba011";
local X="casting A to type B";
local X="[WebAssembly] Improve clang diagnostics for wasm attributes";
local Y="converting between types";
local Y="[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 Z="clang/lib/Parse/ParseDecl.cpp";
local Z="clang/lib/Basic/Targets/PPC.cpp";
local ab="converting A to type B";
local ab="clang/lib/Sema/SemaTemplateVariadic.cpp";
local bb="returning from function with different return type";
local bb="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local cb="returning A from a function with result type B";
local cb="clang/lib/Sema/SemaCast.cpp";
local db="initializing A with an expression of type B";
local db="Update tablegen diagnostic files to be in sync with the def files.";
local eb="passing to parameter of different type";
local eb="5a8987ca5113";
local fb="passing A to parameter of type B";
local fb="clang/lib/Sema/SemaTemplate.cpp";
local gb="assigning to different types";
local gb="clang/test/SemaCXX/overloaded-operator-decl.cpp";
local hb="clang/lib/Sema/SemaExprMember.cpp";
local hb="12.0";
local ib="initializing with expression of different type";
local ib="clang/lib/Parse/ParseDecl.cpp";
local jb="sending A to parameter of type B";
local jb="expected \'begin\' or \'end\'";
local kb="sending to parameter of different type";
local kb="clang/lib/Sema/SemaInit.cpp";
local lb="casting between types";
local lb="clang/test/SemaOpenCL/cl20-device-side-enqueue.cl";
local mb="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local mb="C-style cast";
local nb="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 nb="a769e07232d2";
local ob="b1c4d5507fad";
local ob="OpenMP threadprivate directive parsing and semantic analysis";
local pb="clang/lib/Sema/SemaInit.cpp";
local pb="OpenMP threadprivate directive parsing and semantic analysis\n\nllvm-svn: 177705";
local qb="Implement P2361 Unevaluated string literals";
local qb="static_cast";
local rb="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 rb="functional-style cast";
local sb="95f50964fbf5";
local sb="dynamic_cast";
local tb="11.1";
local tb="reinterpret_cast";
local ub="copying temporary";
local ub="clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp";
local vb="clang/lib/Sema/SemaOverload.cpp";
local vb="[OPENMP 4.0] Initial support for array sections.";
local wb="allocating object";
local wb="[OpenCL] Apply missing restrictions for Blocks in OpenCL v2.0\n\nApplying the following restrictions for block types in OpenCL (v2.0 s6.12.5):\n - __block storage class is disallowed\n - every block declaration must be const qualified and initialized\n - a block can\'t be used as a return type of a function\n - a blocks can\'t be used to declare a structure or union field\n - extern speficier is disallowed\n\nCorrected image and sampler types diagnostics with struct and unions.\n\nReview: http://reviews.llvm.org/D16928\nllvm-svn: 262616";
local xb="initializing base subobject";
local xb="[OpenCL] Apply missing restrictions for Blocks in OpenCL v2.0";
local yb="initializing vector element";
local yb="1f95cc097c2b";
local zb="copying array element";
local zb="[OPENMP 4.0] Initial support for array sections.\n\nAdds parsing/sema analysis/serialization/deserialization for array sections in OpenMP constructs (introduced in OpenMP 4.0).\nCurrently it is allowed to use array sections only in OpenMP clauses that accepts list of expressions.\nDifferential Revision: http://reviews.llvm.org/D10732\n\nllvm-svn: 245937";
local Ab="clang/lib/Parse/Parser.cpp";
local Ab="clang/test/OpenMP/declare_simd_messages.cpp";
local Bb="capturing value";
local Bb="1a3320e4639c";
local Cb="copying member subobject";
local Cb="clang/test/OpenMP/threadprivate_messages.cpp";
local Db="throwing object";
local Db="Improve diagnostics for malformed delete operator function declarations.\n\nllvm-svn: 91180";
local Eb="returning object";
local Eb="deleted";
local Fb="copying parameter";
local Fb="Improve diagnostics for malformed delete operator function declarations.";
local Gb="copying variable";
local Gb="[OpenCL] An implementation of device side enqueue (DSE) from OpenCL v2.0 s6.13.17.";
local Hb="clang/test/Sema/fp-eval-pragma-with-float-double_t-1.c:28:15: error: cannot use type \'float_t\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit";
local Hb="[OpenCL] An implementation of device side enqueue (DSE) from OpenCL v2.0 s6.13.17.\n\n- Added new Builtins: enqueue_kernel, get_kernel_work_group_size\nand get_kernel_preferred_work_group_size_multiple.\n\nThese Builtins use custom check to diagnose parameters of the passed Blocks\ni. e. variable number of \'local void*\' type params, and check different\noverloads specified in Table 6.31 of OpenCL v2.0.\n\n- IR is generated as an internal library call for each OpenCL Builtin,\nreusing ObjC Block implementation.\n\nReview: http://reviews.llvm.org/D20249\nllvm-svn: 274540";
local Ib="clang/test/Sema/fp-eval-pragma-with-float-double_t-1.c:30:16: error: cannot use type \'double_t\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit";
local Ib="db7a31cce7b3";
local Jb="clang/lib/Sema/SemaObjCProperty.cpp";
local Jb="12308f41e7e2";
local Kb="assigning to A from B";
local Kb="7.1";
local Lb="class";
local Lb="unavailable";
local Mb="clang/lib/Sema/SemaCast.cpp";
local Nb="[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 Ob="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local Pb=" (A and B)";
local Qb="14f6bfcb52e7";
local Rb="<unused>";
local Sb="clang/lib/Parse/ParseDeclCXX.cpp";
local Tb="clang/lib/Sema/Sema.cpp";
local Ub="function template";
local Vb="class template";
local Wb="; dereference with *";
local Xb="; remove *";
local Yb="clang/lib/Sema/SemaAttr.cpp";
local Zb="initializing statement expression result";
local ac="61d065e21ff3";
local bc="too few ";
local cc="clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp";
local dc=" of type B";
local ec="too many ";
local fc="Let clang atomic builtins fetch add/sub support floating point types";
local gc="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";
local hc="template";
local ic="; take the address with &";
local jc="variable template";
local kc="; remove &";
local lc="[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module  M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace.  We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119";
local mc="f60dc3caa673";
local nc="clang/lib/Lex/PPMacroExpansion.cpp";
local oc="struct";
local pc="interface";
local qc="clang/lib/Driver/ToolChains/Arch/ARM.cpp";
local rc="union";
local sc="alignof";
local tc="sizeof";
local uc="s";
local vc="clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp";
local wc="clang/lib/Basic/Targets.cpp";
local xc="enum";
local yc="[C++20][Modules] Adjust handling of exports of namespaces and using-decls.";


return {
return {
["err_sampler_initializer_not_integer"]={
["err_omp_parent_cancel_region_ordered"]={
[b]="err_sampler_initializer_not_integer",
[d]="err_omp_parent_cancel_region_ordered",
[c]="sampler_t initialization requires 32-bit integer, not %0",
[e]={{nil,F,"parent region for \'omp %select{cancellation point|cancel}0\' construct cannot be ordered"},{q,nil,"parent region for \'omp %select{cancellation point/cancel}0\' construct cannot be ordered"}},
[d]="sampler_t initialization requires 32-bit integer, not A",
[i]={{nil,F,{"parent region for \'omp ",{"cancellation point","cancel"},"\' construct cannot be ordered"}},{q,nil,{"parent region for \'omp ",{"cancellation point/cancel"},"\' construct cannot be ordered"}}},
[e]=k,
[j]=k,
[g]="sampler_t initialization requires 32\\-bit integer, not (.*?)",
[c]="parent region for \'omp (?:cancellation point|cancel)\' construct cannot be ordered",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"0bc4b2d33731",1469733990,"[OpenCL] Generate opaque type for sampler_t and function call for the initializer","[OpenCL] Generate opaque type for sampler_t and function call for the initializer\n\nCurrently Clang use int32 to represent sampler_t, which have been a source of issue for some backends, because in some backends sampler_t cannot be represented by int32. They have to depend on kernel argument metadata and use IPA to find the sampler arguments and global variables and transform them to target specific sampler type.\n\nThis patch uses opaque pointer type opencl.sampler_t* for sampler_t. For each use of file-scope sampler variable, it generates a function call of __translate_sampler_initializer. For each initialization of function-scope sampler variable, it generates a function call of __translate_sampler_initializer.\n\nEach builtin library can implement its own __translate_sampler_initializer(). Since the real sampler type tends to be architecture dependent, allowing it to be initialized by a library function simplifies backend design. A typical implementation of __translate_sampler_initializer could be a table lookup of real sampler literal values. Since its argument is always a literal, the returned pointer is known at compile time and easily optimized to finally become some literal values directly put into image read instructions.\n\nThis patch is partially based on Alexey Sotkin\'s work in Khronos Clang (https://github.com/KhronosGroup/SPIR/commit/3d4eec61623502fc306e8c67c9868be2b136e42b).\n\nDifferential Revision: https://reviews.llvm.org/D21567\n\nllvm-svn: 277024"},
[f]={"6d4ed0583033",1435733861,"[OPENMP 4.0] Initial support for \'omp cancellation point\' construct.","[OPENMP 4.0] Initial support for \'omp cancellation point\' construct.\n\nAdd parsing and sema analysis for \'omp cancellation point\' directive.\n\nllvm-svn: 241145"},
[j]={{pb,9345,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  for (step_iterator Step = step_begin(), StepEnd = step_end(); Step != StepEnd; ++Step) {\n    // ...\n    case SK_OCLSamplerInit: {\n     // ...\n      // Case 1\n      if (Entity.isParameterKind()) {\n     // ...\n     } else {\n        // ...\n        if (!SourceType->isIntegerType() || 32 != S.Context.getIntWidth(SourceType)) {\n         S.Diag(Kind.getLocation(), diag::err_sampler_initializer_not_integer) << SourceType;"}},
[b]={{n,13369,"StmtResult Sema::ActOnOpenMPCancellationPointDirective(SourceLocation StartLoc, SourceLocation EndLoc, OpenMPDirectiveKind CancelRegion) {\n  // ...\n  if (DSAStack->isParentOrderedRegion()) {\n    Diag(StartLoc, diag::err_omp_parent_cancel_region_ordered) << 0;"},{n,13385,"StmtResult Sema::ActOnOpenMPCancelDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc, OpenMPDirectiveKind CancelRegion) {\n // ...\n if (DSAStack->isParentOrderedRegion()) {\n   Diag(StartLoc, diag::err_omp_parent_cancel_region_ordered) << 1;"}}
[l]={
["clang/test/SemaOpenCL/sampler_t.cl"]={"clang/test/SemaOpenCL/sampler_t.cl:38:20: error: sampler_t initialization requires 32-bit integer, not \'long long\'","clang/test/SemaOpenCL/sampler_t.cl:58:19: error: sampler_t initialization requires 32-bit integer, not \'long long\'"}
}
},
},
["err_scoped_enum_missing_identifier"]={
["err_omp_pointer_mapped_along_with_derived_section"]={
[b]="err_scoped_enum_missing_identifier",
[d]="err_omp_pointer_mapped_along_with_derived_section",
[c]="scoped enumeration requires a name",
[e]="pointer cannot be mapped along with a section derived from itself",
[d]="scoped enumeration requires a name",
[i]="pointer cannot be mapped along with a section derived from itself",
[e]=k,
[j]=k,
[g]="scoped enumeration requires a name",
[c]="pointer cannot be mapped along with a section derived from itself",
[h]=a,
[h]=a,
[i]=G,
[g]=o,
[f]={"0bf3140424a0",1286581827,"Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a","Implement C++0x scoped enumerations, from Daniel Wallin! (and tweaked a\nbit by me). \n\nllvm-svn: 116122"},
[f]={"5de996e3bd79",1453494096,"[OpenMP] Update map clause SEMA to support OpenMP 4.5 possible list items.","[OpenMP] Update map clause SEMA to support OpenMP 4.5 possible list items.\n\nSummary:\nExtend support in the map clause SEMA for the expressions supported in the OpenMP 4.5 specification, namely member expressions. \n\nFix some bugs in the previous implementation of SEMA related with expressions that do not consist of single variable references.\n\nFix bug in parsing when the expression in the map clause do not start with an identifier: accept any expression in the map clause and check for validity in SEMA instead of just ignoring it.\n\nReviewers: hfinkel, kkwli0, arpith-jacob, carlo.bertolli, ABataev\n\nSubscribers: cfe-commits, fraggamuffin, caomhin\n\nDifferential Revision: http://reviews.llvm.org/D16385\n\nllvm-svn: 258543"},
[j]={{Z,4873,"/// 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  if (!Name && ScopedEnumKWLoc.isValid()) {\n   // ...\n    Diag(Tok, diag::err_scoped_enum_missing_identifier);"}},
[b]={{n,21598,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n // ...\n  bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n   // ...\n   // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, C/C++, p.1]\n   // A variable for which the type is pointer and an array section\n   // derived from that variable must not appear as list items of map\n   // clauses of the same construct.\n   //\n   // Also, cover one of the cases in:\n   // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.5]\n   // If any part of the original storage of a list item has corresponding\n   // storage in the device data environment, all of the original storage\n   // must have corresponding storage in the device data environment.\n   //\n    if (DerivedType->isAnyPointerType()) {\n     if (CI == CE || SI == SE) {\n       SemaRef.Diag(DerivedLoc, diag::err_omp_pointer_mapped_along_with_derived_section) << DerivedLoc;"}},
[l]={
[l]={
["clang/test/CXX/drs/dr6xx.cpp"]={"clang/test/CXX/drs/dr6xx.cpp:743:14: error: scoped enumeration requires a name","clang/test/CXX/drs/dr6xx.cpp:748:16: error: scoped enumeration requires a name"}
["clang/test/OpenMP/target_has_device_addr_messages.cpp"]={"clang/test/OpenMP/target_has_device_addr_messages.cpp:193:44: error: pointer cannot be mapped along with a section derived from itself","clang/test/OpenMP/target_has_device_addr_messages.cpp:262:44: error: pointer cannot be mapped along with a section derived from itself"}
}
}
},
},
["err_second_argument_to_cwsc_not_pointer"]={
["err_omp_predefined_allocator_with_traits"]={
[b]="err_second_argument_to_cwsc_not_pointer",
[d]={{nil,p,"err_omp_predefined_allocator_with_traits"}},
[c]="second argument to __builtin_call_with_static_chain must be of pointer type",
[e]={{nil,p,"predefined allocator cannot have traits specified"}},
[d]="second argument to __builtin_call_with_static_chain must be of pointer type",
[i]={{nil,p,"predefined allocator cannot have traits specified"}},
[e]=k,
[j]=k,
[g]="second argument to __builtin_call_with_static_chain must be of pointer type",
[c]="predefined allocator cannot have traits specified",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,p,o}},
[f]={"f770683f14f9",1418427685,"Implement the __builtin_call_with_static_chain GNU extension.","Implement the __builtin_call_with_static_chain GNU extension.\n\nThe extension has the following syntax:\n\n  __builtin_call_with_static_chain(Call, Chain)\n where Call must be a function call expression and Chain must be of pointer type\n\nThis extension performs a function call Call with a static chain pointer\nChain passed to the callee in a designated register. This is useful for\ncalling foreign language functions whose ABI uses static chain pointers\n(e.g. to implement closures).\n\nDifferential Revision: http://reviews.llvm.org/D6332\n\nllvm-svn: 224167"},
[f]={W,1576908663,X,Y},
[j]={{w,770,"static bool SemaBuiltinCallWithStaticChain(Sema &S, CallExpr *BuiltinCall) {\n // ...\n if (!ChainResult.get()->getType()->isPointerType()) {\n    S.Diag(BuiltinLoc, diag::err_second_argument_to_cwsc_not_pointer) << Chain->getSourceRange();"}},
[b]={{n,23911,"OMPClause *Sema::ActOnOpenMPUsesAllocatorClause(SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc, ArrayRef<UsesAllocatorsData> Data) {\n // ...\n  for (const UsesAllocatorsData &D : Data) {\n    // ...\n   // Check allocator expression.\n   if (D.Allocator->isTypeDependent()) {\n   // ...\n   } else {\n      // ...\n     // OpenMP [2.12.5, target Construct]\n     // Predefined allocators appearing in a uses_allocators clause cannot have\n      // traits specified.\n     if (IsPredefinedAllocator && D.AllocatorTraits) {\n        Diag(D.AllocatorTraits->getExprLoc(), diag::err_omp_predefined_allocator_with_traits) << D.AllocatorTraits->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/call-with-static-chain.c"]={"clang/test/Sema/call-with-static-chain.c:10:3: error: second argument to __builtin_call_with_static_chain must be of pointer type"}
["clang/test/OpenMP/target_uses_allocators_messages.cpp"]={"clang/test/OpenMP/target_uses_allocators_messages.cpp:37:58: error: predefined allocator cannot have traits specified","clang/test/OpenMP/target_uses_allocators_messages.cpp:37:91: error: predefined allocator cannot have traits specified","clang/test/OpenMP/target_uses_allocators_messages.cpp:37:120: error: predefined allocator cannot have traits specified","clang/test/OpenMP/target_uses_allocators_messages.cpp:37:151: error: predefined allocator cannot have traits specified","clang/test/OpenMP/target_uses_allocators_messages.cpp:37:182: error: predefined allocator cannot have traits specified","clang/test/OpenMP/target_uses_allocators_messages.cpp:37:212: error: predefined allocator cannot have traits specified","clang/test/OpenMP/target_uses_allocators_messages.cpp:37:241: error: predefined allocator cannot have traits specified","clang/test/OpenMP/target_uses_allocators_messages.cpp:37:271: error: predefined allocator cannot have traits specified"}
}
}
},
},
["err_second_parameter_to_va_arg_abstract"]={
["err_omp_private_incomplete_type"]={
[b]="err_second_parameter_to_va_arg_abstract",
[d]="err_omp_private_incomplete_type",
[c]="second argument to \'va_arg\' is of abstract type %0",
[e]="a private variable with incomplete type %0",
[d]="second argument to \'va_arg\' is of abstract type A",
[i]="a private variable with incomplete type A",
[e]=k,
[j]=k,
[g]="second argument to \'va_arg\' is of abstract type (.*?)",
[c]="a private variable with incomplete type (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg","Properly diagnose using abstract and incomplete types in va_arg\n\n- Move a test from test/SemaTemplate/instantiate-expr-3.cpp, it did not belong there\n- Incomplete and abstract types are considered hard errors\n\nllvm-svn: 132979"},
[f]={"5ec3eb11fcb8",1374203623,"OpenMP: basic support for #pragma omp parallel","OpenMP: basic support for #pragma omp parallel\n\nllvm-svn: 186647"},
[j]={{n,17233,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n  // ...\n  if (!TInfo->getType()->isDependentType()) {\n    // ...\n    if (RequireNonAbstractType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_abstract, TInfo->getTypeLoc()))"}},
[b]={{n,18077,"OMPClause *Sema::ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (RequireCompleteType(ELoc, Type, diag::err_omp_private_incomplete_type))"}},
[l]={
[l]={
["clang/test/SemaCXX/vararg-non-pod.cpp"]={"clang/test/SemaCXX/vararg-non-pod.cpp:188:32: error: second argument to \'va_arg\' is of abstract type \'Abstract\'"}
["clang/test/OpenMP/target_teams_private_messages.cpp"]={"clang/test/OpenMP/target_teams_private_messages.cpp:88:35: error: a private variable with incomplete type \'S1\'"}
}
}
},
},
["err_second_parameter_to_va_arg_incomplete"]={
["err_omp_prohibited_region"]={
[b]="err_second_parameter_to_va_arg_incomplete",
[d]="err_omp_prohibited_region",
[c]="second argument to \'va_arg\' is of incomplete type %0",
[e]={{nil,p,"region cannot be%select{| closely}0 nested inside \'%1\' region%select{|; perhaps you forget to enclose \'omp %3\' directive into a parallel region?|; perhaps you forget to enclose \'omp %3\' directive into a for or a parallel for region with \'ordered\' clause?|; perhaps you forget to enclose \'omp %3\' directive into a target region?|; perhaps you forget to enclose \'omp %3\' directive into a teams region?|; perhaps you forget to enclose \'omp %3\' directive into a for, simd, for simd, parallel for, or parallel for simd region?}2"},{w,nil,"region cannot be%select{| closely}0 nested inside \'%1\' region%select{|; perhaps you forget to enclose \'omp %3\' directive into a parallel region?|; perhaps you forget to enclose \'omp %3\' directive into a for or a parallel for region with \'ordered\' clause?|; perhaps you forget to enclose \'omp %3\' directive into a target region?|; perhaps you forget to enclose \'omp %3\' directive into a teams region?}2"}},
[d]="second argument to \'va_arg\' is of incomplete type A",
[i]={{nil,p,{"region cannot be",{a," closely"}," nested inside \'B\' region",{a,"; perhaps you forget to enclose \'omp D\' directive into a parallel region?","; perhaps you forget to enclose \'omp D\' directive into a for or a parallel for region with \'ordered\' clause?","; perhaps you forget to enclose \'omp D\' directive into a target region?","; perhaps you forget to enclose \'omp D\' directive into a teams region?","; perhaps you forget to enclose \'omp D\' directive into a for, simd, for simd, parallel for, or parallel for simd region?"}}},{w,nil,{"region cannot be",{a," closely"}," nested inside \'B\' region",{a,"; perhaps you forget to enclose \'omp D\' directive into a parallel region?","; perhaps you forget to enclose \'omp D\' directive into a for or a parallel for region with \'ordered\' clause?","; perhaps you forget to enclose \'omp D\' directive into a target region?","; perhaps you forget to enclose \'omp D\' directive into a teams region?"}}}},
[e]=k,
[j]=k,
[g]="second argument to \'va_arg\' is of incomplete type (.*?)",
[c]="region cannot be(?:| closely) nested inside \'(.*?)\' region(?:|; perhaps you forget to enclose \'omp (.*?)\' directive into a parallel region\\?|; perhaps you forget to enclose \'omp (.*?)\' directive into a for or a parallel for region with \'ordered\' clause\\?|; perhaps you forget to enclose \'omp (.*?)\' directive into a target region\\?|; perhaps you forget to enclose \'omp (.*?)\' directive into a teams region\\?|; perhaps you forget to enclose \'omp (.*?)\' directive into a for, simd, for simd, parallel for, or parallel for simd region\\?)",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"c75d1a10985a",1308028652,"Properly diagnose using abstract and incomplete types in va_arg","Properly diagnose using abstract and incomplete types in va_arg\n\n- Move a test from test/SemaTemplate/instantiate-expr-3.cpp, it did not belong there\n- Incomplete and abstract types are considered hard errors\n\nllvm-svn: 132979"},
[f]={"549210e783c7",1403584787,"[OPENMP] Added initial checking of nesting of OpenMP regions.","[OPENMP] Added initial checking of nesting of OpenMP regions.\n\nllvm-svn: 211566"},
[j]={{n,17226,"ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, Expr *E, TypeSourceInfo *TInfo, SourceLocation RPLoc) {\n  // ...\n if (!TInfo->getType()->isDependentType()) {\n   if (RequireCompleteType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), diag::err_second_parameter_to_va_arg_incomplete, TInfo->getTypeLoc()))"}},
[b]={{n,5238,"static bool checkNestingOfRegions(Sema &SemaRef, const DSAStackTy *Stack, OpenMPDirectiveKind CurrentRegion, const DeclarationNameInfo &CurrentName, OpenMPDirectiveKind CancelRegion, OpenMPBindClauseKind BindKind, SourceLocation StartLoc) {\n  if (Stack->getCurScope()) {\n    // ...\n   if (NestingProhibited) {\n     if (OrphanSeen) {\n      // ...\n      } else {\n        SemaRef.Diag(StartLoc, diag::err_omp_prohibited_region) << CloseNesting << getOpenMPDirectiveName(OffendingRegion) << Recommend << getOpenMPDirectiveName(CurrentRegion);"}},
[l]={
[l]={
["clang/test/Sema/varargs-x86-64.c"]={"clang/test/Sema/varargs-x86-64.c:65:30: error: second argument to \'va_arg\' is of incomplete type \'void\'"}
["clang/test/OpenMP/target_teams_generic_loop_messages.cpp"]={"clang/test/OpenMP/target_teams_generic_loop_messages.cpp:21:5: error: region cannot be closely nested inside \'target teams loop\' region","clang/test/OpenMP/target_teams_generic_loop_messages.cpp:30:5: error: region cannot be closely nested inside \'target teams loop\' region","clang/test/OpenMP/target_teams_generic_loop_messages.cpp:41:5: error: region cannot be closely nested inside \'target teams loop\' region; perhaps you forget to enclose \'omp ordered\' directive into a for or a parallel for region with \'ordered\' clause?","clang/test/OpenMP/target_teams_generic_loop_messages.cpp:48:5: error: region cannot be closely nested inside \'target teams loop\' region; perhaps you forget to enclose \'omp ordered\' directive into a for or a parallel for region with \'ordered\' clause?","clang/test/OpenMP/target_teams_generic_loop_messages.cpp:55:5: error: region cannot be closely nested inside \'target teams loop\' region; perhaps you forget to enclose \'omp ordered\' directive into a for or a parallel for region with \'ordered\' clause?"}
}
}
},
},
["err_section_conflict"]={
["err_omp_prohibited_region_atomic"]={
[b]="err_section_conflict",
[d]="err_omp_prohibited_region_atomic",
[c]="%0 causes a section type conflict with %1",
[e]="OpenMP constructs may not be nested inside an atomic region",
[d]="A causes a section type conflict with B",
[i]="OpenMP constructs may not be nested inside an atomic region",
[e]=k,
[j]=k,
[g]="(.*?) causes a section type conflict with (.*?)",
[c]="OpenMP constructs may not be nested inside an atomic region",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"c3b18967ed07",1396996247,"[MS-ABI] Add support for #pragma section and related pragmas","[MS-ABI] Add support for #pragma section and related pragmas\nThis patch adds support for the msvc pragmas section, bss_seg, code_seg, \nconst_seg and data_seg as well as support for __declspec(allocate()).\n\nAdditionally it corrects semantics and adds diagnostics for \n__attribute__((section())) and the interaction between the attribute \nand the msvc pragmas and declspec.  In general conflicts should now be \nwell diganosed within and among these features.\n\nIn supporting the pragmas new machinery for uniform lexing for \nmsvc pragmas was introduced.  The new machinery always lexes the \nentire pragma and stores it on an annotation token.  The parser \nis responsible for parsing the pragma when the handling the \nannotation token.\n\nThere is a known outstanding bug in this implementation in C mode.  \nBecause these attributes and pragmas apply _only_ to definitions, we \nprocess them at the time we detect a definition.  Due to tentative \ndefinitions in C, we end up processing the definition late.  This means \nthat in C mode, everything that ends up in a BSS section will end up in \nthe _last_ BSS section rather than the one that was live at the time of \ntentative definition, even if that turns out to be the point of actual \ndefinition.  This issue is not known to impact anything as of yet \nbecause we are not aware of a clear use or use case for #pragma bss_seg \nbut should be fixed at some point.\n\nDifferential Revision=http://reviews.llvm.org/D3065#inline-16241 \n\nllvm-svn: 205810"},
[f]={"0162e459efac",1406023835,"[OPENMP] Initial parsing and sema analysis for \'atomic\' directive.","[OPENMP] Initial parsing and sema analysis for \'atomic\' directive.\n\nllvm-svn: 213639"},
[j]={{Yb,700,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  // ...\n  Diag(Decl->getLocation(), diag::err_section_conflict) << Decl << Section;"},{Yb,720,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n // ...\n if (SectionIt != Context.SectionInfos.end()) {\n   // ...\n   if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n      Diag(PragmaSectionLocation, diag::err_section_conflict) << \"this\" << Section;"}},
[b]={{n,5018,"static bool checkNestingOfRegions(Sema &SemaRef, const DSAStackTy *Stack, OpenMPDirectiveKind CurrentRegion, const DeclarationNameInfo &CurrentName, OpenMPDirectiveKind CancelRegion, OpenMPBindClauseKind BindKind, SourceLocation StartLoc) {\n  if (Stack->getCurScope()) {\n   // ...\n   if (ParentRegion == OMPD_atomic) {\n     // ...\n     SemaRef.Diag(StartLoc, diag::err_omp_prohibited_region_atomic);"}},
[l]={
[l]={
["clang/test/Sema/pragma-section.c"]={"clang/test/Sema/pragma-section.c:7:5: error: \'b\' causes a section type conflict with \'a\'","clang/test/Sema/pragma-section.c:10:39: error: \'d\' causes a section type conflict with \'a\'","clang/test/Sema/pragma-section.c:21:6: error: \'fn_bad_seg\' causes a section type conflict with \'int_bad_seg\'","clang/test/Sema/pragma-section.c:40:9: error: this causes a section type conflict with a prior #pragma section","clang/test/Sema/pragma-section.c:43:9: error: this causes a section type conflict with a prior #pragma section"}
["clang/test/OpenMP/nesting_of_regions.cpp"]={
}
[1]="clang/test/OpenMP/nesting_of_regions.cpp:4424:1: error: OpenMP constructs may not be nested inside an atomic region",
},
[2]="clang/test/OpenMP/nesting_of_regions.cpp:4432:1: error: OpenMP constructs may not be nested inside an atomic region",
["err_seh___except_block"]={
[3]="clang/test/OpenMP/nesting_of_regions.cpp:4440:1: error: OpenMP constructs may not be nested inside an atomic region",
[b]="err_seh___except_block",
[4]="clang/test/OpenMP/nesting_of_regions.cpp:4448:1: error: OpenMP constructs may not be nested inside an atomic region",
[c]="%0 only allowed in __except block or filter expression",
[5]="clang/test/OpenMP/nesting_of_regions.cpp:4456:1: error: OpenMP constructs may not be nested inside an atomic region",
[d]="A only allowed in __except block or filter expression",
[6]="clang/test/OpenMP/nesting_of_regions.cpp:4465:1: error: OpenMP constructs may not be nested inside an atomic region",
[e]=k,
[7]="clang/test/OpenMP/nesting_of_regions.cpp:4474:1: error: OpenMP constructs may not be nested inside an atomic region",
[g]="(.*?) only allowed in __except block or filter expression",
[8]="clang/test/OpenMP/nesting_of_regions.cpp:4483:1: error: OpenMP constructs may not be nested inside an atomic region",
[h]=a,
[9]="clang/test/OpenMP/nesting_of_regions.cpp:4492:1: error: OpenMP constructs may not be nested inside an atomic region",
[i]=y,
[10]="clang/test/OpenMP/nesting_of_regions.cpp:4501:1: error: OpenMP constructs may not be nested inside an atomic region",
[f]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling","Parsing/AST support for Structured Exception Handling\n\nPatch authored by Sohail Somani.\n\nProvide parsing and AST support for Windows structured exception handling.\n\nllvm-svn: 130366"},
[11]="clang/test/OpenMP/nesting_of_regions.cpp:4510:1: error: OpenMP constructs may not be nested inside an atomic region",
[j]={{Ab,550,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident__exception_code, diag::err_seh___except_block);"},{Ab,551,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident___exception_code, diag::err_seh___except_block);"},{Ab,552,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident_GetExceptionCode, diag::err_seh___except_block);"},{w,2470,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__exception_code:\n  case Builtin::BI_exception_code:\n    if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHExceptScope, diag::err_seh___except_block))"}},
[12]="clang/test/OpenMP/nesting_of_regions.cpp:4519:1: error: OpenMP constructs may not be nested inside an atomic region",
[l]={
[13]="clang/test/OpenMP/nesting_of_regions.cpp:4527:1: error: OpenMP constructs may not be nested inside an atomic region",
["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:23:3: error: \'_exception_code\' only allowed in __except block or filter expression","clang/test/SemaCXX/exceptions-seh.cpp:34:3: error: \'_exception_code\' only allowed in __except block or filter expression"}
[14]="clang/test/OpenMP/nesting_of_regions.cpp:4535:1: error: OpenMP constructs may not be nested inside an atomic region",
[15]="clang/test/OpenMP/nesting_of_regions.cpp:4544:1: error: OpenMP constructs may not be nested inside an atomic region",
[16]="clang/test/OpenMP/nesting_of_regions.cpp:4553:1: error: OpenMP constructs may not be nested inside an atomic region",
[17]="clang/test/OpenMP/nesting_of_regions.cpp:4560:1: error: OpenMP constructs may not be nested inside an atomic region",
[18]="clang/test/OpenMP/nesting_of_regions.cpp:4567:1: error: OpenMP constructs may not be nested inside an atomic region",
[19]="clang/test/OpenMP/nesting_of_regions.cpp:4574:1: error: OpenMP constructs may not be nested inside an atomic region",
[20]="clang/test/OpenMP/nesting_of_regions.cpp:4581:1: error: OpenMP constructs may not be nested inside an atomic region",
[21]="clang/test/OpenMP/nesting_of_regions.cpp:4588:1: error: OpenMP constructs may not be nested inside an atomic region",
[22]="clang/test/OpenMP/nesting_of_regions.cpp:4595:1: error: OpenMP constructs may not be nested inside an atomic region",
[23]="clang/test/OpenMP/nesting_of_regions.cpp:4602:1: error: OpenMP constructs may not be nested inside an atomic region",
[24]="clang/test/OpenMP/nesting_of_regions.cpp:4609:1: error: OpenMP constructs may not be nested inside an atomic region",
[25]="clang/test/OpenMP/nesting_of_regions.cpp:4616:1: error: OpenMP constructs may not be nested inside an atomic region",
[26]="clang/test/OpenMP/nesting_of_regions.cpp:4624:1: error: OpenMP constructs may not be nested inside an atomic region",
[27]="clang/test/OpenMP/nesting_of_regions.cpp:4631:1: error: OpenMP constructs may not be nested inside an atomic region",
[28]="clang/test/OpenMP/nesting_of_regions.cpp:4638:1: error: OpenMP constructs may not be nested inside an atomic region",
[29]="clang/test/OpenMP/nesting_of_regions.cpp:4645:1: error: OpenMP constructs may not be nested inside an atomic region",
[30]="clang/test/OpenMP/nesting_of_regions.cpp:4653:1: error: OpenMP constructs may not be nested inside an atomic region",
[31]="clang/test/OpenMP/nesting_of_regions.cpp:4661:1: error: OpenMP constructs may not be nested inside an atomic region",
[32]="clang/test/OpenMP/nesting_of_regions.cpp:4668:1: error: OpenMP constructs may not be nested inside an atomic region",
[33]="clang/test/OpenMP/nesting_of_regions.cpp:4676:1: error: OpenMP constructs may not be nested inside an atomic region",
[34]="clang/test/OpenMP/nesting_of_regions.cpp:4684:1: error: OpenMP constructs may not be nested inside an atomic region",
[35]="clang/test/OpenMP/nesting_of_regions.cpp:4692:1: error: OpenMP constructs may not be nested inside an atomic region",
[36]="clang/test/OpenMP/nesting_of_regions.cpp:4700:1: error: OpenMP constructs may not be nested inside an atomic region",
[37]="clang/test/OpenMP/nesting_of_regions.cpp:4708:1: error: OpenMP constructs may not be nested inside an atomic region",
[38]="clang/test/OpenMP/nesting_of_regions.cpp:4716:1: error: OpenMP constructs may not be nested inside an atomic region",
[39]="clang/test/OpenMP/nesting_of_regions.cpp:4724:1: error: OpenMP constructs may not be nested inside an atomic region",
[40]="clang/test/OpenMP/nesting_of_regions.cpp:4732:1: error: OpenMP constructs may not be nested inside an atomic region",
[41]="clang/test/OpenMP/nesting_of_regions.cpp:4739:1: error: OpenMP constructs may not be nested inside an atomic region",
[42]="clang/test/OpenMP/nesting_of_regions.cpp:4747:1: error: OpenMP constructs may not be nested inside an atomic region",
[43]="clang/test/OpenMP/nesting_of_regions.cpp:4755:1: error: OpenMP constructs may not be nested inside an atomic region",
[44]="clang/test/OpenMP/nesting_of_regions.cpp:4763:1: error: OpenMP constructs may not be nested inside an atomic region",
[45]="clang/test/OpenMP/nesting_of_regions.cpp:13292:1: error: OpenMP constructs may not be nested inside an atomic region",
[46]="clang/test/OpenMP/nesting_of_regions.cpp:13300:1: error: OpenMP constructs may not be nested inside an atomic region",
[47]="clang/test/OpenMP/nesting_of_regions.cpp:13308:1: error: OpenMP constructs may not be nested inside an atomic region",
[48]="clang/test/OpenMP/nesting_of_regions.cpp:13316:1: error: OpenMP constructs may not be nested inside an atomic region",
[49]="clang/test/OpenMP/nesting_of_regions.cpp:13324:1: error: OpenMP constructs may not be nested inside an atomic region",
[50]="clang/test/OpenMP/nesting_of_regions.cpp:13333:1: error: OpenMP constructs may not be nested inside an atomic region",
[51]="clang/test/OpenMP/nesting_of_regions.cpp:13342:1: error: OpenMP constructs may not be nested inside an atomic region",
[52]="clang/test/OpenMP/nesting_of_regions.cpp:13351:1: error: OpenMP constructs may not be nested inside an atomic region",
[53]="clang/test/OpenMP/nesting_of_regions.cpp:13360:1: error: OpenMP constructs may not be nested inside an atomic region",
[54]="clang/test/OpenMP/nesting_of_regions.cpp:13369:1: error: OpenMP constructs may not be nested inside an atomic region",
[55]="clang/test/OpenMP/nesting_of_regions.cpp:13377:1: error: OpenMP constructs may not be nested inside an atomic region",
[56]="clang/test/OpenMP/nesting_of_regions.cpp:13385:1: error: OpenMP constructs may not be nested inside an atomic region",
[57]="clang/test/OpenMP/nesting_of_regions.cpp:13394:1: error: OpenMP constructs may not be nested inside an atomic region",
[58]="clang/test/OpenMP/nesting_of_regions.cpp:13403:1: error: OpenMP constructs may not be nested inside an atomic region",
[59]="clang/test/OpenMP/nesting_of_regions.cpp:13410:1: error: OpenMP constructs may not be nested inside an atomic region",
[60]="clang/test/OpenMP/nesting_of_regions.cpp:13417:1: error: OpenMP constructs may not be nested inside an atomic region",
[61]="clang/test/OpenMP/nesting_of_regions.cpp:13424:1: error: OpenMP constructs may not be nested inside an atomic region",
[62]="clang/test/OpenMP/nesting_of_regions.cpp:13431:1: error: OpenMP constructs may not be nested inside an atomic region",
[63]="clang/test/OpenMP/nesting_of_regions.cpp:13438:1: error: OpenMP constructs may not be nested inside an atomic region",
[64]="clang/test/OpenMP/nesting_of_regions.cpp:13445:1: error: OpenMP constructs may not be nested inside an atomic region",
[65]="clang/test/OpenMP/nesting_of_regions.cpp:13452:1: error: OpenMP constructs may not be nested inside an atomic region",
[66]="clang/test/OpenMP/nesting_of_regions.cpp:13459:1: error: OpenMP constructs may not be nested inside an atomic region",
[67]="clang/test/OpenMP/nesting_of_regions.cpp:13466:1: error: OpenMP constructs may not be nested inside an atomic region",
[68]="clang/test/OpenMP/nesting_of_regions.cpp:13474:1: error: OpenMP constructs may not be nested inside an atomic region",
[69]="clang/test/OpenMP/nesting_of_regions.cpp:13481:1: error: OpenMP constructs may not be nested inside an atomic region",
[70]="clang/test/OpenMP/nesting_of_regions.cpp:13488:1: error: OpenMP constructs may not be nested inside an atomic region",
[71]="clang/test/OpenMP/nesting_of_regions.cpp:13495:1: error: OpenMP constructs may not be nested inside an atomic region",
[72]="clang/test/OpenMP/nesting_of_regions.cpp:13503:1: error: OpenMP constructs may not be nested inside an atomic region",
[73]="clang/test/OpenMP/nesting_of_regions.cpp:13511:1: error: OpenMP constructs may not be nested inside an atomic region",
[74]="clang/test/OpenMP/nesting_of_regions.cpp:13517:1: error: OpenMP constructs may not be nested inside an atomic region",
[75]="clang/test/OpenMP/nesting_of_regions.cpp:13525:1: error: OpenMP constructs may not be nested inside an atomic region",
[76]="clang/test/OpenMP/nesting_of_regions.cpp:13533:1: error: OpenMP constructs may not be nested inside an atomic region",
[77]="clang/test/OpenMP/nesting_of_regions.cpp:13541:1: error: OpenMP constructs may not be nested inside an atomic region",
[78]="clang/test/OpenMP/nesting_of_regions.cpp:13549:1: error: OpenMP constructs may not be nested inside an atomic region",
[79]="clang/test/OpenMP/nesting_of_regions.cpp:13557:1: error: OpenMP constructs may not be nested inside an atomic region",
[80]="clang/test/OpenMP/nesting_of_regions.cpp:13565:1: error: OpenMP constructs may not be nested inside an atomic region",
[81]="clang/test/OpenMP/nesting_of_regions.cpp:13573:1: error: OpenMP constructs may not be nested inside an atomic region",
[82]="clang/test/OpenMP/nesting_of_regions.cpp:13581:1: error: OpenMP constructs may not be nested inside an atomic region",
[83]="clang/test/OpenMP/nesting_of_regions.cpp:13588:1: error: OpenMP constructs may not be nested inside an atomic region",
[84]="clang/test/OpenMP/nesting_of_regions.cpp:13596:1: error: OpenMP constructs may not be nested inside an atomic region",
[85]="clang/test/OpenMP/nesting_of_regions.cpp:13604:1: error: OpenMP constructs may not be nested inside an atomic region",
[86]="clang/test/OpenMP/nesting_of_regions.cpp:13612:1: error: OpenMP constructs may not be nested inside an atomic region",
[87]="clang/test/OpenMP/nesting_of_regions.cpp:13766:1: error: OpenMP constructs may not be nested inside an atomic region"
}
}
}
},
},
["err_seh___except_filter"]={
["err_omp_prohibited_region_critical_same_name"]={
[b]="err_seh___except_filter",
[d]="err_omp_prohibited_region_critical_same_name",
[c]="%0 only allowed in __except filter expression",
[e]="cannot nest \'critical\' regions having the same name %0",
[d]="A only allowed in __except filter expression",
[i]="cannot nest \'critical\' regions having the same name A",
[e]=k,
[j]=k,
[g]="(.*?) only allowed in __except filter expression",
[c]="cannot nest \'critical\' regions having the same name (.*?)",
[h]=a,
[h]=a,
[i]=y,
[g]=o,
[f]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling","Parsing/AST support for Structured Exception Handling\n\nPatch authored by Sohail Somani.\n\nProvide parsing and AST support for Windows structured exception handling.\n\nllvm-svn: 130366"},
[f]={"d9ed09f7a5f1",1405935725,"[OPENMP] Parsing/Sema of the OpenMP directive \'critical\'.","[OPENMP] Parsing/Sema of the OpenMP directive \'critical\'.\n\nllvm-svn: 213510"},
[j]={{Ab,553,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident__exception_info, diag::err_seh___except_filter);"},{Ab,554,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident___exception_info, diag::err_seh___except_filter);"},{Ab,555,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n // ...\n if (getLangOpts().Borland) {\n   // ...\n    PP.SetPoisonReason(Ident_GetExceptionInfo, diag::err_seh___except_filter);"},{w,2476,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__exception_info:\n  case Builtin::BI_exception_info:\n    if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHFilterScope, diag::err_seh___except_filter))"}},
[b]={{n,5104,"static bool checkNestingOfRegions(Sema &SemaRef, const DSAStackTy *Stack, OpenMPDirectiveKind CurrentRegion, const DeclarationNameInfo &CurrentName, OpenMPDirectiveKind CancelRegion, OpenMPBindClauseKind BindKind, SourceLocation StartLoc) {\n  if (Stack->getCurScope()) {\n    // ...\n    if (CurrentRegion == OMPD_cancellation_point || CurrentRegion == OMPD_cancel) {\n   // ...\n   } else if (CurrentRegion == OMPD_master || CurrentRegion == OMPD_masked) {\n    // ...\n    } else if (CurrentRegion == OMPD_critical && CurrentName.getName()) {\n     // ...\n     if (DeadLock) {\n       SemaRef.Diag(StartLoc, diag::err_omp_prohibited_region_critical_same_name) << CurrentName.getName();"}},
[l]={
[l]={
["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:24:3: error: \'_exception_info\' only allowed in __except filter expression","clang/test/SemaCXX/exceptions-seh.cpp:35:3: error: \'_exception_info\' only allowed in __except filter expression"}
["clang/test/OpenMP/critical_messages.cpp"]={"clang/test/OpenMP/critical_messages.cpp:35:7: error: cannot nest \'critical\' regions having the same name \'name2\'","clang/test/OpenMP/critical_messages.cpp:102:7: error: cannot nest \'critical\' regions having the same name \'name2\'"}
}
}
},
},
["err_seh___finally_block"]={
["err_omp_prohibited_region_order"]={
[b]="err_seh___finally_block",
[d]={{nil,O,"err_omp_prohibited_region_order"}},
[c]="%0 only allowed in __finally block",
[e]={{nil,O,"construct \'%0\' not allowed in a region associated with a directive with \'order\' clause"}},
[d]="A only allowed in __finally block",
[i]={{nil,O,"construct \'A\' not allowed in a region associated with a directive with \'order\' clause"}},
[e]=k,
[j]=k,
[g]="(.*?) only allowed in __finally block",
[c]="construct \'(.*?)\' not allowed in a region associated with a directive with \'order\' clause",
[h]=a,
[h]=a,
[i]=y,
[g]={{nil,O,o}},
[f]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling","Parsing/AST support for Structured Exception Handling\n\nPatch authored by Sohail Somani.\n\nProvide parsing and AST support for Windows structured exception handling.\n\nllvm-svn: 130366"},
[f]={"95f50964fbf5",1625925174,"Implement P2361 Unevaluated string literals","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"},
[j]={{Ab,556,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident__abnormal_termination, diag::err_seh___finally_block);"},{Ab,557,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n    // ...\n    PP.SetPoisonReason(Ident___abnormal_termination, diag::err_seh___finally_block);"},{Ab,558,"/// Initialize - Warm up the parser.\n///\nvoid Parser::Initialize() {\n  // ...\n  if (getLangOpts().Borland) {\n   // ...\n    PP.SetPoisonReason(Ident_AbnormalTermination, diag::err_seh___finally_block);"}},
[b]={{n,4988,"static bool checkNestingOfRegions(Sema &SemaRef, const DSAStackTy *Stack, OpenMPDirectiveKind CurrentRegion, const DeclarationNameInfo &CurrentName, OpenMPDirectiveKind CancelRegion, OpenMPBindClauseKind BindKind, SourceLocation StartLoc) {\n  if (Stack->getCurScope()) {\n    // ...\n    if (SemaRef.LangOpts.OpenMP >= 51 && Stack->isParentOrderConcurrent() && CurrentRegion != OMPD_simd && CurrentRegion != OMPD_loop && CurrentRegion != OMPD_parallel && !isOpenMPCombinedParallelADirective(CurrentRegion)) {\n     SemaRef.Diag(StartLoc, diag::err_omp_prohibited_region_order) << getOpenMPDirectiveName(CurrentRegion);"}},
[l]={
[l]={
["clang/test/Sema/__try.c"]={"clang/test/Sema/__try.c:151:9: error: \'__abnormal_termination\' only allowed in __finally block","clang/test/Sema/__try.c:152:9: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:155:11: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:156:11: error: \'__abnormal_termination\' only allowed in __finally block","clang/test/Sema/__try.c:159:11: error: \'AbnormalTermination\' only allowed in __finally block","clang/test/Sema/__try.c:160:11: error: \'__abnormal_termination\' only allowed in __finally block"}
["clang/test/OpenMP/for_order_messages.cpp"]={"clang/test/OpenMP/for_order_messages.cpp:32:1: error: construct \'atomic\' not allowed in a region associated with a directive with \'order\' clause","clang/test/OpenMP/for_order_messages.cpp:38:1: error: construct \'target\' not allowed in a region associated with a directive with \'order\' clause","clang/test/OpenMP/for_order_messages.cpp:44:1: error: construct \'target\' not allowed in a region associated with a directive with \'order\' clause"}
}
}
},
},
["err_seh_expected_handler"]={
["err_omp_prohibited_region_simd"]={
[b]="err_seh_expected_handler",
[d]="err_omp_prohibited_region_simd",
[c]="expected \'__except\' or \'__finally\' block",
[e]={{nil,p,"OpenMP constructs may not be nested inside a simd region%select{| except for ordered simd, simd, scan, or atomic directive}0"},{w,w,"OpenMP constructs may not be nested inside a simd region%select{| except for ordered simd, simd or atomic directive}0"},{v,nil,"OpenMP constructs may not be nested inside a simd region"}},
[d]="expected \'__except\' or \'__finally\' block",
[i]={{nil,p,{"OpenMP constructs may not be nested inside a simd region",{a," except for ordered simd, simd, scan, or atomic directive"}}},{w,w,{"OpenMP constructs may not be nested inside a simd region",{a," except for ordered simd, simd or atomic directive"}}},{v,nil,"OpenMP constructs may not be nested inside a simd region"}},
[e]=k,
[j]=k,
[g]="expected \'__except\' or \'__finally\' block",
[c]="OpenMP constructs may not be nested inside a simd region(?:| except for ordered simd, simd, scan, or atomic directive)",
[h]=a,
[h]=a,
[i]=y,
[g]=o,
[f]={"1c0675e155b9",1303952914,"Parsing/AST support for Structured Exception Handling","Parsing/AST support for Structured Exception Handling\n\nPatch authored by Sohail Somani.\n\nProvide parsing and AST support for Windows structured exception handling.\n\nllvm-svn: 130366"},
[f]={"549210e783c7",1403584787,"[OPENMP] Added initial checking of nesting of OpenMP regions.","[OPENMP] Added initial checking of nesting of OpenMP regions.\n\nllvm-svn: 211566"},
[j]={{"clang/lib/Parse/ParseStmt.cpp",602,"/// ParseSEHTryBlockCommon\n///\n/// seh-try-block:\n///  \'__try\' compound-statement seh-handler\n///\n/// seh-handler:\n///  seh-except-block\n///  seh-finally-block\n///\nStmtResult Parser::ParseSEHTryBlock() {\n // ...\n if (Tok.is(tok::identifier) && Tok.getIdentifierInfo() == getSEHExceptKeyword()) {\n // ...\n } else if (Tok.is(tok::kw___finally)) {\n  // ...\n  } else {\n    return StmtError(Diag(Tok, diag::err_seh_expected_handler));"}},
[b]={{n,5010,"static bool checkNestingOfRegions(Sema &SemaRef, const DSAStackTy *Stack, OpenMPDirectiveKind CurrentRegion, const DeclarationNameInfo &CurrentName, OpenMPDirectiveKind CancelRegion, OpenMPBindClauseKind BindKind, SourceLocation StartLoc) {\n if (Stack->getCurScope()) {\n   // ...\n   if (isOpenMPSimdDirective(ParentRegion) && ((SemaRef.LangOpts.OpenMP <= 45 && CurrentRegion != OMPD_ordered) || (SemaRef.LangOpts.OpenMP >= 50 && CurrentRegion != OMPD_ordered && CurrentRegion != OMPD_simd && CurrentRegion != OMPD_atomic && CurrentRegion != OMPD_scan))) {\n     // ...\n     SemaRef.Diag(StartLoc, (CurrentRegion != OMPD_simd) ? diag::err_omp_prohibited_region_simd : diag::warn_omp_nesting_simd) << (SemaRef.LangOpts.OpenMP >= 50 ? 1 : 0);"},{n,11362,"StmtResult Sema::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  if (!ErrorFound && !SC && isOpenMPSimdDirective(DSAStack->getParentDirective())) {\n    // ...\n    Diag(StartLoc, diag::err_omp_prohibited_region_simd) << (LangOpts.OpenMP >= 50 ? 1 : 0);"}},
[l]={
[l]={
["clang/test/Parser/ms-seh.c"]={"clang/test/Parser/ms-seh.c:10:1: error: expected \'__except\' or \'__finally\' block"}
["clang/test/OpenMP/target_teams_distribute_parallel_for_simd_misc_messages.c"]={"clang/test/OpenMP/target_teams_distribute_parallel_for_simd_misc_messages.c:172:1: error: OpenMP constructs may not be nested inside a simd region except for ordered simd, simd, scan, or atomic directive"}
}
}
},
},
["err_seh_in_a_coroutine_with_cxx_exceptions"]={
["err_omp_reduction_id_not_compatible"]={
[b]={{nil,E,"err_seh_in_a_coroutine_with_cxx_exceptions"}},
[d]="err_omp_reduction_id_not_compatible",
[c]={{nil,E,"cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled"}},
[e]="list item of type %0 is not valid for specified reduction operation: unable to provide default initialization value",
[d]={{nil,E,"cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled"}},
[i]="list item of type A is not valid for specified reduction operation: unable to provide default initialization value",
[e]=k,
[j]=k,
[g]="cannot use SEH \'__try\' in a coroutine when C\\+\\+ exceptions are enabled",
[c]="list item of type (.*?) is not valid for specified reduction operation\\: unable to provide default initialization value",
[h]=a,
[h]=a,
[i]={{nil,E,"Coroutines Issue"}},
[g]=o,
[f]={"5b050e4a1836",1495492397,"[coroutines] Wrap the body of the coroutine in try-catch","[coroutines] Wrap the body of the coroutine in try-catch\n\nSummary:\nIf unhandled_exception member function is present in the coroutine promise,\nwrap the body of the coroutine in:\n\n```\ntry {\n  body\n} catch(...) { promise.unhandled_exception(); }\n```\n\nReviewers: EricWF, rnk, rsmith\n\nReviewed By: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D31692\n\nllvm-svn: 303583"},
[f]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause","[OPENMP] Initial support of \'reduction\' clause\n\nllvm-svn: 211007"},
[j]={{"clang/lib/Sema/SemaCoroutine.cpp",1701,"bool CoroutineStmtBuilder::makeOnException() {\n  // ...\n  // Since the body of the coroutine will be wrapped in try-catch, it will\n // be incompatible with SEH __try if present in a function.\n if (!S.getLangOpts().Borland && Fn.FirstSEHTryLoc.isValid()) {\n   S.Diag(Fn.FirstSEHTryLoc, diag::err_seh_in_a_coroutine_with_cxx_exceptions);"}},
[b]={{n,19659,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n   // ...\n   if (!RHSVD->hasInit() && DeclareReductionRef.isUnset()) {\n     S.Diag(ELoc, diag::err_omp_reduction_id_not_compatible) << Type << ReductionIdRange;"}}
[l]={
["clang/test/SemaCXX/coroutine-seh.cpp"]={"clang/test/SemaCXX/coroutine-seh.cpp:34:3: error: cannot use SEH \'__try\' in a coroutine when C++ exceptions are enabled"}
}
},
},
["err_seh_try_outside_functions"]={
["err_omp_reduction_identifier_mismatch"]={
[b]="err_seh_try_outside_functions",
[d]={{nil,F,"err_omp_reduction_identifier_mismatch"}},
[c]="cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls",
[e]={{nil,F,"in_reduction variable must have the same reduction operation as in a task_reduction clause"}},
[d]="cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls",
[i]={{nil,F,"in_reduction variable must have the same reduction operation as in a task_reduction clause"}},
[e]=k,
[j]=k,
[g]="cannot use SEH \'__try\' in blocks, captured regions, or Obj\\-C method decls",
[c]="in_reduction variable must have the same reduction operation as in a task_reduction clause",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,F,o}},
[f]={"11ca834bef95",1423003955,"SEH: Track users of __try so we can pick a per-func EH personality","SEH: Track users of __try so we can pick a per-func EH personality\n\nThere are four major kinds of declarations that cause code generation:\n- FunctionDecl (includes CXXMethodDecl etc)\n- ObjCMethodDecl\n- BlockDecl\n- CapturedDecl\n\nThis patch tracks __try usage on FunctionDecls and diagnoses __try usage\nin other decls. If someone wants to use __try from ObjC, they can use it\nfrom a free function, since the ObjC code will need an ObjC-style EH\npersonality.\n\nEventually we will want to look through CapturedDecls and track SEH\nusage on the parent FunctionDecl, if present.\n\nllvm-svn: 228058"},
[f]={"fa312f33f840",1500662901,"[OPENMP] Initial support for \'in_reduction\' clause.","[OPENMP] Initial support for \'in_reduction\' clause.\n\nParsing/sema analysis for \'in_reduction\' clause for task-based\ndirectives.\n\nllvm-svn: 308768"},
[j]={{S,4606,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  // ...\n  if (FD)\n // ...\n else\n   Diag(TryLoc, diag::err_seh_try_outside_functions);"}},
[b]={{n,19809,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    // OpenMP [2.15.4.6, Restrictions, p.2]\n    // A list item that appears in an in_reduction clause of a task construct\n    // must appear in a task_reduction clause of a construct associated with a\n    // taskgroup region that includes the participating task in its taskgroup\n    // set. The construct associated with the innermost region that meets this\n    // condition must specify the same reduction-identifier as the in_reduction\n    // clause.\n    if (ClauseKind == OMPC_in_reduction) {\n      // ...\n      if ((DeclareReductionRef.isUnset() && IsParentReductionOp) || (DeclareReductionRef.isUsable() && IsParentBOK) || (IsParentBOK && BOK != ParentBOK) || IsParentReductionOp) {\n       // ...\n       if (EmitError) {\n         S.Diag(ReductionId.getBeginLoc(), diag::err_omp_reduction_identifier_mismatch) << ReductionIdRange << RefExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/exceptions-seh.cpp"]={"clang/test/SemaCXX/exceptions-seh.cpp:91:5: error: cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls","clang/test/SemaCXX/exceptions-seh.cpp:103:3: error: cannot use SEH \'__try\' in blocks, captured regions, or Obj-C method decls"}
["clang/test/OpenMP/task_in_reduction_message.cpp"]={"clang/test/OpenMP/task_in_reduction_message.cpp:50:31: error: in_reduction variable must have the same reduction operation as in a task_reduction clause","clang/test/OpenMP/task_in_reduction_message.cpp:56:31: error: in_reduction variable must have the same reduction operation as in a task_reduction clause","clang/test/OpenMP/task_in_reduction_message.cpp:262:31: error: in_reduction variable must have the same reduction operation as in a task_reduction clause"}
}
}
},
},
["err_seh_try_unsupported"]={
["err_omp_reduction_in_task"]={
[b]="err_seh_try_unsupported",
[d]="err_omp_reduction_in_task",
[c]="SEH \'__try\' is not supported on this target",
[e]="reduction variables may not be accessed in an explicit task",
[d]="SEH \'__try\' is not supported on this target",
[i]="reduction variables may not be accessed in an explicit task",
[e]=k,
[j]=k,
[g]="SEH \'__try\' is not supported on this target",
[c]="reduction variables may not be accessed in an explicit task",
[h]=a,
[i]=m,
[f]={"ddd40964f077",1430259572,"[SEH] Add 32-bit lowering code for __try","[SEH] Add 32-bit lowering code for __try\n\nThis is just the clang-side of 32-bit SEH. LLVM still needs work, and it\nwill determinstically fail to compile until it\'s feature complete.\n\nOn x86, all outlined handlers have no parameters, but they do implicitly\ntake the EBP value passed in and use it to address locals of the parent\nframe. We model this with llvm.frameaddress(1).\n\nThis works (mostly), but __finally block inlining can break it. For now,\nwe apply the \'noinline\' attribute. If we really want to inline __finally\nblocks on 32-bit x86, we should teach the inliner how to untangle\nframeescape and framerecover.\n\nPromote the error diagnostic from codegen to sema. It now rejects SEH on\nnon-Windows platforms. LLVM doesn\'t implement SEH on non-x86 Windows\nplatforms, but there\'s nothing preventing it.\n\nllvm-svn: 236052"},
[j]={{S,4610,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  // ...\n  // Reject __try on unsupported targets.\n  if (!Context.getTargetInfo().isSEHTrySupported())\n    Diag(TryLoc, diag::err_seh_try_unsupported);"}}
},
["err_selected_explicit_constructor"]={
[b]="err_selected_explicit_constructor",
[c]="chosen constructor is explicit in copy-initialization",
[d]="chosen constructor is explicit in copy-initialization",
[e]=k,
[g]="chosen constructor is explicit in copy\\-initialization",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"048a6d797690",1333310099,"Properly handle explicit constructors in list-initialization. Fixes PR12120.","Properly handle explicit constructors in list-initialization. Fixes PR12120.\n\nllvm-svn: 153849"},
[f]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause","[OPENMP] Initial support of \'reduction\' clause\n\nllvm-svn: 211007"},
[j]={{pb,9992,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ExplicitConstructor: {\n    S.Diag(Kind.getLocation(), diag::err_selected_explicit_constructor) << Args[0]->getSourceRange();"}},
[b]={{n,3897,"class DSAAttrChecker final : public StmtVisitor<DSAAttrChecker, void> {\n  // ...\n  void VisitDeclRefExpr(DeclRefExpr *E) {\n    // ...\n    if (auto *VD = dyn_cast<VarDecl>(E->getDecl())) {\n      // ...\n      if (isOpenMPTaskingDirective(DKind) && DVar.CKind == OMPC_reduction) {\n        // ...\n        SemaRef.Diag(ELoc, diag::err_omp_reduction_in_task);"},{n,3993,"class DSAAttrChecker final : public StmtVisitor<DSAAttrChecker, void> {\n  // ...\n  void VisitMemberExpr(MemberExpr *E) {\n    // ...\n    if (auto *TE = dyn_cast<CXXThisExpr>(E->getBase()->IgnoreParenCasts())) {\n      // ...\n      if (isOpenMPTaskingDirective(DKind) && DVar.CKind == OMPC_reduction) {\n        // ...\n        SemaRef.Diag(ELoc, diag::err_omp_reduction_in_task);"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.init/p7.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p7.cpp:14:3: error: chosen constructor is explicit in copy-initialization"}
["clang/test/OpenMP/task_messages.cpp"]={"clang/test/OpenMP/task_messages.cpp:288:5: error: reduction variables may not be accessed in an explicit task","clang/test/OpenMP/task_messages.cpp:293:5: error: reduction variables may not be accessed in an explicit task","clang/test/OpenMP/task_messages.cpp:298:5: error: reduction variables may not be accessed in an explicit task","clang/test/OpenMP/task_messages.cpp:306:7: error: reduction variables may not be accessed in an explicit task","clang/test/OpenMP/task_messages.cpp:313:7: error: reduction variables may not be accessed in an explicit task","clang/test/OpenMP/task_messages.cpp:320:7: error: reduction variables may not be accessed in an explicit task","clang/test/OpenMP/task_messages.cpp:110:5: error: reduction variables may not be accessed in an explicit task","clang/test/OpenMP/task_messages.cpp:115:5: error: reduction variables may not be accessed in an explicit task","clang/test/OpenMP/task_messages.cpp:129:7: error: reduction variables may not be accessed in an explicit task","clang/test/OpenMP/task_messages.cpp:136:7: error: reduction variables may not be accessed in an explicit task","clang/test/OpenMP/task_messages.cpp:110:5: error: reduction variables may not be accessed in an explicit task","clang/test/OpenMP/task_messages.cpp:115:5: error: reduction variables may not be accessed in an explicit task","clang/test/OpenMP/task_messages.cpp:129:7: error: reduction variables may not be accessed in an explicit task","clang/test/OpenMP/task_messages.cpp:136:7: error: reduction variables may not be accessed in an explicit task"}
}
}
},
},
["err_selector_element_const_type"]={
["err_omp_reduction_incomplete_type"]={
[b]="err_selector_element_const_type",
[d]="err_omp_reduction_incomplete_type",
[c]={{nil,v,"selector element of type %0 cannot be a constant lvalue expression"},{tb,nil,"selector element of type %0 cannot be a constant l-value expression"}},
[e]="a reduction list item with incomplete type %0",
[d]={{nil,v,"selector element of type A cannot be a constant lvalue expression"},{tb,nil,"selector element of type A cannot be a constant l-value expression"}},
[i]="a reduction list item with incomplete type A",
[e]=k,
[j]=k,
[g]="selector element of type (.*?) cannot be a constant lvalue expression",
[c]="a reduction list item with incomplete type (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"8bcf182b9df6",1381442284,"ObjectiveC. ObjectiveC\'s collection selector expression in","ObjectiveC. ObjectiveC\'s collection selector expression in\nthe fereach loop must be a non-const lvalue expression as\nit will be assigned to at the beginning of the loop.\n// rdar://15123684\n\nllvm-svn: 192399"},
[f]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause","[OPENMP] Initial support of \'reduction\' clause\n\nllvm-svn: 211007"},
[j]={{S,2345,"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    } else {\n      // ...\n      if (FirstType.isConstQualified())\n        Diag(ForLoc, diag::err_selector_element_const_type) << FirstType << First->getSourceRange();"}},
[b]={{n,19325,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (S.RequireCompleteType(ELoc, D->getType(), diag::err_omp_reduction_incomplete_type))"}},
[l]={
[l]={
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:794:5: error: selector element of type \'NSString *const __strong\' cannot be a constant lvalue expression"}
["clang/test/OpenMP/parallel_reduction_messages.c"]={"clang/test/OpenMP/parallel_reduction_messages.c:19:36: error: a reduction list item with incomplete type \'int[]\'"}
}
}
},
},
["err_selector_element_not_lvalue"]={
["err_omp_reduction_non_addressable_expression"]={
[b]="err_selector_element_not_lvalue",
[d]={{nil,q,"err_omp_reduction_non_addressable_expression"}},
[c]="selector element is not a valid lvalue",
[e]={{nil,q,"expected addressable reduction item for the task-based directives"}},
[d]="selector element is not a valid lvalue",
[i]={{nil,q,"expected addressable reduction item for the task-based directives"}},
[e]=k,
[j]=k,
[g]="selector element is not a valid lvalue",
[c]="expected addressable reduction item for the task\\-based directives",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,q,o}},
[f]={p,1237025389,q,r},
[f]={"bcd0ae061711",1499800604,"[OPENMP] Add restriction for reduction clause in taskloop directives.","[OPENMP] Add restriction for reduction clause in taskloop directives.\n\nAdded checks for the reduction clauses in the taskloop directives:\n1. Only addressable items must be used in reduction clauses.\n2. Reduction clauses cannot be used with nogroup clauses.\n\nllvm-svn: 307693"},
[j]={{S,2340,"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   } else {\n     // ...\n     if (!FirstE->isTypeDependent() && !FirstE->isLValue())\n       return StmtError(Diag(First->getBeginLoc(), diag::err_selector_element_not_lvalue) << First->getSourceRange());"}},
[b]={{n,19848,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (!VD && !S.CurContext->isDependentContext()) {\n     // ...\n     if (!S.isOpenMPCapturedDecl(D)) {\n       // ...\n       if (Ref->getDecl()->hasAttr<OMPCaptureNoInitAttr>()) {\n          // ...\n         if (isOpenMPTaskingDirective(Stack->getCurrentDirective()) || Stack->getCurrentDirective() == OMPD_taskgroup) {\n            S.Diag(RefExpr->getExprLoc(), diag::err_omp_reduction_non_addressable_expression) << RefExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/foreach.m"]={"clang/test/SemaObjC/foreach.m:9:10: error: selector element is not a valid lvalue","clang/test/SemaObjC/foreach.m:10:10: error: selector element is not a valid lvalue","clang/test/SemaObjC/foreach.m:55:8: error: selector element is not a valid lvalue"}
["clang/test/OpenMP/taskloop_reduction_messages_attr.cpp"]={"clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:102:43: error: expected addressable reduction item for the task-based directives"}
}
}
},
},
["err_selector_element_type"]={
["err_omp_reduction_not_inclusive_exclusive"]={
[b]="err_selector_element_type",
[d]={{nil,p,"err_omp_reduction_not_inclusive_exclusive"}},
[c]="selector element type %0 is not a valid object",
[e]={{nil,p,"the inscan reduction list item must appear as a list item in an \'inclusive\' or \'exclusive\' clause on an inner \'omp scan\' directive"}},
[d]="selector element type A is not a valid object",
[i]={{nil,p,"the inscan reduction list item must appear as a list item in an \'inclusive\' or \'exclusive\' clause on an inner \'omp scan\' directive"}},
[e]=k,
[j]=k,
[g]="selector element type (.*?) is not a valid object",
[c]="the inscan reduction list item must appear as a list item in an \'inclusive\' or \'exclusive\' clause on an inner \'omp scan\' directive",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,p,o}},
[f]={p,1237025389,q,r},
[f]={W,1576908663,X,Y},
[j]={{S,2351,"StmtResult Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc, Stmt *First, Expr *collection, SourceLocation RParenLoc) {\n  // ...\n  if (First) {\n    // ...\n   if (!FirstType->isDependentType() && !FirstType->isObjCObjectPointerType() && !FirstType->isBlockPointerType())\n     return StmtError(Diag(ForLoc, diag::err_selector_element_type) << FirstType << First->getSourceRange());"}},
[b]={{n,2836,"/// Check consistency of the reduction clauses.\nstatic void checkReductionClauses(Sema &S, DSAStackTy *Stack, ArrayRef<OMPClause *> Clauses) {\n  // ...\n  if (InscanFound) {\n    for (OMPClause *C : Clauses) {\n      // ...\n     for (Expr *Ref : RC->varlists()) {\n        // ...\n        if (!Stack->isUsedInScanDirective(getCanonicalDecl(D))) {\n         S.Diag(Ref->getExprLoc(), diag::err_omp_reduction_not_inclusive_exclusive) << Ref->getSourceRange();"}},
[l]={
[l]={
["clang/test/Parser/objc-forcollection-neg-2.m"]={"clang/test/Parser/objc-forcollection-neg-2.m:33:9: error: selector element type \'MyList<P> ***\' is not a valid object"}
["clang/test/OpenMP/scan_messages.cpp"]={"clang/test/OpenMP/scan_messages.cpp:106:39: error: the inscan reduction list item must appear as a list item in an \'inclusive\' or \'exclusive\' clause on an inner \'omp scan\' directive","clang/test/OpenMP/scan_messages.cpp:39:39: error: the inscan reduction list item must appear as a list item in an \'inclusive\' or \'exclusive\' clause on an inner \'omp scan\' directive","clang/test/OpenMP/scan_messages.cpp:55:39: error: the inscan reduction list item must appear as a list item in an \'inclusive\' or \'exclusive\' clause on an inner \'omp scan\' directive"}
}
}
},
},
["err_setter_type_void"]={
["err_omp_reduction_ref_type_arg"]={
[b]="err_setter_type_void",
[d]="err_omp_reduction_ref_type_arg",
[c]="type of setter must be void",
[e]="argument of OpenMP clause \'reduction\' must reference the same object in all threads",
[d]="type of setter must be void",
[i]="argument of OpenMP clause \'reduction\' must reference the same object in all threads",
[e]=k,
[j]=k,
[g]="type of setter must be void",
[c]="argument of OpenMP clause \'(.*?)\' must reference the same object in all threads",
[h]=a,
[i]=m,
[f]={ob,1236199783,mb,nb},
[j]={{Jb,2446,"/// 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 (Context.getCanonicalType(SetterMethod->getReturnType()) != Context.VoidTy)\n      Diag(SetterMethod->getLocation(), diag::err_setter_type_void);"}}
},
["err_setting_eval_method_used_in_unsafe_context"]={
[b]={{nil,x,"err_setting_eval_method_used_in_unsafe_context"}},
[c]={{nil,x,"%select{\'#pragma clang fp eval_method\'|option \'ffp-eval-method\'}0 cannot be used with %select{option \'fapprox-func\'|option \'mreassociate\'|option \'freciprocal\'|option \'ffp-eval-method\'|\'#pragma clang fp reassociate\'}1"}},
[d]={{nil,x,{{"\'#pragma clang fp eval_method\'","option \'ffp-eval-method\'"}," cannot be used with ",{"option \'fapprox-func\'","option \'mreassociate\'","option \'freciprocal\'","option \'ffp-eval-method\'","\'#pragma clang fp reassociate\'"}}}},
[e]=k,
[g]="(?:\'\\#pragma clang fp eval_method\'|option \'ffp\\-eval\\-method\') cannot be used with (?:option \'fapprox\\-func\'|option \'mreassociate\'|option \'freciprocal\'|option \'ffp\\-eval\\-method\'|\'\\#pragma clang fp reassociate\')",
[h]=a,
[i]={{nil,x,m}},
[f]={mc,1620118562,yc,lc},
[j]={{Yb,540,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  // ...\n  if (getLangOpts().ApproxFunc)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 0;"},{Yb,542,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  // ...\n  if (getLangOpts().AllowFPReassoc)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 1;"},{Yb,544,"void Sema::ActOnPragmaFPEvalMethod(SourceLocation Loc, LangOptions::FPEvalMethodKind Value) {\n  // ...\n  if (getLangOpts().AllowRecip)\n    Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << 0 << 2;"},{Yb,1336,"void Sema::ActOnPragmaFPReassociate(SourceLocation Loc, bool IsEnabled) {\n  if (IsEnabled) {\n    // ...\n    if (Reason != -1)\n      Diag(Loc, diag::err_setting_eval_method_used_in_unsafe_context) << Reason << 4;"}}
},
["err_shared_var_init"]={
[b]="err_shared_var_init",
[c]="initialization is not supported for __shared__ variables.",
[d]="initialization is not supported for __shared__ variables.",
[e]=k,
[g]="initialization is not supported for __shared__ variables\\.",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"97c01c35f8da",1454452188,"[CUDA] Do not allow dynamic initialization of global device side variables.","[CUDA] Do not allow dynamic initialization of global device side variables.\n\nIn general CUDA does not allow dynamic initialization of\nglobal device-side variables. One exception is that CUDA allows\nrecords with empty constructors as described in section E2.2.1 of\nCUDA 7.5 Programming guide.\n\nThis patch applies initializer checks for all device-side variables.\nEmpty constructors are accepted, but no code is generated for them.\n\nDifferential Revision: http://reviews.llvm.org/D15305\n\nllvm-svn: 259592"},
[f]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause","[OPENMP] Initial support of \'reduction\' clause\n\nllvm-svn: 211007"},
[j]={{"clang/lib/Sema/SemaCUDA.cpp",624,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n // ...\n if (IsDeviceOrConstantVar || IsSharedVar) {\n   // ...\n   Diag(VD->getLocation(), IsSharedVar ? diag::err_shared_var_init : diag::err_dynamic_var_init) << Init->getSourceRange();"}},
[b]={{n,19344,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  // ...\n for (Expr *RefExpr : VarList) {\n    // ...\n   // OpenMP [2.9.3.6, Restrictions, C/C++, p.4]\n   //  If a list-item is a reference type then it must bind to the same object\n    // for all threads of the team.\n    if (!ASE && !OASE) {\n      if (VD) {\n       // ...\n       if (VD->getType()->isReferenceType() && VDDef && VDDef->hasInit()) {\n         // ...\n         if (Check.Visit(VDDef->getInit())) {\n            S.Diag(ELoc, diag::err_omp_reduction_ref_type_arg) << getOpenMPClauseName(ClauseKind) << ERange;"}},
[l]={
[l]={
["clang/test/SemaCUDA/union-init.cu"]={"clang/test/SemaCUDA/union-init.cu:40:16: error: initialization is not supported for __shared__ variables.","clang/test/SemaCUDA/union-init.cu:42:16: error: initialization is not supported for __shared__ variables."}
["clang/test/OpenMP/taskloop_reduction_messages_attr.cpp"]={"clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:179:84: error: argument of OpenMP clause \'reduction\' must reference the same object in all threads","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:179:102: error: argument of OpenMP clause \'reduction\' must reference the same object in all threads","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:281:55: error: argument of OpenMP clause \'reduction\' must reference the same object in all threads","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:281:73: error: argument of OpenMP clause \'reduction\' must reference the same object in all threads","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:284:84: error: argument of OpenMP clause \'reduction\' must reference the same object in all threads","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:284:102: error: argument of OpenMP clause \'reduction\' must reference the same object in all threads","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:293:125: error: argument of OpenMP clause \'reduction\' must reference the same object in all threads","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:176:55: error: argument of OpenMP clause \'reduction\' must reference the same object in all threads","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:176:73: error: argument of OpenMP clause \'reduction\' must reference the same object in all threads","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:188:125: error: argument of OpenMP clause \'reduction\' must reference the same object in all threads","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:176:55: error: argument of OpenMP clause \'reduction\' must reference the same object in all threads","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:176:73: error: argument of OpenMP clause \'reduction\' must reference the same object in all threads","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:188:125: error: argument of OpenMP clause \'reduction\' must reference the same object in all threads"}
}
}
},
},
["err_shift_rhs_only_vector"]={
["err_omp_reduction_task_not_parallel_or_worksharing"]={
[b]="err_shift_rhs_only_vector",
[d]={{nil,p,"err_omp_reduction_task_not_parallel_or_worksharing"}},
[c]="requested shift is a vector of type %0 but the first operand is not a vector (%1)",
[e]={{nil,p,"\'reduction\' clause with \'task\' modifier allowed only on non-simd parallel or worksharing constructs"}},
[d]="requested shift is a vector of type A but the first operand is not a vector (B)",
[i]={{nil,p,"\'reduction\' clause with \'task\' modifier allowed only on non-simd parallel or worksharing constructs"}},
[e]=k,
[j]=k,
[g]="requested shift is a vector of type (.*?) but the first operand is not a vector \\((.*?)\\)",
[c]="\'reduction\' clause with \'task\' modifier allowed only on non\\-simd parallel or worksharing constructs",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,p,o}},
[f]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands","OpenCL: handle shift operator with vector operands\n\nIntroduce a number of checks:\n1. If LHS is a scalar, then RHS cannot be a vector.\n2. Operands must be of integer type.\n3. If both are vectors, then the number of elements must match.\n\nRelax the requirement for \"usual arithmetic conversions\":\nWhen LHS is a vector, a scalar RHS can simply be expanded into a\nvector; OpenCL does not require that its rank be lower than the LHS.\nFor example, the following code is not an error even if the implicit\ntype of the constant literal is \"int\".\n\n  char2 foo(char2 v) { return v << 1; }\n\nConsolidate existing tests under CodeGenOpenCL, and add more tests\nunder SemaOpenCL.\n\nllvm-svn: 228382"},
[f]={W,1576908663,X,Y},
[j]={{n,12103,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // OpenCL v1.1 s6.3.j says RHS can be a vector only if LHS is a vector.\n  if ((S.LangOpts.OpenCL || S.LangOpts.ZVector) && !LHS.get()->getType()->isVectorType()) {\n    S.Diag(Loc, diag::err_shift_rhs_only_vector) << RHS.get()->getType() << LHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[b]={{n,2807,"/// Check consistency of the reduction clauses.\nstatic void checkReductionClauses(Sema &S, DSAStackTy *Stack, ArrayRef<OMPClause *> Clauses) {\n  // ...\n  // OpenMP 5.0, 2.19.5.4 reduction Clause, Restrictions.\n  // A reduction clause without the inscan reduction-modifier may not appear on\n  // a construct on which a reduction clause with the inscan reduction-modifier\n  // appears.\n  for (OMPClause *C : Clauses) {\n    // ...\n    if (RC->getModifier() == OMPC_REDUCTION_task) {\n      // ...\n      if (!(isOpenMPParallelDirective(CurDir) || isOpenMPWorksharingDirective(CurDir)) || isOpenMPSimdDirective(CurDir))\n        S.Diag(RC->getModifierLoc(), diag::err_omp_reduction_task_not_parallel_or_worksharing);"}},
[l]={
[l]={
["clang/test/Sema/zvector.c"]={"clang/test/Sema/zvector.c:732:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:733:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:736:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:737:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:832:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:833:18: error: requested shift is a vector of type \'__vector signed char\' (vector of 16 \'signed char\' values) but the first operand is not a vector (\'unsigned char\')","clang/test/Sema/zvector.c:836:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'signed char\')","clang/test/Sema/zvector.c:837:18: error: requested shift is a vector of type \'__vector unsigned char\' (vector of 16 \'unsigned char\' values) but the first operand is not a vector (\'unsigned char\')"}
["clang/test/OpenMP/taskloop_reduction_messages_attr.cpp"]={"clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:306:39: error: \'reduction\' clause with \'task\' modifier allowed only on non-simd parallel or worksharing constructs"}
}
}
},
},
["err_shufflevector_argument_too_large"]={
["err_omp_reduction_vla_unsupported"]={
[b]="err_shufflevector_argument_too_large",
[d]={{nil,F,"err_omp_reduction_vla_unsupported"}},
[c]="index for __builtin_shufflevector must be less than the total number of vector elements",
[e]={{nil,F,"cannot generate code for reduction on %select{|array section, which requires a }0variable length array"}},
[d]="index for __builtin_shufflevector must be less than the total number of vector elements",
[i]={{nil,F,{"cannot generate code for reduction on ",{a,"array section, which requires a "},"variable length array"}}},
[e]=k,
[j]=k,
[g]="index for __builtin_shufflevector must be less than the total number of vector elements",
[c]="cannot generate code for reduction on (?:|array section, which requires a )variable length array",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,F,o}},
[f]={p,1237025389,q,r},
[f]={"87d44269885f",1511038846,"[OpenMP] Show error if VLAs are not supported","[OpenMP] Show error if VLAs are not supported\n\nSome target devices (e.g. Nvidia GPUs) don\'t support dynamic stack\nallocation and hence no VLAs. Print errors with description instead\nof failing in the backend or generating code that doesn\'t work.\n\nThis patch handles explicit uses of VLAs (local variable in target\nor declare target region) or implicitly generated (private) VLAs\nfor reductions on VLAs or on array sections with non-constant size.\n\nDifferential Revision: https://reviews.llvm.org/D39505\n\nllvm-svn: 318601"},
[j]={{w,8508,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n  // ...\n  for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n    // ...\n    if (Result->getActiveBits() > 64 || Result->getZExtValue() >= numElements * 2)\n      return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_argument_too_large) << TheCall->getArg(i)->getSourceRange());"}},
[b]={{n,19503,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n   // ...\n    if ((OASE && !ConstantLengthOASE) || (!OASE && !ASE && D->getType().getNonReferenceType()->isVariablyModifiedType())) {\n      if (!Context.getTargetInfo().isVLASupported()) {\n        if (isOpenMPTargetExecutionDirective(Stack->getCurrentDirective())) {\n          S.Diag(ELoc, diag::err_omp_reduction_vla_unsupported) << !!OASE;"},{n,19507,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if ((OASE && !ConstantLengthOASE) || (!OASE && !ASE && D->getType().getNonReferenceType()->isVariablyModifiedType())) {\n      if (!Context.getTargetInfo().isVLASupported()) {\n        if (isOpenMPTargetExecutionDirective(Stack->getCurrentDirective())) {\n        // ...\n        } else {\n          S.targetDiag(ELoc, diag::err_omp_reduction_vla_unsupported) << !!OASE;"}},
[l]={
[l]={
["clang/test/SemaTemplate/instantiate-clang.cpp"]={"clang/test/SemaTemplate/instantiate-clang.cpp:34:11: error: index for __builtin_shufflevector must be less than the total number of vector elements","clang/test/SemaTemplate/instantiate-clang.cpp:35:11: error: index for __builtin_shufflevector must be less than the total number of vector elements"}
["clang/test/OpenMP/target_vla_messages.cpp"]={"clang/test/OpenMP/target_vla_messages.cpp:40:35: error: cannot generate code for reduction on array section, which requires a variable length array","clang/test/OpenMP/target_vla_messages.cpp:95:32: error: cannot generate code for reduction on variable length array","clang/test/OpenMP/target_vla_messages.cpp:111:32: error: cannot generate code for reduction on array section, which requires a variable length array","clang/test/OpenMP/target_vla_messages.cpp:119:32: error: cannot generate code for reduction on array section, which requires a variable length array","clang/test/OpenMP/target_vla_messages.cpp:136:35: error: cannot generate code for reduction on variable length array","clang/test/OpenMP/target_vla_messages.cpp:152:35: error: cannot generate code for reduction on array section, which requires a variable length array","clang/test/OpenMP/target_vla_messages.cpp:160:35: error: cannot generate code for reduction on array section, which requires a variable length array","clang/test/OpenMP/target_vla_messages.cpp:179:30: error: cannot generate code for reduction on variable length array","clang/test/OpenMP/target_vla_messages.cpp:198:30: error: cannot generate code for reduction on array section, which requires a variable length array","clang/test/OpenMP/target_vla_messages.cpp:207:30: error: cannot generate code for reduction on array section, which requires a variable length array","clang/test/OpenMP/target_vla_messages.cpp:213:34: error: cannot generate code for reduction on array section, which requires a variable length array"}
}
}
},
},
["err_shufflevector_nonconstant_argument"]={
["err_omp_reduction_with_nogroup"]={
[b]="err_shufflevector_nonconstant_argument",
[d]={{nil,q,"err_omp_reduction_with_nogroup"}},
[c]="index for __builtin_shufflevector must be a constant integer",
[e]={{nil,q,"\'reduction\' clause cannot be used with \'nogroup\' clause"}},
[d]="index for __builtin_shufflevector must be a constant integer",
[i]={{nil,q,"\'reduction\' clause cannot be used with \'nogroup\' clause"}},
[e]=k,
[j]=k,
[g]="index for __builtin_shufflevector must be a constant integer",
[c]="\'reduction\' clause cannot be used with \'nogroup\' clause",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{w,8498,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n  // ...\n  for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {\n    // ...\n    if (!(Result = TheCall->getArg(i)->getIntegerConstantExpr(Context)))\n      return ExprError(Diag(TheCall->getBeginLoc(), diag::err_shufflevector_nonconstant_argument) << TheCall->getArg(i)->getSourceRange());"}}
},
["err_single_decl_assign_in_for_range"]={
[b]="err_single_decl_assign_in_for_range",
[c]="range-based \'for\' statement uses \':\', not \'=\'",
[d]="range-based \'for\' statement uses \':\', not \'=\'",
[e]=k,
[g]="range\\-based \'for\' statement uses \'\\:\', not \'\\=\'",
[h]=a,
[h]=a,
[i]=G,
[g]={{nil,q,o}},
[f]={"49ff754d4be5",1399548505,"Suggest fix-it \':\' when \'=\' used in for-range-declaration","Suggest fix-it \':\' when \'=\' used in for-range-declaration\n\nFix for PR19176. Clang will suggest a fix-it hint for cases like:\n  int arr[] = {1, 2, 3, 4};\n  for (auto i = arr)\n              ^\n              :\n\nllvm-svn: 208299"},
[f]={"bcd0ae061711",1499800604,"[OPENMP] Add restriction for reduction clause in taskloop directives.","[OPENMP] Add restriction for reduction clause in taskloop directives.\n\nAdded checks for the reduction clauses in the taskloop directives:\n1. Only addressable items must be used in reduction clauses.\n2. Reduction clauses cannot be used with nogroup clauses.\n\nllvm-svn: 307693"},
[j]={{Z,2532,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  // ...\n // Parse declarator \'=\' initializer.\n  case InitKind::Equal: {\n    // ...\n    if (Tok.is(tok::kw_delete)) {\n    // ...\n    } else if (Tok.is(tok::kw_default)) {\n    // ...\n    } else {\n      // ...\n      // If this is the only decl in (possibly) range based for statement,\n      // our best guess is that the user meant \':\' instead of \'=\'.\n      if (Tok.is(tok::r_paren) && FRI && D.isFirstDeclarator()) {\n       Diag(EqualLoc, diag::err_single_decl_assign_in_for_range) << FixItHint::CreateReplacement(EqualLoc, \":\");"}}
[b]={{n,13412,"static bool checkReductionClauseWithNogroup(Sema &S, ArrayRef<OMPClause *> Clauses) {\n  // ...\n  if (ReductionClause && NogroupClause) {\n    S.Diag(ReductionClause->getBeginLoc(), diag::err_omp_reduction_with_nogroup) << SourceRange(NogroupClause->getBeginLoc(), NogroupClause->getEndLoc());"}},
},
["err_size_t_literal_too_large"]={
[b]={{nil,B,"err_size_t_literal_too_large"}},
[c]={{nil,B,"%select{signed |}0\'size_t\' literal is out of range of possible %select{signed |}0\'size_t\' values"}},
[d]={{nil,B,{{"signed ",a},"\'size_t\' literal is out of range of possible ",{"signed ",a},"\'size_t\' values"}}},
[e]=k,
[g]="(?:signed |)\'size_t\' literal is out of range of possible (?:signed |)\'size_t\' values",
[h]=a,
[i]={{nil,B,y}},
[f]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals","[C++2b] Support size_t literals\n\nThis adds support for C++2b\'s z/uz suffixes for size_t literals (P0330)."},
[j]={{n,4241,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.isFixedPointLiteral()) {\n  // ...\n  } else if (Literal.isFloatingLiteral()) {\n  // ...\n  } else if (!Literal.isIntegerLiteral()) {\n  // ...\n  } else {\n    // ...\n    if (Literal.GetIntegerValue(ResultVal)) {\n    // ...\n    } else {\n      // ...\n      // If we still couldn\'t decide a type, we either have \'size_t\' literal\n      // that is out of range, or a decimal literal that does not fit in a\n      // signed long long and has no U suffix.\n      if (Ty.isNull()) {\n        if (Literal.isSizeT)\n          Diag(Tok.getLocation(), diag::err_size_t_literal_too_large) << Literal.isUnsigned;"}},
[l]={
[l]={
["clang/test/SemaCXX/size_t-literal.cpp"]={"clang/test/SemaCXX/size_t-literal.cpp:74:9: error: signed \'size_t\' literal is out of range of possible signed \'size_t\' values","clang/test/SemaCXX/size_t-literal.cpp:76:9: error: \'size_t\' literal is out of range of possible \'size_t\' values","clang/test/SemaCXX/size_t-literal.cpp:80:9: error: \'size_t\' literal is out of range of possible \'size_t\' values"}
["clang/test/OpenMP/taskloop_reduction_messages_attr.cpp"]={"clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:309:37: error: \'reduction\' clause cannot be used with \'nogroup\' clause"}
}
}
},
},
["err_sizeless_in_exception_spec"]={
["err_omp_reduction_wrong_type"]={
[b]={{nil,s,"err_sizeless_in_exception_spec"}},
[d]="err_omp_reduction_wrong_type",
[c]={{nil,s,"%select{|reference to }0sizeless type %1 is not allowed in exception specification"}},
[e]="reduction type cannot be %select{qualified with \'const\', \'volatile\' or \'restrict\'|a function|a reference|an array}0 type",
[d]={{nil,s,{{a,"reference to "},"sizeless type B is not allowed in exception specification"}}},
[i]={{nil,nil,{"reduction type cannot be ",{"qualified with \'const\', \'volatile\' or \'restrict\'","a function","a reference","an array"}," type"}}},
[e]=k,
[j]=k,
[g]="(?:|reference to )sizeless type (.*?) is not allowed in exception specification",
[c]="reduction type cannot be (?:qualified with \'const\', \'volatile\' or \'restrict\'|a function|a reference|an array) type",
[h]=a,
[h]=a,
[i]={{nil,s,m}},
[g]=o,
[f]={Q,1576908663,O,N},
[f]={"94a4f0cb5f8a",1456982499,"[OPENMP 4.0] Initial support for \'omp declare reduction\' construct.","[OPENMP 4.0] Initial support for \'omp declare reduction\' construct.\n\nAdd parsing, sema analysis and serialization/deserialization for \'declare reduction\' construct.\nUser-defined reductions are defined as\n\n#pragma omp declare reduction( reduction-identifier : typename-list : combiner ) [initializer ( initializer-expr )]\nThese custom reductions may be used in \'reduction\' clauses of OpenMP constructs. The combiner specifies how partial results can be combined into a single value. The\ncombiner can use the special variable identifiers omp_in and omp_out that are of the type of the variables being reduced with this reduction-identifier. Each of them will\ndenote one of the values to be combined before executing the combiner. It is assumed that the special omp_out identifier will refer to the storage that holds the resulting\ncombined value after executing the combiner.\nAs the initializer-expr value of a user-defined reduction is not known a priori the initializer-clause can be used to specify one. Then the contents of the initializer-clause\nwill be used as the initializer for private copies of reduction list items where the omp_priv identifier will refer to the storage to be initialized. The special identifier\nomp_orig can also appear in the initializer-clause and it will refer to the storage of the original variable to be reduced.\nDifferential Revision: http://reviews.llvm.org/D11182\n\nllvm-svn: 262582"},
[j]={{"clang/lib/Sema/SemaExceptionSpec.cpp",185,"/// 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  // The MSVC compatibility mode doesn\'t extend to sizeless types,\n  // so diagnose them separately.\n  if (PointeeT->isSizelessType() && Kind != 1) {\n    Diag(Range.getBegin(), diag::err_sizeless_in_exception_spec) << (Kind == 2 ? 1 : 0) << PointeeT << Range;"}},
[b]={{n,22212,"QualType Sema::ActOnOpenMPDeclareReductionType(SourceLocation TyLoc, TypeResult ParsedType) {\n // ...\n // [OpenMP 4.0], 2.15 declare reduction Directive, Restrictions, C\\C++\n // A type name in a declare reduction directive cannot be a function type, an\n // array type, a reference type, or a type qualified with const, volatile or\n  // restrict.\n  if (ReductionType.hasQualifiers()) {\n    Diag(TyLoc, diag::err_omp_reduction_wrong_type) << 0;"},{n,22217,"QualType Sema::ActOnOpenMPDeclareReductionType(SourceLocation TyLoc, TypeResult ParsedType) {\n  // ...\n  if (ReductionType->isFunctionType()) {\n    Diag(TyLoc, diag::err_omp_reduction_wrong_type) << 1;"},{n,22221,"QualType Sema::ActOnOpenMPDeclareReductionType(SourceLocation TyLoc, TypeResult ParsedType) {\n  // ...\n  if (ReductionType->isReferenceType()) {\n    Diag(TyLoc, diag::err_omp_reduction_wrong_type) << 2;"},{n,22225,"QualType Sema::ActOnOpenMPDeclareReductionType(SourceLocation TyLoc, TypeResult ParsedType) {\n  // ...\n  if (ReductionType->isArrayType()) {\n    Diag(TyLoc, diag::err_omp_reduction_wrong_type) << 3;"}},
[l]={
[l]={
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:310:28: error: sizeless type \'svint8_t\' (aka \'__SVInt8_t\') is not allowed in exception specification","clang/test/SemaCXX/sizeless-1.cpp:312:38: error: reference to sizeless type \'svint8_t\' (aka \'__SVInt8_t\') is not allowed in exception specification"}
["clang/test/OpenMP/declare_reduction_messages.c"]={"clang/test/OpenMP/declare_reduction_messages.c:18:35: error: reduction type cannot be qualified with \'const\', \'volatile\' or \'restrict\' type","clang/test/OpenMP/declare_reduction_messages.c:19:35: error: reduction type cannot be qualified with \'const\', \'volatile\' or \'restrict\' type","clang/test/OpenMP/declare_reduction_messages.c:28:37: error: reduction type cannot be a function type","clang/test/OpenMP/declare_reduction_messages.c:29:37: error: reduction type cannot be an array type"}
}
}
},
},
["err_sizeless_nonlocal"]={
["err_omp_ref_type_arg"]={
[b]={{nil,s,"err_sizeless_nonlocal"}},
[d]="err_omp_ref_type_arg",
[c]={{nil,s,"non-local variable with sizeless type %0"}},
[e]="arguments of \'#pragma omp %0\' cannot be of reference type %1",
[d]={{nil,s,"non-local variable with sizeless type A"}},
[i]="arguments of \'#pragma omp A\' cannot be of reference type B",
[e]=k,
[j]=k,
[g]="non\\-local variable with sizeless type (.*?)",
[c]="arguments of \'\\#pragma omp (.*?)\' cannot be of reference type (.*?)",
[h]=a,
[h]=a,
[i]={{nil,s,m}},
[g]=o,
[f]={Q,1576908663,O,N},
[f]={nb,1363934075,ob,pb},
[j]={{t,8749,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (!NewVD->hasLocalStorage() && T->isSizelessType() && !T.isWebAssemblyReferenceType()) {\n   Diag(NewVD->getLocation(), diag::err_sizeless_nonlocal) << T;"}},
[b]={{n,3226,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    // OpenMP [2.9.2, Restrictions, C/C++, p.10]\n    //  A threadprivate variable must not have a reference type.\n    if (VD->getType()->isReferenceType()) {\n     Diag(ILoc, diag::err_omp_ref_type_arg) << getOpenMPDirectiveName(OMPD_threadprivate) << VD->getType();"}},
[l]={
[l]={
["clang/test/Sema/sizeless-1.c"]={"clang/test/Sema/sizeless-1.c:8:10: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:9:17: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:10:17: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:11:19: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')","clang/test/Sema/sizeless-1.c:57:19: error: non-local variable with sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"}
[Cb]={"clang/test/OpenMP/threadprivate_messages.cpp:59:28: error: arguments of \'#pragma omp threadprivate\' cannot be of reference type \'int &\'"}
}
}
},
},
["err_sizeof_alignof_function_type"]={
["err_omp_region_not_file_context"]={
[b]="err_sizeof_alignof_function_type",
[d]="err_omp_region_not_file_context",
[c]={{nil,s,"invalid application of \'%0\' to a function type"},{u,R,"invalid application of \'%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align|__alignof}0\' to a function type"},{"7.1",nil,"invalid application of \'%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align}0\' to a function type"}},
[e]="directive must be at file or namespace scope",
[d]={{nil,s,"invalid application of \'A\' to a function type"},{u,R,{"invalid application of \'",{tc,sc,"vec_step","__builtin_omp_required_simd_align","__alignof"},"\' to a function type"}},{"7.1",nil,{"invalid application of \'",{tc,sc,"vec_step","__builtin_omp_required_simd_align"},"\' to a function type"}}},
[i]="directive must be at file or namespace scope",
[e]=k,
[j]=k,
[g]="invalid application of \'(.*?)\' to a function type",
[c]="directive must be at file or namespace scope",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"4e28b2658901",1376432802,"sizeof(void) etc. should be a hard error in C++.","sizeof(void) etc. should be a hard error in C++.\n\nPR16872.\n\nllvm-svn: 188324"},
[f]={"0b0da296e6de",1459942739,"[OPENMP] Parsing and Sema support for \'omp declare target\' directive","[OPENMP] Parsing and Sema support for \'omp declare target\' directive\n\nAdd parsing, sema analysis for \'declare target\' construct for OpenMP 4.0\n(4.5 support will be added in separate patch).\n\nThe declare target directive specifies that variables, functions (C, C++\nand Fortran), and subroutines (Fortran) are mapped to a device. The declare\ntarget directive is a declarative directive. In Clang declare target is\nimplemented as implicit attribute for the declaration.\n\nThe syntax of the declare target directive is as follows:\n\n #pragma omp declare target\n declarations-definition-seq\n #pragma omp end declare target\n\nBased on patch from Michael Wong http://reviews.llvm.org/D15321\n\nllvm-svn: 265530"},
[j]={{n,4441,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // ...\n  if (ExprTy->isFunctionType()) {\n    Diag(E->getExprLoc(), diag::err_sizeof_alignof_function_type) << getTraitSpelling(ExprKind) << E->getSourceRange();"},{n,4700,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n///  Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n///  The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n///  standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n  // ...\n  if (ExprType->isFunctionType()) {\n    Diag(OpLoc, diag::err_sizeof_alignof_function_type) << KWName << ExprRange;"}},
[b]={{n,22983,"bool Sema::ActOnStartOpenMPDeclareTargetContext(DeclareTargetContextInfo &DTCI) {\n  // ...\n  if (!CurLexicalContext->isFileContext() && !CurLexicalContext->isExternCContext() && !CurLexicalContext->isExternCXXContext() && !isa<CXXRecordDecl>(CurLexicalContext) && !isa<ClassTemplateDecl>(CurLexicalContext) && !isa<ClassTemplatePartialSpecializationDecl>(CurLexicalContext) && !isa<ClassTemplateSpecializationDecl>(CurLexicalContext)) {\n    Diag(DTCI.Loc, diag::err_omp_region_not_file_context);"}}
[l]={
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:47:9: error: invalid application of \'sizeof\' to a function type"}
}
},
},
["err_sizeof_alignof_incomplete_or_sizeless_type"]={
["err_omp_required_access"]={
[b]={{nil,s,"err_sizeof_alignof_incomplete_or_sizeless_type"}},
[d]="err_omp_required_access",
[c]={{nil,s,"invalid application of \'%0\' to %select{an incomplete|sizeless}1 type %2"}},
[e]="%0 variable must be %1",
[d]={{nil,s,{"invalid application of \'A\' to ",{"an incomplete","sizeless"}," type C"}}},
[i]="A variable must be B",
[e]=k,
[j]=k,
[g]="invalid application of \'(.*?)\' to (?:an incomplete|sizeless) type (.*?)",
[c]="(.*?) variable must be (.*?)",
[h]=a,
[h]=a,
[i]={{nil,s,m}},
[g]=o,
[f]={Q,1576908663,O,N},
[f]={"d48bcd8a4693",1396236998,"[OPENMP] Implemented \'copyin\' clause","[OPENMP] Implemented \'copyin\' clause\n\nllvm-svn: 205164"},
[j]={{n,4416,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // ...\n // \'alignof\' applied to an expression only requires the base element type of\n // the expression to be complete. \'sizeof\' requires the expression\'s type to\n // be complete (and will attempt to complete it if it\'s an array of unknown\n // bound).\n if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n   if (RequireCompleteSizedType(E->getExprLoc(), Context.getBaseElementType(E->getType()), diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{n,4426,"/// Check the constraints on expression operands to unary type expression\n/// and type traits.\n///\n/// Completes any types necessary and validates the constraints on the operand\n/// expression. The logic mostly mirrors the type-based overload, but may modify\n/// the expression as it completes the type for that expression through template\n/// instantiation, etc.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, UnaryExprOrTypeTrait ExprKind) {\n  // ...\n  // \'alignof\' applied to an expression only requires the base element type of\n // the expression to be complete. \'sizeof\' requires the expression\'s type to\n  // be complete (and will attempt to complete it if it\'s an array of unknown\n // bound).\n if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n // ...\n } else {\n   if (RequireCompleteSizedExprType(E, diag::err_sizeof_alignof_incomplete_or_sizeless_type, getTraitSpelling(ExprKind), E->getSourceRange()))"},{n,4692,"/// Check the constraints on operands to unary expression and type\n/// traits.\n///\n/// This will complete any types necessary, and validate the various constraints\n/// on those operands.\n///\n/// The UsualUnaryConversions() function is *not* called by this routine.\n/// C99 6.3.2.1p[2-4] all state:\n///   Except when it is the operand of the sizeof operator ...\n///\n/// C++ [expr.sizeof]p4\n///  The lvalue-to-rvalue, array-to-pointer, and function-to-pointer\n///  standard conversions are not applied to the operand of sizeof.\n///\n/// This policy is followed for all of the unary trait expressions.\nbool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, SourceLocation OpLoc, SourceRange ExprRange, UnaryExprOrTypeTrait ExprKind, StringRef KWName) {\n // ...\n if (RequireCompleteSizedType(OpLoc, ExprType, diag::err_sizeof_alignof_incomplete_or_sizeless_type, KWName, ExprRange))"}},
[b]={{n,18310,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (!IsImplicitClause) {\n     // ...\n      // OpenMP [2.9.3.4, Restrictions, p.2]\n     // A list item that is private within a parallel region must not appear\n     // in a firstprivate clause on a worksharing construct if any of the\n     // worksharing regions arising from the worksharing construct ever bind\n     // to any of the parallel regions arising from the parallel construct.\n     // OpenMP 4.5 [2.15.3.4, Restrictions, p.3]\n      // A list item that is private within a teams region must not appear in a\n     // firstprivate clause on a distribute construct if any of the distribute\n     // regions arising from the distribute construct ever bind to any of the\n     // teams regions arising from the teams construct.\n      // OpenMP 4.5 [2.15.3.4, Restrictions, p.3]\n      // A list item that appears in a reduction clause of a teams construct\n     // must not appear in a firstprivate clause on a distribute construct if\n      // any of the distribute regions arising from the distribute construct\n     // ever bind to any of the teams regions arising from the teams construct.\n     if ((isOpenMPWorksharingDirective(CurrDir) || isOpenMPDistributeDirective(CurrDir)) && !isOpenMPParallelDirective(CurrDir) && !isOpenMPTeamsDirective(CurrDir)) {\n       // ...\n        if (DVar.CKind != OMPC_shared && (isOpenMPParallelDirective(DVar.DKind) || isOpenMPTeamsDirective(DVar.DKind) || DVar.DKind == OMPD_unknown)) {\n          Diag(ELoc, diag::err_omp_required_access) << getOpenMPClauseName(OMPC_firstprivate) << getOpenMPClauseName(OMPC_shared);"},{n,18585,"OMPClause *Sema::ActOnOpenMPLastprivateClause(ArrayRef<Expr *> VarList, OpenMPLastprivateModifier LPKind, SourceLocation LPKindLoc, SourceLocation ColonLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n for (Expr *RefExpr : VarList) {\n    // ...\n   if (isOpenMPWorksharingDirective(CurrDir) && !isOpenMPParallelDirective(CurrDir) && !isOpenMPTeamsDirective(CurrDir)) {\n     // ...\n     if (DVar.CKind != OMPC_shared) {\n       Diag(ELoc, diag::err_omp_required_access) << getOpenMPClauseName(OMPC_lastprivate) << getOpenMPClauseName(OMPC_shared);"},{n,19388,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    // OpenMP [2.9.3.6, Restrictions, C/C++, p.4]\n    //  If a list-item is a reference type then it must bind to the same object\n   // for all threads of the team.\n    if (!ASE && !OASE) {\n      // ...\n      // OpenMP [2.14.3.6, Restrictions, p.1]\n     // A list item that appears in a reduction clause of a worksharing\n      // construct must be shared in the parallel regions to which any of the\n     // worksharing regions arising from the worksharing construct bind.\n     if (isOpenMPWorksharingDirective(CurrDir) && !isOpenMPParallelDirective(CurrDir) && !isOpenMPTeamsDirective(CurrDir)) {\n       // ...\n       if (DVar.CKind != OMPC_shared) {\n         S.Diag(ELoc, diag::err_omp_required_access) << getOpenMPClauseName(OMPC_reduction) << getOpenMPClauseName(OMPC_shared);"},{n,20378,"OMPClause *Sema::ActOnOpenMPCopyinClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n  for (Expr *RefExpr : VarList) {\n   // ...\n   // OpenMP [2.14.4.1, Restrictions, C/C++, p.1]\n   // A list item that appears in a copyin clause must be threadprivate.\n   if (!DSAStack->isThreadPrivate(VD)) {\n     Diag(ELoc, diag::err_omp_required_access) << getOpenMPClauseName(OMPC_copyin) << getOpenMPDirectiveName(OMPD_threadprivate);"},{n,20474,"OMPClause *Sema::ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n  for (Expr *RefExpr : VarList) {\n   // ...\n    // OpenMP [2.14.4.2, Restrictions, p.2]\n   // A list item that appears in a copyprivate clause may not appear in a\n   // private or firstprivate clause on the single construct.\n   if (!VD || !DSAStack->isThreadPrivate(VD)) {\n      // ...\n     // OpenMP [2.11.4.2, Restrictions, p.1]\n     // All list items that appear in a copyprivate clause must be either\n     // threadprivate or private in the enclosing context.\n      if (DVar.CKind == OMPC_unknown) {\n       // ...\n       if (DVar.CKind == OMPC_shared) {\n          Diag(ELoc, diag::err_omp_required_access) << getOpenMPClauseName(OMPC_copyprivate) << \"threadprivate or private in the enclosing context\";"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:11:22: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:13:22: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:21:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:28:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:35:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:45:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:61:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:73:19: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:86:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:88:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:114:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:201:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:206:28: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:126:21: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:140:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:141:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:150:17: error: invalid application of \'sizeof\' to an incomplete type \'int[]\'"}
["clang/test/OpenMP/parallel_sections_copyin_messages.cpp"]={"clang/test/OpenMP/parallel_sections_copyin_messages.cpp:101:38: error: copyin variable must be threadprivate","clang/test/OpenMP/parallel_sections_copyin_messages.cpp:109:38: error: copyin variable must be threadprivate"}
}
}
},
},
["err_sizeof_alignof_typeof_bitfield"]={
["err_omp_required_clause"]={
[b]="err_sizeof_alignof_typeof_bitfield",
[d]={{nil,C,"err_omp_required_clause"}},
[c]={{nil,D,"invalid application of \'%select{sizeof|alignof|typeof|typeof_unqual}0\' to bit-field"},{x,nil,"invalid application of \'%select{sizeof|alignof|typeof}0\' to bit-field"}},
[e]={{nil,C,"directive \'#pragma omp %0\' requires the \'%1\' clause"}},
[d]={{nil,D,{"invalid application of \'",{tc,sc,"typeof","typeof_unqual"},"\' to bit-field"}},{x,nil,{"invalid application of \'",{tc,sc,"typeof"},"\' to bit-field"}}},
[i]={{nil,C,"directive \'#pragma omp A\' requires the \'B\' clause"}},
[e]=k,
[j]=k,
[g]="invalid application of \'(?:sizeof|alignof|typeof|typeof_unqual)\' to bit\\-field",
[c]="directive \'\\#pragma omp (.*?)\' requires the \'(.*?)\' clause",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,C,V}},
[f]={"e301ba2b4891",1447207335,"Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:","Add support for GCC\'s \'__auto_type\' extension, per the GCC manual:\nhttps://gcc.gnu.org/onlinedocs/gcc/Typeof.html\n\nDifferences from the GCC extension:\n * __auto_type is also permitted in C++ (but only in places where\n  it could appear in C), allowing its use in headers that might\n  be shared across C and C++, or used from C++98\n * __auto_type can be combined with a declarator, as with C++ auto\n   (for instance, \"__auto_type *p\")\n * multiple variables can be declared in a single __auto_type\n  declaration, with the C++ semantics (the deduced type must be\the same in each case)\n\nThis patch also adds a missing restriction on applying typeof to\na bit-field, which GCC has historically rejected in C (due to\nlack of clarity as to whether the operand should be promoted).\nThe same restriction also applies to __auto_type in C (in both\nGCC and Clang).\n\nThis also fixes PR25449.\n\nPatch by Nicholas Allegra!\n\nllvm-svn: 252690"},
[f]={"6c05005238a8",1613158019,"[OpenMP] Implement \'#pragma omp tile\', by Michael Kruse (@Meinersbur).","[OpenMP] Implement \'#pragma omp tile\', by Michael Kruse (@Meinersbur).\n\nThe tile directive is in OpenMP\'s Technical Report 8 and foreseeably will be part of the upcoming OpenMP 5.1 standard.\n\nThis implementation is based on an AST transformation providing a de-sugared loop nest. This makes it simple to forward the de-sugared transformation to loop associated directives taking the tiled loops. In contrast to other loop associated directives, the OMPTileDirective does not use CapturedStmts. Letting loop associated directives consume loops from different capture context would be difficult.\n\nA significant amount of code generation logic is taking place in the Sema class. Eventually, I would prefer if these would move into the CodeGen component such that we could make use of the OpenMPIRBuilder, together with flang. Only expressions converting between the language\'s iteration variable and the logical iteration space need to take place in the semantic analyzer: Getting the of iterations (e.g. the overload resolution of `std::distance`) and converting the logical iteration number to the iteration variable (e.g. overload resolution of `iteration + .omp.iv`). In clang, only CXXForRangeStmt is also represented by its de-sugared components. However, OpenMP loop are not defined as syntatic sugar. Starting with an AST-based approach allows us to gradually move generated AST statements into CodeGen, instead all at once.\n\nI would also like to refactor `checkOpenMPLoop` into its functionalities in a follow-up. In this patch it is used twice. Once for checking proper nesting and emitting diagnostics, and additionally for deriving the logical iteration space per-loop (instead of for the loop nest).\n\nDifferential Revision: https://reviews.llvm.org/D76342"},
[j]={{n,4502,"static bool CheckAlignOfExpr(Sema &S, Expr *E, UnaryExprOrTypeTrait ExprKind) {\n // ...\n if (E->getObjectKind() == OK_BitField) {\n   S.Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 1 << E->getSourceRange();"},{n,4878,"/// Build a sizeof or alignof expression given an expression\n/// operand.\nExprResult Sema::CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc, UnaryExprOrTypeTrait ExprKind) {\n // ...\n if (E->isTypeDependent()) {\n // ...\n } else if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n // ...\n } else if (ExprKind == UETT_VecStep) {\n  // ...\n  } else if (ExprKind == UETT_OpenMPRequiredSimdAlign) {\n  // ...\n  } else if (E->refersToBitField()) { // C99 6.5.3.4p1.\n   Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << 0;"},{F,9412,"QualType Sema::BuildTypeofExprType(Expr *E, TypeOfKind Kind) {\n // ...\n if (!getLangOpts().CPlusPlus && E->refersToBitField())\n   Diag(E->getExprLoc(), diag::err_sizeof_alignof_typeof_bitfield) << (Kind == TypeOfKind::Unqualified ? 3 : 2);"}},
[b]={{L,2945,"/// Parsing of declarative or executable OpenMP directives.\n///\n///      threadprivate-directive:\n///        annot_pragma_openmp \'threadprivate\' simple-variable-list\n///        annot_pragma_openmp_end\n///\n///      allocate-directive:\n///        annot_pragma_openmp \'allocate\' simple-variable-list\n///        annot_pragma_openmp_end\n///\n///      declare-reduction-directive:\n///        annot_pragma_openmp \'declare\' \'reduction\' \'(\' <reduction_id> \':\'\n///        <type> {\',\' <type>} \':\' <expression> \')\' [\'initializer\' \'(\'\n///        (\'omp_priv\' \'=\' <expression>|<function_call>) \')\']\n///         annot_pragma_openmp_end\n///\n///      declare-mapper-directive:\n///        annot_pragma_openmp \'declare\' \'mapper\' \'(\' [<mapper-identifer> \':\']\n///        <type> <var> \')\' [<clause>[[,] <clause>] ... ]\n///        annot_pragma_openmp_end\n///\n///      executable-directive:\n///        annot_pragma_openmp \'parallel\' | \'simd\' | \'for\' | \'sections\' |\n///        \'section\' | \'single\' | \'master\' | \'critical\' [ \'(\' <name> \')\' ] |\n///        \'parallel for\' | \'parallel sections\' | \'parallel master\' | \'task\' |\n///        \'taskyield\' | \'barrier\' | \'taskwait\' | \'flush\' | \'ordered\' | \'error\'\n///        | \'atomic\' | \'for simd\' | \'parallel for simd\' | \'target\' | \'target\n///        data\' | \'taskgroup\' | \'teams\' | \'taskloop\' | \'taskloop simd\' |\n///        \'master taskloop\' | \'master taskloop simd\' | \'parallel master\n///        taskloop\' | \'parallel master taskloop simd\' | \'distribute\' | \'target\n///        enter data\' | \'target exit data\' | \'target parallel\' | \'target\n///        parallel for\' | \'target update\' | \'distribute parallel for\' |\n///        \'distribute paralle for simd\' | \'distribute simd\' | \'target parallel\n///        for simd\' | \'target simd\' | \'teams distribute\' | \'teams distribute\n///        simd\' | \'teams distribute parallel for simd\' | \'teams distribute\n///        parallel for\' | \'target teams\' | \'target teams distribute\' | \'target\n///        teams distribute parallel for\' | \'target teams distribute parallel\n///        for simd\' | \'target teams distribute simd\' | \'masked\' |\n///        \'parallel masked\' {clause} annot_pragma_openmp_end\n///\nStmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective(ParsedStmtContext StmtCtx, bool ReadDirectiveWithinMetadirective) {\n  // ...\n  case OMPD_parallel:\n  case OMPD_simd:\n  case OMPD_tile:\n  case OMPD_unroll:\n  case OMPD_for:\n  case OMPD_for_simd:\n  case OMPD_sections:\n  case OMPD_single:\n  case OMPD_section:\n  case OMPD_master:\n  case OMPD_critical:\n  case OMPD_parallel_for:\n  case OMPD_parallel_for_simd:\n  case OMPD_parallel_sections:\n  case OMPD_parallel_master:\n  case OMPD_parallel_masked:\n  case OMPD_task:\n  case OMPD_ordered:\n  case OMPD_atomic:\n  case OMPD_target:\n  case OMPD_teams:\n  case OMPD_taskgroup:\n  case OMPD_target_data:\n  case OMPD_target_parallel:\n  case OMPD_target_parallel_for:\n  case OMPD_loop:\n  case OMPD_teams_loop:\n  case OMPD_target_teams_loop:\n  case OMPD_parallel_loop:\n  case OMPD_target_parallel_loop:\n  case OMPD_taskloop:\n  case OMPD_taskloop_simd:\n  case OMPD_master_taskloop:\n  case OMPD_masked_taskloop:\n  case OMPD_master_taskloop_simd:\n  case OMPD_masked_taskloop_simd:\n  case OMPD_parallel_master_taskloop:\n  case OMPD_parallel_masked_taskloop:\n  case OMPD_parallel_master_taskloop_simd:\n  case OMPD_parallel_masked_taskloop_simd:\n  case OMPD_distribute:\n  case OMPD_distribute_parallel_for:\n  case OMPD_distribute_parallel_for_simd:\n  case OMPD_distribute_simd:\n  case OMPD_target_parallel_for_simd:\n  case OMPD_target_simd:\n  case OMPD_teams_distribute:\n  case OMPD_teams_distribute_simd:\n  case OMPD_teams_distribute_parallel_for_simd:\n  case OMPD_teams_distribute_parallel_for:\n  case OMPD_target_teams:\n  case OMPD_target_teams_distribute:\n  case OMPD_target_teams_distribute_parallel_for:\n case OMPD_target_teams_distribute_parallel_for_simd:\n  case OMPD_target_teams_distribute_simd:\n  case OMPD_dispatch:\n  case OMPD_masked: {\n   // ...\n   if (DKind == OMPD_tile && !FirstClauses[unsigned(OMPC_sizes)].getInt()) {\n     Diag(Loc, diag::err_omp_required_clause) << getOpenMPDirectiveName(OMPD_tile) << \"sizes\";"}},
[l]={
[l]={
["clang/test/Sema/c2x-typeof.c"]={"clang/test/Sema/c2x-typeof.c:48:7: error: invalid application of \'typeof\' to bit-field","clang/test/Sema/c2x-typeof.c:49:14: error: invalid application of \'typeof_unqual\' to bit-field"}
["clang/test/OpenMP/tile_messages.cpp"]={"clang/test/OpenMP/tile_messages.cpp:57:3: error: directive \'#pragma omp tile\' requires the \'sizes\' clause"}
}
}
},
},
["err_sizeof_nonfragile_interface"]={
["err_omp_requires_clause_redeclaration"]={
[b]="err_sizeof_nonfragile_interface",
[d]={{nil,u,"err_omp_requires_clause_redeclaration"}},
[c]="application of \'%select{alignof|sizeof}1\' to interface %0 is not supported on this architecture and platform",
[e]={{nil,u,"Only one %0 clause can appear on a requires directive in a single translation unit"}},
[d]={{nil,nil,{"application of \'",{sc,tc},"\' to interface A is not supported on this architecture and platform"}}},
[i]={{nil,u,"Only one A clause can appear on a requires directive in a single translation unit"}},
[e]=k,
[j]=k,
[g]="application of \'(?:alignof|sizeof)\' to interface (.*?) is not supported on this architecture and platform",
[c]="Only one (.*?) clause can appear on a requires directive in a single translation unit",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,u,o}},
[f]={"37920f53599e",1240343716,"reject sizeof(itf) when itf is a forward declared interface, or when","reject sizeof(itf) when itf is a forward declared interface, or when\nin non-fragile abi mode. rdar://6811884\n\nllvm-svn: 69701"},
[f]={"1408f91a2588",1537936119,"[OPENMP] Add support for OMP5 requires directive + unified_address clause","[OPENMP] Add support for OMP5 requires directive + unified_address clause\n\nAdd support for OMP5.0 requires directive and unified_address clause.\nPatches to follow will include support for additional clauses.\n\nDifferential Revision: https://reviews.llvm.org/D52359\n\nllvm-svn: 343063"},
[j]={{n,4348,"static bool CheckObjCTraitOperandConstraints(Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange, UnaryExprOrTypeTrait TraitKind) {\n  // Reject sizeof(interface) and sizeof(interface<proto>) if the\n // runtime doesn\'t allow it.\n if (!S.LangOpts.ObjCRuntime.allowsSizeofAlignof() && T->isObjCObjectType()) {\n   S.Diag(Loc, diag::err_sizeof_nonfragile_interface) << T << (TraitKind == UETT_SizeOf) << ArgRange;"}},
[b]={{n,678,"/// Stack for tracking declarations used in OpenMP directives and\n/// clauses and their data-sharing attributes.\nclass DSAStackTy {\n  // ...\n  /// Checks for a duplicate clause amongst previously declared requires\n  /// directives\n  bool hasDuplicateRequiresClause(ArrayRef<OMPClause *> ClauseList) const {\n   // ...\n    for (OMPClause *CNew : ClauseList) {\n      for (const OMPRequiresDecl *D : RequiresDecls) {\n        for (const OMPClause *CPrev : D->clauselists()) {\n         if (CNew->getClauseKind() == CPrev->getClauseKind()) {\n           SemaRef.Diag(CNew->getBeginLoc(), diag::err_omp_requires_clause_redeclaration) << getOpenMPClauseName(CNew->getClauseKind());"}},
[l]={
[l]={
["clang/test/SemaObjC/sizeof-interface.m"]={"clang/test/SemaObjC/sizeof-interface.m:26:9: error: application of \'sizeof\' to interface \'I0\' is not supported on this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:35:9: error: application of \'sizeof\' to interface \'I0\' is not supported on this architecture and platform","clang/test/SemaObjC/sizeof-interface.m:67:40: error: application of \'sizeof\' to interface \'I\' is not supported on this architecture and platform"}
["clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp"]={"clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp:10:22: error: Only one atomic_default_mem_order clause can appear on a requires directive in a single translation unit","clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp:11:22: error: Only one atomic_default_mem_order clause can appear on a requires directive in a single translation unit"}
}
}
},
},
["err_sizeof_pack_no_pack_name"]={
["err_omp_requires_out_inout_depend_type"]={
[b]="err_sizeof_pack_no_pack_name",
[d]={{nil,J,"err_omp_requires_out_inout_depend_type"}},
[c]="%0 does not refer to the name of a parameter pack",
[e]={{nil,J,"reserved locator \'omp_all_memory\' requires \'out\' or \'inout\' dependency types"}},
[d]="A does not refer to the name of a parameter pack",
[i]={{nil,J,"reserved locator \'omp_all_memory\' requires \'out\' or \'inout\' dependency types"}},
[e]=k,
[j]=k,
[g]="(.*?) does not refer to the name of a parameter pack",
[c]="reserved locator \'omp_all_memory\' requires \'out\' or \'inout\' dependency types",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,J,K}},
[f]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a","Implement the sizeof...(pack) expression to compute the length of a\nparameter pack.\n\nNote that we\'re missing proper libclang support for the new\nSizeOfPackExpr expression node.\n\nllvm-svn: 122813"},
[f]={"9ba937112fa6",1652807460,"[OpenMP] Add parsing/sema support for omp_all_memory reserved locator","[OpenMP] Add parsing/sema support for omp_all_memory reserved locator\n\nAdds support for the reserved locator \'omp_all_memory\' for use\nin depend clauses with \'out\' or \'inout\' dependence-types.\n\nDifferential Revision: https://reviews.llvm.org/D125828"},
[j]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1047,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///  static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n // ...\n if (!ParameterPack || !ParameterPack->isParameterPack()) {\n   Diag(NameLoc, diag::err_sizeof_pack_no_pack_name) << &Name;"}},
[b]={{L,4312,"bool Parser::ParseOpenMPReservedLocator(OpenMPClauseKind Kind, Sema::OpenMPVarListDataTy &Data, const LangOptions &LangOpts) {\n // ...\n if (Tok.is(tok::identifier) && Tok.getIdentifierInfo()->isStr(\"omp_all_memory\")) {\n   if (Data.ExtraModifier == OMPC_DEPEND_outallmemory || Data.ExtraModifier == OMPC_DEPEND_inoutallmemory)\n   // ...\n   else if (Data.ExtraModifier != OMPC_DEPEND_out && Data.ExtraModifier != OMPC_DEPEND_inout)\n     Diag(Tok, diag::err_omp_requires_out_inout_depend_type);"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:30:43: error: \'Value\' does not refer to the name of a parameter pack"}
["clang/test/OpenMP/task_depend_messages.cpp"]={"clang/test/OpenMP/task_depend_messages.cpp:88:35: error: reserved locator \'omp_all_memory\' requires \'out\' or \'inout\' dependency types"}
}
}
},
},
["err_sizeof_pack_no_pack_name_suggest"]={
["err_omp_same_pointer_dereferenced"]={
[b]="err_sizeof_pack_no_pack_name_suggest",
[d]={{nil,z,"err_omp_same_pointer_dereferenced"}},
[c]="%0 does not refer to the name of a parameter pack; did you mean %1?",
[e]={{nil,z,"same pointer dereferenced in multiple different ways in map clause expressions"}},
[d]="A does not refer to the name of a parameter pack; did you mean B?",
[i]={{nil,z,"same pointer dereferenced in multiple different ways in map clause expressions"}},
[e]=k,
[j]=k,
[g]="(.*?) does not refer to the name of a parameter pack; did you mean (.*?)\\?",
[c]="same pointer dereferenced in multiple different ways in map clause expressions",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,z,o}},
[f]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a","Implement the sizeof...(pack) expression to compute the length of a\nparameter pack.\n\nNote that we\'re missing proper libclang support for the new\nSizeOfPackExpr expression node.\n\nllvm-svn: 122813"},
[f]={"2819260b357e",1519753320,"[OPENMP] Allow multiple mappings for member expressions for pointers.","[OPENMP] Allow multiple mappings for member expressions for pointers.\n\nIf several member expressions are mapped and they reference the same\naddress as a base, but access different members, this must be allowed.\n\nllvm-svn: 326212"},
[j]={{"clang/lib/Sema/SemaTemplateVariadic.cpp",1031,"/// Called when an expression computing the size of a parameter pack\n/// is parsed.\n///\n/// \\code\n/// template<typename ...Types> struct count {\n///  static const unsigned value = sizeof...(Types);\n/// };\n/// \\endcode\n///\n//\n/// \\param OpLoc The location of the \"sizeof\" keyword.\n/// \\param Name The name of the parameter pack whose size will be determined.\n/// \\param NameLoc The source location of the name of the parameter pack.\n/// \\param RParenLoc The location of the closing parentheses.\nExprResult Sema::ActOnSizeofParameterPackExpr(Scope *S, SourceLocation OpLoc, IdentifierInfo &Name, SourceLocation NameLoc, SourceLocation RParenLoc) {\n // ...\n case LookupResult::NotFound:\n  case LookupResult::NotFoundInCurrentInstantiation: {\n   // ...\n   if (TypoCorrection Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, nullptr, CCC, CTK_ErrorRecovery)) {\n     diagnoseTypo(Corrected, PDiag(diag::err_sizeof_pack_no_pack_name_suggest) << &Name, PDiag(diag::note_parameter_pack_here));"}},
[b]={{n,21609,"// Return true if expression E associated with value VD has conflicts with other\n// map information.\nstatic bool checkMapConflicts(Sema &SemaRef, DSAStackTy *DSAS, const ValueDecl *VD, const Expr *E, bool CurrentRegionOnly, OMPClauseMappableExprCommon::MappableExprComponentListRef CurComponents, OpenMPClauseKind CKind) {\n // ...\n bool FoundError = DSAS->checkMappableExprComponentListsForDecl(VD, CurrentRegionOnly, [&IsEnclosedByDataEnvironmentExpr, &SemaRef, VD, CurrentRegionOnly, ELoc, ERange, CKind, &EnclosingExpr, CurComponents](OMPClauseMappableExprCommon::MappableExprComponentListRef StackComponents, OpenMPClauseKind Kind) {\n   // ...\n   // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, C/C++, p.1]\n   // A variable for which the type is pointer and an array section\n   // derived from that variable must not appear as list items of map\n   // clauses of the same construct.\n   //\n   // Also, cover one of the cases in:\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.5]\n   // If any part of the original storage of a list item has corresponding\n   // storage in the device data environment, all of the original storage\n   // must have corresponding storage in the device data environment.\n   //\n   if (DerivedType->isAnyPointerType()) {\n     // ...\n     if (CI->getAssociatedExpression()->getStmtClass() != SI->getAssociatedExpression()->getStmtClass() || CI->getAssociatedDeclaration()->getCanonicalDecl() == SI->getAssociatedDeclaration()->getCanonicalDecl()) {\n       // ...\n        SemaRef.Diag(DerivedLoc, diag::err_omp_same_pointer_dereferenced) << DerivedLoc;"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:35:43: error: \'Type\' does not refer to the name of a parameter pack; did you mean \'Types\'?"}
["clang/test/OpenMP/target_teams_map_messages.cpp"]={"clang/test/OpenMP/target_teams_map_messages.cpp:245:45: error: same pointer dereferenced in multiple different ways in map clause expressions","clang/test/OpenMP/target_teams_map_messages.cpp:251:46: error: same pointer dereferenced in multiple different ways in map clause expressions"}
}
}
},
},
["err_sizeof_parameter_pack"]={
["err_omp_scan_single_clause_expected"]={
[b]="err_sizeof_parameter_pack",
[d]={{nil,p,"err_omp_scan_single_clause_expected"}},
[c]="expected parenthesized parameter pack name in \'sizeof...\' expression",
[e]={{nil,p,"exactly one of \'inclusive\' or \'exclusive\' clauses is expected"}},
[d]="expected parenthesized parameter pack name in \'sizeof...\' expression",
[i]={{nil,p,"exactly one of \'inclusive\' or \'exclusive\' clauses is expected"}},
[e]=k,
[j]=k,
[g]="expected parenthesized parameter pack name in \'sizeof\\.\\.\\.\' expression",
[c]="exactly one of \'inclusive\' or \'exclusive\' clauses is expected",
[h]=a,
[i]=G,
[f]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a","Implement the sizeof...(pack) expression to compute the length of a\nparameter pack.\n\nNote that we\'re missing proper libclang support for the new\nSizeOfPackExpr expression node.\n\nllvm-svn: 122813"},
[j]={{"clang/lib/Parse/ParseExpr.cpp",2477,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///      unary-expression:  [C99 6.5.3]\n///        \'sizeof\' unary-expression\n///        \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  // ...\n  // [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n  if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof)) {\n    // ...\n    if (Tok.is(tok::l_paren)) {\n    // ...\n    } else if (Tok.is(tok::identifier)) {\n    // ...\n    } else {\n      Diag(Tok, diag::err_sizeof_parameter_pack);"}}
},
["err_sls_hardening_arm_not_supported"]={
[b]={{nil,v,"err_sls_hardening_arm_not_supported"}},
[c]={{nil,v,"-mharden-sls is only supported on armv7-a or later"}},
[d]={{nil,v,"-mharden-sls is only supported on armv7-a or later"}},
[e]=k,
[g]="\\-mharden\\-sls is only supported on armv7\\-a or later",
[h]=a,
[h]=a,
[i]={{nil,v,y}},
[g]={{nil,p,o}},
[f]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013"},
[f]={W,1576908663,X,Y},
[j]={{qc,954,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  // Enable/disable straight line speculation hardening.\n  if (Arg *A = Args.getLastArg(options::OPT_mharden_sls_EQ)) {\n    // ...\n    if (EnableRetBr || EnableBlr)\n      if (!(isARMAProfile(Triple) && getARMSubArchVersionNumber(Triple) >= 7))\n        D.Diag(diag::err_sls_hardening_arm_not_supported) << Scope << A->getAsString(Args);"}}
[b]={{n,11277,"StmtResult Sema::ActOnOpenMPScanDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // Check that exactly one clause is specified.\n  if (Clauses.size() != 1) {\n    Diag(Clauses.empty() ? EndLoc : Clauses[1]->getBeginLoc(), diag::err_omp_scan_single_clause_expected);"}},
},
["err_spaceship_argument_narrowing"]={
[b]={{nil,H,"err_spaceship_argument_narrowing"}},
[c]={{nil,H,"argument to \'operator<=>\' %select{cannot be narrowed from type %1 to %2|evaluates to %1, which cannot be narrowed to type %2}0"}},
[d]={{nil,H,{"argument to \'operator<=>\' ",{"cannot be narrowed from type B to C","evaluates to B, which cannot be narrowed to type C"}}}},
[e]=k,
[g]="argument to \'operator\\<\\=\\>\' (?:cannot be narrowed from type (.*?) to (.*?)|evaluates to (.*?), which cannot be narrowed to type (.*?))",
[h]=a,
[i]={{nil,H,y}},
[f]={"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]={{n,12780,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n  // ...\n  case NK_Constant_Narrowing:\n    // ...\n    S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 1 << PreNarrowingValue.getAsString(S.Context, PreNarrowingType) << ToType;"},{n,12908,"static bool checkThreeWayNarrowingConversion(Sema &S, QualType ToType, Expr *E, QualType FromType, SourceLocation Loc) {\n  // ...\n  case NK_Type_Narrowing:\n    S.Diag(E->getBeginLoc(), diag::err_spaceship_argument_narrowing) << /*Constant*/ 0 << FromType << ToType;"}},
[l]={
[l]={
["clang/test/SemaCXX/compare-cxx2a.cpp"]={"clang/test/SemaCXX/compare-cxx2a.cpp:36:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:40:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:41:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:42:10: error: argument to \'operator<=>\' cannot be narrowed from type \'short\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:43:10: error: argument to \'operator<=>\' cannot be narrowed from type \'signed char\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:44:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:45:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:64:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:72:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:73:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:92:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:100:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:101:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:120:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:128:10: error: argument to \'operator<=>\' cannot be narrowed from type \'long\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:129:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:161:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:162:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:163:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:164:10: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:167:35: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:237:11: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned long\'","clang/test/SemaCXX/compare-cxx2a.cpp:251:10: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:252:26: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:257:16: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:261:10: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:331:28: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:338:12: error: argument to \'operator<=>\' evaluates to -1, which cannot be narrowed to type \'unsigned int\'","clang/test/SemaCXX/compare-cxx2a.cpp:339:12: error: argument to \'operator<=>\' cannot be narrowed from type \'int\' to \'unsigned int\'"}
["clang/test/OpenMP/scan_messages.cpp"]={"clang/test/OpenMP/scan_messages.cpp:10:101: error: exactly one of \'inclusive\' or \'exclusive\' clauses is expected","clang/test/OpenMP/scan_messages.cpp:15:204: error: exactly one of \'inclusive\' or \'exclusive\' clauses is expected","clang/test/OpenMP/scan_messages.cpp:16:194: error: exactly one of \'inclusive\' or \'exclusive\' clauses is expected","clang/test/OpenMP/scan_messages.cpp:17:188: error: exactly one of \'inclusive\' or \'exclusive\' clauses is expected","clang/test/OpenMP/scan_messages.cpp:93:34: error: exactly one of \'inclusive\' or \'exclusive\' clauses is expected","clang/test/OpenMP/scan_messages.cpp:98:34: error: exactly one of \'inclusive\' or \'exclusive\' clauses is expected","clang/test/OpenMP/scan_messages.cpp:103:34: error: exactly one of \'inclusive\' or \'exclusive\' clauses is expected","clang/test/OpenMP/scan_messages.cpp:108:194: error: exactly one of \'inclusive\' or \'exclusive\' clauses is expected","clang/test/OpenMP/scan_messages.cpp:109:188: error: exactly one of \'inclusive\' or \'exclusive\' clauses is expected"}
}
}
},
},
["err_spec_member_not_instantiated"]={
["err_omp_schedule_nonmonotonic_static"]={
[b]="err_spec_member_not_instantiated",
[d]="err_omp_schedule_nonmonotonic_static",
[c]="specialization of member %q0 does not specialize an instantiated member",
[e]="\'nonmonotonic\' modifier can only be specified with \'dynamic\' or \'guided\' schedule kind",
[d]="specialization of member A does not specialize an instantiated member",
[i]="\'nonmonotonic\' modifier can only be specified with \'dynamic\' or \'guided\' schedule kind",
[e]=k,
[j]=k,
[g]="specialization of member (.*?) does not specialize an instantiated member",
[c]="\'nonmonotonic\' modifier can only be specified with \'dynamic\' or \'guided\' schedule kind",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"86d142a80113",1254986698,"For instantiations of static data members of class templates, keep","For instantiations of static data members of class templates, keep\ntrack of the kind of specialization or instantiation. Also, check the\nscope of the specialization and ensure that a specialization\ndeclaration without an initializer is not a definition.\n\nllvm-svn: 83533"},
[f]={"6402bcad714d",1451287551,"[OPENMP 4.5] Sema/parsing support for extended format of \'schedule\' clause.","[OPENMP 4.5] Sema/parsing support for extended format of \'schedule\' clause.\nOpenMP 4.0-3.1 supports the next format of ‘schedule’ clause: schedule(kind[, chunk_size])\nWhere kind can be one of ‘static’, ‘dynamic’, ‘guided’, ‘auto’ or ‘runtime’.\nOpenMP 4.5 defines the format: schedule([modifier [, modifier]:]kind[, chunk_size])\nModifier can be one of ‘monotonic’, ‘nonmonotonic’ or ‘simd’.\n\nllvm-svn: 256487"},
[j]={{o,9715,"/// Perform semantic analysis for the given non-template member\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit member function specialization. On successful completion,\n/// the function declaration \\p FD will become a member function\n/// specialization.\n///\n/// \\param Member the member declaration, which will be updated to become a\n/// specialization.\n///\n/// \\param Previous the set of declarations, one of which may be specialized\n/// by this function specialization;  the set will be modified to contain the\n/// redeclared member.\nbool Sema::CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous) {\n  // ...\n  // Make sure that this is a specialization of a member.\n  if (!InstantiatedFrom) {\n    Diag(Member->getLocation(), diag::err_spec_member_not_instantiated) << Member;"}},
[b]={{n,17270,"OMPClause *Sema::ActOnOpenMPScheduleClause(OpenMPScheduleClauseModifier M1, OpenMPScheduleClauseModifier M2, OpenMPScheduleClauseKind Kind, Expr *ChunkSize, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation M1Loc, SourceLocation M2Loc, SourceLocation KindLoc, SourceLocation CommaLoc, SourceLocation EndLoc) {\n // ...\n // OpenMP, 2.7.1, Loop Construct, Restrictions\n // The nonmonotonic modifier can only be specified with schedule(dynamic) or\n  // schedule(guided).\n  // OpenMP 5.0 does not have this restriction.\n  if (LangOpts.OpenMP < 50 && (M1 == OMPC_SCHEDULE_MODIFIER_nonmonotonic || M2 == OMPC_SCHEDULE_MODIFIER_nonmonotonic) && Kind != OMPC_SCHEDULE_dynamic && Kind != OMPC_SCHEDULE_guided) {\n    Diag(M1 == OMPC_SCHEDULE_MODIFIER_nonmonotonic ? M1Loc : M2Loc, diag::err_omp_schedule_nonmonotonic_static);"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p4.cpp:70:21: error: specialization of member \'X<IntHolder, long>::X\' does not specialize an instantiated member"}
["clang/test/OpenMP/for_schedule_messages.cpp"]={"clang/test/OpenMP/for_schedule_messages.cpp:37:29: error: \'nonmonotonic\' modifier can only be specified with \'dynamic\' or \'guided\' schedule kind","clang/test/OpenMP/for_schedule_messages.cpp:66:29: error: \'nonmonotonic\' modifier can only be specified with \'dynamic\' or \'guided\' schedule kind","clang/test/OpenMP/for_schedule_messages.cpp:68:29: error: \'nonmonotonic\' modifier can only be specified with \'dynamic\' or \'guided\' schedule kind","clang/test/OpenMP/for_schedule_messages.cpp:70:29: error: \'nonmonotonic\' modifier can only be specified with \'dynamic\' or \'guided\' schedule kind"}
}
}
},
},
["err_specialization_after_instantiation"]={
["err_omp_section_function_type"]={
[b]="err_specialization_after_instantiation",
[d]="err_omp_section_function_type",
[c]="explicit specialization of %0 after instantiation",
[e]="section of pointer to function type %0",
[d]="explicit specialization of A after instantiation",
[i]="section of pointer to function type A",
[e]=k,
[j]=k,
[g]="explicit specialization of (.*?) after instantiation",
[c]="section of pointer to function type (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"06db9f50a2d6",1255378708,"Diagnose the declaration of explicit specializations after an implicit","Diagnose the declaration of explicit specializations after an implicit\ninstantiation has already been required. To do so, keep track of the\npoint of instantiation for anything that can be instantiated.\n\nllvm-svn: 83890"},
[f]={Bb,1440512644,vb,zb},
[j]={{o,4674,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n  // ...\n  // C++ [temp.expl.spec]p6:\n  //  If a template, a member template or the member of a class template is\n  //  explicitly specialized then that specialization shall be declared\n  //  before the first use of that specialization that would cause an implicit\n  //  instantiation to take place, in every translation unit in which such a\n  //  use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    // ...\n    if (!Okay) {\n      // ...\n      Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Name << Range;"},{o,8879,"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  // C++ [temp.expl.spec]p6:\n  //  If a template, a member template or the member of a class template is\n  //  explicitly specialized then that specialization shall be declared\n  //   before the first use of that specialization that would cause an implicit\n  //  instantiation to take place, in every translation unit in which such a\n  //   use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    // ...\n    if (!Okay) {\n      // ...\n      Diag(TemplateNameLoc, diag::err_specialization_after_instantiation) << Context.getTypeDeclType(Specialization) << Range;"},{o,9200,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  // ...\n  case TSK_ExplicitSpecialization:\n    // ...\n    case TSK_ExplicitInstantiationDeclaration:\n    case TSK_ExplicitInstantiationDefinition:\n      // ...\n      Diag(NewLoc, diag::err_specialization_after_instantiation) << PrevDecl;"}},
[b]={{E,5361,"ExprResult Sema::ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc, Expr *LowerBound, SourceLocation ColonLocFirst, SourceLocation ColonLocSecond, Expr *Length, Expr *Stride, SourceLocation RBLoc) {\n  // ...\n  // C99 6.5.2.1p1: \"shall have type \"pointer to *object* type\". Similarly,\n  // C++ [expr.sub]p1: The type \"T\" shall be a completely-defined object\n  // type. Note that functions are not objects, and that (in C99 parlance)\n  // incomplete types are not object types.\n  if (ResultTy->isFunctionType()) {\n    Diag(Base->getExprLoc(), diag::err_omp_section_function_type) << ResultTy << Base->getSourceRange();"}}
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:25:15: error: explicit specialization of \'f\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:29:15: error: explicit specialization of \'g<int>\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:33:17: error: explicit specialization of \'Nested\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:36:14: error: explicit specialization of \'member\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:39:8: error: explicit specialization of \'X0<int>\' after instantiation","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:55:17: error: explicit specialization of \'sort<String>\' after instantiation"}
}
},
},
["err_specialization_not_primary_template"]={
["err_omp_section_incomplete_type"]={
[b]={{nil,E,"err_specialization_not_primary_template"}},
[d]="err_omp_section_incomplete_type",
[c]={{nil,E,"cannot reference member of primary template because deduced class template specialization %0 is %select{instantiated from a partial|an explicit}1 specialization"}},
[e]="section of pointer to incomplete type %0",
[d]={{nil,E,{"cannot reference member of primary template because deduced class template specialization A is ",{"instantiated from a partial","an explicit"}," specialization"}}},
[i]="section of pointer to incomplete type A",
[e]=k,
[j]=k,
[g]="cannot reference member of primary template because deduced class template specialization (.*?) is (?:instantiated from a partial|an explicit) specialization",
[c]="section of pointer to incomplete type (.*?)",
[h]=a,
[h]=a,
[i]={{nil,E,m}},
[g]=o,
[f]={"e6d4b773dea2",1496803347,"Fix a couple of class template argument deduction crashes with libc++\'s tuple.","Fix a couple of class template argument deduction crashes with libc++\'s tuple.\n\nRecursiveASTVisitor was not properly recursing through a\nSubstTemplateTypeParmTypes, resulting in crashes in pack expansion where we\ncouldn\'t always find an unexpanded pack within a pack expansion.\n\nWe also have an issue where substitution of deduced template arguments for an\nimplicit deduction guide creates the \"impossible\" case of naming a\nnon-dependent member of the current instantiation, but within a specialization\nthat is actually instantiated from a different (partial/explicit)\nspecialization of the template. We resolve this by declaring that constructors\nthat do so can only be used to deduce specializations of the primary template.\nI\'m running this past CWG to see if people agree this is the right thing to do.\n\nllvm-svn: 304862"},
[f]={Bb,1440512644,vb,zb},
[j]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",6233,"/// 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 (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n    // ...\n    while (!DC->isFileContext()) {\n      // ...\n      // Move to the outer template scope.\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DC)) {\n        // ...\n        if (Guide && Guide->isImplicit()) {\n          // ...\n          // Check that this template-id names the primary template and not a\n          // partial or explicit specialization. (In the latter cases, it\'s\n          // meaningless to attempt to find an instantiation of D within the\n          // specialization.)\n          // FIXME: The standard doesn\'t say what should happen here.\n          if (FindingInstantiatedContext && usesPartialOrExplicitSpecialization(Loc, cast<ClassTemplateSpecializationDecl>(SubstRecord))) {\n            Diag(Loc, diag::err_specialization_not_primary_template) << T << (SubstRecord->getTemplateSpecializationKind() == TSK_ExplicitSpecialization);"}}
[b]={{E,5371,"ExprResult Sema::ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc, Expr *LowerBound, SourceLocation ColonLocFirst, SourceLocation ColonLocSecond, Expr *Length, Expr *Stride, SourceLocation RBLoc) {\n  // ...\n  if (RequireCompleteType(Base->getExprLoc(), ResultTy, diag::err_omp_section_incomplete_type, Base))"}}
},
},
["err_specialize_member_of_template"]={
["err_omp_section_length_negative"]={
[b]="err_specialize_member_of_template",
[d]="err_omp_section_length_negative",
[c]="cannot specialize %select{|(with \'template<>\') }0a member of an unspecialized template",
[e]="section length is evaluated to a negative value %0",
[d]={{nil,nil,{"cannot specialize ",{a,"(with \'template<>\') "},"a member of an unspecialized template"}}},
[i]="section length is evaluated to a negative value A",
[e]=k,
[j]=k,
[g]="cannot specialize (?:|\\(with \'template\\<\\>\'\\) )a member of an unspecialized template",
[c]="section length is evaluated to a negative value (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"522d5eb7c3c2",1307373775,"Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits","Diagnose the condition in C++ [temp.expl.spec]p16 that prohibits\nspecializing a member of an unspecialized template, and recover from\nsuch errors without crashing. Fixes PR10024 / <rdar://problem/9509761>.\n\nllvm-svn: 132677"},
[f]={"ad9ecbab4253",1469047529,"[OpenMP] Allow negative lower bound in array sections based on pointers","[OpenMP] Allow negative lower bound in array sections based on pointers\n\nOpenMP 4.5 removed the restriction that array section lower bound must be non negative.\nThis change is to allow negative values for array section based on pointers.\nFor array section based on array type there is still a restriction: \"The array section must be a subset of the original array.\"\n\nPatch by David S.\n\nDifferential Revision: https://reviews.llvm.org/D22481\n\nllvm-svn: 276177"},
[j]={{o,3370,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  // ...\n  auto CheckExplicitSpecialization = [&](SourceRange Range, bool Recovery) {\n    if (SawNonEmptyTemplateParameterList) {\n      if (!SuppressDiagnostic)\n        Diag(DeclLoc, diag::err_specialize_member_of_template) << !Recovery << Range;"}},
[b]={{E,5397,"ExprResult Sema::ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc, Expr *LowerBound, SourceLocation ColonLocFirst, SourceLocation ColonLocSecond, Expr *Length, Expr *Stride, SourceLocation RBLoc) {\n  // ...\n  if (Length) {\n    // ...\n    if (Length->EvaluateAsInt(Result, Context)) {\n      // ...\n      if (LengthValue.isNegative()) {\n        Diag(Length->getExprLoc(), diag::err_omp_section_length_negative) << toString(LengthValue, /*Radix=*/10, /*Signed=*/true) << Length->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaTemplate/explicit-specialization-member.cpp"]={"clang/test/SemaTemplate/explicit-specialization-member.cpp:45:16: error: cannot specialize a member of an unspecialized template","clang/test/SemaTemplate/explicit-specialization-member.cpp:54:38: error: cannot specialize a member of an unspecialized template"}
["clang/test/OpenMP/taskwait_depend_messages.cpp"]={"clang/test/OpenMP/taskwait_depend_messages.cpp:51:44: error: section length is evaluated to a negative value -1"}
}
}
},
},
["err_stack_tagging_requires_hardware_feature"]={
["err_omp_section_length_undefined"]={
[b]={{nil,u,"err_stack_tagging_requires_hardware_feature"}},
[d]="err_omp_section_length_undefined",
[c]={{nil,x,"\'-fsanitize=memtag-stack\' requires hardware support (+memtag). For Armv8 or Armv9, try compiling with -march=armv8a+memtag or -march=armv9a+memtag"},{z,u,"\'-fsanitize=memtag\' requires hardware support (+memtag)"}},
[e]="section length is unspecified and cannot be inferred because subscripted value is %select{not an array|an array of unknown bound}0",
[d]={{nil,x,"\'-fsanitize=memtag-stack\' requires hardware support (+memtag). For Armv8 or Armv9, try compiling with -march=armv8a+memtag or -march=armv9a+memtag"},{z,u,"\'-fsanitize=memtag\' requires hardware support (+memtag)"}},
[i]={{nil,nil,{"section length is unspecified and cannot be inferred because subscripted value is ",{"not an array","an array of unknown bound"}}}},
[e]=k,
[j]=k,
[g]="\'\\-fsanitize\\=memtag\\-stack\' requires hardware support \\(\\+memtag\\)\\. For Armv8 or Armv9, try compiling with \\-march\\=armv8a\\+memtag or \\-march\\=armv9a\\+memtag",
[c]="section length is unspecified and cannot be inferred because subscripted value is (?:not an array|an array of unknown bound)",
[h]=a,
[i]={{nil,u,y}},
[f]={"4593e4131aff",1534346725,"AMDGPU: Teach toolchain to link rocm device libs","AMDGPU: Teach toolchain to link rocm device libs\n\nCurrently the library is separately linked, but this isn\'t correct to\nimplement fast math flags correctly. Each module should get the\nversion of the library appropriate for its combination of fast math\nand related flags, with the attributes propagated into its functions\nand internalized.\n\nHIP already maintains the list of libraries, but this is not used for\nOpenCL. Unfortunately, HIP uses a separate --hip-device-lib argument,\ndespite both languages using the same bitcode library. Eventually\nthese two searches need to be merged.\n\nAn additional problem is there are 3 different locations the libraries\nare installed, depending on which build is used. This also needs to be\nconsolidated (or at least the search logic needs to deal with this\nunnecessary complexity)."},
[j]={{"clang/lib/Driver/SanitizerArgs.cpp",1386,"void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const {\n  // ...\n  if (Sanitizers.has(SanitizerKind::MemtagStack) && !hasTargetFeatureMTE(CmdArgs))\n    TC.getDriver().Diag(diag::err_stack_tagging_requires_hardware_feature);"}}
},
["err_standalone_class_nested_name_specifier"]={
[b]="err_standalone_class_nested_name_specifier",
[c]="forward declaration of %select{class|struct|interface|union|enum|enum class|enum struct}0 cannot have a nested name specifier",
[d]={{nil,nil,{"forward declaration of ",{Lb,oc,pc,rc,xc,"enum class","enum struct"}," cannot have a nested name specifier"}},{D,nil,{"forward declaration of ",{Lb,oc,pc,rc,xc}," cannot have a nested name specifier"}}},
[e]=k,
[g]="forward declaration of (?:class|struct|interface|union|enum|enum class|enum struct) cannot have a nested name specifier",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"b1402ae94eb7",1363647167,"Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some rel...","Add missing diagnostic for a nested-name-specifier on a free-standing type definition. Bump some related diagnostics from warning to extension in C++, since they\'re errors there. Add some missing checks for function specifiers on non-function declarations.\n\nllvm-svn: 177335"},
[f]={Bb,1440512644,vb,zb},
[j]={{t,5157,"/// 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 (Tag && SS.isNotEmpty() && !Tag->isCompleteDefinition() && !IsExplicitInstantiation && !IsExplicitSpecialization && !isa<ClassTemplatePartialSpecializationDecl>(Tag)) {\n    // ...\n    Diag(SS.getBeginLoc(), diag::err_standalone_class_nested_name_specifier) << GetDiagnosticTypeSpecifierID(DS) << SS.getRange();"}},
[b]={{E,5409,"ExprResult Sema::ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc, Expr *LowerBound, SourceLocation ColonLocFirst, SourceLocation ColonLocSecond, Expr *Length, Expr *Stride, SourceLocation RBLoc) {\n  // ...\n  if (Length) {\n  // ...\n  } else if (ColonLocFirst.isValid() && (OriginalTy.isNull() || (!OriginalTy->isConstantArrayType() && !OriginalTy->isVariableArrayType()))) {\n    // ...\n    Diag(ColonLocFirst, diag::err_omp_section_length_undefined) << (!OriginalTy.isNull() && OriginalTy->isArrayType());"},{n,21292,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  // ...\n  bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n    // ...\n    if (AllowWholeSizeArraySection) {\n    // ...\n    } else if (DKind == OMPD_target_update && SemaRef.getLangOpts().OpenMP >= 50) {\n      if (IsPointer && !AllowAnotherPtr)\n        SemaRef.Diag(ELoc, diag::err_omp_section_length_undefined) << /*array of unknown bound */ 1;"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:11:8: error: forward declaration of struct cannot have a nested name specifier","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:13:29: error: forward declaration of struct cannot have a nested name specifier","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.type.elab/p1.cpp:23:29: error: forward declaration of struct cannot have a nested name specifier"}
["clang/test/OpenMP/taskwait_depend_messages.cpp"]={"clang/test/OpenMP/taskwait_depend_messages.cpp:48:42: error: section length is unspecified and cannot be inferred because subscripted value is not an array","clang/test/OpenMP/taskwait_depend_messages.cpp:53:42: error: section length is unspecified and cannot be inferred because subscripted value is not an array","clang/test/OpenMP/taskwait_depend_messages.cpp:57:40: error: section length is unspecified and cannot be inferred because subscripted value is not an array","clang/test/OpenMP/taskwait_depend_messages.cpp:58:39: error: section length is unspecified and cannot be inferred because subscripted value is an array of unknown bound"}
}
}
},
},
["err_static_assert_expression_is_not_constant"]={
["err_omp_section_not_subset_of_array"]={
[b]="err_static_assert_expression_is_not_constant",
[d]="err_omp_section_not_subset_of_array",
[c]={{nil,x,"static assertion expression is not an integral constant expression"},{z,nil,"static_assert expression is not an integral constant expression"}},
[e]="array section must be a subset of the original array",
[d]={{nil,x,"static assertion expression is not an integral constant expression"},{z,nil,"static_assert expression is not an integral constant expression"}},
[i]="array section must be a subset of the original array",
[e]=k,
[j]=k,
[g]="static assertion expression is not an integral constant expression",
[c]="array section must be a subset of the original array",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={p,1237025389,q,r},
[f]={"ad9ecbab4253",1469047529,"[OpenMP] Allow negative lower bound in array sections based on pointers","[OpenMP] Allow negative lower bound in array sections based on pointers\n\nOpenMP 4.5 removed the restriction that array section lower bound must be non negative.\nThis change is to allow negative values for array section based on pointers.\nFor array section based on array type there is still a restriction: \"The array section must be a subset of the original array.\"\n\nPatch by David S.\n\nDifferential Revision: https://reviews.llvm.org/D22481\n\nllvm-svn: 276177"},
[j]={{C,17105,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  // ...\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n   // ...\n   if (!Failed && VerifyIntegerConstantExpression(BaseExpr, &Cond, diag::err_static_assert_expression_is_not_constant, FoldKind).isInvalid())"}},
[b]={{E,5385,"ExprResult Sema::ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc, Expr *LowerBound, SourceLocation ColonLocFirst, SourceLocation ColonLocSecond, Expr *Length, Expr *Stride, SourceLocation RBLoc) {\n  // ...\n  if (LowerBound && !OriginalTy->isAnyPointerType()) {\n    // ...\n    if (LowerBound->EvaluateAsInt(Result, Context)) {\n     // ...\n     if (LowerBoundValue.isNegative()) {\n        Diag(LowerBound->getExprLoc(), diag::err_omp_section_not_subset_of_array) << LowerBound->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/crash-lambda-weak-attr.cpp"]={"clang/test/SemaCXX/crash-lambda-weak-attr.cpp:6:15: error: static assertion expression is not an integral constant expression"}
["clang/test/OpenMP/target_parallel_map_messages.cpp"]={"clang/test/OpenMP/target_parallel_map_messages.cpp:225:35: error: array section must be a subset of the original array","clang/test/OpenMP/target_parallel_map_messages.cpp:96:35: error: array section must be a subset of the original array","clang/test/OpenMP/target_parallel_map_messages.cpp:96:35: error: array section must be a subset of the original array"}
}
}
},
},
["err_static_assert_failed"]={
["err_omp_section_stride_non_positive"]={
[b]="err_static_assert_failed",
[d]={{nil,p,"err_omp_section_stride_non_positive"}},
[c]={{nil,x,"static assertion failed%select{: %1|}0"},{z,nil,"static_assert failed%select{ %1|}0"}},
[e]={{nil,p,"section stride is evaluated to a non-positive value %0"}},
[d]={{nil,x,{"static assertion failed",{": B",a}}},{z,nil,{"static_assert failed",{" B",a}}}},
[i]={{nil,p,"section stride is evaluated to a non-positive value A"}},
[e]=k,
[j]=k,
[g]="static assertion failed(?:\\: (.*?)|)",
[c]="section stride is evaluated to a non\\-positive value (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,p,o}},
[f]={p,1237025389,q,r},
[f]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574"},
[j]={{C,17142,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  // ...\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n   // ...\n   if (!Failed && !Cond && !InTemplateDefinition) {\n      // ...\n     if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n       // ...\n       Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"},{C,17155,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  // ...\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    // ...\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      // ...\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n      // ...\n      } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n      // ...\n      } else {\n        Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !HasMessage << Msg.str() << AssertExpr->getSourceRange();"}},
[b]={{E,5451,"ExprResult Sema::ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc, Expr *LowerBound, SourceLocation ColonLocFirst, SourceLocation ColonLocSecond, Expr *Length, Expr *Stride, SourceLocation RBLoc) {\n  // ...\n  if (Stride) {\n    // ...\n    if (Stride->EvaluateAsInt(Result, Context)) {\n      // ...\n      if (!StrideValue.isStrictlyPositive()) {\n        Diag(Stride->getExprLoc(), diag::err_omp_section_stride_non_positive) << toString(StrideValue, /*Radix=*/10, /*Signed=*/true) << Stride->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/using-decl-templates.cpp"]={"clang/test/SemaCXX/using-decl-templates.cpp:98:17: error: static assertion failed: "}
["clang/test/OpenMP/target_update_messages.cpp"]={"clang/test/OpenMP/target_update_messages.cpp:179:43: error: section stride is evaluated to a non-positive value -1","clang/test/OpenMP/target_update_messages.cpp:185:45: error: section stride is evaluated to a non-positive value -1"}
}
}
},
},
["err_static_assert_invalid_mem_fn_ret_ty"]={
["err_omp_sections_not_compound_stmt"]={
[b]="err_static_assert_invalid_mem_fn_ret_ty",
[d]="err_omp_sections_not_compound_stmt",
[c]="the message in a static assertion must have a \'%select{size|data}0()\' member function returning an object convertible to \'%select{std::size_t|const char *}0\'",
[e]="the statement for \'#pragma omp sections\' must be a compound statement",
[d]={{nil,nil,{"the message in a static assertion must have a \'",{"size","data"},"()\' member function returning an object convertible to \'",{"std::size_t","const char *"},"\'"}}},
[i]="the statement for \'#pragma omp sections\' must be a compound statement",
[e]=k,
[j]=k,
[g]="the message in a static assertion must have a \'(?:size|data)\\(\\)\' member function returning an object convertible to \'(?:std\\:\\:size_t|const char \\*)\'",
[c]="the statement for \'\\#pragma omp sections\' must be a compound statement",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"},
[f]={"d3f8dd2d1595",1403696689,"[OPENMP] Initial support for \'sections\' directive.","[OPENMP] Initial support for \'sections\' directive.\n\nllvm-svn: 211685"},
[j]={{C,16981,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  // ...\n  auto FindMember = [&](StringRef Member, bool &Empty, bool Diag = false) -> std::optional<LookupResult> {\n    // ...\n    default:\n      if (Diag)\n        Candidates.NoteCandidates(PartialDiagnosticAt(Loc, PDiag(diag::err_static_assert_invalid_mem_fn_ret_ty) << (Member == \"data\")), *this, OCD_AllCandidates, /*Args=*/{});"},{C,17034,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  // ...\n  if (EvaluatedSize.isInvalid()) {\n    Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*size*/ 0;"},{C,17044,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  // ...\n  if (EvaluatedData.isInvalid()) {\n    Diag(Loc, diag::err_static_assert_invalid_mem_fn_ret_ty) << /*data*/ 1;"}},
[b]={{n,10465,"StmtResult Sema::ActOnOpenMPSectionsDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  if (auto *C = dyn_cast_or_null<CompoundStmt>(BaseStmt)) {\n  // ...\n  } else {\n    Diag(AStmt->getBeginLoc(), diag::err_omp_sections_not_compound_stmt);"}},
[l]={
[l]={
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:20:21: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:26:21: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'","clang/test/SemaCXX/static-assert-cxx26.cpp:181:22: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:183:22: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'","clang/test/SemaCXX/static-assert-cxx26.cpp:225:22: error: the message in a static assertion must have a \'size()\' member function returning an object convertible to \'std::size_t\'","clang/test/SemaCXX/static-assert-cxx26.cpp:225:22: error: the message in a static assertion must have a \'data()\' member function returning an object convertible to \'const char *\'"}
["clang/test/OpenMP/sections_misc_messages.c"]={"clang/test/OpenMP/sections_misc_messages.c:30:3: error: the statement for \'#pragma omp sections\' must be a compound statement"}
}
}
},
},
["err_static_assert_invalid_message"]={
["err_omp_sections_substmt_not_section"]={
[b]="err_static_assert_invalid_message",
[d]="err_omp_sections_substmt_not_section",
[c]="the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions",
[e]="statement in \'omp sections\' directive must be enclosed into a section region",
[d]="the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions",
[i]="statement in \'omp sections\' directive must be enclosed into a section region",
[e]=k,
[j]=k,
[g]="the message in a static assertion must be a string literal or an object with \'data\\(\\)\' and \'size\\(\\)\' member functions",
[c]="statement in \'omp sections\' directive must be enclosed into a section region",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"},
[f]={"1e0498a92d6e",1403770918,"[OPENMP] Initial parsing and sema analysis for \'section\' directive.","[OPENMP] Initial parsing and sema analysis for \'section\' directive.\n\nllvm-svn: 211767"},
[j]={{C,16953,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  // ...\n  if (!RD) {\n   Diag(Loc, diag::err_static_assert_invalid_message);"}},
[b]={{n,10458,"StmtResult Sema::ActOnOpenMPSectionsDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  if (auto *C = dyn_cast_or_null<CompoundStmt>(BaseStmt)) {\n    // ...\n    // All associated statements must be \'#pragma omp section\' except for\n    // the first one.\n    for (Stmt *SectionStmt : llvm::drop_begin(S)) {\n      if (!SectionStmt || !isa<OMPSectionDirective>(SectionStmt)) {\n       if (SectionStmt)\n          Diag(SectionStmt->getBeginLoc(), diag::err_omp_sections_substmt_not_section);"}},
[l]={
[l]={
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:4:21: error: the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions","clang/test/SemaCXX/static-assert-cxx26.cpp:279:24: error: the message in a static assertion must be a string literal or an object with \'data()\' and \'size()\' member functions"}
["clang/test/OpenMP/sections_misc_messages.c"]={"clang/test/OpenMP/sections_misc_messages.c:35:5: error: statement in \'omp sections\' directive must be enclosed into a section region"}
}
}
},
},
["err_static_assert_message_constexpr"]={
["err_omp_several_directives_in_region"]={
[b]="err_static_assert_message_constexpr",
[d]={{nil,p,"err_omp_several_directives_in_region"}},
[c]="the message in a static assertion must be produced by a constant expression",
[e]={{nil,p,"exactly one \'%0\' directive must appear in the loop body of an enclosing directive"}},
[d]="the message in a static assertion must be produced by a constant expression",
[i]={{nil,p,"exactly one \'A\' directive must appear in the loop body of an enclosing directive"}},
[e]=k,
[j]=k,
[g]="the message in a static assertion must be produced by a constant expression",
[c]="exactly one \'(.*?)\' directive must appear in the loop body of an enclosing directive",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,p,o}},
[f]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"},
[f]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574"},
[j]={{C,17059,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  // ...\n  if (!Message->EvaluateCharRangeAsString(Result, EvaluatedSize.get(), EvaluatedData.get(), Ctx, Status) || !Notes.empty()) {\n    Diag(Message->getBeginLoc(), ErrorOnInvalidMessage ? diag::err_static_assert_message_constexpr : diag::warn_static_assert_message_constexpr);"}},
[b]={{n,11291,"StmtResult Sema::ActOnOpenMPScanDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // Check that only one instance of scan directives is used in the same outer\n  // region.\n  if (DSAStack->doesParentHasScanDirective()) {\n    Diag(StartLoc, diag::err_omp_several_directives_in_region) << \"scan\";"},{n,11398,"StmtResult Sema::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // OpenMP 5.0, 2.17.9, ordered Construct, Restrictions.\n  // During execution of an iteration of a worksharing-loop or a loop nest\n  // within a worksharing-loop, simd, or worksharing-loop SIMD region, a thread\n  // must not execute more than one ordered region corresponding to an ordered\n  // construct without a depend clause.\n  if (!DependFound && !DoacrossFound) {\n    if (DSAStack->doesParentHasOrderedDirective()) {\n      Diag(StartLoc, diag::err_omp_several_directives_in_region) << \"ordered\";"}},
[l]={
[l]={
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:37:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:51:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:85:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:125:22: error: the message in a static assertion must be produced by a constant expression","clang/test/SemaCXX/static-assert-cxx26.cpp:267:22: error: the message in a static assertion must be produced by a constant expression"}
["clang/test/OpenMP/scan_messages.cpp"]={"clang/test/OpenMP/scan_messages.cpp:81:1: error: exactly one \'scan\' directive must appear in the loop body of an enclosing directive","clang/test/OpenMP/scan_messages.cpp:173:1: error: exactly one \'scan\' directive must appear in the loop body of an enclosing directive"}
}
}
},
},
["err_static_assert_missing_member_function"]={
["err_omp_several_mem_order_clauses"]={
[b]="err_static_assert_missing_member_function",
[d]={{nil,p,"err_omp_several_mem_order_clauses"}},
[c]="the message object in this static assertion is missing %select{a \'size()\' member function|a \'data()\' member function|\'data()\' and \'size()\' member functions}0",
[e]={{nil,p,"directive \'#pragma omp %0\' cannot contain more than one %select{\'seq_cst\', \'relaxed\', |}1\'acq_rel\', \'acquire\' or \'release\' clause"}},
[d]={{nil,nil,{"the message object in this static assertion is missing ",{"a \'size()\' member function","a \'data()\' member function","\'data()\' and \'size()\' member functions"}}}},
[i]={{nil,p,{"directive \'#pragma omp A\' cannot contain more than one ",{"\'seq_cst\', \'relaxed\', ",a},"\'acq_rel\', \'acquire\' or \'release\' clause"}}},
[e]=k,
[j]=k,
[g]="the message object in this static assertion is missing (?:a \'size\\(\\)\' member function|a \'data\\(\\)\' member function|\'data\\(\\)\' and \'size\\(\\)\' member functions)",
[c]="directive \'\\#pragma omp (.*?)\' cannot contain more than one (?:\'seq_cst\', \'relaxed\', |)\'acq_rel\', \'acquire\' or \'release\' clause",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,p,o}},
[f]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154290"},
[f]={"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]={{C,16992,"bool Sema::EvaluateStaticAssertMessageAsString(Expr *Message, std::string &Result, ASTContext &Ctx, bool ErrorOnInvalidMessage) {\n  // ...\n  if (SizeNotFound || DataNotFound) {\n   Diag(Loc, diag::err_static_assert_missing_member_function) << ((SizeNotFound && DataNotFound) ? 2 : SizeNotFound ? 0 : 1);"}},
[b]={{n,11228,"StmtResult Sema::ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  for (const OMPClause *C : Clauses) {\n    if (C->getClauseKind() == OMPC_acq_rel || C->getClauseKind() == OMPC_acquire || C->getClauseKind() == OMPC_release) {\n      if (MemOrderKind != OMPC_unknown) {\n       Diag(C->getBeginLoc(), diag::err_omp_several_mem_order_clauses) << getOpenMPDirectiveName(OMPD_flush) << 1 << SourceRange(C->getBeginLoc(), C->getEndLoc());"},{n,12516,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  for (const OMPClause *C : Clauses) {\n    // ...\n    case OMPC_seq_cst:\n    case OMPC_acq_rel:\n    case OMPC_acquire:\n    case OMPC_release:\n    case OMPC_relaxed: {\n      if (MemOrderKind != OMPC_unknown) {\n        Diag(C->getBeginLoc(), diag::err_omp_several_mem_order_clauses) << getOpenMPDirectiveName(OMPD_atomic) << 0 << SourceRange(C->getBeginLoc(), C->getEndLoc());"}},
[l]={
[l]={
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:6:21: error: the message object in this static assertion is missing \'data()\' and \'size()\' member functions","clang/test/SemaCXX/static-assert-cxx26.cpp:13:21: error: the message object in this static assertion is missing a \'data()\' member function","clang/test/SemaCXX/static-assert-cxx26.cpp:14:21: error: the message object in this static assertion is missing a \'size()\' member function"}
["clang/test/OpenMP/flush_messages.cpp"]={"clang/test/OpenMP/flush_messages.cpp:143:27: error: directive \'#pragma omp flush\' cannot contain more than one \'acq_rel\', \'acquire\' or \'release\' clause","clang/test/OpenMP/flush_messages.cpp:144:27: error: directive \'#pragma omp flush\' cannot contain more than one \'acq_rel\', \'acquire\' or \'release\' clause"}
}
}
},
},
["err_static_assert_requirement_failed"]={
["err_omp_shaping_dimension_not_positive"]={
[b]={{nil,A,"err_static_assert_requirement_failed"}},
[d]={{nil,p,"err_omp_shaping_dimension_not_positive"}},
[c]={{nil,x,"static assertion failed due to requirement \'%0\'%select{: %2|}1"},{z,A,"static_assert failed due to requirement \'%0\'%select{ %2|}1"}},
[e]={{nil,p,"array shaping dimension is evaluated to a non-positive value %0"}},
[d]={{nil,x,{"static assertion failed due to requirement \'A\'",{": C",a}}},{z,A,{"static_assert failed due to requirement \'A\'",{" C",a}}}},
[i]={{nil,p,"array shaping dimension is evaluated to a non-positive value A"}},
[e]=k,
[j]=k,
[g]="static assertion failed due to requirement \'(.*?)\'(?:\\: (.*?)|)",
[c]="array shaping dimension is evaluated to a non\\-positive value (.*?)",
[h]=a,
[h]=a,
[i]={{nil,A,m}},
[g]={{nil,p,o}},
[f]={"672281a5116d",1505432322,"Diagnostic specific failed condition in a static_assert.","Diagnostic specific failed condition in a static_assert.\n\nWhen a static_assert fails, dig out a specific condition to diagnose,\nusing the same logic that we use to find the enable_if condition to\ndiagnose.\n\nllvm-svn: 313315"},
[f]={W,1576908663,X,Y},
[j]={{C,17150,"Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, Expr *AssertExpr, Expr *AssertMessage, SourceLocation RParenLoc, bool Failed) {\n  // ...\n  if (!AssertExpr->isTypeDependent() && !AssertExpr->isValueDependent() && (!AssertMessage || (!AssertMessage->isTypeDependent() && !AssertMessage->isValueDependent())) && !Failed) {\n    // ...\n    if (!Failed && !Cond && !InTemplateDefinition) {\n      // ...\n      if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) {\n     // ...\n     } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) {\n       Diag(InnerCond->getBeginLoc(), diag::err_static_assert_requirement_failed) << InnerCondDescription << !HasMessage << Msg.str() << InnerCond->getSourceRange();"}},
[b]={{E,5530,"ExprResult Sema::ActOnOMPArrayShapingExpr(Expr *Base, SourceLocation LParenLoc, SourceLocation RParenLoc, ArrayRef<Expr *> Dims, ArrayRef<SourceRange> Brackets) {\n  // ...\n  for (Expr *Dim : Dims) {\n    // ...\n    if (!Dim->isTypeDependent()) {\n      // ...\n      if (!Dim->isValueDependent() && Dim->EvaluateAsInt(EvResult, Context)) {\n       // ...\n       if (!Value.isStrictlyPositive()) {\n         Diag(Dim->getExprLoc(), diag::err_omp_shaping_dimension_not_positive) << toString(Value, /*Radix=*/10, /*Signed=*/true) << Dim->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:101:19: error: static assertion failed due to requirement \'sizeof (arr2) == 13\': "}
["clang/test/OpenMP/task_affinity_messages.cpp"]={"clang/test/OpenMP/task_affinity_messages.cpp:61:31: error: array shaping dimension is evaluated to a non-positive value -1","clang/test/OpenMP/task_affinity_messages.cpp:61:35: error: array shaping dimension is evaluated to a non-positive value 0"}
}
}
},
},
["err_static_block_func"]={
["err_omp_simd_region_cannot_use_stmt"]={
[b]="err_static_block_func",
[d]="err_omp_simd_region_cannot_use_stmt",
[c]="function declared in block scope cannot have \'static\' storage class",
[e]="\'%0\' statement cannot be used in OpenMP simd region",
[d]="function declared in block scope cannot have \'static\' storage class",
[i]="\'A\' statement cannot be used in OpenMP simd region",
[e]=k,
[j]=k,
[g]="function declared in block scope cannot have \'static\' storage class",
[c]="\'(.*?)\' statement cannot be used in OpenMP simd region",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={p,1237025389,q,r},
[f]={"a8e9d2eccc6e",1401790607,"[OPENMP] Loop canonical form analysis (Sema)","[OPENMP] Loop canonical form analysis (Sema)\n\nThis patch implements semantic analysis to make sure that the loop is in OpenMP canonical form.\nThis is the form required for \'omp simd\', \'omp for\' and other loop pragmas.\n\nDifferential revision: http://reviews.llvm.org/D3778\n\nllvm-svn: 210095"},
[j]={{t,9121,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n  // ...\n  case DeclSpec::SCS_static: {\n   if (SemaRef.CurContext->getRedeclContext()->isFunctionOrMethod()) {\n     // ...\n     SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_block_func);"}},
[b]={{N,884,"ExprResult Sema::BuildCXXThrow(SourceLocation OpLoc, Expr *Ex, bool IsThrownVarInScope) {\n  // ...\n  if (getCurScope() && getCurScope()->isOpenMPSimdDirectiveScope())\n    Diag(OpLoc, diag::err_omp_simd_region_cannot_use_stmt) << \"throw\";"},{"clang/lib/Sema/SemaStmt.cpp",4488,"/// 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 if (getCurScope() && getCurScope()->isOpenMPSimdDirectiveScope())\n    Diag(TryLoc, diag::err_omp_simd_region_cannot_use_stmt) << \"try\";"}},
[l]={
[l]={
["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:58:3: error: function declared in block scope cannot have \'static\' storage class"}
["clang/test/OpenMP/parallel_for_simd_loop_messages.cpp"]={"clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:596:11: error: \'throw\' statement cannot be used in OpenMP simd region","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:598:7: error: \'throw\' statement cannot be used in OpenMP simd region","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:601:9: error: \'throw\' statement cannot be used in OpenMP simd region","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:593:5: error: \'try\' statement cannot be used in OpenMP simd region","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:613:9: error: \'throw\' statement cannot be used in OpenMP simd region"}
}
}
},
},
["err_static_data_member_not_allowed_in_anon_struct"]={
["err_omp_simple_clause_incompatible_with_ordered"]={
[b]="err_static_data_member_not_allowed_in_anon_struct",
[d]={{nil,p,"err_omp_simple_clause_incompatible_with_ordered"}},
[c]={{nil,s,"static data member %0 not allowed in anonymous %select{struct|interface|union|class|enum}1"},{u,nil,"static data member %0 not allowed in anonymous struct"}},
[e]={{nil,p,"\'%0\' clause with \'%1\' modifier cannot be specified if an \'ordered\' clause is specified"}},
[d]={{nil,s,{"static data member A not allowed in anonymous ",{oc,pc,rc,Lb,xc}}},{u,nil,"static data member A not allowed in anonymous struct"}},
[i]={{nil,p,"\'A\' clause with \'B\' modifier cannot be specified if an \'ordered\' clause is specified"}},
[e]=k,
[j]=k,
[g]="static data member (.*?) not allowed in anonymous (?:struct|interface|union|class|enum)",
[c]="\'(.*?)\' clause with \'(.*?)\' modifier cannot be specified if an \'ordered\' clause is specified",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,p,o}},
[f]={"429737556135",1329424882,"C++11 allows unions to have static data members. Remove the corresponding","C++11 allows unions to have static data members. Remove the corresponding\nrestriction and add some tests.\n\nllvm-svn: 150721"},
[f]={"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]={{t,7598,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    if (SC == SC_Static && CurContext->isRecord()) {\n     if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n       // ...\n       if (FunctionOrMethod) {\n       // ...\n       } else if (AnonStruct) {\n         // ...\n          Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_anon_struct) << Name << AnonStruct->getTagKind();"}},
[b]={{n,4762,"static bool checkOrderedOrderSpecified(Sema &S, const ArrayRef<OMPClause *> Clauses) {\n  // ...\n  if (Ordered && Order) {\n    S.Diag(Order->getKindKwLoc(), diag::err_omp_simple_clause_incompatible_with_ordered) << getOpenMPClauseName(OMPC_order) << getOpenMPSimpleClauseTypeName(OMPC_order, OMPC_ORDER_concurrent) << SourceRange(Order->getBeginLoc(), Order->getEndLoc());"},{n,4858,"StmtResult Sema::ActOnOpenMPRegionEnd(StmtResult S, ArrayRef<OMPClause *> Clauses) {\n // ...\n // OpenMP, 2.7.1 Loop Construct, Restrictions\n  // The nonmonotonic modifier cannot be specified if an ordered clause is\n // specified.\n if (SC && (SC->getFirstScheduleModifier() == OMPC_SCHEDULE_MODIFIER_nonmonotonic || SC->getSecondScheduleModifier() == OMPC_SCHEDULE_MODIFIER_nonmonotonic) && OC) {\n   Diag(SC->getFirstScheduleModifier() == OMPC_SCHEDULE_MODIFIER_nonmonotonic ? SC->getFirstScheduleModifierLoc() : SC->getSecondScheduleModifierLoc(), diag::err_omp_simple_clause_incompatible_with_ordered) << getOpenMPClauseName(OMPC_schedule) << getOpenMPSimpleClauseTypeName(OMPC_schedule, OMPC_SCHEDULE_MODIFIER_nonmonotonic) << SourceRange(OC->getBeginLoc(), OC->getEndLoc());"}},
[l]={
[l]={
["clang/test/CXX/class/class.union/p2-0x.cpp"]={"clang/test/CXX/class/class.union/p2-0x.cpp:40:22: error: static data member \'n\' not allowed in anonymous union","clang/test/CXX/class/class.union/p2-0x.cpp:46:20: error: static data member \'k\' not allowed in anonymous union"}
["clang/test/OpenMP/for_schedule_messages.cpp"]={"clang/test/OpenMP/for_schedule_messages.cpp:80:29: error: \'schedule\' clause with \'nonmonotonic\' modifier cannot be specified if an \'ordered\' clause is specified","clang/test/OpenMP/for_schedule_messages.cpp:82:39: error: \'schedule\' clause with \'nonmonotonic\' modifier cannot be specified if an \'ordered\' clause is specified"}
}
}
},
},
["err_static_data_member_not_allowed_in_local_class"]={
["err_omp_single_copyprivate_with_nowait"]={
[b]="err_static_data_member_not_allowed_in_local_class",
[d]="err_omp_single_copyprivate_with_nowait",
[c]={{nil,s,"static data member %0 not allowed in local %select{struct|interface|union|class|enum}2 %1"},{u,nil,"static data member %0 not allowed in local class %1"}},
[e]="the \'copyprivate\' clause must not be used with the \'nowait\' clause",
[d]={{nil,s,{"static data member A not allowed in local ",{oc,pc,rc,Lb,xc}," B"}},{u,nil,"static data member A not allowed in local class B"}},
[i]="the \'copyprivate\' clause must not be used with the \'nowait\' clause",
[e]=k,
[j]=k,
[g]="static data member (.*?) not allowed in local (?:struct|interface|union|class|enum) (.*?)",
[c]="the \'copyprivate\' clause must not be used with the \'nowait\' clause",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"d2e8adfc7599",1245803333,"Support for [class.local]p4.","Support for [class.local]p4.\n\nllvm-svn: 74030"},
[f]={"3255bf3aacbb",1421644846,"[OPENMP] Disable copyprivate an nowait clauses in \'single\' directive.","[OPENMP] Disable copyprivate an nowait clauses in \'single\' directive.\nThe copyprivate clause must not be used with the nowait clause in single\ndirective.\n\nllvm-svn: 226429"},
[j]={{t,7591,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    if (SC == SC_Static && CurContext->isRecord()) {\n      if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) {\n        // ...\n        if (FunctionOrMethod) {\n          // ...\n          Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_local_class) << Name << RD->getDeclName() << RD->getTagKind();"}},
[b]={{n,10825,"StmtResult Sema::ActOnOpenMPSingleDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  for (const OMPClause *Clause : Clauses) {\n    // ...\n    if (Copyprivate && Nowait) {\n      Diag(Copyprivate->getBeginLoc(), diag::err_omp_single_copyprivate_with_nowait);"}},
[l]={
[l]={
["clang/test/SemaCXX/blocks.cpp"]={"clang/test/SemaCXX/blocks.cpp:160:18: error: static data member \'x\' not allowed in local class \'X\'","clang/test/SemaCXX/blocks.cpp:164:20: error: static data member \'z\' not allowed in local struct \'Z\'"}
["clang/test/OpenMP/single_copyprivate_messages.cpp"]={"clang/test/OpenMP/single_copyprivate_messages.cpp:179:20: error: the \'copyprivate\' clause must not be used with the \'nowait\' clause"}
}
}
},
},
["err_static_data_member_reinitialization"]={
["err_omp_single_decl_in_declare_simd_variant"]={
[b]="err_static_data_member_reinitialization",
[d]={{nil,w,"err_omp_single_decl_in_declare_simd_variant"}},
[c]="static data member %0 already has an initializer",
[e]={{nil,w,"single declaration is expected after \'declare %select{simd|variant}0\' directive"}},
[d]="static data member A already has an initializer",
[i]={{nil,w,{"single declaration is expected after \'declare ",{"simd","variant"},"\' directive"}}},
[e]=k,
[j]=k,
[g]="static data member (.*?) already has an initializer",
[c]="single declaration is expected after \'declare (?:simd|variant)\' directive",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,w,o}},
[f]={"84fe12d1e954",1385003864,"Provide better diagnostic wording for initializers on static","Provide better diagnostic wording for initializers on static\ndata member definitions when the variable has an initializer\nin its declaration.\n\nFor the following code:\n\n struct S {\n   static const int x = 42;\n  };\n  const int S::x = 42;\n\nThis patch changes the diagnostic from:\n\n  a.cc:4:14: error: redefinition of \'x\'\n const int S::x = 42;\n              ^\n  a.cc:2:20: note: previous definition is here\n   static const int x = 42;\n                    ^\nto:\n\n  a.cc:4:18: error: static data member \'x\' already has an initializer\n const int S::x = 42;\n                   ^\n  a.cc:2:24: note: previous initialization is here\n   static const int x = 42;\n                        ^\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2235\n\nllvm-svn: 195306"},
[f]={"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"},
[j]={{t,13249,"/// 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 (getLangOpts().CPlusPlus) {\n    // C++ [class.static.data]p4\n   //  If a static data member is of const integral or const\n    //  enumeration type, its declaration in the class definition can\n    //  specify a constant-initializer which shall be an integral\n    //  constant expression (5.19). In that case, the member can appear\n   //   in integral constant expressions. The member shall still be\n    //  defined in a namespace scope if it is used in the program and the\n    //  namespace scope definition shall not contain an initializer.\n   //\n    // We already performed a redefinition check above, but for static\n    // data members we also need to check whether there was an in-class\n    // declaration with an initializer.\n   if (VDecl->isStaticDataMember() && VDecl->getCanonicalDecl()->hasInit()) {\n     Diag(Init->getExprLoc(), diag::err_static_data_member_reinitialization) << VDecl->getDeclName();"}},
[b]={{n,6839,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  // ...\n  if (!DG.get().isSingleDecl()) {\n    Diag(SR.getBegin(), diag::err_omp_single_decl_in_declare_simd_variant) << SimdId;"},{n,7359,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n // ...\n // Must be applied only to single decl.\n if (!DG.get().isSingleDecl()) {\n   Diag(SR.getBegin(), diag::err_omp_single_decl_in_declare_simd_variant) << VariantId << SR;"}},
[l]={
[l]={
["clang/test/CXX/class/class.static/class.static.data/p4.cpp"]={"clang/test/CXX/class/class.static/class.static.data/p4.cpp:15:63: error: static data member \'i\' already has an initializer","clang/test/CXX/class/class.static/class.static.data/p4.cpp:20:62: error: static data member \'i\' already has an initializer"}
[Ab]={"clang/test/OpenMP/declare_simd_messages.cpp:43:1: error: single declaration is expected after \'declare simd\' directive"}
}
}
},
},
["err_static_downcast_via_virtual"]={
["err_omp_sink_and_source_iteration_not_allowd"]={
[b]="err_static_downcast_via_virtual",
[d]="err_omp_sink_and_source_iteration_not_allowd",
[c]="cannot cast %0 to %1 via virtual base %2",
[e]=" \'%0 %select{sink:|source:}1\' must be with \'%select{omp_cur_iteration - 1|omp_cur_iteration}1\'",
[d]="cannot cast A to B via virtual base C",
[i]={{nil,nil,{" \'A ",{"sink:","source:"},"\' must be with \'",{"omp_cur_iteration - 1","omp_cur_iteration"},"\'"}}},
[e]=k,
[j]=k,
[g]="cannot cast (.*?) to (.*?) via virtual base (.*?)",
[c]=" \'(.*?) (?:sink\\:|source\\:)\' must be with \'(?:omp_cur_iteration \\- 1|omp_cur_iteration)\'",
[h]=a,
[h]=a,
[i]=m,
[g]=K,
[f]={p,1237025389,q,r},
[f]={"ef9ec4bbcca2",1677810915,"[OpenMP] Add the `ompx_attribute` clause for target directives","[OpenMP] Add the `ompx_attribute` clause for target directives\n\nCUDA and HIP have kernel attributes to tune the code generation (in the\nbackend). To reuse this functionality for OpenMP target regions we\nintroduce the `ompx_attribute` clause that takes these kernel\nattributes and emits code as if they had been attached to the kernel\nfuction (which is implicitly generated).\n\nTo limit the impact, we only support three kernel attributes:\n`amdgpu_waves_per_eu`, for AMDGPU\n`amdgpu_flat_work_group_size`, for AMDGPU\n`launch_bounds`, for NVPTX\n\nThe existing implementations of those attributes are used for error\nchecking and code generation. `ompx_attribute` can be attached to any\nexecutable target region and it can hold more than one kernel attribute.\n\nDifferential Revision: https://reviews.llvm.org/D156184"},
[j]={{Mb,1724,"/// TryStaticDowncast - Common functionality of TryStaticReferenceDowncast and\n/// TryStaticPointerDowncast. Tests whether a static downcast from SrcType to\n/// DestType is possible and allowed.\nTryCastResult TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType, bool CStyle, SourceRange OpRange, QualType OrigSrcType, QualType OrigDestType, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // ...\n  if (Paths.getDetectedVirtual() != nullptr) {\n    // ...\n    Self.Diag(OpRange.getBegin(), diag::err_static_downcast_via_virtual) << OrigSrcType << OrigDestType << VirtualBase << OpRange;"}},
[b]={{L,4432,"/// Parses clauses with list.\nbool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, SmallVectorImpl<Expr *> &Vars, Sema::OpenMPVarListDataTy &Data) {\n  // ...\n  // Handle reduction-identifier for reduction clause.\n  if (Kind == OMPC_reduction || Kind == OMPC_task_reduction || Kind == OMPC_in_reduction) {\n  // ...\n  } else if (Kind == OMPC_depend || Kind == OMPC_doacross) {\n   // ...\n    if (Kind == OMPC_doacross) {\n      // ...\n      if (Data.ExtraModifier == OMPC_DOACROSS_sink_omp_cur_iteration) {\n        if (Tok.isNot(tok::minus)) {\n         Diag(Tok, diag::err_omp_sink_and_source_iteration_not_allowd) << getOpenMPClauseName(Kind) << 0 << 0;"},{L,4442,"/// Parses clauses with list.\nbool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, SmallVectorImpl<Expr *> &Vars, Sema::OpenMPVarListDataTy &Data) {\n  // ...\n  // Handle reduction-identifier for reduction clause.\n  if (Kind == OMPC_reduction || Kind == OMPC_task_reduction || Kind == OMPC_in_reduction) {\n  // ...\n  } else if (Kind == OMPC_depend || Kind == OMPC_doacross) {\n    // ...\n    if (Kind == OMPC_doacross) {\n      // ...\n      if (Data.ExtraModifier == OMPC_DOACROSS_sink_omp_cur_iteration) {\n        if (Tok.isNot(tok::minus)) {\n        // ...\n        } else {\n          // ...\n          if (Tok.isNot(tok::numeric_constant) || (PP.parseSimpleIntegerLiteral(Tok, Value) && Value != 1)) {\n            Diag(Loc, diag::err_omp_sink_and_source_iteration_not_allowd) << getOpenMPClauseName(Kind) << 0 << 0;"},{L,4451,"/// Parses clauses with list.\nbool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, SmallVectorImpl<Expr *> &Vars, Sema::OpenMPVarListDataTy &Data) {\n  // ...\n  // Handle reduction-identifier for reduction clause.\n  if (Kind == OMPC_reduction || Kind == OMPC_task_reduction || Kind == OMPC_in_reduction) {\n  // ...\n  } else if (Kind == OMPC_depend || Kind == OMPC_doacross) {\n    // ...\n    if (Kind == OMPC_doacross) {\n      // ...\n      if (Data.ExtraModifier == OMPC_DOACROSS_source_omp_cur_iteration) {\n        if (Tok.isNot(tok::r_paren)) {\n          Diag(Tok, diag::err_omp_sink_and_source_iteration_not_allowd) << getOpenMPClauseName(Kind) << 1 << 1;"}},
[l]={
[l]={
["clang/test/SemaCXX/cstyle-cast.cpp"]={"clang/test/SemaCXX/cstyle-cast.cpp:126:9: error: cannot cast \'A *\' to \'C1 *\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:127:9: error: cannot cast \'A\' to \'C1 &\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:128:9: error: cannot cast \'A *\' to \'D *\' via virtual base \'B\'","clang/test/SemaCXX/cstyle-cast.cpp:129:9: error: cannot cast \'A\' to \'D &\' via virtual base \'B\'"}
["clang/test/OpenMP/ordered_messages.cpp"]={"clang/test/OpenMP/ordered_messages.cpp:162:53: error: \'doacross sink:\' must be with \'omp_cur_iteration - 1\'","clang/test/OpenMP/ordered_messages.cpp:163:55: error: \'doacross sink:\' must be with \'omp_cur_iteration - 1\'","clang/test/OpenMP/ordered_messages.cpp:164:52: error: \'doacross sink:\' must be with \'omp_cur_iteration - 1\'","clang/test/OpenMP/ordered_messages.cpp:165:55: error: \'doacross source:\' must be with \'omp_cur_iteration\'"}
}
}
},
},
["err_static_function_scope"]={
["err_omp_sink_and_source_not_allowed"]={
[b]="err_static_function_scope",
[d]="err_omp_sink_and_source_not_allowed",
[c]="variables in function scope cannot be declared static",
[e]="\'%0(%select{source|sink:vec}1)\' clause%select{|s}1 cannot be mixed with \'%0(%select{sink:vec|source}1)\' clause%select{s|}1",
[d]="variables in function scope cannot be declared static",
[i]={{nil,nil,{"\'A(",{b,"sink:vec"},")\' clause",{a,"s"}," cannot be mixed with \'A(",{"sink:vec",b},")\' clause",{"s",a}}}},
[e]=k,
[j]=k,
[g]="variables in function scope cannot be declared static",
[c]="\'(.*?)\\((?:source|sink\\:vec)\\)\' clause(?:|s) cannot be mixed with \'(.*?)\\((?:sink\\:vec|source)\\)\' clause(?:s|)",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2.","Extend the support for cl-std to include 1.2.\nAdd error checking for the static qualifier which is now allowed in certain situations for OpenCL 1.2. Use the CL version to turn on this feature.\nAdded test case for 1.2 static storage class feature.\n\nllvm-svn: 158759"},
[f]={"95f50964fbf5",1625925174,"Implement P2361 Unevaluated string literals","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"},
[j]={{t,8548,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  // OpenCL v1.2 s6.8 - The static qualifier is valid only in program\n // scope.\n if (getLangOpts().OpenCLVersion == 120 && !getOpenCLOptions().isAvailableOption(\"cl_clang_storage_class_specifiers\", getLangOpts()) && NewVD->isStaticLocal()) {\n   Diag(NewVD->getLocation(), diag::err_static_function_scope);"}},
[b]={{n,11335,"StmtResult Sema::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  for (const OMPClause *C : Clauses) {\n    // ...\n    if (DC || DOC) {\n     // ...\n     if ((DC && DC->getDependencyKind() == OMPC_DEPEND_source) || (DOC && (ODK.isSource(DOC)))) {\n        // ...\n        if ((DC && DependSinkClause) || (DOC && DoacrossSinkClause)) {\n          Diag(C->getBeginLoc(), diag::err_omp_sink_and_source_not_allowed) << (DC ? \"depend\" : \"doacross\") << 0;"},{n,11342,"StmtResult Sema::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  for (const OMPClause *C : Clauses) {\n    // ...\n    if (DC || DOC) {\n      // ...\n      if ((DC && DC->getDependencyKind() == OMPC_DEPEND_source) || (DOC && (ODK.isSource(DOC)))) {\n      // ...\n      } else if ((DC && DC->getDependencyKind() == OMPC_DEPEND_sink) || (DOC && (ODK.isSink(DOC) || ODK.isSinkIter(DOC)))) {\n       if (DependSourceClause || DoacrossSourceClause) {\n          Diag(C->getBeginLoc(), diag::err_omp_sink_and_source_not_allowed) << (DC ? \"depend\" : \"doacross\") << 1;"}},
[l]={
[l]={
["clang/test/SemaOpenCL/storageclass.cl"]={"clang/test/SemaOpenCL/storageclass.cl:117:14: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:124:23: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:170:16: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:177:25: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:182:23: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:189:22: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:198:24: error: variables in function scope cannot be declared static","clang/test/SemaOpenCL/storageclass.cl:207:24: error: variables in function scope cannot be declared static"}
["clang/test/OpenMP/ordered_messages.cpp"]={"clang/test/OpenMP/ordered_messages.cpp:216:53: error: \'depend(source)\' clause cannot be mixed with \'depend(sink:vec)\' clauses","clang/test/OpenMP/ordered_messages.cpp:217:36: error: \'depend(sink:vec)\' clauses cannot be mixed with \'depend(source)\' clause","clang/test/OpenMP/ordered_messages.cpp:395:55: error: \'depend(source)\' clause cannot be mixed with \'depend(sink:vec)\' clauses","clang/test/OpenMP/ordered_messages.cpp:396:36: error: \'depend(sink:vec)\' clauses cannot be mixed with \'depend(source)\' clause"}
}
}
},
},
["err_static_illegal_in_new"]={
["err_omp_stmt_depends_on_loop_counter"]={
[b]="err_static_illegal_in_new",
[d]={{nil,v,"err_omp_stmt_depends_on_loop_counter"}},
[c]="the \'static\' modifier for the array size is not legal in new expressions",
[e]={{nil,v,"the loop %select{initializer|condition}0 expression depends on the current loop control variable"}},
[d]="the \'static\' modifier for the array size is not legal in new expressions",
[i]={{nil,v,{"the loop ",{"initializer","condition"}," expression depends on the current loop control variable"}}},
[e]=k,
[j]=k,
[g]="the \'static\' modifier for the array size is not legal in new expressions",
[c]="the loop (?:initializer|condition) expression depends on the current loop control variable",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{J,1866,"/// 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 (Chunk.Arr.hasStatic)\n      return ExprError(Diag(Chunk.Loc, diag::err_static_illegal_in_new) << D.getSourceRange());"}}
},
["err_static_kernel"]={
[b]="err_static_kernel",
[c]="kernel functions cannot be declared static",
[d]="kernel functions cannot be declared static",
[e]=k,
[g]="kernel functions cannot be declared static",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,v,o}},
[f]={"4fdce3faa898",1340147392,"Extend the support for cl-std to include 1.2.","Extend the support for cl-std to include 1.2.\nAdd error checking for the static qualifier which is now allowed in certain situations for OpenCL 1.2. Use the CL version to turn on this feature.\nAdded test case for 1.2 static storage class feature.\n\nllvm-svn: 158759"},
[f]={"622af1d282a1",1556135910,"[OPENMP]Initial support for non-rectangular loop nest.","[OPENMP]Initial support for non-rectangular loop nest.\n\nAdded basic semantic analysis for the non-rectangular loop nests for\nOpenMP 5.0 support.\n\nllvm-svn: 359132"},
[j]={{t,10691,"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    // OpenCL v1.2 s6.8 static is invalid for kernel functions.\n    if (SC == SC_Static) {\n      Diag(D.getIdentifierLoc(), diag::err_static_kernel);"}},
[b]={{n,8058,"/// Checker for the non-rectangular loops. Checks if the initializer or\n/// condition expression references loop counter variable.\nclass LoopCounterRefChecker final : public ConstStmtVisitor<LoopCounterRefChecker, bool> {\n  // ...\n  bool checkDecl(const Expr *E, const ValueDecl *VD) {\n    if (getCanonicalDecl(VD) == getCanonicalDecl(CurLCDecl)) {\n      SemaRef.Diag(E->getExprLoc(), diag::err_omp_stmt_depends_on_loop_counter) << (IsInitializer ? 0 : 1);"}},
[l]={
[l]={
["clang/test/SemaOpenCL/storageclass-cl20.cl"]={"clang/test/SemaOpenCL/storageclass-cl20.cl:22:20: error: kernel functions cannot be declared static"}
["clang/test/OpenMP/unroll_messages.cpp"]={"clang/test/OpenMP/unroll_messages.cpp:14:26: error: the loop condition expression depends on the current loop control variable"}
}
}
},
},
["err_static_lambda"]={
["err_omp_target_contains_not_only_teams"]={
["groups"]={"c++23-extensions","c++2b-extensions"},
[d]="err_omp_target_contains_not_only_teams",
["maingroup"]="c++23-extensions",
[e]="target construct with nested teams region contains statements outside of the teams construct",
[b]={{nil,D,"err_static_lambda"}},
[i]="target construct with nested teams region contains statements outside of the teams construct",
[c]="static lambdas are a C++23 extension",
[j]=k,
[d]="static lambdas are a C++23 extension",
[c]="target construct with nested teams region contains statements outside of the teams construct",
[e]="(?:warning|error|fatal error)\\: ",
[g]="static lambdas are a C\\+\\+23 extension",
[h]=" \\[(?:\\-Werror,)?\\-Wc\\+\\+23\\-extensions[^\\]]*\\]",
[i]={{nil,D,G}},
[f]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()","[Clang] P1169R4: static operator()\n\nImplements \'P1169R4: static operator()\' from C++2b.\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D133659"},
[j]={{"clang/lib/Parse/ParseExprCXX.cpp",1210,"static void addStaticToLambdaDeclSpecifier(Parser &P, SourceLocation StaticLoc, DeclSpec &DS) {\n  if (StaticLoc.isValid()) {\n    P.Diag(StaticLoc, !P.getLangOpts().CPlusPlus23 ? diag::err_static_lambda : diag::warn_cxx20_compat_static_lambda);"}},
[l]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:1043:33: warning: static lambdas are a C++23 extension [-Wc++23-extensions]"}
}
},
["err_static_lambda_captures"]={
[b]={{nil,D,"err_static_lambda_captures"}},
[c]={{nil,D,"a static lambda cannot have any captures"}},
[d]={{nil,D,"a static lambda cannot have any captures"}},
[e]=k,
[g]="a static lambda cannot have any captures",
[h]=a,
[h]=a,
[i]={{nil,D,G}},
[g]=o,
[f]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()","[Clang] P1169R4: static operator()\n\nImplements \'P1169R4: static operator()\' from C++2b.\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D133659"},
[f]={"941bbec6f4d9",1412676813,"[OPENMP] \'omp teams\' directive basic support.","[OPENMP] \'omp teams\' directive basic support.\nIncludes parsing and semantic analysis for \'omp teams\' directive support from OpenMP 4.0. Adds additional analysis to \'omp target\' directive with \'omp teams\' directive.\n\nllvm-svn: 219197"},
[j]={{"clang/lib/Parse/ParseExprCXX.cpp",1266,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n  // ...\n  if (Intro.hasLambdaCapture()) {\n    P.Diag(StaticLoc, diag::err_static_lambda_captures);"}},
[b]={{n,13059,"StmtResult Sema::ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // OpenMP [2.16, Nesting of Regions]\n  // If specified, a teams construct must be contained within a target\n  // construct. That target construct must contain no statements or directives\n  // outside of the teams construct.\n  if (DSAStack->hasInnerTeamsRegion()) {\n    // ...\n    if (!OMPTeamsFound) {\n      Diag(StartLoc, diag::err_omp_target_contains_not_only_teams);"}},
[l]={
[l]={
["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:55:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:56:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:57:21: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:58:22: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:59:25: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:60:20: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:64:16: error: a static lambda cannot have any captures","clang/test/Parser/cxx2b-lambdas.cpp:65:17: error: a static lambda cannot have any captures"}
["clang/test/OpenMP/nesting_of_regions.cpp"]={"clang/test/OpenMP/nesting_of_regions.cpp:4880:1: error: target construct with nested teams region contains statements outside of the teams construct","clang/test/OpenMP/nesting_of_regions.cpp:4887:1: error: target construct with nested teams region contains statements outside of the teams construct","clang/test/OpenMP/nesting_of_regions.cpp:4893:1: error: target construct with nested teams region contains statements outside of the teams construct","clang/test/OpenMP/nesting_of_regions.cpp:13737:1: error: target construct with nested teams region contains statements outside of the teams construct","clang/test/OpenMP/nesting_of_regions.cpp:13744:1: error: target construct with nested teams region contains statements outside of the teams construct"}
}
}
},
},
["err_static_main"]={
["err_omp_taskwait_depend_mutexinoutset_not_allowed"]={
[b]="err_static_main",
[d]={{nil,M,"err_omp_taskwait_depend_mutexinoutset_not_allowed"}},
[c]="\'main\' is not allowed to be declared static",
[e]={{nil,M,"\'mutexinoutset\' modifier not allowed in \'depend\' clause on \'taskwait\' directive"}},
[d]="\'main\' is not allowed to be declared static",
[i]={{nil,M,"\'mutexinoutset\' modifier not allowed in \'depend\' clause on \'taskwait\' directive"}},
[e]=k,
[j]=k,
[g]="\'main\' is not allowed to be declared static",
[c]="\'mutexinoutset\' modifier not allowed in \'depend\' clause on \'taskwait\' directive",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,M,o}},
[f]={"d937bf13d461",1315463584,"Adding FixIts to static/inline main declaration diagnostics.","Adding FixIts to static/inline main declaration diagnostics.\n\nllvm-svn: 139282"},
[f]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
[j]={{t,12077,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // C++11 [basic.start.main]p3:\n  //  A program that [...] declares main to be inline, static or\n  //  constexpr is ill-formed.\n  // C11 6.7.4p4:  In a hosted environment, no function specifier(s) shall\n  //   appear in a declaration of main.\n  // static main is not an error under C99, but we should warn about it.\n  // We accept _Noreturn main as an extension.\n  if (FD->getStorageClass() == SC_Static)\n    Diag(DS.getStorageClassSpecLoc(), getLangOpts().CPlusPlus ? diag::err_static_main : diag::warn_static_main) << FixItHint::CreateRemoval(DS.getStorageClassSpecLoc());"}},
[b]={{n,20736,"OMPClause *Sema::ActOnOpenMPDependClause(const OMPDependClause::DependDataTy &Data, Expr *DepModifier, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  if (DSAStack->getCurrentDirective() == OMPD_taskwait && DepKind == OMPC_DEPEND_mutexinoutset) {\n    Diag(DepLoc, diag::err_omp_taskwait_depend_mutexinoutset_not_allowed);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp"]={"clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp:10:1: error: \'main\' is not allowed to be declared static"}
["clang/test/OpenMP/taskwait_depend_messages.cpp"]={"clang/test/OpenMP/taskwait_depend_messages.cpp:33:31: error: \'mutexinoutset\' modifier not allowed in \'depend\' clause on \'taskwait\' directive"}
}
}
},
},
["err_static_mutable_lambda"]={
["err_omp_threadprivate_in_clause"]={
[b]={{nil,D,"err_static_mutable_lambda"}},
[d]="err_omp_threadprivate_in_clause",
[c]={{nil,D,"lambda cannot be both mutable and static"}},
[e]="threadprivate variables are not allowed in \'%0\' clause",
[d]={{nil,D,"lambda cannot be both mutable and static"}},
[i]="threadprivate variables are not allowed in \'A\' clause",
[e]=k,
[j]=k,
[g]="lambda cannot be both mutable and static",
[c]="threadprivate variables are not allowed in \'(.*?)\' clause",
[h]=a,
[h]=a,
[i]={{nil,D,G}},
[g]=o,
[f]={"6523814c4e38",1664466303,"[Clang] P1169R4: static operator()","[Clang] P1169R4: static operator()\n\nImplements \'P1169R4: static operator()\' from C++2b.\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D133659"},
[f]={"661c0904e144",1464284398,"[OpenMP] Parsing and sema support for the to clause","[OpenMP] Parsing and sema support for the to clause\n\nSummary:\nThe patch contains the parsing and sema support for the `to` clause. \n\nPatch based on the original post by Kelvin Li.\n\nReviewers: carlo.bertolli, hfinkel, kkwli0, arpith-jacob, ABataev\n\nSubscribers: caomhin, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D18597\n\nllvm-svn: 270880"},
[j]={{"clang/lib/Parse/ParseExprCXX.cpp",1264,"static void DiagnoseStaticSpecifierRestrictions(Parser &P, SourceLocation StaticLoc, SourceLocation MutableLoc, const LambdaIntroducer &Intro) {\n  // ...\n  // [expr.prim.lambda.general] p4\n // The lambda-specifier-seq shall not contain both mutable and static.\n // If the lambda-specifier-seq contains static, there shall be no\n // lambda-capture.\n if (MutableLoc.isValid())\n   P.Diag(StaticLoc, diag::err_static_mutable_lambda);"}},
[b]={{n,21976,"// Check the validity of the provided variable list for the provided clause kind\n// \\a CKind. In the check process the valid expressions, mappable expression\n// components, variables, and user-defined mappers are extracted and used to\n// fill \\a ProcessedVarList, \\a VarComponents, \\a VarBaseDeclarations, and \\a\n// UDMapperList in MVLI. \\a MapType, \\a IsMapTypeImplicit, \\a MapperIdScopeSpec,\n// and \\a MapperId are expected to be valid if the clause kind is \'map\'.\nstatic void checkMappableExpressionList(Sema &SemaRef, DSAStackTy *DSAS, OpenMPClauseKind CKind, MappableVarListInfo &MVLI, SourceLocation StartLoc, CXXScopeSpec &MapperIdScopeSpec, DeclarationNameInfo MapperId, ArrayRef<Expr *> UnresolvedMappers, OpenMPMapClauseKind MapType = OMPC_MAP_unknown, ArrayRef<OpenMPMapModifierKind> Modifiers = std::nullopt, bool IsMapTypeImplicit = false, bool NoDiagnose = false) {\n  // ...\n  for (Expr *RE : MVLI.VarList) {\n    // ...\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.10]\n   // threadprivate variables cannot appear in a map clause.\n   // OpenMP 4.5 [2.10.5, target update Construct]\n   // threadprivate variables cannot appear in a from clause.\n   if (VD && DSAS->isThreadPrivate(VD)) {\n      // ...\n     SemaRef.Diag(ELoc, diag::err_omp_threadprivate_in_clause) << getOpenMPClauseName(CKind);"}},
[l]={
[l]={
["clang/test/Parser/cxx2b-lambdas.cpp"]={"clang/test/Parser/cxx2b-lambdas.cpp:43:17: error: lambda cannot be both mutable and static"}
["clang/test/OpenMP/target_update_from_messages.cpp"]={"clang/test/OpenMP/target_update_from_messages.cpp:120:32: error: threadprivate variables are not allowed in \'from\' clause","clang/test/OpenMP/target_update_from_messages.cpp:176:32: error: threadprivate variables are not allowed in \'from\' clause"}
}
}
},
},
["err_static_non_static"]={
["err_omp_threadprivate_in_target"]={
[b]="err_static_non_static",
[d]="err_omp_threadprivate_in_target",
[c]="static declaration of %0 follows non-static declaration",
[e]="threadprivate variables cannot be used in target constructs",
[d]="static declaration of A follows non-static declaration",
[i]="threadprivate variables cannot be used in target constructs",
[e]=k,
[j]=k,
[g]="static declaration of (.*?) follows non\\-static declaration",
[c]="threadprivate variables cannot be used in target constructs",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={p,1237025389,q,r},
[f]={"0b0da296e6de",1459942739,"[OPENMP] Parsing and Sema support for \'omp declare target\' directive","[OPENMP] Parsing and Sema support for \'omp declare target\' directive\n\nAdd parsing, sema analysis for \'declare target\' construct for OpenMP 4.0\n(4.5 support will be added in separate patch).\n\nThe declare target directive specifies that variables, functions (C, C++\nand Fortran), and subroutines (Fortran) are mapped to a device. The declare\ntarget directive is a declarative directive. In Clang declare target is\nimplemented as implicit attribute for the declaration.\n\nThe syntax of the declare target directive is as follows:\n\n #pragma omp declare target\n declarations-definition-seq\n #pragma omp end declare target\n\nBased on patch from Michael Wong http://reviews.llvm.org/D15321\n\nllvm-svn: 265530"},
[j]={{t,3702,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n // Don\'t complain about this if we\'re in GNU89 mode and the old function\n  // is an extern inline function.\n // Don\'t complain about specializations. They are not supposed to have\n // storage classes.\n if (!isa<CXXMethodDecl>(New) && !isa<CXXMethodDecl>(Old) && New->getStorageClass() == SC_Static && Old->hasExternalFormalLinkage() && !New->getTemplateSpecializationInfo() && !canRedefineFunction(Old, getLangOpts())) {\n   if (getLangOpts().MicrosoftExt) {\n   // ...\n   } else {\n      Diag(New->getLocation(), diag::err_static_non_static) << New;"},{t,4633,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  // [dcl.stc]p8: Check if we have a non-static decl followed by a static.\n  if (New->getStorageClass() == SC_Static && !New->isStaticDataMember() && Old->hasExternalFormalLinkage()) {\n    if (getLangOpts().MicrosoftExt) {\n    // ...\n    } else {\n      Diag(New->getLocation(), diag::err_static_non_static) << New->getDeclName();"}},
[b]={{n,23159,"void Sema::checkDeclIsAllowedInOpenMPTarget(Expr *E, Decl *D, SourceLocation IdLoc) {\n  // ...\n  if (auto *VD = dyn_cast<VarDecl>(D)) {\n    // ...\n    // 2.10.6: threadprivate variable cannot appear in a declare target\n    // directive.\n    if (DSAStack->isThreadPrivate(VD)) {\n      Diag(SL, diag::err_omp_threadprivate_in_target);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp"]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp:11:13: error: static declaration of \'operator delete\' follows non-static declaration"}
["clang/test/OpenMP/declare_target_messages.cpp"]={"clang/test/OpenMP/declare_target_messages.cpp:153:3: error: threadprivate variables cannot be used in target constructs","clang/test/OpenMP/declare_target_messages.cpp:155:3: error: threadprivate variables cannot be used in target constructs"}
}
}
},
},
["err_static_not_bitfield"]={
["err_omp_threadprivate_incomplete_type"]={
[b]="err_static_not_bitfield",
[d]="err_omp_threadprivate_incomplete_type",
[c]="static member %0 cannot be a bit-field",
[e]="threadprivate variable with incomplete type %0",
[d]="static member A cannot be a bit-field",
[i]="threadprivate variable with incomplete type A",
[e]=k,
[j]=k,
[g]="static member (.*?) cannot be a bit\\-field",
[c]="threadprivate variable with incomplete type (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={ob,1236199783,mb,nb},
[f]={"6f6f3b4baf55",1368418698,"OpenMP threadprivate with qualified names.","OpenMP threadprivate with qualified names.\n\nllvm-svn: 181683"},
[j]={{C,3626,"/// 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        Diag(Loc, diag::err_static_not_bitfield) << Name << BitWidth->getSourceRange();"}},
[b]={{n,3219,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (RequireCompleteType(ILoc, VD->getType(), diag::err_omp_threadprivate_incomplete_type)) {"}},
[l]={
[l]={
["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:34:14: error: static member \'sb\' cannot be a bit-field"}
[Cb]={"clang/test/OpenMP/threadprivate_messages.cpp:56:28: error: threadprivate variable with incomplete type \'IncompleteSt\'"}
}
}
},
},
["err_static_out_of_line"]={
["err_omp_typecheck_section_not_integer"]={
[b]="err_static_out_of_line",
[d]="err_omp_typecheck_section_not_integer",
[c]="\'static\' can only be specified inside the class definition",
[e]="array section %select{lower bound|length}0 is not an integer",
[d]="\'static\' can only be specified inside the class definition",
[i]={{nil,nil,{"array section ",{"lower bound","length"}," is not an integer"}}},
[e]=k,
[j]=k,
[g]="\'static\' can only be specified inside the class definition",
[c]="array section (?:lower bound|length) is not an integer",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={p,1237025389,q,r},
[f]={Bb,1440512644,vb,zb},
[j]={{t,7550,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    if (DC->isRecord() && !CurContext->isRecord()) {\n      // ...\n      case SC_Static:\n        Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"},{t,10052,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    if (SC == SC_Static && isa<CXXMethodDecl>(NewFD) && !CurContext->isRecord()) {\n     // ...\n     Diag(D.getDeclSpec().getStorageClassSpecLoc(), ((!getLangOpts().isCompatibleWithMSVC(LangOptions::MSVC2015) && cast<CXXRecordDecl>(DC)->getDescribedClassTemplate()) || (getLangOpts().MSVCCompat && NewFD->getDescribedFunctionTemplate())) ? diag::ext_static_out_of_line : diag::err_static_out_of_line) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}},
[b]={{E,5318,"ExprResult Sema::ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc, Expr *LowerBound, SourceLocation ColonLocFirst, SourceLocation ColonLocSecond, Expr *Length, Expr *Stride, SourceLocation RBLoc) {\n  // ...\n  // C99 6.5.2.1p1\n  if (LowerBound) {\n    // ...\n    if (Res.isInvalid())\n      return ExprError(Diag(LowerBound->getExprLoc(), diag::err_omp_typecheck_section_not_integer) << 0 << LowerBound->getSourceRange());"},{E,5332,"ExprResult Sema::ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc, Expr *LowerBound, SourceLocation ColonLocFirst, SourceLocation ColonLocSecond, Expr *Length, Expr *Stride, SourceLocation RBLoc) {\n  // ...\n  if (Length) {\n    // ...\n    if (Res.isInvalid())\n      return ExprError(Diag(Length->getExprLoc(), diag::err_omp_typecheck_section_not_integer) << 1 << Length->getSourceRange());"},{E,5346,"ExprResult Sema::ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc, Expr *LowerBound, SourceLocation ColonLocFirst, SourceLocation ColonLocSecond, Expr *Length, Expr *Stride, SourceLocation RBLoc) {\n // ...\n if (Stride) {\n    // ...\n    if (Res.isInvalid())\n      return ExprError(Diag(Stride->getExprLoc(), diag::err_omp_typecheck_section_not_integer) << 1 << Stride->getSourceRange());"}}
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.stc/p1.cpp:32:12: error: \'static\' can only be specified inside the class definition"}
}
},
},
["err_static_overrides_virtual"]={
["err_omp_typecheck_section_value"]={
[b]="err_static_overrides_virtual",
[d]="err_omp_typecheck_section_value",
[c]="\'static\' member function %0 overrides a virtual function in a base class",
[e]="subscripted value is not an array or pointer",
[d]="\'static\' member function A overrides a virtual function in a base class",
[i]="subscripted value is not an array or pointer",
[e]=k,
[j]=k,
[g]="\'static\' member function (.*?) overrides a virtual function in a base class",
[c]="subscripted value is not an array or pointer",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"5a2bb5ba9810",1287010532,"Diagnose when a \'static\' member function overrides a virtual function","Diagnose when a \'static\' member function overrides a virtual function\nin a base class. Fixes PR8168.\n\nllvm-svn: 116448"},
[f]={Bb,1440512644,vb,zb},
[j]={{C,7018,"/// 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   // A static function cannot override anything.\n    if (MD->getStorageClass() == SC_Static) {\n      if (ReportOverrides(*this, diag::err_static_overrides_virtual, MD, [](const CXXMethodDecl *) { return true; }))"}},
[b]={{E,5312,"ExprResult Sema::ActOnOMPArraySectionExpr(Expr *Base, SourceLocation LBLoc, Expr *LowerBound, SourceLocation ColonLocFirst, SourceLocation ColonLocSecond, Expr *Length, Expr *Stride, SourceLocation RBLoc) {\n  // ...\n  if (OriginalTy->isAnyPointerType()) {\n  // ...\n  } else if (OriginalTy->isArrayType()) {\n // ...\n  } else {\n    return ExprError(Diag(Base->getExprLoc(), diag::err_omp_typecheck_section_value) << Base->getSourceRange());"}},
[l]={
[l]={
["clang/test/SemaCXX/virtual-override.cpp"]={"clang/test/SemaCXX/virtual-override.cpp:289:17: error: \'static\' member function \'foo\' overrides a virtual function in a base class"}
["clang/test/OpenMP/taskwait_depend_messages.cpp"]={"clang/test/OpenMP/taskwait_depend_messages.cpp:45:37: error: subscripted value is not an array or pointer","clang/test/OpenMP/taskwait_depend_messages.cpp:55:34: error: subscripted value is not an array or pointer"}
}
}
},
},
["err_statically_allocated_object"]={
["err_omp_typecheck_shaping_not_integer"]={
[b]="err_statically_allocated_object",
[d]={{nil,p,"err_omp_typecheck_shaping_not_integer"}},
[c]="interface type cannot be statically allocated",
[e]={{nil,p,"array shaping operation dimension is not an integer"}},
[d]="interface type cannot be statically allocated",
[i]={{nil,p,"array shaping operation dimension is not an integer"}},
[e]=k,
[j]=k,
[g]="interface type cannot be statically allocated",
[c]="array shaping operation dimension is not an integer",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,p,o}},
[f]={ob,1236199783,mb,nb},
[f]={W,1576908663,X,Y},
[j]={{t,8525,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (T->isObjCObjectType()) {\n    Diag(NewVD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(NewVD->getLocation(), \"*\");"},{t,18887,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  // ...\n  for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n    // ...\n    if (FDTy->isFunctionType()) {\n    // ...\n    } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n    // ...\n    } else if (!FDTy->isDependentType() && RequireCompleteSizedType(FD->getLocation(), FD->getType(), diag::err_field_incomplete_or_sizeless)) {\n   // ...\n   } else if (const RecordType *FDTTy = FDTy->getAs<RecordType>()) {\n    // ...\n    } else if (FDTy->isObjCObjectType()) {\n     // ...\n     Diag(FD->getLocation(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(FD->getLocation(), \"*\");"},{Jb,608,"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 (T->isObjCObjectType()) {\n    // ...\n    Diag(FD.D.getIdentifierLoc(), diag::err_statically_allocated_object) << FixItHint::CreateInsertion(StarLoc, \"*\");"}},
[b]={{E,5487,"ExprResult Sema::ActOnOMPArrayShapingExpr(Expr *Base, SourceLocation LParenLoc, SourceLocation RParenLoc, ArrayRef<Expr *> Dims, ArrayRef<SourceRange> Brackets) {\n  // ...\n  for (Expr *Dim : Dims) {\n    // ...\n    if (!Dim->isTypeDependent()) {\n     // ...\n     if (Result.isInvalid()) {\n       // ...\n       Diag(Dim->getExprLoc(), diag::err_omp_typecheck_shaping_not_integer) << Dim->getSourceRange();"}}
[l]={
["clang/test/SemaObjC/invalid-objc-decls-1.m"]={"clang/test/SemaObjC/invalid-objc-decls-1.m:4:7: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:6:14: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:9:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:16:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:21:9: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:26:13: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:32:8: error: interface type cannot be statically allocated","clang/test/SemaObjC/invalid-objc-decls-1.m:39:36: error: interface type cannot be statically allocated"}
}
},
},
["err_std_compare_type_not_supported"]={
["err_omp_unexpected_append_op"]={
[b]={{nil,H,"err_std_compare_type_not_supported"}},
[d]={{nil,M,"err_omp_unexpected_append_op"}},
[c]={{nil,H,"standard library implementation of %0 is not supported; %select{member \'%2\' does not have expected form|member \'%2\' is missing|the type is not trivially copyable|the type does not have the expected form}1"}},
[e]={{nil,M,"unexpected operation specified in \'append_args\' clause, expected \'interop\'"}},
[d]={{nil,H,{"standard library implementation of A is not supported; ",{"member \'C\' does not have expected form","member \'C\' is missing","the type is not trivially copyable","the type does not have the expected form"}}}},
[i]={{nil,M,"unexpected operation specified in \'append_args\' clause, expected \'interop\'"}},
[e]=k,
[j]=k,
[g]="standard library implementation of (.*?) is not supported; (?:member \'(.*?)\' does not have expected form|member \'(.*?)\' is missing|the type is not trivially copyable|the type does not have the expected form)",
[c]="unexpected operation specified in \'append_args\' clause, expected \'interop\'",
[h]=a,
[h]=a,
[i]={{nil,H,y}},
[g]={{nil,M,K}},
[f]={"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"},
[f]={"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]={{C,11591,"struct InvalidSTLDiagnoser {\n  // ...\n  QualType operator()(UnsupportedSTLSelect Sel = USS_Other, StringRef Name = \"\", const VarDecl *VD = nullptr) {\n    {\n     auto D = S.Diag(Loc, diag::err_std_compare_type_not_supported) << TyForDiags << ((int)Sel);"}},
[b]={{L,1534,"bool Parser::parseOpenMPAppendArgs(SmallVectorImpl<OMPInteropInfo> &InteropInfos) {\n  // ...\n  if (!HasError && InteropInfos.empty()) {\n    // ...\n   Diag(Tok.getLocation(), diag::err_omp_unexpected_append_op);"}},
[l]={
[l]={
["clang/test/SemaCXX/std-compare-cxx2a.cpp"]={"clang/test/SemaCXX/std-compare-cxx2a.cpp:79:14: error: standard library implementation of \'std::strong_ordering\' is not supported; the type is not trivially copyable"}
["clang/test/OpenMP/declare_variant_clauses_messages.cpp"]={"clang/test/OpenMP/declare_variant_clauses_messages.cpp:143:49: error: unexpected operation specified in \'append_args\' clause, expected \'interop\'"}
}
}
},
},
["err_std_source_location_impl_malformed"]={
["err_omp_unexpected_call_to_omp_runtime_api"]={
[b]={{nil,x,"err_std_source_location_impl_malformed"}},
[d]={{nil,O,"err_omp_unexpected_call_to_omp_runtime_api"}},
[c]={{nil,x,"\'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'"}},
[e]={{nil,O,"calls to OpenMP runtime API are not allowed within a region that corresponds to a construct with an order clause that specifies concurrent"}},
[d]={{nil,x,"\'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'"}},
[i]={{nil,O,"calls to OpenMP runtime API are not allowed within a region that corresponds to a construct with an order clause that specifies concurrent"}},
[e]=k,
[j]=k,
[g]="\'std\\:\\:source_location\\:\\:__impl\' must be standard\\-layout and have only two \'const char \\*\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'",
[c]="calls to OpenMP runtime API are not allowed within a region that corresponds to a construct with an order clause that specifies concurrent",
[h]=a,
[h]=a,
[i]={{nil,x,y}},
[g]={{nil,O,o}},
[f]={mc,1620118562,yc,lc},
[f]={"95f50964fbf5",1625925174,"Implement P2361 Unevaluated string literals","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"},
[j]={{n,17377,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  // ...\n  // Verify that __impl is a trivial struct type, with no base classes, and with\n  // only the four expected fields.\n  if (ImplDecl->isUnion() || !ImplDecl->isStandardLayout() || ImplDecl->getNumBases() != 0) {\n    S.Diag(Loc, diag::err_std_source_location_impl_malformed);"},{n,17452,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n // ...\n if (Count != 4) {\n   S.Diag(Loc, diag::err_std_source_location_impl_malformed);"}},
[b]={{n,7253,"ExprResult Sema::ActOnOpenMPCall(ExprResult Call, Scope *Scope, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig) {\n  // ...\n  if (LangOpts.OpenMP >= 51 && CalleeFnDecl->getIdentifier() && CalleeFnDecl->getName().starts_with_insensitive(\"omp_\")) {\n   // checking for any calls inside an Order region\n   if (Scope && Scope->isOpenMPOrderClauseScope())\n     Diag(LParenLoc, diag::err_omp_unexpected_call_to_omp_runtime_api);"}},
[l]={
[l]={
["clang/test/SemaCXX/source_location_err.cpp"]={"clang/test/SemaCXX/source_location_err.cpp:65:14: error: \'std::source_location::__impl\' must be standard-layout and have only two \'const char *\' fields \'_M_file_name\' and \'_M_function_name\', and two integral fields \'_M_line\' and \'_M_column\'"}
["clang/test/OpenMP/for_order_messages.cpp"]={"clang/test/OpenMP/for_order_messages.cpp:13:24: error: calls to OpenMP runtime API are not allowed within a region that corresponds to a construct with an order clause that specifies concurrent","clang/test/OpenMP/for_order_messages.cpp:17:24: error: calls to OpenMP runtime API are not allowed within a region that corresponds to a construct with an order clause that specifies concurrent","clang/test/OpenMP/for_order_messages.cpp:21:24: error: calls to OpenMP runtime API are not allowed within a region that corresponds to a construct with an order clause that specifies concurrent","clang/test/OpenMP/for_order_messages.cpp:26:26: error: calls to OpenMP runtime API are not allowed within a region that corresponds to a construct with an order clause that specifies concurrent"}
}
}
},
},
["err_std_source_location_impl_not_found"]={
["err_omp_unexpected_clause"]={
[b]={{nil,x,"err_std_source_location_impl_not_found"}},
[d]="err_omp_unexpected_clause",
[c]={{nil,x,"\'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called"}},
[e]="unexpected OpenMP clause \'%0\' in directive \'#pragma omp %1\'",
[d]={{nil,x,"\'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called"}},
[i]="unexpected OpenMP clause \'A\' in directive \'#pragma omp B\'",
[e]=k,
[j]=k,
[g]="\'std\\:\\:source_location\\:\\:__impl\' was not found; it must be defined before \'__builtin_source_location\' is called",
[c]="unexpected OpenMP clause \'(.*?)\' in directive \'\\#pragma omp (.*?)\'",
[h]=a,
[h]=a,
[i]={{nil,x,y}},
[g]=K,
[f]={mc,1620118562,yc,lc},
[f]={"5ec3eb11fcb8",1374203623,"OpenMP: basic support for #pragma omp parallel","OpenMP: basic support for #pragma omp parallel\n\nllvm-svn: 186647"},
[j]={{n,17345,"static CXXRecordDecl *LookupStdSourceLocationImpl(Sema &S, SourceLocation Loc) {\n  // ...\n  if (!ImplDecl || !ImplDecl->isCompleteDefinition()) {\n    S.Diag(Loc, diag::err_std_source_location_impl_not_found);"}},
[b]={{L,3180,"/// Parsing of OpenMP clauses.\n///\n///    clause:\n///      if-clause | final-clause | num_threads-clause | safelen-clause |\n///      default-clause | private-clause | firstprivate-clause | shared-clause\n///      | linear-clause | aligned-clause | collapse-clause | bind-clause |\n///      lastprivate-clause | reduction-clause | proc_bind-clause |\n///      schedule-clause | copyin-clause | copyprivate-clause | untied-clause |\n///      mergeable-clause | flush-clause | read-clause | write-clause |\n///      update-clause | capture-clause | seq_cst-clause | device-clause |\n///      simdlen-clause | threads-clause | simd-clause | num_teams-clause |\n///      thread_limit-clause | priority-clause | grainsize-clause |\n///      nogroup-clause | num_tasks-clause | hint-clause | to-clause |\n///      from-clause | is_device_ptr-clause | task_reduction-clause |\n///      in_reduction-clause | allocator-clause | allocate-clause |\n///      acq_rel-clause | acquire-clause | release-clause | relaxed-clause |\n///      depobj-clause | destroy-clause | detach-clause | inclusive-clause |\n///      exclusive-clause | uses_allocators-clause | use_device_addr-clause |\n///      has_device_addr\n///\nOMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, OpenMPClauseKind CKind, bool FirstClause) {\n  // ...\n  // Check if clause is allowed for the given directive.\n  if (CKind != OMPC_unknown && !isAllowedClauseForDirective(DKind, CKind, getLangOpts().OpenMP)) {\n    Diag(Tok, diag::err_omp_unexpected_clause) << getOpenMPClauseName(CKind) << getOpenMPDirectiveName(DKind);"},{L,3411,"/// Parsing of OpenMP clauses.\n///\n///    clause:\n///      if-clause | final-clause | num_threads-clause | safelen-clause |\n///      default-clause | private-clause | firstprivate-clause | shared-clause\n///      | linear-clause | aligned-clause | collapse-clause | bind-clause |\n///      lastprivate-clause | reduction-clause | proc_bind-clause |\n///      schedule-clause | copyin-clause | copyprivate-clause | untied-clause |\n///      mergeable-clause | flush-clause | read-clause | write-clause |\n///      update-clause | capture-clause | seq_cst-clause | device-clause |\n///      simdlen-clause | threads-clause | simd-clause | num_teams-clause |\n///      thread_limit-clause | priority-clause | grainsize-clause |\n///      nogroup-clause | num_tasks-clause | hint-clause | to-clause |\n///      from-clause | is_device_ptr-clause | task_reduction-clause |\n///      in_reduction-clause | allocator-clause | allocate-clause |\n///      acq_rel-clause | acquire-clause | release-clause | relaxed-clause |\n///      depobj-clause | destroy-clause | detach-clause | inclusive-clause |\n///      exclusive-clause | uses_allocators-clause | use_device_addr-clause |\n///      has_device_addr\n///\nOMPClause *Parser::ParseOpenMPClause(OpenMPDirectiveKind DKind, OpenMPClauseKind CKind, bool FirstClause) {\n  // ...\n  case OMPC_threadprivate:\n  case OMPC_uniform:\n  case OMPC_match:\n    if (!WrongDirective)\n      Diag(Tok, diag::err_omp_unexpected_clause) << getOpenMPClauseName(CKind) << getOpenMPDirectiveName(DKind);"}},
[l]={
[l]={
["clang/test/SemaCXX/source_location_err.cpp"]={"clang/test/SemaCXX/source_location_err.cpp:28:15: error: \'std::source_location::__impl\' was not found; it must be defined before \'__builtin_source_location\' is called"}
["clang/test/OpenMP/cancel_messages.cpp"]={"clang/test/OpenMP/cancel_messages.cpp:13:29: error: unexpected OpenMP clause \'untied\' in directive \'#pragma omp cancel\'","clang/test/OpenMP/cancel_messages.cpp:48:29: error: unexpected OpenMP clause \'allocate\' in directive \'#pragma omp cancel\'"}
}
}
},
},
["err_std_type_trait_not_class_template"]={
["err_omp_unexpected_clause_value"]={
[b]="err_std_type_trait_not_class_template",
[d]="err_omp_unexpected_clause_value",
[c]="unsupported standard library implementation: \'std::%0\' is not a class template",
[e]="expected %0 in OpenMP clause \'%1\'",
[d]="unsupported standard library implementation: \'std::A\' is not a class template",
[i]="expected A in OpenMP clause \'B\'",
[e]=k,
[j]=k,
[g]="unsupported standard library implementation\\: \'std\\:\\:(.*?)\' is not a class template",
[c]="expected (.*?) in OpenMP clause \'(.*?)\'",
[h]=a,
[i]=m,
[f]={"7873de0cf65f",1470954346,"P0217R3: Perform semantic checks and initialization for the bindings in a","P0217R3: Perform semantic checks and initialization for the bindings in a\ndecomposition declaration for arrays, aggregate-like structs, tuple-like\ntypes, and (as an extension) for complex and vector types.\n\nllvm-svn: 278435"},
[j]={{C,1065,"static bool lookupStdTypeTraitMember(Sema &S, LookupResult &TraitMemberLookup, SourceLocation Loc, StringRef Trait, TemplateArgumentListInfo &Args, unsigned DiagID) {\n  // ...\n  if (!TraitTD) {\n    // ...\n    S.Diag(Loc, diag::err_std_type_trait_not_class_template) << Trait;"}}
},
["err_stmt_expr_in_default_arg"]={
[b]={{nil,x,"err_stmt_expr_in_default_arg"}},
[c]={{nil,x,"default %select{argument|non-type template argument}0 may not use a GNU statement expression"}},
[d]={{nil,x,{"default ",{"argument","non-type template argument"}," may not use a GNU statement expression"}}},
[e]=k,
[g]="default (?:argument|non\\-type template argument) may not use a GNU statement expression",
[h]=a,
[h]=a,
[i]={{nil,x,m}},
[g]=o,
[f]={mc,1620118562,yc,lc},
[f]={"5ec3eb11fcb8",1374203623,"OpenMP: basic support for #pragma omp parallel","OpenMP: basic support for #pragma omp parallel\n\nllvm-svn: 186647"},
[j]={{Z,7470,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed. If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  // ...\n  do {\n    // ...\n    // If no parameter was specified, verify that *something* was specified,\n    // otherwise we have a missing type and identifier.\n    if (DS.isEmpty() && ParmDeclarator.getIdentifier() == nullptr && ParmDeclarator.getNumTypeObjects() == 0) {\n    // ...\n    } else {\n      // ...\n      // Parse the default argument, if any. We parse the default\n     // arguments in all dialects; the semantic analysis in\n     // ActOnParamDefaultArgument will reject the default argument in\n      // C.\n      if (Tok.is(tok::equal)) {\n        // ...\n        // Parse the default argument\n        if (DeclaratorCtx == DeclaratorContext::Member) {\n       // ...\n       } else {\n         // ...\n         if (getLangOpts().CPlusPlus11 && Tok.is(tok::l_brace)) {\n         // ...\n         } else {\n           if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n             Diag(Tok, diag::err_stmt_expr_in_default_arg) << 0;"},{"clang/lib/Parse/ParseTemplate.cpp",1043,"/// ParseNonTypeTemplateParameter - Handle the parsing of non-type\n/// template parameters (e.g., in \"template<int Size> class array;\").\n///\n///       template-parameter:\n///         ...\n///        parameter-declaration\nNamedDecl *Parser::ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position) {\n  // ...\n  if (TryConsumeToken(tok::equal, EqualLoc)) {\n   if (Tok.is(tok::l_paren) && NextToken().is(tok::l_brace)) {\n     Diag(Tok.getLocation(), diag::err_stmt_expr_in_default_arg) << 1;"}},
[b]={{n,16831,"OMPClause *Sema::ActOnOpenMPDefaultClause(DefaultKind Kind, SourceLocation KindKwLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  if (Kind == OMP_DEFAULT_unknown) {\n    Diag(KindKwLoc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_default, /*First=*/0,"},{n,16865,"OMPClause *Sema::ActOnOpenMPProcBindClause(ProcBindKind Kind, SourceLocation KindKwLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  if (Kind == OMP_PROC_BIND_unknown) {\n    Diag(KindKwLoc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_proc_bind,"},{n,16877,"OMPClause *Sema::ActOnOpenMPProcBindClause(ProcBindKind Kind, SourceLocation KindKwLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n  if (Kind == OMP_PROC_BIND_primary && LangOpts.OpenMP < 51)\n    Diag(KindKwLoc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_proc_bind,"},{n,16891,"OMPClause *Sema::ActOnOpenMPAtomicDefaultMemOrderClause(OpenMPAtomicDefaultMemOrderClauseKind Kind, SourceLocation KindKwLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  if (Kind == OMPC_ATOMIC_DEFAULT_MEM_ORDER_unknown) {\n   Diag(KindKwLoc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_atomic_default_mem_order, /*First=*/0,"},{n,16908,"OMPClause *Sema::ActOnOpenMPAtClause(OpenMPAtClauseKind Kind, SourceLocation KindKwLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  if (Kind == OMPC_AT_unknown) {\n   Diag(KindKwLoc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_at, /*First=*/0,"},{n,16924,"OMPClause *Sema::ActOnOpenMPSeverityClause(OpenMPSeverityClauseKind Kind, SourceLocation KindKwLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  if (Kind == OMPC_SEVERITY_unknown) {\n   Diag(KindKwLoc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_severity, /*First=*/0,"},{n,16957,"OMPClause *Sema::ActOnOpenMPOrderClause(OpenMPOrderClauseModifier Modifier, OpenMPOrderClauseKind Kind, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc, SourceLocation KindLoc, SourceLocation EndLoc) {\n  if (Kind != OMPC_ORDER_concurrent || (LangOpts.OpenMP < 51 && MLoc.isValid())) {\n   // ...\n   Diag(KindLoc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_order,"},{n,16966,"OMPClause *Sema::ActOnOpenMPOrderClause(OpenMPOrderClauseModifier Modifier, OpenMPOrderClauseKind Kind, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc, SourceLocation KindLoc, SourceLocation EndLoc) {\n  // ...\n if (LangOpts.OpenMP >= 51) {\n   if (Modifier == OMPC_ORDER_MODIFIER_unknown && MLoc.isValid()) {\n     Diag(MLoc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_order,"},{n,16997,"OMPClause *Sema::ActOnOpenMPUpdateClause(OpenMPDependClauseKind Kind, SourceLocation KindKwLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  if (Kind == OMPC_DEPEND_unknown || Kind == OMPC_DEPEND_source || Kind == OMPC_DEPEND_sink || Kind == OMPC_DEPEND_depobj) {\n   // ...\n   Diag(KindKwLoc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_depend, /*First=*/0,"},{n,17214,"static bool checkScheduleModifiers(Sema &S, OpenMPScheduleClauseModifier M1, OpenMPScheduleClauseModifier M2, SourceLocation M1Loc, SourceLocation M2Loc) {\n  if (M1 == OMPC_SCHEDULE_MODIFIER_unknown && M1Loc.isValid()) {\n   // ...\n    S.Diag(M1Loc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_schedule,"},{n,17257,"OMPClause *Sema::ActOnOpenMPScheduleClause(OpenMPScheduleClauseModifier M1, OpenMPScheduleClauseModifier M2, OpenMPScheduleClauseKind Kind, Expr *ChunkSize, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation M1Loc, SourceLocation M2Loc, SourceLocation KindLoc, SourceLocation CommaLoc, SourceLocation EndLoc) {\n  // ...\n  if (Kind == OMPC_SCHEDULE_unknown) {\n   // ...\n    Diag(KindLoc, diag::err_omp_unexpected_clause_value) << Values << getOpenMPClauseName(OMPC_schedule);"},{n,18487,"OMPClause *Sema::ActOnOpenMPLastprivateClause(ArrayRef<Expr *> VarList, OpenMPLastprivateModifier LPKind, SourceLocation LPKindLoc, SourceLocation ColonLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n if (LPKind == OMPC_LASTPRIVATE_unknown && LPKindLoc.isValid()) {\n   // ...\n   Diag(LPKindLoc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_lastprivate, /*First=*/0,"},{n,19891,"OMPClause *Sema::ActOnOpenMPReductionClause(ArrayRef<Expr *> VarList, OpenMPReductionClauseModifier Modifier, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ModifierLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions) {\n  if (ModifierLoc.isValid() && Modifier == OMPC_REDUCTION_unknown) {\n   Diag(LParenLoc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_reduction, /*First=*/0,"},{n,20730,"OMPClause *Sema::ActOnOpenMPDependClause(const OMPDependClause::DependDataTy &Data, Expr *DepModifier, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n if (DSAStack->getCurrentDirective() == OMPD_ordered && DepKind != OMPC_DEPEND_source && DepKind != OMPC_DEPEND_sink) {\n   Diag(DepLoc, diag::err_omp_unexpected_clause_value) << \"\'source\' or \'sink\'\" << getOpenMPClauseName(OMPC_depend);"},{n,20756,"OMPClause *Sema::ActOnOpenMPDependClause(const OMPDependClause::DependDataTy &Data, Expr *DepModifier, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n if ((DSAStack->getCurrentDirective() != OMPD_ordered || DSAStack->getCurrentDirective() == OMPD_depobj) && (DepKind == OMPC_DEPEND_unknown || DepKind == OMPC_DEPEND_source || DepKind == OMPC_DEPEND_sink || ((LangOpts.OpenMP < 50 || DSAStack->getCurrentDirective() == OMPD_depobj) && DepKind == OMPC_DEPEND_depobj))) {\n   // ...\n   Diag(DepLoc, diag::err_omp_unexpected_clause_value) << Expected + getListOfPossibleValues(OMPC_depend, /*First=*/0,"},{n,20919,"OMPClause *Sema::ActOnOpenMPDeviceClause(OpenMPDeviceClauseModifier Modifier, Expr *Device, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ModifierLoc, SourceLocation EndLoc) {\n // ...\n  if (ModifierLoc.isValid() && Modifier == OMPC_DEVICE_unknown) {\n   // ...\n    Diag(ModifierLoc, diag::err_omp_unexpected_clause_value) << Values << getOpenMPClauseName(OMPC_device);"},{n,22699,"OMPClause *Sema::ActOnOpenMPGrainsizeClause(OpenMPGrainsizeClauseModifier Modifier, Expr *Grainsize, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ModifierLoc, SourceLocation EndLoc) {\n // ...\n  if (ModifierLoc.isValid() && Modifier == OMPC_GRAINSIZE_unknown) {\n   // ...\n    Diag(ModifierLoc, diag::err_omp_unexpected_clause_value) << Values << getOpenMPClauseName(OMPC_grainsize);"},{n,22733,"OMPClause *Sema::ActOnOpenMPNumTasksClause(OpenMPNumTasksClauseModifier Modifier, Expr *NumTasks, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ModifierLoc, SourceLocation EndLoc) {\n  // ...\n  if (ModifierLoc.isValid() && Modifier == OMPC_NUMTASKS_unknown) {\n    // ...\n    Diag(ModifierLoc, diag::err_omp_unexpected_clause_value) << Values << getOpenMPClauseName(OMPC_num_tasks);"},{n,22842,"OMPClause *Sema::ActOnOpenMPDistScheduleClause(OpenMPDistScheduleClauseKind Kind, Expr *ChunkSize, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation KindLoc, SourceLocation CommaLoc, SourceLocation EndLoc) {\n  if (Kind == OMPC_DIST_SCHEDULE_unknown) {\n    // ...\n    Diag(KindLoc, diag::err_omp_unexpected_clause_value) << Values << getOpenMPClauseName(OMPC_dist_schedule);"},{n,22907,"OMPClause *Sema::ActOnOpenMPDefaultmapClause(OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc, SourceLocation KindLoc, SourceLocation EndLoc) {\n  if (getLangOpts().OpenMP < 50) {\n    if (M != OMPC_DEFAULTMAP_MODIFIER_tofrom || Kind != OMPC_DEFAULTMAP_scalar) {\n      // ...\n      Diag(Loc, diag::err_omp_unexpected_clause_value) << Value << getOpenMPClauseName(OMPC_defaultmap);"},{n,22921,"OMPClause *Sema::ActOnOpenMPDefaultmapClause(OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc, SourceLocation KindLoc, SourceLocation EndLoc) {\n  if (getLangOpts().OpenMP < 50) {\n  // ...\n  } else {\n    // ...\n    if (!isDefaultmapKind || !isDefaultmapModifier) {\n      // ...\n      if (LangOpts.OpenMP == 50) {\n        // ...\n        if (!isDefaultmapKind && isDefaultmapModifier) {\n          Diag(KindLoc, diag::err_omp_unexpected_clause_value) << KindValue << getOpenMPClauseName(OMPC_defaultmap);"},{n,22924,"OMPClause *Sema::ActOnOpenMPDefaultmapClause(OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc, SourceLocation KindLoc, SourceLocation EndLoc) {\n  if (getLangOpts().OpenMP < 50) {\n // ...\n  } else {\n   // ...\n    if (!isDefaultmapKind || !isDefaultmapModifier) {\n      // ...\n      if (LangOpts.OpenMP == 50) {\n        // ...\n        if (!isDefaultmapKind && isDefaultmapModifier) {\n        // ...\n        } else if (isDefaultmapKind && !isDefaultmapModifier) {\n          Diag(MLoc, diag::err_omp_unexpected_clause_value) << ModifierValue << getOpenMPClauseName(OMPC_defaultmap);"},{n,22927,"OMPClause *Sema::ActOnOpenMPDefaultmapClause(OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc, SourceLocation KindLoc, SourceLocation EndLoc) {\n if (getLangOpts().OpenMP < 50) {\n  // ...\n } else {\n   // ...\n    if (!isDefaultmapKind || !isDefaultmapModifier) {\n      // ...\n     if (LangOpts.OpenMP == 50) {\n        // ...\n        if (!isDefaultmapKind && isDefaultmapModifier) {\n        // ...\n        } else if (isDefaultmapKind && !isDefaultmapModifier) {\n        // ...\n        } else {\n          Diag(MLoc, diag::err_omp_unexpected_clause_value) << ModifierValue << getOpenMPClauseName(OMPC_defaultmap);"},{n,22929,"OMPClause *Sema::ActOnOpenMPDefaultmapClause(OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc, SourceLocation KindLoc, SourceLocation EndLoc) {\n if (getLangOpts().OpenMP < 50) {\n  // ...\n } else {\n   // ...\n    if (!isDefaultmapKind || !isDefaultmapModifier) {\n      // ...\n      if (LangOpts.OpenMP == 50) {\n        // ...\n        if (!isDefaultmapKind && isDefaultmapModifier) {\n        // ...\n        } else if (isDefaultmapKind && !isDefaultmapModifier) {\n       // ...\n        } else {\n          // ...\n          Diag(KindLoc, diag::err_omp_unexpected_clause_value) << KindValue << getOpenMPClauseName(OMPC_defaultmap);"},{n,22937,"OMPClause *Sema::ActOnOpenMPDefaultmapClause(OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc, SourceLocation KindLoc, SourceLocation EndLoc) {\n  if (getLangOpts().OpenMP < 50) {\n  // ...\n  } else {\n    // ...\n    if (!isDefaultmapKind || !isDefaultmapModifier) {\n      // ...\n      if (LangOpts.OpenMP == 50) {\n      // ...\n      } else {\n        // ...\n        if (!isDefaultmapKind && isDefaultmapModifier) {\n          Diag(KindLoc, diag::err_omp_unexpected_clause_value) << KindValue << getOpenMPClauseName(OMPC_defaultmap);"},{n,22940,"OMPClause *Sema::ActOnOpenMPDefaultmapClause(OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc, SourceLocation KindLoc, SourceLocation EndLoc) {\n  if (getLangOpts().OpenMP < 50) {\n  // ...\n  } else {\n    // ...\n    if (!isDefaultmapKind || !isDefaultmapModifier) {\n      // ...\n      if (LangOpts.OpenMP == 50) {\n     // ...\n      } else {\n        // ...\n        if (!isDefaultmapKind && isDefaultmapModifier) {\n        // ...\n        } else if (isDefaultmapKind && !isDefaultmapModifier) {\n          Diag(MLoc, diag::err_omp_unexpected_clause_value) << ModifierValue << getOpenMPClauseName(OMPC_defaultmap);"},{n,22943,"OMPClause *Sema::ActOnOpenMPDefaultmapClause(OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc, SourceLocation KindLoc, SourceLocation EndLoc) {\n  if (getLangOpts().OpenMP < 50) {\n // ...\n  } else {\n    // ...\n    if (!isDefaultmapKind || !isDefaultmapModifier) {\n     // ...\n      if (LangOpts.OpenMP == 50) {\n      // ...\n      } else {\n       // ...\n        if (!isDefaultmapKind && isDefaultmapModifier) {\n        // ...\n       } else if (isDefaultmapKind && !isDefaultmapModifier) {\n        // ...\n        } else {\n          Diag(MLoc, diag::err_omp_unexpected_clause_value) << ModifierValue << getOpenMPClauseName(OMPC_defaultmap);"},{n,22945,"OMPClause *Sema::ActOnOpenMPDefaultmapClause(OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc, SourceLocation KindLoc, SourceLocation EndLoc) {\n  if (getLangOpts().OpenMP < 50) {\n  // ...\n  } else {\n    // ...\n    if (!isDefaultmapKind || !isDefaultmapModifier) {\n      // ...\n      if (LangOpts.OpenMP == 50) {\n      // ...\n      } else {\n        // ...\n        if (!isDefaultmapKind && isDefaultmapModifier) {\n       // ...\n        } else if (isDefaultmapKind && !isDefaultmapModifier) {\n        // ...\n        } else {\n          // ...\n          Diag(KindLoc, diag::err_omp_unexpected_clause_value) << KindValue << getOpenMPClauseName(OMPC_defaultmap);"},{n,24024,"OMPClause *Sema::ActOnOpenMPBindClause(OpenMPBindClauseKind Kind, SourceLocation KindLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  if (Kind == OMPC_BIND_unknown) {\n    Diag(KindLoc, diag::err_omp_unexpected_clause_value) << getListOfPossibleValues(OMPC_bind, /*First=*/0,"},{n,24073,"OMPClause *Sema::ActOnOpenMPDoacrossClause(OpenMPDoacrossClauseModifier DepType, SourceLocation DepLoc, SourceLocation ColonLoc, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n if (DSAStack->getCurrentDirective() == OMPD_ordered && DepType != OMPC_DOACROSS_source && DepType != OMPC_DOACROSS_sink && DepType != OMPC_DOACROSS_sink_omp_cur_iteration && DepType != OMPC_DOACROSS_source_omp_cur_iteration && DepType != OMPC_DOACROSS_source) {\n    Diag(DepLoc, diag::err_omp_unexpected_clause_value) << \"\'source\' or \'sink\'\" << getOpenMPClauseName(OMPC_doacross);"}},
[l]={
[l]={
["clang/test/Sema/stmt-expr-in-default-arg.cpp"]={"clang/test/Sema/stmt-expr-in-default-arg.cpp:4:24: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:6:21: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:8:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:10:26: error: default argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:13:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:16:21: error: default non-type template argument may not use a GNU statement expression","clang/test/Sema/stmt-expr-in-default-arg.cpp:25:23: error: default argument may not use a GNU statement expression"}
["clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp"]={"clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp:12:47: error: expected \'seq_cst\', \'acq_rel\' or \'relaxed\' in OpenMP clause \'atomic_default_mem_order\'"}
}
}
},
},
["err_stmtexpr_file_scope"]={
["err_omp_unexpected_directive"]={
[b]="err_stmtexpr_file_scope",
[d]="err_omp_unexpected_directive",
[c]="statement expression not allowed at file scope",
[e]={{nil,z,"unexpected OpenMP directive %select{|\'#pragma omp %1\'}0"},{F,nil,"unexpected OpenMP directive \'#pragma omp %0\'"}},
[d]="statement expression not allowed at file scope",
[i]={{nil,z,{"unexpected OpenMP directive ",{a,"\'#pragma omp B\'"}}},{F,nil,"unexpected OpenMP directive \'#pragma omp A\'"}},
[e]=k,
[j]=k,
[g]="statement expression not allowed at file scope",
[c]="unexpected OpenMP directive (?:|\'\\#pragma omp (.*?)\')",
[h]=a,
[h]=a,
[i]=G,
[g]=K,
[f]={p,1237025389,q,r},
[f]={nb,1363934075,ob,pb},
[j]={{"clang/lib/Parse/ParseExpr.cpp",2938,"/// 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    if (!getCurScope()->getFnParent() && !getCurScope()->getBlockParent()) {\n      Result = ExprError(Diag(OpenLoc, diag::err_stmtexpr_file_scope));"}},
[b]={{L,2358,"/// Parsing of declarative OpenMP directives.\n///\n///       threadprivate-directive:\n///        annot_pragma_openmp \'threadprivate\' simple-variable-list\n///         annot_pragma_openmp_end\n///\n///       allocate-directive:\n///         annot_pragma_openmp \'allocate\' simple-variable-list [<clause>]\n///         annot_pragma_openmp_end\n///\n///      declare-reduction-directive:\n///        annot_pragma_openmp \'declare\' \'reduction\' [...]\n///        annot_pragma_openmp_end\n///\n///      declare-mapper-directive:\n///        annot_pragma_openmp \'declare\' \'mapper\' \'(\' [<mapper-identifer> \':\']\n///        <type> <var> \')\' [<clause>[[,] <clause>] ... ]\n///        annot_pragma_openmp_end\n///\n///      declare-simd-directive:\n///        annot_pragma_openmp \'declare simd\' {<clause> [,]}\n///        annot_pragma_openmp_end\n///        <function declaration/definition>\n///\n///      requires directive:\n///        annot_pragma_openmp \'requires\' <clause> [[[,] <clause>] ... ]\n///         annot_pragma_openmp_end\n///\n///      assumes directive:\n///        annot_pragma_openmp \'assumes\' <clause> [[[,] <clause>] ... ]\n///        annot_pragma_openmp_end\n///      or\n///        annot_pragma_openmp \'begin assumes\' <clause> [[[,] <clause>] ... ]\n///        annot_pragma_openmp \'end assumes\'\n///        annot_pragma_openmp_end\n///\nParser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(AccessSpecifier &AS, ParsedAttributes &Attrs, bool Delayed, DeclSpec::TST TagType, Decl *Tag) {\n  // ...\n  case OMPD_end_declare_target: {\n    if (!Actions.isInOpenMPDeclareTargetContext()) {\n      Diag(Tok, diag::err_omp_unexpected_directive) << 1 << getOpenMPDirectiveName(DKind);"},{L,2439,"/// Parsing of declarative OpenMP directives.\n///\n///      threadprivate-directive:\n///        annot_pragma_openmp \'threadprivate\' simple-variable-list\n///        annot_pragma_openmp_end\n///\n///      allocate-directive:\n///        annot_pragma_openmp \'allocate\' simple-variable-list [<clause>]\n///        annot_pragma_openmp_end\n///\n///      declare-reduction-directive:\n///        annot_pragma_openmp \'declare\' \'reduction\' [...]\n///        annot_pragma_openmp_end\n///\n///      declare-mapper-directive:\n///        annot_pragma_openmp \'declare\' \'mapper\' \'(\' [<mapper-identifer> \':\']\n///        <type> <var> \')\' [<clause>[[,] <clause>] ... ]\n///        annot_pragma_openmp_end\n///\n///      declare-simd-directive:\n///        annot_pragma_openmp \'declare simd\' {<clause> [,]}\n///        annot_pragma_openmp_end\n///        <function declaration/definition>\n///\n///      requires directive:\n///        annot_pragma_openmp \'requires\' <clause> [[[,] <clause>] ... ]\n///        annot_pragma_openmp_end\n///\n///      assumes directive:\n///        annot_pragma_openmp \'assumes\' <clause> [[[,] <clause>] ... ]\n///        annot_pragma_openmp_end\n///      or\n///        annot_pragma_openmp \'begin assumes\' <clause> [[[,] <clause>] ... ]\n///        annot_pragma_openmp \'end assumes\'\n///        annot_pragma_openmp_end\n///\nParser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(AccessSpecifier &AS, ParsedAttributes &Attrs, bool Delayed, DeclSpec::TST TagType, Decl *Tag) {\n  // ...\n  case OMPD_parallel:\n  case OMPD_simd:\n  case OMPD_tile:\n  case OMPD_unroll:\n  case OMPD_task:\n  case OMPD_taskyield:\n  case OMPD_barrier:\n  case OMPD_taskwait:\n  case OMPD_taskgroup:\n  case OMPD_flush:\n  case OMPD_depobj:\n  case OMPD_scan:\n  case OMPD_for:\n  case OMPD_for_simd:\n  case OMPD_sections:\n  case OMPD_section:\n  case OMPD_single:\n  case OMPD_master:\n  case OMPD_ordered:\n  case OMPD_critical:\n  case OMPD_parallel_for:\n  case OMPD_parallel_for_simd:\n  case OMPD_parallel_sections:\n  case OMPD_parallel_master:\n  case OMPD_parallel_masked:\n  case OMPD_atomic:\n  case OMPD_target:\n  case OMPD_teams:\n  case OMPD_cancellation_point:\n  case OMPD_cancel:\n  case OMPD_target_data:\n  case OMPD_target_enter_data:\n  case OMPD_target_exit_data:\n  case OMPD_target_parallel:\n  case OMPD_target_parallel_for:\n  case OMPD_taskloop:\n  case OMPD_taskloop_simd:\n  case OMPD_master_taskloop:\n  case OMPD_master_taskloop_simd:\n  case OMPD_parallel_master_taskloop:\n  case OMPD_parallel_master_taskloop_simd:\n  case OMPD_masked_taskloop:\n  case OMPD_masked_taskloop_simd:\n  case OMPD_parallel_masked_taskloop:\n  case OMPD_parallel_masked_taskloop_simd:\n  case OMPD_distribute:\n  case OMPD_target_update:\n  case OMPD_distribute_parallel_for:\n  case OMPD_distribute_parallel_for_simd:\n  case OMPD_distribute_simd:\n  case OMPD_target_parallel_for_simd:\n  case OMPD_target_simd:\n  case OMPD_teams_distribute:\n  case OMPD_teams_distribute_simd:\n  case OMPD_teams_distribute_parallel_for_simd:\n  case OMPD_teams_distribute_parallel_for:\n  case OMPD_target_teams:\n  case OMPD_target_teams_distribute:\n  case OMPD_target_teams_distribute_parallel_for:\n  case OMPD_target_teams_distribute_parallel_for_simd:\n  case OMPD_target_teams_distribute_simd:\n  case OMPD_dispatch:\n  case OMPD_masked:\n  case OMPD_metadirective:\n  case OMPD_loop:\n  case OMPD_teams_loop:\n  case OMPD_target_teams_loop:\n  case OMPD_parallel_loop:\n  case OMPD_target_parallel_loop:\n    Diag(Tok, diag::err_omp_unexpected_directive) << 1 << getOpenMPDirectiveName(DKind);"},{L,2991,"/// Parsing of declarative or executable OpenMP directives.\n///\n///      threadprivate-directive:\n///        annot_pragma_openmp \'threadprivate\' simple-variable-list\n///        annot_pragma_openmp_end\n///\n///      allocate-directive:\n///         annot_pragma_openmp \'allocate\' simple-variable-list\n///        annot_pragma_openmp_end\n///\n///       declare-reduction-directive:\n///        annot_pragma_openmp \'declare\' \'reduction\' \'(\' <reduction_id> \':\'\n///        <type> {\',\' <type>} \':\' <expression> \')\' [\'initializer\' \'(\'\n///        (\'omp_priv\' \'=\' <expression>|<function_call>) \')\']\n///        annot_pragma_openmp_end\n///\n///      declare-mapper-directive:\n///        annot_pragma_openmp \'declare\' \'mapper\' \'(\' [<mapper-identifer> \':\']\n///        <type> <var> \')\' [<clause>[[,] <clause>] ... ]\n///        annot_pragma_openmp_end\n///\n///      executable-directive:\n///        annot_pragma_openmp \'parallel\' | \'simd\' | \'for\' | \'sections\' |\n///        \'section\' | \'single\' | \'master\' | \'critical\' [ \'(\' <name> \')\' ] |\n///        \'parallel for\' | \'parallel sections\' | \'parallel master\' | \'task\' |\n///        \'taskyield\' | \'barrier\' | \'taskwait\' | \'flush\' | \'ordered\' | \'error\'\n///        | \'atomic\' | \'for simd\' | \'parallel for simd\' | \'target\' | \'target\n///        data\' | \'taskgroup\' | \'teams\' | \'taskloop\' | \'taskloop simd\' |\n///        \'master taskloop\' | \'master taskloop simd\' | \'parallel master\n///        taskloop\' | \'parallel master taskloop simd\' | \'distribute\' | \'target\n///        enter data\' | \'target exit data\' | \'target parallel\' | \'target\n///        parallel for\' | \'target update\' | \'distribute parallel for\' |\n///        \'distribute paralle for simd\' | \'distribute simd\' | \'target parallel\n///         for simd\' | \'target simd\' | \'teams distribute\' | \'teams distribute\n///         simd\' | \'teams distribute parallel for simd\' | \'teams distribute\n///         parallel for\' | \'target teams\' | \'target teams distribute\' | \'target\n///        teams distribute parallel for\' | \'target teams distribute parallel\n///        for simd\' | \'target teams distribute simd\' | \'masked\' |\n///         \'parallel masked\' {clause} annot_pragma_openmp_end\n///\nStmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective(ParsedStmtContext StmtCtx, bool ReadDirectiveWithinMetadirective) {\n  // ...\n  case OMPD_declare_simd:\n  case OMPD_declare_target:\n  case OMPD_begin_declare_target:\n  case OMPD_end_declare_target:\n  case OMPD_requires:\n  case OMPD_begin_declare_variant:\n  case OMPD_end_declare_variant:\n  case OMPD_declare_variant:\n    Diag(Tok, diag::err_omp_unexpected_directive) << 1 << getOpenMPDirectiveName(DKind);"},{"clang/lib/Parse/ParsePragma.cpp",2643,"/// Handle \'#pragma omp ...\' when OpenMP is enabled.\n///\nvoid PragmaOpenMPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstTok) {\n  // ...\n  while (Tok.isNot(tok::eod) && Tok.isNot(tok::eof)) {\n    // ...\n    if (Tok.is(tok::annot_pragma_openmp)) {\n      PP.Diag(Tok, diag::err_omp_unexpected_directive) << 0;"}},
[l]={
[l]={
["clang/test/Sema/statements.c"]={"clang/test/Sema/statements.c:24:11: error: statement expression not allowed at file scope"}
["clang/test/OpenMP/parallel_messages.cpp"]={"clang/test/OpenMP/parallel_messages.cpp:14:13: error: unexpected OpenMP directive \'#pragma omp parallel\'"}
}
}
},
},
["err_storage_class_for_static_member"]={
["err_omp_unexpected_execution_modifier"]={
[b]="err_storage_class_for_static_member",
[d]={{nil,O,"err_omp_unexpected_execution_modifier"}},
[c]="static data member definition cannot specify a storage class",
[e]={{nil,O,"unexpected \'execution\' modifier in non-executable context"}},
[d]="static data member definition cannot specify a storage class",
[i]={{nil,O,"unexpected \'execution\' modifier in non-executable context"}},
[e]=k,
[j]=k,
[g]="static data member definition cannot specify a storage class",
[c]="unexpected \'execution\' modifier in non\\-executable context",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,O,K}},
[f]={"45f96f87c3cf",1371649314,"Fix pr16354.","Fix pr16354.\n\nWe now reject things like\n\nstruct ABC {\n static double a;\n};\nregister double ABC::a = 1.0;\n\nllvm-svn: 184300"},
[f]={"628fdc3f57ad",1668132755,"[OPENMP]Initial support for at clause","[OPENMP]Initial support for at clause\n\nError directive is allowed in both declared and executable contexts.\nThe function ActOnOpenMPAtClause is called in both places during the\nparsers.\n\nAdding a param \"bool InExContext\" to identify context which is used to\nemit error massage.\n\nDifferential Revision: https://reviews.llvm.org/D137851"},
[j]={{t,7562,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n  // ...\n  } else {\n    // ...\n    if (DC->isRecord() && !CurContext->isRecord()) {\n     // ...\n      case SC_Auto:\n      case SC_Register:\n      case SC_Extern:\n        // ...\n        Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_storage_class_for_static_member) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}},
[b]={{n,11155,"StmtResult Sema::ActOnOpenMPErrorDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc, bool InExContext) {\n  // ...\n  if (AtC && !InExContext && AtC->getAtKind() == OMPC_AT_execution) {\n   Diag(AtC->getAtKindKwLoc(), diag::err_omp_unexpected_execution_modifier);"}},
[l]={
[l]={
["clang/test/SemaCXX/static-data-member.cpp"]={"clang/test/SemaCXX/static-data-member.cpp:13:1: error: static data member definition cannot specify a storage class","clang/test/SemaCXX/static-data-member.cpp:15:1: error: static data member definition cannot specify a storage class","clang/test/SemaCXX/static-data-member.cpp:16:1: error: static data member definition cannot specify a storage class"}
["clang/test/OpenMP/error_message.cpp"]={"clang/test/OpenMP/error_message.cpp:120:22: error: unexpected \'execution\' modifier in non-executable context","clang/test/OpenMP/error_message.cpp:127:22: error: unexpected \'execution\' modifier in non-executable context"}
}
}
},
},
["err_storage_spec_on_catch_parm"]={
["err_omp_unexpected_schedule_modifier"]={
[b]="err_storage_spec_on_catch_parm",
[d]="err_omp_unexpected_schedule_modifier",
[c]="@catch parameter cannot have storage specifier \'%0\'",
[e]="modifier \'%0\' cannot be used along with modifier \'%1\'",
[d]="@catch parameter cannot have storage specifier \'A\'",
[i]="modifier \'A\' cannot be used along with modifier \'B\'",
[e]=k,
[j]=k,
[g]="@catch parameter cannot have storage specifier \'(.*?)\'",
[c]="modifier \'(.*?)\' cannot be used along with modifier \'(.*?)\'",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"f356419bf57b",1272303169,"Refactor Objective-C @catch parameter checking by detangling it from","Refactor Objective-C @catch parameter checking by detangling it from\nfunction-parameter checking and splitting it into the normal\nActOn*/Build* pair in Sema. We now use VarDecl to represent the @catch\nparameter rather than the ill-fitting ParmVarDecl.\n\nllvm-svn: 102347"},
[f]={"6402bcad714d",1451287551,"[OPENMP 4.5] Sema/parsing support for extended format of \'schedule\' clause.","[OPENMP 4.5] Sema/parsing support for extended format of \'schedule\' clause.\nOpenMP 4.0-3.1 supports the next format of ‘schedule’ clause: schedule(kind[, chunk_size])\nWhere kind can be one of ‘static’, ‘dynamic’, ‘guided’, ‘auto’ or ‘runtime’.\nOpenMP 4.5 defines the format: schedule([modifier [, modifier]:]kind[, chunk_size])\nModifier can be one of ‘monotonic’, ‘nonmonotonic’ or ‘simd’.\n\nllvm-svn: 256487"},
[j]={{"clang/lib/Sema/SemaDeclObjC.cpp",5196,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // ...\n  // We allow the \"register\" storage class on exception variables because\n  // GCC did, but we drop it completely. Any other storage class is an error.\n  if (DS.getStorageClassSpec() == DeclSpec::SCS_register) {\n  // ...\n  } else if (DeclSpec::SCS SCS = DS.getStorageClassSpec()) {\n    Diag(DS.getStorageClassSpecLoc(), diag::err_storage_spec_on_catch_parm) << DeclSpec::getSpecifierName(SCS);"}},
[b]={{n,17241,"OMPClause *Sema::ActOnOpenMPScheduleClause(OpenMPScheduleClauseModifier M1, OpenMPScheduleClauseModifier M2, OpenMPScheduleClauseKind Kind, Expr *ChunkSize, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation M1Loc, SourceLocation M2Loc, SourceLocation KindLoc, SourceLocation CommaLoc, SourceLocation EndLoc) {\n  // ...\n  // OpenMP, 2.7.1, Loop Construct, Restrictions\n  // Either the monotonic modifier or the nonmonotonic modifier can be specified\n  // but not both.\n  if ((M1 == M2 && M1 != OMPC_SCHEDULE_MODIFIER_unknown) || (M1 == OMPC_SCHEDULE_MODIFIER_monotonic && M2 == OMPC_SCHEDULE_MODIFIER_nonmonotonic) || (M1 == OMPC_SCHEDULE_MODIFIER_nonmonotonic && M2 == OMPC_SCHEDULE_MODIFIER_monotonic)) {\n    Diag(M2Loc, diag::err_omp_unexpected_schedule_modifier) << getOpenMPSimpleClauseTypeName(OMPC_schedule, M2) << getOpenMPSimpleClauseTypeName(OMPC_schedule, M1);"}},
[l]={
[l]={
["clang/test/SemaObjC/stmts.m"]={"clang/test/SemaObjC/stmts.m:14:13: error: @catch parameter cannot have storage specifier \'static\'"}
["clang/test/OpenMP/for_schedule_messages.cpp"]={"clang/test/OpenMP/for_schedule_messages.cpp:72:40: error: modifier \'nonmonotonic\' cannot be used along with modifier \'monotonic\'","clang/test/OpenMP/for_schedule_messages.cpp:74:43: error: modifier \'monotonic\' cannot be used along with modifier \'nonmonotonic\'","clang/test/OpenMP/for_schedule_messages.cpp:76:43: error: modifier \'nonmonotonic\' cannot be used along with modifier \'nonmonotonic\'","clang/test/OpenMP/for_schedule_messages.cpp:78:40: error: modifier \'monotonic\' cannot be used along with modifier \'monotonic\'"}
}
}
},
},
["err_storageclass_invalid_for_member"]={
["err_omp_union_type_not_allowed"]={
[b]="err_storageclass_invalid_for_member",
[d]="err_omp_union_type_not_allowed",
[c]="storage class specified for a member declaration",
[e]={{nil,F,"mapping of union members is not allowed"},{q,nil,"mapped storage cannot be derived from a union"}},
[d]="storage class specified for a member declaration",
[i]={{nil,F,"mapping of union members is not allowed"},{q,nil,"mapped storage cannot be derived from a union"}},
[e]=k,
[j]=k,
[g]="storage class specified for a member declaration",
[c]="mapping of union members is not allowed",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={ob,1236199783,mb,nb},
[f]={"5de996e3bd79",1453494096,"[OpenMP] Update map clause SEMA to support OpenMP 4.5 possible list items.","[OpenMP] Update map clause SEMA to support OpenMP 4.5 possible list items.\n\nSummary:\nExtend support in the map clause SEMA for the expressions supported in the OpenMP 4.5 specification, namely member expressions. \n\nFix some bugs in the previous implementation of SEMA related with expressions that do not consist of single variable references.\n\nFix bug in parsing when the expression in the map clause do not start with an identifier: accept any expression in the map clause and check for validity in SEMA instead of just ignoring it.\n\nReviewers: hfinkel, kkwli0, arpith-jacob, carlo.bertolli, ABataev\n\nSubscribers: cfe-commits, fraggamuffin, caomhin\n\nDifferential Revision: http://reviews.llvm.org/D16385\n\nllvm-svn: 258543"},
[j]={{C,3495,"/// 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 default:\n    Diag(DS.getStorageClassSpecLoc(), diag::err_storageclass_invalid_for_member);"}},
[b]={{n,21192,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n // ...\n  bool VisitMemberExpr(MemberExpr *ME) {\n    // ...\n    // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, C/C++, p.2]\n   // A list item cannot be a variable that is a member of a structure with\n    // a union type.\n   //\n    if (CurType->isUnionType()) {\n      if (!NoDiagnose) {\n        SemaRef.Diag(ELoc, diag::err_omp_union_type_not_allowed) << ME->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.deduct.guide/p1.cpp"]={"clang/test/CXX/temp/temp.deduct.guide/p1.cpp:66:1: error: storage class specified for a member declaration"}
["clang/test/OpenMP/target_teams_map_messages.cpp"]={"clang/test/OpenMP/target_teams_map_messages.cpp:298:34: error: mapping of union members is not allowed"}
}
}
},
},
["err_store_value_to_reg"]={
["err_omp_unknown_directive"]={
[b]={{nil,x,"err_store_value_to_reg"}},
[d]="err_omp_unknown_directive",
[c]={{nil,x,"impossible constraint in asm: can\'t store value into a register"}},
[e]="expected an OpenMP directive",
[d]={{nil,x,"impossible constraint in asm: can\'t store value into a register"}},
[i]="expected an OpenMP directive",
[e]=k,
[j]=k,
[g]="impossible constraint in asm\\: can\'t store value into a register",
[c]="expected an OpenMP directive",
[h]=a,
[h]=a,
[i]={{nil,x,"Inline Assembly Issue"}},
[g]=K,
[f]={mc,1620118562,yc,lc},
[f]={nb,1363934075,ob,pb},
[j]={{"clang/lib/CodeGen/CGStmt.cpp",2413,"static void EmitAsmStores(CodeGenFunction &CGF, const AsmStmt &S, const llvm::ArrayRef<llvm::Value *> RegResults, const llvm::ArrayRef<llvm::Type *> ResultRegTypes, const llvm::ArrayRef<llvm::Type *> ResultTruncRegTypes, const llvm::ArrayRef<LValue> ResultRegDests, const llvm::ArrayRef<QualType> ResultRegQualTys, const llvm::BitVector &ResultTypeRequiresCast, const llvm::BitVector &ResultRegIsFlagReg) {\n  // ...\n  for (unsigned i = 0, e = RegResults.size(); i != e; ++i) {\n   // ...\n   // ResultTypeRequiresCast elements correspond to the first\n   // ResultTypeRequiresCast.size() elements of RegResults.\n   if ((i < ResultTypeRequiresCast.size()) && ResultTypeRequiresCast[i]) {\n     // ...\n     if (Ty.isNull()) {\n       // ...\n       CGM.getDiags().Report(OutExpr->getExprLoc(), diag::err_store_value_to_reg);"},{"clang/lib/Sema/SemaStmtAsm.cpp",683,"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 = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n   // ...\n   // If the smaller value wasn\'t mentioned in the asm string, and if the\n   // output was a register, just extend the shorter one to the size of the\n   // larger one.\n   if (!SmallerValueMentioned && InputDomain != AD_Other && OutputConstraintInfos[TiedTo].allowsRegister()) {\n     // FIXME: GCC supports the OutSize to be 128 at maximum. Currently codegen\n     // crash when the size larger than the register size. So we limit it here.\n     if (OutTy->isStructureType() && Context.getIntTypeForBitwidth(OutSize, /*Signed*/ false).isNull()) {\n       targetDiag(OutputExpr->getExprLoc(), diag::err_store_value_to_reg);"}},
[b]={{L,2368,"/// Parsing of declarative OpenMP directives.\n///\n///      threadprivate-directive:\n///        annot_pragma_openmp \'threadprivate\' simple-variable-list\n///        annot_pragma_openmp_end\n///\n///      allocate-directive:\n///        annot_pragma_openmp \'allocate\' simple-variable-list [<clause>]\n///        annot_pragma_openmp_end\n///\n///      declare-reduction-directive:\n///        annot_pragma_openmp \'declare\' \'reduction\' [...]\n///        annot_pragma_openmp_end\n///\n///      declare-mapper-directive:\n///        annot_pragma_openmp \'declare\' \'mapper\' \'(\' [<mapper-identifer> \':\']\n///        <type> <var> \')\' [<clause>[[,] <clause>] ... ]\n///        annot_pragma_openmp_end\n///\n///      declare-simd-directive:\n///        annot_pragma_openmp \'declare simd\' {<clause> [,]}\n///        annot_pragma_openmp_end\n///        <function declaration/definition>\n///\n///      requires directive:\n///        annot_pragma_openmp \'requires\' <clause> [[[,] <clause>] ... ]\n///        annot_pragma_openmp_end\n///\n///      assumes directive:\n///        annot_pragma_openmp \'assumes\' <clause> [[[,] <clause>] ... ]\n///        annot_pragma_openmp_end\n///      or\n///        annot_pragma_openmp \'begin assumes\' <clause> [[[,] <clause>] ... ]\n///        annot_pragma_openmp \'end assumes\'\n///        annot_pragma_openmp_end\n///\nParser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(AccessSpecifier &AS, ParsedAttributes &Attrs, bool Delayed, DeclSpec::TST TagType, Decl *Tag) {\n  // ...\n  case OMPD_unknown:\n    Diag(Tok, diag::err_omp_unknown_directive);"},{L,2510,"/// Parsing of declarative or executable OpenMP directives.\n///\n///      threadprivate-directive:\n///        annot_pragma_openmp \'threadprivate\' simple-variable-list\n///        annot_pragma_openmp_end\n///\n///      allocate-directive:\n///        annot_pragma_openmp \'allocate\' simple-variable-list\n///        annot_pragma_openmp_end\n///\n///      declare-reduction-directive:\n///        annot_pragma_openmp \'declare\' \'reduction\' \'(\' <reduction_id> \':\'\n///        <type> {\',\' <type>} \':\' <expression> \')\' [\'initializer\' \'(\'\n///        (\'omp_priv\' \'=\' <expression>|<function_call>) \')\']\n///        annot_pragma_openmp_end\n///\n///      declare-mapper-directive:\n///        annot_pragma_openmp \'declare\' \'mapper\' \'(\' [<mapper-identifer> \':\']\n///        <type> <var> \')\' [<clause>[[,] <clause>] ... ]\n///        annot_pragma_openmp_end\n///\n///      executable-directive:\n///        annot_pragma_openmp \'parallel\' | \'simd\' | \'for\' | \'sections\' |\n///        \'section\' | \'single\' | \'master\' | \'critical\' [ \'(\' <name> \')\' ] |\n///        \'parallel for\' | \'parallel sections\' | \'parallel master\' | \'task\' |\n///        \'taskyield\' | \'barrier\' | \'taskwait\' | \'flush\' | \'ordered\' | \'error\'\n///        | \'atomic\' | \'for simd\' | \'parallel for simd\' | \'target\' | \'target\n///        data\' | \'taskgroup\' | \'teams\' | \'taskloop\' | \'taskloop simd\' |\n///        \'master taskloop\' | \'master taskloop simd\' | \'parallel master\n///        taskloop\' | \'parallel master taskloop simd\' | \'distribute\' | \'target\n///        enter data\' | \'target exit data\' | \'target parallel\' | \'target\n///        parallel for\' | \'target update\' | \'distribute parallel for\' |\n///        \'distribute paralle for simd\' | \'distribute simd\' | \'target parallel\n///        for simd\' | \'target simd\' | \'teams distribute\' | \'teams distribute\n///        simd\' | \'teams distribute parallel for simd\' | \'teams distribute\n///        parallel for\' | \'target teams\' | \'target teams distribute\' | \'target\n///        teams distribute parallel for\' | \'target teams distribute parallel\n///        for simd\' | \'target teams distribute simd\' | \'masked\' |\n///        \'parallel masked\' {clause} annot_pragma_openmp_end\n///\nStmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective(ParsedStmtContext StmtCtx, bool ReadDirectiveWithinMetadirective) {\n // ...\n if (ReadDirectiveWithinMetadirective && DKind == OMPD_unknown) {\n    Diag(Tok, diag::err_omp_unknown_directive);"},{L,2997,"/// Parsing of declarative or executable OpenMP directives.\n///\n///      threadprivate-directive:\n///        annot_pragma_openmp \'threadprivate\' simple-variable-list\n///        annot_pragma_openmp_end\n///\n///      allocate-directive:\n///        annot_pragma_openmp \'allocate\' simple-variable-list\n///        annot_pragma_openmp_end\n///\n///      declare-reduction-directive:\n///        annot_pragma_openmp \'declare\' \'reduction\' \'(\' <reduction_id> \':\'\n///        <type> {\',\' <type>} \':\' <expression> \')\' [\'initializer\' \'(\'\n///        (\'omp_priv\' \'=\' <expression>|<function_call>) \')\']\n///        annot_pragma_openmp_end\n///\n///      declare-mapper-directive:\n///        annot_pragma_openmp \'declare\' \'mapper\' \'(\' [<mapper-identifer> \':\']\n///        <type> <var> \')\' [<clause>[[,] <clause>] ... ]\n///        annot_pragma_openmp_end\n///\n///      executable-directive:\n///        annot_pragma_openmp \'parallel\' | \'simd\' | \'for\' | \'sections\' |\n///        \'section\' | \'single\' | \'master\' | \'critical\' [ \'(\' <name> \')\' ] |\n///        \'parallel for\' | \'parallel sections\' | \'parallel master\' | \'task\' |\n///        \'taskyield\' | \'barrier\' | \'taskwait\' | \'flush\' | \'ordered\' | \'error\'\n///        | \'atomic\' | \'for simd\' | \'parallel for simd\' | \'target\' | \'target\n///        data\' | \'taskgroup\' | \'teams\' | \'taskloop\' | \'taskloop simd\' |\n///        \'master taskloop\' | \'master taskloop simd\' | \'parallel master\n///        taskloop\' | \'parallel master taskloop simd\' | \'distribute\' | \'target\n///        enter data\' | \'target exit data\' | \'target parallel\' | \'target\n///        parallel for\' | \'target update\' | \'distribute parallel for\' |\n///        \'distribute paralle for simd\' | \'distribute simd\' | \'target parallel\n///        for simd\' | \'target simd\' | \'teams distribute\' | \'teams distribute\n///        simd\' | \'teams distribute parallel for simd\' | \'teams distribute\n///        parallel for\' | \'target teams\' | \'target teams distribute\' | \'target\n///        teams distribute parallel for\' | \'target teams distribute parallel\n///        for simd\' | \'target teams distribute simd\' | \'masked\' |\n///        \'parallel masked\' {clause} annot_pragma_openmp_end\n///\nStmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective(ParsedStmtContext StmtCtx, bool ReadDirectiveWithinMetadirective) {\n  // ...\n  case OMPD_unknown:\n  default:\n   Diag(Tok, diag::err_omp_unknown_directive);"}},
[l]={
[l]={
["clang/test/Sema/asm.c"]={"clang/test/Sema/asm.c:362:20: error: impossible constraint in asm: can\'t store value into a register"}
["clang/test/OpenMP/openmp_attribute_parsing.cpp"]={"clang/test/OpenMP/openmp_attribute_parsing.cpp:17:18: error: expected an OpenMP directive","clang/test/OpenMP/openmp_attribute_parsing.cpp:30:27: error: expected an OpenMP directive","clang/test/OpenMP/openmp_attribute_parsing.cpp:31:32: error: expected an OpenMP directive","clang/test/OpenMP/openmp_attribute_parsing.cpp:32:27: error: expected an OpenMP directive","clang/test/OpenMP/openmp_attribute_parsing.cpp:33:32: error: expected an OpenMP directive","clang/test/OpenMP/openmp_attribute_parsing.cpp:39:1: error: expected an OpenMP directive","clang/test/OpenMP/openmp_attribute_parsing.cpp:45:24: error: expected an OpenMP directive","clang/test/OpenMP/openmp_attribute_parsing.cpp:47:38: error: expected an OpenMP directive","clang/test/OpenMP/openmp_attribute_parsing.cpp:48:33: error: expected an OpenMP directive"}
}
}
},
},
["err_string_concat_mixed_suffix"]={
["err_omp_unknown_map_type"]={
[b]="err_string_concat_mixed_suffix",
[d]="err_omp_unknown_map_type",
[c]="differing user-defined suffixes (\'%0\' and \'%1\') in string literal concatenation",
[e]="incorrect map type, expected one of \'to\', \'from\', \'tofrom\', \'alloc\', \'release\', or \'delete\'",
[d]="differing user-defined suffixes (\'A\' and \'B\') in string literal concatenation",
[i]="incorrect map type, expected one of \'to\', \'from\', \'tofrom\', \'alloc\', \'release\', or \'delete\'",
[e]=k,
[j]=k,
[g]="differing user\\-defined suffixes \\(\'(.*?)\' and \'(.*?)\'\\) in string literal concatenation",
[c]="incorrect map type, expected one of \'to\', \'from\', \'tofrom\', \'alloc\', \'release\', or \'delete\'",
[h]=a,
[h]=a,
[i]="Lexical or Preprocessor Issue",
[g]=K,
[f]={"e18f0faff242",1330920135,"Lexing support for user-defined literals. Currently these lex as the same token","Lexing support for user-defined literals. Currently these lex as the same token\nkinds as the underlying string literals, and we silently drop the ud-suffix;\nthose issues will be fixed by subsequent patches.\n\nllvm-svn: 152012"},
[f]={"0bff7afab5bb",1448256723,"[OpenMP] Parsing and sema support for map clause","[OpenMP] Parsing and sema support for map clause\n\nhttp://reviews.llvm.org/D14134 \n\nllvm-svn: 253849"},
[j]={{"clang/lib/Lex/LiteralSupport.cpp",2050,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n  // ...\n for (unsigned i = 0, e = StringToks.size(); i != e; ++i) {\n    // ...\n    // Remove an optional ud-suffix.\n    if (ThisTokEnd[-1] != \'\"\') {\n      // ...\n      if (UDSuffixBuf.empty()) {\n     // ...\n      } else {\n        // ...\n        if (UDSuffixBuf != UDSuffix || UnevaluatedStringHasUDL) {\n          if (Diags) {\n           // ...\n           if (UnevaluatedStringHasUDL) {\n           // ...\n            } else {\n              Diags->Report(TokLoc, diag::err_string_concat_mixed_suffix) << UDSuffixBuf << UDSuffix << SourceRange(UDSuffixTokLoc, UDSuffixTokLoc);"}},
[b]={{L,4185,"/// Parse map-type in map clause.\n/// map([ [map-type-modifier[,] [map-type-modifier[,] ...] map-type : ] list)\n/// where, map-type ::= to | from | tofrom | alloc | release | delete\nstatic void parseMapType(Parser &P, Sema::OpenMPVarListDataTy &Data) {\n // ...\n if (Data.ExtraModifier == OMPC_MAP_unknown)\n   P.Diag(Tok, diag::err_omp_unknown_map_type);"}},
[l]={
[l]={
["clang/test/CXX/lex/lex.literal/lex.ext/p9.cpp"]={"clang/test/CXX/lex/lex.literal/lex.ext/p9.cpp:10:13: error: differing user-defined suffixes (\'_x\' and \'_y\') in string literal concatenation"}
["clang/test/OpenMP/target_parallel_map_messages.cpp"]={"clang/test/OpenMP/target_parallel_map_messages.cpp:94:33: error: incorrect map type, expected one of \'to\', \'from\', \'tofrom\', \'alloc\', \'release\', or \'delete\'","clang/test/OpenMP/target_parallel_map_messages.cpp:106:33: error: incorrect map type, expected one of \'to\', \'from\', \'tofrom\', \'alloc\', \'release\', or \'delete\'","clang/test/OpenMP/target_parallel_map_messages.cpp:223:33: error: incorrect map type, expected one of \'to\', \'from\', \'tofrom\', \'alloc\', \'release\', or \'delete\'"}
}
}
},
},
["err_strong_property"]={
["err_omp_unknown_map_type_modifier"]={
[b]="err_strong_property",
[d]="err_omp_unknown_map_type_modifier",
[c]="existing instance variable %1 for strong property %0 may not be __weak",
[e]={{nil,O,"incorrect map type modifier, expected one of: \'always\', \'close\', \'mapper\'%select{|, \'present\'|, \'present\', \'iterator\'}0%select{|, \'ompx_hold\'}1"},{J,M,"incorrect map type modifier, expected one of: \'always\', \'close\', \'mapper\'%select{|, \'present\'}0%select{|, \'ompx_hold\'}1"},{C,hb,"incorrect map type modifier, expected \'always\', \'close\', %select{or \'mapper\'|\'mapper\', or \'present\'}0"},{"11.1",v,"incorrect map type modifier, expected \'always\', \'close\', or \'mapper\'"},{u,u,"incorrect map type modifier, expected \'always\' or \'close\'"},{Kb,nil,"incorrect map type modifier, expected \'always\'"}},
[d]="existing instance variable B for strong property A may not be __weak",
[i]={{nil,O,{"incorrect map type modifier, expected one of: \'always\', \'close\', \'mapper\'",{a,", \'present\'",", \'present\', \'iterator\'"},{a,", \'ompx_hold\'"}}},{J,M,{"incorrect map type modifier, expected one of: \'always\', \'close\', \'mapper\'",{a,", \'present\'"},{a,", \'ompx_hold\'"}}},{C,hb,{"incorrect map type modifier, expected \'always\', \'close\', ",{"or \'mapper\'","\'mapper\', or \'present\'"}}},{"11.1",v,"incorrect map type modifier, expected \'always\', \'close\', or \'mapper\'"},{u,u,"incorrect map type modifier, expected \'always\' or \'close\'"},{Kb,nil,"incorrect map type modifier, expected \'always\'"}},
[e]=k,
[j]=k,
[g]="existing instance variable (.*?) for strong property (.*?) may not be __weak",
[c]="incorrect map type modifier, expected one of\\: \'always\', \'close\', \'mapper\'(?:|, \'present\'|, \'present\', \'iterator\')(?:|, \'ompx_hold\')",
[h]=a,
[h]=a,
[i]=m,
[g]=K,
[f]={"f881267db9a9",1480718311,"Mass-rename the handful of error_* diagnostics to err_*.","Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545"},
[f]={"0bff7afab5bb",1448256723,"[OpenMP] Parsing and sema support for map clause","[OpenMP] Parsing and sema support for map clause\n\nhttp://reviews.llvm.org/D14134 \n\nllvm-svn: 253849"},
[j]={{Jb,1410,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n   // ...\n   // Check that type of property and its ivar are type compatible.\n   if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n     // ...\n     // Fall thru - see previous comment\n     if ((property->getType()->isObjCObjectPointerType() || PropType.isObjCGCStrong()) && IvarType.isObjCGCWeak() && getLangOpts().getGC() != LangOptions::NonGC) {\n        Diag(PropertyDiagLoc, diag::err_strong_property) << property->getDeclName() << Ivar->getDeclName();"}},
[b]={{L,4148,"/// Parse map-type-modifiers in map clause.\n/// map([ [map-type-modifier[,] [map-type-modifier[,] ...] map-type : ] list)\n/// where, map-type-modifier ::= always | close | mapper(mapper-identifier) |\n/// present\nbool Parser::parseMapTypeModifiers(Sema::OpenMPVarListDataTy &Data) {\n  while (getCurToken().isNot(tok::colon)) {\n    // ...\n    if (TypeModifier == OMPC_MAP_MODIFIER_always || TypeModifier == OMPC_MAP_MODIFIER_close || TypeModifier == OMPC_MAP_MODIFIER_present || TypeModifier == OMPC_MAP_MODIFIER_ompx_hold) {\n    // ...\n    } else if (TypeModifier == OMPC_MAP_MODIFIER_mapper) {\n   // ...\n    } else {\n      // ...\n      Diag(Tok, diag::err_omp_unknown_map_type_modifier) << (getLangOpts().OpenMP >= 51 ? (getLangOpts().OpenMP >= 52 ? 2 : 1) : 0) << getLangOpts().OpenMPExtensions;"},{L,4504,"/// Parses clauses with list.\nbool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, SmallVectorImpl<Expr *> &Vars, Sema::OpenMPVarListDataTy &Data) {\n  // ...\n  // Handle reduction-identifier for reduction clause.\n  if (Kind == OMPC_reduction || Kind == OMPC_task_reduction || Kind == OMPC_in_reduction) {\n // ...\n } else if (Kind == OMPC_depend || Kind == OMPC_doacross) {\n  // ...\n } else if (Kind == OMPC_linear) {\n  // ...\n  } else if (Kind == OMPC_lastprivate) {\n // ...\n } else if (Kind == OMPC_map) {\n    // Handle optional iterator map modifier.\n   if (Tok.is(tok::identifier) && PP.getSpelling(Tok) == \"iterator\") {\n      // ...\n      if (getLangOpts().OpenMP < 52) {\n        Diag(Tok, diag::err_omp_unknown_map_type_modifier) << (getLangOpts().OpenMP >= 51 ? 1 : 0) << getLangOpts().OpenMPExtensions;"}},
[l]={
[l]={
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:27:13: error: existing instance variable \'_sb\' for strong property \'sb\' may not be __weak"}
["clang/test/OpenMP/target_exit_data_map_messages.c"]={"clang/test/OpenMP/target_exit_data_map_messages.c:29:36: error: incorrect map type modifier, expected one of: \'always\', \'close\', \'mapper\', \'present\'","clang/test/OpenMP/target_exit_data_map_messages.c:32:36: error: incorrect map type modifier, expected one of: \'always\', \'close\', \'mapper\', \'present\'","clang/test/OpenMP/target_exit_data_map_messages.c:35:36: error: incorrect map type modifier, expected one of: \'always\', \'close\', \'mapper\', \'present\'"}
}
}
},
},
["err_subscript_function_type"]={
["err_omp_unknown_reduction_identifier_prior_omp_6_0"]={
[b]="err_subscript_function_type",
[d]="err_omp_unknown_reduction_identifier_prior_omp_6_0",
[c]="subscript of pointer to function type %0",
[e]="incorrect reduction identifier, expected one of \'+\', \'-\', \'*\', \'&\', \'|\', \'^\', \'&&\', \'||\', \'min\' or \'max\' or declare reduction for type %0",
[d]="subscript of pointer to function type A",
[i]="incorrect reduction identifier, expected one of \'+\', \'-\', \'*\', \'&\', \'|\', \'^\', \'&&\', \'||\', \'min\' or \'max\' or declare reduction for type A",
[e]=k,
[j]=k,
[g]="subscript of pointer to function type (.*?)",
[c]="incorrect reduction identifier, expected one of \'\\+\', \'\\-\', \'\\*\', \'&\', \'\\|\', \'\\^\', \'&&\', \'\\|\\|\', \'min\' or \'max\' or declare reduction for type (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"ac1fb65d0cb6",1237924374,"Make sure to use RequireCompleteType rather than testing for","Make sure to use RequireCompleteType rather than testing for\nincomplete types. RequireCompleteType is needed when the type may be\ncompleted by instantiating a template.\n\nllvm-svn: 67643"},
[f]={"f9caa12328b2",1688403744,"[Clang] Fix constraint checking of non-generic lambdas.","[Clang] Fix constraint checking of non-generic lambdas.\n\nA lambda call operator can be a templated entity -\nand therefore have constraints while not being a function template\n\n  template<class T> void f() {\n    []() requires false { }();\n   }\n\nIn that case, we would check the constraints of the call operator\nwhich is non-viable. However, we would find a viable candidate:\nthe conversion operator to function pointer, and use it to\nperform a surrogate call.\nThese constraints were not checked because:\n * We never check the constraints of surrogate functions\n * The lambda conversion operator has non constraints.\n\nFrom the wording, it is not clear what the intent is but\nit seems reasonable to expect the constraints of the lambda conversion\noperator to be checked and it is consistent with GCC and MSVC.\n\nThis patch also improve the diagnostics for constraint failure\non surrogate calls.\n\nFixes #63181\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154368"},
[j]={{n,5970,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n // C99 6.5.2.1p1: \"shall have type \"pointer to *object* type\". Similarly,\n  // C++ [expr.sub]p1: The type \"T\" shall be a completely-defined object\n // type. Note that Functions are not objects, and that (in C99 parlance)\n // incomplete types are not object types.\n if (ResultType->isFunctionType()) {\n   Diag(BaseExpr->getBeginLoc(), diag::err_subscript_function_type) << ResultType << BaseExpr->getSourceRange();"}}
[b]={{n,19430,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (BOK == BO_Comma && DeclareReductionRef.isUnset()) {\n      // Not allowed reduction identifier is found.\n     if (S.LangOpts.OpenMP > 52)\n     // ...\n     else\n        S.Diag(ReductionId.getBeginLoc(), diag::err_omp_unknown_reduction_identifier_prior_omp_6_0) << Type << ReductionIdRange;"}},
},
["err_subscript_incomplete_or_sizeless_type"]={
[b]={{nil,s,"err_subscript_incomplete_or_sizeless_type"}},
[c]={{nil,s,"subscript of pointer to %select{incomplete|sizeless}0 type %1"}},
[d]={{nil,s,{"subscript of pointer to ",{"incomplete","sizeless"}," type B"}}},
[e]=k,
[g]="subscript of pointer to (?:incomplete|sizeless) type (.*?)",
[h]=a,
[i]={{nil,s,m}},
[f]={Q,1576908663,O,N},
[j]={{n,6026,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n // ...\n } else if (!ResultType->isDependentType() && !ResultType.isWebAssemblyReferenceType() && RequireCompleteSizedType(LLoc, ResultType, diag::err_subscript_incomplete_or_sizeless_type, BaseExpr))"}},
[l]={
[l]={
["clang/test/Sema/crash-invalid-array.c"]={"clang/test/Sema/crash-invalid-array.c:13:9: error: subscript of pointer to incomplete type \'int[]\'"}
["clang/test/OpenMP/declare_reduction_messages.cpp"]={"clang/test/OpenMP/declare_reduction_messages.cpp:136:50: error: incorrect reduction identifier, expected one of \'+\', \'-\', \'*\', \'&\', \'|\', \'^\', \'&&\', \'||\', \'min\' or \'max\' or declare reduction for type \'int\'","clang/test/OpenMP/declare_reduction_messages.cpp:105:35: error: incorrect reduction identifier, expected one of \'+\', \'-\', \'*\', \'&\', \'|\', \'^\', \'&&\', \'||\', \'min\' or \'max\' or declare reduction for type \'int\'","clang/test/OpenMP/declare_reduction_messages.cpp:119:35: error: incorrect reduction identifier, expected one of \'+\', \'-\', \'*\', \'&\', \'|\', \'^\', \'&&\', \'||\', \'min\' or \'max\' or declare reduction for type \'int\'"}
}
}
},
},
["err_subscript_nonfragile_interface"]={
["err_omp_unknown_reduction_identifier_since_omp_6_0"]={
[b]="err_subscript_nonfragile_interface",
[d]="err_omp_unknown_reduction_identifier_since_omp_6_0",
[c]="subscript requires size of interface %0, which is not constant for this architecture and platform",
[e]="incorrect reduction identifier, expected one of \'+\', \'*\', \'&\', \'|\', \'^\', \'&&\', \'||\', \'min\' or \'max\' or declare reduction for type %0",
[d]="subscript requires size of interface A, which is not constant for this architecture and platform",
[i]="incorrect reduction identifier, expected one of \'+\', \'*\', \'&\', \'|\', \'^\', \'&&\', \'||\', \'min\' or \'max\' or declare reduction for type A",
[e]=k,
[j]=k,
[g]="subscript requires size of interface (.*?), which is not constant for this architecture and platform",
[c]="incorrect reduction identifier, expected one of \'\\+\', \'\\*\', \'&\', \'\\|\', \'\\^\', \'&&\', \'\\|\\|\', \'min\' or \'max\' or declare reduction for type (.*?)",
[h]=a,
[i]=m,
[f]={"62975a788e75",1240533045,"Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode","Fix rdar://6821047 - clang crashes on subscript of interface in 64-bit mode\n\nSeveral changes here:\n1. We change Type::isIncompleteType to realize that forward declared \n  interfaces are incomplete.  This eliminate special case code for this\n  from the sizeof path, and starts us rejecting P[4] when P is a pointer\n  to an incomplete interface.\n2. Explicitly reject P[4] when P points to an interface in non-fragile ABI\n  mode.\n3. Switch the sizeof(interface) diagnostic back to an error instead of a \n  warning in non-fragile abi mode.\n\nllvm-svn: 69943"},
[j]={{n,5895,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // ...\n  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n  // ...\n  } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n  // ...\n  } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n  // ...\n  } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n  // ...\n  } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n    // ...\n    if (!LangOpts.isSubscriptPointerArithmetic()) {\n      Diag(LLoc, diag::err_subscript_nonfragile_interface) << ResultType << BaseExpr->getSourceRange();"}}
},
["err_subscript_svbool_t"]={
[b]={{nil,x,"err_subscript_svbool_t"}},
[c]={{nil,x,"subscript of svbool_t is not allowed"}},
[d]={{nil,x,"subscript of svbool_t is not allowed"}},
[e]=k,
[g]="subscript of svbool_t is not allowed",
[h]=a,
[h]=a,
[i]={{nil,x,m}},
[g]=o,
[f]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs\n\nWhile it\'s not as robust as using the attribute on enums/classes (the\ntype information may be lost through a function pointer, a declaration\nor use of the underlying type without using the typedef, etc) but I\nthink there\'s still value in being able to attribute a typedef and have\nall return types written with that typedef pick up the\nwarn_unused_result behavior.\n\nSpecifically I\'d like to be able to annotate LLVMErrorRef (a wrapper for\nllvm::Error used in the C API - the underlying type is a raw pointer, so\nit can\'t be attributed itself) to reduce the chance of unhandled errors.\n\nDifferential Revision: https://reviews.llvm.org/D102122"},
[f]={"f9caa12328b2",1688403744,"[Clang] Fix constraint checking of non-generic lambdas.","[Clang] Fix constraint checking of non-generic lambdas.\n\nA lambda call operator can be a templated entity -\nand therefore have constraints while not being a function template\n\n  template<class T> void f() {\n    []() requires false { }();\n  }\n\nIn that case, we would check the constraints of the call operator\nwhich is non-viable. However, we would find a viable candidate:\nthe conversion operator to function pointer, and use it to\nperform a surrogate call.\nThese constraints were not checked because:\n * We never check the constraints of surrogate functions\n * The lambda conversion operator has non constraints.\n\nFrom the wording, it is not clear what the intent is but\nit seems reasonable to expect the constraints of the lambda conversion\noperator to be checked and it is consistent with GCC and MSVC.\n\nThis patch also improve the diagnostics for constraint failure\non surrogate calls.\n\nFixes #63181\n\nReviewed By: #clang-language-wg, aaron.ballman\n\nDifferential Revision: https://reviews.llvm.org/D154368"},
[j]={{n,5924,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // ...\n  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n  // ...\n  } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n  // ...\n  } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n // ...\n } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n // ...\n } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n  // ...\n  } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n // ...\n  } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n    // ...\n    if (BTy->isSVEBool())\n      return ExprError(Diag(LLoc, diag::err_subscript_svbool_t) << LHSExp->getSourceRange() << RHSExp->getSourceRange());"}},
[b]={{n,19426,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n   // ...\n   if (BOK == BO_Comma && DeclareReductionRef.isUnset()) {\n     // Not allowed reduction identifier is found.\n     if (S.LangOpts.OpenMP > 52)\n       S.Diag(ReductionId.getBeginLoc(), diag::err_omp_unknown_reduction_identifier_since_omp_6_0) << Type << ReductionIdRange;"}},
[l]={
[l]={
["clang/test/Sema/aarch64-sve-vector-subscript-ops.c"]={"clang/test/Sema/aarch64-sve-vector-subscript-ops.c:11:10: error: subscript of svbool_t is not allowed","clang/test/Sema/aarch64-sve-vector-subscript-ops.c:12:10: error: subscript of svbool_t is not allowed","clang/test/Sema/aarch64-sve-vector-subscript-ops.c:13:10: error: subscript of svbool_t is not allowed"}
["clang/test/OpenMP/taskgroup_task_reduction_messages.cpp"]={"clang/test/OpenMP/taskgroup_task_reduction_messages.cpp:213:38: error: incorrect reduction identifier, expected one of \'+\', \'*\', \'&\', \'|\', \'^\', \'&&\', \'||\', \'min\' or \'max\' or declare reduction for type \'int\'","clang/test/OpenMP/taskgroup_task_reduction_messages.cpp:266:27: error: incorrect reduction identifier, expected one of \'+\', \'*\', \'&\', \'|\', \'^\', \'&&\', \'||\', \'min\' or \'max\' or declare reduction for type \'float\'","clang/test/OpenMP/taskgroup_task_reduction_messages.cpp:126:38: error: incorrect reduction identifier, expected one of \'+\', \'*\', \'&\', \'|\', \'^\', \'&&\', \'||\', \'min\' or \'max\' or declare reduction for type \'int\'","clang/test/OpenMP/taskgroup_task_reduction_messages.cpp:171:27: error: incorrect reduction identifier, expected one of \'+\', \'*\', \'&\', \'|\', \'^\', \'&&\', \'||\', \'min\' or \'max\' or declare reduction for type \'int\'","clang/test/OpenMP/taskgroup_task_reduction_messages.cpp:126:38: error: incorrect reduction identifier, expected one of \'+\', \'*\', \'&\', \'|\', \'^\', \'&&\', \'||\', \'min\' or \'max\' or declare reduction for type \'float\'","clang/test/OpenMP/taskgroup_task_reduction_messages.cpp:171:27: error: incorrect reduction identifier, expected one of \'+\', \'*\', \'&\', \'|\', \'^\', \'&&\', \'||\', \'min\' or \'max\' or declare reduction for type \'float\'"}
}
}
},
},
["err_super_in_lambda_unsupported"]={
["err_omp_unnamed_if_clause"]={
[b]="err_super_in_lambda_unsupported",
[d]="err_omp_unnamed_if_clause",
[c]="use of \'__super\' inside a lambda is unsupported",
[e]={{nil,w,"expected%select{| one of}0 %1 directive name modifier%select{|s}0"},{v,nil,"expected %select{|one of}0 %1 directive name modifier%select{|s}0"}},
[d]="use of \'__super\' inside a lambda is unsupported",
[i]={{nil,w,{"expected",{a," one of"}," B directive name modifier",{a,"s"}}},{v,nil,{"expected ",{a,"one of"}," B directive name modifier",{a,"s"}}}},
[e]=k,
[j]=k,
[g]="use of \'__super\' inside a lambda is unsupported",
[c]="expected(?:| one of) (.*?) directive name modifier(?:|s)",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"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"},
[f]={"6b8046addfce",1441265028,"[OPENMP 4.1] Parsing/sema analysis for extended format of \'if\' clause.","[OPENMP 4.1] Parsing/sema analysis for extended format of \'if\' clause.\nOpenMP 4.1 added special \'directive-name-modifier\' to the \'if\' clause.\nFormat of \'if\' clause is as follows:\n```\nif([ directive-name-modifier :] scalar-logical-expression)\n```\n\nThe restriction rules are also changed.\n1. If any \'if\' clause on the directive includes a \'directive-name-modifier\' then all \'if\' clauses on the directive must include a \'directive-name-modifier\'.\n2. At most one \'if\' clause without a \'directive-name-modifier\' can appear on the directive.\n3. At most one \'if\' clause with some particular \'directive-name-modifier\' can appear on the directive.\n\n\'directive-name-modifier\' is important for combined directives and allows to separate conditions in \'if\' clause for simple sub-directives in combined directive. This \'directive-name-modifier\' identifies the sub-directive to which this \'if\' clause must be applied.\n\nllvm-svn: 246747"},
[j]={{"clang/lib/Sema/SemaCXXScopeSpec.cpp",316,"bool Sema::ActOnSuperScopeSpecifier(SourceLocation SuperLoc, SourceLocation ColonColonLoc, CXXScopeSpec &SS) {\n if (getCurLambda()) {\n    Diag(SuperLoc, diag::err_super_in_lambda_unsupported);"}},
[b]={{n,5316,"static bool checkIfClauses(Sema &S, OpenMPDirectiveKind Kind, ArrayRef<OMPClause *> Clauses, ArrayRef<OpenMPDirectiveKind> AllowedNameModifiers) {\n  // ...\n  // If any if clause on the directive includes a directive-name-modifier then\n  // all if clauses on the directive must include a directive-name-modifier.\n  if (FoundNameModifiers[OMPD_unknown] && NamedModifiersNumber > 0) {\n   if (NamedModifiersNumber == AllowedNameModifiers.size()) {\n    // ...\n    } else {\n      // ...\n      S.Diag(FoundNameModifiers[OMPD_unknown]->getCondition()->getBeginLoc(), diag::err_omp_unnamed_if_clause) << (TotalAllowedNum > 1) << Values;"}},
[l]={
[l]={
["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:12:23: error: use of \'__super\' inside a lambda is unsupported"}
["clang/test/OpenMP/target_parallel_if_messages.cpp"]={"clang/test/OpenMP/target_parallel_if_messages.cpp:65:53: error: expected \'parallel\' directive name modifier","clang/test/OpenMP/target_parallel_if_messages.cpp:111:53: error: expected \'parallel\' directive name modifier"}
}
}
},
},
["err_super_in_using_declaration"]={
["err_omp_unroll_full_variable_trip_count"]={
[b]="err_super_in_using_declaration",
[d]={{nil,C,"err_omp_unroll_full_variable_trip_count"}},
[c]="\'__super\' cannot be used with a using declaration",
[e]={{nil,C,"loop to be fully unrolled must have a constant trip count"}},
[d]="\'__super\' cannot be used with a using declaration",
[i]={{nil,C,"loop to be fully unrolled must have a constant trip count"}},
[e]=k,
[j]=k,
[g]="\'__super\' cannot be used with a using declaration",
[c]="loop to be fully unrolled must have a constant trip count",
[h]=a,
[h]=a,
[i]=G,
[g]={{nil,C,o}},
[f]={"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"},
[f]={"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]={{Sb,606,"/// Parse a using-declarator (or the identifier in a C++11 alias-declaration).\n///\n///    using-declarator:\n///      \'typename\'[opt] nested-name-specifier unqualified-id\n///\nbool Parser::ParseUsingDeclarator(DeclaratorContext Context, UsingDeclarator &D) {\n  // ...\n  if (Tok.is(tok::kw___super)) {\n    Diag(Tok.getLocation(), diag::err_super_in_using_declaration);"}},
[b]={{n,14993,"StmtResult Sema::ActOnOpenMPUnrollDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  if (FullClause) {\n    if (!VerifyPositiveIntegerConstantInClause(LoopHelper.NumIterations, OMPC_full, /*StrictlyPositive=*/false,\n      // ...\n      Diag(AStmt->getBeginLoc(), diag::err_omp_unroll_full_variable_trip_count);"}},
[l]={
[l]={
["clang/test/SemaCXX/MicrosoftSuper.cpp"]={"clang/test/SemaCXX/MicrosoftSuper.cpp:4:9: error: \'__super\' cannot be used with a using declaration"}
["clang/test/OpenMP/unroll_messages.cpp"]={"clang/test/OpenMP/unroll_messages.cpp:84:3: error: loop to be fully unrolled must have a constant trip count","clang/test/OpenMP/unroll_messages.cpp:124:3: error: loop to be fully unrolled must have a constant trip count"}
}
}
},
},
["err_sve_vector_in_non_sve_target"]={
["err_omp_used_in_clause_twice"]={
[b]={{nil,D,"err_sve_vector_in_non_sve_target"}},
[d]={{nil,w,"err_omp_used_in_clause_twice"}},
[c]={{nil,D,"SVE vector type %0 cannot be used in a target without sve"}},
[e]={{nil,w,"%select{a variable|a parameter|\'this\'}0 cannot appear in more than one %1 clause"}},
[d]={{nil,D,"SVE vector type A cannot be used in a target without sve"}},
[i]={{nil,w,{{"a variable","a parameter","\'this\'"}," cannot appear in more than one B clause"}}},
[e]=k,
[j]=k,
[g]="SVE vector type (.*?) cannot be used in a target without sve",
[c]="(?:a variable|a parameter|\'this\') cannot appear in more than one (.*?) clause",
[h]=a,
[h]=a,
[i]={{nil,D,m}},
[g]={{nil,w,o}},
[f]={sb,1625925174,qb,rb},
[f]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[j]={{Tb,2063,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    // ...\n    // Don\'t allow SVE types in functions without a SVE target.\n   if (Ty->isSVESizelessBuiltinType() && FD && FD->hasBody()) {\n     // ...\n     if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap))\n        Diag(D->getLocation(), diag::err_sve_vector_in_non_sve_target) << Ty;"},{t,8782,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  // Check that SVE types are only used in functions with SVE available.\n if (T->isSVESizelessBuiltinType() && isa<FunctionDecl>(CurContext)) {\n    // ...\n    if (!Builtin::evaluateRequiredTargetFeatures(\"sve\", CallerFeatureMap)) {\n      Diag(NewVD->getLocation(), diag::err_sve_vector_in_non_sve_target) << T;"}},
[b]={{n,6905,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  // ...\n  for (const Expr *E : Aligneds) {\n    // ...\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        // ...\n       if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n         // OpenMP  [2.8.1, simd construct, Restrictions]\n          // A list-item cannot appear in more than one aligned clause.\n         if (AlignedArgs.count(CanonPVD) > 0) {\n            Diag(E->getExprLoc(), diag::err_omp_used_in_clause_twice) << 1 << getOpenMPClauseName(OMPC_aligned) << E->getSourceRange();"},{n,6929,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  // ...\n  for (const Expr *E : Aligneds) {\n    // ...\n    if (isa<CXXThisExpr>(E)) {\n      if (AlignedThis) {\n        Diag(E->getExprLoc(), diag::err_omp_used_in_clause_twice) << 2 << getOpenMPClauseName(OMPC_aligned) << E->getSourceRange();"},{n,20297,"OMPClause *Sema::ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList, Expr *Alignment, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    // OpenMP  [2.8.1, simd construct, Restrictions]\n    // A list-item cannot appear in more than one aligned clause.\n   if (const Expr *PrevRef = DSAStack->addUniqueAligned(D, SimpleRefExpr)) {\n      Diag(ELoc, diag::err_omp_used_in_clause_twice) << 0 << getOpenMPClauseName(OMPC_aligned) << ERange;"},{n,23730,"OMPClause *Sema::ActOnOpenMPNontemporalClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    // OpenMP 5.0, 2.9.3.1 simd Construct, Restrictions.\n    // A list-item cannot appear in more than one nontemporal clause.\n    if (const Expr *PrevRef = DSAStack->addUniqueNontemporal(D, SimpleRefExpr)) {\n      Diag(ELoc, diag::err_omp_used_in_clause_twice) << 0 << getOpenMPClauseName(OMPC_nontemporal) << ERange;"}},
[l]={
[l]={
["clang/test/Sema/arm-sve-target.cpp"]={"clang/test/Sema/arm-sve-target.cpp:6:17: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:25:15: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:34:6: error: SVE vector type \'__SVFloat32_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:42:23: error: SVE vector type \'__clang_svint32x4_t\' cannot be used in a target without sve","clang/test/Sema/arm-sve-target.cpp:41:21: error: SVE vector type \'__clang_svint32x4_t\' cannot be used in a target without sve"}
[Ab]={"clang/test/OpenMP/declare_simd_messages.cpp:151:45: error: a parameter cannot appear in more than one aligned clause","clang/test/OpenMP/declare_simd_messages.cpp:148:45: error: a parameter cannot appear in more than one aligned clause","clang/test/OpenMP/declare_simd_messages.cpp:223:68: error: \'this\' cannot appear in more than one aligned clause"}
}
}
},
},
["err_swift_abi_parameter_wrong_type"]={
["err_omp_usedeviceptr_not_a_pointer"]={
[b]="err_swift_abi_parameter_wrong_type",
[d]="err_omp_usedeviceptr_not_a_pointer",
[c]="\'%0\' parameter must have pointer%select{| to unqualified pointer}1 type; type here is %2",
[e]="expected pointer or reference to pointer in \'use_device_ptr\' clause",
[d]={{nil,nil,{"\'A\' parameter must have pointer",{a," to unqualified pointer"}," type; type here is C"}}},
[i]="expected pointer or reference to pointer in \'use_device_ptr\' clause",
[e]=k,
[j]=k,
[g]="\'(.*?)\' parameter must have pointer(?:| to unqualified pointer) type; type here is (.*?)",
[c]="expected pointer or reference to pointer in \'use_device_ptr\' clause",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention.","Semantic analysis for the swiftcall calling convention.\n\nI\'ve tried to keep the infrastructure behind parameter ABI\ntreatments fairly general.\n\nllvm-svn: 262587"},
[f]={"2404b1719241",1468424236,"[OpenMP] Initial implementation of parse+sema for clause use_device_ptr of \'target data\'","[OpenMP] Initial implementation of parse+sema for clause use_device_ptr of \'target data\'\n\nhttp://reviews.llvm.org/D21904\n\nThis patch is similar to the implementation of \'private\' clause: it adds a list of private pointers to be used within the target data region to store the device pointers returned by the runtime.\nPlease refer to the following document for a full description of what the runtime witll return in this case (page 10 and 11):\nhttps://github.com/clang-omp/OffloadingDesign\n\nI am happy to answer any question related to the runtime interface to help reviewing this patch.\n\nllvm-svn: 275271"},
[j]={{M,5527,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  // ...\n  case ParameterABI::SwiftContext:\n    if (!isValidSwiftContextType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{M,5535,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n // ...\n  case ParameterABI::SwiftAsyncContext:\n    if (!isValidSwiftContextType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 0 << type;"},{M,5543,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  // ...\n  case ParameterABI::SwiftErrorResult:\n    if (!isValidSwiftErrorResultType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer to pointer */ 1 << type;"},{M,5551,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  // ...\n  case ParameterABI::SwiftIndirectResult:\n    if (!isValidSwiftIndirectResultType(type)) {\n      Diag(CI.getLoc(), diag::err_swift_abi_parameter_wrong_type) << getParameterABISpelling(abi) << /*pointer*/ 0 << type;"}},
[b]={{n,23368,"OMPClause *Sema::ActOnOpenMPUseDevicePtrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n   // ...\n    // Item should be a pointer or reference to pointer.\n    if (!Type->isPointerType()) {\n      Diag(ELoc, diag::err_omp_usedeviceptr_not_a_pointer) << 0 << RefExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:21:31: error: \'swift_indirect_result\' parameter must have pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:29:51: error: \'swift_error_result\' parameter must have pointer to unqualified pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:30:52: error: \'swift_error_result\' parameter must have pointer to unqualified pointer type; type here is \'int *\'","clang/test/SemaCXX/attr-swiftcall.cpp:35:23: error: \'swift_context\' parameter must have pointer type; type here is \'int\'","clang/test/SemaCXX/attr-swiftcall.cpp:42:29: error: \'swift_async_context\' parameter must have pointer type; type here is \'int\'"}
["clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp"]={"clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:28:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:30:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:32:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:38:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:40:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:42:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:44:49: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:44:51: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:46:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:48:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:186:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:188:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:247:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:249:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:251:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:257:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:259:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:261:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:263:49: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:263:51: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:265:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:267:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:174:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:176:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:178:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:184:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:190:49: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:190:51: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:192:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause","clang/test/OpenMP/target_data_use_device_ptr_addr_messages.cpp:194:47: error: expected pointer or reference to pointer in \'use_device_ptr\' clause"}
}
}
},
},
["err_swift_async_bad_block_type"]={
["err_omp_var_expected"]={
[b]={{nil,v,"err_swift_async_bad_block_type"}},
[d]={{nil,p,"err_omp_var_expected"}},
[c]={{nil,v,"\'swift_async\' completion handler parameter must have block type returning \'void\', type here is %0"}},
[e]={{nil,p,"expected variable of the \'%0\' type%select{|, not %2}1"}},
[d]={{nil,v,"\'swift_async\' completion handler parameter must have block type returning \'void\', type here is A"}},
[i]={{nil,p,{"expected variable of the \'A\' type",{a,", not C"}}}},
[e]=k,
[j]=k,
[g]="\'swift_async\' completion handler parameter must have block type returning \'void\', type here is (.*?)",
[c]="expected variable of the \'(.*?)\' type(?:|, not (.*?))",
[h]=a,
[h]=a,
[i]={{nil,v,m}},
[g]={{nil,p,o}},
[f]={ac,1590001902,fc,gc},
[f]={W,1576908663,X,Y},
[j]={{M,6946,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (Kind == SwiftAsyncAttr::None) {\n  // ...\n  } else {\n    // ...\n    if (!CompletionBlockType->isBlockPointerType()) {\n      S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"},{M,6954,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n if (Kind == SwiftAsyncAttr::None) {\n // ...\n } else {\n   // ...\n   if (!BlockTy->castAs<FunctionType>()->getReturnType()->isVoidType()) {\n     S.Diag(CompletionBlock->getLocation(), diag::err_swift_async_bad_block_type) << CompletionBlock->getType();"}},
[b]={{n,22798,"OMPClause *Sema::ActOnOpenMPDetachClause(Expr *Evt, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  if (!Evt->isValueDependent() && !Evt->isTypeDependent() && !Evt->isInstantiationDependent() && !Evt->containsUnexpandedParameterPack()) {\n   // ...\n   if (!Ref) {\n      Diag(Evt->getExprLoc(), diag::err_omp_var_expected) << \"omp_event_handle_t\" << 0 << Evt->getSourceRange();"},{n,22804,"OMPClause *Sema::ActOnOpenMPDetachClause(Expr *Evt, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  if (!Evt->isValueDependent() && !Evt->isTypeDependent() && !Evt->isInstantiationDependent() && !Evt->containsUnexpandedParameterPack()) {\n    // ...\n    if (!VD) {\n      Diag(Evt->getExprLoc(), diag::err_omp_var_expected) << \"omp_event_handle_t\" << 0 << Evt->getSourceRange();"},{n,22811,"OMPClause *Sema::ActOnOpenMPDetachClause(Expr *Evt, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  if (!Evt->isValueDependent() && !Evt->isTypeDependent() && !Evt->isInstantiationDependent() && !Evt->containsUnexpandedParameterPack()) {\n    // ...\n    if (!Context.hasSameUnqualifiedType(DSAStack->getOMPEventHandleT(), VD->getType()) || VD->getType().isConstant(Context)) {\n      Diag(Evt->getExprLoc(), diag::err_omp_var_expected) << \"omp_event_handle_t\" << 1 << VD->getType() << Evt->getSourceRange();"},{n,23901,"OMPClause *Sema::ActOnOpenMPUsesAllocatorClause(SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc, ArrayRef<UsesAllocatorsData> Data) {\n  // ...\n  for (const UsesAllocatorsData &D : Data) {\n   // ...\n   // Check allocator expression.\n    if (D.Allocator->isTypeDependent()) {\n   // ...\n   } else {\n     // ...\n     if (!DRE || !IsTypeCompatible || (!IsPredefinedAllocator && !IsNonConstantLValue)) {\n       Diag(D.Allocator->getExprLoc(), diag::err_omp_var_expected) << \"omp_allocator_handle_t\" << (DRE ? 1 : 0) << AllocatorExpr->getType() << D.Allocator->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/attr-swift-async.m"]={"clang/test/SemaObjC/attr-swift-async.m:12:32: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int\'","clang/test/SemaObjC/attr-swift-async.m:13:39: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'","clang/test/SemaObjC/attr-swift-async.m:23:26: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'","clang/test/SemaObjC/attr-swift-async.m:36:43: error: \'swift_async\' completion handler parameter must have block type returning \'void\', type here is \'int (^)()\'"}
["clang/test/OpenMP/target_uses_allocators_messages.cpp"]={"clang/test/OpenMP/target_uses_allocators_messages.cpp:31:36: error: expected variable of the \'omp_allocator_handle_t\' type, not \'int\'","clang/test/OpenMP/target_uses_allocators_messages.cpp:33:36: error: expected variable of the \'omp_allocator_handle_t\' type, not \'int\'","clang/test/OpenMP/target_uses_allocators_messages.cpp:39:46: error: expected variable of the \'omp_allocator_handle_t\' type, not \'const omp_allocator_handle_t\' (aka \'void **const\')"}
}
}
},
},
["err_swift_async_error_no_error_parameter"]={
["err_omp_var_scope"]={
[b]={{nil,B,"err_swift_async_error_no_error_parameter"}},
[d]="err_omp_var_scope",
[c]={{nil,B,"%0 attribute with \'nonnull_error\' convention can only be applied to a %select{function|method}1 with a completion handler with an error parameter"}},
[e]="\'#pragma omp %0\' must appear in the scope of the %q1 variable declaration",
[d]={{nil,B,{"A attribute with \'nonnull_error\' convention can only be applied to a ",{L,P}," with a completion handler with an error parameter"}}},
[i]="\'#pragma omp A\' must appear in the scope of the B variable declaration",
[e]=k,
[j]=k,
[g]="(.*?) attribute with \'nonnull_error\' convention can only be applied to a (?:function|method) with a completion handler with an error parameter",
[c]="\'\\#pragma omp (.*?)\' must appear in the scope of the (.*?) variable declaration",
[h]=a,
[h]=a,
[i]={{nil,B,m}},
[g]=o,
[f]={ac,1590001902,fc,gc},
[f]={nb,1363934075,ob,pb},
[j]={{M,6527,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  // ...\n  case SwiftAsyncErrorAttr::NonNullError: {\n   // ...\n   if (!AnyErrorParams) {\n     S.Diag(ErrorAttr->getLocation(), diag::err_swift_async_error_no_error_parameter) << ErrorAttr << isa<ObjCMethodDecl>(D);"}},
[b]={{n,3085,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // ...\n  // OpenMP [2.9.2, Restrictions, C/C++, p.2]\n  //  A threadprivate directive for file-scope variables must appear outside\n  //  any definition or declaration.\n  if (CanonicalVD->getDeclContext()->isTranslationUnit() && !getCurLexicalContext()->isTranslationUnit()) {\n    Diag(Id.getLoc(), diag::err_omp_var_scope) << getOpenMPDirectiveName(Kind) << VD;"},{n,3100,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // ...\n  // OpenMP [2.9.2, Restrictions, C/C++, p.3]\n  //  A threadprivate directive for static class member variables must appear\n  //  in the class definition, in the same scope in which the member\n  //  variables are declared.\n  if (CanonicalVD->isStaticDataMember() && !CanonicalVD->getDeclContext()->Equals(getCurLexicalContext())) {\n    Diag(Id.getLoc(), diag::err_omp_var_scope) << getOpenMPDirectiveName(Kind) << VD;"},{n,3116,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n // ...\n  // OpenMP [2.9.2, Restrictions, C/C++, p.4]\n  //  A threadprivate directive for namespace-scope variables must appear\n  //  outside any definition or declaration other than the namespace\n  //  definition itself.\n if (CanonicalVD->getDeclContext()->isNamespace() && (!getCurLexicalContext()->isFileContext() || !getCurLexicalContext()->Encloses(CanonicalVD->getDeclContext()))) {\n   Diag(Id.getLoc(), diag::err_omp_var_scope) << getOpenMPDirectiveName(Kind) << VD;"},{n,3130,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // ...\n  // OpenMP [2.9.2, Restrictions, C/C++, p.6]\n  //  A threadprivate directive for static block-scope variables must appear\n  //  in the scope of the variable and not in a nested scope.\n  if (CanonicalVD->isLocalVarDecl() && CurScope && !isDeclInScope(ND, getCurLexicalContext(), CurScope)) {\n    Diag(Id.getLoc(), diag::err_omp_var_scope) << getOpenMPDirectiveName(Kind) << VD;"}},
[l]={
[l]={
["clang/test/SemaObjC/attr-swift-async-error.m"]={"clang/test/SemaObjC/attr-swift-async-error.m:37:1: error: \'swift_async_error\' attribute with \'nonnull_error\' convention can only be applied to a function with a completion handler with an error parameter","clang/test/SemaObjC/attr-swift-async-error.m:89:3: error: \'swift_async_error\' attribute with \'nonnull_error\' convention can only be applied to a method with a completion handler with an error parameter"}
[Cb]={"clang/test/OpenMP/threadprivate_messages.cpp:71:39: error: \'#pragma omp threadprivate\' must appear in the scope of the \'TestClass::b\' variable declaration","clang/test/OpenMP/threadprivate_messages.cpp:137:27: error: \'#pragma omp threadprivate\' must appear in the scope of the \'d3\' variable declaration","clang/test/OpenMP/threadprivate_messages.cpp:143:27: error: \'#pragma omp threadprivate\' must appear in the scope of the \'a\' variable declaration","clang/test/OpenMP/threadprivate_messages.cpp:145:27: error: \'#pragma omp threadprivate\' must appear in the scope of the \'d\' variable declaration"}
}
}
},
},
["err_swift_async_error_non_integral"]={
["err_omp_var_thread_local"]={
[b]={{nil,B,"err_swift_async_error_non_integral"}},
[d]="err_omp_var_thread_local",
[c]={{nil,B,"%0 attribute with \'%1\' convention must have an integral-typed parameter in completion handler at index %2, type here is %3"}},
[e]="variable %0 cannot be threadprivate because it is %select{thread-local|a global named register variable}1",
[d]={{nil,B,"A attribute with \'B\' convention must have an integral-typed parameter in completion handler at index C, type here is D"}},
[i]={{nil,nil,{"variable A cannot be threadprivate because it is ",{"thread-local","a global named register variable"}}}},
[e]=k,
[j]=k,
[g]="(.*?) attribute with \'(.*?)\' convention must have an integral\\-typed parameter in completion handler at index (.*?), type here is (.*?)",
[c]="variable (.*?) cannot be threadprivate because it is (?:thread\\-local|a global named register variable)",
[h]=a,
[h]=a,
[i]={{nil,B,m}},
[g]=o,
[f]={ac,1590001902,fc,gc},
[f]={nb,1363934075,ob,pb},
[j]={{M,6496,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  // ...\n  case SwiftAsyncErrorAttr::ZeroArgument:\n case SwiftAsyncErrorAttr::NonZeroArgument: {\n    // ...\n    if (!ErrorParam->isIntegralType(S.Context)) {\n      // ...\n      S.Diag(ErrorAttr->getLocation(), diag::err_swift_async_error_non_integral) << ErrorAttr << ConvStr << ParamIdx << ErrorParam;"}},
[b]={{n,3244,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n   // ...\n    // Check if this is a TLS variable. If TLS is not being supported, produce\n    // the corresponding diagnostic.\n    if ((VD->getTLSKind() != VarDecl::TLS_None && !(VD->hasAttr<OMPThreadPrivateDeclAttr>() && getLangOpts().OpenMPUseTLS && getASTContext().getTargetInfo().isTLSSupported())) || (VD->getStorageClass() == SC_Register && VD->hasAttr<AsmLabelAttr>() && !VD->isLocalVarDecl())) {\n      Diag(ILoc, diag::err_omp_var_thread_local) << VD << ((VD->getTLSKind() != VarDecl::TLS_None) ? 0 : 1);"}},
[l]={
[l]={
["clang/test/SemaObjC/attr-swift-async-error.m"]={"clang/test/SemaObjC/attr-swift-async-error.m:41:1: error: \'swift_async_error\' attribute with \'zero_argument\' convention must have an integral-typed parameter in completion handler at index 1, type here is \'double\'","clang/test/SemaObjC/attr-swift-async-error.m:81:3: error: \'swift_async_error\' attribute with \'nonzero_argument\' convention must have an integral-typed parameter in completion handler at index 1, type here is \'double\'"}
[Cb]={"clang/test/OpenMP/threadprivate_messages.cpp:100:28: error: variable \'t\' cannot be threadprivate because it is thread-local","clang/test/OpenMP/threadprivate_messages.cpp:106:28: error: variable \'reg0\' cannot be threadprivate because it is a global named register variable"}
}
}
},
},
["err_swift_async_error_without_swift_async"]={
["err_omp_var_used"]={
[b]={{nil,B,"err_swift_async_error_without_swift_async"}},
[d]="err_omp_var_used",
[c]={{nil,B,"%0 attribute must be applied to a %select{function|method}1 annotated with non-\'none\' attribute \'swift_async\'"}},
[e]="\'#pragma omp %0\' must precede all references to variable %q1",
[d]={{nil,B,{"A attribute must be applied to a ",{L,P}," annotated with non-\'none\' attribute \'swift_async\'"}}},
[i]="\'#pragma omp A\' must precede all references to variable B",
[e]=k,
[j]=k,
[g]="(.*?) attribute must be applied to a (?:function|method) annotated with non\\-\'none\' attribute \'swift_async\'",
[c]="\'\\#pragma omp (.*?)\' must precede all references to variable (.*?)",
[h]=a,
[h]=a,
[i]={{nil,B,m}},
[g]=o,
[f]={ac,1590001902,fc,gc},
[f]={nb,1363934075,ob,pb},
[j]={{M,6463,"static void checkSwiftAsyncErrorBlock(Sema &S, Decl *D, const SwiftAsyncErrorAttr *ErrorAttr, const SwiftAsyncAttr *AsyncAttr) {\n  if (AsyncAttr->getKind() == SwiftAsyncAttr::None) {\n   if (ErrorAttr->getConvention() != SwiftAsyncErrorAttr::None) {\n      S.Diag(AsyncAttr->getLocation(), diag::err_swift_async_error_without_swift_async) << AsyncAttr << isa<ObjCMethodDecl>(D);"}}
[b]={{n,3145,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // ...\n // OpenMP [2.9.2, Restrictions, C/C++, p.2-6]\n  //  A threadprivate directive must lexically precede all references to any\n  //   of the variables in its list.\n  if (Kind == OMPD_threadprivate && VD->isUsed() && !DSAStack->isThreadPrivate(VD)) {\n    Diag(Id.getLoc(), diag::err_omp_var_used) << getOpenMPDirectiveName(Kind) << VD;"}},
},
["err_swift_async_no_access"]={
[b]={{nil,v,"err_swift_async_no_access"}},
[c]={{nil,v,"first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'"}},
[d]={{nil,v,"first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'"}},
[e]=k,
[g]="first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'",
[h]=a,
[i]={{nil,v,m}},
[f]={ac,1590001902,fc,gc},
[j]={{M,6923,"static void handleSwiftAsyncAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!SwiftAsyncAttr::ConvertStrToKind(II->getName(), Kind)) {\n    S.Diag(AL.getLoc(), diag::err_swift_async_no_access) << AL << II;"}},
[l]={
[l]={
["clang/test/SemaObjC/attr-swift-async.m"]={"clang/test/SemaObjC/attr-swift-async.m:20:1: error: first argument to \'swift_async\' must be either \'none\', \'swift_private\', or \'not_swift_private\'"}
[Cb]={"clang/test/OpenMP/threadprivate_messages.cpp:133:27: error: \'#pragma omp threadprivate\' must precede all references to variable \'d2\'"}
}
}
},
},
["err_swift_error_result_not_after_swift_context"]={
["err_omp_variable_in_given_clause_and_dsa"]={
[b]="err_swift_error_result_not_after_swift_context",
[d]="err_omp_variable_in_given_clause_and_dsa",
[c]="\'swift_error_result\' parameter must follow \'swift_context\' parameter",
[e]="%0 variable cannot be in a %1 clause in \'#pragma omp %2\' directive",
[d]="\'swift_error_result\' parameter must follow \'swift_context\' parameter",
[i]="A variable cannot be in a B clause in \'#pragma omp C\' directive",
[e]=k,
[j]=k,
[g]="\'swift_error_result\' parameter must follow \'swift_context\' parameter",
[c]="(.*?) variable cannot be in a (.*?) clause in \'\\#pragma omp (.*?)\' directive",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention.","Semantic analysis for the swiftcall calling convention.\n\nI\'ve tried to keep the infrastructure behind parameter ABI\ntreatments fairly general.\n\nllvm-svn: 262587"},
[f]={"6890b0963489",1469715909,"[OpenMP] Code generation for the is_device_ptr clause","[OpenMP] Code generation for the is_device_ptr clause\n\nSummary: This patch adds support for the is_device_ptr clause. It expands SEMA to use the mappable expression logic that can only be tested with code generation in place and check conflicts with other data sharing related clauses using the mappable expressions infrastructure.\n\nReviewers: hfinkel, carlo.bertolli, arpith-jacob, kkwli0, ABataev\n\nSubscribers: caomhin, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D22788\n\nllvm-svn: 276978"},
[j]={{F,3005,"/// Check the extended parameter information. Most of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n  // ...\n  for (size_t paramIndex = 0, numParams = paramTypes.size(); paramIndex != numParams; ++paramIndex) {\n   // ...\n   // swift_error parameters must be preceded by a swift_context parameter.\n   case ParameterABI::SwiftErrorResult:\n     // ...\n     if (paramIndex == 0 || EPI.ExtParameterInfos[paramIndex - 1].getABI() != ParameterABI::SwiftContext) {\n       S.Diag(getParamLoc(paramIndex), diag::err_swift_error_result_not_after_swift_context);"}},
[b]={{n,18140,"OMPClause *Sema::ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    // OpenMP 4.5 [2.15.5.1, Restrictions, p.3]\n    // A list item cannot appear in both a map clause and a data-sharing\n    // attribute clause on the same construct\n    //\n    // OpenMP 5.0 [2.19.7.1, Restrictions, p.7]\n   // A list item cannot appear in both a map clause and a data-sharing\n    // attribute clause on the same construct unless the construct is a\n   // combined construct.\n    if ((LangOpts.OpenMP <= 45 && isOpenMPTargetExecutionDirective(CurrDir)) || CurrDir == OMPD_target) {\n      // ...\n      if (DSAStack->checkMappableExprComponentListsForDecl(VD, /*CurrentRegionOnly=*/true, [&](OMPClauseMappableExprCommon::MappableExprComponentListRef, OpenMPClauseKind WhereFoundClauseKind) -> bool {\n        // ...\n        Diag(ELoc, diag::err_omp_variable_in_given_clause_and_dsa) << getOpenMPClauseName(OMPC_private) << getOpenMPClauseName(ConflictKind) << getOpenMPDirectiveName(CurrDir);"},{n,18371,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (!IsImplicitClause) {\n      // ...\n      // OpenMP 4.5 [2.15.5.1, Restrictions, p.3]\n      // A list item cannot appear in both a map clause and a data-sharing\n      // attribute clause on the same construct\n      //\n      // OpenMP 5.0 [2.19.7.1, Restrictions, p.7]\n      // A list item cannot appear in both a map clause and a data-sharing\n      // attribute clause on the same construct unless the construct is a\n      // combined construct.\n      if ((LangOpts.OpenMP <= 45 && isOpenMPTargetExecutionDirective(CurrDir)) || CurrDir == OMPD_target) {\n        // ...\n        if (DSAStack->checkMappableExprComponentListsForDecl(VD, /*CurrentRegionOnly=*/true, [&ConflictKind](OMPClauseMappableExprCommon::MappableExprComponentListRef, OpenMPClauseKind WhereFoundClauseKind) {\n         // ...\n         Diag(ELoc, diag::err_omp_variable_in_given_clause_and_dsa) << getOpenMPClauseName(OMPC_firstprivate) << getOpenMPClauseName(ConflictKind) << getOpenMPDirectiveName(DSAStack->getCurrentDirective());"},{n,22113,"// Check the validity of the provided variable list for the provided clause kind\n// \\a CKind. In the check process the valid expressions, mappable expression\n// components, variables, and user-defined mappers are extracted and used to\n// fill \\a ProcessedVarList, \\a VarComponents, \\a VarBaseDeclarations, and \\a\n// UDMapperList in MVLI. \\a MapType, \\a IsMapTypeImplicit, \\a MapperIdScopeSpec,\n// and \\a MapperId are expected to be valid if the clause kind is \'map\'.\nstatic void checkMappableExpressionList(Sema &SemaRef, DSAStackTy *DSAS, OpenMPClauseKind CKind, MappableVarListInfo &MVLI, SourceLocation StartLoc, CXXScopeSpec &MapperIdScopeSpec, DeclarationNameInfo MapperId, ArrayRef<Expr *> UnresolvedMappers, OpenMPMapClauseKind MapType = OMPC_MAP_unknown, ArrayRef<OpenMPMapModifierKind> Modifiers = std::nullopt, bool IsMapTypeImplicit = false, bool NoDiagnose = false) {\n  // ...\n  for (Expr *RE : MVLI.VarList) {\n   // ...\n   if (CKind == OMPC_map) {\n      // ...\n      // OpenMP 4.5 [2.15.5.1, Restrictions, p.3]\n      // A list item cannot appear in both a map clause and a data-sharing\n      // attribute clause on the same construct\n      //\n      // OpenMP 5.0 [2.19.7.1, Restrictions, p.7]\n      // A list item cannot appear in both a map clause and a data-sharing\n      // attribute clause on the same construct unless the construct is a\n      // combined construct.\n      if (VD && ((SemaRef.LangOpts.OpenMP <= 45 && isOpenMPTargetExecutionDirective(DKind)) || DKind == OMPD_target)) {\n        // ...\n        if (isOpenMPPrivate(DVar.CKind)) {\n          SemaRef.Diag(ELoc, diag::err_omp_variable_in_given_clause_and_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPClauseName(OMPC_map) << getOpenMPDirectiveName(DSAS->getCurrentDirective());"},{n,23506,"OMPClause *Sema::ActOnOpenMPIsDevicePtrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n   // ...\n    if (isOpenMPPrivate(DVar.CKind)) {\n      Diag(ELoc, diag::err_omp_variable_in_given_clause_and_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPClauseName(OMPC_is_device_ptr) << getOpenMPDirectiveName(DSAStack->getCurrentDirective());"},{n,23581,"OMPClause *Sema::ActOnOpenMPHasDeviceAddrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (isOpenMPPrivate(DVar.CKind)) {\n      Diag(ELoc, diag::err_omp_variable_in_given_clause_and_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPClauseName(OMPC_has_device_addr) << getOpenMPDirectiveName(DSAStack->getCurrentDirective());"}},
[l]={
[l]={
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:27:48: error: \'swift_error_result\' parameter must follow \'swift_context\' parameter","clang/test/SemaCXX/attr-swiftcall.cpp:28:64: error: \'swift_error_result\' parameter must follow \'swift_context\' parameter"}
["clang/test/OpenMP/target_private_messages.cpp"]={"clang/test/OpenMP/target_private_messages.cpp:206:35: error: private variable cannot be in a map clause in \'#pragma omp target\' directive"}
}
}
},
},
["err_swift_indirect_result_not_first"]={
["err_omp_variably_modified_type_not_supported"]={
[b]="err_swift_indirect_result_not_first",
[d]="err_omp_variably_modified_type_not_supported",
[c]="\'swift_indirect_result\' parameters must be first parameters of function",
[e]="arguments of OpenMP clause \'%0\' in \'#pragma omp %2\' directive cannot be of variably-modified type %1",
[d]="\'swift_indirect_result\' parameters must be first parameters of function",
[i]="arguments of OpenMP clause \'A\' in \'#pragma omp C\' directive cannot be of variably-modified type B",
[e]=k,
[j]=k,
[g]="\'swift_indirect_result\' parameters must be first parameters of function",
[c]="arguments of OpenMP clause \'(.*?)\' in \'\\#pragma omp (.*?)\' directive cannot be of variably\\-modified type (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention.","Semantic analysis for the swiftcall calling convention.\n\nI\'ve tried to keep the infrastructure behind parameter ABI\ntreatments fairly general.\n\nllvm-svn: 262587"},
[f]={"7a3e5853dfe4",1432023564,"[OPENMP] Prohibit variably modified types in \'copyprivate\' clause.","[OPENMP] Prohibit variably modified types in \'copyprivate\' clause.\nRuntime does not allow to work with VLAs in copyprivate clause.\n\nllvm-svn: 237672"},
[j]={{F,2986,"/// Check the extended parameter informationMost of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n  // ...\n  for (size_t paramIndex = 0, numParams = paramTypes.size(); paramIndex != numParams; ++paramIndex) {\n    // ...\n    // swift_indirect_result parameters must be a prefix of the function\n    // arguments.\n    case ParameterABI::SwiftIndirectResult:\n      // ...\n      if (paramIndex != 0 && EPI.ExtParameterInfos[paramIndex - 1].getABI() != ParameterABI::SwiftIndirectResult) {\n       S.Diag(getParamLoc(paramIndex), diag::err_swift_indirect_result_not_first);"}},
[b]={{n,18111,"OMPClause *Sema::ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n for (Expr *RefExpr : VarList) {\n   // ...\n   // Variably modified types are not supported for tasks.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType() && isOpenMPTaskingDirective(CurrDir)) {\n      Diag(ELoc, diag::err_omp_variably_modified_type_not_supported) << getOpenMPClauseName(OMPC_private) << Type << getOpenMPDirectiveName(CurrDir);"},{n,18384,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    // Variably modified types are not supported for tasks.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType() && isOpenMPTaskingDirective(DSAStack->getCurrentDirective())) {\n     Diag(ELoc, diag::err_omp_variably_modified_type_not_supported) << getOpenMPClauseName(OMPC_firstprivate) << Type << getOpenMPDirectiveName(DSAStack->getCurrentDirective());"},{n,20485,"OMPClause *Sema::ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    // Variably modified types are not supported.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType()) {\n      Diag(ELoc, diag::err_omp_variably_modified_type_not_supported) << getOpenMPClauseName(OMPC_copyprivate) << Type << getOpenMPDirectiveName(DSAStack->getCurrentDirective());"}}
[l]={
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:20:68: error: \'swift_indirect_result\' parameters must be first parameters of function"}
}
},
},
["err_swift_param_attr_not_swiftcall"]={
["err_omp_variant_ctx_second_match_extension"]={
[b]="err_swift_param_attr_not_swiftcall",
[d]={{nil,p,"err_omp_variant_ctx_second_match_extension"}},
[c]={{nil,B,"\'%0\' parameter can only be used with swiftcall%select{ or swiftasynccall|}1 calling convention%select{|s}1"},{v,nil,"\'%0\' parameter can only be used with swiftcall calling convention"}},
[e]={{nil,p,"only a single match extension allowed per OpenMP context selector"}},
[d]={{nil,B,{"\'A\' parameter can only be used with swiftcall",{" or swiftasynccall",a}," calling convention",{a,uc}}},{v,nil,"\'A\' parameter can only be used with swiftcall calling convention"}},
[i]={{nil,p,"only a single match extension allowed per OpenMP context selector"}},
[e]=k,
[j]=k,
[g]="\'(.*?)\' parameter can only be used with swiftcall(?: or swiftasynccall|) calling convention(?:|s)",
[c]="only a single match extension allowed per OpenMP context selector",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,p,K}},
[f]={"477f2bb0d53c",1456987172,"Semantic analysis for the swiftcall calling convention.","Semantic analysis for the swiftcall calling convention.\n\nI\'ve tried to keep the infrastructure behind parameter ABI\ntreatments fairly general.\n\nllvm-svn: 262587"},
[f]={"a19eb1de726c",1585931393,"[OpenMP] Add match_{all,any,none} declare variant selector extensions.","[OpenMP] Add match_{all,any,none} declare variant selector extensions.\n\nBy default, all traits in the OpenMP context selector have to match for\nit to be acceptable. Though, we sometimes want a single property out of\nmultiple to match (=any) or no match at all (=none). We offer these\nchoices as extensions via\n `implementation={extension(match_{all,any,none})}`\nto the user. The choice will affect the entire context selector not only\nthe traits following the match property.\n\nThe first user will be D75788. There we can replace\n```\n #pragma omp begin declare variant match(device={arch(nvptx64)})\n  #define __CUDA__\n\n  #include <__clang_cuda_cmath.h>\n\n // TODO: Hack until we support an extension to the match clause that allows \"or\".\n  #undef __CLANG_CUDA_CMATH_H__\n\n  #undef __CUDA__\n  #pragma omp end declare variant\n\n  #pragma omp begin declare variant match(device={arch(nvptx)})\n  #define __CUDA__\n\n  #include <__clang_cuda_cmath.h>\n\n  #undef __CUDA__\n  #pragma omp end declare variant\n```\nwith the much simpler\n```\n  #pragma omp begin declare variant match(device={arch(nvptx, nvptx64)}, implementation={extension(match_any)})\n #define __CUDA__\n\n  #include <__clang_cuda_cmath.h>\n\n  #undef __CUDA__\n  #pragma omp end declare variant\n```\n\nReviewed By: mikerice\n\nDifferential Revision: https://reviews.llvm.org/D77414"},
[j]={{F,2966,"/// Check the extended parameter informationMost of the necessary\n/// checking should occur when applying the parameter attribute; the\n/// only other checks required are positional restrictions.\nstatic void checkExtParameterInfos(Sema &S, ArrayRef<QualType> paramTypes, const FunctionProtoType::ExtProtoInfo &EPI, llvm::function_ref<SourceLocation(unsigned)> getParamLoc) {\n  // ...\n  auto checkCompatible = [&](unsigned paramIndex, RequiredCC required) {\n    // ...\n   S.Diag(getParamLoc(paramIndex), diag::err_swift_param_attr_not_swiftcall) << getParameterABISpelling(EPI.ExtParameterInfos[paramIndex].getABI()) << (required == RequiredCC::OnlySwift);"}},
[b]={{L,981,"static bool checkExtensionProperty(Parser &P, SourceLocation Loc, OMPTraitProperty &TIProperty, OMPTraitSelector &TISelector, llvm::StringMap<SourceLocation> &Seen) {\n  // ...\n  if (IsMatchExtension(TIProperty)) {\n    for (OMPTraitProperty &SeenProp : TISelector.Properties)\n     if (IsMatchExtension(SeenProp)) {\n        P.Diag(Loc, diag::err_omp_variant_ctx_second_match_extension);"}},
[l]={
[l]={
["clang/test/SemaCXX/attr-swiftcall.cpp"]={"clang/test/SemaCXX/attr-swiftcall.cpp:19:53: error: \'swift_indirect_result\' parameter can only be used with swiftcall or swiftasynccall calling convention","clang/test/SemaCXX/attr-swiftcall.cpp:27:48: error: \'swift_error_result\' parameter can only be used with swiftcall calling conventions","clang/test/SemaCXX/attr-swiftcall.cpp:34:37: error: \'swift_context\' parameter can only be used with swiftcall or swiftasynccall calling convention"}
["clang/test/AST/ast-dump-openmp-declare-variant-extensions-messages.c"]={"clang/test/AST/ast-dump-openmp-declare-variant-extensions-messages.c:6:87: error: only a single match extension allowed per OpenMP context selector","clang/test/AST/ast-dump-openmp-declare-variant-extensions-messages.c:12:101: error: only a single match extension allowed per OpenMP context selector"}
}
}
},
},
["err_switch_explicit_conversion"]={
["err_omp_wrong_cancel_region"]={
[b]="err_switch_explicit_conversion",
[d]="err_omp_wrong_cancel_region",
[c]="switch condition type %0 requires explicit conversion to %1",
[e]="one of \'for\', \'parallel\', \'sections\' or \'taskgroup\' is expected",
[d]="switch condition type A requires explicit conversion to B",
[i]="one of \'for\', \'parallel\', \'sections\' or \'taskgroup\' is expected",
[e]=k,
[j]=k,
[g]="switch condition type (.*?) requires explicit conversion to (.*?)",
[c]="one of \'for\', \'parallel\', \'sections\' or \'taskgroup\' is expected",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an","Implement conversion from a switch condition with class type to an\nintegral or enumeration type (vi user-defined conversions). Fixes PR5518.\n\nllvm-svn: 89655"},
[f]={"6d4ed0583033",1435733861,"[OPENMP 4.0] Initial support for \'omp cancellation point\' construct.","[OPENMP 4.0] Initial support for \'omp cancellation point\' construct.\n\nAdd parsing and sema analysis for \'omp cancellation point\' directive.\n\nllvm-svn: 241145"},
[j]={{S,1051,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    // ...\n   SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_switch_explicit_conversion) << T << ConvTy; }"}},
[b]={{n,4959,"static bool checkCancelRegion(Sema &SemaRef, OpenMPDirectiveKind CurrentRegion, OpenMPDirectiveKind CancelRegion, SourceLocation StartLoc) {\n  // ...\n SemaRef.Diag(StartLoc, diag::err_omp_wrong_cancel_region) << getOpenMPDirectiveName(CancelRegion);"}},
[l]={
[l]={
["clang/test/SemaCXX/switch-0x.cpp"]={"clang/test/SemaCXX/switch-0x.cpp:9:3: error: switch condition type \'A\' requires explicit conversion to \'int\'"}
["clang/test/OpenMP/cancel_messages.cpp"]={"clang/test/OpenMP/cancel_messages.cpp:7:1: error: one of \'for\', \'parallel\', \'sections\' or \'taskgroup\' is expected","clang/test/OpenMP/cancel_messages.cpp:11:1: error: one of \'for\', \'parallel\', \'sections\' or \'taskgroup\' is expected","clang/test/OpenMP/cancel_messages.cpp:14:1: error: one of \'for\', \'parallel\', \'sections\' or \'taskgroup\' is expected","clang/test/OpenMP/cancel_messages.cpp:17:1: error: one of \'for\', \'parallel\', \'sections\' or \'taskgroup\' is expected"}
}
}
},
},
["err_switch_incomplete_class_type"]={
["err_omp_wrong_dependency_iterator_type"]={
[b]="err_switch_incomplete_class_type",
[d]={{nil,v,"err_omp_wrong_dependency_iterator_type"}},
[c]="switch condition has incomplete class type %0",
[e]={{nil,v,"expected an integer or a pointer type of the outer loop counter \'%0\' for non-rectangular nests"}},
[d]="switch condition has incomplete class type A",
[i]={{nil,v,"expected an integer or a pointer type of the outer loop counter \'A\' for non-rectangular nests"}},
[e]=k,
[j]=k,
[g]="switch condition has incomplete class type (.*?)",
[c]="expected an integer or a pointer type of the outer loop counter \'(.*?)\' for non\\-rectangular nests",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,v,o}},
[f]={"378e1923b6a5",1258984401,"Require a class type to be complete before probing its conversion","Require a class type to be complete before probing its conversion\nfunctions for a switch condition\'s conversion to integral or\nenumeration type. \n\nllvm-svn: 89656"},
[f]={"5ddc6d180cd6",1556306917,"[OPENMP]Added check for non-random access types for the dependent loop","[OPENMP]Added check for non-random access types for the dependent loop\ncounters.\n\nAccording to the OpenMP 5.0, For any associated loop where the b or lb\nexpression is not loop invariant with respect to the outermost loop, the\nvar-outer that appears in the expression may not have a random access\niterator type.\n\nllvm-svn: 359340"},
[j]={{S,1045,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    // ...\n    SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_switch_incomplete_class_type) << T << Cond->getSourceRange(); }"}},
[b]={{n,8072,"/// Checker for the non-rectangular loops. Checks if the initializer or\n/// condition expression references loop counter variable.\nclass LoopCounterRefChecker final : public ConstStmtVisitor<LoopCounterRefChecker, bool> {\n  // ...\n  bool checkDecl(const Expr *E, const ValueDecl *VD) {\n   // ...\n    // OpenMP, 2.9.1 Canonical Loop Form, Restrictions.\n    // The type of the loop iterator on which we depend may not have a random\n    // access iterator type.\n    if (Data.first && VD->getType()->isRecordType()) {\n      // ...\n      SemaRef.Diag(E->getExprLoc(), diag::err_omp_wrong_dependency_iterator_type) << OS.str();"}},
[l]={
[l]={
["clang/test/SemaCXX/switch.cpp"]={"clang/test/SemaCXX/switch.cpp:40:3: error: switch condition has incomplete class type \'C\'"}
["clang/test/OpenMP/for_loop_messages.cpp"]={"clang/test/OpenMP/for_loop_messages.cpp:617:19: error: expected an integer or a pointer type of the outer loop counter \'I\' for non-rectangular nests","clang/test/OpenMP/for_loop_messages.cpp:618:39: error: expected an integer or a pointer type of the outer loop counter \'I\' for non-rectangular nests"}
}
}
},
},
["err_switch_into_protected_scope"]={
["err_omp_wrong_device_function_call"]={
[b]="err_switch_into_protected_scope",
[d]={{nil,w,"err_omp_wrong_device_function_call"}},
[c]="cannot jump from switch statement to this case label",
[e]={{nil,w,"function with \'device_type(%0)\' is not available on %select{device|host}1"}},
[d]="cannot jump from switch statement to this case label",
[i]={{nil,w,{"function with \'device_type(A)\' is not available on ",{"device","host"}}}},
[e]=k,
[j]=k,
[g]="cannot jump from switch statement to this case label",
[c]="function with \'device_type\\((.*?)\\)\' is not available on (?:device|host)",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,w,o}},
[f]={"7535f41c6673",1240083757,"first step to getting switches giving \"jump into vla scope\" errors.","first step to getting switches giving \"jump into vla scope\" errors.\n\nllvm-svn: 69461"},
[f]={"729e242a7972",1566576674,"[OPENMP5.0]Add support for device_type clause in declare target","[OPENMP5.0]Add support for device_type clause in declare target\nconstruct.\n\nOpenMP 5.0 introduced new clause for declare target directive, device_type clause, which may accept values host, nohost, and any. Host means\nthat the function must be emitted only for the host, nohost - only for\nthe device, and any - for both, device and the host.\n\nllvm-svn: 369775"},
[j]={{"clang/lib/ARCMigrate/TransProtectedScope.cpp",121,"class ProtectedScopeFixer {\n  // ...\n  ProtectedScopeFixer(BodyContext &BodyCtx) : Pass(BodyCtx.getMigrationContext().Pass), SM(Pass.Ctx.getSourceManager()) {\n   // ...\n   while (I != E) {\n      if (I->getID() == diag::err_switch_into_protected_scope && isInRange(I->getLocation(), BodyRange)) {"},{"clang/lib/ARCMigrate/TransProtectedScope.cpp",134,"class ProtectedScopeFixer {\n  // ...\n  void handleProtectedScopeError(SmallVectorImpl<StoredDiagnostic>::iterator &DiagI, SmallVectorImpl<StoredDiagnostic>::iterator DiagE) {\n    // ...\n    assert(DiagI->getID() == diag::err_switch_into_protected_scope);"},{"clang/lib/ARCMigrate/TransProtectedScope.cpp",145,"class ProtectedScopeFixer {\n  // ...\n  void handleProtectedScopeError(SmallVectorImpl<StoredDiagnostic>::iterator &DiagI, SmallVectorImpl<StoredDiagnostic>::iterator DiagE) {\n   // ...\n   if (handledAllNotes)\n      Pass.TA.clearDiagnostic(diag::err_switch_into_protected_scope, ErrLoc);"},{"clang/lib/Sema/JumpDiagnostics.cpp",712,"/// VerifyJumps - Verify each element of the Jumps array to see if they are\n/// valid, emitting diagnostics if not.\nvoid JumpScopeChecker::VerifyJumps() {\n  while (!Jumps.empty()) {\n    // ...\n    for (SwitchCase *SC = SS->getSwitchCaseList(); SC; SC = SC->getNextSwitchCase()) {\n      // ...\n      CheckJump(SS, SC, Loc, diag::err_switch_into_protected_scope, 0, diag::warn_cxx98_compat_switch_into_protected_scope);"}},
[b]={{n,2720,"void Sema::finalizeOpenMPDelayedAnalysis(const FunctionDecl *Caller, const FunctionDecl *Callee, SourceLocation Loc) {\n // ...\n if (LangOpts.OpenMPIsTargetDevice && DevTy && *DevTy == OMPDeclareTargetDeclAttr::DT_Host) {\n    // ...\n    Diag(Loc, diag::err_omp_wrong_device_function_call) << HostDevTy << 0;"},{n,2749,"void Sema::finalizeOpenMPDelayedAnalysis(const FunctionDecl *Caller, const FunctionDecl *Callee, SourceLocation Loc) {\n // ...\n if (!LangOpts.OpenMPIsTargetDevice && !LangOpts.OpenMPOffloadMandatory && DevTy && *DevTy == OMPDeclareTargetDeclAttr::DT_NoHost) {\n    // ...\n    Diag(Loc, diag::err_omp_wrong_device_function_call) << NoHostDevTy << 1;"}},
[l]={
[l]={
["clang/test/SemaObjC/strong-in-c-struct.m"]={"clang/test/SemaObjC/strong-in-c-struct.m:20:3: error: cannot jump from switch statement to this case label","clang/test/SemaObjC/strong-in-c-struct.m:44:3: error: cannot jump from switch statement to this case label","clang/test/SemaObjC/strong-in-c-struct.m:63:3: error: cannot jump from switch statement to this case label"}
["clang/test/OpenMP/declare_target_nohost_variant_messages.cpp"]={"clang/test/OpenMP/declare_target_nohost_variant_messages.cpp:21:39: error: function with \'device_type(nohost)\' is not available on host","clang/test/OpenMP/declare_target_nohost_variant_messages.cpp:16:29: error: function with \'device_type(nohost)\' is not available on host"}
}
}
},
},
["err_switch_multiple_conversions"]={
["err_omp_wrong_dsa"]={
[b]="err_switch_multiple_conversions",
[d]="err_omp_wrong_dsa",
[c]="multiple conversions from switch condition type %0 to an integral or enumeration type",
[e]="%0 variable cannot be %1",
[d]="multiple conversions from switch condition type A to an integral or enumeration type",
[i]="A variable cannot be B",
[e]=k,
[j]=k,
[g]="multiple conversions from switch condition type (.*?) to an integral or enumeration type",
[c]="(.*?) variable cannot be (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"d0c22e0d10fc",1258983968,"Implement conversion from a switch condition with class type to an","Implement conversion from a switch condition with class type to an\nintegral or enumeration type (vi user-defined conversions). Fixes PR5518.\n\nllvm-svn: 89655"},
[f]={"d4183dabd7a9",1378212952,"OpenMP: Data-sharing attributes analysis and clause \'shared\'","OpenMP: Data-sharing attributes analysis and clause \'shared\'\n\nllvm-svn: 189795"},
[j]={{S,1062,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    // ...\n    SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_switch_multiple_conversions) << T; }"}},
[b]={{n,6976,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  // ...\n  for (const Expr *E : Linears) {\n    // ...\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        // ...\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          // OpenMP  [2.15.3.7, linear Clause, Restrictions]\n          // A list-item cannot appear in more than one linear clause.\n          if (LinearArgs.count(CanonPVD) > 0) {\n            Diag(E->getExprLoc(), diag::err_omp_wrong_dsa) << getOpenMPClauseName(OMPC_linear) << getOpenMPClauseName(OMPC_linear) << E->getSourceRange();"},{n,6986,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  // ...\n  for (const Expr *E : Linears) {\n    // ...\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(E))\n      if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n        // ...\n        if (FD->getNumParams() > PVD->getFunctionScopeIndex() && FD->getParamDecl(PVD->getFunctionScopeIndex())->getCanonicalDecl() == CanonPVD) {\n          // ...\n          // Each argument can appear in at most one uniform or linear clause.\n          if (UniformedArgs.count(CanonPVD) > 0) {\n            Diag(E->getExprLoc(), diag::err_omp_wrong_dsa) << getOpenMPClauseName(OMPC_linear) << getOpenMPClauseName(OMPC_uniform) << E->getSourceRange();"},{n,7007,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareSimdDirective(DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS, Expr *Simdlen, ArrayRef<Expr *> Uniforms, ArrayRef<Expr *> Aligneds, ArrayRef<Expr *> Alignments, ArrayRef<Expr *> Linears, ArrayRef<unsigned> LinModifiers, ArrayRef<Expr *> Steps, SourceRange SR) {\n  // ...\n  for (const Expr *E : Linears) {\n    // ...\n    if (isa<CXXThisExpr>(E)) {\n      if (UniformedLinearThis) {\n        Diag(E->getExprLoc(), diag::err_omp_wrong_dsa) << getOpenMPClauseName(OMPC_linear) << getOpenMPClauseName(IsUniformedThis ? OMPC_uniform : OMPC_linear) << E->getSourceRange();"},{n,18101,"OMPClause *Sema::ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (DVar.CKind != OMPC_unknown && DVar.CKind != OMPC_private) {\n      Diag(ELoc, diag::err_omp_wrong_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPClauseName(OMPC_private);"},{n,18259,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n   if (!IsImplicitClause) {\n      // ...\n      // OpenMP [2.4.13, Data-sharing Attribute Clauses]\n      //  A list item that specifies a given variable may not appear in more\n      // than one clause on the same directive, except that a variable may be\n      //  specified in both firstprivate and lastprivate clauses.\n      // OpenMP 4.5 [2.10.8, Distribute Construct, p.3]\n      // A list item may appear in a firstprivate or lastprivate clause but not\n      // both.\n      if (DVar.CKind != OMPC_unknown && DVar.CKind != OMPC_firstprivate && (isOpenMPDistributeDirective(CurrDir) || DVar.CKind != OMPC_lastprivate) && DVar.RefExpr) {\n        Diag(ELoc, diag::err_omp_wrong_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPClauseName(OMPC_firstprivate);"},{n,18279,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (!IsImplicitClause) {\n      // ...\n      // OpenMP [2.9.1.1, Data-sharing Attribute Rules for Variables Referenced\n      // in a Construct]\n      //  Variables with the predetermined data-sharing attributes may not be\n      //  listed in data-sharing attributes clauses, except for the cases\n      //  listed below. For these exceptions only, listing a predetermined\n      //  variable in a data-sharing attribute clause is allowed and overrides\n      //  the variable\'s predetermined data-sharing attributes.\n      // OpenMP [2.9.1.1, Data-sharing Attribute Rules for Variables Referenced\n      // in a Construct, C/C++, p.2]\n      //  Variables with const-qualified type having no mutable member may be\n      //  listed in a firstprivate clause, even if they are static data members.\n      if (!(IsConstant || (VD && VD->isStaticDataMember())) && !DVar.RefExpr && DVar.CKind != OMPC_unknown && DVar.CKind != OMPC_shared) {\n        Diag(ELoc, diag::err_omp_wrong_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPClauseName(OMPC_firstprivate);"},{n,18566,"OMPClause *Sema::ActOnOpenMPLastprivateClause(ArrayRef<Expr *> VarList, OpenMPLastprivateModifier LPKind, SourceLocation LPKindLoc, SourceLocation ColonLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (DVar.CKind != OMPC_unknown && DVar.CKind != OMPC_lastprivate && (isOpenMPDistributeDirective(CurrDir) || DVar.CKind != OMPC_firstprivate) && (DVar.CKind != OMPC_private || DVar.RefExpr != nullptr)) {\n      Diag(ELoc, diag::err_omp_wrong_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPClauseName(OMPC_lastprivate);"},{n,18695,"OMPClause *Sema::ActOnOpenMPSharedClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (DVar.CKind != OMPC_unknown && DVar.CKind != OMPC_shared && DVar.RefExpr) {\n      Diag(ELoc, diag::err_omp_wrong_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPClauseName(OMPC_shared);"},{n,19372,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    // OpenMP [2.9.3.6, Restrictions, C/C++, p.4]\n    //  If a list-item is a reference type then it must bind to the same object\n    //  for all threads of the team.\n    if (!ASE && !OASE) {\n      // ...\n      if (DVar.CKind != OMPC_unknown) {\n        S.Diag(ELoc, diag::err_omp_wrong_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPClauseName(OMPC_reduction);"},{n,19400,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    // OpenMP [2.9.3.6, Restrictions, C/C++, p.4]\n    //  If a list-item is a reference type then it must bind to the same object\n    //  for all threads of the team.\n    if (!ASE && !OASE) {\n    // ...\n    } else {\n      // ...\n      if (DVar.CKind == OMPC_threadprivate) {\n        S.Diag(ELoc, diag::err_omp_wrong_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPClauseName(OMPC_reduction);"},{n,20056,"OMPClause *Sema::ActOnOpenMPLinearClause(ArrayRef<Expr *> VarList, Expr *Step, SourceLocation StartLoc, SourceLocation LParenLoc, OpenMPLinearClauseKind LinKind, SourceLocation LinLoc, SourceLocation ColonLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (DVar.RefExpr) {\n      Diag(ELoc, diag::err_omp_wrong_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPClauseName(OMPC_linear);"},{n,20461,"OMPClause *Sema::ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    // OpenMP [2.14.4.2, Restrictions, p.2]\n    //  A list item that appears in a copyprivate clause may not appear in a\n    //  private or firstprivate clause on the single construct.\n    if (!VD || !DSAStack->isThreadPrivate(VD)) {\n      // ...\n      if (DVar.CKind != OMPC_unknown && DVar.CKind != OMPC_copyprivate && DVar.RefExpr) {\n        Diag(ELoc, diag::err_omp_wrong_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPClauseName(OMPC_copyprivate);"},{n,22822,"OMPClause *Sema::ActOnOpenMPDetachClause(Expr *Evt, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  if (!Evt->isValueDependent() && !Evt->isTypeDependent() && !Evt->isInstantiationDependent() && !Evt->containsUnexpandedParameterPack()) {\n    // ...\n    if (DVar.CKind != OMPC_unknown && DVar.CKind != OMPC_firstprivate && DVar.RefExpr) {\n      Diag(Evt->getExprLoc(), diag::err_omp_wrong_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPClauseName(OMPC_firstprivate);"}},
[l]={
[l]={
["clang/test/SemaCXX/switch.cpp"]={"clang/test/SemaCXX/switch.cpp:33:3: error: multiple conversions from switch condition type \'B\' to an integral or enumeration type"}
[Ab]={"clang/test/OpenMP/declare_simd_messages.cpp:200:33: error: linear variable cannot be uniform","clang/test/OpenMP/declare_simd_messages.cpp:197:45: error: linear variable cannot be uniform","clang/test/OpenMP/declare_simd_messages.cpp:190:43: error: linear variable cannot be linear","clang/test/OpenMP/declare_simd_messages.cpp:187:43: error: linear variable cannot be linear","clang/test/OpenMP/declare_simd_messages.cpp:223:85: error: linear variable cannot be uniform"}
}
}
},
},
["err_sycl_special_type_num_init_method"]={
["err_omp_wrong_if_directive_name_modifier"]={
[b]={{nil,z,"err_sycl_special_type_num_init_method"}},
[d]="err_omp_wrong_if_directive_name_modifier",
[c]={{nil,z,"types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined"}},
[e]="directive name modifier \'%0\' is not allowed for \'#pragma omp %1\'",
[d]={{nil,z,"types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined"}},
[i]="directive name modifier \'A\' is not allowed for \'#pragma omp B\'",
[e]=k,
[j]=k,
[g]="types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined",
[c]="directive name modifier \'(.*?)\' is not allowed for \'\\#pragma omp (.*?)\'",
[h]=a,
[h]=a,
[i]={{nil,z,y}},
[g]=o,
[f]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
[f]={"6b8046addfce",1441265028,"[OPENMP 4.1] Parsing/sema analysis for extended format of \'if\' clause.","[OPENMP 4.1] Parsing/sema analysis for extended format of \'if\' clause.\nOpenMP 4.1 added special \'directive-name-modifier\' to the \'if\' clause.\nFormat of \'if\' clause is as follows:\n```\nif([ directive-name-modifier :] scalar-logical-expression)\n```\n\nThe restriction rules are also changed.\n1. If any \'if\' clause on the directive includes a \'directive-name-modifier\' then all \'if\' clauses on the directive must include a \'directive-name-modifier\'.\n2. At most one \'if\' clause without a \'directive-name-modifier\' can appear on the directive.\n3. At most one \'if\' clause with some particular \'directive-name-modifier\' can appear on the directive.\n\n\'directive-name-modifier\' is important for combined directives and allows to separate conditions in \'if\' clause for simple sub-directives in combined directive. This \'directive-name-modifier\' identifies the sub-directive to which this \'if\' clause must be applied.\n\nllvm-svn: 246747"},
[j]={{t,17816,"void Sema::ActOnTagFinishDefinition(Scope *S, Decl *TagD, SourceRange BraceRange) {\n  // ...\n  if (auto *RD = dyn_cast<CXXRecordDecl>(Tag)) {\n   // ...\n   if (RD->hasAttr<SYCLSpecialClassAttr>()) {\n      // ...\n      if (NumInitMethods > 1 || !Def->hasInitMethod())\n        Diag(RD->getLocation(), diag::err_sycl_special_type_num_init_method);"}},
[b]={{n,5283,"static bool checkIfClauses(Sema &S, OpenMPDirectiveKind Kind, ArrayRef<OMPClause *> Clauses, ArrayRef<OpenMPDirectiveKind> AllowedNameModifiers) {\n  // ...\n  for (const OMPClause *C : Clauses) {\n    if (const auto *IC = dyn_cast_or_null<OMPIfClause>(C)) {\n     // ...\n     // Check if the specified name modifier is allowed for the current\n      // directive.\n      // At most one if clause with the particular directive-name-modifier can\n      // appear on the directive.\n      if (!llvm::is_contained(AllowedNameModifiers, CurNM)) {\n        S.Diag(IC->getNameModifierLoc(), diag::err_omp_wrong_if_directive_name_modifier) << getOpenMPDirectiveName(CurNM) << getOpenMPDirectiveName(Kind);"}},
[l]={
[l]={
["clang/test/SemaSYCL/special-class-attribute.cpp"]={"clang/test/SemaSYCL/special-class-attribute.cpp:42:43: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:45:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:49:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:56:8: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:59:44: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:78:37: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:83:43: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:88:38: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined","clang/test/SemaSYCL/special-class-attribute.cpp:93:44: error: types with \'sycl_special_class\' attribute must have one and only one \'__init\' method defined"}
["clang/test/OpenMP/target_data_if_messages.cpp"]={"clang/test/OpenMP/target_data_if_messages.cpp:36:65: error: directive name modifier \'for\' is not allowed for \'#pragma omp target data\'"}
}
}
},
},
["err_synthesize_category_decl"]={
["err_omp_wrong_inscan_reduction"]={
[b]="err_synthesize_category_decl",
[d]={{nil,p,"err_omp_wrong_inscan_reduction"}},
[c]="@synthesize not allowed in a category\'s implementation",
[e]={{nil,p,"\'inscan\' modifier can be used only in \'omp for\', \'omp simd\', \'omp for simd\', \'omp parallel for\', or \'omp parallel for simd\' directive"}},
[d]="@synthesize not allowed in a category\'s implementation",
[i]={{nil,p,"\'inscan\' modifier can be used only in \'omp for\', \'omp simd\', \'omp for simd\', \'omp parallel for\', or \'omp parallel for simd\' directive"}},
[e]=k,
[j]=k,
[g]="@synthesize not allowed in a category\'s implementation",
[c]="\'inscan\' modifier can be used only in \'omp for\', \'omp simd\', \'omp for simd\', \'omp parallel for\', or \'omp parallel for simd\' directive",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,p,o}},
[f]={"f881267db9a9",1480718311,"Mass-rename the handful of error_* diagnostics to err_*.","Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545"},
[f]={W,1576908663,X,Y},
[j]={{Jb,1176,"/// 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    if (Synthesize) {\n     Diag(AtLoc, diag::err_synthesize_category_decl);"}},
[b]={{n,19908,"OMPClause *Sema::ActOnOpenMPReductionClause(ArrayRef<Expr *> VarList, OpenMPReductionClauseModifier Modifier, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ModifierLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions) {\n  // ...\n  // OpenMP 5.0, 2.19.5.4 reduction Clause, Restrictions\n  // A reduction clause with the inscan reduction-modifier may only appear on a\n  // worksharing-loop construct, a worksharing-loop SIMD construct, a simd\n  // construct, a parallel worksharing-loop construct or a parallel\n  // worksharing-loop SIMD construct.\n  if (Modifier == OMPC_REDUCTION_inscan && (DSAStack->getCurrentDirective() != OMPD_for && DSAStack->getCurrentDirective() != OMPD_for_simd && DSAStack->getCurrentDirective() != OMPD_simd && DSAStack->getCurrentDirective() != OMPD_parallel_for && DSAStack->getCurrentDirective() != OMPD_parallel_for_simd)) {\n   Diag(ModifierLoc, diag::err_omp_wrong_inscan_reduction);"}},
[l]={
[l]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:26:1: error: @synthesize not allowed in a category\'s implementation"}
["clang/test/OpenMP/parallel_reduction_messages.c"]={"clang/test/OpenMP/parallel_reduction_messages.c:17:32: error: \'inscan\' modifier can be used only in \'omp for\', \'omp simd\', \'omp for simd\', \'omp parallel for\', or \'omp parallel for simd\' directive"}
}
}
},
},
["err_synthesize_on_class_property"]={
["err_omp_wrong_linear_modifier"]={
[b]="err_synthesize_on_class_property",
[d]="err_omp_wrong_linear_modifier",
[c]="@synthesize not allowed on a class property %0",
[e]="expected %select{\'val\' modifier|one of \'ref\', val\' or \'uval\' modifiers}0",
[d]="@synthesize not allowed on a class property A",
[i]={{nil,nil,{"expected ",{"\'val\' modifier","one of \'ref\', val\' or \'uval\' modifiers"}}}},
[e]=k,
[j]=k,
[g]="@synthesize not allowed on a class property (.*?)",
[c]="expected (?:\'val\' modifier|one of \'ref\', val\' or \'uval\' modifiers)",
[h]=a,
[h]=a,
[i]=m,
[g]=o,
[f]={"f881267db9a9",1480718311,"Mass-rename the handful of error_* diagnostics to err_*.","Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545"},
[f]={"182227bd5bdc",1440068079,"[OPENMP 4.1] Initial support for modifiers in \'linear\' clause.","[OPENMP 4.1] Initial support for modifiers in \'linear\' clause.\n\nOpenMP 4.1 adds 3 optional modifiers to \'linear\' clause.\nFormat of \'linear\' clause has changed to:\n```\nlinear(linear-list[ : linear-step])\n```\nwhere linear-list is one of the following\n```\nlist\nmodifier(list)\n```\nwhere modifier is one of the following:\n```\n ref (C++)\n val (C/C++)\n uval (C++)\n```\nPatch adds parsing and sema analysis for these modifiers.\n\nllvm-svn: 245550"},
[j]={{Jb,1118,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    // ...\n    if (property->isClassProperty() && Synthesize) {\n      Diag(PropertyLoc, diag::err_synthesize_on_class_property) << PropertyId;"}},
[b]={{n,19972,"bool Sema::CheckOpenMPLinearModifier(OpenMPLinearClauseKind LinKind, SourceLocation LinLoc) {\n  if ((!LangOpts.CPlusPlus && LinKind != OMPC_LINEAR_val) || LinKind == OMPC_LINEAR_unknown) {\n    Diag(LinLoc, diag::err_omp_wrong_linear_modifier) << LangOpts.CPlusPlus;"}},
[l]={
[l]={
["clang/test/SemaObjC/objc-class-property.m"]={"clang/test/SemaObjC/objc-class-property.m:32:16: error: @synthesize not allowed on a class property \'c2\'"}
[Ab]={"clang/test/OpenMP/declare_simd_messages.cpp:206:33: error: expected one of \'ref\', val\' or \'uval\' modifiers"}
}
}
},
},
["err_synthesize_variable_sized_ivar"]={
["err_omp_wrong_linear_modifier_non_reference"]={
[b]={{nil,A,"err_synthesize_variable_sized_ivar"}},
[d]="err_omp_wrong_linear_modifier_non_reference",
[c]={{nil,A,"synthesized property with variable size type %0 requires an existing instance variable"}},
[e]="variable of non-reference type %0 can be used only with \'val\' modifier, but used with \'%1\'",
[d]={{nil,A,"synthesized property with variable size type A requires an existing instance variable"}},
[i]="variable of non-reference type A can be used only with \'val\' modifier, but used with \'B\'",
[e]=k,
[j]=k,
[g]="synthesized property with variable size type (.*?) requires an existing instance variable",
[c]="variable of non\\-reference type (.*?) can be used only with \'val\' modifier, but used with \'(.*?)\'",
[h]=a,
[h]=a,
[i]={{nil,A,m}},
[g]=o,
[f]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C.","[Sema] Add support for flexible array members in Obj-C.\n\nAllow Obj-C ivars with incomplete array type but only as the last ivar.\nAlso add a requirement for ivars that contain a flexible array member to\nbe at the end of class too. It is possible to add in a subclass another\nivar at the end but we\'ll emit a warning in this case. Also we\'ll emit a\nwarning if a variable sized ivar is declared in class extension or in\nimplementation because subclasses won\'t know they should avoid adding\nnew ivars.\n\nIn ARC incomplete array objects are treated as __unsafe_unretained so\nrequire them to be marked as such.\n\nProhibit synthesizing ivars with flexible array members because order of\nsynthesized ivars is not obvious and tricky to control. Spelling out\nivar explicitly gives control to developers and helps to avoid surprises\nwith unexpected ivar ordering.\n\nFor C and C++ changed diagnostic to tell explicitly a field is not the\nlast one and point to the next field. It is not as useful as in Obj-C\nbut it is an improvement and it is consistent with Obj-C. For C for\nunions emit more specific err_flexible_array_union instead of generic\nerr_field_incomplete.\n\nrdar://problem/21054495\n\nReviewers: rjmccall, theraven\n\nReviewed By: rjmccall\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D38773\n\nllvm-svn: 316381"},
[f]={"1185e193a486",1440072957,"[OPENMP 4.1] Allow to use \'uval\' and \'ref\' modifiers for reference types only.","[OPENMP 4.1] Allow to use \'uval\' and \'ref\' modifiers for reference types only.\nStandard allows to use \'uval\' and \'ref\' modifiers in \'linear\' clause for variables with reference types only. Added check for it and modified test.\n\nllvm-svn: 245556"},
[j]={{Jb,1335,"/// 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 (!CompleteTypeErr) {\n        // ...\n        if (RecordTy && RecordTy->getDecl()->hasFlexibleArrayMember()) {\n         Diag(PropertyIvarLoc, diag::err_synthesize_variable_sized_ivar) << PropertyIvarType;"}},
[b]={{n,19987,"bool Sema::CheckOpenMPLinearDecl(const ValueDecl *D, SourceLocation ELoc, OpenMPLinearClauseKind LinKind, QualType Type, bool IsDeclareSimd) {\n  // ...\n  if ((LinKind == OMPC_LINEAR_uval || LinKind == OMPC_LINEAR_ref) && !Type->isReferenceType()) {\n   Diag(ELoc, diag::err_omp_wrong_linear_modifier_non_reference) << Type << getOpenMPSimpleClauseTypeName(OMPC_linear, LinKind);"}},
[l]={
[l]={
["clang/test/SemaObjC/flexible-array.m"]={"clang/test/SemaObjC/flexible-array.m:214:25: error: synthesized property with variable size type \'struct Packet\' requires an existing instance variable","clang/test/SemaObjC/flexible-array.m:220:25: error: synthesized property with variable size type \'struct Packet\' requires an existing instance variable"}
[Ab]={"clang/test/OpenMP/declare_simd_messages.cpp:204:37: error: variable of non-reference type \'int *\' can be used only with \'val\' modifier, but used with \'ref\'","clang/test/OpenMP/declare_simd_messages.cpp:202:38: error: variable of non-reference type \'int *\' can be used only with \'val\' modifier, but used with \'uval\'"}
}
}
},
},
["err_synthesized_property_name"]={
["err_omp_wrong_ordered_loop_count"]={
[b]="err_synthesized_property_name",
[d]="err_omp_wrong_ordered_loop_count",
[c]="expected a property name in @synthesize",
[e]="the parameter of the \'ordered\' clause must be greater than or equal to the parameter of the \'collapse\' clause",
[d]="expected a property name in @synthesize",
[i]="the parameter of the \'ordered\' clause must be greater than or equal to the parameter of the \'collapse\' clause",
[e]=k,
[j]=k,
[g]="expected a property name in @synthesize",
[c]="the parameter of the \'ordered\' clause must be greater than or equal to the parameter of the \'collapse\' clause",
[h]=a,
[h]=a,
[i]=G,
[g]=o,
[f]={"88e72a0bf662",1258573545,"Improve diagnostics and recovery when parsing @synthesized definitions","Improve diagnostics and recovery when parsing @synthesized definitions\n\nllvm-svn: 89227"},
[f]={"7b6bc88c5aaf",1448524239,"[OPENMP 4.5] Fixed rules for \'ordered\' clause.","[OPENMP 4.5] Fixed rules for \'ordered\' clause.\nAccording to OpenMP 4.5 the parameter of \'ordered\' clause must be greater than or equal to the parameter of \'collapse\' clause. Patch adds this rule.\n\nllvm-svn: 254141"},
[j]={{"clang/lib/Parse/ParseObjc.cpp",2385,"///   property-synthesis:\n///     @synthesize property-ivar-list \';\'\n///\n///  property-ivar-list:\n///    property-ivar\n///    property-ivar-list \',\' property-ivar\n///\n///  property-ivar:\n///    identifier\n///    identifier \'=\' identifier\n///\nDecl *Parser::ParseObjCPropertySynthesize(SourceLocation atLoc) {\n // ...\n while (true) {\n   // ...\n   if (Tok.isNot(tok::identifier)) {\n     Diag(Tok, diag::err_synthesized_property_name);"}},
[b]={{n,9604,"/// Called on a for stmt to check itself and nested loops (if any).\n/// \\return Returns 0 if one of the collapsed stmts is not canonical for loop,\n/// number of collapsed loops otherwise.\nstatic unsigned checkOpenMPLoop(OpenMPDirectiveKind DKind, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Stmt *AStmt, Sema &SemaRef, DSAStackTy &DSA, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, OMPLoopBasedDirective::HelperExprs &Built) {\n // ...\n if (OrderedLoopCountExpr) {\n   // ...\n   if (!OrderedLoopCountExpr->isValueDependent() && OrderedLoopCountExpr->EvaluateAsInt(EVResult, SemaRef.getASTContext())) {\n     // ...\n     if (Result.getLimitedValue() < NestedLoopCount) {\n       SemaRef.Diag(OrderedLoopCountExpr->getExprLoc(), diag::err_omp_wrong_ordered_loop_count) << OrderedLoopCountExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/Parser/objc-synthesized-recover.m"]={"clang/test/Parser/objc-synthesized-recover.m:13:20: error: expected a property name in @synthesize"}
["clang/test/OpenMP/for_ordered_clause.cpp"]={"clang/test/OpenMP/for_ordered_clause.cpp:129:25: error: the parameter of the \'ordered\' clause must be greater than or equal to the parameter of the \'collapse\' clause","clang/test/OpenMP/for_ordered_clause.cpp:75:25: error: the parameter of the \'ordered\' clause must be greater than or equal to the parameter of the \'collapse\' clause"}
}
}
},
},
["err_synthesizing_arc_weak_property_disabled"]={
["err_omp_wrong_simdlen_safelen_values"]={
[b]="err_synthesizing_arc_weak_property_disabled",
[d]="err_omp_wrong_simdlen_safelen_values",
[c]="cannot synthesize weak property in file using manual reference counting",
[e]="the value of \'simdlen\' parameter must be less than or equal to the value of the \'safelen\' parameter",
[d]="cannot synthesize weak property in file using manual reference counting",
[i]="the value of \'simdlen\' parameter must be less than or equal to the value of the \'safelen\' parameter",
[e]=k,
[j]=k,
[g]="cannot synthesize weak property in file using manual reference counting",
[c]="the value of \'simdlen\' parameter must be less than or equal to the value of the \'safelen\' parameter",
[h]=a,
[h]=a,
[i]="ARC Weak References",
[g]=o,
[f]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:","Be more conservative about diagnosing \"incorrect\" uses of __weak:\nallow them to be written in certain kinds of user declaration and\ndiagnose on the use-site instead.\n\nAlso, improve and fix some diagnostics relating to __weak and\nproperties.\n\nrdar://23228631\n\nllvm-svn: 251384"},
[f]={"66b15b505fe1",1440155656,"[OPENMP 4.1] Initial support for \'simdlen\' clause.","[OPENMP 4.1] Initial support for \'simdlen\' clause.\nAdd parsing/sema analysis for \'simdlen\' clause in simd directives. Also add check that if both \'safelen\' and \'simdlen\' clauses are specified, the value of \'simdlen\' parameter is less than the value of \'safelen\' parameter.\n\nllvm-svn: 245692"},
[j]={{Jb,1253,"/// 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     } else {\n        if (!getLangOpts().ObjCWeak) {\n          // Only complain here when synthesizing an ivar.\n         if (!Ivar) {\n           Diag(PropertyDiagLoc, getLangOpts().ObjCWeakRuntime ? diag::err_synthesizing_arc_weak_property_disabled : diag::err_synthesizing_arc_weak_property_no_runtime);"}},
[b]={{n,10314,"static bool checkSimdlenSafelenSpecified(Sema &S, const ArrayRef<OMPClause *> Clauses) {\n  // ...\n  if (Simdlen && Safelen) {\n    // ...\n    // OpenMP 4.5 [2.8.1, simd Construct, Restrictions]\n   // If both simdlen and safelen clauses are specified, the value of the\n   // simdlen parameter must be less than or equal to the value of the safelen\n   // parameter.\n   if (SimdlenRes > SafelenRes) {\n     S.Diag(SimdlenLength->getExprLoc(), diag::err_omp_wrong_simdlen_safelen_values) << SimdlenLength->getSourceRange() << SafelenLength->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/mrc-no-weak.m"]={"clang/test/SemaObjC/mrc-no-weak.m:28:13: error: cannot synthesize weak property in file using manual reference counting","clang/test/SemaObjC/mrc-no-weak.m:34:1: error: cannot synthesize weak property in file using manual reference counting"}
["clang/test/OpenMP/target_simd_misc_messages.c"]={"clang/test/OpenMP/target_simd_misc_messages.c:482:33: error: the value of \'simdlen\' parameter must be less than or equal to the value of the \'safelen\' parameter","clang/test/OpenMP/target_simd_misc_messages.c:486:44: error: the value of \'simdlen\' parameter must be less than or equal to the value of the \'safelen\' parameter"}
}
}
},
},
["err_synthesizing_arc_weak_property_no_runtime"]={
["err_omp_wrong_var_in_declare_reduction"]={
[b]="err_synthesizing_arc_weak_property_no_runtime",
[d]="err_omp_wrong_var_in_declare_reduction",
[c]="cannot synthesize weak property because the current deployment target does not support weak references",
[e]="only %select{\'omp_priv\' or \'omp_orig\'|\'omp_in\' or \'omp_out\'}0 variables are allowed in %select{initializer|combiner}0 expression",
[d]="cannot synthesize weak property because the current deployment target does not support weak references",
[i]={{nil,nil,{"only ",{"\'omp_priv\' or \'omp_orig\'","\'omp_in\' or \'omp_out\'"}," variables are allowed in ",{"initializer","combiner"}," expression"}}},
[e]=k,
[j]=k,
[g]="cannot synthesize weak property because the current deployment target does not support weak references",
[c]="only (?:\'omp_priv\' or \'omp_orig\'|\'omp_in\' or \'omp_out\') variables are allowed in (?:initializer|combiner) expression",
[h]=a,
[h]=a,
[i]="ARC Weak References",
[g]=o,
[f]={"b61e14e5962a",1445921690,"Be more conservative about diagnosing \"incorrect\" uses of __weak:","Be more conservative about diagnosing \"incorrect\" uses of __weak:\nallow them to be written in certain kinds of user declaration and\ndiagnose on the use-site instead.\n\nAlso, improve and fix some diagnostics relating to __weak and\nproperties.\n\nrdar://23228631\n\nllvm-svn: 251384"},
[f]={"94a4f0cb5f8a",1456982499,"[OPENMP 4.0] Initial support for \'omp declare reduction\' construct.","[OPENMP 4.0] Initial support for \'omp declare reduction\' construct.\n\nAdd parsing, sema analysis and serialization/deserialization for \'declare reduction\' construct.\nUser-defined reductions are defined as\n\n#pragma omp declare reduction( reduction-identifier : typename-list : combiner ) [initializer ( initializer-expr )]\nThese custom reductions may be used in \'reduction\' clauses of OpenMP constructs. The combiner specifies how partial results can be combined into a single value. The\ncombiner can use the special variable identifiers omp_in and omp_out that are of the type of the variables being reduced with this reduction-identifier. Each of them will\ndenote one of the values to be combined before executing the combiner. It is assumed that the special omp_out identifier will refer to the storage that holds the resulting\ncombined value after executing the combiner.\nAs the initializer-expr value of a user-defined reduction is not known a priori the initializer-clause can be used to specify one. Then the contents of the initializer-clause\nwill be used as the initializer for private copies of reduction list items where the omp_priv identifier will refer to the storage to be initialized. The special identifier\nomp_orig can also appear in the initializer-clause and it will refer to the storage of the original variable to be reduced.\nDifferential Revision: http://reviews.llvm.org/D11182\n\nllvm-svn: 262582"},
[j]={{Jb,1254,"/// 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     } else {\n        if (!getLangOpts().ObjCWeak) {\n          // Only complain here when synthesizing an ivar.\n          if (!Ivar) {\n           Diag(PropertyDiagLoc, getLangOpts().ObjCWeakRuntime ? diag::err_synthesizing_arc_weak_property_disabled : diag::err_synthesizing_arc_weak_property_no_runtime);"}},
[b]={{E,346,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n // ...\n if (LangOpts.OpenMP && DRD && !CurContext->containsDecl(D) && isa<VarDecl>(D)) {\n   Diag(Loc, diag::err_omp_wrong_var_in_declare_reduction) << getCurFunction()->HasOMPDeclareReductionCombiner;"}},
[l]={
[l]={
["clang/test/SemaObjC/synthesized-ivar.m"]={"clang/test/SemaObjC/synthesized-ivar.m:60:13: error: cannot synthesize weak property because the current deployment target does not support weak references"}
["clang/test/OpenMP/declare_reduction_messages.c"]={"clang/test/OpenMP/declare_reduction_messages.c:24:50: error: only \'omp_in\' or \'omp_out\' variables are allowed in combiner expression","clang/test/OpenMP/declare_reduction_messages.c:24:50: error: only \'omp_in\' or \'omp_out\' variables are allowed in combiner expression","clang/test/OpenMP/declare_reduction_messages.c:25:60: error: only \'omp_in\' or \'omp_out\' variables are allowed in combiner expression","clang/test/OpenMP/declare_reduction_messages.c:25:60: error: only \'omp_in\' or \'omp_out\' variables are allowed in combiner expression","clang/test/OpenMP/declare_reduction_messages.c:27:59: error: only \'omp_in\' or \'omp_out\' variables are allowed in combiner expression","clang/test/OpenMP/declare_reduction_messages.c:37:76: error: only \'omp_priv\' or \'omp_orig\' variables are allowed in initializer expression"}
}
}
},
},
["err_systemz_invalid_tabort_code"]={
["err_only_annotate_after_access_spec"]={
[b]="err_systemz_invalid_tabort_code",
[d]="err_only_annotate_after_access_spec",
[c]="invalid transaction abort code",
[e]="access specifier can only have annotation attributes",
[d]="invalid transaction abort code",
[i]="access specifier can only have annotation attributes",
[e]=k,
[j]=k,
[g]="invalid transaction abort code",
[c]="access specifier can only have annotation attributes",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"3a610ebf1e7c",1427892865,"[SystemZ] Support transactional execution on zEC12","[SystemZ] Support transactional execution on zEC12\n\nThe zEC12 provides the transactional-execution facility.  This is exposed\nto users via a set of builtin routines on other compilers. This patch\nadds clang support to enable those builtins.  In partciular, the patch:\n\n- enables the transactional-execution feature by default on zEC12\n- allows to override presence of that feature via the -mhtm/-mno-htm options\n- adds a predefined macro __HTM__ if the feature is enabled\n- adds support for the transactional-execution GCC builtins\n- adds Sema checking to verify the __builtin_tabort abort code\n- adds the s390intrin.h header file (for GCC compatibility)\n- adds s390 sections to the htmintrin.h and htmxlintrin.h header files\n\nSince this is first use of target-specific intrinsics on the platform,\nthe patch creates the include/clang/Basic/BuiltinsSystemZ.def file and\nhooks it up in TargetBuiltins.h and lib/Basic/Targets.cpp.\n\nAn associated LLVM patch adds the required LLVM IR intrinsics.\n\nFor reference, the transactional-execution instructions are documented\nin the z/Architecture Principles of Operation for the zEC12:\nhttp://publibfp.boulder.ibm.com/cgi-bin/bookmgr/download/DZ9ZR009.pdf\nThe associated builtins are documented in the GCC manual:\nhttp://gcc.gnu.org/onlinedocs/gcc/S_002f390-System-z-Built-in-Functions.html\nThe htmxlintrin.h intrinsics provided for compatibility with the IBM XL\ncompiler are documented in the \"z/OS XL C/C++ Programming Guide\".\n\nllvm-svn: 233804"},
[f]={"ca98f2a63f94",1318498892,"Allow for annotate attributes after access specifiers. When such","Allow for annotate attributes after access specifiers. When such\nattributes are found, propagate them to subsequent declarations.\n\nllvm-svn: 141861"},
[j]={{w,5332,"bool Sema::CheckSystemZBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  if (BuiltinID == SystemZ::BI__builtin_tabort) {\n    // ...\n    if (std::optional<llvm::APSInt> AbortCode = Arg->getIntegerConstantExpr(Context))\n      if (AbortCode->getSExtValue() >= 0 && AbortCode->getSExtValue() < 256)\n        return Diag(Arg->getBeginLoc(), diag::err_systemz_invalid_tabort_code) << Arg->getSourceRange();"}},
[b]={{Q,9600,"// Annotation attributes are the only attributes allowed after an access\n// specifier.\nbool Sema::ProcessAccessDeclAttributeList(AccessSpecDecl *ASDecl, const ParsedAttributesView &AttrList) {\n  for (const ParsedAttr &AL : AttrList) {\n    if (AL.getKind() == ParsedAttr::AT_Annotate) {\n    // ...\n    } else {\n      Diag(AL.getLoc(), diag::err_only_annotate_after_access_spec);"}},
[l]={
[l]={
["clang/test/CodeGen/SystemZ/builtins-systemz-error.c"]={"clang/test/CodeGen/SystemZ/builtins-systemz-error.c:6:21: error: invalid transaction abort code","clang/test/CodeGen/SystemZ/builtins-systemz-error.c:7:21: error: invalid transaction abort code"}
["clang/test/Parser/access-spec-attrs.cpp"]={"clang/test/Parser/access-spec-attrs.cpp:4:23: error: access specifier can only have annotation attributes"}
}
}
},
},
["err_tag_definition_of_typedef"]={
["err_only_constructors_take_base_inits"]={
[b]="err_tag_definition_of_typedef",
[d]="err_only_constructors_take_base_inits",
[c]="definition of type %0 conflicts with %select{typedef|type alias}1 of the same name",
[e]="only constructors take base initializers",
[d]={{nil,nil,{"definition of type A conflicts with ",{"typedef","type alias"}," of the same name"}}},
[i]="only constructors take base initializers",
[e]=k,
[j]=k,
[g]="definition of type (.*?) conflicts with (?:typedef|type alias) of the same name",
[c]="only constructors take base initializers",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"75fdaa465f4c",1237949897,"Improve handling of base initializers. We now parse initializers in out of line decls, such as:","Improve handling of base initializers. We now parse initializers in out of line decls, such as:\n\nclass C {\n   C() { }\n   \n   int a;\n};\n\nC::C() : a(10) { }\n\nWe also diagnose when initializers are used on declarations that aren\'t constructors:\n\nt.cpp:1:10: error: only constructors take base initializers\nvoid f() : a(10) { }\n         ^\n\nDoug and/or Sebastian: I\'d appreciate a review, especially the nested-name-spec test results (from the looks of it we now match gcc in that test.)\n\nllvm-svn: 67672"},
[j]={{t,17451,"/// 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   // ...\n   } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n     // ...\n      } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n      // ...\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n     // ...\n     } else if (TypedefNameDecl *TND = dyn_cast<TypedefNameDecl>(PrevDecl)) {\n       // ...\n        Diag(NameLoc, diag::err_tag_definition_of_typedef) << Name << Kind << TND->getUnderlyingType();"}},
[b]={{y,5702,"/// ActOnMemInitializers - Handle the member initializers for a constructor.\nvoid Sema::ActOnMemInitializers(Decl *ConstructorDecl, SourceLocation ColonLoc, ArrayRef<CXXCtorInitializer *> MemInits, bool AnyErrors) {\n // ...\n if (!Constructor) {\n   Diag(ColonLoc, diag::err_only_constructors_take_base_inits);"}},
[l]={
[l]={
["clang/test/SemaCXX/typedef-redecl.cpp"]={"clang/test/SemaCXX/typedef-redecl.cpp:17:8: error: definition of type \'Y2\' conflicts with typedef of the same name"}
["clang/test/Parser/cxx-invalid-function-decl.cpp"]={"clang/test/Parser/cxx-invalid-function-decl.cpp:7:11: error: only constructors take base initializers","clang/test/Parser/cxx-invalid-function-decl.cpp:10:11: error: only constructors take base initializers","clang/test/Parser/cxx-invalid-function-decl.cpp:14:11: error: only constructors take base initializers"}
}
}
},
},
["err_tag_index_out_of_range"]={
["err_only_enums_have_underlying_types"]={
[b]={{nil,A,"err_tag_index_out_of_range"}},
[d]="err_only_enums_have_underlying_types",
[c]={{nil,A,"%select{type tag|argument}0 index %1 is greater than the number of arguments specified"}},
[e]="only enumeration types have underlying types",
[d]={{nil,A,{{"type tag","argument"}," index B is greater than the number of arguments specified"}}},
[i]="only enumeration types have underlying types",
[e]=k,
[j]=k,
[g]="(?:type tag|argument) index (.*?) is greater than the number of arguments specified",
[c]="only enumeration types have underlying types",
[h]=a,
[h]=a,
[i]={{nil,A,m}},
[g]=m,
[f]={"d1f6dcd1f548",1511997014,"Perform a bounds check on a function\'s argument list before accessing any index value specified by a...","Perform a bounds check on a function\'s argument list before accessing any index value specified by an \'argument_with_type_tag\' attribute. Fixes PR28520.\n\nPatch by Matt Davis.\n\nllvm-svn: 319383"},
[f]={"4a2570792c75",1305783465,"Implement __underlying_type for libc++.","Implement __underlying_type for libc++.\n\nllvm-svn: 131633"},
[j]={{w,18384,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n  // ...\n  if (TypeTagIdxAST >= ExprArgs.size()) {\n    Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 0 << Attr->getTypeTagIdx().getSourceIndex();"},{w,18404,"void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr, const ArrayRef<const Expr *> ExprArgs, SourceLocation CallSiteLoc) {\n  // ...\n  if (ArgumentIdxAST >= ExprArgs.size()) {\n    Diag(CallSiteLoc, diag::err_tag_index_out_of_range) << 1 << Attr->getArgumentIdx().getSourceIndex();"}},
[b]={{H,9522,"QualType Sema::BuiltinEnumUnderlyingType(QualType BaseType, SourceLocation Loc) {\n  if (!BaseType->isEnumeralType()) {\n    Diag(Loc, diag::err_only_enums_have_underlying_types);"}},
[l]={
[l]={
["clang/test/Sema/error-type-safety.cpp"]={"clang/test/Sema/error-type-safety.cpp:45:22: error: type tag index 2 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:46:24: error: type tag index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:47:26: error: type tag index 2 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:48:28: error: type tag index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:50:35: error: argument index 3 is greater than the number of arguments specified","clang/test/Sema/error-type-safety.cpp:51:37: error: argument index 4 is greater than the number of arguments specified"}
["clang/test/SemaCXX/underlying_type.cpp"]={"clang/test/SemaCXX/underlying_type.cpp:14:1: error: only enumeration types have underlying types","clang/test/SemaCXX/underlying_type.cpp:15:1: error: only enumeration types have underlying types","clang/test/SemaCXX/underlying_type.cpp:31:11: error: only enumeration types have underlying types"}
}
}
},
},
["err_tag_reference_conflict"]={
["err_opencl_addrspace_scope"]={
[b]="err_tag_reference_conflict",
[d]={{nil,q,"err_opencl_addrspace_scope"}},
[c]="implicit declaration introduced by elaborated type conflicts with a %select{non-struct type|non-class type|non-union type|non-enum type|typedef|type alias|template|type alias template|template template argument}0 of the same name",
[e]={{nil,q,"variables in the %0 address space can only be declared in the outermost scope of a kernel function"}},
[d]={{nil,nil,{"implicit declaration introduced by elaborated type conflicts with a ",{"non-struct type","non-class type","non-union type","non-enum type","typedef","type alias",hc,"type alias template","template template argument"}," of the same name"}}},
[i]={{nil,q,"variables in the A address space can only be declared in the outermost scope of a kernel function"}},
[e]=k,
[j]=k,
[g]="implicit declaration introduced by elaborated type conflicts with a (?:non\\-struct type|non\\-class type|non\\-union type|non\\-enum type|typedef|type alias|template|type alias template|template template argument) of the same name",
[c]="variables in the (.*?) address space can only be declared in the outermost scope of a kernel function",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,q,m}},
[f]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same","C++ doesn\'t really use \"namespaces\" for different kinds of names the same\nway that C does.  Among other differences, elaborated type specifiers\nare defined to skip \"non-types\", which, as you might imagine, does not\ninclude typedefs.  Rework our use of IDNS masks to capture the semantics\nof different kinds of declarations better, and remove most current lookup\nfilters.  Removing the last remaining filter is more complicated and will\nhappen in a separate patch.\n\nFixes PR 6885 as well some spectrum of unfiled bugs.\n\nllvm-svn: 102164"},
[f]={"e437b6a52b7d",1497970245,"[OpenCL] Diagnose scoped address-space qualified variables","[OpenCL] Diagnose scoped address-space qualified variables\n\nProduce an error if variables qualified with a local or\na constant address space are not declared in the outermost\nscope of a kernel.\n\nPatch by Simon Perretta.\n\nDifferential Revision: https://reviews.llvm.org/D34024\n\nllvm-svn: 305798"},
[j]={{t,17442,"/// 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    // ...\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n     // ...\n     } else if (!isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n     // ...\n      } else if (TUK == TUK_Reference || TUK == TUK_Friend) {\n       // ...\n       Diag(NameLoc, diag::err_tag_reference_conflict) << NTK;"}},
[b]={{G,8624,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (getLangOpts().OpenCL) {\n   // ...\n   // FIXME: Adding local AS in C++ for OpenCL might make sense.\n   if (NewVD->isFileVarDecl() || NewVD->isStaticLocal() || NewVD->hasExternalStorage()) {\n    // ...\n   } else {\n     // ...\n      if (T.getAddressSpace() == LangAS::opencl_constant || T.getAddressSpace() == LangAS::opencl_local) {\n       // ...\n       // OpenCL v2.0 s6.5.2 and s6.5.3: local and constant variables must be\n       // in the outermost scope of a kernel function.\n        if (FD && FD->hasAttr<OpenCLKernelAttr>()) {\n          if (!getCurScope()->isFunctionScope()) {\n           if (T.getAddressSpace() == LangAS::opencl_constant)\n              Diag(NewVD->getLocation(), diag::err_opencl_addrspace_scope) << \"constant\";"},{G,8627,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    // ...\n    // FIXME: Adding local AS in C++ for OpenCL might make sense.\n    if (NewVD->isFileVarDecl() || NewVD->isStaticLocal() || NewVD->hasExternalStorage()) {\n    // ...\n    } else {\n      // ...\n      if (T.getAddressSpace() == LangAS::opencl_constant || T.getAddressSpace() == LangAS::opencl_local) {\n       // ...\n        // OpenCL v2.0 s6.5.2 and s6.5.3: local and constant variables must be\n       // in the outermost scope of a kernel function.\n        if (FD && FD->hasAttr<OpenCLKernelAttr>()) {\n          if (!getCurScope()->isFunctionScope()) {\n           if (T.getAddressSpace() == LangAS::opencl_constant)\n           // ...\n           else\n              Diag(NewVD->getLocation(), diag::err_opencl_addrspace_scope) << \"local\";"}},
[l]={
[l]={
["clang/test/SemaCXX/elaborated-type-specifier.cpp"]={"clang/test/SemaCXX/elaborated-type-specifier.cpp:61:10: error: implicit declaration introduced by elaborated type conflicts with a template of the same name"}
["clang/test/SemaOpenCL/storageclass.cl"]={"clang/test/SemaOpenCL/storageclass.cl:133:15: error: variables in the local address space can only be declared in the outermost scope of a kernel function","clang/test/SemaOpenCL/storageclass.cl:134:18: error: variables in the constant address space can only be declared in the outermost scope of a kernel function"}
}
}
},
},
["err_tag_reference_non_tag"]={
["err_opencl_atomic_init"]={
[b]="err_tag_reference_non_tag",
[d]={{nil,q,"err_opencl_atomic_init"}},
[c]="%select{non-struct type|non-class type|non-union type|non-enum type|typedef|type alias|template|type alias template|template template argument}1 %0 cannot be referenced with a %select{struct|interface|union|class|enum}2 specifier",
[e]={{nil,q,"atomic variable can be %select{assigned|initialized}0 to a variable only in global address space"}},
[d]={{nil,nil,{{"non-struct type","non-class type","non-union type","non-enum type","typedef","type alias",hc,"type alias template","template template argument"}," A cannot be referenced with a ",{oc,pc,rc,Lb,xc}," specifier"}}},
[i]={{nil,q,{"atomic variable can be ",{"assigned","initialized"}," to a variable only in global address space"}}},
[e]=k,
[j]=k,
[g]="(?:non\\-struct type|non\\-class type|non\\-union type|non\\-enum type|typedef|type alias|template|type alias template|template template argument) (.*?) cannot be referenced with a (?:struct|interface|union|class|enum) specifier",
[c]="atomic variable can be (?:assigned|initialized) to a variable only in global address space",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,q,m}},
[f]={"a245671ae003",1271990501,"C++ doesn\'t really use \"namespaces\" for different kinds of names the same","C++ doesn\'t really use \"namespaces\" for different kinds of names the same\nway that C does. Among other differences, elaborated type specifiers\nare defined to skip \"non-types\", which, as you might imagine, does not\ninclude typedefs.  Rework our use of IDNS masks to capture the semantics\nof different kinds of declarations better, and remove most current lookup\nfilters.  Removing the last remaining filter is more complicated and will\nhappen in a separate patch.\n\nFixes PR 6885 as well some spectrum of unfiled bugs.\n\nllvm-svn: 102164"},
[f]={"3bccec5da7e5",1491396430,"[OpenCL] Extended diagnostics for atomic initialization","[OpenCL] Extended diagnostics for atomic initialization\n\nSummary:\nI saw the same changes in the following review: https://reviews.llvm.org/D17438\n\nI don\'t know in that way I could determine that atomic variable was initialized by macro ATOMIC_VAR_INIT. Anyway I added check that atomic variables can be initialize only in global scope.\nI think that we can discuss this change.\n\nReviewers: Anastasia, cfe-commits\n\nReviewed By: Anastasia\n\nSubscribers: bader, yaxunl\n\nDifferential Revision: https://reviews.llvm.org/D30643\n\nllvm-svn: 299537"},
[j]={{t,17429,"/// 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    // ...\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n     if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n       // ...\n        Diag(NameLoc, diag::err_tag_reference_non_tag) << PrevDecl << NTK << Kind;"},{o,4284,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  // ...\n  if (TypeAliasTemplateDecl *TAT = dyn_cast_or_null<TypeAliasTemplateDecl>(Template.getAsTemplateDecl())) {\n    // ...\n    Diag(TemplateLoc, diag::err_tag_reference_non_tag) << TAT << NTK_TypeAliasTemplate << TagKind;"},{o,9963,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  // ...\n  if (!ClassTemplate) {\n    // ...\n    Diag(TemplateNameLoc, diag::err_tag_reference_non_tag) << TD << NTK << Kind;"}},
[b]={{E,15683,"/// CreateBuiltinBinOp - Creates a new built-in binary operation with\n/// operator @p Opc at location @c TokLoc. This routine only supports\n/// built-in operations; ActOnBinOp handles overloaded operators.\nExprResult Sema::CreateBuiltinBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    // ...\n    // OpenCLC v2.0 s6.13.11.1 allows atomic variables to be initialized by\n    // the ATOMIC_VAR_INIT macro.\n   if (LHSTy->isAtomicType() || RHSTy->isAtomicType()) {\n     // ...\n      if (BO_Assign == Opc)\n        Diag(OpLoc, diag::err_opencl_atomic_init) << 0 << SR;"},{kb,8630,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  if (S.getLangOpts().OpenCLVersion >= 200 && ETy->isAtomicType() && !HasGlobalAS && Entity.getKind() == InitializedEntity::EK_Variable && Args.size() > 0) {\n    S.Diag(Args[0]->getBeginLoc(), diag::err_opencl_atomic_init) << 1 << SourceRange(Entity.getDecl()->getBeginLoc(), Args[0]->getEndLoc());"}},
[l]={
[l]={
["clang/test/SemaCXX/PR8755.cpp"]={"clang/test/SemaCXX/PR8755.cpp:10:17: error: typedef \'iterator\' cannot be referenced with a class specifier"}
["clang/test/SemaOpenCL/atomic-init.cl"]={"clang/test/SemaOpenCL/atomic-init.cl:6:6: error: atomic variable can be assigned to a variable only in global address space","clang/test/SemaOpenCL/atomic-init.cl:7:19: error: atomic variable can be initialized to a variable only in global address space","clang/test/SemaOpenCL/atomic-init.cl:8:27: error: atomic variable can be initialized to a variable only in global address space"}
}
}
},
},
["err_tagless_friend_type_template"]={
["err_opencl_bitfields"]={
[b]="err_tagless_friend_type_template",
[d]="err_opencl_bitfields",
[c]="friend type templates must use an elaborated type",
[e]="bit-fields are not supported in OpenCL",
[d]="friend type templates must use an elaborated type",
[i]="bit-fields are not supported in OpenCL",
[e]=k,
[j]=k,
[g]="friend type templates must use an elaborated type",
[c]="bit\\-fields are not supported in OpenCL",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"11083da4d0aa",1253141228,"Improved representation and support for friend class templates. Angst about same.","Improved representation and support for friend class templates. Angst about same.\n\nllvm-svn: 82088"},
[f]={"1d58cdbf4e17",1358444100,"Add some semantic checks for OpenCL. Variadic macros, VLAs and bitfields are not supported.","Add some semantic checks for OpenCL. Variadic macros, VLAs and bitfields are not supported.\n\nllvm-svn: 172732"},
[j]={{C,17444,"/// Handle a friend type declaration. This works in tandem with\n/// ActOnTag.\n///\n/// Notes on friend class templates:\n///\n/// We generally treat friend class declarations as if they were\n/// declaring a class.  So, for example, the elaborated type specifier\n/// in a friend declaration is required to obey the restrictions of a\n/// class-head (i.e. no typedefs in the scope chain), template\n/// parameters are required to match up with simple template-ids, &c.\n/// However, unlike when declaring a template specialization, it\'s\n/// okay to refer to a template specialization without an empty\n/// template parameter declaration, e.g.\n///  friend class A<T>::B<unsigned>;\n/// We permit this as a special case; if there are any template\n/// parameters present at all, require proper matching, i.e.\n///   template <> template \\<class T> friend class A<int>::B;\nDecl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS, MultiTemplateParamsArg TempParams) {\n  // ...\n  // This is definitely an error in C++98. It\'s probably meant to\n // be forbidden in C++0x, too, but the specification is just\n // poorly written.\n  //\n  // The problem is with declarations like the following:\n //  template <T> friend A<T>::foo;\n  // where deciding whether a class C is a friend or not now hinges\n  // on whether there exists an instantiation of A that causes\n  // \'foo\' to equal C. There are restrictions on class-heads\n // (which we declare (by fiat) elaborated friend declarations to\n  // be) that makes this tractable.\n  //\n  // FIXME: handle \"template <> friend class A<T>;\", which\n  // is possibly well-formed?  Who even knows?\n  if (TempParams.size() && !T->isElaboratedTypeSpecifier()) {\n   Diag(Loc, diag::err_tagless_friend_type_template) << DS.getSourceRange();"}},
[b]={{G,18144,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  // ...\n  if (LangOpts.OpenCL) {\n   // ...\n   // OpenCL v1.2 s6.9.c: bitfields are not supported, unless Clang extension\n   // is enabled.\n   if (BitWidth && !getOpenCLOptions().isAvailableOption(\"__cl_clang_bitfields\", LangOpts)) {\n     Diag(Loc, diag::err_opencl_bitfields);"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.decls/temp.friend/p3.cpp"]={"clang/test/CXX/temp/temp.decls/temp.friend/p3.cpp:11:22: error: friend type templates must use an elaborated type"}
["clang/test/SemaOpenCL/unsupported.cl"]={"clang/test/SemaOpenCL/unsupported.cl:9:7: error: bit-fields are not supported in OpenCL"}
}
}
},
},
["err_target_clone_doesnt_match"]={
["err_opencl_block_ref_block"]={
[b]={{nil,z,"err_target_clone_doesnt_match"}},
[d]={{nil,q,"err_opencl_block_ref_block"}},
[c]={{nil,z,"\'target_clones\' attribute does not match previous declaration"}},
[e]={{nil,q,"cannot refer to a block inside block"}},
[d]={{nil,z,"\'target_clones\' attribute does not match previous declaration"}},
[i]={{nil,q,"cannot refer to a block inside block"}},
[e]=k,
[j]=k,
[g]="\'target_clones\' attribute does not match previous declaration",
[c]="cannot refer to a block inside block",
[h]=a,
[h]=a,
[i]={{nil,z,y}},
[g]={{nil,q,m}},
[f]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
[f]={"9d98a316c5c3",1487243610,"[OpenCL] Disallow blocks capture other blocks (v2.0, s6.12.5)","[OpenCL] Disallow blocks capture other blocks (v2.0, s6.12.5)\n\nllvm-svn: 295307"},
[j]={{t,11477,"/// 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::TargetClones: {\n      // ...\n     if (CurClones && NewClones && (CurClones->featuresStrs_size() != NewClones->featuresStrs_size() || !std::equal(CurClones->featuresStrs_begin(), CurClones->featuresStrs_end(), NewClones->featuresStrs_begin()))) {\n       S.Diag(NewFD->getLocation(), diag::err_target_clone_doesnt_match);"}},
[b]={{E,19208,"// 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  // OpenCL v2.0 s6.12.5: Blocks cannot reference/capture other blocks\n if (S.getLangOpts().OpenCL && IsBlock && Var->getType()->isBlockPointerType()) {\n    if (Diagnose)\n     S.Diag(Loc, diag::err_opencl_block_ref_block);"}},
[l]={
[l]={
["clang/test/Sema/attr-target-clones-aarch64.c"]={"clang/test/Sema/attr-target-clones-aarch64.c:27:92: error: \'target_clones\' attribute does not match previous declaration","clang/test/Sema/attr-target-clones-aarch64.c:37:65: error: \'target_clones\' attribute does not match previous declaration"}
[U]={"clang/test/SemaOpenCL/invalid-block.cl:84:13: error: cannot refer to a block inside block","clang/test/SemaOpenCL/invalid-block.cl:89:5: error: cannot refer to a block inside block"}
}
}
},
},
["err_target_clone_must_have_default"]={
["err_opencl_block_storage_type"]={
[b]={{nil,z,"err_target_clone_must_have_default"}},
[d]="err_opencl_block_storage_type",
[c]={{nil,z,"\'target_clones\' multiversioning requires a default target"}},
[e]="the __block storage type is not permitted",
[d]={{nil,z,"\'target_clones\' multiversioning requires a default target"}},
[i]="the __block storage type is not permitted",
[e]=k,
[j]=k,
[g]="\'target_clones\' multiversioning requires a default target",
[c]="the __block storage type is not permitted",
[h]=a,
[h]=a,
[i]={{nil,z,y}},
[g]=m,
[f]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
[f]={yb,1457011999,xb,wb},
[j]={{M,3654,"static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!HasDefault) {\n    S.Diag(AL.getLoc(), diag::err_target_clone_must_have_default);"}},
[b]={{G,8559,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (getLangOpts().OpenCL) {\n   // ...\n   // OpenCL v2.0 s6.12.5 - The __block storage type is not supported.\n   if (NewVD->hasAttr<BlocksAttr>()) {\n     Diag(NewVD->getLocation(), diag::err_opencl_block_storage_type);"}},
[l]={
["clang/test/Sema/attr-target-clones.c"]={"clang/test/Sema/attr-target-clones.c:4:21: error: \'target_clones\' multiversioning requires a default target"}
}
},
["err_target_unknown_abi"]={
[b]="err_target_unknown_abi",
[c]="unknown target ABI \'%0\'",
[d]="unknown target ABI \'A\'",
[e]=k,
[g]="unknown target ABI \'(.*?)\'",
[h]=a,
[i]=y,
[f]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets.","Add TargetOptions and use it when constructing targets.\n - This ended up being hard to factor, sorry for the large diff.\n\n - Some post-commit cleanup to come.\n\nllvm-svn: 88833"},
[j]={{wc,809,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n // ...\n // Set the target ABI if specified.\n  if (!Opts->ABI.empty() && !Target->setABI(Opts->ABI)) {\n    Diags.Report(diag::err_target_unknown_abi) << Opts->ABI;"}}
},
["err_target_unknown_cpu"]={
[b]="err_target_unknown_cpu",
[c]="unknown target CPU \'%0\'",
[d]="unknown target CPU \'A\'",
[e]=k,
[g]="unknown target CPU \'(.*?)\'",
[h]=a,
[i]=y,
[f]={"acde99ea522d",1261161757,"ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX).","ARM: Fix predefines (__ARM_ARCH_..., __REGISTER_PREFIX).\n - This should be done leveraging the backend, but I\'m a little refactored\n  out. I\'ll fix it one day, I promise.\n\nllvm-svn: 91700"},
[j]={{wc,788,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // ...\n  // Set the target CPU if specified.\n  if (!Opts->CPU.empty() && !Target->setCPU(Opts->CPU)) {\n   Diags.Report(diag::err_target_unknown_cpu) << Opts->CPU;"},{wc,799,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // ...\n  // Check the TuneCPU name if specified.\n  if (!Opts->TuneCPU.empty() && !Target->isValidTuneCPUName(Opts->TuneCPU)) {\n    Diags.Report(diag::err_target_unknown_cpu) << Opts->TuneCPU;"}},
[l]={
[l]={
["clang/test/Preprocessor/predefined-arch-macros.c"]={"error: unknown target CPU \'amdgcn\'"}
[U]={"clang/test/SemaOpenCL/invalid-block.cl:47:15: error: the __block storage type is not permitted"}
}
}
},
},
["err_target_unknown_fpmath"]={
["err_opencl_builtin_expected_type"]={
[b]="err_target_unknown_fpmath",
[d]={{nil,q,"err_opencl_builtin_expected_type"}},
[c]="unknown FP unit \'%0\'",
[e]={{nil,q,"illegal call to %0, expected %1 argument type"}},
[d]="unknown FP unit \'A\'",
[i]={{nil,q,"illegal call to A, expected B argument type"}},
[e]=k,
[j]=k,
[g]="unknown FP unit \'(.*?)\'",
[c]="illegal call to (.*?), expected (.*?) argument type",
[h]=a,
[i]=y,
[f]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86.","Move -mfpmath handling to -cc1 and implement it for x86.\n\nThe original idea was to implement it all on the driver, but to do that the\ndriver needs to know the sse level and to do that it has to know the default\nfeatures of a cpu.\n\nBenjamin Kramer pointed out that if one day we decide to implement support for\n\' __attribute__ ((__target__ (\"arch=core2\")))\', then the frontend needs to\nkeep its knowledge of default features of a cpu.\n\nTo avoid duplicating which part of clang handles default cpu features,\nit is probably better to handle -mfpmath in the frontend.\n\nFor ARM this patch is just a small improvement. Instead of a cpu list, we\ncheck if neon is enabled, which allows us to reject things like\n\n-mcpu=cortex-a9 -mfpu=vfp -mfpmath=neon\n\nFor X86, since LLVM doesn\'t support an independent ssefp feature, we just\nmake sure the selected -mfpmath matches the sse level.\n\nllvm-svn: 188939"},
[j]={{wc,815,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // ...\n  // Set the fp math unit.\n  if (!Opts->FPMath.empty() && !Target->setFPMath(Opts->FPMath)) {\n    Diags.Report(diag::err_target_unknown_fpmath) << Opts->FPMath;"}}
},
["err_target_unknown_triple"]={
[b]="err_target_unknown_triple",
[c]="unknown target triple \'%0\'",
[d]="unknown target triple \'A\'",
[e]=k,
[g]="unknown target triple \'(.*?)\'",
[h]=a,
[i]=y,
[f]={"b9bbd54fdb5b",1258267726,"Add TargetOptions and use it when constructing targets.","Add TargetOptions and use it when constructing targets.\n - This ended up being hard to factor, sorry for the large diff.\n\n - Some post-commit cleanup to come.\n\nllvm-svn: 88833"},
[j]={{wc,781,"/// CreateTargetInfo - Return the target info object for the specified target\n/// options.\nTargetInfo *TargetInfo::CreateTargetInfo(DiagnosticsEngine &Diags, const std::shared_ptr<TargetOptions> &Opts) {\n  // ...\n  if (!Target) {\n    Diags.Report(diag::err_target_unknown_triple) << Triple.str();"},{"clang/lib/Driver/ToolChains/CrossWindows.cpp",98,"void tools::CrossWindows::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  default:\n    D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();"},{"clang/lib/Driver/ToolChains/Gnu.cpp",453,"void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (const char *LDMOption = getLDMOption(ToolChain.getTriple(), Args)) {\n  // ...\n  } else {\n    D.Diag(diag::err_target_unknown_triple) << Triple.str();"},{"clang/lib/Driver/ToolChains/MinGW.cpp",139,"void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  default:\n    D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str();"},{"clang/tools/driver/cc1as_main.cpp",390,"static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, DiagnosticsEngine &Diags) {\n  // ...\n  if (!TheTarget)\n    return Diags.Report(diag::err_target_unknown_triple) << Opts.Triple;"},{"clang/tools/driver/cc1as_main.cpp",574,"static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts, DiagnosticsEngine &Diags) {\n  // ...\n  if (!TAP)\n    Failed = Diags.Report(diag::err_target_unknown_triple) << Opts.Triple;"},{"clang/unittests/Basic/DiagnosticTest.cpp",42,"// Check that DiagnosticErrorTrap works with SuppressAllDiagnostics.\nTEST(DiagnosticTest, suppressAndTrap) {\n  // ...\n  {\n    // ...\n    Diags.Report(diag::err_target_unknown_triple) << \"unknown\";"}}
},
["err_target_unsupported_abi"]={
[b]="err_target_unsupported_abi",
[c]="ABI \'%0\' is not supported on CPU \'%1\'",
[d]="ABI \'A\' is not supported on CPU \'B\'",
[e]=k,
[g]="ABI \'(.*?)\' is not supported on CPU \'(.*?)\'",
[h]=a,
[i]=y,
[f]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases.","[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases.\n\nSummary:\nThe validity of ABI/CPU pairs is no longer checked on the fly but is\ninstead checked after initialization. As a result, invalid CPU/ABI pairs\ncan be reported as being known but invalid instead of being unknown. For\nexample, we now emit:\n  error: ABI \'n32\' is not supported on CPU \'mips32r2\'\ninstead of:\n  error: unknown target ABI \'n64\'\n\nReviewers: atanasyan\n\nSubscribers: sdardis, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D21023\n\nllvm-svn: 272645"},
[j]={{"clang/lib/Basic/Targets/Mips.cpp",245,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // ...\n  // 64-bit ABI\'s require 64-bit CPU\'s.\n  if (!processorSupportsGPR64() && (ABI == \"n32\" || ABI == \"n64\")) {\n    Diags.Report(diag::err_target_unsupported_abi) << ABI << CPU;"}}
},
["err_target_unsupported_abi_for_triple"]={
[b]="err_target_unsupported_abi_for_triple",
[c]="ABI \'%0\' is not supported for \'%1\'",
[d]="ABI \'A\' is not supported for \'B\'",
[e]=k,
[g]="ABI \'(.*?)\' is not supported for \'(.*?)\'",
[h]=a,
[i]=y,
[f]={"32b2d6b1602b",1465894730,"[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases.","[mips] Defer validity check for CPU/ABI pairs and improve error message for invalid cases.\n\nSummary:\nThe validity of ABI/CPU pairs is no longer checked on the fly but is\ninstead checked after initialization. As a result, invalid CPU/ABI pairs\ncan be reported as being known but invalid instead of being unknown. For\nexample, we now emit:\n  error: ABI \'n32\' is not supported on CPU \'mips32r2\'\ninstead of:\n  error: unknown target ABI \'n64\'\n\nReviewers: atanasyan\n\nSubscribers: sdardis, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D21023\n\nllvm-svn: 272645"}
},
["err_target_unsupported_arch"]={
[b]="err_target_unsupported_arch",
[c]="the target architecture \'%0\' is not supported by the target \'%1\'",
[d]="the target architecture \'A\' is not supported by the target \'B\'",
[e]=k,
[g]="the target architecture \'(.*?)\' is not supported by the target \'(.*?)\'",
[h]=a,
[i]=y,
[f]={"f4c9e49f9449",1396643479,"Driver: add target definition for Windows on ARM","Driver: add target definition for Windows on ARM\n\nThis introduces the definitions needed for the Windows on ARM target.  Add\ntarget definitions for both the MSVC environment and the MSVC + Itanium C++ ABI\nenvironment.  The Visual Studio definitions correspond to the definitions\nprovided by Visual Studio 2012.\n\nllvm-svn: 205650"},
[j]={{"clang/lib/Driver/ToolChains/Clang.cpp",4778,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (Triple.isOSWindows() && (Triple.getArch() == llvm::Triple::arm || Triple.getArch() == llvm::Triple::thumb)) {\n    // ...\n    if (Failure || Version < 7)\n      D.Diag(diag::err_target_unsupported_arch) << Triple.getArchName() << TripleStr;"},{"clang/lib/Driver/ToolChains/Myriad.cpp",220,"MyriadToolChain::MyriadToolChain(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) : Generic_ELF(D, Triple, Args) {\n  // ...\n  default:\n    D.Diag(clang::diag::err_target_unsupported_arch) << Triple.getArchName() << \"myriad\";"},{"clang/lib/Driver/ToolChains/NaCl.cpp",99,"// This is quite similar to gnutools::Linker::ConstructJob with changes that\n// we use static by default, do not yet support sanitizers or LTO, and a few\n// others. Eventually we can support more of that and hopefully migrate back\n// to gnutools::Linker.\nvoid nacltools::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (Arch == llvm::Triple::x86)\n  // ...\n  else if (Arch == llvm::Triple::arm)\n  // ...\n  else if (Arch == llvm::Triple::x86_64)\n  // ...\n  else if (Arch == llvm::Triple::mipsel)\n  // ...\n  else\n    D.Diag(diag::err_target_unsupported_arch) << ToolChain.getArchName() << \"Native Client\";"}}
},
["err_target_unsupported_cpu_for_micromips"]={
[b]={{nil,A,"err_target_unsupported_cpu_for_micromips"}},
[c]={{nil,A,"micromips is not supported for target CPU \'%0\'"}},
[d]={{nil,A,"micromips is not supported for target CPU \'A\'"}},
[e]=k,
[g]="micromips is not supported for target CPU \'(.*?)\'",
[h]=a,
[i]={{nil,A,y}},
[f]={"8ee529615210",1512991757,"[mips] Removal of microMIPS64R6","[mips] Removal of microMIPS64R6\n\nmicroMIPS64R6 is removed from backend, and therefore frontend\nwill show an error when target is microMIPS64R6.\n\nThis is Clang part of patch.\n\nDifferential Revision: https://reviews.llvm.org/D35624\n\nllvm-svn: 320351"},
[j]={{"clang/lib/Basic/Targets/Mips.cpp",239,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // microMIPS64R6 backend was removed.\n  if (getTriple().isMIPS64() && IsMicromips && (ABI == \"n32\" || ABI == \"n64\")) {\n    Diags.Report(diag::err_target_unsupported_cpu_for_micromips) << CPU;"}}
},
["err_target_unsupported_execute_only"]={
[b]="err_target_unsupported_execute_only",
[c]="execute only is not supported for the %0 sub-architecture",
[d]="execute only is not supported for the A sub-architecture",
[e]=k,
[g]="execute only is not supported for the (.*?) sub\\-architecture",
[h]=a,
[i]=y,
[f]={"61ef150d53e4",1481788764,"[ARM] Implement execute-only support in CodeGen","[ARM] Implement execute-only support in CodeGen\n\nSummary:\nThis implements execute-only support for ARM code generation, which\nprevents the compiler from generating data accesses to code sections.\nThe following changes are involved:\n\n* Add the CodeGen option \"-arm-execute-only\" to the ARM code generator.\n* Add the clang flag \"-mexecute-only\" as well as the GCC-compatible\n  alias \"-mpure-code\" to enable this option.\n* When enabled, literal pools are replaced with MOVW/MOVT instructions,\n  with VMOV used in addition for floating-point literals. As the MOVT\n  instruction is required, execute-only support is only available in\n  Thumb mode for targets supporting ARMv8-M baseline or Thumb2.\n* Jump tables are placed in data sections when in execute-only mode.\n* The execute-only text section is assigned section ID 0, and is\n  marked as unreadable with the SHF_ARM_PURECODE flag with symbol \'y\'.\n  This also overrides selection of ELF sections for globals.\n\nReviewers: t.p.northover, rengolin\n\nSubscribers: llvm-commits, aemerson\n\nDifferential Revision: https://reviews.llvm.org/D27450\n\nllvm-svn: 289786"},
[j]={{qc,849,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  // Generate execute-only output (no data access to code sections).\n  // This only makes sense for the compiler, not for the assembler.\n  // It\'s not needed for multilib selection and may hide an unused\n  // argument diagnostic if the code is always run.\n  if (!ForAS && !ForMultilib) {\n    // Supported only on ARMv6T2 and ARMv7 and above.\n    // Cannot be combined with -mno-movt.\n    if (Arg *A = Args.getLastArg(options::OPT_mexecute_only, options::OPT_mno_execute_only)) {\n      if (A->getOption().matches(options::OPT_mexecute_only)) {\n        if (getARMSubArchVersionNumber(Triple) < 7 && llvm::ARM::parseArch(Triple.getArchName()) != llvm::ARM::ArchKind::ARMV6T2)\n          D.Diag(diag::err_target_unsupported_execute_only) << Triple.getArchName();"}}
},
["err_target_unsupported_fpmath"]={
[b]="err_target_unsupported_fpmath",
[c]="the \'%0\' unit is not supported with this instruction set",
[d]="the \'A\' unit is not supported with this instruction set",
[e]=k,
[g]="the \'(.*?)\' unit is not supported with this instruction set",
[h]=a,
[i]=y,
[f]={"eb26547177b9",1377122343,"Move -mfpmath handling to -cc1 and implement it for x86.","Move -mfpmath handling to -cc1 and implement it for x86.\n\nThe original idea was to implement it all on the driver, but to do that the\ndriver needs to know the sse level and to do that it has to know the default\nfeatures of a cpu.\n\nBenjamin Kramer pointed out that if one day we decide to implement support for\n\' __attribute__ ((__target__ (\"arch=core2\")))\', then the frontend needs to\nkeep its knowledge of default features of a cpu.\n\nTo avoid duplicating which part of clang handles default cpu features,\nit is probably better to handle -mfpmath in the frontend.\n\nFor ARM this patch is just a small improvement. Instead of a cpu list, we\ncheck if neon is enabled, which allows us to reject things like\n\n-mcpu=cortex-a9 -mfpu=vfp -mfpmath=neon\n\nFor X86, since LLVM doesn\'t support an independent ssefp feature, we just\nmake sure the selected -mfpmath matches the sse level.\n\nllvm-svn: 188939"},
[j]={{"clang/lib/Basic/Targets/ARM.cpp",629,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  // ...\n  if (!(FPU & NeonFPU) && FPMath == FP_Neon) {\n    Diags.Report(diag::err_target_unsupported_fpmath) << \"neon\";"},{"clang/lib/Basic/Targets/X86.cpp",420,"/// handleTargetFeatures - Perform initialization based on the user\n/// configured set of features.\nbool X86TargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  // ...\n  // LLVM doesn\'t have a separate switch for fpmath, so only accept it if it\n  // matches the selected sse level.\n  if ((FPMath == FP_SSE && SSELevel < SSE1) || (FPMath == FP_387 && SSELevel >= SSE1)) {\n    Diags.Report(diag::err_target_unsupported_fpmath) << (FPMath == FP_SSE ? \"sse\" : \"387\");"}}
},
["err_target_unsupported_mcmse"]={
[b]={{nil,I,"err_target_unsupported_mcmse"}},
[c]={{nil,I,"-mcmse is not supported for %0"}},
[d]={{nil,I,"-mcmse is not supported for A"}},
[e]=k,
[g]="\\-mcmse is not supported for (.*?)",
[h]=a,
[i]={{nil,I,y}},
[f]={"603a2bac05a8",1558448486,"[ARM][CMSE] Add commandline option and feature macro","[ARM][CMSE] Add commandline option and feature macro\n\nDefines macro ARM_FEATURE_CMSE to 1 for v8-M targets and introduces\n-mcmse option which for v8-M targets sets ARM_FEATURE_CMSE to 3.\nA diagnostic is produced when the option is given on architectures\nwithout support for Security Extensions.\nReviewed By: dmgreen, snidertm\nDifferential Revision: https://reviews.llvm.org/D59879\n\nllvm-svn: 361261"},
[j]={{"clang/lib/Basic/Targets/ARM.cpp",570,"bool ARMTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  // ...\n  // This does not diagnose illegal cases like having both\n  // \"+vfpv2\" and \"+vfpv3\" or having \"+neon\" and \"-fp64\".\n  for (const auto &Feature : Features) {\n    if (Feature == \"+soft-float\") {\n    // ...\n    } else if (Feature == \"+vfp2sp\" || Feature == \"+vfp2\") {\n    // ...\n    } else if (Feature == \"+vfp3sp\" || Feature == \"+vfp3d16sp\" || Feature == \"+vfp3\" || Feature == \"+vfp3d16\") {\n    // ...\n    } else if (Feature == \"+vfp4sp\" || Feature == \"+vfp4d16sp\" || Feature == \"+vfp4\" || Feature == \"+vfp4d16\") {\n    // ...\n    } else if (Feature == \"+fp-armv8sp\" || Feature == \"+fp-armv8d16sp\" || Feature == \"+fp-armv8\" || Feature == \"+fp-armv8d16\") {\n    // ...\n    } else if (Feature == \"+neon\") {\n    // ...\n    } else if (Feature == \"+hwdiv\") {\n    // ...\n    } else if (Feature == \"+hwdiv-arm\") {\n    // ...\n    } else if (Feature == \"+crc\") {\n    // ...\n    } else if (Feature == \"+crypto\") {\n    // ...\n    } else if (Feature == \"+sha2\") {\n    // ...\n    } else if (Feature == \"+aes\") {\n    // ...\n    } else if (Feature == \"+dsp\") {\n    // ...\n    } else if (Feature == \"+fp64\") {\n    // ...\n    } else if (Feature == \"+8msecext\") {\n      if (CPUProfile != \"M\" || ArchVersion != 8) {\n        Diags.Report(diag::err_target_unsupported_mcmse) << CPU;"}}
},
["err_target_unsupported_tp_hard"]={
[b]={{nil,z,"err_target_unsupported_tp_hard"}},
[c]={{nil,z,"hardware TLS register is not supported for the %0 sub-architecture"}},
[d]={{nil,z,"hardware TLS register is not supported for the A sub-architecture"}},
[e]=k,
[g]="hardware TLS register is not supported for the (.*?) sub\\-architecture",
[h]=a,
[h]=a,
[i]={{nil,z,y}},
[g]={{nil,q,m}},
[f]={"4bafe65c2b2f",1634659977,"Add support for floating-point option `ffp-eval-method` and for","Add support for floating-point option `ffp-eval-method` and for\n`pragma clang fp eval_method`."},
[f]={"6b03d95f0ff7",1499169023,"[OpenCL] Rename err_opencl_enqueue_kernel_expected_type","[OpenCL] Rename err_opencl_enqueue_kernel_expected_type\n\nRename err_opencl_enqueue_kernel_expected_type so that other builtins\ncan use the same diagnostic.\n\nhttps://reviews.llvm.org/D34948\n\nllvm-svn: 307067"},
[j]={{qc,212,"// Select mode for reading thread pointer (-mtp=soft/cp15).\narm::ReadTPMode arm::getReadTPMode(const Driver &D, const ArgList &Args, const llvm::Triple &Triple, bool ForAS) {\n  if (Arg *A = Args.getLastArg(options::OPT_mtp_mode_EQ)) {\n    // ...\n    if ((ThreadPointer == ReadTPMode::TPIDRURW || ThreadPointer == ReadTPMode::TPIDRURO || ThreadPointer == ReadTPMode::TPIDRPRW) && !isHardTPSupported(Triple) && !ForAS) {\n      D.Diag(diag::err_target_unsupported_tp_hard) << Triple.getArchName();"},{"clang/lib/Driver/ToolChains/Clang.cpp",3397,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_EQ)) {\n    // ...\n    if ((EffectiveTriple.isARM() || EffectiveTriple.isThumb()) && Value == \"tls\") {\n      // ...\n      // Check whether the target subarch supports the hardware TLS register\n     if (!arm::isHardTPSupported(EffectiveTriple)) {\n       D.Diag(diag::err_target_unsupported_tp_hard) << EffectiveTriple.getArchName();"}}
[b]={{A,1435,"static bool SemaOpenCLBuiltinNDRangeAndBlock(Sema &S, CallExpr *TheCall) {\n  // ...\n  if (NDRangeArg->getType().getUnqualifiedType().getAsString() != \"ndrange_t\") {\n    S.Diag(NDRangeArg->getBeginLoc(), diag::err_opencl_builtin_expected_type) << TheCall->getDirectCallee() << \"\'ndrange_t\'\";"},{A,1442,"static bool SemaOpenCLBuiltinNDRangeAndBlock(Sema &S, CallExpr *TheCall) {\n  // ...\n  if (!isBlockPointer(BlockArg)) {\n    S.Diag(BlockArg->getBeginLoc(), diag::err_opencl_builtin_expected_type) << TheCall->getDirectCallee() << \"block\";"},{A,1458,"/// OpenCL C v2.0, s6.13.17.6 - Check the argument to the\n/// get_kernel_work_group_size\n/// and get_kernel_preferred_work_group_size_multiple builtin functions.\nstatic bool SemaOpenCLBuiltinKernelWorkGroupSize(Sema &S, CallExpr *TheCall) {\n // ...\n  if (!isBlockPointer(BlockArg)) {\n    S.Diag(BlockArg->getBeginLoc(), diag::err_opencl_builtin_expected_type) << TheCall->getDirectCallee() << \"block\";"},{A,1546,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(local void*, ...),\n///                   uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n // ...\n // First argument always needs to be a queue_t type.\n  if (!Arg0->getType()->isQueueT()) {\n   S.Diag(TheCall->getArg(0)->getBeginLoc(), diag::err_opencl_builtin_expected_type) << TheCall->getDirectCallee() << S.Context.OCLQueueTy;"},{A,1554,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n  // ...\n  // Second argument always needs to be a kernel_enqueue_flags_t enum value.\n if (!Arg1->getType()->isIntegerType()) {\n   S.Diag(TheCall->getArg(1)->getBeginLoc(), diag::err_opencl_builtin_expected_type) << TheCall->getDirectCallee() << \"\'kernel_enqueue_flags_t\' (i.e. uint)\";"},{A,1562,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n  // ...\n  // Third argument is always an ndrange_t type.\n  if (Arg2->getType().getUnqualifiedType().getAsString() != \"ndrange_t\") {\n    S.Diag(TheCall->getArg(2)->getBeginLoc(), diag::err_opencl_builtin_expected_type) << TheCall->getDirectCallee() << \"\'ndrange_t\'\";"},{A,1572,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n  // ...\n  // With four arguments, there is only one form that the function could be\n  // called in: no events and no variable arguments.\n  if (NumArgs == 4) {\n    // check that the last argument is the right block type.\n    if (!isBlockPointer(Arg3)) {\n      S.Diag(Arg3->getBeginLoc(), diag::err_opencl_builtin_expected_type) << TheCall->getDirectCallee() << \"block\";"},{A,1595,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n  // ...\n  // last two cases with either exactly 7 args or 7 args and varargs.\n  if (NumArgs >= 7) {\n    // ...\n    if (!isBlockPointer(Arg6)) {\n      S.Diag(Arg6->getBeginLoc(), diag::err_opencl_builtin_expected_type) << TheCall->getDirectCallee() << \"block\";"},{A,1605,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n  // ...\n  // last two cases with either exactly 7 args or 7 args and varargs.\n  if (NumArgs >= 7) {\n    // ...\n    // Forth argument has to be any integer type.\n    if (!Arg3->getType()->isIntegerType()) {\n      S.Diag(TheCall->getArg(3)->getBeginLoc(), diag::err_opencl_builtin_expected_type) << TheCall->getDirectCallee() << \"integer\";"},{A,1618,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n  // ...\n  // last two cases with either exactly 7 args or 7 args and varargs.\n  if (NumArgs >= 7) {\n    // ...\n    // Fifth argument is always passed as a pointer to clk_event_t.\n    if (!Arg4->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull) && !Arg4->getType()->getPointeeOrArrayElementType()->isClkEventT()) {\n      S.Diag(TheCall->getArg(4)->getBeginLoc(), diag::err_opencl_builtin_expected_type) << TheCall->getDirectCallee() << S.Context.getPointerType(S.Context.OCLClkEventTy);"},{A,1630,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n  // ...\n  // last two cases with either exactly 7 args or 7 args and varargs.\n  if (NumArgs >= 7) {\n    // ...\n    // Sixth argument is always passed as a pointer to clk_event_t.\n    if (!Arg5->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull) && !(Arg5->getType()->isPointerType() && Arg5->getType()->getPointeeType()->isClkEventT())) {\n      S.Diag(TheCall->getArg(5)->getBeginLoc(), diag::err_opencl_builtin_expected_type) << TheCall->getDirectCallee() << S.Context.getPointerType(S.Context.OCLClkEventTy);"}},
},
["err_target_unsupported_type"]={
[b]={{nil,z,"err_target_unsupported_type"}},
[c]={{nil,z,"%0 requires %select{|%2 bit size}1 %3 %select{|return }4type support, but target \'%5\' does not support it"}},
[d]={{nil,z,{"A requires ",{a,"C bit size"}," D ",{a,"return "},"type support, but target \'F\' does not support it"}}},
[e]=k,
[g]="(.*?) requires (?:|(.*?) bit size) (.*?) (?:|return )type support, but target \'(.*?)\' does not support it",
[h]=a,
[i]={{nil,z,"OpenMP Issue"}},
[f]={"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]={{Tb,1960,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n auto CheckDeviceType = [&](QualType Ty) {\n    // ...\n   if (Ty->isBitIntType()) {\n     if (!Context.getTargetInfo().hasBitIntType()) {\n       PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{Tb,1992,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n // ...\n auto CheckDeviceType = [&](QualType Ty) {\n   // ...\n   if ((Ty->isFloat16Type() && !Context.getTargetInfo().hasFloat16Type()) || (Ty->isFloat128Type() && !Context.getTargetInfo().hasFloat128Type()) || (Ty->isIbm128Type() && !Context.getTargetInfo().hasIbm128Type()) || (Ty->isIntegerType() && Context.getTypeSize(Ty) == 128 && !Context.getTargetInfo().hasInt128Type()) || (Ty->isBFloat16Type() && !Context.getTargetInfo().hasBFloat16Type() && !LangOpts.CUDAIsDevice) || LongDoubleMismatched) {\n     PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{Tb,2019,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    // ...\n   if (!TI.hasLongDoubleType() && UnqualTy == Context.LongDoubleTy) {\n     PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{Tb,2038,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    // ...\n   if (IsRetTy && !TI.hasFPReturn() && (IsDouble || IsFloat)) {\n     PartialDiagnostic PD = PDiag(diag::err_target_unsupported_type);"},{w,4373,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case PPC::BI__builtin_ppc_maxfe:\n  case PPC::BI__builtin_ppc_minfe:\n  case PPC::BI__builtin_ppc_maxfl:\n  case PPC::BI__builtin_ppc_minfl:\n  case PPC::BI__builtin_ppc_maxfs:\n  case PPC::BI__builtin_ppc_minfs: {\n    if (Context.getTargetInfo().getTriple().isOSAIX() && (BuiltinID == PPC::BI__builtin_ppc_maxfe || BuiltinID == PPC::BI__builtin_ppc_minfe))\n      return Diag(TheCall->getBeginLoc(), diag::err_target_unsupported_type) << \"builtin\" << true << 128 << QualType(Context.LongDoubleTy) << false << Context.getTargetInfo().getTriple().str();"}},
[l]={
[l]={
["clang/test/SemaCUDA/spirv-int128.cu"]={"clang/test/SemaCUDA/spirv-int128.cu:15:10: error: \'d_glb\' requires 128 bit size \'__int128\' type support, but target \'spirv64\' does not support it"}
[lb]={"clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:28:18: error: illegal call to \'enqueue_kernel\', expected \'queue_t\' argument type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:32:33: error: illegal call to \'enqueue_kernel\', expected \'kernel_enqueue_flags_t\' (i.e. uint) argument type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:36:40: error: illegal call to \'enqueue_kernel\', expected \'ndrange_t\' argument type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:40:49: error: illegal call to \'enqueue_kernel\', expected block argument type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:55:49: error: illegal call to \'enqueue_kernel\', expected integer argument type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:59:52: error: illegal call to \'enqueue_kernel\', expected \'clk_event_t *\' argument type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:64:70: error: illegal call to \'enqueue_kernel\', expected \'clk_event_t *\' argument type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:69:76: error: illegal call to \'enqueue_kernel\', expected block argument type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:200:37: error: illegal call to \'get_kernel_work_group_size\', expected block argument type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:217:56: error: illegal call to \'get_kernel_preferred_work_group_size_multiple\', expected block argument type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:227:54: error: illegal call to \'get_kernel_max_sub_group_size_for_ndrange\', expected \'ndrange_t\' argument type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:228:57: error: illegal call to \'get_kernel_max_sub_group_size_for_ndrange\', expected block argument type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:235:51: error: illegal call to \'get_kernel_sub_group_count_for_ndrange\', expected \'ndrange_t\' argument type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:236:54: error: illegal call to \'get_kernel_sub_group_count_for_ndrange\', expected block argument type"}
}
}
},
},
["err_target_unsupported_unaligned"]={
["err_opencl_builtin_pipe_arg_num"]={
[b]="err_target_unsupported_unaligned",
[d]="err_opencl_builtin_pipe_arg_num",
[c]="the %0 sub-architecture does not support unaligned accesses",
[e]="invalid number of arguments to function: %0",
[d]="the A sub-architecture does not support unaligned accesses",
[i]="invalid number of arguments to function: A",
[e]=k,
[j]=k,
[g]="the (.*?) sub\\-architecture does not support unaligned accesses",
[c]="invalid number of arguments to function\\: (.*?)",
[h]=a,
[i]=y,
[f]={"76244be6d4f8",1407921492,"Emit diagnostic for -munaligned-access on v6m targets","Emit diagnostic for -munaligned-access on v6m targets\n\nRather than silently disabling unaligned accesses for v6m targets as\nin the previous patch to llvm, instead produce a warning saying that\nthis architecture doesn\'t support unaligned accesses.\n\nPatch by Ben Foster\n\nllvm-svn: 215531"},
[j]={{qc,866,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  // Kernel code has more strict alignment requirements.\n  if (KernelOrKext) {\n  // ...\n  } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {\n    if (A->getOption().matches(options::OPT_munaligned_access)) {\n      // No v6M core supports unaligned memory access (v6M ARM ARM A3.2).\n      if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)\n        D.Diag(diag::err_target_unsupported_unaligned) << \"v6m\";"},{qc,870,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  // Kernel code has more strict alignment requirements.\n  if (KernelOrKext) {\n  // ...\n  } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access, options::OPT_munaligned_access)) {\n    if (A->getOption().matches(options::OPT_munaligned_access)) {\n      // No v6M core supports unaligned memory access (v6M ARM ARM A3.2).\n      if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)\n      // ...\n      // v8M Baseline follows on from v6M, so doesn\'t support unaligned memory\n      // access either.\n      else if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v8m_baseline)\n        D.Diag(diag::err_target_unsupported_unaligned) << \"v8m.base\";"}}
},
["err_tcb_conflicting_attributes"]={
[b]={{nil,v,"err_tcb_conflicting_attributes"}},
[c]={{nil,v,"attributes \'%0(\"%2\")\' and \'%1(\"%2\")\' are mutually exclusive"}},
[d]={{nil,v,"attributes \'A(\"C\")\' and \'B(\"C\")\' are mutually exclusive"}},
[e]=k,
[g]="attributes \'(.*?)\\(\"(.*?)\"\\)\' and \'(.*?)\\(\"(.*?)\"\\)\' are mutually exclusive",
[h]=a,
[h]=a,
[i]={{nil,v,y}},
[g]=m,
[f]={ac,1590001902,fc,gc},
[f]={"3a9952c9e7d0",1453773964,"[OpenCL] Pipe builtin functions","[OpenCL] Pipe builtin functions\n\nSummary:\nSupport for the pipe built-in functions for OpenCL 2.0.\nThe pipe builtin functions may have infinite kinds of element types, one approach\nwould be to just generate calls that would always use generic types such as void*.\nThis patch is based on bader\'s opencl support patch on SPIR-V branch.\n\nReviewers: Anastasia, pekka.jaaskelainen\n\nSubscribers: keryell, bader, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D15914\n\nllvm-svn: 258773"},
[j]={{M,8629,"template <typename AttrTy, typename ConflictingAttrTy> static void handleEnforceTCBAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n // A function cannot be have both regular and leaf membership in the same TCB.\n if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, Argument)) {\n    // ...\n    S.Diag(AL.getLoc(), diag::err_tcb_conflicting_attributes) << AL.getAttrName()->getName() << ConflictingAttr->getAttrName()->getName() << Argument;"},{M,8649,"template <typename AttrTy, typename ConflictingAttrTy> static AttrTy *mergeEnforceTCBAttrImpl(Sema &S, Decl *D, const AttrTy &AL) {\n  // ...\n  if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, TCBName)) {\n    S.Diag(ConflictingAttr->getLoc(), diag::err_tcb_conflicting_attributes) << ConflictingAttr->getAttrName()->getName() << AL.getAttrName()->getName() << TCBName;"}},
[b]={{A,1769,"// Performs semantic analysis for the read/write_pipe call.\n// \\param S Reference to the semantic analyzer.\n// \\param Call A pointer to the builtin call.\n// \\return True if a semantic error has been found, false otherwise.\nstatic bool SemaBuiltinRWPipe(Sema &S, CallExpr *Call) {\n  // ...\n  default:\n    S.Diag(Call->getBeginLoc(), diag::err_opencl_builtin_pipe_arg_num) << Call->getDirectCallee() << Call->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/attr-enforce-tcb-errors.cpp"]={"clang/test/Sema/attr-enforce-tcb-errors.cpp:21:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:28:16: error: attributes \'enforce_tcb(\"x\")\' and \'enforce_tcb_leaf(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:36:16: error: attributes \'enforce_tcb(\"x\")\' and \'enforce_tcb_leaf(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:43:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive","clang/test/Sema/attr-enforce-tcb-errors.cpp:75:16: error: attributes \'enforce_tcb_leaf(\"x\")\' and \'enforce_tcb(\"x\")\' are mutually exclusive"}
["clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:13:3: error: invalid number of arguments to function: \'read_pipe\'","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:42:3: error: invalid number of arguments to function: \'write_pipe\'"}
}
}
},
},
["err_temp_copy_ambiguous"]={
["err_opencl_builtin_pipe_first_arg"]={
[b]="err_temp_copy_ambiguous",
[d]="err_opencl_builtin_pipe_first_arg",
[c]={{nil,v,"ambiguous constructor call when %select{copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1"},{tb,H,"ambiguous constructor call when %select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1"},{A,nil,"ambiguous constructor call when %select{copying variable|copying parameter|returning object|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1"}},
[e]="first argument to %0 must be a pipe type",
[d]={{nil,v,{"ambiguous constructor call when ",{Gb,Fb,"initializing template parameter",Eb,Zb,Db,Cb,zb,wb,ub,xb,yb,Bb},dc}},{tb,H,{"ambiguous constructor call when ",{Gb,Fb,Eb,Zb,Db,Cb,zb,wb,ub,xb,yb,Bb},dc}},{A,nil,{"ambiguous constructor call when ",{Gb,Fb,Eb,Db,Cb,zb,wb,ub,xb,yb,Bb},dc}}},
[i]="first argument to A must be a pipe type",
[e]=k,
[j]=k,
[g]="ambiguous constructor call when (?:copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value) of type (.*?)",
[c]="first argument to (.*?) must be a pipe type",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"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.\- 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"},
[f]={"3a9952c9e7d0",1453773964,"[OpenCL] Pipe builtin functions","[OpenCL] Pipe builtin functions\n\nSummary:\nSupport for the pipe built-in functions for OpenCL 2.0.\nThe pipe builtin functions may have infinite kinds of element types, one approach\nwould be to just generate calls that would always use generic types such as void*.\nThis patch is based on bader\'s opencl support patch on SPIR-V branch.\n\nReviewers: Anastasia, pekka.jaaskelainen\n\nSubscribers: keryell, bader, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D15914\n\nllvm-svn: 258773"},
[j]={{pb,6799,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(Loc, S.PDiag(diag::err_temp_copy_ambiguous) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange()), S, OCD_AmbiguousCandidates, CurInitExpr);"}}
[b]={{A,1658,"/// Returns true if pipe element type is different from the pointer.\nstatic bool checkOpenCLPipeArg(Sema &S, CallExpr *Call) {\n  // ...\n  // First argument type should always be pipe.\n  if (!Arg0->getType()->isPipeType()) {\n    S.Diag(Call->getBeginLoc(), diag::err_opencl_builtin_pipe_first_arg) << Call->getDirectCallee() << Arg0->getSourceRange();"},{A,1839,"// Performs a semantic analysis on the call to built-in Pipe\n//       Query Functions.\n// \\param S Reference to the semantic analyzer.\n// \\param Call The call to the builtin function to be analyzed.\n// \\return True if a semantic error was found, false otherwise.\nstatic bool SemaBuiltinPipePackets(Sema &S, CallExpr *Call) {\n  // ...\n  if (!Call->getArg(0)->getType()->isPipeType()) {\n    S.Diag(Call->getBeginLoc(), diag::err_opencl_builtin_pipe_first_arg) << Call->getDirectCallee() << Call->getArg(0)->getSourceRange();"}},
},
["err_temp_copy_deleted"]={
[b]="err_temp_copy_deleted",
[c]={{nil,v,"%select{copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1 invokes deleted constructor"},{tb,H,"%select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1 invokes deleted constructor"},{A,nil,"%select{copying variable|copying parameter|returning object|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1 invokes deleted constructor"}},
[d]={{nil,v,{{Gb,Fb,"initializing template parameter",Eb,Zb,Db,Cb,zb,wb,ub,xb,yb,Bb}," of type B invokes deleted constructor"}},{tb,H,{{Gb,Fb,Eb,Zb,Db,Cb,zb,wb,ub,xb,yb,Bb}," of type B invokes deleted constructor"}},{A,nil,{{Gb,Fb,Eb,Db,Cb,zb,wb,ub,xb,yb,Bb}," of type B invokes deleted constructor"}}},
[e]=k,
[g]="(?:copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value) of type (.*?) invokes deleted constructor",
[h]=a,
[i]=m,
[f]={"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]={{pb,6807,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  // ...\n  case OR_Deleted:\n    S.Diag(Loc, diag::err_temp_copy_deleted) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx1z-copy-omission.cpp"]={"clang/test/SemaCXX/cxx1z-copy-omission.cpp:55:13: error: copying variable of type \'Noncopyable\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:60:13: error: copying variable of type \'Derived\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:143:13: error: copying variable of type \'Noncopyable\' invokes deleted constructor","clang/test/SemaCXX/cxx1z-copy-omission.cpp:146:13: error: copying variable of type \'Derived\' invokes deleted constructor"}
["clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:12:3: error: first argument to \'read_pipe\' must be a pipe type","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:24:3: error: first argument to \'work_group_reserve_read_pipe\' must be a pipe type","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:29:3: error: first argument to \'commit_read_pipe\' must be a pipe type","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:41:3: error: first argument to \'write_pipe\' must be a pipe type","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:53:3: error: first argument to \'work_group_reserve_write_pipe\' must be a pipe type","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:58:3: error: first argument to \'commit_write_pipe\' must be a pipe type","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:65:3: error: first argument to \'get_pipe_num_packets\' must be a pipe type","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:66:3: error: first argument to \'get_pipe_max_packets\' must be a pipe type"}
}
}
},
},
["err_temp_copy_incomplete"]={
["err_opencl_builtin_pipe_invalid_access_modifier"]={
[b]="err_temp_copy_incomplete",
[d]="err_opencl_builtin_pipe_invalid_access_modifier",
[c]="copying a temporary object of incomplete type %0",
[e]="invalid pipe access modifier (expecting %0)",
[d]="copying a temporary object of incomplete type A",
[i]="invalid pipe access modifier (expecting A)",
[e]=k,
[j]=k,
[g]="copying a temporary object of incomplete type (.*?)",
[c]="invalid pipe access modifier \\(expecting (.*?)\\)",
[h]=a,
[i]=m,
[f]={"d5c231e7450e",1272143365,"When we attempt to create a temporary object of class type, be sure","When we attempt to create a temporary object of class type, be sure\nthat the type we\'re copying is complete. \n\nBoost.Regex now builds, although it\'s failing its regression tests\nwith our favorite \"Sema doesn\'t consider destructor as used.\"\nassertion.\n\nllvm-svn: 102271"},
[j]={{pb,6766,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  // ...\n  if (S.RequireCompleteType(Loc, T, diag::err_temp_copy_incomplete))"}}
},
["err_temp_copy_no_viable"]={
[b]="err_temp_copy_no_viable",
[c]={{nil,v,"no viable constructor %select{copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1"},{tb,H,"no viable constructor %select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1"},{A,nil,"no viable constructor %select{copying variable|copying parameter|returning object|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1"}},
[d]={{nil,v,{"no viable constructor ",{Gb,Fb,"initializing template parameter",Eb,Zb,Db,Cb,zb,wb,ub,xb,yb,Bb},dc}},{tb,H,{"no viable constructor ",{Gb,Fb,Eb,Zb,Db,Cb,zb,wb,ub,xb,yb,Bb},dc}},{A,nil,{"no viable constructor ",{Gb,Fb,Eb,Db,Cb,zb,wb,ub,xb,yb,Bb},dc}}},
[e]=k,
[g]="no viable constructor (?:copying variable|copying parameter|initializing template parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value) of type (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"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.\- 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"},
[f]={"3a9952c9e7d0",1453773964,"[OpenCL] Pipe builtin functions","[OpenCL] Pipe builtin functions\n\nSummary:\nSupport for the pipe built-in functions for OpenCL 2.0.\nThe pipe builtin functions may have infinite kinds of element types, one approach\nwould be to just generate calls that would always use generic types such as void*.\nThis patch is based on bader\'s opencl support patch on SPIR-V branch.\n\nReviewers: Anastasia, pekka.jaaskelainen\n\nSubscribers: keryell, bader, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D15914\n\nllvm-svn: 258773"},
[j]={{pb,6789,"/// Make a (potentially elidable) temporary copy of the object\n/// provided by the given initializer by calling the appropriate copy\n/// constructor.\n///\n/// \\param S The Sema object used for type-checking.\n///\n/// \\param T The type of the temporary object, which must either be\n/// the type of the initializer expression or a superclass thereof.\n///\n/// \\param Entity The entity being initialized.\n///\n/// \\param CurInit The initializer expression.\n///\n/// \\param IsExtraneousCopy Whether this is an \"extraneous\" copy that\n/// is permitted in C++03 (but not C++0x) when binding a reference to\n/// an rvalue.\n///\n/// \\returns An expression that copies the initializer expression into\n/// a temporary object, or an error expression if a copy could not be\n/// created.\nstatic ExprResult CopyObject(Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy) {\n  // ...\n  case OR_No_Viable_Function:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(Loc, S.PDiag(IsExtraneousCopy && !S.isSFINAEContext() ? diag::ext_rvalue_to_reference_temp_copy_no_viable : diag::err_temp_copy_no_viable) << (int)Entity.getKind() << CurInitExpr->getType() << CurInitExpr->getSourceRange()), S, OCD_AllCandidates, CurInitExpr);"}},
[b]={{A,1678,"/// Returns true if pipe element type is different from the pointer.\nstatic bool checkOpenCLPipeArg(Sema &S, CallExpr *Call) {\n // ...\n case Builtin::BIread_pipe:\n case Builtin::BIreserve_read_pipe:\n case Builtin::BIcommit_read_pipe:\n case Builtin::BIwork_group_reserve_read_pipe:\n case Builtin::BIsub_group_reserve_read_pipe:\n case Builtin::BIwork_group_commit_read_pipe:\n case Builtin::BIsub_group_commit_read_pipe:\n   if (!(!AccessQual || AccessQual->isReadOnly())) {\n     S.Diag(Arg0->getBeginLoc(), diag::err_opencl_builtin_pipe_invalid_access_modifier) << \"read_only\" << Arg0->getSourceRange();"},{A,1692,"/// Returns true if pipe element type is different from the pointer.\nstatic bool checkOpenCLPipeArg(Sema &S, CallExpr *Call) {\n  // ...\n  case Builtin::BIwrite_pipe:\n  case Builtin::BIreserve_write_pipe:\n  case Builtin::BIcommit_write_pipe:\n  case Builtin::BIwork_group_reserve_write_pipe:\n  case Builtin::BIsub_group_reserve_write_pipe:\n  case Builtin::BIwork_group_commit_write_pipe:\n  case Builtin::BIsub_group_commit_write_pipe:\n    if (!(AccessQual && AccessQual->isWriteOnly())) {\n      S.Diag(Arg0->getBeginLoc(), diag::err_opencl_builtin_pipe_invalid_access_modifier) << \"write_only\" << Arg0->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/copy-initialization.cpp"]={"clang/test/SemaCXX/copy-initialization.cpp:44:7: error: no viable constructor copying parameter of type \'const Foo\'"}
["clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:18:14: error: invalid pipe access modifier (expecting write_only)","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:19:14: error: invalid pipe access modifier (expecting write_only)","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:25:32: error: invalid pipe access modifier (expecting write_only)","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:31:31: error: invalid pipe access modifier (expecting write_only)","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:47:13: error: invalid pipe access modifier (expecting read_only)","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:48:13: error: invalid pipe access modifier (expecting read_only)","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:54:31: error: invalid pipe access modifier (expecting read_only)","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:60:30: error: invalid pipe access modifier (expecting read_only)"}
}
}
},
},
["err_template_arg_address_of_non_pointer"]={
["err_opencl_builtin_pipe_invalid_arg"]={
[b]="err_template_arg_address_of_non_pointer",
[d]="err_opencl_builtin_pipe_invalid_arg",
[c]="address taken in non-type template argument for template parameter of reference type %0",
[e]="invalid argument type to function %0 (expecting %1 having %2)",
[d]="address taken in non-type template argument for template parameter of reference type A",
[i]="invalid argument type to function A (expecting B having C)",
[e]=k,
[j]=k,
[g]="address taken in non\\-type template argument for template parameter of reference type (.*?)",
[c]="invalid argument type to function (.*?) \\(expecting (.*?) having (.*?)\\)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to","Overhaul checking of non-type template arguments that should refer to\nan object or function. Our previous checking was too lax, and ended up\nallowing missing or extraneous address-of operators, among other\nevils. The new checking provides better diagnostics and adheres more\nclosely to the standard.\n\nFixes PR6563 and PR6749.\n\nllvm-svn: 100125"},
[f]={"3a9952c9e7d0",1453773964,"[OpenCL] Pipe builtin functions","[OpenCL] Pipe builtin functions\n\nSummary:\nSupport for the pipe built-in functions for OpenCL 2.0.\nThe pipe builtin functions may have infinite kinds of element types, one approach\nwould be to just generate calls that would always use generic types such as void*.\nThis patch is based on bader\'s opencl support patch on SPIR-V branch.\n\nReviewers: Anastasia, pekka.jaaskelainen\n\nSubscribers: keryell, bader, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D15914\n\nllvm-svn: 258773"},
[j]={{o,6909,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  if (AddressTaken && ParamType->isReferenceType()) {\n    // If we originally had an address-of operator, but the\n   // parameter has reference type, complain and (if things look\n    // like they will work) drop the address-of operator.\n    if (!S.Context.hasSameUnqualifiedType(Entity->getType(), ParamType.getNonReferenceType())) {\n      S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType;"},{o,6915,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  if (AddressTaken && ParamType->isReferenceType()) {\n    // ...\n    S.Diag(AddrOpLoc, diag::err_template_arg_address_of_non_pointer) << ParamType << FixItHint::CreateRemoval(AddrOpLoc);"}},
[b]={{A,1715,"/// Returns true if pipe element type is different from the pointer.\nstatic bool checkOpenCLPipePacketType(Sema &S, CallExpr *Call, unsigned Idx) {\n  // ...\n  // The Idx argument should be a pointer and the type of the pointer and\n  // the type of pipe element should also be the same.\n  if (!ArgTy || !S.Context.hasSameType(EltTy, ArgTy->getPointeeType()->getCanonicalTypeInternal())) {\n    S.Diag(Call->getBeginLoc(), diag::err_opencl_builtin_pipe_invalid_arg) << Call->getDirectCallee() << S.Context.getPointerType(EltTy) << ArgIdx->getType() << ArgIdx->getSourceRange();"},{A,1748,"// Performs semantic analysis for the read/write_pipe call.\n// \\param S Reference to the semantic analyzer.\n// \\param Call A pointer to the builtin call.\n// \\return True if a semantic error has been found, false otherwise.\nstatic bool SemaBuiltinRWPipe(Sema &S, CallExpr *Call) {\n  // ...\n  case 4: {\n    // ...\n    // The call with 4 arguments should be\n    // read/write_pipe(pipe T, reserve_id_t, uint, T*).\n    // Check reserve_id_t.\n    if (!Call->getArg(1)->getType()->isReserveIDT()) {\n      S.Diag(Call->getBeginLoc(), diag::err_opencl_builtin_pipe_invalid_arg) << Call->getDirectCallee() << S.Context.OCLReserveIDTy << Call->getArg(1)->getType() << Call->getArg(1)->getSourceRange();"},{A,1758,"// Performs semantic analysis for the read/write_pipe call.\n// \\param S Reference to the semantic analyzer.\n// \\param Call A pointer to the builtin call.\n// \\return True if a semantic error has been found, false otherwise.\nstatic bool SemaBuiltinRWPipe(Sema &S, CallExpr *Call) {\n  // ...\n  case 4: {\n    // ...\n    if (!Arg2->getType()->isIntegerType() && !Arg2->getType()->isUnsignedIntegerType()) {\n      S.Diag(Call->getBeginLoc(), diag::err_opencl_builtin_pipe_invalid_arg) << Call->getDirectCallee() << S.Context.UnsignedIntTy << Arg2->getType() << Arg2->getSourceRange();"},{A,1792,"// Performs a semantic analysis on the {work_group_/sub_group_\n//        /_}reserve_{read/write}_pipe\n// \\param S Reference to the semantic analyzer.\n// \\param Call The call to the builtin function to be analyzed.\n// \\return True if a semantic error was found, false otherwise.\nstatic bool SemaBuiltinReserveRWPipe(Sema &S, CallExpr *Call) {\n  // ...\n  // Check the reserve size.\n  if (!Call->getArg(1)->getType()->isIntegerType() && !Call->getArg(1)->getType()->isUnsignedIntegerType()) {\n    S.Diag(Call->getBeginLoc(), diag::err_opencl_builtin_pipe_invalid_arg) << Call->getDirectCallee() << S.Context.UnsignedIntTy << Call->getArg(1)->getType() << Call->getArg(1)->getSourceRange();"},{A,1820,"// Performs a semantic analysis on {work_group_/sub_group_\n//       /_}commit_{read/write}_pipe\n// \\param S Reference to the semantic analyzer.\n// \\param Call The call to the builtin function to be analyzed.\n// \\return True if a semantic error was found, false otherwise.\nstatic bool SemaBuiltinCommitRWPipe(Sema &S, CallExpr *Call) {\n  // ...\n  // Check reserve_id_t.\n  if (!Call->getArg(1)->getType()->isReserveIDT()) {\n    S.Diag(Call->getBeginLoc(), diag::err_opencl_builtin_pipe_invalid_arg) << Call->getDirectCallee() << S.Context.OCLReserveIDTy << Call->getArg(1)->getType() << Call->getArg(1)->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:116:8: error: address taken in non-type template argument for template parameter of reference type \'int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:118:8: error: address taken in non-type template argument for template parameter of reference type \'int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:129:9: error: address taken in non-type template argument for template parameter of reference type \'const int &\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:136:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:138:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:140:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:146:8: error: address taken in non-type template argument for template parameter of reference type \'int (&)(int)\'"}
["clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:15:3: error: invalid argument type to function \'read_pipe\' (expecting \'reserve_id_t\' having \'__private int\')","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:16:3: error: invalid argument type to function \'read_pipe\' (expecting \'unsigned int\' having \'__private reserve_id_t\')","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:17:3: error: invalid argument type to function \'read_pipe\' (expecting \'int *\' having \'__private int\')","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:23:3: error: invalid argument type to function \'reserve_read_pipe\' (expecting \'unsigned int\' having \'__global int *__private\')","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:30:3: error: invalid argument type to function \'work_group_commit_read_pipe\' (expecting \'reserve_id_t\' having \'__private int\')","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:44:3: error: invalid argument type to function \'write_pipe\' (expecting \'reserve_id_t\' having \'__private int\')","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:45:3: error: invalid argument type to function \'write_pipe\' (expecting \'unsigned int\' having \'__private reserve_id_t\')","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:46:3: error: invalid argument type to function \'write_pipe\' (expecting \'int *\' having \'__private int\')","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:52:3: error: invalid argument type to function \'reserve_write_pipe\' (expecting \'unsigned int\' having \'__global int *__private\')","clang/test/SemaOpenCL/invalid-pipe-builtin-cl2.0.cl:59:3: error: invalid argument type to function \'work_group_commit_write_pipe\' (expecting \'reserve_id_t\' having \'__private int\')"}
}
}
},
},
["err_template_arg_deduced_incomplete_pack"]={
["err_opencl_builtin_to_addr_invalid_arg"]={
[b]="err_template_arg_deduced_incomplete_pack",
[d]="err_opencl_builtin_to_addr_invalid_arg",
[c]="deduced incomplete pack %0 for template parameter %1",
[e]="invalid argument %0 to function: %1, expecting a generic pointer argument",
[d]="deduced incomplete pack A for template parameter B",
[i]="invalid argument A to function: B, expecting a generic pointer argument",
[e]=k,
[j]=k,
[g]="deduced incomplete pack (.*?) for template parameter (.*?)",
[c]="invalid argument (.*?) to function\\: (.*?), expecting a generic pointer argument",
[h]=a,
[i]=m,
[f]={"539e8e370398",1483494535,"Fix template argument deduction when only some of a parameter pack is a non-deduced context.","Fix template argument deduction when only some of a parameter pack is a non-deduced context.\n\nWhen a parameter pack has multiple corresponding arguments, and some subset of\nthem are overloaded functions, it\'s possible that some subset of the parameters\nare non-deduced contexts. In such a case, keep deducing from the remainder of\nthe arguments, and resolve the incomplete pack against whatever other\ndeductions we\'ve performed for the pack.\n\nGCC, MSVC, and ICC give three different bad behaviors for this case; what we do\nnow (and what we did before) don\'t exactly match any of them, sadly :( I\'m\ngetting a core issue opened to specify more precisely how this should be\nhandled.\n\nllvm-svn: 290923"},
[j]={{"clang/lib/Sema/SemaTemplateDeduction.cpp",2675,"/// Convert the given deduced template argument and add it to the set of\n/// fully-converted template arguments.\nstatic bool ConvertDeducedTemplateArgument(Sema &S, NamedDecl *Param, DeducedTemplateArgument Arg, NamedDecl *Template, TemplateDeductionInfo &Info, bool IsDeduced, SmallVectorImpl<TemplateArgument> &SugaredOutput, SmallVectorImpl<TemplateArgument> &CanonicalOutput) {\n  // ...\n  if (Arg.getKind() == TemplateArgument::Pack) {\n    // ...\n    for (const auto &P : Arg.pack_elements()) {\n      // ...\n      if (P.isNull()) {\n        // ...\n        S.Diag(Param->getLocation(), diag::err_template_arg_deduced_incomplete_pack) << Arg << Param;"}}
},
["err_template_arg_field"]={
[b]="err_template_arg_field",
[c]="non-type template argument refers to non-static data member %0",
[d]="non-type template argument refers to non-static data member A",
[e]=k,
[g]="non\\-type template argument refers to non\\-static data member (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"f7449a179b53",1463774078,"[OpenCL] Add to_{global|local|private} builtin functions.","[OpenCL] Add to_{global|local|private} builtin functions.\n\nOpenCL builtin functions to_{global|local|private} accepts argument of pointer type to arbitrary pointee type, and return a pointer to the same pointee type in different addr space, i.e.\n\nglobal gentype *to_global(gentype *p);\nIt is not desirable to declare it as\n\nglobal void *to_global(void *);\nin opencl header file since it misses diagnostics.\n\nThis patch implements these builtin functions as Clang builtin functions. In the builtin def file they are defined to have signature void*(void*). When handling call expressions, their declarations are re-written to have correct parameter type and return type corresponding to the call argument.\n\nIn codegen call to addr void *to_addr(void*) is generated with addrcasts or bitcasts to facilitate implementation in builtin library.\n\nDifferential Revision: http://reviews.llvm.org/D19932\n\nllvm-svn: 270261"},
[j]={{o,6839,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  // Cannot refer to non-static data members\n  if (isa<FieldDecl>(Entity) || isa<IndirectFieldDecl>(Entity)) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_field) << Entity << Arg->getSourceRange();"}},
[b]={{A,1861,"// OpenCL v2.0 s6.13.9 - Address space qualifier functions.\n// Performs semantic analysis for the to_global/local/private call.\n// \\param S Reference to the semantic analyzer.\n// \\param BuiltinID ID of the builtin function.\n// \\param Call A pointer to the builtin call.\n// \\return True if a semantic error has been found, false otherwise.\nstatic bool SemaOpenCLBuiltinToAddr(Sema &S, unsigned BuiltinID, CallExpr *Call) {\n  // ...\n  if (!RT->isPointerType() || RT->getPointeeType().getAddressSpace() == LangAS::opencl_constant) {\n    S.Diag(Call->getBeginLoc(), diag::err_opencl_builtin_to_addr_invalid_arg) << Call->getArg(0) << Call->getDirectCallee() << Call->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:169:9: error: non-type template argument refers to non-static data member \'NonStaticMember\'"}
["clang/test/SemaOpenCL/to_addr_builtin.cl"]={"clang/test/SemaOpenCL/to_addr_builtin.cl:23:10: error: invalid argument x to function: \'to_global\', expecting a generic pointer argument","clang/test/SemaOpenCL/to_addr_builtin.cl:30:20: error: invalid argument con to function: \'to_global\', expecting a generic pointer argument","clang/test/SemaOpenCL/to_addr_builtin.cl:37:20: error: invalid argument con_typedef to function: \'to_global\', expecting a generic pointer argument"}
}
}
},
},
["err_template_arg_invalid"]={
["err_opencl_cast_non_zero_to_event_t"]={
[b]={{nil,D,"err_template_arg_invalid"}},
[d]="err_opencl_cast_non_zero_to_event_t",
[c]={{nil,D,"non-type template argument \'%0\' is invalid"}},
[e]="cannot cast non-zero value \'%0\' to \'event_t\'",
[d]={{nil,D,"non-type template argument \'A\' is invalid"}},
[i]="cannot cast non-zero value \'A\' to \'event_t\'",
[e]=k,
[j]=k,
[g]="non\\-type template argument \'(.*?)\' is invalid",
[c]="cannot cast non\\-zero value \'(.*?)\' to \'event_t\'",
[h]=a,
[h]=a,
[i]={{nil,D,m}},
[g]=m,
[f]={sb,1625925174,qb,rb},
[f]={"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,6617,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n // ...\n if (EvalResult.Val.isLValue() && !EvalResult.Val.getLValueBase()) {\n   // ...\n   S.Diag(Arg->getExprLoc(), diag::err_template_arg_invalid) << EvalResult.Val.getAsString(S.Context, ParamType);"}},
[b]={{cb,3039,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n  if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n   // ...\n    // OpenCL v2.0 s6.13.10 - Allow casts from \'0\' to event_t type.\n   if (Self.getLangOpts().OpenCL && DestType->isEventT()) {\n      // ...\n      if (SrcExpr.get()->EvaluateAsInt(Result, Self.Context)) {\n       // ...\n       Self.Diag(OpRange.getBegin(), diag::err_opencl_cast_non_zero_to_event_t) << toString(CastInt, 10) << SrcExpr.get()->getSourceRange();"}},
[l]={
[l]={
[cc]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:31:4: error: non-type template argument \'(int *)1\' is invalid"}
["clang/test/SemaOpenCL/event_t.cl"]={"clang/test/SemaOpenCL/event_t.cl:17:7: error: cannot cast non-zero value \'1\' to \'event_t\'"}
}
}
},
},
["err_template_arg_list_constraints_not_satisfied"]={
["err_opencl_cast_to_half"]={
[b]={{nil,u,"err_template_arg_list_constraints_not_satisfied"}},
[d]="err_opencl_cast_to_half",
[c]={{nil,u,"constraints not satisfied for %select{class template|function template|variable template|alias template|template template parameter|template}0 %1%2"}},
[e]="casting to type %0 is not allowed",
[d]={{nil,u,{"constraints not satisfied for ",{Vb,Ub,jc,"alias template","template template parameter",hc}," BC"}}},
[i]="casting to type A is not allowed",
[e]=k,
[j]=k,
[g]="constraints not satisfied for (?:class template|function template|variable template|alias template|template template parameter|template) (.*?)(.*?)",
[c]="casting to type (.*?) is not allowed",
[h]=a,
[h]=a,
[i]={{nil,u,m}},
[g]=m,
[f]={"bd8791610948",1569403888,"[clang] Add no_builtin attribute","[clang] Add no_builtin attribute\n\nSummary:\nThis is a follow up on https://reviews.llvm.org/D61634\nThis patch is simpler and only adds the no_builtin attribute.\n\nReviewers: tejohnson, courbet, theraven, t.p.northover, jdoerfert\n\nSubscribers: mgrang, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D68028"},
[f]={"dd7f4566b1a8",1358942180,"Add a new LangOpt NativeHalfType. This option allows for native half/fp16","Add a new LangOpt NativeHalfType. This option allows for native half/fp16\noperations (as opposed to storage only half/fp16).\n\nAlso add some semantic checks for OpenCL half types.\n\nllvm-svn: 173254"},
[j]={{"clang/lib/Sema/SemaConcept.cpp",862,"bool Sema::EnsureTemplateArgumentListConstraints(TemplateDecl *TD, const MultiLevelTemplateArgumentList &TemplateArgsLists, SourceRange TemplateIDRange) {\n  // ...\n  if (!Satisfaction.IsSatisfied) {\n    // ...\n   Diag(TemplateIDRange.getBegin(), diag::err_template_arg_list_constraints_not_satisfied) << (int)getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD << TemplateArgString << TemplateIDRange;"}},
[b]={{cb,3184,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  if (Self.getLangOpts().OpenCL && !Self.getOpenCLOptions().isAvailableOption(\"cl_khr_fp16\", Self.getLangOpts())) {\n    if (DestType->isHalfType()) {\n     Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_opencl_cast_to_half) << DestType << SrcExpr.get()->getSourceRange();"}},
[l]={
[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:14:17: error: constraints not satisfied for class template \'is_same\' [with T = char, U = char]"}
["clang/test/SemaOpenCL/half.cl"]={"clang/test/SemaOpenCL/half.cl:17:14: error: casting to type \'half\' is not allowed"}
}
}
},
},
["err_template_arg_list_different_arity"]={
["err_opencl_constant_no_init"]={
[b]="err_template_arg_list_different_arity",
[d]="err_opencl_constant_no_init",
[c]="%select{too few|too many}0 template arguments for %select{class template|function template|template template parameter|template}1 %2",
[e]="variable in constant address space must be initialized",
[d]={{nil,I,{{"too few","too many"}," template arguments for ",{Vb,Ub,jc,"alias template","template template parameter","concept",hc}," C"}},{R,E,{{"too few","too many"}," template arguments for ",{Vb,Ub,jc,"alias template","template template parameter",hc}," C"}},{nil,nil,{{"too few","too many"}," template arguments for ",{Vb,Ub,"template template parameter",hc}," C"}}},
[i]="variable in constant address space must be initialized",
[e]=k,
[j]=k,
[g]="(?:too few|too many) template arguments for (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?)",
[c]="variable in constant address space must be initialized",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"96b94e610b84",1388758615,"[OpenCL] Variables in the constant address space must be initialized.","[OpenCL] Variables in the constant address space must be initialized.\n\nllvm-svn: 198417"},
[j]={{o,5870,"/// Diagnose a missing template argument.\ntemplate <typename TemplateParmDecl> static bool diagnoseMissingArgument(Sema &S, SourceLocation Loc, TemplateDecl *TD, const TemplateParmDecl *D, TemplateArgumentListInfo &Args) {\n  // ...\n  S.Diag(Loc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)S.getTemplateNameKindForDiagnostics(TemplateName(TD)) << TD;"},{o,5937,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n // ...\n for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    // If we have an expanded parameter pack, make sure we don\'t have too\n    // many arguments.\n    if (std::optional<unsigned> Expansions = getExpandedPackSize(*Param)) {\n      if (*Expansions == SugaredArgumentPack.size()) {\n      // ...\n      } else if (ArgIdx == NumArgs && !PartialTemplateArgs) {\n        // ...\n        Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*not enough args*/ 0 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template;"},{o,6165,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  // ...\n  // If we have any leftover arguments, then there were too many arguments.\n  // Complain and fail.\n  if (ArgIdx < NumArgs) {\n    Diag(TemplateLoc, diag::err_template_arg_list_different_arity) << /*too many args*/ 1 << (int)getTemplateNameKindForDiagnostics(TemplateName(Template)) << Template << SourceRange(NewArgs[ArgIdx].getLocation(), NewArgs.getRAngleLoc());"}},
[b]={{G,13714,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n   // OpenCL v1.1 s6.5.3: variables declared in the constant address space must\n   // be initialized.\n   if (!Var->isInvalidDecl() && Var->getType().getAddressSpace() == LangAS::opencl_constant && Var->getStorageClass() != SC_Extern && !Var->getInit()) {\n      // ...\n      if (!HasConstExprDefaultConstructor) {\n        Diag(Var->getLocation(), diag::err_opencl_constant_no_init);"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:22:28: error: too few template arguments for class template \'A\'"}
["clang/test/SemaOpenCLCXX/addrspace-constructors.clcpp"]={"clang/test/SemaOpenCLCXX/addrspace-constructors.clcpp:3:16: error: variable in constant address space must be initialized","clang/test/SemaOpenCLCXX/addrspace-constructors.clcpp:38:16: error: variable in constant address space must be initialized"}
}
}
},
},
["err_template_arg_member_ptr_base_derived_not_supported"]={
["err_opencl_enqueue_kernel_blocks_no_args"]={
[b]="err_template_arg_member_ptr_base_derived_not_supported",
[d]="err_opencl_enqueue_kernel_blocks_no_args",
[c]="sorry, non-type template argument of pointer-to-member type %1 that refers to member %q0 of a different class is not supported yet",
[e]="blocks in this form of device side enqueue call are expected to have have no parameters",
[d]="sorry, non-type template argument of pointer-to-member type B that refers to member A of a different class is not supported yet",
[i]="blocks in this form of device side enqueue call are expected to have have no parameters",
[e]=k,
[j]=k,
[g]="sorry, non\\-type template argument of pointer\\-to\\-member type (.*?) that refers to member (.*?) of a different class is not supported yet",
[c]="blocks with parameters are not accepted in this prototype of enqueue_kernel call",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"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"},
[f]={Ib,1467718284,Gb,Hb},
[j]={{o,7325,"/// 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::MemberPointer: {\n     // ...\n     // FIXME: We need TemplateArgument representation and mangling for these.\n     if (!Value.getMemberPointerPath().empty()) {\n       Diag(Arg->getBeginLoc(), diag::err_template_arg_member_ptr_base_derived_not_supported) << Value.getMemberPointerDecl() << ParamType << Arg->getSourceRange();"}},
[b]={{A,1581,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                   kernel_enqueue_flags_t flags,\n///                   const ndrange_t ndrange,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                   kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                   clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n // ...\n // With four arguments, there is only one form that the function could be\n  // called in: no events and no variable arguments.\n if (NumArgs == 4) {\n    // ...\n    if (BPT->getPointeeType()->castAs<FunctionProtoType>()->getNumParams() > 0) {\n     S.Diag(Arg3->getBeginLoc(), diag::err_opencl_enqueue_kernel_blocks_no_args);"}},
[l]={
[l]={
["clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:100:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:101:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:105:43: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::B::*\' that refers to member \'PtrMem::E::e\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:109:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:110:28: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:114:43: error: sorry, non-type template argument of pointer-to-member type \'int PtrMem::E::*\' that refers to member \'PtrMem::B::b\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:208:34: error: sorry, non-type template argument of pointer-to-member type \'int Auto::Basic::Y::*\' that refers to member \'Auto::Basic::X::n\' of a different class is not supported yet","clang/test/SemaTemplate/temp_arg_nontype_cxx1z.cpp:210:34: error: sorry, non-type template argument of pointer-to-member type \'const int Auto::Basic::Y::*\' that refers to member \'Auto::Basic::X::n\' of a different class is not supported yet"}
[lb]={"clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:42:49: error: blocks with parameters are not accepted in this prototype of enqueue_kernel call"}
}
}
},
},
["err_template_arg_method"]={
["err_opencl_enqueue_kernel_blocks_non_local_void_args"]={
[b]="err_template_arg_method",
[d]="err_opencl_enqueue_kernel_blocks_non_local_void_args",
[c]="non-type template argument refers to non-static member function %0",
[e]="blocks used in device side enqueue are expected to have parameters of type \'local void*\'",
[d]="non-type template argument refers to non-static member function A",
[i]="blocks used in device side enqueue are expected to have parameters of type \'local void*\'",
[e]=k,
[j]=k,
[g]="non\\-type template argument refers to non\\-static member function (.*?)",
[c]="blocks used in enqueue_kernel call are expected to have parameters of type \'local void\\*\'",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{o,6848,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  // Cannot refer to non-static member functions\n  if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Entity)) {\n    if (!Method->isStatic()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_method) << Method << Arg->getSourceRange();"}}
},
["err_template_arg_must_be_expr"]={
[b]="err_template_arg_must_be_expr",
[c]="template argument for non-type template parameter must be an expression",
[d]="template argument for non-type template parameter must be an expression",
[e]=k,
[g]="template argument for non\\-type template parameter must be an expression",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={Ib,1467718284,Gb,Hb},
[j]={{o,5730,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    // ...\n   case TemplateArgument::Template:\n    case TemplateArgument::TemplateExpansion:\n      // ...\n      Diag(Arg.getLocation(), diag::err_template_arg_must_be_expr) << Arg.getSourceRange();"},{o,5752,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  // Check non-type template parameters.\n  if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    // ...\n    case TemplateArgument::Type: {\n      // ...\n      if (T->isFunctionType())\n      // ...\n      else\n        Diag(SR.getBegin(), diag::err_template_arg_must_be_expr) << SR;"}},
[b]={{A,1402,"/// OpenCL C v2.0, s6.13.17.2 - Checks that the block parameters are all local\n/// void*, which is a requirement of device side enqueue.\nstatic bool checkOpenCLBlockArgs(Sema &S, Expr *BlockArg) {\n  // ...\n  // Iterate through the block parameters until either one is found that is not\n  // a local void*, or the block is valid.\n for (ArrayRef<QualType>::iterator I = Params.begin(), E = Params.end(); I != E; ++I, ++ArgCounter) {\n   if (!(*I)->isPointerType() || !(*I)->getPointeeType()->isVoidType() || (*I)->getPointeeType().getQualifiers().getAddressSpace() != LangAS::opencl_local) {\n      // ...\n      S.Diag(ErrorLoc, diag::err_opencl_enqueue_kernel_blocks_non_local_void_args);"}},
[l]={
[l]={
["clang/test/SemaTemplate/missing-class-keyword-crash.cpp"]={"clang/test/SemaTemplate/missing-class-keyword-crash.cpp:7:11: error: template argument for non-type template parameter must be an expression"}
[lb]={"clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:123:49: error: blocks used in enqueue_kernel call are expected to have parameters of type \'local void*\'","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:191:39: error: blocks used in enqueue_kernel call are expected to have parameters of type \'local void*\'","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:194:37: error: blocks used in enqueue_kernel call are expected to have parameters of type \'local void*\'","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:195:37: error: blocks used in enqueue_kernel call are expected to have parameters of type \'local void*\'","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:196:39: error: blocks used in enqueue_kernel call are expected to have parameters of type \'local void*\'","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:208:58: error: blocks used in enqueue_kernel call are expected to have parameters of type \'local void*\'","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:211:58: error: blocks used in enqueue_kernel call are expected to have parameters of type \'local void*\'","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:214:56: error: blocks used in enqueue_kernel call are expected to have parameters of type \'local void*\'","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:215:56: error: blocks used in enqueue_kernel call are expected to have parameters of type \'local void*\'"}
}
}
},
},
["err_template_arg_must_be_template"]={
["err_opencl_enqueue_kernel_incorrect_args"]={
[b]="err_template_arg_must_be_template",
[d]="err_opencl_enqueue_kernel_incorrect_args",
[c]="template argument for template template parameter must be a class template%select{| or type alias template}0",
[e]="illegal call to enqueue_kernel, incorrect argument types",
[d]={{nil,nil,{"template argument for template template parameter must be a class template",{a," or type alias template"}}}},
[i]="illegal call to enqueue_kernel, incorrect argument types",
[e]=k,
[j]=k,
[g]="template argument for template template parameter must be a class template(?:| or type alias template)",
[c]="illegal call to enqueue_kernel, incorrect argument types",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={Ib,1467718284,Gb,Hb},
[j]={{o,5824,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  case TemplateArgument::Expression:\n  case TemplateArgument::Type:\n    // ...\n    Diag(Arg.getLocation(), diag::err_template_arg_must_be_template) << getLangOpts().CPlusPlus11;"}},
[b]={{A,1644,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                   kernel_enqueue_flags_t flags,\n///                   const ndrange_t ndrange,\n///                   void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                   kernel_enqueue_flags_t flags,\n///                   const ndrange_t ndrange,\n///                   uint num_events_in_wait_list,\n///                   clk_event_t *event_wait_list,\n///                   clk_event_t *event_ret,\n///                   void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                   kernel_enqueue_flags_t flags,\n///                   const ndrange_t ndrange,\n///                   void (^block)(local void*, ...),\n///                   uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                   kernel_enqueue_flags_t flags,\n///                   const ndrange_t ndrange,\n///                   uint num_events_in_wait_list,\n///                   clk_event_t *event_wait_list,\n///                   clk_event_t *event_ret,\n///                   void (^block)(local void*, ...),\n///                   uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n  // ...\n  S.Diag(TheCall->getBeginLoc(), diag::err_opencl_enqueue_kernel_incorrect_args);"}},
[l]={
[l]={
["clang/test/SemaCXX/make_integer_seq.cpp"]={"clang/test/SemaCXX/make_integer_seq.cpp:49:20: error: template argument for template template parameter must be a class template or type alias template"}
[lb]={"clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:164:3: error: illegal call to enqueue_kernel, incorrect argument types","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:166:3: error: illegal call to enqueue_kernel, incorrect argument types"}
}
}
},
},
["err_template_arg_must_be_type"]={
["err_opencl_enqueue_kernel_invalid_local_size_type"]={
[b]="err_template_arg_must_be_type",
[d]="err_opencl_enqueue_kernel_invalid_local_size_type",
[c]="template argument for template type parameter must be a type",
[e]="illegal call to enqueue_kernel, parameter needs to be specified as integer type",
[d]="template argument for template type parameter must be a type",
[i]="illegal call to enqueue_kernel, parameter needs to be specified as integer type",
[e]=k,
[j]=k,
[g]="template argument for template type parameter must be a type",
[c]="illegal call to enqueue_kernel, parameter needs to be specified as integer type",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={Ib,1467718284,Gb,Hb},
[j]={{o,5285,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  // ...\n  default: {\n    // ...\n    Diag(SR.getBegin(), diag::err_template_arg_must_be_type) << SR;"}},
[b]={{A,15377,"/// Diagnose integer type and any valid implicit conversion to it.\nstatic bool checkOpenCLEnqueueIntType(Sema &S, Expr *E, const QualType &IntT) {\n  // Taking into account implicit conversions,\n  // allow any integer.\n  if (!E->getType()->isIntegerType()) {\n    S.Diag(E->getBeginLoc(), diag::err_opencl_enqueue_kernel_invalid_local_size_type);"}},
[l]={
[l]={
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:41:4: error: template argument for template type parameter must be a type"}
[lb]={"clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:136:18: error: illegal call to enqueue_kernel, parameter needs to be specified as integer type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:136:36: error: illegal call to enqueue_kernel, parameter needs to be specified as integer type","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:142:18: error: illegal call to enqueue_kernel, parameter needs to be specified as integer type"}
}
}
},
},
["err_template_arg_must_be_type_suggest"]={
["err_opencl_enqueue_kernel_local_size_args"]={
[b]="err_template_arg_must_be_type_suggest",
[d]="err_opencl_enqueue_kernel_local_size_args",
[c]="template argument for template type parameter must be a type; did you forget \'typename\'?",
[e]="mismatch in number of block parameters and local size arguments passed",
[d]="template argument for template type parameter must be a type; did you forget \'typename\'?",
[i]="mismatch in number of block parameters and local size arguments passed",
[e]=k,
[j]=k,
[g]="template argument for template type parameter must be a type; did you forget \'typename\'\\?",
[c]="mismatch in number of block parameters and local size arguments passed",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"864d0b002cdc",1337384569,"Suggest adding \'typename\' when it would make the compiler","Suggest adding \'typename\' when it would make the compiler\naccept the template argument expression as a type.\n\nllvm-svn: 157085"},
[f]={Ib,1467718284,Gb,Hb},
[j]={{o,5255,"bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, TemplateArgumentLoc &AL, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted) {\n  // ...\n  case TemplateArgument::Expression: {\n    // ...\n   if (auto *II = NameInfo.getName().getAsIdentifierInfo()) {\n      // ...\n     if (Result.getAsSingle<TypeDecl>() || Result.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) {\n       // ...\n        Diag(Loc, getLangOpts().MSVCCompat ? diag::ext_ms_template_type_arg_missing_typename : diag::err_template_arg_must_be_type_suggest) << FixItHint::CreateInsertion(Loc, \"typename \");"}},
[b]={{A,1493,"/// OpenCL v2.0, s6.13.17.1 - Check that sizes are provided for all\n/// \'local void*\' parameter of passed block.\nstatic bool checkOpenCLEnqueueVariadicArgs(Sema &S, CallExpr *TheCall, Expr *BlockArg, unsigned NumNonVarArgs) {\n  // ...\n  // For each argument passed to the block, a corresponding uint needs to\n // be passed to describe the size of the local memory.\n if (TotalNumArgs != NumBlockParams + NumNonVarArgs) {\n   S.Diag(TheCall->getBeginLoc(), diag::err_opencl_enqueue_kernel_local_size_args);"}},
[l]={
[l]={
["clang/test/SemaTemplate/typename-specifier.cpp"]={"clang/test/SemaTemplate/typename-specifier.cpp:174:8: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:192:8: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:165:10: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:185:10: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:210:7: error: template argument for template type parameter must be a type; did you forget \'typename\'?","clang/test/SemaTemplate/typename-specifier.cpp:217:7: error: template argument for template type parameter must be a type; did you forget \'typename\'?"}
[lb]={"clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:125:3: error: mismatch in number of block parameters and local size arguments passed","clang/test/SemaOpenCL/cl20-device-side-enqueue.cl:157:3: error: mismatch in number of block parameters and local size arguments passed"}
}
}
},
},
["err_template_arg_no_ref_bind"]={
["err_opencl_ext_vector_component_invalid_length"]={
[b]="err_template_arg_no_ref_bind",
[d]={{nil,q,"err_opencl_ext_vector_component_invalid_length"}},
[c]="non-type template parameter of reference type %diff{$ cannot bind to template argument of type $|cannot bind to template of incompatible argument type}0,1",
[e]={{nil,q,"vector component access has invalid length %0.  Supported: 1,2,3,4,8,16."}},
[d]={{nil,nil,{"non-type template parameter of reference type ",{"A cannot bind to template argument of type B","cannot bind to template of incompatible argument type"}}}},
[i]={{nil,q,"vector component access has invalid length A.  Supported: 1,2,3,4,8,16."}},
[e]=k,
[j]=k,
[g]="non\\-type template parameter of reference type (?:(.*?) cannot bind to template argument of type (.*?)|cannot bind to template of incompatible argument type)",
[c]="vector component access has invalid length (.*?)\\.  Supported\\: 1,2,3,4,8,16\\.",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,q,m}},
[f]={p,1237025389,q,r},
[f]={"392a507103f3",1490102457,"[OpenCL] Added diagnostic for checking length of vector","[OpenCL] Added diagnostic for checking length of vector\n\nReviewers: Anastasia, cfe-commits\n\nReviewed By: Anastasia\n\nSubscribers: bader, yaxunl\n\nDifferential Revision: https://reviews.llvm.org/D30937\n\nllvm-svn: 298369"},
[j]={{o,6685,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  // ...\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  // ...\n  } else {\n    // ...\n    // At this point, the template argument refers to an object or\n   // function with external linkage. We now need to check whether the\n    // argument and parameter types are compatible.\n   if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n     // We can\'t perform this conversion or binding.\n     if (ParamType->isReferenceType())\n       S.Diag(Arg->getBeginLoc(), diag::err_template_arg_no_ref_bind) << ParamType << ArgIn->getType() << Arg->getSourceRange();"}},
[b]={{"clang/lib/Sema/SemaExprMember.cpp",398,"/// Check an ext-vector component access expression.\n///\n/// VK should be set in advance to the value kind of the base\n/// expression.\nstatic QualType CheckExtVectorComponent(Sema &S, QualType baseType, ExprValueKind &VK, SourceLocation OpLoc, const IdentifierInfo *CompName, SourceLocation CompLoc) {\n  // ...\n  // OpenCL mode requires swizzle length to be in accordance with accepted\n // sizes. Clang however supports arbitrary lengths for other languages.\n if (S.getLangOpts().OpenCL && !HalvingSwizzle) {\n   // ...\n   if (IsValidOpenCLComponentSwizzleLength(SwizzleLength) == false) {\n     S.Diag(OpLoc, diag::err_opencl_ext_vector_component_invalid_length) << SwizzleLength << SourceRange(CompLoc);"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.decls/temp.variadic/multi-level-substitution.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/multi-level-substitution.cpp:237:43: error: non-type template parameter of reference type \'float &\' cannot bind to template argument of type \'int\'"}
["clang/test/SemaOpenCL/vector_swizzle_length.cl"]={"clang/test/SemaOpenCL/vector_swizzle_length.cl:8:7: error: vector component access has invalid length 5.  Supported: 1,2,3,4,8,16.","clang/test/SemaOpenCL/vector_swizzle_length.cl:9:7: error: vector component access has invalid length 5.  Supported: 1,2,3,4,8,16."}
}
}
},
},
["err_template_arg_nontype_ambig"]={
["err_opencl_extension_and_feature_differs"]={
[b]="err_template_arg_nontype_ambig",
[d]={{nil,C,"err_opencl_extension_and_feature_differs"}},
[c]="template argument for non-type template parameter is treated as function type %0",
[e]={{nil,C,"options %0 and %1 are set to different values"}},
[d]="template argument for non-type template parameter is treated as function type A",
[i]={{nil,C,"options A and B are set to different values"}},
[e]=k,
[j]=k,
[g]="template argument for non\\-type template parameter is treated as function type (.*?)",
[c]="options (.*?) and (.*?) are set to different values",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,C,V}},
[f]={p,1237025389,q,r},
[f]={"826905787ae4",1621595243,"[OpenCL] Add support of OpenCL C 3.0 __opencl_c_fp64","[OpenCL] Add support of OpenCL C 3.0 __opencl_c_fp64\n\nThere already exists cl_khr_fp64 extension. So OpenCL C 3.0\nand higher should use the feature, earlier versions still\nuse the extension. OpenCL C 3.0 API spec states that extension\nwill be not described in the option string if corresponding\noptional functionality is not supported (see 4.2. Querying Devices).\nDue to that fact the usage of features for OpenCL C 3.0 must\nbe as follows:\n\n```\n$ clang -Xclang -cl-ext=+cl_khr_fp64,+__opencl_c_fp64 ...\n\n$ clang -Xclang -cl-ext=-cl_khr_fp64,-__opencl_c_fp64 ...\n```\n\ne.g. the feature and the equivalent extension (if exists)\nmust be set to the same values\n\nReviewed By: Anastasia\n\nDifferential Revision: https://reviews.llvm.org/D96524"},
[j]={{o,5750,"/// Check that the given template argument corresponds to the given\n/// template parameter.\n///\n/// \\param Param The template parameter against which the argument will be\n/// checked.\n///\n/// \\param Arg The template argument, which may be updated due to conversions.\n///\n/// \\param Template The template in which the template argument resides.\n///\n/// \\param TemplateLoc The location of the template name for the template\n/// whose argument list we\'re matching.\n///\n/// \\param RAngleLoc The location of the right angle bracket (\'>\') that closes\n/// the template argument list.\n///\n/// \\param ArgumentPackIndex The index into the argument pack where this\n/// argument will be placed. Only valid if the parameter is a parameter pack.\n///\n/// \\param Converted The checked, converted argument will be added to the\n/// end of this small vector.\n///\n/// \\param CTAK Describes how we arrived at this particular template argument:\n/// explicitly written, deduced, etc.\n///\n/// \\returns true on error, false otherwise.\nbool Sema::CheckTemplateArgument(NamedDecl *Param, TemplateArgumentLoc &Arg, NamedDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, unsigned ArgumentPackIndex, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  // Check non-type template parameters.\n if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n    // ...\n    case TemplateArgument::Type: {\n      // ...\n      if (T->isFunctionType())\n        Diag(SR.getBegin(), diag::err_template_arg_nontype_ambig) << SR << T;"}},
[b]={{"clang/lib/Basic/OpenCLOptions.cpp",149,"bool OpenCLOptions::diagnoseFeatureExtensionDifferences(const TargetInfo &TI, DiagnosticsEngine &Diags) {\n  // ...\n  for (auto &ExtAndFeat : FeatureExtensionMap)\n   if (TI.hasFeatureEnabled(OpenCLFeaturesMap, ExtAndFeat.first) != TI.hasFeatureEnabled(OpenCLFeaturesMap, ExtAndFeat.second)) {\n      // ...\n      Diags.Report(diag::err_opencl_extension_and_feature_differs) << ExtAndFeat.first << ExtAndFeat.second;"}}
[l]={
["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:6:3: error: template argument for non-type template parameter is treated as function type \'int ()\'"}
}
},
},
["err_template_arg_not_address_constant"]={
["err_opencl_extern_block_declaration"]={
[b]="err_template_arg_not_address_constant",
[d]="err_opencl_extern_block_declaration",
[c]="non-type template argument of type %0 is not a constant expression",
[e]="invalid block variable declaration - using \'extern\' storage class is disallowed",
[d]="non-type template argument of type A is not a constant expression",
[i]="invalid block variable declaration - using \'extern\' storage class is disallowed",
[e]=k,
[j]=k,
[g]="non\\-type template argument of type (.*?) is not a constant expression",
[c]="invalid block variable declaration \\- using \'extern\' storage class is disallowed",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on","Rework implementation of null non-type template arguments based on\nRichard\'s feedback, to properly catch non-constant expressions and\ntype mismatches. Finishes <rdar://problem/11193097>.\n\nllvm-svn: 154407"},
[f]={yb,1457011999,xb,wb},
[j]={{o,6578,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n // ...\n if (!Arg->EvaluateAsRValue(EvalResult, S.Context) || EvalResult.HasSideEffects) {\n   // ...\n   S.Diag(DiagLoc, diag::err_template_arg_not_address_constant) << Arg->getType() << Arg->getSourceRange();"}},
[b]={{G,8573,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n // ...\n  if (getLangOpts().OpenCL) {\n   // ...\n   if (T->isBlockPointerType()) {\n     // ...\n     if (NewVD->hasExternalStorage()) {\n        Diag(NewVD->getLocation(), diag::err_opencl_extern_block_declaration);"}},
[l]={
[l]={
[cc]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:27:4: error: non-type template argument of type \'std::nullptr_t\' is not a constant expression","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:30:4: error: non-type template argument of type \'int *\' is not a constant expression"}
[U]={"clang/test/SemaOpenCL/invalid-block.cl:20:14: error: invalid block variable declaration - using \'extern\' storage class is disallowed","clang/test/SemaOpenCL/invalid-block.cl:24:16: error: invalid block variable declaration - using \'extern\' storage class is disallowed"}
}
}
},
},
["err_template_arg_not_address_of"]={
["err_opencl_feature_requires"]={
[b]="err_template_arg_not_address_of",
[d]={{nil,C,"err_opencl_feature_requires"}},
[c]="non-type template argument for template parameter of pointer type %0 must have its address taken",
[e]={{nil,C,"feature %0 requires support of %1 feature"}},
[d]="non-type template argument for template parameter of pointer type A must have its address taken",
[i]={{nil,C,"feature A requires support of B feature"}},
[e]=k,
[j]=k,
[g]="non\\-type template argument for template parameter of pointer type (.*?) must have its address taken",
[c]="feature (.*?) requires support of (.*?) feature",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,C,V}},
[f]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to","Overhaul checking of non-type template arguments that should refer to\nan object or function. Our previous checking was too lax, and ended up\nallowing missing or extraneous address-of operators, among other\nevils. The new checking provides better diagnostics and adheres more\nclosely to the standard.\n\nFixes PR6563 and PR6749.\n\nllvm-svn: 100125"},
[f]={"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,6938,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n if (!AddressTaken && ParamType->isPointerType()) {\n   if (Func) {\n   // ...\n   } else if (Entity->getType()->isArrayType()) {\n   // ...\n   } else {\n     // ...\n     if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType)) {\n       S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType;"},{o,6944,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  // If the template parameter has pointer type, either we must have taken the\n  // address or the argument must decay to a pointer.\n  if (!AddressTaken && ParamType->isPointerType()) {\n    if (Func) {\n    // ...\n    } else if (Entity->getType()->isArrayType()) {\n    // ...\n    } else {\n      // ...\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_address_of) << ParamType << FixItHint::CreateInsertion(Arg->getBeginLoc(), \"&\");"}},
[b]={{"clang/lib/Basic/OpenCLOptions.cpp",134,"bool OpenCLOptions::diagnoseUnsupportedFeatureDependencies(const TargetInfo &TI, DiagnosticsEngine &Diags) {\n  // ...\n  for (auto &FeaturePair : DependentFeaturesList) {\n    // ...\n    if (TI.hasFeatureEnabled(OpenCLFeaturesMap, Feature) && !TI.hasFeatureEnabled(OpenCLFeaturesMap, Dep)) {\n      // ...\n      Diags.Report(diag::err_opencl_feature_requires) << Feature << Dep;"}}
[l]={
["clang/test/Parser/MicrosoftExtensions.cpp"]={"clang/test/Parser/MicrosoftExtensions.cpp:148:25: error: non-type template argument for template parameter of pointer type \'const GUID *\' (aka \'const _GUID *\') must have its address taken"}
}
},
},
["err_template_arg_not_convertible"]={
["err_opencl_function_pointer"]={
[b]="err_template_arg_not_convertible",
[d]={{nil,q,"err_opencl_function_pointer"}},
[c]="non-type template argument of type %0 cannot be converted to a value of type %1",
[e]={{nil,C,"%select{pointers|references}0 to functions are not allowed"},{hb,q,"pointers to functions are not allowed"}},
[d]="non-type template argument of type A cannot be converted to a value of type B",
[i]={{nil,C,{{"pointers","references"}," to functions are not allowed"}},{hb,q,"pointers to functions are not allowed"}},
[e]=k,
[j]=k,
[g]="non\\-type template argument of type (.*?) cannot be converted to a value of type (.*?)",
[c]="(?:pointers|references) to functions are not allowed",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,q,m}},
[f]={p,1237025389,q,r},
[f]={"037dbe9535c9",1496426938,"[OpenCL] Harden function pointer diagnostics.","[OpenCL] Harden function pointer diagnostics.\n\nSummary: Improve OpenCL type checking by rejecting function pointer types.\n\nReviewers: Anastasia, yaxunl\n\nReviewed By: Anastasia\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D33821\n\nllvm-svn: 304575"},
[j]={{o,6688,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n  // ...\n  if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  // ...\n  } else {\n    // ...\n    // At this point, the template argument refers to an object or\n    // function with external linkage. We now need to check whether the\n    // argument and parameter types are compatible.\n   if (!S.Context.hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {\n     // We can\'t perform this conversion or binding.\n     if (ParamType->isReferenceType())\n      // ...\n      else\n        S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << ArgIn->getType() << ParamType << Arg->getSourceRange();"},{o,7061,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (S.IsQualificationConversion(ResultArg->getType(), ParamType.getNonReferenceType(), false, ObjCLifetimeConversion)) {\n  // ...\n  } else if (!S.Context.hasSameUnqualifiedType(ResultArg->getType(), ParamType.getNonReferenceType())) {\n    // ...\n    S.Diag(ResultArg->getBeginLoc(), diag::err_template_arg_not_convertible) << ResultArg->getType() << ParamType << ResultArg->getSourceRange();"},{o,7521,"/// 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 // C++ [temp.arg.nontype]p5:\n //   The following conversions are performed on each expression used\n //   as a non-type template-argument. If a non-type\n //   template-argument cannot be converted to the type of the\n //   corresponding template-parameter then the program is\n  //  ill-formed.\if (ParamType->isIntegralOrEnumerationType()) {\n   // ...\n    // Try to convert the argument to the parameter\'s type.\n    if (Context.hasSameType(ParamType, ArgType)) {\n   // ...\n   } else if (ParamType->isBooleanType()) {\n    // ...\n    } else if (IsIntegralPromotion(Arg, ArgType, ParamType) || !ParamType->isEnumeralType()) {\n    // ...\n    } else {\n      // ...\n      Diag(Arg->getBeginLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType << Arg->getSourceRange();"},{o,7704,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  // Deal with parameters of type std::nullptr_t.\n  if (ParamType->isNullPtrType()) {\n    // ...\n    case NPV_NotNullPointer:\n      Diag(Arg->getExprLoc(), diag::err_template_arg_not_convertible) << Arg->getType() << ParamType;"}},
[b]={{G,7347,"/// Returns true if there hasn\'t been any invalid type diagnosed.\nstatic bool diagnoseOpenCLTypes(Sema &Se, VarDecl *NewVD) {\n  // ...\n  // OpenCL v1.0 s6.8.a.3: Pointers to functions are not allowed.\n if (!Se.getOpenCLOptions().isAvailableOption(\"__cl_clang_function_pointers\", Se.getLangOpts())) {\n   // ...\n   while (NR->isPointerType() || NR->isMemberFunctionPointerType() || NR->isReferenceType()) {\n      if (NR->isFunctionPointerType() || NR->isMemberFunctionPointerType() || NR->isFunctionReferenceType()) {\n        Se.Diag(NewVD->getLocation(), diag::err_opencl_function_pointer) << NR->isReferenceType();"},{H,2185,"/// 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 (T->isFunctionType() && getLangOpts().OpenCL && !getOpenCLOptions().isAvailableOption(\"__cl_clang_function_pointers\", getLangOpts())) {\n    Diag(Loc, diag::err_opencl_function_pointer) << /*pointer*/ 0;"},{H,2285,"/// Build a reference type.\n///\n/// \\param T The type to which we\'ll be building a reference.\n///\n/// \\param Loc The location of the entity whose type involves this\n/// reference type or, if there is no such entity, the location of the\n/// type that will have reference type.\n///\n/// \\param Entity The name of the entity that involves the reference\n/// type, if known.\n///\n/// \\returns A suitable reference type, if there are no\n/// errors. Otherwise, returns a NULL type.\nQualType Sema::BuildReferenceType(QualType T, bool SpelledAsLValue, SourceLocation Loc, DeclarationName Entity) {\n // ...\n if (T->isFunctionType() && getLangOpts().OpenCL && !getOpenCLOptions().isAvailableOption(\"__cl_clang_function_pointers\", getLangOpts())) {\n    Diag(Loc, diag::err_opencl_function_pointer) << /*reference*/ 1;"},{H,3103,"/// 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->isFunctionType() && getLangOpts().OpenCL && !getOpenCLOptions().isAvailableOption(\"__cl_clang_function_pointers\", getLangOpts())) {\n    Diag(Loc, diag::err_opencl_function_pointer) << /*pointer*/ 0;"}},
[l]={
[l]={
[cc]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:68:4: error: non-type template argument of type \'const int\' cannot be converted to a value of type \'std::nullptr_t\'"}
["clang/test/SemaOpenCLCXX/members.clcpp"]={"clang/test/SemaOpenCLCXX/members.clcpp:15:15: error: pointers to functions are not allowed","clang/test/SemaOpenCLCXX/members.clcpp:21:9: error: pointers to functions are not allowed"}
}
}
},
},
["err_template_arg_not_decl_ref"]={
["err_opencl_function_variable"]={
[b]="err_template_arg_not_decl_ref",
[d]="err_opencl_function_variable",
[c]="non-type template argument does not refer to any declaration",
[e]="%select{non-kernel function|function scope}0 variable cannot be declared in %1 address space",
[d]="non-type template argument does not refer to any declaration",
[i]={{nil,nil,{{"non-kernel function","function scope"}," variable cannot be declared in B address space"}}},
[e]=k,
[j]=k,
[g]="non\\-type template argument does not refer to any declaration",
[c]="(?:non\\-kernel function|function scope) variable cannot be declared in (.*?) address space",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"724a8a1fef46",1264932080,"Fix PR6159 and several other problems with value-dependent non-type template","Fix PR6159 and several other problems with value-dependent non-type template\narguments. This both prevents meaningless checks on these arguments and ensures\nthat they are represented as an expression by the instantiation.\n\nCleaned up and added standard text to the relevant test case. Also started\nadding tests for *rejected* cases. At least one FIXME here where (I think) we\nallow something we shouldn\'t. More to come in the area of rejecting crazy\narguments with decent diagnostics. Suggestions welcome for still better\ndiagnostics on these errors!\n\nllvm-svn: 94953"},
[f]={"782d5f43ca4e",1457030320,"[OpenCL] Improve diagnostics of address spaces for variables in function","[OpenCL] Improve diagnostics of address spaces for variables in function\n\n - Prevent local variables to be declared in global AS\n - Diagnose AS of local variables with an extern storage class\n  as if they would be in a program scope\n\nReview: http://reviews.llvm.org/D17345\nllvm-svn: 262641"},
[j]={{o,6741,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  if (S.getLangOpts().MicrosoftExt) {\n    // ...\n    if (FirstOpLoc.isValid()) {\n     // ...\n      if (FirstOpKind == UO_AddrOf)\n     // ...\n     else if (Arg->getType()->isPointerType()) {\n       // ...\n       S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{o,6831,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n // ...\n if (!Entity) {\n   S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"},{o,7354,"/// 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     if (Base && (!VD || isa<LifetimeExtendedTemporaryDecl, UnnamedGlobalConstantDecl>(VD))) {\n       Diag(Arg->getBeginLoc(), diag::err_template_arg_not_decl_ref) << Arg->getSourceRange();"}},
[b]={{G,8599,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    // ...\n    // FIXME: Adding local AS in C++ for OpenCL might make sense.\n    if (NewVD->isFileVarDecl() || NewVD->isStaticLocal() || NewVD->hasExternalStorage()) {\n   // ...\n    } else {\n      if (T.getAddressSpace() == LangAS::opencl_global) {\n       Diag(NewVD->getLocation(), diag::err_opencl_function_variable) << 1 /*is any function*/ << \"global\";"},{G,8611,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n if (getLangOpts().OpenCL) {\n   // ...\n   // FIXME: Adding local AS in C++ for OpenCL might make sense.\n    if (NewVD->isFileVarDecl() || NewVD->isStaticLocal() || NewVD->hasExternalStorage()) {\n    // ...\n    } else {\n     // ...\n      if (T.getAddressSpace() == LangAS::opencl_constant || T.getAddressSpace() == LangAS::opencl_local) {\n       // ...\n        // OpenCL v1.1 s6.5.2 and s6.5.3: no local or constant variables\n        // in functions.\n       if (FD && !FD->hasAttr<OpenCLKernelAttr>()) {\n         if (T.getAddressSpace() == LangAS::opencl_constant)\n            Diag(NewVD->getLocation(), diag::err_opencl_function_variable) << 0 /*non-kernel only*/ << \"constant\";"},{G,8614,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n if (getLangOpts().OpenCL) {\n   // ...\n   // FIXME: Adding local AS in C++ for OpenCL might make sense.\n   if (NewVD->isFileVarDecl() || NewVD->isStaticLocal() || NewVD->hasExternalStorage()) {\n   // ...\n   } else {\n     // ...\n     if (T.getAddressSpace() == LangAS::opencl_constant || T.getAddressSpace() == LangAS::opencl_local) {\n       // ...\n       // OpenCL v1.1 s6.5.2 and s6.5.3: no local or constant variables\n       // in functions.\n       if (FD && !FD->hasAttr<OpenCLKernelAttr>()) {\n          if (T.getAddressSpace() == LangAS::opencl_constant)\n         // ...\n          else\n            Diag(NewVD->getLocation(), diag::err_opencl_function_variable) << 0 /*non-kernel only*/ << \"local\";"}},
[l]={
[l]={
["clang/test/SemaTemplate/temp_arg_template.cpp"]={"clang/test/SemaTemplate/temp_arg_template.cpp:107:21: error: non-type template argument does not refer to any declaration"}
["clang/test/SemaOpenCL/atomic-init.cl"]={"clang/test/SemaOpenCL/atomic-init.cl:10:21: error: function scope variable cannot be declared in global address space"}
}
}
},
},
["err_template_arg_not_ice"]={
["err_opencl_global_invalid_addr_space"]={
[b]="err_template_arg_not_ice",
[d]="err_opencl_global_invalid_addr_space",
[c]="non-type template argument of type %0 is not an integral constant expression",
[e]="%select{program scope|static local|extern}0 variable must reside in %1 address space",
[d]="non-type template argument of type A is not an integral constant expression",
[i]={{nil,nil,{{"program scope","static local","extern"}," variable must reside in B address space"}}},
[e]=k,
[j]=k,
[g]="non\\-type template argument of type (.*?) is not an integral constant expression",
[c]="(?:program scope|static local|extern) variable must reside in (.*?) address space",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"9812634c5243",1365118571,"Add an error to check that all program scope variables are in the constant address space in OpenCL.","Add an error to check that all program scope variables are in the constant address space in OpenCL.\n\nllvm-svn: 178811"},
[j]={{o,7496,"/// 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 // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //   as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n //   corresponding template-parameter then the program is\n //   ill-formed.\n if (ParamType->isIntegralOrEnumerationType()) {\n   // ...\n    if (!ArgType->isIntegralOrEnumerationType()) {\n   // ...\n   } else if (!Arg->isValueDependent()) {\n      class TmplArgICEDiagnoser : public VerifyICEDiagnoser {\n        // ...\n        SemaDiagnosticBuilder diagnoseNotICE(Sema &S, SourceLocation Loc) override { return S.Diag(Loc, diag::err_template_arg_not_ice) << T; }"}},
[b]={{G,8589,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n if (getLangOpts().OpenCL) {\n   // ...\n   // FIXME: Adding local AS in C++ for OpenCL might make sense.\n   if (NewVD->isFileVarDecl() || NewVD->isStaticLocal() || NewVD->hasExternalStorage()) {\n     if (!T->isSamplerT() && !T->isDependentType() && !(T.getAddressSpace() == LangAS::opencl_constant || (T.getAddressSpace() == LangAS::opencl_global && getOpenCLOptions().areProgramScopeVariablesSupported(getLangOpts())))) {\n       // ...\n       if (getOpenCLOptions().areProgramScopeVariablesSupported(getLangOpts()))\n          Diag(NewVD->getLocation(), diag::err_opencl_global_invalid_addr_space) << Scope << \"global or constant\";"},{G,8592,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (getLangOpts().OpenCL) {\n   // ...\n   // FIXME: Adding local AS in C++ for OpenCL might make sense.\n   if (NewVD->isFileVarDecl() || NewVD->isStaticLocal() || NewVD->hasExternalStorage()) {\n     if (!T->isSamplerT() && !T->isDependentType() && !(T.getAddressSpace() == LangAS::opencl_constant || (T.getAddressSpace() == LangAS::opencl_global && getOpenCLOptions().areProgramScopeVariablesSupported(getLangOpts())))) {\n       // ...\n       if (getOpenCLOptions().areProgramScopeVariablesSupported(getLangOpts()))\n        // ...\n        else\n          Diag(NewVD->getLocation(), diag::err_opencl_global_invalid_addr_space) << Scope << \"constant\";"}},
[l]={
[l]={
["clang/test/SemaCXX/constant-expression.cpp"]={"clang/test/SemaCXX/constant-expression.cpp:103:5: error: non-type template argument of type \'int\' is not an integral constant expression"}
["clang/test/Parser/opencl-storage-class.cl"]={"clang/test/Parser/opencl-storage-class.cl:11:14: error: static local variable must reside in constant address space","clang/test/Parser/opencl-storage-class.cl:13:14: error: extern variable must reside in constant address space"}
}
}
},
},
["err_template_arg_not_integral_or_enumeral"]={
["err_opencl_half_declaration"]={
[b]="err_template_arg_not_integral_or_enumeral",
[d]="err_opencl_half_declaration",
[c]="non-type template argument of type %0 must have an integral or enumeration type",
[e]="declaring variable of type %0 is not allowed",
[d]="non-type template argument of type A must have an integral or enumeration type",
[i]="declaring variable of type A is not allowed",
[e]=k,
[j]=k,
[g]="non\\-type template argument of type (.*?) must have an integral or enumeration type",
[c]="declaring variable of type (.*?) is not allowed",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"dd7f4566b1a8",1358942180,"Add a new LangOpt NativeHalfType. This option allows for native half/fp16","Add a new LangOpt NativeHalfType. This option allows for native half/fp16\noperations (as opposed to storage only half/fp16).\n\nAlso add some semantic checks for OpenCL half types.\n\nllvm-svn: 173254"},
[j]={{o,7483,"/// 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  // C++ [temp.arg.nontype]p5:\n  //  The following conversions are performed on each expression used\n  //  as a non-type template-argument. If a non-type\n  //  template-argument cannot be converted to the type of the\n //   corresponding template-parameter then the program is\n  //  ill-formed.\n if (ParamType->isIntegralOrEnumerationType()) {\n    // ...\n    if (!ArgType->isIntegralOrEnumerationType()) {\n      Diag(Arg->getBeginLoc(), diag::err_template_arg_not_integral_or_enumeral) << ArgType << Arg->getSourceRange();"}},
[b]={{G,7361,"/// Returns true if there hasn\'t been any invalid type diagnosed.\nstatic bool diagnoseOpenCLTypes(Sema &Se, VarDecl *NewVD) {\n // ...\n if (!Se.getOpenCLOptions().isAvailableOption(\"cl_khr_fp16\", Se.getLangOpts())) {\n   // OpenCL v1.2 s6.1.1.1: reject declaring variables of the half and\n   // half array type (unless the cl_khr_fp16 extension is enabled).\n   if (Se.Context.getBaseElementType(R)->isHalfType()) {\n      Se.Diag(NewVD->getLocation(), diag::err_opencl_half_declaration) << R;"}},
[l]={
[l]={
["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:35:3: error: non-type template argument of type \'X\' must have an integral or enumeration type"}
["clang/test/SemaOpenCLCXX/template-opencl-types.clcpp"]={"clang/test/SemaOpenCLCXX/template-opencl-types.clcpp:22:8: error: declaring variable of type \'__private half\' is not allowed","clang/test/SemaOpenCLCXX/template-opencl-types.clcpp:10:5: error: declaring variable of type \'__private half\' is not allowed"}
}
}
},
},
["err_template_arg_not_object_or_func"]={
["err_opencl_half_load_store"]={
[b]="err_template_arg_not_object_or_func",
[d]="err_opencl_half_load_store",
[c]="non-type template argument does not refer to an object or function",
[e]="%select{loading directly from|assigning directly to}0 pointer to type %1 requires cl_khr_fp16. Use vector data %select{load|store}0 builtin functions instead",
[d]="non-type template argument does not refer to an object or function",
[i]={{nil,nil,{{"loading directly from","assigning directly to"}," pointer to type B requires cl_khr_fp16. Use vector data ",{"load","store"}," builtin functions instead"}}},
[e]=k,
[j]=k,
[g]="non\\-type template argument does not refer to an object or function",
[c]="(?:loading directly from|assigning directly to) pointer to type (.*?) requires cl_khr_fp16\\. Use vector data (?:load|store) builtin functions instead",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{o,6862,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  // A non-type template argument must refer to an object or function.\n  if (!Func && !Var && !Guid) {\n    // ...\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_object_or_func) << Arg->getSourceRange();"}}
},
["err_template_arg_not_pointer_to_member_form"]={
[b]="err_template_arg_not_pointer_to_member_form",
[c]="non-type template argument is not a pointer to member constant",
[d]="non-type template argument is not a pointer to member constant",
[e]=k,
[g]="non\\-type template argument is not a pointer to member constant",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"6ced97aaae91",1360632583,"Diagnose loads of \'half\' l-values in OpenCL.","Diagnose loads of \'half\' l-values in OpenCL.\nPatch by Joey Gouly!\n\nllvm-svn: 174928"},
[j]={{o,7069,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  if (!DRE)\n    return S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"},{o,7097,"/// Checks whether the given template argument is a pointer to\n/// member constant according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentPointerToMember(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  S.Diag(Arg->getBeginLoc(), diag::err_template_arg_not_pointer_to_member_form) << Arg->getSourceRange();"}},
[b]={{E,681,"ExprResult Sema::DefaultLvalueConversion(Expr *E) {\n // ...\n  // OpenCL usually rejects direct accesses to values of \'half\' type.\n  if (getLangOpts().OpenCL && !getOpenCLOptions().isAvailableOption(\"cl_khr_fp16\", getLangOpts()) && T->isHalfType()) {\n    Diag(E->getExprLoc(), diag::err_opencl_half_load_store) << 0 << T;"},{E,14458,"// C99 6.5.16.1\nQualType Sema::CheckAssignmentOperands(Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType, BinaryOperatorKind Opc) {\n  // ...\n  // OpenCL v1.2 s6.1.1.1 p2:\n  // The half data type can only be used to declare a pointer to a buffer that\n  // contains half values\n  if (getLangOpts().OpenCL && !getOpenCLOptions().isAvailableOption(\"cl_khr_fp16\", getLangOpts()) && LHSType->isHalfType()) {\n    Diag(Loc, diag::err_opencl_half_load_store) << 1 << LHSType.getUnqualifiedType();"}},
[l]={
[l]={
["clang/test/SemaTemplate/instantiate-member-pointers.cpp"]={"clang/test/SemaTemplate/instantiate-member-pointers.cpp:73:5: error: non-type template argument is not a pointer to member constant"}
["clang/test/SemaOpenCLCXX/half.clcpp"]={"clang/test/SemaOpenCLCXX/half.clcpp:8:12: error: loading directly from pointer to type \'__private half\' requires cl_khr_fp16. Use vector data load builtin functions instead"}
}
}
},
},
["err_template_arg_not_valid_template"]={
["err_opencl_implicit_vector_conversion"]={
[b]="err_template_arg_not_valid_template",
[d]="err_opencl_implicit_vector_conversion",
[c]="template argument does not refer to a class or alias template, or template template parameter",
[e]="implicit conversions between vector types (%0 and %1) are not permitted",
[d]="template argument does not refer to a class or alias template, or template template parameter",
[i]="implicit conversions between vector types (A and B) are not permitted",
[e]=k,
[j]=k,
[g]="template argument does not refer to a class or alias template, or template template parameter",
[c]="implicit conversions between vector types \\((.*?) and (.*?)\\) are not permitted",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"b8b04f852637",1459025205,"[NFC] Tweak diagnostic for template template arguments, to include template aliases.","[NFC] Tweak diagnostic for template template arguments, to include template aliases.\n\nThe prior diagnostic (err_template_arg_not_class_template) would state that the template argument to a template template parameter can only be a class template, when it can also be a template alias. The newly renamed diagnostic (err_template_arg_not_valid_template) mentions template aliases.\n\nllvm-svn: 264522"},
[f]={"f961e755b1a9",1440957999,"[OpenCL] Improve diagnostics detecting implicit vector conversion.","[OpenCL] Improve diagnostics detecting implicit vector conversion.\n\nReviewers: pekka.jaaskelainen\n\nDifferential Revision: http://reviews.llvm.org/D12470\n\nllvm-svn: 246393"},
[j]={{o,1683,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n  // ...\n  if (!Default.isInvalid()) {\n    // ...\n    if (DefaultArg.getArgument().getAsTemplate().isNull()) {\n      Diag(DefaultArg.getLocation(), diag::err_template_arg_not_valid_template) << DefaultArg.getSourceRange();"},{o,7773,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // ...\n  // C++0x [temp.arg.template]p1:\n  //   A template-argument for a template template-parameter shall be\n  //  the name of a class template or an alias template, expressed as an\n  //   id-expression. When the template-argument names a class template, only\n  //  primary class templates are considered when matching the\n  //  template template argument with the corresponding parameter;\n  //  partial specializations are not considered even if their\n  //  parameter lists match that of the template template parameter.\n  //\n  // Note that we also allow template template parameters here, which\n  // will happen when we are dealing with, e.g., class template\n  // partial specializations.\n  if (!isa<ClassTemplateDecl>(Template) && !isa<TemplateTemplateParmDecl>(Template) && !isa<TypeAliasTemplateDecl>(Template) && !isa<BuiltinTemplateDecl>(Template)) {\n    // ...\n    Diag(Arg.getLocation(), diag::err_template_arg_not_valid_template);"}}
[b]={{E,11162,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // ...\n  // OpenCL V1.1 6.2.6.p1:\n  // If the operands are of more than one vector type, then an error shall\n  // occur. Implicit conversions between vector types are not permitted, per\n  // section 6.2.1.\n  if (getLangOpts().OpenCL && RHSVecType && isa<ExtVectorType>(RHSVecType) && LHSVecType && isa<ExtVectorType>(LHSVecType)) {\n    Diag(Loc, diag::err_opencl_implicit_vector_conversion) << LHSType << RHSType;"}},
},
["err_template_arg_object_no_linkage"]={
[b]="err_template_arg_object_no_linkage",
[c]="non-type template argument refers to %select{function|object}0 %1 that does not have linkage",
[d]={{nil,nil,{"non-type template argument refers to ",{L,"object"}," B that does not have linkage"}}},
[e]=k,
[g]="non\\-type template argument refers to (?:function|object) (.*?) that does not have linkage",
[h]=a,
[i]=m,
[f]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object","Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object\nor function with internal linkage as a non-type template argument.\n\nllvm-svn: 154053"},
[j]={{o,6878,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  // Address / reference template args must have external linkage in C++98.\n  if (Entity->getFormalLinkage() == InternalLinkage) {\n  // ...\n  } else if (!Entity->hasLinkage()) {\n    S.Diag(Arg->getBeginLoc(), diag::err_template_arg_object_no_linkage) << !Func << Entity << Arg->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:168:9: error: non-type template argument refers to function \'f\' that does not have linkage"}
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:87:12: error: implicit conversions between vector types (\'int2\' (vector of 2 \'int\' values) and \'float2\' (vector of 2 \'float\' values)) are not permitted","clang/test/SemaOpenCL/cond.cl:118:12: error: implicit conversions between vector types (\'char3\' (vector of 3 \'char\' values) and \'char2\' (vector of 2 \'char\' values)) are not permitted"}
}
}
},
},
["err_template_arg_overload_type"]={
["err_opencl_invalid_access_qualifier"]={
[b]="err_template_arg_overload_type",
[d]="err_opencl_invalid_access_qualifier",
[c]="template argument is the type of an unresolved overloaded function",
[e]="access qualifier can only be used for pipe and image type",
[d]="template argument is the type of an unresolved overloaded function",
[i]="access qualifier can only be used for pipe and image type",
[e]=k,
[j]=k,
[g]="template argument is the type of an unresolved overloaded function",
[c]="access qualifier can only be used for pipe and image type",
[h]=a,
[i]=m,
[f]={"8364e6b56856",1261437444,"When a template-id refers to a single function template, and the","When a template-id refers to a single function template, and the\nexplicitly-specified template arguments are enough to determine the\ninstantiation, and either template argument deduction fails or is not\nperformed in that context, we can resolve the template-id down to a\nfunction template specialization (so sayeth C++0x\n[temp.arg.explicit]p3). Fixes PR5811.\n\nllvm-svn: 91852"},
[j]={{o,6511,"/// Check a template argument against its corresponding\n/// template type parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.type]. It\n/// returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateArgument(TypeSourceInfo *ArgInfo) {\n  // ...\n  if (CanonArg->isVariablyModifiedType()) {\n  // ...\n  } else if (Context.hasSameUnqualifiedType(Arg, Context.OverloadTy)) {\n    return Diag(SR.getBegin(), diag::err_template_arg_overload_type) << SR;"}}
},
["err_template_arg_ref_bind_ignores_quals"]={
[b]="err_template_arg_ref_bind_ignores_quals",
[c]="reference binding of non-type template parameter %diff{of type $ to template argument of type $|to template argument}0,1 ignores qualifiers",
[d]={{nil,nil,{"reference binding of non-type template parameter ",{"of type A to template argument of type B","to template argument"}," ignores qualifiers"}}},
[e]=k,
[g]="reference binding of non\\-type template parameter (?:of type (.*?) to template argument of type (.*?)|to template argument) ignores qualifiers",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"11e13f60ea8d",1456456383,"[OpenCL] Refine OpenCLImageAccessAttr to OpenCLAccessAttr","[OpenCL] Refine OpenCLImageAccessAttr to OpenCLAccessAttr\n\nSummary:\nOpenCL access qualifiers are now not only used for image types, refine it to avoid misleading,\n\nAdd semacheck for OpenCL access qualifier as well as test caees.\n\nReviewers: pekka.jaaskelainen, Anastasia, aaron.ballman\n\nSubscribers: aaron.ballman, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D16040\n\nllvm-svn: 261961"},
[j]={{o,6670,"/// Checks whether the given template argument is compatible with its\n/// template parameter.\nstatic bool CheckTemplateArgumentIsCompatibleWithParameter(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType) {\n // ...\n if (ParamType->isPointerType() && !ParamType->castAs<PointerType>()->getPointeeType()->isFunctionType() && S.IsQualificationConversion(ArgType, ParamType, false, ObjCLifetimeConversion)) {\n  // ...\n  } else {\n    if (const ReferenceType *ParamRef = ParamType->getAs<ReferenceType>()) {\n      if (!ParamRef->getPointeeType()->isFunctionType()) {\n        // ...\n        if ((ParamQuals | ArgQuals) != ParamQuals) {\n         S.Diag(Arg->getBeginLoc(), diag::err_template_arg_ref_bind_ignores_quals) << ParamType << Arg->getType() << Arg->getSourceRange();"}},
[b]={{H,8401,"/// Handle OpenCL Access Qualifier Attribute.\nstatic void HandleOpenCLAccessAttr(QualType &CurType, const ParsedAttr &Attr, Sema &S) {\n  // OpenCL v2.0 s6.6 - Access qualifier can be used only for image and pipe type.\n  if (!(CurType->isImageType() || CurType->isPipeType())) {\n   S.Diag(Attr.getLoc(), diag::err_opencl_invalid_access_qualifier);"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1.cpp:119:8: error: reference binding of non-type template parameter of type \'int &\' to template argument of type \'const int\' ignores qualifiers"}
["clang/test/SemaOpenCL/invalid-pipes-cl1.2.cl"]={"clang/test/SemaOpenCL/invalid-pipes-cl1.2.cl:5:10: error: access qualifier can only be used for pipe and image type"}
}
}
},
},
["err_template_arg_reference_var"]={
["err_opencl_invalid_block_declaration"]={
[b]="err_template_arg_reference_var",
[d]="err_opencl_invalid_block_declaration",
[c]="non-type template argument of reference type %0 is not an object",
[e]="invalid block variable declaration - must be %select{const qualified|initialized}0",
[d]="non-type template argument of reference type A is not an object",
[i]={{nil,nil,{"invalid block variable declaration - must be ",{"const qualified","initialized"}}}},
[e]=k,
[j]=k,
[g]="non\\-type template argument of reference type (.*?) is not an object",
[c]="invalid block variable declaration \\- must be (?:const qualified|initialized)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"b242683d9992",1270146755,"Overhaul checking of non-type template arguments that should refer to","Overhaul checking of non-type template arguments that should refer to\nan object or function. Our previous checking was too lax, and ended up\nallowing missing or extraneous address-of operators, among other\nevils. The new checking provides better diagnostics and adheres more\nclosely to the standard.\n\nFixes PR6563 and PR6749.\n\nllvm-svn: 100125"},
[f]={yb,1457011999,xb,wb},
[j]={{o,6888,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  if (Var) {\n    // A value of reference type is not an object.\n    if (Var->getType()->isReferenceType()) {\n      S.Diag(Arg->getBeginLoc(), diag::err_template_arg_reference_var) << Var->getType() << Arg->getSourceRange();"}},
[b]={{G,8567,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    // ...\n   if (T->isBlockPointerType()) {\n      // OpenCL v2.0 s6.12.5 - Any block declaration must be const qualified and\n      // can\'t use \'extern\' storage class.\n      if (!T.isConstQualified()) {\n        Diag(NewVD->getLocation(), diag::err_opencl_invalid_block_declaration) << 0 /*const*/;"},{G,14031,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    // OpenCL v2.0 s6.12.5 - Every block variable declaration must have an\n    // initialiser\n    if (var->getTypeSourceInfo()->getType()->isBlockPointerType() && !var->hasInit()) {\n      Diag(var->getLocation(), diag::err_opencl_invalid_block_declaration) << 1 /*Init*/;"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p5.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p5.cpp:154:9: error: non-type template argument of reference type \'int &\' is not an object"}
[U]={"clang/test/SemaOpenCL/invalid-block.cl:16:15: error: invalid block variable declaration - must be initialized"}
}
}
},
},
["err_template_arg_template_params_mismatch"]={
["err_opencl_invalid_param"]={
[b]="err_template_arg_template_params_mismatch",
[d]={{nil,p,"err_opencl_invalid_param"}},
[c]="template template argument has different template parameters than its corresponding template template parameter",
[e]={{nil,p,"declaring function parameter of type %0 is not allowed%select{; did you forget * ?|}1"}},
[d]="template template argument has different template parameters than its corresponding template template parameter",
[i]={{nil,p,{"declaring function parameter of type A is not allowed",{"; did you forget * ?",a}}}},
[e]=k,
[j]=k,
[g]="template template argument has different template parameters than its corresponding template template parameter",
[c]="declaring function parameter of type (.*?) is not allowed(?:; did you forget \\* \\?|)",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,p,m}},
[f]={p,1237025389,q,r},
[f]={"14f6bfcb52e7",1582847864,"[clang] Implement objc_non_runtime_protocol to remove protocol metadata","[clang] Implement objc_non_runtime_protocol to remove protocol metadata\n\nSummary:\nMotivated by the new objc_direct attribute, this change adds a new\nattribute that remotes metadata from Protocols that the programmer knows\nisn\'t going to be used at runtime. We simply have the frontend skip\ngenerating any protocol metadata entries (e.g. OBJC_CLASS_NAME,\n_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol\nmarked with `__attribute__((objc_non_runtime_protocol))`.\n\nThere are a few APIs used to retrieve a protocol at runtime.\n`@protocol(SomeProtocol)` will now error out of the requested protocol\nis marked with attribute. `objc_getProtocol` will return `NULL` which\nis consistent with the behavior of a non-existing protocol.\n\nSubscribers: cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D75574"},
[j]={{o,8018,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      // ...\n      if (TemplateArgLoc.isValid()) {\n       S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{o,8041,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n // Check that both are parameter packs or neither are parameter packs.\n // However, if we are matching a template template argument to a\n // template template parameter, the template template parameter can have\n // a parameter pack where the template template argument does not.\n if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n   if (Complain) {\n     // ...\n     if (TemplateArgLoc.isValid()) {\n       S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{o,8080,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // ...\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n    // ...\n    // If we are matching a template template argument to a template\n   // template parameter and one of the non-type template parameter types\n   // is dependent, then we must wait until template instantiation time\n   // to actually compare the arguments.\n   if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n      // ...\n      if (!S.Context.hasSameType(OldType, NewType)) {\n       if (Complain) {\n          // ...\n          if (TemplateArgLoc.isValid()) {\n           S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"},{o,8167,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n // ...\n if (TemplateArgLoc.isValid()) {\n   S.Diag(TemplateArgLoc, diag::err_template_arg_template_params_mismatch);"}},
[b]={{H,5525,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::Function: {\n      // ...\n      // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n      // strict prototypes as in C2x because it allows a function definition to\n      // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n      if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n     // ...\n      } else {\n        // ...\n        for (unsigned i = 0, e = FTI.NumParams; i != e; ++i) {\n         // ...\n         // Look for \'void\'void is allowed only as a single parameter to a\n         // function with no other parameters (C99 6.7.5.3p10).  We record\n         // int(void) as a FunctionProtoType with an empty parameter list.\n         if (ParamTy->isVoidType()) {\n          // ...\n          } else if (ParamTy->isHalfType()) {\n           // Disallow half FP parameters.\n           // FIXME: This really should be in BuildFunctionType.\n            if (S.getLangOpts().OpenCL) {\n             if (!S.getOpenCLOptions().isAvailableOption(\"cl_khr_fp16\", S.getLangOpts())) {\n               S.Diag(Param->getLocation(), diag::err_opencl_invalid_param) << ParamTy << 0;"},{H,5548,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::Function: {\n      // ...\n     // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n     // strict prototypes as in C2x because it allows a function definition to\n     // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n     if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n      // ...\n      } else {\n        // ...\n        for (unsigned i = 0, e = FTI.NumParams; i != e; ++i) {\n         // ...\n          // Look for \'void\'.  void is allowed only as a single parameter to a\n          // function with no other parameters (C99 6.7.5.3p10).  We record\n          // int(void) as a FunctionProtoType with an empty parameter list.\n          if (ParamTy->isVoidType()) {\n         // ...\n          } else if (ParamTy->isHalfType()) {\n         // ...\n          } else if (!FTI.hasPrototype) {\n         // ...\n         } else if (S.getLangOpts().OpenCL && ParamTy->isBlockPointerType()) {\n           // ...\n            S.Diag(Param->getLocation(), diag::err_opencl_invalid_param) << ParamTy << 1 /*hint off*/;"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:36:14: error: template template argument has different template parameters than its corresponding template template parameter"}
["clang/test/SemaCXX/GH61441.cpp"]={"clang/test/SemaCXX/GH61441.cpp:7:22: error: declaring function parameter of type \'__private half\' is not allowed; did you forget * ?","clang/test/SemaCXX/GH61441.cpp:8:22: error: declaring function parameter of type \'void (__generic ^const __private)(__private int)\' is not allowed"}
}
}
},
},
["err_template_arg_thread_local"]={
["err_opencl_invalid_read_write"]={
[b]="err_template_arg_thread_local",
[d]="err_opencl_invalid_read_write",
[c]="non-type template argument refers to thread-local object",
[e]={{nil,C,"access qualifier %0 can not be used for %1 %select{|prior to OpenCL C version 2.0 or in version 3.0 and without __opencl_c_read_write_images feature}2"},{hb,nil,"access qualifier %0 can not be used for %1 %select{|prior to OpenCL version 2.0}2"}},
[d]="non-type template argument refers to thread-local object",
[i]={{nil,C,{"access qualifier A can not be used for B ",{a,"prior to OpenCL C version 2.0 or in version 3.0 and without __opencl_c_read_write_images feature"}}},{hb,nil,{"access qualifier A can not be used for B ",{a,"prior to OpenCL version 2.0"}}}},
[e]=k,
[j]=k,
[g]="non\\-type template argument refers to thread\\-local object",
[c]="access qualifier (.*?) can not be used for (.*?) (?:|prior to OpenCL C version 2\\.0 or in version 3\\.0 and without __opencl_c_read_write_images feature)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"9380e0ea236a",1333573890,"Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object","Implement C++11 [temp.arg.nontype]\'s permission to use the address of an object\nor function with internal linkage as a non-type template argument.\n\nllvm-svn: 154053"},
[f]={"11e13f60ea8d",1456456383,"[OpenCL] Refine OpenCLImageAccessAttr to OpenCLAccessAttr","[OpenCL] Refine OpenCLImageAccessAttr to OpenCLAccessAttr\n\nSummary:\nOpenCL access qualifiers are now not only used for image types, refine it to avoid misleading,\n\nAdd semacheck for OpenCL access qualifier as well as test caees.\n\nReviewers: pekka.jaaskelainen, Anastasia, aaron.ballman\n\nSubscribers: aaron.ballman, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D16040\n\nllvm-svn: 261961"},
[j]={{o,6896,"/// Checks whether the given template argument is the address\n/// of an object or function according to C++ [temp.arg.nontype]p1.\nstatic bool CheckTemplateArgumentAddressOfObjectOrFunction(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted) {\n  // ...\n  if (Var) {\n    // ...\n    // A template argument must have static storage duration.\n   if (Var->getTLSKind()) {\n     S.Diag(Arg->getBeginLoc(), diag::err_template_arg_thread_local) << Arg->getSourceRange();"}},
[b]={{Q,8324,"static void handleOpenCLAccessAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // OpenCL v2.0 s6.6 - read_write can be used for image types to specify that\n  // an image object can be read and written. OpenCL v2.0 s6.13.6 - A kernel\n  // cannot read from and write to the same pipe object. Using the read_write\n  // (or __read_write) qualifier with the pipe qualifier is a compilation error.\n  // OpenCL v3.0 s6.8 - For OpenCL C 2.0, or with the\n // __opencl_c_read_write_images feature, image objects specified as arguments\n  // to a kernel can additionally be declared to be read-write.\n  // C++ for OpenCL 1.0 inherits rule from OpenCL C v2.0.\n  // C++ for OpenCL 2021 inherits rule from OpenCL C v3.0.\n  if (const auto *PDecl = dyn_cast<ParmVarDecl>(D)) {\n    // ...\n    if (AL.getAttrName()->getName().contains(\"read_write\")) {\n      // ...\n     if (ReadWriteImagesUnsupported || DeclTy->isPipeType()) {\n       S.Diag(AL.getLoc(), diag::err_opencl_invalid_read_write) << AL << PDecl->getType() << DeclTy->isImageType();"}},
[l]={
[l]={
[cc]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:33:4: error: non-type template argument refers to thread-local object"}
["clang/test/SemaOpenCL/access-qualifier.cl"]={"clang/test/SemaOpenCL/access-qualifier.cl:39:18: error: access qualifier \'read_write\' can not be used for \'__read_write image1d_t\' prior to OpenCL C version 2.0 or in version 3.0 and without __opencl_c_read_write_images feature","clang/test/SemaOpenCL/access-qualifier.cl:99:17: error: access qualifier \'__read_write\' can not be used for \'__read_write image1d_t\' prior to OpenCL C version 2.0 or in version 3.0 and without __opencl_c_read_write_images feature"}
}
}
},
},
["err_template_arg_untyped_null_constant"]={
["err_opencl_invalid_return"]={
[b]="err_template_arg_untyped_null_constant",
[d]="err_opencl_invalid_return",
[c]="null non-type template argument must be cast to template parameter type %0",
[e]="declaring function return value of type %0 is not allowed %select{; did you forget * ?|}1",
[d]="null non-type template argument must be cast to template parameter type A",
[i]={{nil,nil,{"declaring function return value of type A is not allowed ",{"; did you forget * ?",a}}}},
[e]=k,
[j]=k,
[g]="null non\\-type template argument must be cast to template parameter type (.*?)",
[c]="declaring function return value of type (.*?) is not allowed (?:; did you forget \\* \\?|)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"31f55dced546",1333752038,"Implement support for null non-type template arguments for non-type","Implement support for null non-type template arguments for non-type\ntemplate parameters of pointer, pointer-to-member, or nullptr_t\ntype in C++11. Fixes PR9700 / <rdar://problem/11193097>.\n\nllvm-svn: 154219"},
[f]={yb,1457011999,xb,wb},
[j]={{o,6627,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n // ...\n // If we don\'t have a null pointer value, but we do have a NULL pointer\n // constant, suggest a cast to the appropriate type.\n if (Arg->isNullPointerConstant(S.Context, Expr::NPC_NeverValueDependent)) {\n   // ...\n   S.Diag(Arg->getExprLoc(), diag::err_template_arg_untyped_null_constant) << ParamType << FixItHint::CreateInsertion(Arg->getBeginLoc(), Code) << FixItHint::CreateInsertion(S.getLocForEndOfToken(Arg->getEndLoc()), \")\");"}},
[b]={{H,5285,"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      // Do not allow returning half FP value.\n     // FIXME: This really should be in BuildFunctionType.\n     if (T->isHalfType()) {\n        if (S.getLangOpts().OpenCL) {\n         if (!S.getOpenCLOptions().isAvailableOption(\"cl_khr_fp16\", S.getLangOpts())) {\n           S.Diag(D.getIdentifierLoc(), diag::err_opencl_invalid_return) << T << 0 /*pointer hint*/;"},{H,5302,"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      if (LangOpts.OpenCL) {\n        // OpenCL v2.0 s6.12.5 - A block cannot be the return value of a\n        // function.\n        if (T->isBlockPointerType() || T->isImageType() || T->isSamplerT() || T->isPipeType()) {\n          S.Diag(D.getIdentifierLoc(), diag::err_opencl_invalid_return) << T << 1 /*hint off*/;"}},
[l]={
[l]={
[cc]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:21:4: error: null non-type template argument must be cast to template parameter type \'int *\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:22:4: error: null non-type template argument must be cast to template parameter type \'int *\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:40:4: error: null non-type template argument must be cast to template parameter type \'int X::*\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:41:4: error: null non-type template argument must be cast to template parameter type \'int X::*\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:51:5: error: null non-type template argument must be cast to template parameter type \'int (X::*)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:52:5: error: null non-type template argument must be cast to template parameter type \'int (X::*)(int)\'","clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:66:4: error: null non-type template argument must be cast to template parameter type \'std::nullptr_t\'"}
["clang/test/SemaOpenCLCXX/half.clcpp"]={"clang/test/SemaOpenCLCXX/half.clcpp:7:6: error: declaring function return value of type \'half\' is not allowed ; did you forget * ?"}
}
}
},
},
["err_template_arg_wrongtype_null_constant"]={
["err_opencl_invalid_type_array"]={
[b]="err_template_arg_wrongtype_null_constant",
[d]="err_opencl_invalid_type_array",
[c]="null non-type template argument of type %0 does not match template parameter of type %1",
[e]="array of %0 type is invalid in OpenCL",
[d]="null non-type template argument of type A does not match template parameter of type B",
[i]="array of A type is invalid in OpenCL",
[e]=k,
[j]=k,
[g]="null non\\-type template argument of type (.*?) does not match template parameter of type (.*?)",
[c]="array of (.*?) type is invalid in OpenCL",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"20fdef32dd31",1334077705,"Rework implementation of null non-type template arguments based on","Rework implementation of null non-type template arguments based on\nRichard\'s feedback, to properly catch non-constant expressions and\ntype mismatches. Finishes <rdar://problem/11193097>.\n\nllvm-svn: 154407"},
[f]={"89307aa3e9fc",1456288176,"[OpenCL] Add Sema checks for OpenCL 2.0 block","[OpenCL] Add Sema checks for OpenCL 2.0 block\n\nSummary:\nAdd Sema checks for opencl 2.0 new features: Block.\nThis patch is partitioned from http://reviews.llvm.org/D16047\n\nReviewers: Anastasia\n\nSubscribers: pekka.jaaskelainen, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D17436\n\nllvm-svn: 261719"},
[j]={{o,6607,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  // ...\n  //   - a constant expression that evaluates to a null pointer value (4.10); or\n  //   - a constant expression that evaluates to a null member pointer value\n  //     (4.11); or\n  if ((EvalResult.Val.isLValue() && EvalResult.Val.isNullPointer()) || (EvalResult.Val.isMemberPointer() && !EvalResult.Val.getMemberPointerDecl())) {\n    // ...\n    S.Diag(Arg->getExprLoc(), diag::err_template_arg_wrongtype_null_constant) << Arg->getType() << ParamType << Arg->getSourceRange();"}},
[b]={{H,2692,"/// 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  // OpenCL v2.0 s6.12.5 - Arrays of blocks are not supported.\n  // OpenCL v2.0 s6.16.13.1 - Arrays of pipe type are not supported.\n  // OpenCL v2.0 s6.9.b - Arrays of image/sampler type are not supported.\n  if (getLangOpts().OpenCL) {\n    // ...\n    if (ArrType->isBlockPointerType() || ArrType->isPipeType() || ArrType->isSamplerT() || ArrType->isImageType()) {\n      Diag(Loc, diag::err_opencl_invalid_type_array) << ArrType;"}},
[l]={
[l]={
[cc]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:29:4: error: null non-type template argument of type \'float *\' does not match template parameter of type \'int *\'"}
[U]={"clang/test/SemaOpenCL/invalid-block.cl:65:12: error: array of \'bl2_t\' (aka \'int (__generic ^const)(__private int)\') type is invalid in OpenCL"}
}
}
},
},
["err_template_defn_explicit_instantiation"]={
["err_opencl_kernel_attr"]={
[b]="err_template_defn_explicit_instantiation",
[d]="err_opencl_kernel_attr",
[c]="%select{function|class|variable}0 cannot be defined in an explicit instantiation; if this declaration is meant to be a %select{function|class|variable}0 definition, remove the \'template\' keyword",
[e]={{nil,z,"attribute %0 can only be applied to an OpenCL kernel function"},{F,nil,"attribute %0 can only be applied to a kernel function"}},
[d]={{nil,nil,{{L,Lb,"variable"}," cannot be defined in an explicit instantiation; if this declaration is meant to be a ",{L,Lb,"variable"}," definition, remove the \'template\' keyword"}}},
[i]={{nil,z,"attribute A can only be applied to an OpenCL kernel function"},{F,nil,"attribute A can only be applied to a kernel function"}},
[e]=k,
[j]=k,
[g]="(?:function|class|variable) cannot be defined in an explicit instantiation; if this declaration is meant to be a (?:function|class|variable) definition, remove the \'template\' keyword",
[c]="attribute (.*?) can only be applied to an OpenCL kernel function",
[h]=a,
[h]=a,
[i]=G,
[g]=m,
[f]={"725de3e14ff2",1371773326,"Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)","Bug Fix: Template explicit instantiations should not have definitions (FixIts yet to be tested.)\n\nllvm-svn: 184503"},
[f]={"2cd9db1cefbb",1386951328,"[OpenCL] Produce an error when the work group and vec type hint attributes","[OpenCL] Produce an error when the work group and vec type hint attributes\nare used on non-kernel functions.\n\nReviewed by Aaron over IRC!\n\nllvm-svn: 197243"},
[j]={{Z,2473,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  // ...\n  case ParsedTemplateInfo::ExplicitInstantiation: {\n    if (Tok.is(tok::semi)) {\n   // ...\n    } else {\n     // ...\n     // Check that this is a valid instantiation\n     if (D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n       // ...\n       Diag(Tok, diag::err_template_defn_explicit_instantiation) << 2 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{Sb,2085,"#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    // ...\n    if (TUK == Sema::TUK_Definition && TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n      // ...\n      Diag(Tok, diag::err_template_defn_explicit_instantiation) << 1 << FixItHint::CreateRemoval(TemplateInfo.TemplateLoc);"},{"clang/lib/Parse/ParseTemplate.cpp",334,"/// 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 (TemplateInfo.Kind == ParsedTemplateInfo::ExplicitInstantiation) {\n     if (DeclaratorInfo.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n       // ...\n       Diag(Tok, diag::err_template_defn_explicit_instantiation) << 0;"}},
[b]={{Q,9531,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n // good to have a way to specify \"these attributes must appear as a group\",\n // for these. Additionally, it would be good to have a way to specify \"these\n // attribute must never appear as a group\" for attributes like cold and hot.\n if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n     // ...\n     Diag(D->getLocation(), diag::err_opencl_kernel_attr) << A;"},{Q,9534,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n   // These attributes cannot be applied to a non-kernel function.\n   if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n      Diag(D->getLocation(), diag::err_opencl_kernel_attr) << A;"},{Q,9537,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n // good to have a way to specify \"these attributes must appear as a group\",\n // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n   // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n   // ...\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n     Diag(D->getLocation(), diag::err_opencl_kernel_attr) << A;"},{Q,9540,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // FIXME: We should be able to handle this in TableGen as well. It would be\n  // good to have a way to specify \"these attributes must appear as a group\",\n  // for these. Additionally, it would be good to have a way to specify \"these\n  // attribute must never appear as a group\" for attributes like cold and hot.\n  if (!D->hasAttr<OpenCLKernelAttr>()) {\n    // These attributes cannot be applied to a non-kernel function.\n    if (const auto *A = D->getAttr<ReqdWorkGroupSizeAttr>()) {\n    // ...\n    } else if (const auto *A = D->getAttr<WorkGroupSizeHintAttr>()) {\n   // ...\n    } else if (const auto *A = D->getAttr<VecTypeHintAttr>()) {\n   // ...\n   } else if (const auto *A = D->getAttr<OpenCLIntelReqdSubGroupSizeAttr>()) {\n      Diag(D->getLocation(), diag::err_opencl_kernel_attr) << A;"}},
[l]={
[l]={
["clang/test/SemaTemplate/explicit-instantiation.cpp"]={"clang/test/SemaTemplate/explicit-instantiation.cpp:113:24: error: function cannot be defined in an explicit instantiation; if this declaration is meant to be a function definition, remove the \'template\' keyword","clang/test/SemaTemplate/explicit-instantiation.cpp:117:31: error: function cannot be defined in an explicit instantiation; if this declaration is meant to be a function definition, remove the \'template\' keyword"}
["clang/test/SemaCUDA/amdgpu-attrs.cu"]={"clang/test/SemaCUDA/amdgpu-attrs.cu:68:17: error: attribute \'reqd_work_group_size\' can only be applied to an OpenCL kernel function","clang/test/SemaCUDA/amdgpu-attrs.cu:72:17: error: attribute \'work_group_size_hint\' can only be applied to an OpenCL kernel function","clang/test/SemaCUDA/amdgpu-attrs.cu:76:17: error: attribute \'vec_type_hint\' can only be applied to an OpenCL kernel function","clang/test/SemaCUDA/amdgpu-attrs.cu:80:17: error: attribute \'intel_reqd_sub_group_size\' can only be applied to an OpenCL kernel function"}
}
}
},
},
["err_template_different_requires_clause"]={
["err_opencl_logical_exclusive_or"]={
[b]={{nil,u,"err_template_different_requires_clause"}},
[d]="err_opencl_logical_exclusive_or",
[c]={{nil,u,"requires clause differs in template redeclaration"}},
[e]="^^ is a reserved operator in OpenCL",
[d]={{nil,u,"requires clause differs in template redeclaration"}},
[i]="^^ is a reserved operator in OpenCL",
[e]=k,
[j]=k,
[g]="requires clause differs in template redeclaration",
[c]="\\^\\^ is a reserved operator in OpenCL",
[h]=a,
[h]=a,
[i]={{nil,u,m}},
[g]=K,
[f]={"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"},
[f]={"735c6cdebdcd",1454512634,"[OpenCL] Adding reserved operator logical xor for OpenCL","[OpenCL] Adding reserved operator logical xor for OpenCL\n\nThis patch adds the reserved operator ^^ when compiling for OpenCL (spec v1.1 s6.3.g),\nwhich results in a more meaningful error message.\n\nPatch by Neil Hickey!\n\nReview: http://reviews.llvm.org/D13280\n\nM    test/SemaOpenCL/unsupported.cl\nM    include/clang/Basic/TokenKinds.def\nM    include/clang/Basic/DiagnosticParseKinds.td\nM    lib/Basic/OperatorPrecedence.cpp\nM    lib/Lex/Lexer.cpp\nM    lib/Parse/ParseExpr.cpp\n\nllvm-svn: 259651"},
[j]={{o,8275,"/// Determine whether the given template parameter lists are\n/// equivalent.\n///\n/// \\param New  The new template parameter list, typically written in the\n/// source code as part of a new template declaration.\n///\n/// \\param Old  The old template parameter list, typically found via\n/// name lookup of the template declared with this template parameter\n/// list.\n///\n/// \\param Complain  If true, this routine will produce a diagnostic if\n/// the template parameter lists are not equivalent.\n///\n/// \\param Kind describes how we are to match the template parameter lists.\n///\n/// \\param TemplateArgLoc If this source location is valid, then we\n/// are actually checking the template parameter list of a template\n/// argument (New) against the template parameter list of its\n/// corresponding template template parameter (Old). We produce\n/// slightly different diagnostics in this scenario.\n///\n/// \\returns True if the template parameter lists are equal, false\n/// otherwise.\nbool Sema::TemplateParameterListsAreEqual(const NamedDecl *NewInstFrom, TemplateParameterList *New, const NamedDecl *OldInstFrom, TemplateParameterList *Old, bool Complain, TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // ...\n  if (Kind != TPL_TemplateTemplateArgumentMatch && Kind != TPL_TemplateParamsEquivalent) {\n    // ...\n    auto Diagnose = [&] {\n      Diag(NewRC ? NewRC->getBeginLoc() : New->getTemplateLoc(), diag::err_template_different_requires_clause);"}},
[b]={{"clang/lib/Parse/ParseExpr.cpp",420,"/// 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 (OpToken.is(tok::caretcaret)) {\n      return ExprError(Diag(Tok, diag::err_opencl_logical_exclusive_or));"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:24:1: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:27:32: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:32:32: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:76:1: error: requires clause differs in template redeclaration","clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:80:50: error: requires clause differs in template redeclaration"}
["clang/test/SemaOpenCL/unsupported.cl"]={"clang/test/SemaOpenCL/unsupported.cl:20:21: error: ^^ is a reserved operator in OpenCL"}
}
}
},
},
["err_template_different_type_constraint"]={
["err_opencl_multiple_access_qualifiers"]={
[b]={{nil,u,"err_template_different_type_constraint"}},
[d]="err_opencl_multiple_access_qualifiers",
[c]={{nil,u,"type constraint differs in template redeclaration"}},
[e]="multiple access qualifiers",
[d]={{nil,u,"type constraint differs in template redeclaration"}},
[i]="multiple access qualifiers",
[e]=k,
[j]=k,
[g]="type constraint differs in template redeclaration",
[c]="multiple access qualifiers",
[h]=a,
[h]=a,
[i]={{nil,u,m}},
[g]=m,
[f]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","Improve static checks for sprintf and __builtin___sprintf_chk\n\nImplement a pessimistic evaluator of the minimal required size for a buffer\nbased on the format string, and couple that with the fortified version to emit a\nwarning when the buffer size is lower than the lower bound computed from the\nformat string.\n\nDifferential Revision: https://reviews.llvm.org/D71566"},
[f]={"11e13f60ea8d",1456456383,"[OpenCL] Refine OpenCLImageAccessAttr to OpenCLAccessAttr","[OpenCL] Refine OpenCLImageAccessAttr to OpenCLAccessAttr\n\nSummary:\nOpenCL access qualifiers are now not only used for image types, refine it to avoid misleading,\n\nAdd semacheck for OpenCL access qualifier as well as test caees.\n\nReviewers: pekka.jaaskelainen, Anastasia, aaron.ballman\n\nSubscribers: aaron.ballman, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D16040\n\nllvm-svn: 261961"},
[j]={{o,8133,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // ...\n  if (Kind != Sema::TPL_TemplateParamsEquivalent && Kind != Sema::TPL_TemplateTemplateArgumentMatch && !isa<TemplateTemplateParmDecl>(Old)) {\n    // ...\n    auto Diagnose = [&] {\n      S.Diag(NewC ? NewC->getBeginLoc() : New->getBeginLoc(), diag::err_template_different_type_constraint);"}},
[b]={{Q,8299,"static void handleOpenCLAccessAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Check if there is only one access qualifier.\n  if (D->hasAttr<OpenCLAccessAttr>()) {\n    if (D->getAttr<OpenCLAccessAttr>()->getSemanticSpelling() == AL.getSemanticSpelling()) {\n    // ...\n    } else {\n      S.Diag(AL.getLoc(), diag::err_opencl_multiple_access_qualifiers) << D->getSourceRange();"},{H,8439,"#include \"clang/Basic/OpenCLImageTypes.def\"\n    // ...\n    if (PrevAccessQual == AttrName.ltrim(\"_\")) {\n    // ...\n    } else {\n      // ...\n      S.Diag(Attr.getLoc(), diag::err_opencl_multiple_access_qualifiers);"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp:40:11: error: type constraint differs in template redeclaration"}
["clang/test/SemaOpenCL/access-qualifier.cl"]={"clang/test/SemaOpenCL/access-qualifier.cl:84:16: error: multiple access qualifiers","clang/test/SemaOpenCL/access-qualifier.cl:86:16: error: multiple access qualifiers","clang/test/SemaOpenCL/access-qualifier.cl:92:27: error: multiple access qualifiers"}
}
}
},
},
["err_template_expansion_into_fixed_list"]={
["err_opencl_no_main"]={
[b]={{nil,u,"err_template_expansion_into_fixed_list"}},
[d]="err_opencl_no_main",
[c]={{nil,u,"pack expansion used as argument for non-pack parameter of %select{alias template|concept}0"}},
[e]="%select{function|kernel}0 cannot be called \'main\'",
[d]={{nil,u,{"pack expansion used as argument for non-pack parameter of ",{"alias template","concept"}}}},
[i]={{nil,nil,{{"function","kernel"}," cannot be called \'main\'"}}},
[e]=k,
[j]=k,
[g]="pack expansion used as argument for non\\-pack parameter of (?:alias template|concept)",
[c]="(?:function|kernel) cannot be called \'main\'",
[h]=a,
[h]=a,
[i]={{nil,u,m}},
[g]=m,
[f]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension.","Implement VectorType conditional operator GNU extension.\n\nGCC supports the conditional operator on VectorTypes that acts as a\n\'select\' in C++ mode. This patch implements the support. Types are\nconverted as closely to GCC\'s behavior as possible, though in a few\nplaces consistency with our existing vector type support was preferred.\n\nNote that this implementation is different from the OpenCL version in a\nnumber of ways, so it unfortunately required a different implementation.\n\nFirst, the SEMA rules and promotion rules are significantly different.\n\nSecondly, GCC implements COND[i] != 0 ? LHS[i] : RHS[i] (where i is in\nthe range 0- VectorSize, for each element).  In OpenCL, the condition is\nCOND[i] < 0 ? LHS[i]: RHS[i].\n\nIn the process of implementing this, it was also required to make the\nexpression COND ? LHS : RHS type dependent if COND is type dependent,\nsince the type is now dependent on the condition.  For example:\n\n    T ? 1 : 2;\n\nIs not typically type dependent, since the result can be deduced from\nthe operands.  HOWEVER, if T is a VectorType now, it could change this\nto a \'select\' (basically a swizzle with a non-constant mask) with the 1\nand 2 being promoted to vectors themselves.\n\nWhile this is a change, it is NOT a standards incompatible change. Based\non my (and D. Gregor\'s, at the time of writing the code) reading of the\nstandard, the expression is supposed to be type dependent if ANY\nsub-expression is type dependent.\n\nDifferential Revision: https://reviews.llvm.org/D71463"},
[f]={"a7310a8cfa9e",1383654639,"Do not allow functions or kernels called \'main\' in OpenCL.","Do not allow functions or kernels called \'main\' in OpenCL.\n\nllvm-svn: 194068"},
[j]={{o,5971,"/// Check that the given template argument list is well-formed\n/// for specializing the given template.\nbool Sema::CheckTemplateArgumentList(TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs, bool PartialTemplateArgs, SmallVectorImpl<TemplateArgument> &SugaredConverted, SmallVectorImpl<TemplateArgument> &CanonicalConverted, bool UpdateArgsWithConversions, bool *ConstraintsNotSatisfied) {\n  // ...\n  for (TemplateParameterList::iterator Param = Params->begin(), ParamEnd = Params->end(); Param != ParamEnd; /* increment in loop */) {\n    // ...\n    if (ArgIdx < NumArgs) {\n      // ...\n      if (PackExpansionIntoNonPack && (isa<TypeAliasTemplateDecl>(Template) || isa<ConceptDecl>(Template))) {\n        // ...\n        Diag(NewArgs[ArgIdx].getLocation(), diag::err_template_expansion_into_fixed_list) << (isa<ConceptDecl>(Template) ? 1 : 0) << NewArgs[ArgIdx].getSourceRange();"}},
[b]={{G,12097,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    Diag(FD->getLocation(), diag::err_opencl_no_main) << FD->hasAttr<OpenCLKernelAttr>();"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.id/p3.cpp:184:24: error: pack expansion used as argument for non-pack parameter of concept"}
["clang/test/SemaOpenCL/invalid-kernel.cl"]={"clang/test/SemaOpenCL/invalid-kernel.cl:8:13: error: kernel cannot be called \'main\'","clang/test/SemaOpenCL/invalid-kernel.cl:12:5: error: function cannot be called \'main\'"}
}
}
},
},
["err_template_id_not_a_type"]={
["err_opencl_nonconst_global_sampler"]={
[b]="err_template_id_not_a_type",
[d]={{nil,q,"err_opencl_nonconst_global_sampler"}},
[c]="template name refers to non-type template %0",
[e]={{nil,q,"global sampler requires a const or constant address space qualifier"}},
[d]="template name refers to non-type template A",
[i]={{nil,q,"global sampler requires a const or constant address space qualifier"}},
[e]=k,
[j]=k,
[g]="template name refers to non\\-type template (.*?)",
[c]="global sampler requires a const or constant address space qualifier",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,q,m}},
[f]={"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"},
[f]={"511f0b8d02ae",1494235746,"[OpenCL] Check that global samplers are const","[OpenCL] Check that global samplers are const\n\nPatch by Simon Perretta.\n\nDifferential Revision: https://reviews.llvm.org/D32856\n\nllvm-svn: 302411"},
[j]={{o,3893,"QualType Sema::CheckTemplateIdType(TemplateName Name, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n  // ...\n  if (!Template || isa<FunctionTemplateDecl>(Template) || isa<VarTemplateDecl>(Template) || isa<ConceptDecl>(Template)) {\n    // ...\n    Diag(TemplateLoc, diag::err_template_id_not_a_type) << Name;"}},
[b]={{G,7394,"/// Returns true if there hasn\'t been any invalid type diagnosed.\nstatic bool diagnoseOpenCLTypes(Sema &Se, VarDecl *NewVD) {\n  // ...\n  if (R->isSamplerT()) {\n    // ...\n    // OpenCL v1.2 s6.12.14.1:\n    // A global sampler must be declared with either the constant address\n    // space qualifier or with the const qualifier.\n    if (DC->isTranslationUnit() && !(R.getAddressSpace() == LangAS::opencl_constant || R.isConstQualified())) {\n      Se.Diag(NewVD->getLocation(), diag::err_opencl_nonconst_global_sampler);"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:104:36: error: template name refers to non-type template \'F\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:106:38: error: template name refers to non-type template \'::F\'"}
["clang/test/SemaOpenCL/sampler_t.cl"]={"clang/test/SemaOpenCL/sampler_t.cl:18:18: error: global sampler requires a const or constant address space qualifier","clang/test/SemaOpenCL/sampler_t.cl:50:11: error: global sampler requires a const or constant address space qualifier"}
}
}
},
},
["err_template_inside_local_class"]={
["err_opencl_pointer_to_type"]={
[b]="err_template_inside_local_class",
[d]="err_opencl_pointer_to_type",
[c]="templates cannot be declared inside of a local class",
[e]="pointer to type %0 is invalid in OpenCL",
[d]="templates cannot be declared inside of a local class",
[i]="pointer to type A is invalid in OpenCL",
[e]=k,
[j]=k,
[g]="templates cannot be declared inside of a local class",
[c]="pointer to type (.*?) is invalid in OpenCL",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"766e259e38e5",1382415258,"Sema: Do not allow template declarations inside local classes","Sema: Do not allow template declarations inside local classes\n\nSummary:\nEnforce the rule in C++11 [temp.mem]p2 that local classes cannot have\nmember templates.\n\nThis fixes PR16947.\n\nN.B.  C++14 has slightly different wording to afford generic lambdas\ndeclared inside of functions.\n\nFun fact: Some formulations of local classes with member templates\nwould cause clang to crash during Itanium mangling, such as the\nfollowing:\n\nvoid outer_mem() {\n  struct Inner {\n    template <typename = void>\n    struct InnerTemplateClass {\n     static void itc_mem() {}\n    };\n  };\n  Inner::InnerTemplateClass<>::itc_mem();\n}\n\nReviewers: eli.friedman, rsmith, doug.gregor, faisalv\n\nReviewed By: doug.gregor\n\nCC: cfe-commits, ygao\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D1866\n\nllvm-svn: 193144"},
[f]={"379554ac5b15",1456371260,"[OpenCL] Add Sema checks for types","[OpenCL] Add Sema checks for types\n\nSummary:\nAdd Sema checks for opencl type: image, pipe....\nThis patch is partitioned from http://reviews.llvm.org/D16047\n\nReviewers: Anastasia, yaxunl\n\nSubscribers: pekka.jaaskelainen, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D17437\n\nllvm-svn: 261818"},
[j]={{o,8343,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n  // ...\n  // C++ [temp]p2:\n //   A template-declaration can appear only as a namespace scope or\n //  class scope declaration.\n // C++ [temp.expl.spec]p3:\n //   An explicit specialization may be declared in any scope in which the\n  //  corresponding primary template may be defined.\n // C++ [temp.class.spec]p6: [P2096]\n  //  A partial specialization may be declared in any scope in which the\n //   corresponding primary template may be defined.\n if (Ctx) {\n   // ...\n    if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Ctx)) {\n      // C++ [temp.mem]p2:\n      //  A local class shall not have member templates.\n      if (RD->isLocalClass())\n       return Diag(TemplateParams->getTemplateLoc(), diag::err_template_inside_local_class) << TemplateParams->getSourceRange();"}},
[b]={{H,5077,"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::Pointer:\n     // ...\n     // OpenCL v2.0 s6.9b - Pointer to image/sampler cannot be used.\n     // OpenCL v2.0 s6.13.16.1 - Pointer to pipe cannot be used.\n     // OpenCL v2.0 s6.12.5 - Pointers to Blocks are not allowed.\n     if (LangOpts.OpenCL) {\n       if (T->isImageType() || T->isSamplerT() || T->isPipeType() || T->isBlockPointerType()) {\n         S.Diag(D.getIdentifierLoc(), diag::err_opencl_pointer_to_type) << T;"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp"]={"clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:8:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:9:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:10:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:11:5: error: templates cannot be declared inside of a local class","clang/test/CXX/temp/temp.decls/temp.mem/p2.cpp:12:5: error: templates cannot be declared inside of a local class"}
[U]={"clang/test/SemaOpenCL/invalid-block.cl:70:16: error: pointer to type \'bl2_t\' (aka \'int (__generic ^const)(__private int)\') is invalid in OpenCL","clang/test/SemaOpenCL/invalid-block.cl:74:10: error: pointer to type \'bl2_t\' (aka \'int (__generic ^const)(__private int)\') is invalid in OpenCL"}
}
}
},
},
["err_template_instantiate_undefined"]={
["err_opencl_ptrptr_kernel_param"]={
[b]="err_template_instantiate_undefined",
[d]="err_opencl_ptrptr_kernel_param",
[c]="%select{implicit|explicit}0 instantiation of undefined template %1",
[e]="kernel parameter cannot be declared as a pointer to a pointer",
[d]={{nil,nil,{{"implicit","explicit"}," instantiation of undefined template B"}}},
[i]="kernel parameter cannot be declared as a pointer to a pointer",
[e]=k,
[j]=k,
[g]="(?:implicit|explicit) instantiation of undefined template (.*?)",
[c]="kernel parameter cannot be declared as a pointer to a pointer",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"a1f499736818",1242174359,"Semantic analysis for explicit instantiation of class templates. We","Semantic analysis for explicit instantiation of class templates. We\nstill aren\'t instantiating the definitions of class template members,\nand core issues 275 and 259 will both affect the checking that we do\nfor explicit instantiations (but are not yet implemented).\n\nllvm-svn: 71613"},
[f]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL","Error on more illegal kernel argument types for OpenCL\n\nbool, half, pointers and structs / unions containing any\nof these are not allowed. Does not yet reject size_t and\nrelated integer types that are also disallowed.\n\nllvm-svn: 186908"},
[j]={{o,854,"/// 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  // ...\n  } else {\n    if (isa<FunctionDecl>(Instantiation)) {\n    // ...\n    } else if (isa<TagDecl>(Instantiation)) {\n      Diag(PointOfInstantiation, diag::err_template_instantiate_undefined) << (TSK != TSK_ImplicitInstantiation) << InstantiationTy;"}},
[b]={{G,9454,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  // ...\n  case PtrPtrKernelParam:\n   // ...\n    S.Diag(Param->getLocation(), diag::err_opencl_ptrptr_kernel_param);"}},
[l]={
[l]={
["clang/test/SemaTemplate/dependent-class-member-operator.cpp"]={"clang/test/SemaTemplate/dependent-class-member-operator.cpp:10:8: error: implicit instantiation of undefined template \'C2<int>\'"}
["clang/test/SemaOpenCL/invalid-kernel-parameters.cl"]={"clang/test/SemaOpenCL/invalid-kernel-parameters.cl:13:44: error: kernel parameter cannot be declared as a pointer to a pointer","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:14:47: error: kernel parameter cannot be declared as a pointer to a pointer","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:15:56: error: kernel parameter cannot be declared as a pointer to a pointer"}
}
}
},
},
["err_template_instantiate_within_definition"]={
["err_opencl_requires_extension"]={
[b]="err_template_instantiate_within_definition",
[d]="err_opencl_requires_extension",
[c]="%select{implicit|explicit}0 instantiation of template %1 within its own definition",
[e]="use of %select{type |declaration}0%1 requires %2 extension to be enabled",
[d]={{nil,nil,{{"implicit","explicit"}," instantiation of template B within its own definition"}}},
[i]={{nil,C,{"use of ",{"type","declaration"}," B requires C support"}},{hb,q,{"use of ",{"type","declaration"}," B requires C extension to be enabled"}},{nil,nil,{"use of ",{"type ","declaration"},"B requires C extension to be enabled"}}},
[e]=k,
[j]=k,
[g]="(?:implicit|explicit) instantiation of template (.*?) within its own definition",
[c]="use of (?:type|declaration) (.*?) requires (.*?) support",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"5476666d1738",1303886791,"Diagnose attempts to implicitly instantiate a template before it is","Diagnose attempts to implicitly instantiate a template before it is\nfully defined. Somehow this escaped notice for a very long time.\n\nllvm-svn: 130298"},
[f]={"2e8331cab616",1481916128,"[OpenCL] Allow disabling types and declarations associated with extensions","[OpenCL] Allow disabling types and declarations associated with extensions\n\nAdded a map to associate types and declarations with extensions.\n\nRefactored existing diagnostic for disabled types associated with extensions and extended it to declarations for generic situation.\n\nFixed some bugs for types associated with extensions.\n\nAllow users to use pragma to declare types and functions for supported extensions, e.g.\n\n#pragma OPENCL EXTENSION the_new_extension_name : begin\n// declare types and functions associated with the extension here\n#pragma OPENCL EXTENSION the_new_extension_name : end\n\nDifferential Revision: https://reviews.llvm.org/D21698\n\nllvm-svn: 289979"},
[j]={{o,827,"/// 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    Diag(PointOfInstantiation, diag::err_template_instantiate_within_definition) << /*implicit|explicit*/ (TSK != TSK_ImplicitInstantiation) << InstantiationTy;"}},
[b]={{A,1417,"static bool checkOpenCLSubgroupExt(Sema &S, CallExpr *Call) {\n  // OpenCL device can support extension but not the feature as extension\n  // requires subgroup independent forward progress, but subgroup independent\n  // forward progress is optional in OpenCL C 3.0 __opencl_c_subgroups feature.\n  if (!S.getOpenCLOptions().isSupported(\"cl_khr_subgroups\", S.getLangOpts()) && !S.getOpenCLOptions().isSupported(\"__opencl_c_subgroups\", S.getLangOpts())) {\n    S.Diag(Call->getBeginLoc(), diag::err_opencl_requires_extension) << 1 << Call->getDirectCallee() << \"cl_khr_subgroups or __opencl_c_subgroups\";"},{H,1540,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  // ...\n  case DeclSpec::TST_double:\n    // ...\n    if (S.getLangOpts().OpenCL) {\n      if (!S.getOpenCLOptions().isSupported(\"cl_khr_fp64\", S.getLangOpts()))\n        S.Diag(DS.getTypeSpecTypeLoc(), diag::err_opencl_requires_extension) << 0 << Result << (S.getLangOpts().getOpenCLCompatibleVersion() == 300 ? \"cl_khr_fp64 and __opencl_c_fp64\" : \"cl_khr_fp64\");"},{H,1763,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  // ...\n  if (S.getLangOpts().OpenCL) {\n    // ...\n    // OpenCL C v3.0 s6.3.3 - OpenCL image types require __opencl_c_images\n    // support.\n    // OpenCL C v3.0 s6.2.1 - OpenCL 3d image write types requires support\n    // for OpenCL C 2.0, or OpenCL C 3.0 or newer and the\n    // __opencl_c_3d_image_writes feature. OpenCL C v3.0 API s4.2 - For devices\n    // that support OpenCL 3.0, cl_khr_3d_image_writes must be returned when and\n    // only when the optional feature is supported\n    if ((Result->isImageType() || Result->isSamplerT()) && (IsOpenCLC30Compatible && !OpenCLOptions.isSupported(\"__opencl_c_images\", S.getLangOpts()))) {\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_opencl_requires_extension) << 0 << Result << \"__opencl_c_images\";"},{H,1769,"#include \"clang/Basic/OpenCLImageTypes.def\"\n  // ...\n  if (S.getLangOpts().OpenCL) {\n    // ...\n    // OpenCL C v3.0 s6.3.3 - OpenCL image types require __opencl_c_images\n    // support.\n    // OpenCL C v3.0 s6.2.1 - OpenCL 3d image write types requires support\n    // for OpenCL C 2.0, or OpenCL C 3.0 or newer and the\n    // __opencl_c_3d_image_writes feature. OpenCL C v3.0 API s4.2 - For devices\n    // that support OpenCL 3.0, cl_khr_3d_image_writes must be returned when and\n    // only when the optional feature is supported\n    if ((Result->isImageType() || Result->isSamplerT()) && (IsOpenCLC30Compatible && !OpenCLOptions.isSupported(\"__opencl_c_images\", S.getLangOpts()))) {\n    // ...\n    } else if (Result->isOCLImage3dWOType() && !OpenCLOptions.isSupported(\"cl_khr_3d_image_writes\", S.getLangOpts())) {\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_opencl_requires_extension) << 0 << Result << (IsOpenCLC30Compatible ? \"cl_khr_3d_image_writes and __opencl_c_3d_image_writes\" : \"cl_khr_3d_image_writes\");"}},
[l]={
[l]={
["clang/test/CXX/class/class.mem/p2.cpp"]={"clang/test/CXX/class/class.mem/p2.cpp:21:12: error: implicit instantiation of template \'test1::A<int>\' within its own definition"}
["clang/test/SemaOpenCL/unsupported-image.cl"]={"clang/test/SemaOpenCL/unsupported-image.cl:67:24: error: use of type \'__write_only image3d_t\' requires cl_khr_3d_image_writes and __opencl_c_3d_image_writes support"}
}
}
},
},
["err_template_kernel"]={
["err_opencl_scalar_type_rank_greater_than_vector_type"]={
[b]={{nil,I,"err_template_kernel"}},
[d]={{nil,q,"err_opencl_scalar_type_rank_greater_than_vector_type"}},
[c]={{nil,I,"kernel functions cannot be used in a template declaration, instantiation or specialization"}},
[e]={{nil,q,"scalar operand type has greater rank than the type of the vector element. (%0 and %1)"}},
[d]={{nil,I,"kernel functions cannot be used in a template declaration, instantiation or specialization"}},
[i]={{nil,q,"scalar operand type has greater rank than the type of the vector element. (A and B)"}},
[e]=k,
[j]=k,
[g]="kernel functions cannot be used in a template declaration, instantiation or specialization",
[c]="scalar operand type has greater rank than the type of the vector element\\. \\((.*?) and (.*?)\\)",
[h]=a,
[h]=a,
[i]={{nil,I,m}},
[g]={{nil,q,m}},
[f]={"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"},
[f]={"1adf2652873d",1495805426,"[OpenCL] An error shall occur if any scalar operand has greater rank than the type of the vector ele...","[OpenCL] An error shall occur if any scalar operand has greater rank than the type of the vector element\n\nReviewers: Anastasia\n\nReviewed By: Anastasia\n\nSubscribers: cfe-commits, bader, yaxunl\n\nDifferential Revision: https://reviews.llvm.org/D33353\n\nllvm-svn: 303986"},
[j]={{t,10714,"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     // ...\n     if (FunctionTemplate) {\n       Diag(D.getIdentifierLoc(), diag::err_template_kernel);"}},
[b]={{E,10706,"/// Try to convert a value of non-vector type to a vector type by converting\n/// the type to the element type of the vector and then performing a splat.\n/// If the language is OpenCL, we only use conversions that promote scalar\n/// rank; for C, Obj-C, and C++ we allow any real scalar conversion except\n/// for float->int.\n///\n/// OpenCL V2.0 6.2.6.p2:\n/// An error shall occur if any scalar operand type has greater rank\n/// than the type of the vector element.\n///\n/// \\param scalar - if non-null, actually perform the conversions\n/// \\return true if the operation fails (but without diagnosing the failure)\nstatic bool tryVectorConvertAndSplat(Sema &S, ExprResult *scalar, QualType scalarTy, QualType vectorEltTy, QualType vectorTy, unsigned &DiagID) {\n  // ...\n  if (vectorEltTy->isIntegralType(S.Context)) {\n    if (S.getLangOpts().OpenCL && (scalarTy->isRealFloatingType() || (scalarTy->isIntegerType() && S.Context.getIntegerTypeOrder(vectorEltTy, scalarTy) < 0))) {\n      DiagID = diag::err_opencl_scalar_type_rank_greater_than_vector_type;"},{E,11022,"/// Try to convert a value of non-vector type to a vector type by converting\n/// the type to the element type of the vector and then performing a splat.\n/// If the language is OpenCL, we only use conversions that promote scalar\n/// rank; for C, Obj-C, and C++ we allow any real scalar conversion except\n/// for float->int.\n///\n/// OpenCL V2.0 6.2.6.p2:\n/// An error shall occur if any scalar operand type has greater rank\n/// than the type of the vector element.\n///\n/// \\param scalar - if non-null, actually perform the conversions\n/// \\return true if the operation fails (but without diagnosing the failure)\nstatic bool tryVectorConvertAndSplat(Sema &S, ExprResult *scalar, QualType scalarTy, QualType vectorEltTy, QualType vectorTy, unsigned &DiagID) {\n // ...\n if (vectorEltTy->isIntegralType(S.Context)) {\n // ...\n } else if (vectorEltTy->isRealFloatingType()) {\n    if (scalarTy->isRealFloatingType()) {\n     if (S.getLangOpts().OpenCL && S.Context.getFloatingTypeOrder(vectorEltTy, scalarTy) < 0) {\n        DiagID = diag::err_opencl_scalar_type_rank_greater_than_vector_type;"}},
[l]={
[l]={
["clang/test/SemaOpenCLCXX/invalid-kernel.clcpp"]={"clang/test/SemaOpenCLCXX/invalid-kernel.clcpp:14:13: error: kernel functions cannot be used in a template declaration, instantiation or specialization","clang/test/SemaOpenCLCXX/invalid-kernel.clcpp:18:13: error: kernel functions cannot be used in a template declaration, instantiation or specialization"}
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:92:12: error: scalar operand type has greater rank than the type of the vector element. (\'int2\' (vector of 2 \'int\' values) and \'float\')"}
}
}
},
},
["err_template_kw_missing"]={
["err_opencl_sizeof_alignof_type"]={
[b]="err_template_kw_missing",
[d]="err_opencl_sizeof_alignof_type",
[c]="missing \'template\' keyword prior to dependent template name \'%0%1\'",
[e]={{nil,p,"invalid application of \'%0\' to a void type"},{w,u,"invalid application of \'%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align|__alignof}0\' to a void type"},{Kb,nil,"invalid application of \'%select{sizeof|alignof|vec_step|__builtin_omp_required_simd_align}0\' to a void type"}},
[d]="missing \'template\' keyword prior to dependent template name \'AB\'",
[i]={{nil,p,"invalid application of \'A\' to a void type"},{w,u,{"invalid application of \'",{"sizeof","alignof","vec_step","__builtin_omp_required_simd_align","__alignof"},"\' to a void type"}},{Kb,nil,{"invalid application of \'",{"sizeof","alignof","vec_step","__builtin_omp_required_simd_align"},"\' to a void type"}}},
[e]=k,
[j]=k,
[g]="missing \'template\' keyword prior to dependent template name \'(.*?)(.*?)\'",
[c]="invalid application of \'(.*?)\' to a void type",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"18473f329dbd",1263331724,"Improve recovery for template-ids whose template-name doesn\'t actually","Improve recovery for template-ids whose template-name doesn\'t actually\nname a template, when they occur in a base-specifier. This is one of\nthe (few) places where we know for sure that an identifier followed by\na \'<\' must be a template name, so we can diagnose and recover well:\n\ntest/SemaTemplate/dependent-base-classes.cpp:9:16: error: missing\n\'template\'\n      keyword prior to dependent template name \'T::apply\'\nstruct X1 : T::apply<U> { }; // expected-error{{missing \'template\' ...\n               ^\n              template \ntest/SemaTemplate/dependent-base-classes.cpp:12:13: error: unknown\ntemplate name\n      \'vector\'\nstruct X2 : vector<T> { }; // expected-error{{unknown template name\n\'vector\'}}\n            ^\n2 diagnostics generated.\n\nllvm-svn: 93257"},
[f]={"4ba0f1e2d772",1388504869,"[OpenCL] Produce an error, instead of a warning, for sizeof(void) in OpenCL.","[OpenCL] Produce an error, instead of a warning, for sizeof(void) in OpenCL.\n\nPatch by joey.gouly@arm.com\n\nllvm-svn: 198264"},
[j]={{n,16153,"ExprResult Sema::BuildBinOp(Scope *S, SourceLocation OpLoc, BinaryOperatorKind Opc, Expr *LHSExpr, Expr *RHSExpr) {\n  // ...\n  // Handle pseudo-objects in the LHS.\n  if (const BuiltinType *pty = LHSExpr->getType()->getAsPlaceholderType()) {\n    // ...\n    // If we\'re instantiating \"a.x < b\" or \"A::x < b\" and \'x\' names a function\n    // template, diagnose the missing \'template\' keyword instead of diagnosing\n   // an invalid use of a bound member function.\n    //\n    // Note that \"A::x < b\" might be valid if \'b\' has an overloadable type due\n    // to C++1z [over.over]/1.4, but we already checked for that case above.\n    if (Opc == BO_LT && inTemplateInstantiation() && (pty->getKind() == BuiltinType::BoundMember || pty->getKind() == BuiltinType::Overload)) {\n     // ...\n      if (OE && !OE->hasTemplateKeyword() && !OE->hasExplicitTemplateArgs() && llvm::any_of(OE->decls(), [](NamedDecl *ND) { return isa<FunctionTemplateDecl>(ND); })) {\n       Diag(OE->getQualifier() ? OE->getQualifierLoc().getBeginLoc() : OE->getNameLoc(), diag::err_template_kw_missing) << OE->getName().getAsString() << \"\";"},{o,367,"bool Sema::DiagnoseUnknownTemplateName(const IdentifierInfo &II, SourceLocation IILoc, Scope *S, const CXXScopeSpec *SS, TemplateTy &SuggestedTemplate, TemplateNameKind &SuggestedKind) {\n  // ...\n  Diag(IILoc, diag::err_template_kw_missing) << Qualifier << II.getName() << FixItHint::CreateInsertion(IILoc, \"template \");"},{o,666,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  // ...\n  // If this is a dependent-scope lookup, diagnose that the \'template\' keyword\n  // was missing.\n  if (MissingTemplateKeyword) {\n    Diag(NameInfo.getBeginLoc(), diag::err_template_kw_missing) << \"\" << NameInfo.getName().getAsString() << SourceRange(Less, Greater);"}},
[b]={{E,4311,"static bool CheckExtensionTraitOperandType(Sema &S, QualType T, SourceLocation Loc, SourceRange ArgRange, UnaryExprOrTypeTrait TraitKind) {\n  // ...\n  // Allow sizeof(void)/alignof(void) as an extension, unless in OpenCL where\n // this is an error (OpenCL v1.1 s6.3.k)\n if (T->isVoidType()) {\n   unsigned DiagID = S.LangOpts.OpenCL ? diag::err_opencl_sizeof_alignof_type : diag::ext_sizeof_alignof_void_type;"}},
[l]={
[l]={
["clang/test/SemaTemplate/dependent-template-recover.cpp"]={"clang/test/SemaTemplate/dependent-template-recover.cpp:10:8: error: missing \'template\' keyword prior to dependent template name \'f1\'","clang/test/SemaTemplate/dependent-template-recover.cpp:15:10: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:16:10: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:17:8: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:18:8: error: missing \'template\' keyword prior to dependent template name \'f2\'","clang/test/SemaTemplate/dependent-template-recover.cpp:20:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:24:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:25:17: error: missing \'template\' keyword prior to dependent template name \'bar\'","clang/test/SemaTemplate/dependent-template-recover.cpp:28:14: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:29:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:33:12: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:34:8: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:36:15: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:37:10: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:38:10: error: missing \'template\' keyword prior to dependent template name \'bar\'","clang/test/SemaTemplate/dependent-template-recover.cpp:42:10: error: missing \'template\' keyword prior to dependent template name \'foo\'","clang/test/SemaTemplate/dependent-template-recover.cpp:68:15: error: missing \'template\' keyword prior to dependent template name \'t\'","clang/test/SemaTemplate/dependent-template-recover.cpp:86:6: error: missing \'template\' keyword prior to dependent template name \'g\'","clang/test/SemaTemplate/dependent-template-recover.cpp:77:5: error: missing \'template\' keyword prior to dependent template name \'f\'","clang/test/SemaTemplate/dependent-template-recover.cpp:78:5: error: missing \'template\' keyword prior to dependent template name \'f\'","clang/test/SemaTemplate/dependent-template-recover.cpp:79:3: error: missing \'template\' keyword prior to dependent template name \'g\'"}
["clang/test/SemaOpenCL/sizeof.cl"]={"clang/test/SemaOpenCL/sizeof.cl:4:12: error: invalid application of \'sizeof\' to a void type"}
}
}
},
},
["err_template_kw_refers_to_dependent_non_template"]={
["err_opencl_taking_address_capture"]={
[b]={{nil,s,"err_template_kw_refers_to_dependent_non_template"}},
[d]={{nil,F,"err_opencl_taking_address_capture"}},
[c]={{nil,s,"%0%select{| following the \'template\' keyword}1 cannot refer to a dependent template"}},
[e]={{nil,F,"taking address of a capture is not allowed"}},
[d]={{nil,s,{"A",{a," following the \'template\' keyword"}," cannot refer to a dependent template"}}},
[i]={{nil,F,"taking address of a capture is not allowed"}},
[e]=k,
[j]=k,
[g]="(.*?)(?:| following the \'template\' keyword) cannot refer to a dependent template",
[c]="taking address of a capture is not allowed",
[h]=a,
[h]=a,
[i]={{nil,s,m}},
[g]={{nil,F,m}},
[f]={Q,1576908663,O,N},
[f]={"257132a019c1",1504803633,"[OpenCL] Handle taking an address of block captures.","[OpenCL] Handle taking an address of block captures.\n\nBlock captures can have different physical locations\nin memory segments depending on the use case (as a function\ncall or as a kernel enqueue) and in different vendor\nimplementations.\n\nTherefore it\'s unclear how to add address space to capture\naddresses uniformly. Currently it has been decided to disallow\ntaking addresses of captured variables until further\nclarifications in the spec.\n\nDifferential Revision: https://reviews.llvm.org/D36410\n\nllvm-svn: 312728"},
[j]={{o,5193,"/// 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 Diag(Name.getBeginLoc(), diag::err_template_kw_refers_to_dependent_non_template) << GetNameFromUnqualifiedId(Name).getName() << Name.getSourceRange() << TemplateKWLoc.isValid() << TemplateKWLoc;"}},
[b]={{E,14934,"/// 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 // In OpenCL captures for blocks called as lambda functions\n // are located in the private address space. Blocks used in\n // enqueue_kernel can be located in a different address space\n // depending on a vendor implementation. Thus preventing\n // taking an address of the capture to avoid invalid AS casts.\n  if (LangOpts.OpenCL) {\n   // ...\n   if (VarRef && VarRef->refersToEnclosingVariableOrCapture()) {\n      Diag(op->getExprLoc(), diag::err_opencl_taking_address_capture);"}},
[l]={
[l]={
["clang/test/SemaCXX/literal-operators.cpp"]={"clang/test/SemaCXX/literal-operators.cpp:52:16: error: \'operator\"\"_foo\' following the \'template\' keyword cannot refer to a dependent template"}
[U]={"clang/test/SemaOpenCL/invalid-block.cl:100:6: error: taking address of a capture is not allowed","clang/test/SemaOpenCL/invalid-block.cl:101:6: error: taking address of a capture is not allowed"}
}
}
},
},
["err_template_kw_refers_to_non_template"]={
["err_opencl_taking_function_address_parser"]={
[b]="err_template_kw_refers_to_non_template",
[d]="err_opencl_taking_function_address_parser",
[c]={{nil,s,"%0%select{| following the \'template\' keyword}1 does not refer to a template"},{u,nil,"%0 following the \'template\' keyword does not refer to a template"}},
[e]="taking address of function is not allowed",
[d]={{nil,s,{"A",{a," following the \'template\' keyword"}," does not refer to a template"}},{u,nil,"A following the \'template\' keyword does not refer to a template"}},
[i]="taking address of function is not allowed",
[e]=k,
[j]=k,
[g]="(.*?)(?:| following the \'template\' keyword) does not refer to a template",
[c]="taking address of function is not allowed",
[h]=a,
[h]=a,
[i]=m,
[g]=K,
[f]={"b67535d1b6d7",1238460238,"Parsing and AST representation for dependent template names that occur","Parsing and AST representation for dependent template names that occur\nwithin nested-name-specifiers, e.g., for the \"apply\" in\n\n  typename MetaFun::template apply<T1, T2>::type\n\nAt present, we can\'t instantiate these nested-name-specifiers, so our\ntesting is sketchy.\n\nllvm-svn: 68081"},
[f]={"cf04d04ccf68",1452004767,"[OpenCL] Disallow taking an address of a function.","[OpenCL] Disallow taking an address of a function.\n\nAn undecorated function designator implies taking the address of a function,\nwhich is illegal in OpenCL. Implementing a check for this earlier to allow\nthe error to be reported even in the presence of other more obvious errors.\n\nPatch by Neil Hickey!\n\nhttp://reviews.llvm.org/D15691\n\nllvm-svn: 256838"},
[j]={{o,557,"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()) {\n    // ...\n    // If a \'template\' keyword was used, a lookup that finds only non-template\n    // names is an error.\n   if (ExampleLookupResult && RequiredTemplate) {\n     Diag(Found.getNameLoc(), diag::err_template_kw_refers_to_non_template) << Found.getLookupName() << SS.getRange() << RequiredTemplate.hasTemplateKeyword() << RequiredTemplate.getTemplateKeywordLoc();"}},
[b]={{"clang/lib/Parse/ParseExpr.cpp",1861,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (getLangOpts().OpenCL && !getActions().getOpenCLOptions().isAvailableOption(\"__cl_clang_function_pointers\", getLangOpts()))\n    if (Expr *PostfixExpr = Res.get()) {\n      // ...\n     if (!Ty.isNull() && Ty->isFunctionType()) {\n       Diag(PostfixExpr->getExprLoc(), diag::err_opencl_taking_function_address_parser);"}},
[l]={
[l]={
["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:25:38: error: \'apply\' following the \'template\' keyword does not refer to a template"}
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:131:29: error: taking address of function is not allowed","clang/test/SemaOpenCL/cond.cl:131:36: error: taking address of function is not allowed"}
}
}
},
},
["err_template_kw_refers_to_type_template"]={
["err_opencl_ternary_with_block"]={
[b]="err_template_kw_refers_to_type_template",
[d]="err_opencl_ternary_with_block",
[c]="\'%0%1\' is expected to be a non-type template, but instantiated to a %select{class|type alias}2 template",
[e]="block type cannot be used as expression in ternary expression in OpenCL",
[d]={{nil,nil,{"\'AB\' is expected to be a non-type template, but instantiated to a ",{Lb,"type alias"}," template"}}},
[i]="block type cannot be used as expression in ternary expression in OpenCL",
[e]=k,
[j]=k,
[g]="\'(.*?)(.*?)\' is expected to be a non\\-type template, but instantiated to a (?:class|type alias) template",
[c]="block type cannot be used as expression in ternary expression in OpenCL",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={sb,1625925174,qb,rb},
[f]={"89307aa3e9fc",1456288176,"[OpenCL] Add Sema checks for OpenCL 2.0 block","[OpenCL] Add Sema checks for OpenCL 2.0 block\n\nSummary:\nAdd Sema checks for opencl 2.0 new features: Block.\nThis patch is partitioned from http://reviews.llvm.org/D16047\n\nReviewers: Anastasia\n\nSubscribers: pekka.jaaskelainen, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D17436\n\nllvm-svn: 261719"},
[j]={{o,5042,"// We actually only call this from template instantiation.\nExprResult Sema::BuildQualifiedTemplateIdExpr(CXXScopeSpec &SS, SourceLocation TemplateKWLoc, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n // ...\n auto DiagnoseTypeTemplateDecl = [&](TemplateDecl *Temp, bool isTypeAliasTemplateDecl) {\n   Diag(NameInfo.getLoc(), diag::err_template_kw_refers_to_type_template) << SS.getScopeRep() << NameInfo.getName().getAsString() << SS.getRange() << isTypeAliasTemplateDecl;"}},
[b]={{E,9115,"/// Return true if the Expr is block type\nstatic bool checkBlockType(Sema &S, const Expr *E) {\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n   // ...\n   if (Ty->isBlockPointerType()) {\n     S.Diag(E->getExprLoc(), diag::err_opencl_ternary_with_block);"}},
[l]={
[l]={
["clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp"]={"clang/test/SemaTemplate/ms-sizeof-missing-typename.cpp:54:61: error: \'Q::U\' is expected to be a non-type template, but instantiated to a class template"}
[U]={"clang/test/SemaOpenCL/invalid-block.cl:66:17: error: block type cannot be used as expression in ternary expression in OpenCL","clang/test/SemaOpenCL/invalid-block.cl:67:17: error: block type cannot be used as expression in ternary expression in OpenCL"}
}
}
},
},
["err_template_linkage"]={
["err_opencl_type_can_only_be_used_as_function_parameter"]={
[b]="err_template_linkage",
[d]="err_opencl_type_can_only_be_used_as_function_parameter",
[c]="templates must have C++ linkage",
[e]="type %0 can only be used as a function parameter in OpenCL",
[d]="templates must have C++ linkage",
[i]="type A can only be used as a function parameter in OpenCL",
[e]=k,
[j]=k,
[g]="templates must have C\\+\\+ linkage",
[c]="type (.*?) can only be used as a function parameter in OpenCL",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"379554ac5b15",1456371260,"[OpenCL] Add Sema checks for types","[OpenCL] Add Sema checks for types\n\nSummary:\nAdd Sema checks for opencl type: image, pipe....\nThis patch is partitioned from http://reviews.llvm.org/D16047\n\nReviewers: Anastasia, yaxunl\n\nSubscribers: pekka.jaaskelainen, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D17437\n\nllvm-svn: 261818"},
[j]={{o,8318,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n  // ...\n  if (Ctx && Ctx->isExternCContext()) {\n    Diag(TemplateParams->getTemplateLoc(), diag::err_template_linkage) << TemplateParams->getSourceRange();"}},
[b]={{G,7318,"/// Returns true if there hasn\'t been any invalid type diagnosed.\nstatic bool diagnoseOpenCLTypes(Sema &Se, VarDecl *NewVD) {\n // ...\n // OpenCL v2.0 s6.9.b - Image type can only be used as a function argument.\n // OpenCL v2.0 s6.13.16.1 - Pipe type can only be used as a function\n  // argument.\n  if (R->isImageType() || R->isPipeType()) {\n    Se.Diag(NewVD->getLocation(), diag::err_opencl_type_can_only_be_used_as_function_parameter) << R;"}},
[l]={
[l]={
["clang/test/CXX/over/over.oper/over.literal/p6.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p6.cpp:5:12: error: templates must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:10:3: error: templates must have C++ linkage","clang/test/CXX/over/over.oper/over.literal/p6.cpp:13:5: error: templates must have C++ linkage"}
["clang/test/SemaOpenCLCXX/template-opencl-types.clcpp"]={"clang/test/SemaOpenCLCXX/template-opencl-types.clcpp:21:13: error: type \'__private __read_only image1d_t\' can only be used as a function parameter in OpenCL","clang/test/SemaOpenCLCXX/template-opencl-types.clcpp:10:5: error: type \'__private __read_only image1d_t\' can only be used as a function parameter in OpenCL"}
}
}
},
},
["err_template_member"]={
["err_opencl_type_not_found"]={
[b]="err_template_member",
[d]={{nil,C,"err_opencl_type_not_found"}},
[c]="member %0 declared as a template",
[e]={{nil,C,"%0 type %1 not found; include the base header with -finclude-default-header"}},
[d]="member A declared as a template",
[i]={{nil,C,"A type B not found; include the base header with -finclude-default-header"}},
[e]=k,
[j]=k,
[g]="member (.*?) declared as a template",
[c]="(.*?) type (.*?) not found; include the base header with \\-finclude\\-default\\-header",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,C,m}},
[f]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan","Diagnose attempts to write a templated data member, from Stepan\nDyatkovskiy! Fixes PR10896.\n\nllvm-svn: 140250"},
[f]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
[j]={{C,3558,"/// 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    // Member field could not be with \"template\" keyword.\n    // So TemplateParameterLists should be empty in this case.\n    if (TemplateParameterLists.size()) {\n      // ...\n      if (TemplateParams->size()) {\n       // ...\n        Diag(D.getIdentifierLoc(), diag::err_template_member) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}},
[b]={{"clang/lib/Sema/SemaLookup.cpp",689,"/// Diagnose a missing builtin type.\nstatic QualType diagOpenCLBuiltinTypeError(Sema &S, llvm::StringRef TypeClass, llvm::StringRef Name) {\n S.Diag(SourceLocation(), diag::err_opencl_type_not_found) << TypeClass << Name;"}},
[l]={
[l]={
["clang/test/SemaTemplate/nested-template.cpp"]={"clang/test/SemaTemplate/nested-template.cpp:137:7: error: member \'SomeField\' declared as a template"}
["clang/test/SemaOpenCL/fdeclare-opencl-builtins.cl"]={"error: typedef type cl_mem_fence_flags not found; include the base header with -finclude-default-header"}
}
}
},
},
["err_template_member_noparams"]={
["err_opencl_type_struct_or_union_field"]={
[b]="err_template_member_noparams",
[d]="err_opencl_type_struct_or_union_field",
[c]="extraneous \'template<>\' in declaration of member %0",
[e]="the %0 type cannot be used to declare a structure or union field",
[d]="extraneous \'template<>\' in declaration of member A",
[i]="the A type cannot be used to declare a structure or union field",
[e]=k,
[j]=k,
[g]="extraneous \'template\\<\\>\' in declaration of member (.*?)",
[c]="the (.*?) type cannot be used to declare a structure or union field",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"7c26c04ba95c",1316616046,"Diagnose attempts to write a templated data member, from Stepan","Diagnose attempts to write a templated data member, from Stepan\nDyatkovskiy! Fixes PR10896.\n\nllvm-svn: 140250"},
[f]={yb,1457011999,xb,wb},
[j]={{C,3565,"/// 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    // Member field could not be with \"template\" keyword.\n    // So TemplateParameterLists should be empty in this case.\n    if (TemplateParameterLists.size()) {\n      // ...\n      if (TemplateParams->size()) {\n      // ...\n      } else {\n        // ...\n        Diag(TemplateParams->getTemplateLoc(), diag::err_template_member_noparams) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}},
[b]={{G,18136,"/// Build a new FieldDecl and check its well-formedness.\n///\n/// This routine builds a new FieldDecl given the fields name, type,\n/// record, etc. \\p PrevDecl should refer to any previous declaration\n/// with the same name and in the same scope as the field to be\n/// created.\n///\n/// \\returns a new FieldDecl.\n///\n/// \\todo The Declarator argument is a hack. It will be removed once\nFieldDecl *Sema::CheckFieldDecl(DeclarationName Name, QualType T, TypeSourceInfo *TInfo, RecordDecl *Record, SourceLocation Loc, bool Mutable, Expr *BitWidth, InClassInitStyle InitStyle, SourceLocation TSSL, AccessSpecifier AS, NamedDecl *PrevDecl, Declarator *D) {\n  // ...\n  if (LangOpts.OpenCL) {\n    // OpenCL v1.2 s6.9b,r & OpenCL v2.0 s6.12.5 - The following types cannot be\n    // used as structure or union field: image, sampler, event or block types.\n    if (T->isEventT() || T->isImageType() || T->isSamplerT() || T->isBlockPointerType()) {\n      Diag(Loc, diag::err_opencl_type_struct_or_union_field) << T;"}},
[l]={
[l]={
["clang/test/SemaTemplate/nested-template.cpp"]={"clang/test/SemaTemplate/nested-template.cpp:138:5: error: extraneous \'template<>\' in declaration of member \'SomeField2\'"}
["clang/test/SemaOpenCL/event_t.cl"]={"clang/test/SemaOpenCL/event_t.cl:6:11: error: the \'event_t\' type cannot be used to declare a structure or union field"}
}
}
},
},
["err_template_missing_args"]={
["err_opencl_unknown_type_specifier"]={
[b]="err_template_missing_args",
[d]="err_opencl_unknown_type_specifier",
[c]="use of class template %0 requires template arguments",
[e]={{nil,M,"%0 does not support the \'%1\' %select{type qualifier|storage class specifier}2"},{C,v,"%select{OpenCL C|C++ for OpenCL}0 version %1 does not support the \'%2\' %select{type qualifier|storage class specifier}3"},{u,z,"OpenCL %select{C|C++}0 version %1 does not support the \'%2\' %select{type qualifier|storage class specifier}3"},{F,nil,"OpenCL version %0 does not support the \'%1\' %select{type qualifier|storage class specifier}2"}},
[d]="use of class template A requires template arguments",
[i]={{nil,M,{"A does not support the \'B\' ",{"type qualifier","storage class specifier"}}},{C,v,{{"OpenCL C","C++ for OpenCL"}," version B does not support the \'C\' ",{"type qualifier","storage class specifier"}}},{u,z,{"OpenCL ",{"C","C++"}," version B does not support the \'C\' ",{"type qualifier","storage class specifier"}}},{F,nil,{"OpenCL version A does not support the \'B\' ",{"type qualifier","storage class specifier"}}}},
[e]=k,
[j]=k,
[g]="use of (?:class template|function template|variable template|alias template|template template parameter|concept|template) (.*?) requires template arguments",
[c]="(.*?) does not support the \'(.*?)\' (?:type qualifier|storage class specifier)",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,u,V},{Kb,nil,m}},
[f]={"823015d627b8",1270684986,"When a template (without arguments) is passed as a template type","When a template (without arguments) is passed as a template type\nparameter, explicitly ask the user to give it arguments. We used to\ncomplain that it wasn\'t a type and expect the user to figure it out.\n\nllvm-svn: 100729"},
[f]={"2c8dcfbae603",1417011006,"[OpenCL] Generic address space has been added in OpenCL v2.0.","[OpenCL] Generic address space has been added in OpenCL v2.0.\n\nTo support it in the frontend, the following has been added:  \n- generic address space type attribute;\n- documentation for the OpenCL address space attributes;\n- parsing of __generic(generic) keyword;\n- test code for the parser and diagnostics.\n\nllvm-svn: 222831"},
[j]={{o,4899,"void Sema::diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc) {\n  Diag(Loc, diag::err_template_missing_args) << (int)getTemplateNameKindForDiagnostics(Name) << Name;"}},
[b]={{ib,4294,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  while (true) {\n    // ...\n    case tok::kw_pipe:\n      if (!getLangOpts().OpenCL || getLangOpts().getOpenCLCompatibleVersion() < 200) {\n      // ...\n      } else if (!getLangOpts().OpenCLPipes) {\n        DiagID = diag::err_opencl_unknown_type_specifier;"},{ib,4426,"#include \"clang/Basic/TransformTypeTraits.def\"\n    // ...\n    // OpenCL address space qualifiers:\n    case tok::kw___generic:\n      // generic address space is introduced only in OpenCL v2.0\n      // see OpenCL C Spec v2.0 s6.5.5\n      // OpenCL v3.0 introduces __opencl_c_generic_address_space\n      // feature macro to indicate if generic address space is supported\n      if (!Actions.getLangOpts().OpenCLGenericAddressSpace) {\n        DiagID = diag::err_opencl_unknown_type_specifier;"},{ib,4493,"#include \"clang/Basic/TransformTypeTraits.def\"\n    // ...\n    // If the specifier wasn\'t legal, issue a diagnostic.\n    if (isInvalid) {\n      // ...\n      else if (DiagID == diag::err_opencl_unknown_type_specifier) {"},{"clang/lib/Sema/DeclSpec.cpp",646,"bool DeclSpec::SetStorageClassSpec(Sema &S, SCS SC, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy) {\n  // OpenCL v1.1 s6.8g: \"The extern, static, auto and register storage-class\n  // specifiers are not supported.\n  // It seems sensible to prohibit private_extern too\n  // The cl_clang_storage_class_specifiers extension enables support for\n  // these storage-class specifiers.\n // OpenCL v1.2 s6.8 changes this to \"The auto and register storage-class\n  // specifiers are not supported.\"\n  if (S.getLangOpts().OpenCL && !S.getOpenCLOptions().isAvailableOption(\"cl_clang_storage_class_specifiers\", S.getLangOpts())) {\n    // ...\n    case SCS_extern:\n    case SCS_private_extern:\n    case SCS_static:\n      if (S.getLangOpts().getOpenCLCompatibleVersion() < 120) {\n        DiagID = diag::err_opencl_unknown_type_specifier;"},{"clang/lib/Sema/DeclSpec.cpp",653,"bool DeclSpec::SetStorageClassSpec(Sema &S, SCS SC, SourceLocation Loc, const char *&PrevSpec, unsigned &DiagID, const PrintingPolicy &Policy) {\n  // OpenCL v1.1 s6.8g: \"The extern, static, auto and register storage-class\n  // specifiers are not supported.\n  // It seems sensible to prohibit private_extern too\n  // The cl_clang_storage_class_specifiers extension enables support for\n  // these storage-class specifiers.\n  // OpenCL v1.2 s6.8 changes this to \"The auto and register storage-class\n  // specifiers are not supported.\"\n  if (S.getLangOpts().OpenCL && !S.getOpenCLOptions().isAvailableOption(\"cl_clang_storage_class_specifiers\", S.getLangOpts())) {\n    // ...\n    case SCS_auto:\n    case SCS_register:\n      DiagID = diag::err_opencl_unknown_type_specifier;"},{G,7866,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    // ...\n    if (TSC != TSCS_unspecified) {\n      Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_opencl_unknown_type_specifier) << getLangOpts().getOpenCLVersionString() << DeclSpec::getSpecifierName(TSC) << 1;"}},
[l]={
[l]={
["clang/test/Parser/cxx2a-constrained-template-param.cpp"]={"clang/test/Parser/cxx2a-constrained-template-param.cpp:49:27: error: use of class template \'test1\' requires template arguments"}
["clang/test/Parser/opencl-storage-class.cl"]={"clang/test/Parser/opencl-storage-class.cl:5:3: error: OpenCL C version 1.0 does not support the \'static\' storage class specifier","clang/test/Parser/opencl-storage-class.cl:6:3: error: OpenCL C version 1.0 does not support the \'register\' storage class specifier","clang/test/Parser/opencl-storage-class.cl:7:3: error: OpenCL C version 1.0 does not support the \'extern\' storage class specifier","clang/test/Parser/opencl-storage-class.cl:8:3: error: OpenCL C version 1.0 does not support the \'auto\' storage class specifier"}
}
}
},
},
["err_template_nontype_parm_bad_structural_type"]={
["err_opencl_variadic_function"]={
[b]={{nil,v,"err_template_nontype_parm_bad_structural_type"}},
[d]="err_opencl_variadic_function",
[c]={{nil,v,"a non-type template parameter cannot have type %0 before C++20"}},
[e]="invalid prototype, variadic arguments are not allowed in OpenCL",
[d]={{nil,v,"a non-type template parameter cannot have type A before C++20"}},
[i]="invalid prototype, variadic arguments are not allowed in OpenCL",
[e]=k,
[j]=k,
[g]="a non\\-type template parameter cannot have type (.*?) before C\\+\\+20",
[c]="invalid prototype, variadic arguments are not allowed in OpenCL",
[h]=a,
[h]=a,
[i]={{nil,v,m}},
[g]=m,
[f]={Qb,1582847864,Ob,Nb},
[f]={"7c3053336233",1477659579,"[OpenCL] Diagnose variadic arguments","[OpenCL] Diagnose variadic arguments\n\nOpenCL disallows using variadic arguments (s6.9.e and s6.12.5 OpenCL v2.0)\napart from some exceptions:\n- printf\n- enqueue_kernel\n\nThis change adds error diagnostic for variadic functions but accepts printf\nand any compiler internal function (which should cover __enqueue_kernel_XXX cases).\n\nIt also unifies diagnostic with block prototype and adds missing uncaught cases for blocks.\n\nllvm-svn: 285395"},
[j]={{o,1484,"QualType Sema::CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc) {\n  // ...\n  if (!getLangOpts().CPlusPlus20) {\n    // ...\n    Diag(Loc, diag::err_template_nontype_parm_bad_structural_type) << T;"}},
[b]={{H,5316,"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      if (LangOpts.OpenCL) {\n        // ...\n        // OpenCL doesn\'t support variadic functions and blocks\n        // (s6.9.e and s6.12.5 OpenCL v2.0) except for printf.\n        // We also allow here any toolchain reserved identifiers.\n        if (FTI.isVariadic && !S.getOpenCLOptions().isAvailableOption(\"__cl_clang_variadic_functions\", S.getLangOpts()) && !(D.getIdentifier() && ((D.getIdentifier()->getName() == \"printf\" && LangOpts.getOpenCLCompatibleVersion() >= 120) || D.getIdentifier()->getName().startswith(\"__\")))) {\n          S.Diag(D.getIdentifierLoc(), diag::err_opencl_variadic_function);"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.param/p4.cpp"]={"clang/test/CXX/temp/temp.param/p4.cpp:18:16: error: a non-type template parameter cannot have type \'float\' before C++20"}
[U]={"clang/test/SemaOpenCL/invalid-block.cl:51:7: error: invalid prototype, variadic arguments are not allowed in OpenCL","clang/test/SemaOpenCL/invalid-block.cl:51:28: error: invalid prototype, variadic arguments are not allowed in OpenCL","clang/test/SemaOpenCL/invalid-block.cl:54:15: error: invalid prototype, variadic arguments are not allowed in OpenCL"}
}
}
},
},
["err_template_nontype_parm_bad_type"]={
["err_opencl_vla"]={
[b]="err_template_nontype_parm_bad_type",
[d]="err_opencl_vla",
[c]="a non-type template parameter cannot have type %0",
[e]="variable length arrays are not supported in OpenCL",
[d]="a non-type template parameter cannot have type A",
[i]="variable length arrays are not supported in OpenCL",
[e]=k,
[j]=k,
[g]="a non\\-type template parameter cannot have type (.*?)",
[c]="variable length arrays are not supported in OpenCL",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"1d58cdbf4e17",1358444100,"Add some semantic checks for OpenCL. Variadic macros, VLAs and bitfields are not supported.","Add some semantic checks for OpenCL. Variadic macros, VLAs and bitfields are not supported.\n\nllvm-svn: 172732"},
[j]={{o,1349,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // ...\n // Don\'t mention structural types in our diagnostic prior to C++20. Also,\n // there\'s not much more we can say about non-scalar non-class types --\n // because we can\'t see functions or arrays here, those can only be language\n  // extensions.\n  if (!getLangOpts().CPlusPlus20 || (!T->isScalarType() && !T->isRecordType())) {\n    Diag(Loc, diag::err_template_nontype_parm_bad_type) << T;"}},
[b]={{H,2580,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    // ...\n    VLADiag = diag::err_opencl_vla;"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:36:24: error: a non-type template parameter cannot have type \'_Atomic(float)\'","clang/test/CXX/temp/temp.param/p7.cpp:37:22: error: a non-type template parameter cannot have type \'_Atomic(int)\'"}
["clang/test/SemaOpenCL/unsupported.cl"]={"clang/test/SemaOpenCL/unsupported.cl:16:9: error: variable length arrays are not supported in OpenCL"}
}
}
},
},
["err_template_nontype_parm_different_type"]={
["err_openclcxx_not_supported"]={
[b]="err_template_nontype_parm_different_type",
[d]={{nil,z,"err_openclcxx_not_supported"}},
[c]="template non-type parameter has a different type %0 in template %select{|template parameter }1redeclaration",
[e]={{nil,v,"\'%0\' is not supported in C++ for OpenCL"},{u,z,"\'%0\' is not supported in OpenCL C++"}},
[d]={{nil,nil,{"template non-type parameter has a different type A in template ",{a,"template parameter "},"redeclaration"}}},
[i]={{nil,v,"\'A\' is not supported in C++ for OpenCL"},{u,z,"\'A\' is not supported in OpenCL C++"}},
[e]=k,
[j]=k,
[g]="template non\\-type parameter has a different type (.*?) in template (?:|template parameter )redeclaration",
[c]="\'(.*?)\' is not supported in C\\+\\+ for OpenCL",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,z,V}},
[f]={p,1237025389,q,r},
[f]={"2ca6ba1045c9",1525871777,"[OpenCL] Restrict various keywords in OpenCL C++ mode","[OpenCL] Restrict various keywords in OpenCL C++ mode\n\nRestrict the following keywords in the OpenCL C++ language mode,\naccording to Sections 2.2 & 2.9 of the OpenCL C++ 1.0 Specification.\n\n - dynamic_cast\n - typeid\n - register (already restricted in OpenCL C, update the diagnostic)\n - thread_local\n - exceptions (try/catch/throw)\n - access qualifiers read_only, write_only, read_write\n\nSupport the `__global`, `__local`, `__constant`, `__private`, and\n`__generic` keywords in OpenCL C++.  Leave the unprefixed address\nspace qualifiers such as global available, i.e., do not mark them as\nreserved keywords in OpenCL C++.  libclcxx provides explicit address\nspace pointer classes such as `global_ptr` and `global<T>` that are\nimplemented using the `__`-prefixed qualifiers.\n\nDifferential Revision: https://reviews.llvm.org/D46022\n\nllvm-svn: 331874"},
[j]={{o,8077,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // ...\n  // For non-type template parameters, check the type of the parameter.\n  if (NonTypeTemplateParmDecl *OldNTTP = dyn_cast<NonTypeTemplateParmDecl>(Old)) {\n   // ...\n   // If we are matching a template template argument to a template\n   // template parameter and one of the non-type template parameter types\n   // is dependent, then we must wait until template instantiation time\n   // to actually compare the arguments.\n   if (Kind != Sema::TPL_TemplateTemplateArgumentMatch || (!OldNTTP->getType()->isDependentType() && !NewNTTP->getType()->isDependentType())) {\n     // ...\n     if (!S.Context.hasSameType(OldType, NewType)) {\n       if (Complain) {\n         unsigned NextDiag = diag::err_template_nontype_parm_different_type;"}},
[b]={{cb,344,"ExprResult Sema::BuildCXXNamedCast(SourceLocation OpLoc, tok::TokenKind Kind, TypeSourceInfo *DestTInfo, Expr *E, SourceRange AngleBrackets, SourceRange Parens) {\n  // ...\n  case tok::kw_dynamic_cast: {\n    // dynamic_cast is not supported in C++ for OpenCL.\n    if (getLangOpts().OpenCLCPlusPlus) {\n      return ExprError(Diag(OpLoc, diag::err_openclcxx_not_supported) << \"dynamic_cast\");"},{N,655,"/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression);\nExprResult Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, bool isType, void *TyOrExpr, SourceLocation RParenLoc) {\n  // typeid is not supported in OpenCL.\n  if (getLangOpts().OpenCLCPlusPlus) {\n    return ExprError(Diag(OpLoc, diag::err_openclcxx_not_supported) << \"typeid\");"},{N,2719,"bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, AllocationFunctionScope NewScope, AllocationFunctionScope DeleteScope, QualType AllocType, bool IsArray, bool &PassAlignment, MultiExprArg PlaceArgs, FunctionDecl *&OperatorNew, FunctionDecl *&OperatorDelete, bool Diagnose) {\n  // ...\n  // Find the allocation function.\n  {\n    // ...\n    if (getLangOpts().OpenCLCPlusPlus && R.empty()) {\n      if (PlaceArgs.empty()) {\n       Diag(StartLoc, diag::err_openclcxx_not_supported) << \"default new\";"},{N,3752,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n // ...\n if (!Ex.get()->isTypeDependent()) {\n   // ...\n   if (!OperatorDelete) {\n     if (getLangOpts().OpenCLCPlusPlus) {\n       Diag(StartLoc, diag::err_openclcxx_not_supported) << \"default delete\";"}},
[l]={
[l]={
["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:80:28: error: template non-type parameter has a different type \'long\' in template redeclaration","clang/test/SemaTemplate/friend-template.cpp:305:15: error: template non-type parameter has a different type \'char\' in template redeclaration"}
["clang/test/SemaOpenCLCXX/restricted.clcpp"]={"clang/test/SemaOpenCLCXX/restricted.clcpp:13:36: error: \'typeid\' is not supported in C++ for OpenCL","clang/test/SemaOpenCLCXX/restricted.clcpp:27:10: error: \'dynamic_cast\' is not supported in C++ for OpenCL"}
}
}
},
},
["err_template_nontype_parm_incomplete"]={
["err_openclcxx_placement_new"]={
[b]={{nil,v,"err_template_nontype_parm_incomplete"}},
[d]={{nil,v,"err_openclcxx_placement_new"}},
[c]={{nil,v,"non-type template parameter has incomplete type %0"}},
[e]={{nil,v,"use of placement new requires explicit declaration"}},
[d]={{nil,v,"non-type template parameter has incomplete type A"}},
[i]={{nil,v,"use of placement new requires explicit declaration"}},
[e]=k,
[j]=k,
[g]="non\\-type template parameter has incomplete type (.*?)",
[c]="use of placement new requires explicit declaration",
[h]=a,
[h]=a,
[i]={{nil,v,m}},
[g]={{nil,v,m}},
[f]={Qb,1582847864,Ob,Nb},
[f]={"1006a068c63f",1561555884,"[OpenCL] Improve diagnostic for placement new","[OpenCL] Improve diagnostic for placement new\n\nWithout an explicit declaration for placement new, clang would reject\nuses of placement new with \"\'default new\' is not supported in OpenCL\nC++\".  This may mislead users into thinking that placement new is not\nsupported, see e.g. PR42060.\n\nClarify that placement new requires an explicit declaration.\n\nDifferential Revision: https://reviews.llvm.org/D63561\n\nllvm-svn: 364423"},
[j]={{o,1331,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // ...\n if (RequireCompleteType(Loc, T, diag::err_template_nontype_parm_incomplete))"}},
[b]={{N,2721,"bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, AllocationFunctionScope NewScope, AllocationFunctionScope DeleteScope, QualType AllocType, bool IsArray, bool &PassAlignment, MultiExprArg PlaceArgs, FunctionDecl *&OperatorNew, FunctionDecl *&OperatorDelete, bool Diagnose) {\n  // ...\n  // Find the allocation function.\n {\n   // ...\n    if (getLangOpts().OpenCLCPlusPlus && R.empty()) {\n      if (PlaceArgs.empty()) {\n     // ...\n     } else {\n        Diag(StartLoc, diag::err_openclcxx_placement_new);"}},
[l]={
[l]={
["clang/test/SemaCXX/invalid-template-params.cpp"]={"clang/test/SemaCXX/invalid-template-params.cpp:7:3: error: non-type template parameter has incomplete type \'class UBar\'"}
["clang/test/SemaOpenCLCXX/newdelete.clcpp"]={"clang/test/SemaOpenCLCXX/newdelete.clcpp:24:9: error: use of placement new requires explicit declaration"}
}
}
},
},
["err_template_nontype_parm_not_literal"]={
["err_openclcxx_virtual_function"]={
[b]={{nil,v,"err_template_nontype_parm_not_literal"}},
[d]={{nil,z,"err_openclcxx_virtual_function"}},
[c]={{nil,v,"non-type template parameter has non-literal type %0"}},
[e]={{nil,v,"virtual functions are not supported in C++ for OpenCL"},{u,z,"virtual functions are not supported in OpenCL C++"}},
[d]={{nil,v,"non-type template parameter has non-literal type A"}},
[i]={{nil,v,"virtual functions are not supported in C++ for OpenCL"},{u,z,"virtual functions are not supported in OpenCL C++"}},
[e]=k,
[j]=k,
[g]="non\\-type template parameter has non\\-literal type (.*?)",
[c]="virtual functions are not supported in C\\+\\+ for OpenCL",
[h]=a,
[h]=a,
[i]={{nil,v,m}},
[g]={{nil,z,K}},
[f]={Qb,1582847864,Ob,Nb},
[f]={"49ffffbccdef",1524482627,"[OpenCL] Reject virtual functions for OpenCL C++","[OpenCL] Reject virtual functions for OpenCL C++\n\nDifferential Revision: https://reviews.llvm.org/D45873\n\nllvm-svn: 330579"},
[j]={{o,1354,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n // ...\n if (RequireLiteralType(Loc, T, diag::err_template_nontype_parm_not_literal))"}}
[b]={{ib,4031,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///         storage-class-specifier declaration-specifiers[opt]\n///         type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]   \'_Thread_local\'\n/// [GNU]   \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]   \'inline\'\n/// [C++]   \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///       \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  while (true) {\n    // ...\n    case tok::kw_virtual:\n      // C++ for OpenCL does not allow virtual function qualifier, to avoid\n      // function pointers restricted in OpenCL v2.0 s6.9.a.\n      if (getLangOpts().OpenCLCPlusPlus && !getActions().getOpenCLOptions().isAvailableOption(\"__cl_clang_function_pointers\", getLangOpts())) {\n        DiagID = diag::err_openclcxx_virtual_function;"}},
},
["err_template_nontype_parm_not_structural"]={
[b]={{nil,v,"err_template_nontype_parm_not_structural"}},
[c]={{nil,v,"type %0 of non-type template parameter is not a structural type"}},
[d]={{nil,v,"type A of non-type template parameter is not a structural type"}},
[e]=k,
[g]="type (.*?) of non\\-type template parameter is not a structural type",
[h]=a,
[i]={{nil,v,m}},
[f]={Qb,1582847864,Ob,Nb},
[j]={{o,1357,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // ...\n  Diag(Loc, diag::err_template_nontype_parm_not_structural) << T;"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:73:14: error: type \'RRef\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:78:17: error: type \'BadBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:83:18: error: type \'BadField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:88:23: error: type \'BadFieldArray\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:92:23: error: type \'ProtectedBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:96:21: error: type \'PrivateBase\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:100:22: error: type \'Private2Base\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:106:24: error: type \'ProtectedField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:112:22: error: type \'PrivateField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:117:23: error: type \'Private2Field\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:122:22: error: type \'MutableField\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:125:36: error: type \'BadExtType<_Atomic(float)>\' of non-type template parameter is not a structural type","clang/test/CXX/temp/temp.param/p7.cpp:126:34: error: type \'BadExtType<_Atomic(int)>\' of non-type template parameter is not a structural type"}
["clang/test/Parser/opencl-cxx-virtual.cl"]={"clang/test/Parser/opencl-cxx-virtual.cl:12:3: error: virtual functions are not supported in C++ for OpenCL","clang/test/Parser/opencl-cxx-virtual.cl:17:3: error: virtual functions are not supported in C++ for OpenCL","clang/test/Parser/opencl-cxx-virtual.cl:26:3: error: virtual functions are not supported in C++ for OpenCL"}
}
}
},
},
["err_template_nontype_parm_rvalue_ref"]={
["err_openmp_default_simd_align_expr"]={
[b]={{nil,v,"err_template_nontype_parm_rvalue_ref"}},
[d]="err_openmp_default_simd_align_expr",
[c]={{nil,v,"non-type template parameter has rvalue reference type %0"}},
[e]="invalid application of \'__builtin_omp_required_simd_align\' to an expression, only type is allowed",
[d]={{nil,v,"non-type template parameter has rvalue reference type A"}},
[i]="invalid application of \'__builtin_omp_required_simd_align\' to an expression, only type is allowed",
[e]=k,
[j]=k,
[g]="non\\-type template parameter has rvalue reference type (.*?)",
[c]="invalid application of \'__builtin_omp_required_simd_align\' to an expression, only type is allowed",
[h]=a,
[h]=a,
[i]={{nil,v,m}},
[g]=m,
[f]={Qb,1582847864,Ob,Nb},
[f]={"003965130462",1435808419,"[OPENMP] Introduced type trait \"__builtin_omp_required_simd_align\" for default simd alignment.","[OPENMP] Introduced type trait \"__builtin_omp_required_simd_align\" for default simd alignment.\n\nAdds type trait \"__builtin_omp_required_simd_align\" after discussions here http://reviews.llvm.org/D9894\nDifferential Revision: http://reviews.llvm.org/D10597\n\nllvm-svn: 241237"},
[j]={{o,1339,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // ...\n  // Structural types are required to be object types or lvalue references.\n  if (T->isRValueReferenceType()) {\n    Diag(Loc, diag::err_template_nontype_parm_rvalue_ref) << T;"}},
[b]={{E,4785,"/// Build a sizeof or alignof expression given an expression\n/// operand.\nExprResult Sema::CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc, UnaryExprOrTypeTrait ExprKind) {\n  // ...\n  if (E->isTypeDependent()) {\n  // ...\n  } else if (ExprKind == UETT_AlignOf || ExprKind == UETT_PreferredAlignOf) {\n  // ...\n  } else if (ExprKind == UETT_VecStep) {\n  // ...\n  } else if (ExprKind == UETT_OpenMPRequiredSimdAlign) {\n    Diag(E->getExprLoc(), diag::err_openmp_default_simd_align_expr);"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:26:16: error: non-type template parameter has rvalue reference type \'int &&\'"}
["clang/test/SemaCXX/openmp_default_simd_align.cpp"]={"clang/test/SemaCXX/openmp_default_simd_align.cpp:5:61: error: invalid application of \'__builtin_omp_required_simd_align\' to an expression, only type is allowed"}
}
}
},
},
["err_template_outside_namespace_or_class_scope"]={
["err_openmp_vla_in_task_untied"]={
[b]="err_template_outside_namespace_or_class_scope",
[d]={{nil,J,"err_openmp_vla_in_task_untied"}},
[c]="templates can only be declared in namespace or class scope",
[e]={{nil,J,"variable length arrays are not supported in OpenMP tasking regions with \'untied\' clause"}},
[d]="templates can only be declared in namespace or class scope",
[i]={{nil,J,"variable length arrays are not supported in OpenMP tasking regions with \'untied\' clause"}},
[e]=k,
[j]=k,
[g]="templates can only be declared in namespace or class scope",
[c]="variable length arrays are not supported in OpenMP tasking regions with \'untied\' clause",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,J,o}},
[f]={p,1237025389,q,r},
[f]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
[j]={{o,8351,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n  // ...\n  return Diag(TemplateParams->getTemplateLoc(), diag::err_template_outside_namespace_or_class_scope) << TemplateParams->getSourceRange();"}},
[b]={{H,2589,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // ...\n  if (getLangOpts().OpenCL) {\n  // ...\n  } else if (getLangOpts().C99) {\n  // ...\n  } else if (isSFINAEContext()) {\n  // ...\n  } else if (getLangOpts().OpenMP && isInOpenMPTaskUntiedContext()) {\n    VLADiag = diag::err_openmp_vla_in_task_untied;"}},
[l]={
[l]={
["clang/test/SemaCXX/extern-c.cpp"]={"clang/test/SemaCXX/extern-c.cpp:265:5: error: templates can only be declared in namespace or class scope"}
["clang/test/OpenMP/task_messages.cpp"]={"clang/test/OpenMP/task_messages.cpp:337:15: error: variable length arrays are not supported in OpenMP tasking regions with \'untied\' clause"}
}
}
},
},
["err_template_param_default_arg_inconsistent_redefinition"]={
["err_operator_arrow_circular"]={
[b]={{nil,x,"err_template_param_default_arg_inconsistent_redefinition"}},
[d]="err_operator_arrow_circular",
[c]={{nil,x,"template parameter default argument is inconsistent with previous definition"}},
[e]="circular pointer delegation detected",
[d]={{nil,x,"template parameter default argument is inconsistent with previous definition"}},
[i]="circular pointer delegation detected",
[e]=k,
[j]=k,
[g]="template parameter default argument is inconsistent with previous definition",
[c]="circular pointer delegation detected",
[h]=a,
[i]={{nil,x,m}},
[f]={sb,1625925174,qb,rb},
[j]={{o,3048,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  // ...\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // ...\n    // [basic.def.odr]/13:\n    //    There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n    if (RedundantDefaultArg) {\n    // ...\n    } else if (InconsistentDefaultArg) {\n      // ...\n      Diag(NewDefaultLoc, diag::err_template_param_default_arg_inconsistent_redefinition);"}}
},
["err_template_param_default_arg_missing"]={
[b]="err_template_param_default_arg_missing",
[c]="template parameter missing a default argument",
[d]="template parameter missing a default argument",
[e]=k,
[g]="template parameter missing a default argument",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"10ce958550c7",1254269981,"self-referecing operator \'->\' member function was causing","self-referecing operator \'->\' member function was causing\ninfinit recursion. This patch fixes it. [13.3.1.2]-p2\n\nllvm-svn: 83124"},
[j]={{o,3060,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  // ...\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n   // ...\n   // [basic.def.odr]/13:\n   //     There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n    //    criteria of the ODR].\n    //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n   // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n   if (RedundantDefaultArg) {\n    // ...\n    } else if (InconsistentDefaultArg) {\n   // ...\n   } else if (MissingDefaultArg && TPC != TPC_FunctionTemplate) {\n     // ...\n      Diag((*NewParam)->getLocation(), diag::err_template_param_default_arg_missing);"}},
[b]={{N,7630,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n // ...\n // C++ [over.match.oper]p8:\n //   [...] When operator->returns, the operator-> is applied  to the value\n //   returned, with the original second operand.\n if (OpKind == tok::arrow) {\n    // ...\n    while (BaseType->isRecordType()) {\n     // ...\n     if (!CTypes.insert(CBaseType).second) {\n       Diag(OpLoc, diag::err_operator_arrow_circular) << StartingType;"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.param/p11.cpp"]={"clang/test/CXX/temp/temp.param/p11.cpp:6:16: error: template parameter missing a default argument","clang/test/CXX/temp/temp.param/p11.cpp:10:31: error: template parameter missing a default argument","clang/test/CXX/temp/temp.param/p11.cpp:14:14: error: template parameter missing a default argument"}
["clang/test/SemaCXX/overloaded-operator.cpp"]={"clang/test/SemaCXX/overloaded-operator.cpp:275:4: error: circular pointer delegation detected","clang/test/SemaCXX/overloaded-operator.cpp:291:4: error: circular pointer delegation detected"}
}
}
},
},
["err_template_param_default_arg_redefinition"]={
["err_operator_arrow_depth_exceeded"]={
[b]="err_template_param_default_arg_redefinition",
[d]="err_operator_arrow_depth_exceeded",
[c]="template parameter redefines default argument",
[e]="use of \'operator->\' on type %0 would invoke a sequence of more than %1 \'operator->\' calls",
[d]="template parameter redefines default argument",
[i]="use of \'operator->\' on type A would invoke a sequence of more than B \'operator->\' calls",
[e]=k,
[j]=k,
[g]="template parameter redefines default argument",
[c]="use of \'operator\\-\\>\' on type (.*?) would invoke a sequence of more than (.*?) \'operator\\-\\>\' calls",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"79c927bfe9fc",1383766311,"Add a limit to the length of a sequence of \'operator->\' functions we will","Add a limit to the length of a sequence of \'operator->\' functions we will\nfollow when building a class member access expression. Based on a patch by\nRahul Jain!\n\nllvm-svn: 194161"},
[j]={{o,3041,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  // ...\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n   // ...\n   // [basic.def.odr]/13:\n   //     There can be more than one definition of a\n    //    ...\n    //    default template argument\n    //    ...\n    //    in a program provided that each definition appears in a different\n    //    translation unit and the definitions satisfy the [same-meaning\n   //     criteria of the ODR].\n   //\n    // Simply, the design of modules allows the definition of template default\n    // argument to be repeated across translation unit. Note that the ODR is\n    // checked elsewhere. But it is still not allowed to repeat template default\n    // argument in the same translation unit.\n   if (RedundantDefaultArg) {\n     Diag(NewDefaultLoc, diag::err_template_param_default_arg_redefinition);"}},
[b]={{N,7588,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n // ...\n // C++ [over.match.oper]p8:\n //   [...] When operator->returns, the operator-> is applied  to the value\n //   returned, with the original second operand.\n if (OpKind == tok::arrow) {\n    // ...\n    while (BaseType->isRecordType()) {\n     if (OperatorArrows.size() >= getLangOpts().ArrowDepth) {\n       Diag(OpLoc, diag::err_operator_arrow_depth_exceeded) << StartingType << getLangOpts().ArrowDepth << Base->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.param/p12.cpp"]={"clang/test/CXX/temp/temp.param/p12.cpp:11:24: error: template parameter redefines default argument","clang/test/CXX/temp/temp.param/p12.cpp:21:34: error: template parameter redefines default argument","clang/test/CXX/temp/temp.param/p12.cpp:31:18: error: template parameter redefines default argument"}
["clang/test/SemaCXX/operator-arrow-depth.cpp"]={"clang/test/SemaCXX/operator-arrow-depth.cpp:25:12: error: use of \'operator->\' on type \'B<10 / 2 + 1>\' would invoke a sequence of more than 10 \'operator->\' calls"}
}
}
},
},
["err_template_param_different_kind"]={
["err_operator_delete_dependent_param_type"]={
[b]="err_template_param_different_kind",
[d]="err_operator_delete_dependent_param_type",
[c]="template parameter has a different kind in template %select{|template parameter }0redeclaration",
[e]="%0 cannot take a dependent type as first parameter; use %1 instead",
[d]={{nil,nil,{"template parameter has a different kind in template ",{a,"template parameter "},"redeclaration"}}},
[i]="A cannot take a dependent type as first parameter; use B instead",
[e]=k,
[j]=k,
[g]="template parameter has a different kind in template (?:|template parameter )redeclaration",
[c]="(.*?) cannot take a dependent type as first parameter; use (.*?) instead",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[j]={{o,8016,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // Check the actual kind (type, non-type, template).\n  if (Old->getKind() != New->getKind()) {\n    if (Complain) {\n      unsigned NextDiag = diag::err_template_param_different_kind;"}},
[b]={{y,16101,"static bool CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {\n  // ...\n  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy, ExpectedFirstParamType, diag::err_operator_delete_dependent_param_type, diag::err_operator_delete_param_type))"}},
[l]={
[l]={
["clang/test/SemaTemplate/class-template-decl.cpp"]={"clang/test/SemaTemplate/class-template-decl.cpp:35:14: error: template parameter has a different kind in template redeclaration","clang/test/SemaTemplate/class-template-decl.cpp:50:18: error: template parameter has a different kind in template redeclaration"}
["clang/test/SemaCXX/cxx2a-destroying-delete.cpp"]={"clang/test/SemaCXX/cxx2a-destroying-delete.cpp:141:10: error: \'operator delete\' cannot take a dependent type as first parameter; use \'D<T> *\' instead"}
}
}
},
},
["err_template_param_list_different_arity"]={
["err_operator_delete_param_type"]={
[b]="err_template_param_list_different_arity",
[d]="err_operator_delete_param_type",
[c]="%select{too few|too many}0 template parameters in template %select{|template parameter }1redeclaration",
[e]="first parameter of %0 must have type %1",
[d]={{nil,nil,{{"too few","too many"}," template parameters in template ",{a,"template parameter "},"redeclaration"}}},
[i]="first parameter of A must have type B",
[e]=k,
[j]=k,
[g]="(?:too few|too many) template parameters in template (?:|template parameter )redeclaration",
[c]="first parameter of (.*?) must have type (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={Jb,1260573802,Fb,Db},
[j]={{o,8165,"/// Diagnose a known arity mismatch when comparing template argument\n/// lists.\nstatic void DiagnoseTemplateParameterListArityMismatch(Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  unsigned NextDiag = diag::err_template_param_list_different_arity;"}},
[b]={{y,16102,"static bool CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {\n // ...\n  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidTy, ExpectedFirstParamType, diag::err_operator_delete_dependent_param_type, diag::err_operator_delete_param_type))"}},
[l]={
[l]={
["clang/test/SemaCXX/libstdcxx_map_base_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_map_base_hack.cpp:20:5: error: too few template parameters in template redeclaration"}
["clang/test/SemaCXX/cxx2a-destroying-delete.cpp"]={"clang/test/SemaCXX/cxx2a-destroying-delete.cpp:19:6: error: first parameter of \'operator delete\' must have type \'void *\'","clang/test/SemaCXX/cxx2a-destroying-delete.cpp:30:8: error: first parameter of \'operator delete\' must have type \'A *\'"}
}
}
},
},
["err_template_param_list_matches_nontemplate"]={
["err_operator_new_default_arg"]={
[b]="err_template_param_list_matches_nontemplate",
[d]="err_operator_new_default_arg",
[c]="template parameter list matching the non-templated nested type %0 should be empty (\'template<>\')",
[e]="parameter of %0 cannot have a default argument",
[d]="template parameter list matching the non-templated nested type A should be empty (\'template<>\')",
[i]="parameter of A cannot have a default argument",
[e]=k,
[j]=k,
[g]="template parameter list matching the non\\-templated nested type (.*?) should be empty \\(\'template\\<\\>\'\\)",
[c]="parameter of (.*?) cannot have a default argument",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"1530138fd04d",1248975651,"Support out-of-line definitions of the members of class template","Support out-of-line definitions of the members of class template\npartial specializations.\n\nllvm-svn: 77606"},
[f]={"7e0b207e5478",1260726823,"More improvements to checking allocation and deallocation functions.","More improvements to checking allocation and deallocation functions.\n\nllvm-svn: 91244"},
[j]={{o,3487,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  // ...\n  for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes; ++TypeIdx) {\n    // ...\n   if (NeedEmptyTemplateHeader) {\n      // ...\n     if (ParamIdx < ParamLists.size()) {\n        if (ParamLists[ParamIdx]->size() > 0) {\n         // The header has template parameters when it shouldn\'t. Complain.\n          if (!SuppressDiagnostic)\n            Diag(ParamLists[ParamIdx]->getTemplateLoc(), diag::err_template_param_list_matches_nontemplate) << T << SourceRange(ParamLists[ParamIdx]->getLAngleLoc(), ParamLists[ParamIdx]->getRAngleLoc()) << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);"}},
[b]={{y,16070,"static bool CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  // C++ [basic.stc.dynamic.allocation]p1:\n // The first parameter shall not have an associated default argument.\n if (FnDecl->getParamDecl(0)->hasDefaultArg())\n   return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_default_arg) << FnDecl->getDeclName() << FnDecl->getParamDecl(0)->getDefaultArgRange();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p5-example.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p5-example.cpp:34:1: error: template parameter list matching the non-templated nested type \'A<short>\' should be empty (\'template<>\')"}
[ub]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:28:9: error: parameter of \'operator new\' cannot have a default argument"}
}
}
},
},
["err_template_param_pack_default_arg"]={
["err_operator_new_delete_declared_in_namespace"]={
[b]="err_template_param_pack_default_arg",
[d]="err_operator_new_delete_declared_in_namespace",
[c]="template parameter pack cannot have a default argument",
[e]="%0 cannot be declared inside a namespace",
[d]="template parameter pack cannot have a default argument",
[i]="A cannot be declared inside a namespace",
[e]=k,
[j]=k,
[g]="template parameter pack cannot have a default argument",
[c]="(.*?) cannot be declared inside a namespace",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"d382435014c5",1244845813,"Parameter packs can\'t have default arguments.","Parameter packs can\'t have default arguments.\n\nllvm-svn: 73262"},
[f]={Jb,1260573802,Fb,Db},
[j]={{o,1072,"/// ActOnTypeParameter - Called when a C++ template type parameter\n/// (e.g., \"typename T\") has been parsed. Typename specifies whether\n/// the keyword \"typename\" was used to declare the type parameter\n/// (otherwise, \"class\" was used), and KeyLoc is the location of the\n/// \"class\" or \"typename\" keyword. ParamName is the name of the\n/// parameter (NULL indicates an unnamed template parameter) and\n/// ParamNameLoc is the location of the parameter name (if any).\n/// If the type parameter has a default argument, it will be added\n/// later via ActOnTypeParameterDefault.\nNamedDecl *Sema::ActOnTypeParameter(Scope *S, bool Typename, SourceLocation EllipsisLoc, SourceLocation KeyLoc, IdentifierInfo *ParamName, SourceLocation ParamNameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedType DefaultArg, bool HasTypeConstraint) {\n  // ...\n  // C++0x [temp.param]p9:\n  //  A default template-argument may be specified for any kind of\n  //  template-parameter that is not a template parameter pack.\n  if (DefaultArg && IsParameterPack) {\n    Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{o,1604,"NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D, unsigned Depth, unsigned Position, SourceLocation EqualLoc, Expr *Default) {\n  // ...\n  // C++0x [temp.param]p9:\n  //  A default template-argument may be specified for any kind of\n  //  template-parameter that is not a template parameter pack.\n  if (Default && IsParameterPack) {\n    Diag(EqualLoc, diag::err_template_param_pack_default_arg);"},{o,1668,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n  // ...\n  // C++0x [temp.param]p9:\n  //  A default template-argument may be specified for any kind of\n  //  template-parameter that is not a template parameter pack.\n  if (IsParameterPack && !Default.isInvalid()) {\n    Diag(EqualLoc, diag::err_template_param_pack_default_arg);"}},
[b]={{y,15951,"static inline bool CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  if (isa<NamespaceDecl>(DC)) {\n    return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_delete_declared_in_namespace) << FnDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:5:28: error: template parameter pack cannot have a default argument","clang/test/CXX/temp/temp.param/p9-0x.cpp:8:24: error: template parameter pack cannot have a default argument","clang/test/CXX/temp/temp.param/p9-0x.cpp:13:45: error: template parameter pack cannot have a default argument"}
["clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp"]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp:8:8: error: \'operator delete\' cannot be declared inside a namespace"}
}
}
},
},
["err_template_param_pack_must_be_last_template_parameter"]={
["err_operator_new_delete_declared_static"]={
[b]="err_template_param_pack_must_be_last_template_parameter",
[d]="err_operator_new_delete_declared_static",
[c]="template parameter pack must be the last template parameter",
[e]="%0 cannot be declared static in global scope",
[d]="template parameter pack must be the last template parameter",
[i]="A cannot be declared static in global scope",
[e]=k,
[j]=k,
[g]="template parameter pack must be the last template parameter",
[c]="(.*?) cannot be declared static in global scope",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"327865db5323",1244848815,"A parameter pack must always come last in a class template.","A parameter pack must always come last in a class template.\n\nllvm-svn: 73269"},
[f]={Jb,1260573802,Fb,Db},
[j]={{o,3023,"/// Checks the validity of a template parameter list, possibly\n/// considering the template parameter list from a previous\n/// declaration.\n///\n/// If an \"old\" template parameter list is provided, it must be\n/// equivalent (per TemplateParameterListsAreEqual) to the \"new\"\n/// template parameter list.\n///\n/// \\param NewParams Template parameter list for a new template\n/// declaration. This template parameter list will be updated with any\n/// default arguments that are carried through from the previous\n/// template parameter list.\n///\n/// \\param OldParams If provided, template parameter list from a\n/// previous declaration of the same template. Default template\n/// arguments will be merged from the old template parameter list to\n/// the new template parameter list.\n///\n/// \\param TPC Describes the context in which we are checking the given\n/// template parameter list.\n///\n/// \\param SkipBody If we might have already made a prior merged definition\n/// of this template visible, the corresponding body-skipping information.\n/// Default argument redefinition is not an error when skipping such a body,\n/// because (under the ODR) we can assume the default arguments are the same\n/// as the prior merged definition.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool Sema::CheckTemplateParameterList(TemplateParameterList *NewParams, TemplateParameterList *OldParams, TemplateParamListContext TPC, SkipBodyInfo *SkipBody) {\n  // ...\n  for (TemplateParameterList::iterator NewParam = NewParams->begin(), NewParamEnd = NewParams->end(); NewParam != NewParamEnd; ++NewParam) {\n    // ...\n    // C++11 [temp.param]p11:\n    //  If a template parameter of a primary class template or alias template\n    //  is a template parameter pack, it shall be the last template parameter.\n    if (SawParameterPack && (NewParam + 1) != NewParamEnd && (TPC == TPC_ClassTemplate || TPC == TPC_VarTemplate || TPC == TPC_TypeAliasTemplate)) {\n      Diag((*NewParam)->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"},{o,9016,"Decl *Sema::ActOnConceptDefinition(Scope *S, MultiTemplateParamsArg TemplateParameterLists, IdentifierInfo *Name, SourceLocation NameLoc, Expr *ConstraintExpr) {\n  // ...\n  // Ensure that the parameter pack, if present, is the last parameter in the\n  // template.\n  for (TemplateParameterList::const_iterator ParamIt = Params->begin(), ParamEnd = Params->end(); ParamIt != ParamEnd; ++ParamIt) {\n    // ...\n    if (Param->isParameterPack()) {\n      // ...\n      Diag(Param->getLocation(), diag::err_template_param_pack_must_be_last_template_parameter);"}},
[b]={{y,15958,"static inline bool CheckOperatorNewDeleteDeclarationScope(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  if (isa<TranslationUnitDecl>(DC) && FnDecl->getStorageClass() == SC_Static) {\n    return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_delete_declared_static) << FnDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.param/p11-0x.cpp"]={"clang/test/CXX/temp/temp.param/p11-0x.cpp:26:22: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:30:22: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:34:17: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:37:17: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:41:38: error: template parameter pack must be the last template parameter","clang/test/CXX/temp/temp.param/p11-0x.cpp:44:38: error: template parameter pack must be the last template parameter"}
["clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp"]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.deallocation/p1.cpp:12:13: error: \'operator delete\' cannot be declared static in global scope"}
}
}
},
},
["err_template_param_shadow"]={
["err_operator_new_delete_dependent_result_type"]={
[b]="err_template_param_shadow",
[d]="err_operator_new_delete_dependent_result_type",
[c]="declaration of %0 shadows template parameter",
[e]="%0 cannot have a dependent return type; use %1 instead",
[d]="declaration of A shadows template parameter",
[i]="A cannot have a dependent return type; use B instead",
[e]=k,
[j]=k,
[g]="declaration of (.*?) shadows template parameter",
[c]="(.*?) cannot have a dependent return type; use (.*?) instead",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[j]={{"clang/lib/Sema/SemaLambda.cpp",1381,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  // ...\n  if (TemplateParams) {\n   for (const auto *TP : TemplateParams->asArray()) {\n     // ...\n     for (const auto &Capture : Intro.Captures) {\n        if (Capture.Id == TP->getIdentifier()) {\n          Diag(Capture.Loc, diag::err_template_param_shadow) << Capture.Id;"},{o,898,"/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining\n/// that the template parameter \'PrevDecl\' is being shadowed by a new\n/// declaration at location Loc. Returns true to indicate that this is\n/// an error, and false otherwise.\nvoid Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {\n  // ...\n  unsigned DiagId = getLangOpts().MSVCCompat ? diag::ext_template_param_shadow : diag::err_template_param_shadow;"}},
[b]={{y,16000,"static inline bool CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl, CanQualType ExpectedResultType, CanQualType ExpectedFirstParamType, unsigned DependentParamTypeDiag, unsigned InvalidParamTypeDiag) {\n  // ...\n  // Check that the result type is what we expect.\n if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType) {\n   // ...\n   return SemaRef.Diag(FnDecl->getLocation(), ResultType->isDependentType() ? diag::err_operator_new_delete_dependent_result_type : diag::err_operator_new_delete_invalid_result_type) << FnDecl->getDeclName() << ExpectedResultType;"}},
[l]={
[l]={
[vc]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:80:11: error: declaration of \'T\' shadows template parameter","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:98:11: error: declaration of \'T\' shadows template parameter"}
[ub]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:36:26: error: \'operator new\' cannot have a dependent return type; use \'void *\' instead"}
}
}
},
},
["err_template_parameter_default_friend_template"]={
["err_operator_new_delete_invalid_result_type"]={
[b]="err_template_parameter_default_friend_template",
[d]="err_operator_new_delete_invalid_result_type",
[c]="default template argument not permitted on a friend template",
[e]="%0 must return type %1",
[d]="default template argument not permitted on a friend template",
[i]="A must return type B",
[e]=k,
[j]=k,
[g]="default template argument not permitted on a friend template",
[c]="(.*?) must return type (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in","Diagnose ill-formed uses of default template arguments in\nfunction templates (in C++98), friend function templates, and\nout-of-line definitions of members of class templates.\n\nAlso handles merging of default template arguments from previous\ndeclarations of function templates, for C++0x. However, we don\'t yet\nmake use of those default template arguments.\n\nllvm-svn: 89872"},
[f]={Jb,1260573802,Fb,Db},
[j]={{o,2742,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n  // ...\n  case Sema::TPC_FriendClassTemplate:\n  case Sema::TPC_FriendFunctionTemplate:\n    // ...\n    S.Diag(ParamLoc, diag::err_template_parameter_default_friend_template) << DefArgRange;"}},
[b]={{y,16001,"static inline bool CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl, CanQualType ExpectedResultType, CanQualType ExpectedFirstParamType, unsigned DependentParamTypeDiag, unsigned InvalidParamTypeDiag) {\n  // ...\n  // Check that the result type is what we expect.\n  if (SemaRef.Context.getCanonicalType(ResultType) != ExpectedResultType) {\n    // ...\n    return SemaRef.Diag(FnDecl->getLocation(), ResultType->isDependentType() ? diag::err_operator_new_delete_dependent_result_type : diag::err_operator_new_delete_invalid_result_type) << FnDecl->getDeclName() << ExpectedResultType;"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:17:21: error: default template argument not permitted on a friend template"}
[ub]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:16:8: error: \'operator new\' must return type \'void *\'"}
}
}
},
},
["err_template_parameter_default_template_member"]={
["err_operator_new_delete_template_too_few_parameters"]={
[b]="err_template_parameter_default_template_member",
[d]="err_operator_new_delete_template_too_few_parameters",
[c]="cannot add a default template argument to the definition of a member of a class template",
[e]="%0 template must have at least two parameters",
[d]="cannot add a default template argument to the definition of a member of a class template",
[i]="A template must have at least two parameters",
[e]=k,
[j]=k,
[g]="cannot add a default template argument to the definition of a member of a class template",
[c]="(.*?) template must have at least two parameters",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"ed5731f68a8b",1259171439,"Diagnose ill-formed uses of default template arguments in","Diagnose ill-formed uses of default template arguments in\nfunction templates (in C++98), friend function templates, and\nout-of-line definitions of members of class templates.\n\nAlso handles merging of default template arguments from previous\ndeclarations of function templates, for C++0x. However, we don\'t yet\nmake use of those default template arguments.\n\nllvm-svn: 89872"},
[f]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[j]={{o,2733,"/// Diagnose the presence of a default template argument on a\n/// template parameter, which is ill-formed in certain contexts.\n///\n/// \\returns true if the default template argument should be dropped.\nstatic bool DiagnoseDefaultTemplateArgument(Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange) {\n  // ...\n  case Sema::TPC_ClassTemplateMember:\n    // ...\n    S.Diag(ParamLoc, diag::err_template_parameter_default_template_member) << DefArgRange;"}},
[b]={{y,16008,"static inline bool CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl, CanQualType ExpectedResultType, CanQualType ExpectedFirstParamType, unsigned DependentParamTypeDiag, unsigned InvalidParamTypeDiag) {\n  // ...\n  // A function template must have at least 2 parameters.\n  if (FnDecl->getDescribedFunctionTemplate() && FnDecl->getNumParams() < 2)\n    return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_delete_template_too_few_parameters) << FnDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.param/p9-0x.cpp"]={"clang/test/CXX/temp/temp.param/p9-0x.cpp:32:42: error: cannot add a default template argument to the definition of a member of a class template","clang/test/CXX/temp/temp.param/p9-0x.cpp:41:21: error: cannot add a default template argument to the definition of a member of a class template","clang/test/CXX/temp/temp.param/p9-0x.cpp:42:42: error: cannot add a default template argument to the definition of a member of a class template"}
[ub]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:44:30: error: \'operator new\' template must have at least two parameters"}
}
}
},
},
["err_template_parameter_pack_non_pack"]={
["err_operator_new_delete_too_few_parameters"]={
[b]="err_template_parameter_pack_non_pack",
[d]="err_operator_new_delete_too_few_parameters",
[c]="%select{template type|non-type template|template template}0 parameter%select{| pack}1 conflicts with previous %select{template type|non-type template|template template}0 parameter%select{ pack|}1",
[e]="%0 must have at least one parameter",
[d]={{nil,nil,{{"template type","non-type template","template template"}," parameter",{a," pack"}," conflicts with previous ",{"template type","non-type template","template template"}," parameter",{" pack",a}}}},
[i]="A must have at least one parameter",
[e]=k,
[j]=k,
[g]="(?:template type|non\\-type template|template template) parameter(?:| pack) conflicts with previous (?:template type|non\\-type template|template template) parameter(?: pack|)",
[c]="(.*?) must have at least one parameter",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"2e87ca218f5d",1275640472,"When checking for equality of template parameter lists, a template","When checking for equality of template parameter lists, a template\ntype parameter pack is distinct from a template type parameter.\n\nllvm-svn: 105464"},
[f]={Jb,1260573802,Fb,Db},
[j]={{o,8038,"/// Match two template parameters within template parameter lists.\nstatic bool MatchTemplateParameterKind(Sema &S, NamedDecl *New, const NamedDecl *NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc) {\n  // ...\n  // Check that both are parameter packs or neither are parameter packs.\n  // However, if we are matching a template template argument to a\n  // template template parameter, the template template parameter can have\n  // a parameter pack where the template template argument does not.\n  if (Old->isTemplateParameterPack() != New->isTemplateParameterPack() && !(Kind == Sema::TPL_TemplateTemplateArgumentMatch && Old->isTemplateParameterPack())) {\n    if (Complain) {\n      unsigned NextDiag = diag::err_template_parameter_pack_non_pack;"}},
[b]={{y,16014,"static inline bool CheckOperatorNewDeleteTypes(Sema &SemaRef, const FunctionDecl *FnDecl, CanQualType ExpectedResultType, CanQualType ExpectedFirstParamType, unsigned DependentParamTypeDiag, unsigned InvalidParamTypeDiag) {\n  // ...\n  // The function decl must have at least 1 parameter.\n  if (FnDecl->getNumParams() == 0)\n    return SemaRef.Diag(FnDecl->getLocation(), diag::err_operator_new_delete_too_few_parameters) << FnDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:9:19: error: template type parameter conflicts with previous template type parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:12:22: error: template type parameter pack conflicts with previous template type parameter","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:18:28: error: template type parameter conflicts with previous template type parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:21:31: error: template type parameter pack conflicts with previous template type parameter","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:24:14: error: non-type template parameter conflicts with previous non-type template parameter pack","clang/test/CXX/temp/temp.decls/temp.variadic/parameter-matching.cpp:27:36: error: template template parameter pack conflicts with previous template template parameter"}
["clang/test/SemaCXX/PR12778.cpp"]={"clang/test/SemaCXX/PR12778.cpp:3:6: error: \'operator delete\' must have at least one parameter"}
}
}
},
},
["err_template_qualified_declarator_no_match"]={
["err_operator_new_dependent_param_type"]={
[b]="err_template_qualified_declarator_no_match",
[d]="err_operator_new_dependent_param_type",
[c]="nested name specifier \'%0\' for declaration does not refer into a class, class template or class template partial specialization",
[e]="%0 cannot take a dependent type as first parameter; use size_t (%1) instead",
[d]="nested name specifier \'A\' for declaration does not refer into a class, class template or class template partial specialization",
[i]="A cannot take a dependent type as first parameter; use size_t (B) instead",
[e]=k,
[j]=k,
[g]="nested name specifier \'(.*?)\' for declaration does not refer into a class, class template or class template partial specialization",
[c]="(.*?) cannot take a dependent type as first parameter; use size_t \\((.*?)\\) instead",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"168190d82254",1248222489,"Complain if we\'re entering the context of a dependent nested-name-specifier but","Complain if we\'re entering the context of a dependent nested-name-specifier but\ncannot match that nested-name-specifier to a class template or class template\npartial specialization.\n\nllvm-svn: 76704"},
[f]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[j]={{t,6289,"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 (!DC || isa<EnumDecl>(DC)) {\n      // ...\n      Diag(D.getIdentifierLoc(), diag::err_template_qualified_declarator_no_match) << D.getCXXScopeSpec().getScopeRep() << D.getCXXScopeSpec().getRange();"},{o,1862,"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.isNotEmpty() && !SS.isInvalid()) {\n    // ...\n    if (!SemanticContext) {\n      // ...\n      Diag(NameLoc, TUK == TUK_Friend ? diag::warn_template_qualified_friend_ignored : diag::err_template_qualified_declarator_no_match) << SS.getScopeRep() << SS.getRange();"}},
[b]={{y,16062,"static bool CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy, SizeTy, diag::err_operator_new_dependent_param_type, diag::err_operator_new_param_type))"}},
[l]={
[l]={
["clang/test/SemaCXX/pr25181-crash-on-invalid.cpp"]={"clang/test/SemaCXX/pr25181-crash-on-invalid.cpp:6:16: error: nested name specifier \'Foo<T>::\' for declaration does not refer into a class, class template or class template partial specialization"}
[ub]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:40:30: error: \'operator new\' cannot take a dependent type as first parameter; use size_t (\'unsigned long\') instead"}
}
}
},
},
["err_template_recursion_depth_exceeded"]={
["err_operator_new_param_type"]={
[b]="err_template_recursion_depth_exceeded",
[d]="err_operator_new_param_type",
[c]="recursive template instantiation exceeded maximum depth of %0",
[e]="%0 takes type size_t (%1) as first parameter",
[d]="recursive template instantiation exceeded maximum depth of A",
[i]="A takes type size_t (B) as first parameter",
[e]="fatal error\\: ",
[j]=k,
[g]="recursive template instantiation exceeded maximum depth of (.*?)",
[c]="(.*?) takes type size_t \\((.*?)\\) as first parameter",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"4e088941ad99",1257896838,"Diagnose illegally typed operator new/new[].","Diagnose illegally typed operator new/new[].\n\nllvm-svn: 86755"},
[j]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp",723,"bool Sema::InstantiatingTemplate::CheckInstantiationDepth(SourceLocation PointOfInstantiation, SourceRange InstantiationRange) {\n  // ...\n  SemaRef.Diag(PointOfInstantiation, diag::err_template_recursion_depth_exceeded) << SemaRef.getLangOpts().InstantiationDepth << InstantiationRange;"}},
[b]={{y,16063,"static bool CheckOperatorNewDeclaration(Sema &SemaRef, const FunctionDecl *FnDecl) {\n  // ...\n  if (CheckOperatorNewDeleteTypes(SemaRef, FnDecl, SemaRef.Context.VoidPtrTy, SizeTy, diag::err_operator_new_dependent_param_type, diag::err_operator_new_param_type))"}},
[l]={
[l]={
["clang/test/SemaTemplate/instantiation-depth-subst.cpp"]={"clang/test/SemaTemplate/instantiation-depth-subst.cpp:4:46: fatal error: recursive template instantiation exceeded maximum depth of 2"}
[ub]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:24:9: error: \'operator new\' takes type size_t (\'unsigned long\') as first parameter"}
}
}
},
},
["err_template_spec_decl_friend"]={
["err_operator_overload_default_arg"]={
[b]="err_template_spec_decl_friend",
[d]="err_operator_overload_default_arg",
[c]="cannot declare an explicit specialization in a friend",
[e]="parameter of overloaded %0 cannot have a default argument",
[d]="cannot declare an explicit specialization in a friend",
[i]="parameter of overloaded A cannot have a default argument",
[e]=k,
[j]=k,
[g]="cannot declare an explicit specialization in a friend",
[c]="parameter of overloaded (.*?) cannot have a default argument",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"816d75b7012a",1269416766,"Support friend function specializations.","Support friend function specializations.\n\nllvm-svn: 99389"},
[f]={eb,1237025389,db,bb},
[j]={{t,9845,"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 (TemplateParams) {\n     // ...\n     if (TemplateParams->size() > 0) {\n     // ...\n     } else {\n       // ...\n       // C++0x [temp.expl.spec]p20 forbids \"template<> friend void foo(int);\".\n       if (isFriend) {\n         // ...\n         Diag(D.getIdentifierLoc(), diag::err_template_spec_decl_friend) << Name << RemoveRange << FixItHint::CreateRemoval(RemoveRange) << FixItHint::CreateInsertion(InsertLoc, \"<>\");"}},
[b]={{y,16198,"/// CheckOverloadedOperatorDeclaration - Check whether the declaration\n/// of this overloaded operator is well-formed. If so, returns false;\n/// otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // C++ [over.oper]p8:\n //   An operator function cannot have default arguments (8.3.6),\n //  except where explicitly stated below.\n //\n // Only the function-call operator (C++ [over.call]p1) and the subscript\n // operator (CWG2507) allow default arguments.\n if (Op != OO_Call) {\n   // ...\n   if (FirstDefaultedParam) {\n     if (Op == OO_Subscript) {\n     // ...\n     } else {\n        return Diag(FirstDefaultedParam->getLocation(), diag::err_operator_overload_default_arg) << FnDecl->getDeclName() << FirstDefaultedParam->getDefaultArgRange();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:9:26: error: cannot declare an explicit specialization in a friend","clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:18:27: error: cannot declare an explicit specialization in a friend"}
[gb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:25:18: error: parameter of overloaded \'operator*\' cannot have a default argument"}
}
}
},
},
["err_template_spec_decl_function_scope"]={
["err_operator_overload_must_be"]={
[b]="err_template_spec_decl_function_scope",
[d]="err_operator_overload_must_be",
[c]="explicit specialization of %0 in function scope",
[e]="overloaded %0 must be a %select{unary|binary|unary or binary}2 operator (has %1 parameter%s1)",
[d]="explicit specialization of A in function scope",
[i]={{nil,nil,{"overloaded A must be a ",{"unary","binary","unary or binary"}," operator (has B parameterB)"}}},
[e]=k,
[j]=k,
[g]="explicit specialization of (.*?) in function scope",
[c]="overloaded (.*?) must be a (?:unary|binary|unary or binary) operator \\(has (.*?) parameter(.*?)\\)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={eb,1237025389,db,bb},
[j]={{o,8428,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // ...\n  // C++ [temp.expl.spec]p2:\n  //  An explicit specialization may be declared in any scope in which\n  //  the corresponding primary template may be defined.\n  if (S.CurContext->getRedeclContext()->isFunctionOrMethod()) {\n    S.Diag(Loc, diag::err_template_spec_decl_function_scope) << Specialized;"}}
[b]={{y,16237,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  if (Op != OO_Call && Op != OO_Subscript && ((NumParams == 1 && !CanBeUnaryOperator) || (NumParams == 2 && !CanBeBinaryOperator) || (NumParams < 1) || (NumParams > 2))) {\n    // ...\n    return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be) << FnDecl->getDeclName() << NumParams << ErrorKind;"}},
},
["err_template_spec_default_arg"]={
[b]="err_template_spec_default_arg",
[c]="default argument not permitted on an explicit %select{instantiation|specialization}0 of function %1",
[d]={{nil,nil,{"default argument not permitted on an explicit ",{"instantiation","specialization"}," of function B"}}},
[e]=k,
[g]="default argument not permitted on an explicit (?:instantiation|specialization) of function (.*?)",
[h]=a,
[i]=m,
[f]={"62e10f0bdcaa",1255453374,"Diagnose attempts to add default function arguments to a","Diagnose attempts to add default function arguments to a\nspecialization. This completes C++ [temp.expl.spec]!\n\nllvm-svn: 83980"},
[j]={{C,618,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // ...\n  // C++ [dcl.fct.default]p4:\n  //  For non-template functions, default arguments can be added in\n  //  later declarations of a function in the same\n  //  scope. Declarations in different scopes have completely\n  //  distinct sets of default arguments. That is, declarations in\n  //  inner scopes do not acquire default arguments from\n  //  declarations in outer scopes, and vice versa. In a given\n  //  function declaration, all parameters subsequent to a\n  //  parameter with a default argument shall have default\n  //  arguments supplied in this or previous declarations. A\n  //  default argument shall not be redefined by a later\n  //  declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //  Except for member functions of class templates, the default arguments\n  //  in a member function definition that appears outside of the class\n  //  definition are added to the set of default arguments provided by the\n  //  member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    // ...\n    if (OldParamHasDfl && NewParamHasDfl) {\n    // ...\n    } else if (OldParamHasDfl) {\n    // ...\n    } else if (NewParamHasDfl) {\n      if (New->getDescribedFunctionTemplate()) {\n      // ...\n      } else if (New->getTemplateSpecializationKind() != TSK_ImplicitInstantiation && New->getTemplateSpecializationKind() != TSK_Undeclared) {\n        // ...\n        Diag(NewParam->getLocation(), diag::err_template_spec_default_arg) << (New->getTemplateSpecializationKind() == TSK_ExplicitSpecialization) << New->getDeclName() << NewParam->getDefaultArgRange();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:10:22: error: default argument not permitted on an explicit specialization of function \'mf1\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:15:27: error: default argument not permitted on an explicit specialization of function \'mf2\'"}
[gb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:29:3: error: overloaded \'operator%\' must be a binary operator (has 1 parameter)"}
}
}
},
},
["err_template_spec_extra_headers"]={
["err_operator_overload_must_be_member"]={
[b]="err_template_spec_extra_headers",
[d]="err_operator_overload_must_be_member",
[c]="extraneous template parameter list in template specialization or out-of-line template definition",
[e]="overloaded %0 must be a non-static member function",
[d]="extraneous template parameter list in template specialization or out-of-line template definition",
[i]="overloaded A must be a non-static member function",
[e]=k,
[j]=k,
[g]="extraneous template parameter list in template specialization or out\\-of\\-line template definition",
[c]="overloaded (.*?) must be a non\\-static member function",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={eb,1237025389,db,bb},
[j]={{o,3581,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  // ...\n  // If there were too many template parameter lists, complain about that now.\n  if (ParamIdx < ParamLists.size() - 1) {\n    // ...\n    if (!SuppressDiagnostic)\n      Diag(ParamLists[ParamIdx]->getTemplateLoc(), AllExplicitSpecHeaders ? diag::warn_template_spec_extra_headers : diag::err_template_spec_extra_headers) << SourceRange(ParamLists[ParamIdx]->getTemplateLoc(), ParamLists[ParamLists.size() - 2]->getRAngleLoc());"}},
[b]={{y,16259,"#include \"clang/Basic/OperatorKinds.def\"\n // ...\n // Some operators must be member functions.\n if (MustBeMemberOperator && !isa<CXXMethodDecl>(FnDecl)) {\n    return Diag(FnDecl->getLocation(), diag::err_operator_overload_must_be_member) << FnDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/SemaTemplate/crash-8204126.cpp"]={"clang/test/SemaTemplate/crash-8204126.cpp:4:3: error: extraneous template parameter list in template specialization or out-of-line template definition"}
[gb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:31:6: error: overloaded \'operator()\' must be a non-static member function"}
}
}
},
},
["err_template_spec_friend"]={
["err_operator_overload_needs_class_or_enum"]={
[b]="err_template_spec_friend",
[d]="err_operator_overload_needs_class_or_enum",
[c]="template specialization declaration cannot be a friend",
[e]="overloaded %0 must have at least one parameter of class or enumeration type",
[d]="template specialization declaration cannot be a friend",
[i]="overloaded A must have at least one parameter of class or enumeration type",
[e]=k,
[j]=k,
[g]="template specialization declaration cannot be a friend",
[c]="overloaded (.*?) must have at least one parameter of class or enumeration type",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"3a88c1d784d8",1255444781,"Improve the internal representation and semantic analysis of friend","Improve the internal representation and semantic analysis of friend\nfunction templates.\n\nThis commit ensures that friend function templates are constructed as\nFunctionTemplateDecls rather than partial FunctionDecls (as they\npreviously were). It then implements template instantiation for friend\nfunction templates, injecting the friend function template only when\nno previous declaration exists at the time of instantiation. \n\nOh, and make sure that explicit specialization declarations are not\nfriends.\n\nllvm-svn: 83970"},
[f]={eb,1237025389,db,bb},
[j]={{o,8698,"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 (TemplateParams && TemplateParams->size() > 0) {\n  // ...\n  } else if (TemplateParams) {\n    if (TUK == TUK_Friend)\n      Diag(KWLoc, diag::err_template_spec_friend) << FixItHint::CreateRemoval(SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc())) << SourceRange(LAngleLoc, RAngleLoc);"}},
[b]={{y,16171,"/// CheckOverloadedOperatorDeclaration - Check whether the declaration\n/// of this overloaded operator is well-formed. If so, returns false;\n/// otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {\n  // ...\n  // C++ [over.oper]p7:\n  //  An operator function shall either be a member function or\n  //  be a non-member function and have at least one parameter\n //  whose type is a class, a reference to a class, an enumeration,\n  //  or a reference to an enumeration.\n // Note: Before C++23, a member function could not be static. The only member\n  //       function allowed to be static is the call operator function.\n  if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {\n  // ...\n  } else {\n    // ...\n    if (!ClassOrEnumParam)\n      return Diag(FnDecl->getLocation(), diag::err_operator_overload_needs_class_or_enum) << FnDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:10:21: error: template specialization declaration cannot be a friend","clang/test/CXX/temp/temp.spec/temp.expl.spec/p20.cpp:22:22: error: template specialization declaration cannot be a friend"}
[gb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:23:3: error: overloaded \'operator+\' must have at least one parameter of class or enumeration type"}
}
}
},
},
["err_template_spec_needs_header"]={
["err_operator_overload_post_incdec_must_be_int"]={
[b]="err_template_spec_needs_header",
[d]="err_operator_overload_post_incdec_must_be_int",
[c]="template specialization requires \'template<>\'",
[e]="parameter of overloaded post-%select{increment|decrement}1 operator must have type \'int\' (not %0)",
[d]="template specialization requires \'template<>\'",
[i]={{nil,nil,{"parameter of overloaded post-",{"increment","decrement"}," operator must have type \'int\' (not A)"}}},
[e]=k,
[j]=k,
[g]="template specialization requires \'template\\<\\>\'",
[c]="parameter of overloaded post\\-(?:increment|decrement) operator must have type \'int\' \\(not (.*?)\\)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={eb,1237025389,db,bb},
[j]={{o,3393,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  // ...\n  auto DiagnoseMissingExplicitSpecialization = [&](SourceRange Range) {\n    // ...\n    if (!SuppressDiagnostic)\n      Diag(DeclLoc, diag::err_template_spec_needs_header) << Range << FixItHint::CreateInsertion(ExpectedTemplateLoc, \"template<> \");"}},
[b]={{y,16280,"#include \"clang/Basic/OperatorKinds.def\"\n // ...\n // C++ [over.inc]p1:\n //   The user-defined function called operator++ implements the\n //   prefix and postfix ++ operator. If this function is a member\n //   function with no parameters, or a non-member function with one\n //   parameter of class or enumeration type, it defines the prefix\n //   increment operator ++ for objects of that type. If the function\n //   is a member function with one parameter (which shall be of type\n //   int) or a non-member function with two parameters (the second\n //   of which shall be of type int), it defines the postfix\n  //   increment operator ++ for objects of that type.\n  if ((Op == OO_PlusPlus || Op == OO_MinusMinus) && NumParams == 2) {\n    // ...\n    if (!ParamType->isSpecificBuiltinType(BuiltinType::Int) && !ParamType->isDependentType())\n      return Diag(LastParam->getLocation(), diag::err_operator_overload_post_incdec_must_be_int) << LastParam->getType() << (Op == OO_MinusMinus);"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:12:34: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:22:11: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:23:17: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:42:14: error: template specialization requires \'template<>\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:44:8: error: template specialization requires \'template<>\'"}
[gb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:37:23: error: parameter of overloaded post-increment operator must have type \'int\' (not \'FLOAT\' (aka \'float\'))"}
}
}
},
},
["err_template_spec_needs_template_parameters"]={
["err_operator_overload_static"]={
[b]="err_template_spec_needs_template_parameters",
[d]="err_operator_overload_static",
[c]="template specialization or definition requires a template parameter list corresponding to the nested type %0",
[e]="overloaded %0 cannot be a static member function",
[d]="template specialization or definition requires a template parameter list corresponding to the nested type A",
[i]="overloaded A cannot be a static member function",
[e]=k,
[j]=k,
[g]="template specialization or definition requires a template parameter list corresponding to the nested type (.*?)",
[c]="overloaded (.*?) cannot be a static member function",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"d8d297c0ac88",1248220411,"Basic parsing and semantic analysis for out-of-line definitions of the","Basic parsing and semantic analysis for out-of-line definitions of the\nmember functions of class templates, e.g.,\n\n  template<typename T> \n  struct X {\n    void f(T);\n  };\n\n  template<typename T> X<T>::f(T) { /* ... */ }\n\nllvm-svn: 76692"},
[f]={eb,1237025389,db,bb},
[j]={{o,3540,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n // ...\n  for (unsigned TypeIdx = 0, NumTypes = NestedTypes.size(); TypeIdx != NumTypes; ++TypeIdx) {\n   // ...\n    if (NeedNonemptyTemplateHeader) {\n      // ...\n      if (!SuppressDiagnostic)\n        Diag(DeclLoc, diag::err_template_spec_needs_template_parameters) << T << getRangeOfTypeInNestedNameSpecifier(Context, T, SS);"}},
[b]={{y,16155,"/// CheckOverloadedOperatorDeclaration - Check whether the declaration\n/// of this overloaded operator is well-formed. If so, returns false;\n/// otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckOverloadedOperatorDeclaration(FunctionDecl *FnDecl) {\n // ...\n // C++ [over.oper]p7:\n //   An operator function shall either be a member function or\n //   be a non-member function and have at least one parameter\n //   whose type is a class, a reference to a class, an enumeration,\n //   or a reference to an enumeration.\n // Note: Before C++23, a member function could not be static. The only member\n //       function allowed to be static is the call operator function.\n if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(FnDecl)) {\n   if (MethodDecl->isStatic()) {\n     if (Op == OO_Call || Op == OO_Subscript)\n      // ...\n      else\n        return Diag(FnDecl->getLocation(), diag::err_operator_overload_static) << FnDecl;"}},
[l]={
[l]={
["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:283:13: error: template specialization or definition requires a template parameter list corresponding to the nested type \'A<T>\'"}
[gb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:15:14: error: overloaded \'operator+\' cannot be a static member function"}
}
}
},
},
["err_template_spec_redecl_global_scope"]={
["err_operator_overload_variadic"]={
[b]="err_template_spec_redecl_global_scope",
[d]="err_operator_overload_variadic",
[c]="%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 must occur at global scope",
[e]="overloaded %0 cannot be variadic",
[d]={{nil,nil,{{Vb,"class template partial",jc,"variable template partial",Ub,"member function","static data member","member class","member enumeration"}," specialization of B must occur at global scope"}}},
[i]="overloaded A cannot be variadic",
[e]=k,
[j]=k,
[g]="(?:class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration) specialization of (.*?) must occur at global scope",
[c]="overloaded (.*?) cannot be variadic",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={eb,1237025389,db,bb},
[j]={{o,8445,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // ...\n  // Make sure that this redeclaration (or definition) occurs in the same\n  // scope or an enclosing namespace.\n  if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n    if (isa<TranslationUnitDecl>(SpecializedContext))\n      S.Diag(Loc, diag::err_template_spec_redecl_global_scope) << EntityKind << Specialized;"}},
[b]={{y,16252,"#include \"clang/Basic/OperatorKinds.def\"\n  // ...\n  // Overloaded operators other than operator() and operator[] cannot be\n  // variadic.\n  if (Op != OO_Call && FnDecl->getType()->castAs<FunctionProtoType>()->isVariadic()) {\n    return Diag(FnDecl->getLocation(), diag::err_operator_overload_variadic) << FnDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:121:18: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:122:16: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:126:18: error: variable template specialization of \'v1\' must occur at global scope","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:127:16: error: variable template specialization of \'v1\' must occur at global scope"}
[gb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:27:3: error: overloaded \'operator/\' cannot be variadic"}
}
}
},
},
["err_template_spec_redecl_out_of_scope"]={
["err_opt_not_valid_on_target"]={
[b]="err_template_spec_redecl_out_of_scope",
[d]={{nil,z,"err_opt_not_valid_on_target"}},
[c]={{nil,H,"%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 not in %select{a namespace enclosing %2|class %2 or an enclosing namespace}3"},{A,nil,"%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 not in a namespace enclosing %2"}},
[e]={{nil,z,"option \'%0\' cannot be specified on this target"}},
[d]={{nil,H,{{Vb,"class template partial",jc,"variable template partial",Ub,"member function","static data member","member class","member enumeration"}," specialization of B not in ",{"a namespace enclosing C","class C or an enclosing namespace"}}},{A,nil,{{Vb,"class template partial",jc,"variable template partial",Ub,"member function","static data member","member class","member enumeration"}," specialization of B not in a namespace enclosing C"}}},
[i]={{nil,z,"option \'A\' cannot be specified on this target"}},
[e]=k,
[j]=k,
[g]="(?:class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration) specialization of (.*?) not in (?:a namespace enclosing (.*?)|class (.*?) or an enclosing namespace)",
[c]="option \'(.*?)\' cannot be specified on this target",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,z,V}},
[f]={p,1237025389,q,r},
[f]={"0fb8c877c4a3",1526644581,"This patch aims to match the changes introduced","This patch aims to match the changes introduced\nin gcc by https://gcc.gnu.org/ml/gcc-cvs/2018-04/msg00534.html.\nThe -mibt feature flag is being removed, and the -fcf-protection\noption now also defines a CET macro and causes errors when used\non non-X86 targets, while X86 targets no longer check for -mibt\nand -mshstk to determine if -fcf-protection is supported. -mshstk\nis now used only to determine availability of shadow stack intrinsics.\n\nComes with an LLVM patch (D46882).\n\nPatch by mike.dvoretsky\n\nDifferential Revision: https://reviews.llvm.org/D46881\n\nllvm-svn: 332704"},
[j]={{o,8449,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n  // ...\n // Make sure that this redeclaration (or definition) occurs in the same\n  // scope or an enclosing namespace.\n if (!(DC->isFileContext() ? DC->Encloses(SpecializedContext) : DC->Equals(SpecializedContext))) {\n    if (isa<TranslationUnitDecl>(SpecializedContext))\n    // ...\n   else {\n      // ...\n      int Diag = diag::err_template_spec_redecl_out_of_scope;"}},
[b]={{"clang/lib/Basic/TargetInfo.cpp",197,"bool TargetInfo::checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const {\n  Diags.Report(diag::err_opt_not_valid_on_target) << \"cf-protection=branch\";"},{"clang/lib/Basic/TargetInfo.cpp",203,"bool TargetInfo::checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const {\n  Diags.Report(diag::err_opt_not_valid_on_target) << \"cf-protection=return\";"},{"clang/lib/Basic/TargetInfo.cpp",511,"/// adjust - Set forced language options.\n/// Apply changes to the target information with respect to certain\n/// language options which change the target configuration and adjust\n/// the language based on the target options where applicable.\nvoid TargetInfo::adjust(DiagnosticsEngine &Diags, LangOptions &Opts) {\// ...\n  if (Opts.ProtectParens && !checkArithmeticFenceSupported()) {\n    Diags.Report(diag::err_opt_not_valid_on_target) << \"-fprotect-parens\";"},{"clang/lib/CodeGen/CodeGenFunction.cpp",1098,"#include \"clang/Basic/Sanitizers.def\"\n  // ...\n  if (CGM.getCodeGenOpts().PackedStack) {\n    if (getContext().getTargetInfo().getTriple().getArch() != llvm::Triple::systemz)\n      CGM.getDiags().Report(diag::err_opt_not_valid_on_target) << \"-mpacked-stack\";"}}
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:81:25: error: class template specialization of \'X0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:119:20: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:120:16: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:124:20: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:125:16: error: variable template specialization of \'v0\' not in a namespace enclosing \'N0\'","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:199:28: error: member class specialization of \'Inner\' not in class \'X0\' or an enclosing namespace","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:202:33: error: member class specialization of \'Inner\' not in class \'X0\' or an enclosing namespace","clang/test/CXX/temp/temp.spec/temp.expl.spec/p2-0x.cpp:235:23: error: class template specialization of \'InnerTemplate\' not in class \'X0<int>\' or an enclosing namespace"}
}
},
},
["err_template_spec_syntax_non_template"]={
["err_opt_not_valid_with_opt"]={
[b]="err_template_spec_syntax_non_template",
[d]="err_opt_not_valid_with_opt",
[c]={{nil,D,"identifier followed by \'<\' indicates a class template specialization but %0 %select{does not refer to a template|refers to a function template|<unused>|refers to a variable template|<unused>|<unused>|refers to a concept}1"},{x,I,"identifier followed by \'<\' indicates a class template specialization but %0 %select{does not refer to a template|refers to a function template|<unused>|refers to a variable template|<unused>|refers to a concept}1"},{R,nil,"identifier followed by \'<\' indicates a class template specialization but %0 %select{does not refer to a template|refers to a function template|<unused>|refers to a variable template|<unused>}1"}},
[e]="option \'%0\' cannot be specified with \'%1\'",
[d]={{nil,D,{"identifier followed by \'<\' indicates a class template specialization but A ",{"does not refer to a template","refers to a function template",Rb,"refers to a variable template",Rb,Rb,"refers to a concept"}}},{x,I,{"identifier followed by \'<\' indicates a class template specialization but A ",{"does not refer to a template","refers to a function template",Rb,"refers to a variable template",Rb,"refers to a concept"}}},{R,nil,{"identifier followed by \'<\' indicates a class template specialization but A ",{"does not refer to a template","refers to a function template",Rb,"refers to a variable template",Rb}}}},
[i]="option \'A\' cannot be specified with \'B\'",
[e]=k,
[j]=k,
[g]="identifier followed by \'\\<\' indicates a class template specialization but (.*?) (?:does not refer to a template|refers to a function template|\\<unused\\>|refers to a variable template|\\<unused\\>|\\<unused\\>|refers to a concept)",
[c]="option \'(.*?)\' cannot be specified with \'(.*?)\'",
[h]=a,
[h]=a,
[i]=G,
[g]=V,
[f]={ob,1236199783,mb,nb},
[f]={"26c3534b84f2",1436533894,"Add missing builtins to altivec.h for ABI compliance (vol. 3)","Add missing builtins to altivec.h for ABI compliance (vol. 3)\n\nThis patch corresponds to review:\nhttp://reviews.llvm.org/D10972\n\nFix for the handling of dependent features that are enabled by default\non some CPU\'s (such as -mvsx, -mpower8-vector).\n\nAlso provides a number of new interfaces or fixes existing ones in\naltivec.h.\n\nChanged signatures to conform to ABI:\nvector short vec_perm(vector signed short, vector signed short, vector unsigned char)\nvector int vec_perm(vector signed int, vector signed int, vector unsigned char)\nvector long long vec_perm(vector signed long long, vector signed long long, vector unsigned char)\nvector signed char vec_sld(vector signed char, vector signed char, const int)\nvector unsigned char vec_sld(vector unsigned char, vector unsigned char, const int)\nvector bool char vec_sld(vector bool char, vector bool char, const int)\nvector unsigned short vec_sld(vector unsigned short, vector unsigned short, const int)\nvector signed short vec_sld(vector signed short, vector signed short, const int)\nvector signed int vec_sld(vector signed int, vector signed int, const int)\nvector unsigned int vec_sld(vector unsigned int, vector unsigned int, const int)\nvector float vec_sld(vector float, vector float, const int)\nvector signed char vec_splat(vector signed char, const int)\nvector unsigned char vec_splat(vector unsigned char, const int)\nvector bool char vec_splat(vector bool char, const int)\nvector signed short vec_splat(vector signed short, const int)\nvector unsigned short vec_splat(vector unsigned short, const int)\nvector bool short vec_splat(vector bool short, const int)\nvector pixel vec_splat(vector pixel, const int)\nvector signed int vec_splat(vector signed int, const int)\nvector unsigned int vec_splat(vector unsigned int, const int)\nvector bool int vec_splat(vector bool int, const int)\nvector float vec_splat(vector float, const int)\n\nAdded a VSX path to:\nvector float vec_round(vector float)\n\nAdded interfaces:\nvector signed char vec_eqv(vector signed char, vector signed char)\nvector signed char vec_eqv(vector bool char, vector signed char)\nvector signed char vec_eqv(vector signed char, vector bool char)\nvector unsigned char vec_eqv(vector unsigned char, vector unsigned char)\nvector unsigned char vec_eqv(vector bool char, vector unsigned char)\nvector unsigned char vec_eqv(vector unsigned char, vector bool char)\nvector signed short vec_eqv(vector signed short, vector signed short)\nvector signed short vec_eqv(vector bool short, vector signed short)\nvector signed short vec_eqv(vector signed short, vector bool short)\nvector unsigned short vec_eqv(vector unsigned short, vector unsigned short)\nvector unsigned short vec_eqv(vector bool short, vector unsigned short)\nvector unsigned short vec_eqv(vector unsigned short, vector bool short)\nvector signed int vec_eqv(vector signed int, vector signed int)\nvector signed int vec_eqv(vector bool int, vector signed int)\nvector signed int vec_eqv(vector signed int, vector bool int)\nvector unsigned int vec_eqv(vector unsigned int, vector unsigned int)\nvector unsigned int vec_eqv(vector bool int, vector unsigned int)\nvector unsigned int vec_eqv(vector unsigned int, vector bool int)\nvector signed long long vec_eqv(vector signed long long, vector signed long long)\nvector signed long long vec_eqv(vector bool long long, vector signed long long)\nvector signed long long vec_eqv(vector signed long long, vector bool long long)\nvector unsigned long long vec_eqv(vector unsigned long long, vector unsigned long long)\nvector unsigned long long vec_eqv(vector bool long long, vector unsigned long long)\nvector unsigned long long vec_eqv(vector unsigned long long, vector bool long long)\nvector float vec_eqv(vector float, vector float)\nvector float vec_eqv(vector bool int, vector float)\nvector float vec_eqv(vector float, vector bool int)\nvector double vec_eqv(vector double, vector double)\nvector double vec_eqv(vector bool long long, vector double)\nvector double vec_eqv(vector double, vector bool long long)\nvector bool long long vec_perm(vector bool long long, vector bool long long, vector unsigned char)\nvector double vec_round(vector double)\nvector double vec_splat(vector double, const int)\nvector bool long long vec_splat(vector bool long long, const int)\nvector signed long long vec_splat(vector signed long long, const int)\nvector unsigned long long vec_splat(vector unsigned long long,\nvector bool int vec_sld(vector bool int, vector bool int, const int)\nvector bool short vec_sld(vector bool short, vector bool short, const int)\n\nllvm-svn: 241904"},
[j]={{Sb,1802,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (Tok.is(tok::identifier)) {\n  // ...\n  } else if (Tok.is(tok::annot_template_id)) {\n    // ...\n    if (TemplateId && !TemplateId->mightBeType()) {\n      // ...\n      Diag(TemplateId->LAngleLoc, diag::err_template_spec_syntax_non_template) << TemplateId->Name << static_cast<int>(TemplateId->Kind) << Range;"}},
[b]={{"clang/lib/Basic/Targets/Mips.cpp",258,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // ...\n  // -mfp32 and n32/n64 ABIs are incompatible\n  if (FPMode != FP64 && FPMode != FPXX && !IsSingleFloat && (ABI == \"n32\" || ABI == \"n64\")) {\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mfpxx\" << CPU;"},{"clang/lib/Basic/Targets/Mips.cpp",264,"bool MipsTargetInfo::validateTarget(DiagnosticsEngine &Diags) const {\n  // ...\n  // Mips revision 6 and -mfp32 are incompatible\n  if (FPMode != FP64 && FPMode != FPXX && (CPU == \"mips32r6\" || CPU == \"mips64r6\")) {\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mfp32\" << CPU;"},{Z,459,"// Handle explicit options being passed to the compiler here: if we\'ve\n// explicitly turned off vsx and turned on any of:\n// - power8-vector\n// - direct-move\n// - float128\n// - power9-vector\n// - paired-vector-memops\n// - mma\n// - power10-vector\n// then go ahead and error since the customer has expressed an incompatible\n// set of options.\nstatic bool ppcUserFeaturesCheck(DiagnosticsEngine &Diags, const std::vector<std::string> &FeaturesVec) {\n  // ...\n  auto FindVSXSubfeature = [&](StringRef Feature, StringRef Option) {\n    if (llvm::is_contained(FeaturesVec, Feature)) {\n      Diags.Report(diag::err_opt_not_valid_with_opt) << Option << \"-mno-vsx\";"},{Z,593,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr7) && (ArchDefs & ArchDefinePpcgr) && llvm::is_contained(FeaturesVec, \"+float128\")) {\n    // ...\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mfloat128\" << CPU;"},{Z,600,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr10)) {\n    if (llvm::is_contained(FeaturesVec, \"+mma\")) {\n      // ...\n      Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mmma\" << CPU;"},{Z,629,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr8) && llvm::is_contained(FeaturesVec, \"+rop-protect\")) {\n    // ...\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mrop-protect\" << CPU;"},{Z,635,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr8) && llvm::is_contained(FeaturesVec, \"+privileged\")) {\n    Diags.Report(diag::err_opt_not_valid_with_opt) << \"-mprivileged\" << CPU;"},{"clang/lib/Basic/Targets/WebAssembly.cpp",265,"bool WebAssemblyTargetInfo::handleTargetFeatures(std::vector<std::string> &Features, DiagnosticsEngine &Diags) {\n  for (const auto &Feature : Features) {\n    // ...\n    Diags.Report(diag::err_opt_not_valid_with_opt) << Feature << \"-target-feature\";"},{"clang/lib/Driver/Driver.cpp",3158,"/// Provides a convenient interface for different programming models to generate\n/// the required device actions.\nclass OffloadingActionBuilder final {\n  // ...\n  /// Base class for CUDA/HIP action builder. It injects device code in\n  /// the host backend action.\n  class CudaActionBuilderBase : public DeviceActionBuilder {\n    // ...\n    bool initialize() override {\n      // ...\n      // --offload and --offload-arch options are mutually exclusive.\n      if (Args.hasArgNoClaim(options::OPT_offload_EQ) && Args.hasArgNoClaim(options::OPT_offload_arch_EQ, options::OPT_no_offload_arch_EQ)) {\n        C.getDriver().Diag(diag::err_opt_not_valid_with_opt) << \"--offload-arch\""},{"clang/lib/Driver/Driver.cpp",3383,"/// Provides a convenient interface for different programming models to generate\n/// the required device actions.\nclass OffloadingActionBuilder final {\n  // ...\n  /// \\brief HIP action builder. It injects device code in the host backend\n  /// action.\n  class HIPActionBuilder final : public CudaActionBuilderBase {\n    // ...\n    HIPActionBuilder(Compilation &C, DerivedArgList &Args, const Driver::InputList &Inputs) : CudaActionBuilderBase(C, Args, Inputs, Action::OFK_HIP) {\n      // ...\n      if (Args.hasArg(options::OPT_fhip_emit_relocatable, options::OPT_fno_hip_emit_relocatable)) {\n        // ...\n        if (*EmitReloc) {\n          if (Relocatable) {\n            C.getDriver().Diag(diag::err_opt_not_valid_with_opt) << \"-fhip-emit-relocatable\""},{"clang/lib/Driver/Driver.cpp",4411,"llvm::DenseSet<StringRef> Driver::getOffloadArchs(Compilation &C, const llvm::opt::DerivedArgList &Args, Action::OffloadKind Kind, const ToolChain *TC, bool SuppressError) const {\n  // ...\n  // --offload and --offload-arch options are mutually exclusive.\n  if (Args.hasArgNoClaim(options::OPT_offload_EQ) && Args.hasArgNoClaim(options::OPT_offload_arch_EQ, options::OPT_no_offload_arch_EQ)) {\n    C.getDriver().Diag(diag::err_opt_not_valid_with_opt) << \"--offload\" << (Args.hasArgNoClaim(options::OPT_offload_arch_EQ) ? \"--offload-arch\" : \"--no-offload-arch\");"},{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",851,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  // Generate execute-only output (no data access to code sections).\n  // This only makes sense for the compiler, not for the assembler.\n  // It\'s not needed for multilib selection and may hide an unused\n  // argument diagnostic if the code is always run.\n  if (!ForAS && !ForMultilib) {\n    // Supported only on ARMv6T2 and ARMv7 and above.\n    // Cannot be combined with -mno-movt.\n    if (Arg *A = Args.getLastArg(options::OPT_mexecute_only, options::OPT_mno_execute_only)) {\n      if (A->getOption().matches(options::OPT_mexecute_only)) {\n        if (getARMSubArchVersionNumber(Triple) < 7 && llvm::ARM::parseArch(Triple.getArchName()) != llvm::ARM::ArchKind::ARMV6T2)\n        // ...\n        else if (Arg *B = Args.getLastArg(options::OPT_mno_movt))\n          D.Diag(diag::err_opt_not_valid_with_opt) << A->getAsString(Args) << B->getAsString(Args);"}}
[l]={
["clang/test/CXX/basic/basic.lookup/basic.lookup.elab/templateid.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.elab/templateid.cpp:13:14: error: identifier followed by \'<\' indicates a class template specialization but \'Ident\' refers to a function template"}
}
},
},
["err_template_spec_unknown_kind"]={
["err_opt_not_valid_without_opt"]={
[b]="err_template_spec_unknown_kind",
[d]={{nil,z,"err_opt_not_valid_without_opt"}},
[c]="can only provide an explicit specialization for a class template, function template, variable template, or a member function, static data member, %select{or member class|member class, or member enumeration}0 of a class template",
[e]={{nil,z,"option \'%0\' cannot be specified without \'%1\'"}},
[d]={{nil,nil,{"can only provide an explicit specialization for a class template, function template, variable template, or a member function, static data member, ",{"or member class","member class, or member enumeration"}," of a class template"}}},
[i]={{nil,z,"option \'A\' cannot be specified without \'B\'"}},
[e]=k,
[j]=k,
[g]="can only provide an explicit specialization for a class template, function template, variable template, or a member function, static data member, (?:or member class|member class, or member enumeration) of a class template",
[c]="option \'(.*?)\' cannot be specified without \'(.*?)\'",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,z,V}},
[f]={"548886518d08",1254874412,"Refactor checking of the scope of explicit template specialization","Refactor checking of the scope of explicit template specialization\ndeclarations and explicit template instantiations, improving\ndiagnostics and making the code usable for function template\nspecializations (as well as class template specializations and partial\nspecializations). \n\nllvm-svn: 83436"},
[f]={"57cc1a5d77d8",1515488039,"Added Control Flow Protection Flag","Added Control Flow Protection Flag\n\nCf-protection is a target independent flag that instructs the back-end to instrument control flow mechanisms like: Branch, Return, etc.\nFor example in X86 this flag will be used to instrument Indirect Branch Tracking instructions.\n\nDifferential Revision: https://reviews.llvm.org/D40478\n\nChange-Id: I5126e766c0e6b84118cae0ee8a20fe78cc373dea\nllvm-svn: 322063"},
[j]={{o,8418,"/// Check whether a specialization is well-formed in the current\n/// context.\n///\n/// This routine determines whether a template specialization can be declared\n/// in the current context (C++ [temp.expl.spec]p2).\n///\n/// \\param S the semantic analysis object for which this check is being\n/// performed.\n///\n/// \\param Specialized the entity being specialized or instantiated, which\n/// may be a kind of template (class template, function template, etc.) or\n/// a member of a class template (member function, static data member,\n/// member class).\n///\n/// \\param PrevDecl the previous declaration of this entity, if any.\n///\n/// \\param Loc the location of the explicit specialization or instantiation of\n/// this entity.\n///\n/// \\param IsPartialSpecialization whether this is a partial specialization of\n/// a class template.\n///\n/// \\returns true if there was an error that we cannot recover from, false\n/// otherwise.\nstatic bool CheckTemplateSpecializationScope(Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization) {\n // ...\n if (isa<ClassTemplateDecl>(Specialized))\n // ...\n else if (isa<VarTemplateDecl>(Specialized))\n  // ...\n  else if (isa<FunctionTemplateDecl>(Specialized))\n  // ...\n else if (isa<CXXMethodDecl>(Specialized))\n // ...\n else if (isa<VarDecl>(Specialized))\n // ...\n else if (isa<RecordDecl>(Specialized))\n // ...\n else if (isa<EnumDecl>(Specialized) && S.getLangOpts().CPlusPlus11)\n  // ...\n  else {\n    S.Diag(Loc, diag::err_template_spec_unknown_kind) << S.getLangOpts().CPlusPlus11;"}}
[b]={{Z,606,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n  if (!(ArchDefs & ArchDefinePwr10)) {\n   // ...\n   if (llvm::is_contained(FeaturesVec, \"+pcrel\")) {\n      // ...\n      Diags.Report(diag::err_opt_not_valid_without_opt) << \"-mpcrel\""},{Z,613,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n // ...\n  if (!(ArchDefs & ArchDefinePwr10)) {\n   // ...\n    if (llvm::is_contained(FeaturesVec, \"+prefixed\")) {\n      // ...\n      Diags.Report(diag::err_opt_not_valid_without_opt) << \"-mprefixed\""},{Z,619,"bool PPCTargetInfo::initFeatureMap(llvm::StringMap<bool> &Features, DiagnosticsEngine &Diags, StringRef CPU, const std::vector<std::string> &FeaturesVec) const {\n  // ...\n if (!(ArchDefs & ArchDefinePwr10)) {\n    // ...\n    if (llvm::is_contained(FeaturesVec, \"+paired-vector-memops\")) {\n      // ...\n     Diags.Report(diag::err_opt_not_valid_without_opt) << \"-mpaired-vector-memops\""},{"clang/lib/CodeGen/CodeGenFunction.cpp",1081,"#include \"clang/Basic/Sanitizers.def\"\n // ...\n // Since emitting the mcount call here impacts optimizations such as function\n  // inlining, we just add an attribute to insert a mcount call in backend.\n // The attribute \"counting-function\" is set to mcount function name which is\n // architecture dependent.\n  if (CGM.getCodeGenOpts().InstrumentForProfiling) {\n   // Calls to fentry/mcount should not be generated if function has\n   // the no_instrument_function attribute.\n   if (!CurFuncDecl || !CurFuncDecl->hasAttr<NoInstrumentFunctionAttr>()) {\n     // ...\n      if (CGM.getCodeGenOpts().MNopMCount) {\n        if (!CGM.getCodeGenOpts().CallFEntry)\n         CGM.getDiags().Report(diag::err_opt_not_valid_without_opt) << \"-mnop-mcount\""},{"clang/lib/CodeGen/CodeGenFunction.cpp",1088,"#include \"clang/Basic/Sanitizers.def\"\n // ...\n // Since emitting the mcount call here impacts optimizations such as function\n  // inlining, we just add an attribute to insert a mcount call in backend.\n // The attribute \"counting-function\" is set to mcount function name which is\n // architecture dependent.\n if (CGM.getCodeGenOpts().InstrumentForProfiling) {\n   // Calls to fentry/mcount should not be generated if function has\n   // the no_instrument_function attribute.\n    if (!CurFuncDecl || !CurFuncDecl->hasAttr<NoInstrumentFunctionAttr>()) {\n     // ...\n     if (CGM.getCodeGenOpts().RecordMCount) {\n       if (!CGM.getCodeGenOpts().CallFEntry)\n         CGM.getDiags().Report(diag::err_opt_not_valid_without_opt) << \"-mrecord-mcount\""},{"clang/lib/Driver/Driver.cpp",3389,"/// Provides a convenient interface for different programming models to generate\n/// the required device actions.\nclass OffloadingActionBuilder final {\n  // ...\n  /// \\brief HIP action builder. It injects device code in the host backend\n  /// action.\n  class HIPActionBuilder final : public CudaActionBuilderBase {\n    // ...\n   HIPActionBuilder(Compilation &C, DerivedArgList &Args, const Driver::InputList &Inputs) : CudaActionBuilderBase(C, Args, Inputs, Action::OFK_HIP) {\n     // ...\n     if (Args.hasArg(options::OPT_fhip_emit_relocatable, options::OPT_fno_hip_emit_relocatable)) {\n       // ...\n       if (*EmitReloc) {\n         // ...\n         if (!CompileDeviceOnly) {\n            C.getDriver().Diag(diag::err_opt_not_valid_without_opt) << \"-fhip-emit-relocatable\""},{"clang/lib/Driver/ToolChains/Arch/ARM.cpp",807,"llvm::ARM::FPUKind arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS, bool ForMultilib) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mfix_cmse_cve_2021_35465, options::OPT_mno_fix_cmse_cve_2021_35465)) {\n    if (!Args.getLastArg(options::OPT_mcmse))\n      D.Diag(diag::err_opt_not_valid_without_opt) << A->getOption().getName() << \"-mcmse\";"}}
},
},
["err_template_tag_noparams"]={
["err_os_log_argument_too_big"]={
[b]="err_template_tag_noparams",
[d]="err_os_log_argument_too_big",
[c]="extraneous \'template<>\' in declaration of %0 %1",
[e]="os_log() argument %0 is too big (%1 bytes, max %2)",
[d]="extraneous \'template<>\' in declaration of A B",
[i]="os_log() argument A is too big (B bytes, max C)",
[e]=k,
[j]=k,
[g]="extraneous \'template\\<\\>\' in declaration of (.*?) (.*?)",
[c]="os_log\\(\\) argument (.*?) is too big \\((.*?) bytes, max (.*?)\\)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"bbe8f4662117",1255014873,"Improve checking for specializations of member classes of class","Improve checking for specializations of member classes of class\ntemplates, and keep track of how those member classes were\ninstantiated or specialized. \n\nMake sure that we don\'t try to instantiate an explicitly-specialized\nmember class of a class template, when that explicit specialization\nwas a declaration rather than a definition.\n\nllvm-svn: 83547"},
[f]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]","Add support for __builtin_os_log_format[_buffer_size]\n\nThese new builtins support a mechanism for logging OS events, using a\nprintf-like format string to specify the layout of data in a buffer.\nThe _buffer_size version of the builtin can be used to determine the size\nof the buffer to allocate to hold the data, and then __builtin_os_log_format\ncan write data into that buffer. This implements format checking to report\nmismatches between the format string and the data arguments. Most of this\ncode was written by Chris Willmore.\n\nDifferential Revision: https://reviews.llvm.org/D25888\n\nllvm-svn: 284990"},
[j]={{t,16817,"/// 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  // We only need to do this matching if we have template parameters\n  // or a scope specifier, which also conveniently avoids this work\n  // for non-C++ cases.\n if (TemplateParameterLists.size() > 0 || (SS.isNotEmpty() && TUK != TUK_Reference)) {\n    if (TemplateParameterList *TemplateParams = MatchTemplateParametersToScopeSpecifier(KWLoc, NameLoc, SS, nullptr, TemplateParameterLists, TUK == TUK_Friend, isMemberSpecialization, Invalid)) {\n      // ...\n      if (TemplateParams->size() > 0) {\n      // ...\n     } else {\n        // ...\n        Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"},{C,17279,"/// Handle a friend tag declaration where the scope specifier was\n/// templated.\nDeclResult Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc, unsigned TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, MultiTemplateParamsArg TempParamLists) {\n  // ...\n  if (TemplateParameterList *TemplateParams = MatchTemplateParametersToScopeSpecifier(TagLoc, NameLoc, SS, nullptr, TempParamLists, /*friend*/ true, IsMemberSpecialization, Invalid)) {\n    if (TemplateParams->size() > 0) {\n    // ...\n    } else {\n      // ...\n      Diag(TemplateParams->getTemplateLoc(), diag::err_template_tag_noparams) << TypeWithKeyword::getTagTypeKindName(Kind) << Name;"}},
[b]={{A,8743,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n  // ...\n  while (i < NumArgs) {\n    // ...\n    if (ArgSize.getQuantity() >= 0x100) {\n      return Diag(Arg.get()->getEndLoc(), diag::err_os_log_argument_too_big) << i << (int)ArgSize.getQuantity() << 0xff << TheCall->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaTemplate/friend-template.cpp"]={"clang/test/SemaTemplate/friend-template.cpp:230:5: error: extraneous \'template<>\' in declaration of class \'B\'"}
["clang/test/SemaObjC/format-strings-oslog.m"]={"clang/test/SemaObjC/format-strings-oslog.m:41:38: error: os_log() argument 2 is too big (256 bytes, max 255)"}
}
}
},
},
["err_template_template_parameter_not_at_least_as_constrained"]={
["err_os_log_format_not_string_constant"]={
[b]={{nil,u,"err_template_template_parameter_not_at_least_as_constrained"}},
[d]="err_os_log_format_not_string_constant",
[c]={{nil,u,"template template argument %0 is more constrained than template template parameter %1"}},
[e]="os_log() format argument is not a string constant",
[d]={{nil,u,"template template argument A is more constrained than template template parameter B"}},
[i]="os_log() format argument is not a string constant",
[e]=k,
[j]=k,
[g]="template template argument (.*?) is more constrained than template template parameter (.*?)",
[c]="os_log\\(\\) format argument is not a string constant",
[h]=a,
[h]=a,
[i]={{nil,u,m}},
[g]=m,
[f]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","Improve static checks for sprintf and __builtin___sprintf_chk\n\nImplement a pessimistic evaluator of the minimal required size for a buffer\nbased on the format string, and couple that with the fortified version to emit a\nwarning when the buffer size is lower than the lower bound computed from the\nformat string.\n\nDifferential Revision: https://reviews.llvm.org/D71566"},
[f]={"29034362ae87",1477328183,"Add support for __builtin_os_log_format[_buffer_size]","Add support for __builtin_os_log_format[_buffer_size]\n\nThese new builtins support a mechanism for logging OS events, using a\nprintf-like format string to specify the layout of data in a buffer.\nThe _buffer_size version of the builtin can be used to determine the size\nof the buffer to allocate to hold the data, and then __builtin_os_log_format\ncan write data into that buffer. This implements format checking to report\nmismatches between the format string and the data arguments. Most of this\ncode was written by Chris Willmore.\n\nDifferential Revision: https://reviews.llvm.org/D25888\n\nllvm-svn: 284990"},
[j]={{o,7820,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // ...\n  // C++1z [temp.arg.template]p3: (DR 150)\n  //  A template-argument matches a template template-parameter P when P\n  //  is at least as specialized as the template-argument A.\n  // FIXME: We should enable RelaxedTemplateTemplateArgs by default as it is a\n  //  defect report resolution from C++17 and shouldn\'t be introduced by\n  //  concepts.\n  if (getLangOpts().RelaxedTemplateTemplateArgs) {\n    // ...\n    if (isTemplateTemplateParameterAtLeastAsSpecializedAs(Params, Template, Arg.getLocation())) {\n     // ...\n      if (!IsParamAtLeastAsConstrained) {\n        Diag(Arg.getLocation(), diag::err_template_template_parameter_not_at_least_as_constrained) << Template << Param << Arg.getSourceRange();"}},
[b]={{A,8014,"/// CheckObjCString - Checks that the format string argument to the os_log()\n/// and os_trace() functions is correct, and converts it to const char *.\nExprResult Sema::CheckOSLogFormatStringArg(Expr *Arg) {\n  // ...\n  if (!Literal || (!Literal->isOrdinary() && !Literal->isUTF8())) {\n   return ExprError(Diag(Arg->getBeginLoc(), diag::err_os_log_format_not_string_constant) << Arg->getSourceRange());"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:14:4: error: template template argument \'Y\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:19:4: error: template template argument \'W\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:44:4: error: template template argument \'Y\' is more constrained than template template parameter \'P\'","clang/test/CXX/temp/temp.arg/temp.arg.template/p3-2a.cpp:49:4: error: template template argument \'W\' is more constrained than template template parameter \'P\'"}
["clang/test/SemaObjC/format-strings-oslog.m"]={"clang/test/SemaObjC/format-strings-oslog.m:23:32: error: os_log() format argument is not a string constant"}
}
}
},
},
["err_template_template_parm_no_parms"]={
["err_out_of_line_constructor_template_id"]={
[b]="err_template_template_parm_no_parms",
[d]="err_out_of_line_constructor_template_id",
[c]="template template parameter must have its own template parameters",
[e]="out-of-line constructor for %0 cannot have template arguments",
[d]="template template parameter must have its own template parameters",
[i]="out-of-line constructor for A cannot have template arguments",
[e]=k,
[j]=k,
[g]="template template parameter must have its own template parameters",
[c]="out\\-of\\-line constructor for (.*?) cannot have template arguments",
[h]=a,
[h]=a,
[i]=m,
[g]=K,
[f]={"a02bb37a8c37",1287682009,"Diagnose the declaration of template template parameters that","Diagnose the declaration of template template parameters that\nthemselves have no template parameters. This is actually a restriction\ndue to the grammar of template template parameters, but we choose to\ndiagnose it in Sema to provide better recovery.\n\nllvm-svn: 117032"},
[f]={"9de54ea41bdc",1263403896,"Reimplement constructor declarator parsing to cope with template-ids","Reimplement constructor declarator parsing to cope with template-ids\nthat name constructors, the endless joys of out-of-line constructor\ndefinitions, and various other corner cases that the previous hack\nnever imagined. Fixes PR5688 and tightens up semantic analysis for\nconstructor names.\n\nAdditionally, fixed a problem where we wouldn\'t properly enter the\ndeclarator scope of a parenthesized declarator. We were entering the\nscope, then leaving it when we saw the \")\"; now, we re-enter the\ndeclarator scope before parsing the parameter list.\n\nNote that we are forced to perform some tentative parsing within a\nclass (call it C) to tell the difference between\n\n  C(int); // constructor\n\nand\n\n  C (f)(int); // member function\n\nwhich is rather unfortunate. And, although it isn\'t necessary for\ncorrectness, we use the same tentative-parsing mechanism for\nout-of-line constructors to improve diagnostics in icky cases like:\n\n  C::C C::f(int); // error: C::C refers to the constructor name, but\n                  // we complain nicely and recover by treating it as\n                  // a type.\n\nllvm-svn: 93322"},
[j]={{o,1659,"/// ActOnTemplateTemplateParameter - Called when a C++ template template\n/// parameter (e.g. T in template <template \\<typename> class T> class array)\n/// has been parsed. S is the current scope.\nNamedDecl *Sema::ActOnTemplateTemplateParameter(Scope *S, SourceLocation TmpLoc, TemplateParameterList *Params, SourceLocation EllipsisLoc, IdentifierInfo *Name, SourceLocation NameLoc, unsigned Depth, unsigned Position, SourceLocation EqualLoc, ParsedTemplateArgument Default) {\n  // ...\n  if (Params->size() == 0) {\n   Diag(Param->getLocation(), diag::err_template_template_parm_no_parms) << SourceRange(Params->getLAngleLoc(), Params->getRAngleLoc());"}},
[b]={{"clang/lib/Parse/ParseExprCXX.cpp",2964,"/// Parse a C++ unqualified-id (or a C identifier), which describes the\n/// name of an entity.\n///\n/// \\code\n///      unqualified-id: [C++ expr.prim.general]\n///        identifier\n///        operator-function-id\n///        conversion-function-id\n/// [C++0x] literal-operator-id [TODO]\n///        ~ class-name\n///        template-id\n///\n/// \\endcode\n///\n/// \\param SS The nested-name-specifier that preceded this unqualified-id. If\n/// non-empty, then we are parsing the unqualified-id of a qualified-id.\n///\n/// \\param ObjectType if this unqualified-id occurs within a member access\n/// expression, the type of the base object whose member is being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we are entering the scope of the\n/// nested-name-specifier.\n///\n/// \\param AllowDestructorName whether we allow parsing of a destructor name.\n///\n/// \\param AllowConstructorName whether we allow parsing a constructor name.\n///\n/// \\param AllowDeductionGuide whether we allow parsing a deduction guide name.\n///\n/// \\param Result on a successful parse, contains the parsed unqualified-id.\n///\n/// \\returns true if parsing fails, false otherwise.\nbool Parser::ParseUnqualifiedId(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool AllowDestructorName, bool AllowConstructorName, bool AllowDeductionGuide, SourceLocation *TemplateKWLoc, UnqualifiedId &Result) {\n  // ...\n  // unqualified-id:\n  //  template-id (already parsed and annotated)\n  if (Tok.is(tok::annot_template_id)) {\n    // ...\n    // If the template-name names the current class, then this is a constructor\n    if (AllowConstructorName && TemplateId->Name && Actions.isCurrentClassName(*TemplateId->Name, getCurScope(), &SS)) {\n      if (SS.isSet()) {\n       // ...\n        Diag(TemplateId->TemplateNameLoc, diag::err_out_of_line_constructor_template_id) << TemplateId->Name << FixItHint::CreateRemoval(SourceRange(TemplateId->LAngleLoc, TemplateId->RAngleLoc));"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.param/p1.cpp"]={"clang/test/CXX/temp/temp.param/p1.cpp:4:27: error: template template parameter must have its own template parameters"}
["clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:26:29: error: out-of-line constructor for \'X1\' cannot have template arguments","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/class.qual/p2.cpp:27:30: error: out-of-line constructor for \'X1\' cannot have template arguments"}
}
}
},
},
["err_template_typedef"]={
["err_out_of_line_default_deletes"]={
[b]="err_template_typedef",
[d]="err_out_of_line_default_deletes",
[c]="a typedef cannot be a template",
[e]="defaulting this %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 would delete it after its first declaration",
[d]="a typedef cannot be a template",
[i]={{nil,nil,{"defaulting this ",{"default constructor","copy constructor","move constructor","copy assignment operator","move assignment operator","destructor"}," would delete it after its first declaration"}}},
[e]=k,
[j]=k,
[g]="a typedef cannot be a template",
[c]="defaulting this (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) would delete it after its first declaration",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"b52fabb2a8c2",1245798688,"Start propagating template parameter lists to the right places to","Start propagating template parameter lists to the right places to\nhandle function templates. There\'s no actual code for function\ntemplates yet, but at least we complain about typedef templates.\n\nllvm-svn: 74021"},
[f]={"b315302bf94a",1305172308,"Implement deletion of explicitly defaulted default constructors.","Implement deletion of explicitly defaulted default constructors.\n\nWe still don\'t parse out-of-line defaults correctly, which is needed to\nget the full effect out of this patch.\n\nllvm-svn: 131223"},
[j]={{t,6430,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef) {\n    if (TemplateParamLists.size()) {\n      Diag(D.getIdentifierLoc(), diag::err_template_typedef);"}},
[b]={{y,7790,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n    // ...\n    } else {\n      // ...\n      Diag(MD->getLocation(), diag::err_out_of_line_default_deletes) << CSM;"}},
[l]={
[l]={
["clang/test/SemaTemplate/template-decl-fail.cpp"]={"clang/test/SemaTemplate/template-decl-fail.cpp:3:32: error: a typedef cannot be a template"}
["clang/test/CXX/special/class.copy/p11.0x.copy.cpp"]={"clang/test/CXX/special/class.copy/p11.0x.copy.cpp:167:6: error: defaulting this copy constructor would delete it after its first declaration"}
}
}
},
},
["err_template_unnamed_class"]={
["err_out_of_line_qualified_id_type_names_constructor"]={
[b]="err_template_unnamed_class",
[d]={{nil,q,"err_out_of_line_qualified_id_type_names_constructor"}},
[c]="cannot declare a class template with no name",
[e]={{nil,q,"qualified reference to %0 is a constructor name rather than a %select{template name|type}1 in this context"}},
[d]="cannot declare a class template with no name",
[i]={{nil,q,{"qualified reference to A is a constructor name rather than a ",{"template name","type"}," in this context"}}},
[e]=k,
[j]=k,
[g]="cannot declare a class template with no name",
[c]="qualified reference to (.*?) is a constructor name rather than a (?:template name|type) in this context",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{o,1842,"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  // There is no such thing as an unnamed class template.\n  if (!Name) {\n    Diag(KWLoc, diag::err_template_unnamed_class);"}}
},
["err_template_variable_noparams"]={
[b]="err_template_variable_noparams",
[c]="extraneous \'template<>\' in declaration of variable %0",
[d]="extraneous \'template<>\' in declaration of variable A",
[e]=k,
[g]="extraneous \'template\\<\\>\' in declaration of variable (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,q,m}},
[f]={"b09f3d82cc7e",1248283117,"Implement parsing and semantic analysis for out-of-line definitions of static","Implement parsing and semantic analysis for out-of-line definitions of static\ndata members of class templates. We don\'t instantiate the definitions yet,\nhowever.\n\nllvm-svn: 76756"},
[f]={"74f02347ca16",1484859613,"PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310).","PR13403 (+duplicates): implement C++ DR1310 (http://wg21.link/cwg1310).\n\nUnder this defect resolution, the injected-class-name of a class or class\ntemplate cannot be used except in very limited circumstances (when declaring a\nconstructor, in a nested-name-specifier, in a base-specifier, or in an\nelaborated-type-specifier). This is apparently done to make parsing easier, but\nit\'s a pain for us since we don\'t know whether a template-id using the\ninjected-class-name is valid at the point when we annotate it (we don\'t yet\nknow whether the template-id will become part of an elaborated-type-specifier).\n\nAs a tentative resolution to a perceived language defect, mem-initializer-ids\nare added to the list of exceptions here (they generally follow the same rules\nas base-specifiers).\n\nWhen the reference to the injected-class-name uses the \'typename\' or \'template\'\nkeywords, we permit it to be used to name a type or template as an extension;\nother compilers also accept some cases in this area. There are also a couple of\ncorner cases with dependent template names that we do not yet diagnose, but\nwhich will also get this treatment.\n\nllvm-svn: 292518"},
[j]={{t,7631,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!getLangOpts().CPlusPlus) {\n // ...\n } else {\n   // ...\n   if (TemplateParams) {\n      if (!TemplateParams->size() && D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n       // ...\n       Diag(TemplateParams->getTemplateLoc(), diag::err_template_variable_noparams) << II << SourceRange(TemplateParams->getTemplateLoc(), TemplateParams->getRAngleLoc());"}},
[b]={{G,548,"/// If the identifier refers to a type name within this scope,\n/// return the declaration of that type.\n///\n/// This routine performs ordinary name lookup of the identifier II\n/// within the given scope, with optional C++ scope specifier SS, to\n/// determine whether the name refers to a type. If so, returns an\n/// opaque pointer (actually a QualType) corresponding to that\n/// type. Otherwise, returns NULL.\nParsedType Sema::getTypeName(const IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec *SS, bool isClassName, bool HasTrailingDot, ParsedType ObjectTypePtr, bool IsCtorOrDtorName, bool WantNontrivialTypeSourceInfo, bool IsClassTemplateDeductionContext, ImplicitTypenameContext AllowImplicitTypename, IdentifierInfo **CorrectedII) {\n  // ...\n  if (TypeDecl *TD = dyn_cast<TypeDecl>(IIDecl)) {\n   // ...\n   if (!isClassName && !IsCtorOrDtorName && LookupRD && FoundRD && FoundRD->isInjectedClassName() && declaresSameEntity(LookupRD, cast<Decl>(FoundRD->getParent())))\n      Diag(NameLoc, diag::err_out_of_line_qualified_id_type_names_constructor) << &II << /*Type*/ 1;"},{fb,4172,"TypeResult Sema::ActOnTemplateIdType(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, IdentifierInfo *TemplateII, SourceLocation TemplateIILoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, bool IsCtorOrDtorName, bool IsClassName, ImplicitTypenameContext AllowImplicitTypename) {\n // ...\n if (!IsCtorOrDtorName && !IsClassName && SS.isSet()) {\n   // ...\n   if (LookupRD && LookupRD->getIdentifier() == TemplateII) {\n      Diag(TemplateIILoc, TemplateKWLoc.isInvalid() ? diag::err_out_of_line_qualified_id_type_names_constructor : diag::ext_out_of_line_qualified_id_type_names_constructor) << TemplateII << 0 /*injected-class-name used as template name*/"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p17.cpp:32:3: error: extraneous \'template<>\' in declaration of variable \'foo\'"}
["clang/test/SemaTemplate/injected-class-name.cpp"]={"clang/test/SemaTemplate/injected-class-name.cpp:14:11: error: qualified reference to \'X\' is a constructor name rather than a template name in this context","clang/test/SemaTemplate/injected-class-name.cpp:16:13: error: qualified reference to \'X\' is a constructor name rather than a template name in this context"}
}
}
},
},
["err_templated_invalid_declaration"]={
["err_overflow_builtin_bit_int_max_size"]={
[b]="err_templated_invalid_declaration",
[d]={{nil,M,"err_overflow_builtin_bit_int_max_size"}},
[c]="a static_assert declaration cannot be a template",
[e]={{nil,M,"__builtin_mul_overflow does not support \'signed _BitInt\' operands of more than %0 bits"}},
[d]="a static_assert declaration cannot be a template",
[i]={{nil,M,"__builtin_mul_overflow does not support \'signed _BitInt\' operands of more than A bits"}},
[e]=k,
[j]=k,
[g]="a static_assert declaration cannot be a template",
[c]="__builtin_mul_overflow does not support \'signed _BitInt\' operands of more than (.*?) bits",
[h]=a,
[h]=a,
[i]=G,
[g]={{nil,M,m}},
[f]={"e7c544d38800",1407184115,"A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently...","A static_assert declaration cannot be a template; adding the diagnostic for this instead of silently accepting and producing possibly-unexpected behavior.\n\nllvm-svn: 214770"},
[f]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
[j]={{"clang/lib/Parse/ParseTemplate.cpp",197,"/// 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::kw_static_assert)) {\n   // ...\n    Diag(Tok.getLocation(), diag::err_templated_invalid_declaration) << TemplateInfo.getSourceRange();"}},
[b]={{A,417,"static bool SemaBuiltinOverflow(Sema &S, CallExpr *TheCall, unsigned BuiltinID) {\n // ...\n // Disallow signed bit-precise integer args larger than 128 bits to mul\n // function until we improve backend support.\n  if (BuiltinID == Builtin::BI__builtin_mul_overflow) {\n    for (unsigned I = 0; I < 3; ++I) {\n     // ...\n     if (Ty->isBitIntType() && Ty->isSignedIntegerType() && S.getASTContext().getIntWidth(Ty) > 128)\n       return S.Diag(Arg->getBeginLoc(), diag::err_overflow_builtin_bit_int_max_size) << 128;"}},
[l]={
[l]={
["clang/test/Parser/cxx11-templates.cpp"]={"clang/test/Parser/cxx11-templates.cpp:5:3: error: a static_assert declaration cannot be a template","clang/test/Parser/cxx11-templates.cpp:9:1: error: a static_assert declaration cannot be a template"}
["clang/test/Sema/builtins-overflow.c"]={"clang/test/Sema/builtins-overflow.c:40:43: error: __builtin_mul_overflow does not support \'signed _BitInt\' operands of more than 128 bits"}
}
}
},
},
["err_templated_using_directive_declaration"]={
["err_overflow_builtin_must_be_int"]={
[b]="err_templated_using_directive_declaration",
[d]="err_overflow_builtin_must_be_int",
[c]="cannot template a using %select{directive|declaration}0",
[e]="operand argument to overflow builtin must be an integer (%0 invalid)",
[d]={{nil,nil,{"cannot template a using ",{"directive","declaration"}}}},
[i]="operand argument to overflow builtin must be an integer (A invalid)",
[e]=k,
[j]=k,
[g]="cannot template a using (?:directive|declaration)",
[c]="operand argument to overflow builtin must be an integer \\((.*?) invalid\\)",
[h]=a,
[h]=a,
[i]=G,
[g]=m,
[f]={"54a6a68c706b",1447524968,"Merge some similar diagnostics using %select.","Merge some similar diagnostics using %select.\n\nllvm-svn: 253136"},
[f]={"03107a4ef015",1446151681,"Add support for __builtin_{add,sub,mul}_overflow.","Add support for __builtin_{add,sub,mul}_overflow.\n\nPatch by David Grayson!\n\nllvm-svn: 251651"},
[j]={{Sb,503,"/// ParseUsingDirectiveOrDeclaration - Parse C++ using using-declaration or\n/// using-directive. Assumes that current token is \'using\'.\nParser::DeclGroupPtrTy Parser::ParseUsingDirectiveOrDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation &DeclEnd, ParsedAttributes &Attrs) {\n  // ...\n  // \'using namespace\' means this is a using-directive.\n  if (Tok.is(tok::kw_namespace)) {\n    // Template parameters are always an error here.\n    if (TemplateInfo.Kind) {\n      // ...\n      Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 0 /* directive */ << R << FixItHint::CreateRemoval(R);"},{Sb,708,"/// ParseUsingDeclaration - Parse C++ using-declaration or alias-declaration.\n/// Assumes that \'using\' was already seen.\n///\n///    using-declaration: [C++ 7.3.p3: namespace.udecl]\n///      \'using\' using-declarator-list[opt] ;\n///\n///    using-declarator-list: [C++1z]\n///      using-declarator \'...\'[opt]\n///      using-declarator-list \',\' using-declarator \'...\'[opt]\n///\n///    using-declarator-list: [C++98-14]\n///      using-declarator\n///\n///    alias-declaration: C++11 [dcl.dcl]p1\n///      \'using\' identifier attribute-specifier-seq[opt] = type-id ;\n///\n///    using-enum-declaration: [C++20, dcl.enum]\n///      \'using\' elaborated-enum-specifier ;\n///      The terminal name of the elaborated-enum-specifier undergoes\n///      ordinary lookup\n///\n///    elaborated-enum-specifier:\n///      \'enum\' nested-name-specifier[opt] identifier\nParser::DeclGroupPtrTy Parser::ParseUsingDeclaration(DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo, SourceLocation UsingLoc, SourceLocation &DeclEnd, ParsedAttributes &PrefixAttrs, AccessSpecifier AS) {\n // ...\n if (TryConsumeToken(tok::kw_enum, UELoc) && !InInitStatement) {\n    // ...\n    if (TemplateInfo.Kind) {\n      // ...\n      Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"},{Sb,806,"/// 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  // Diagnose an attempt to declare a templated using-declaration.\n  // In C++11, alias-declarations can be templates:\n  //  template <...> using id = type;\n  if (TemplateInfo.Kind) {\n    // ...\n    Diag(UsingLoc, diag::err_templated_using_directive_declaration) << 1 /* declaration */ << R << FixItHint::CreateRemoval(R);"}},
[b]={{A,381,"static bool SemaBuiltinOverflow(Sema &S, CallExpr *TheCall, unsigned BuiltinID) {\n  // ...\n  // First two arguments should be integers.\n  for (unsigned I = 0; I < 2; ++I) {\n   // ...\n   if (!Ty->isIntegerType()) {\n      S.Diag(Arg.get()->getBeginLoc(), diag::err_overflow_builtin_must_be_int) << Ty << Arg.get()->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/using-directive.cpp"]={"clang/test/SemaCXX/using-directive.cpp:131:22: error: cannot template a using directive"}
["clang/test/Sema/builtins-overflow.c"]={"clang/test/Sema/builtins-overflow.c:17:26: error: operand argument to overflow builtin must be an integer (\'const char *\' invalid)","clang/test/Sema/builtins-overflow.c:18:29: error: operand argument to overflow builtin must be an integer (\'const char *\' invalid)"}
}
}
},
},
["err_tentative_def_incomplete_type"]={
["err_overflow_builtin_must_be_ptr_int"]={
[b]="err_tentative_def_incomplete_type",
[d]="err_overflow_builtin_must_be_ptr_int",
[c]="tentative definition has type %0 that is never completed",
[e]="result argument to overflow builtin must be a pointer to a non-const integer (%0 invalid)",
[d]="tentative definition has type A that is never completed",
[i]="result argument to overflow builtin must be a pointer to a non-const integer (A invalid)",
[e]=k,
[j]=k,
[g]="tentative definition has type (.*?) that is never completed",
[c]="result argument to overflow builtin must be a pointer to a non\\-const integer \\((.*?) invalid\\)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"03107a4ef015",1446151681,"Add support for __builtin_{add,sub,mul}_overflow.","Add support for __builtin_{add,sub,mul}_overflow.\n\nPatch by David Grayson!\n\nllvm-svn: 251651"},
[j]={{Tb,1314,"/// 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 for (TentativeDefinitionsType::iterator T = TentativeDefinitions.begin(ExternalSource.get()), TEnd = TentativeDefinitions.end(); T != TEnd; ++T) {\n   // ...\n    } else if (RequireCompleteType(VD->getLocation(), VD->getType(), diag::err_tentative_def_incomplete_type))"}},
[b]={{A,401,"static bool SemaBuiltinOverflow(Sema &S, CallExpr *TheCall, unsigned BuiltinID) {\n  // ...\n  // Third argument should be a pointer to a non-const integer.\n // IRGen correctly handles volatile, restrict, and address spaces, and\n // the other qualifiers aren\'t possible.\{\n   // ...\n   if (!PtrTy || !PtrTy->getPointeeType()->isIntegerType() || PtrTy->getPointeeType().isConstQualified()) {\n     S.Diag(Arg.get()->getBeginLoc(), diag::err_overflow_builtin_must_be_ptr_int) << Ty << Arg.get()->getSourceRange();"}},
[l]={
[l]={
["clang/test/Misc/verify.c"]={"clang/test/Misc/verify.c:6:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:7:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:10:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:11:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:12:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:13:10: error: tentative definition has type \'struct s\' that is never completed","clang/test/Misc/verify.c:14:10: error: tentative definition has type \'struct s\' that is never completed"}
["clang/test/Sema/builtins-overflow.c"]={"clang/test/Sema/builtins-overflow.c:19:32: error: result argument to overflow builtin must be a pointer to a non-const integer (\'int\' invalid)","clang/test/Sema/builtins-overflow.c:20:32: error: result argument to overflow builtin must be a pointer to a non-const integer (\'float *\' invalid)","clang/test/Sema/builtins-overflow.c:21:32: error: result argument to overflow builtin must be a pointer to a non-const integer (\'const unsigned int *\' invalid)"}
}
}
},
},
["err_test_module_file_extension_format"]={
["err_override_control_interface"]={
[b]="err_test_module_file_extension_format",
[d]="err_override_control_interface",
[c]="-ftest-module-file-extension argument \'%0\' is not of the required form \'blockname:major:minor:hashed:user info\'",
[e]="\'%0\' keyword not permitted with interface types",
[d]="-ftest-module-file-extension argument \'A\' is not of the required form \'blockname:major:minor:hashed:user info\'",
[i]="\'A\' keyword not permitted with interface types",
[e]=k,
[j]=k,
[g]="\\-ftest\\-module\\-file\\-extension argument \'(.*?)\' is not of the required form \'blockname\\:major\\:minor\\:hashed\\:user info\'",
[c]="\'(.*?)\' keyword not permitted with interface types",
[h]=a,
[h]=a,
[i]=y,
[g]=K,
[f]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files.","Introduce module file extensions to piggy-back data onto module files.\n\nIntroduce the notion of a module file extension, which introduces\nadditional information into a module file at the time it is built that\ncan then be queried when the module file is read. Module file\nextensions are identified by a block name (which must be unique to the\nextension) and can write any bitstream records into their own\nextension block within the module file. When a module file is loaded,\nany extension blocks are matched up with module file extension\nreaders, that are per-module-file and are given access to the input\nbitstream.\n\nNote that module file extensions can only be introduced by\nprogrammatic clients that have access to the CompilerInvocation. There\nis only one such extension at the moment, which is used for testing\nthe module file extension harness. As a future direction, one could\nimagine allowing the plugin mechanism to introduce new module file\nextensions.\n\nllvm-svn: 251955"},
[f]={"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]={{"clang/lib/Frontend/CompilerInvocation.cpp",2765,"#include \"clang/Driver/Options.inc\"\n // ...\n for (const std::string &Arg : Args.getAllArgValues(OPT_ftest_module_file_extension_EQ)) {\n    // ...\n    if (parseTestModuleFileExtensionArg(Arg, BlockName, MajorVersion, MinorVersion, Hashed, UserInfo)) {\n      Diags.Report(diag::err_test_module_file_extension_format) << Arg;"}}
[b]={{"clang/lib/Parse/ParseDeclCXX.cpp",2462,"/// ParseOptionalCXX11VirtSpecifierSeq - Parse a virt-specifier-seq.\n///\n///      virt-specifier-seq:\n///        virt-specifier\n///        virt-specifier-seq virt-specifier\nvoid Parser::ParseOptionalCXX11VirtSpecifierSeq(VirtSpecifiers &VS, bool IsInterface, SourceLocation FriendLoc) {\n  while (true) {\n    // ...\n    if (IsInterface && (Specifier == VirtSpecifiers::VS_Final || Specifier == VirtSpecifiers::VS_Sealed)) {\n      Diag(Tok.getLocation(), diag::err_override_control_interface) << VirtSpecifiers::getSpecifierName(Specifier);"},{"clang/lib/Parse/ParseDeclCXX.cpp",3524,"/// ParseCXXMemberSpecification - Parse the class definition.\n///\n///      member-specification:\n///        member-declaration member-specification[opt]\n///        access-specifier \':\' member-specification[opt]\n///\nvoid Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc, SourceLocation AttrFixitLoc, ParsedAttributes &Attrs, unsigned TagType, Decl *TagDecl) {\n  // ...\n  // Parse the optional \'final\' keyword.\n  if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) {\n    while (true) {\n      // ...\n      if (TagType == DeclSpec::TST_interface)\n        Diag(FinalLoc, diag::err_override_control_interface) << VirtSpecifiers::getSpecifierName(Specifier);"}},
},
["err_test_module_file_extension_version"]={
[b]="err_test_module_file_extension_version",
[c]="test module file extension \'%0\' has different version (%1.%2) than expected (%3.%4)",
[d]="test module file extension \'A\' has different version (B.C) than expected (D.E)",
[e]=k,
[g]="test module file extension \'(.*?)\' has different version \\((.*?)\\.(.*?)\\) than expected \\((.*?)\\.(.*?)\\)",
[h]=a,
[i]=y,
[f]={"6623e1f10f95",1446575587,"Introduce module file extensions to piggy-back data onto module files.","Introduce module file extensions to piggy-back data onto module files.\n\nIntroduce the notion of a module file extension, which introduces\nadditional information into a module file at the time it is built that\ncan then be queried when the module file is read. Module file\nextensions are identified by a block name (which must be unique to the\nextension) and can write any bitstream records into their own\nextension block within the module file. When a module file is loaded,\nany extension blocks are matched up with module file extension\nreaders, that are per-module-file and are given access to the input\nbitstream.\n\nNote that module file extensions can only be introduced by\nprogrammatic clients that have access to the CompilerInvocation. There\nis only one such extension at the moment, which is used for testing\nthe module file extension harness. As a future direction, one could\nimagine allowing the plugin mechanism to introduce new module file\nextensions.\n\nllvm-svn: 251955"},
[j]={{"clang/lib/Frontend/TestModuleFileExtension.cpp",122,"std::unique_ptr<ModuleFileExtensionReader> TestModuleFileExtension::createExtensionReader(const ModuleFileExtensionMetadata &Metadata, ASTReader &Reader, serialization::ModuleFile &Mod, const llvm::BitstreamCursor &Stream) {\n  // ...\n  if (std::make_pair(Metadata.MajorVersion, Metadata.MinorVersion) != std::make_pair(MajorVersion, MinorVersion)) {\n    Reader.getDiags().Report(Mod.ImportLoc, diag::err_test_module_file_extension_version) << BlockName << Metadata.MajorVersion << Metadata.MinorVersion << MajorVersion << MinorVersion;"}},
[l]={
[l]={
["clang/test/Modules/extensions.c"]={"clang/test/Modules/extensions.c:31:2: error: test module file extension \'clang.testA\' has different version (2.5) than expected (1.3)","clang/test/Modules/extensions.c:31:2: error: test module file extension \'clang.testB\' has different version (7.3) than expected (3.2)"}
["clang/test/SemaCXX/ms-interface.cpp"]={"clang/test/SemaCXX/ms-interface.cpp:41:16: error: \'final\' keyword not permitted with interface types","clang/test/SemaCXX/ms-interface.cpp:47:14: error: \'final\' keyword not permitted with interface types"}
}
}
},
},
["err_this_capture"]={
["err_override_exception_spec"]={
[b]="err_this_capture",
[d]="err_override_exception_spec",
[c]="\'this\' cannot be %select{implicitly |}0captured in this context",
[e]="exception specification of overriding function is more lax than base version",
[d]={{nil,nil,{"\'this\' cannot be ",{"implicitly ",a},"captured in this context"}}},
[i]="exception specification of overriding function is more lax than base version",
[e]=k,
[j]=k,
[g]="\'this\' cannot be (?:implicitly |)captured in this context",
[c]="exception specification of overriding function is more lax than base version",
[h]=a,
[h]=a,
[i]="Lambda Issue",
[g]=m,
[f]={"cdd11d4e7ef7",1328115861,"Introduce the lambda scope before determining explicit captures, which","Introduce the lambda scope before determining explicit captures, which\ncleans up and improves a few things:\n  - We get rid of the ugly dance of computing all of the captures in\n  data structures that clone those of CapturingScopeInfo, centralizing\n  the logic for accessing/updating these data structures\n  - We re-use the existing capture logic for \'this\', which actually\n  works now.\n\nCleaned up some diagnostic wording in minor ways as well.\n\nllvm-svn: 149516"},
[f]={"86be854fa869",1246998597,"Implement checking of exception spec compatibility for overriding virtual functions.","Implement checking of exception spec compatibility for overriding virtual functions.\n\nllvm-svn: 74943"},
[j]={{J,1330,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n  // ...\n  for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n    if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n      // ...\n      if (LSI && isGenericLambdaCallOperatorSpecialization(LSI->CallOperator)) {\n        // This context can\'t implicitly capture \'this\'; fail out.\n        if (BuildAndDiagnose) {\n          Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{J,1352,"bool Sema::CheckCXXThisCapture(SourceLocation Loc, const bool Explicit, bool BuildAndDiagnose, const unsigned *const FunctionScopeIndexToStopAt, const bool ByCopy) {\n  // ...\n  for (int idx = MaxFunctionScopesIndex; idx >= 0; idx--) {\n    if (CapturingScopeInfo *CSI = dyn_cast<CapturingScopeInfo>(FunctionScopes[idx])) {\n      // ...\n      // This context can\'t implicitly capture \'this\'; fail out.\n      if (BuildAndDiagnose)\n        Diag(Loc, diag::err_this_capture) << (Explicit && idx == MaxFunctionScopesIndex);"},{"clang/lib/Sema/SemaLambda.cpp",1051,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    if (C->Kind == LCK_This || C->Kind == LCK_StarThis) {\n      // ...\n      if (ThisCaptureType.isNull()) {\n        Diag(C->Loc, diag::err_this_capture) << true;"}},
[b]={{"clang/lib/Sema/SemaExceptionSpec.cpp",990,"bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  unsigned DiagID = diag::err_override_exception_spec;"}},
[l]={
[l]={
["clang/test/Parser/lambda-misplaced-capture-default.cpp"]={"clang/test/Parser/lambda-misplaced-capture-default.cpp:20:7: error: \'this\' cannot be captured in this context"}
["clang/test/CXX/except/except.spec/p5-delayed.cpp"]={"clang/test/CXX/except/except.spec/p5-delayed.cpp:13:10: error: exception specification of overriding function is more lax than base version"}
}
}
},
},
["err_this_captured_by_reference"]={
["err_ovl_ambiguous_call"]={
[b]="err_this_captured_by_reference",
[d]="err_ovl_ambiguous_call",
[c]="\'this\' cannot be captured by reference",
[e]="call to %0 is ambiguous",
[d]="\'this\' cannot be captured by reference",
[i]="call to A is ambiguous",
[e]=k,
[j]=k,
[g]="\'this\' cannot be captured by reference",
[c]="call to (.*?) is ambiguous",
[h]=a,
[h]=a,
[i]=G,
[g]=m,
[f]={"db0b9f126459",1312471847,"Parsing of C++0x lambda expressions, from John Freeman with help from","Parsing of C++0x lambda expressions, from John Freeman with help from\nDavid Blaikie!\n\nllvm-svn: 136876"},
[f]={t,1236199783,r,s},
[j]={{"clang/lib/Parse/ParseExprCXX.cpp",969,"/// 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 (Tok.is(tok::star)) {\n   // ...\n   } else if (Tok.is(tok::kw_this)) {\n   // ...\n    } else if (Tok.isOneOf(tok::amp, tok::equal) && NextToken().isOneOf(tok::comma, tok::r_square) && Intro.Default == LCD_None) {\n    // ...\n   } else {\n      // ...\n      if (Tok.is(tok::identifier)) {\n     // ...\n     } else if (Tok.is(tok::kw_this)) {\n       return Invalid([&] {\n          // ...\n          Diag(Tok.getLocation(), diag::err_this_captured_by_reference);"}},
[b]={{N,2617,"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_Ambiguous:\n    if (Diagnose) {\n      Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_ambiguous_call) << R.getLookupName() << Range), S, OCD_AmbiguousCandidates, Args);"},{N,3881,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  // ...\n case OR_Ambiguous:\n    Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_ambiguous_call) << R.getLookupName() << Range), S, OCD_AmbiguousCandidates, Args);"},{"clang/lib/Sema/SemaLookup.cpp",3764,"/// LookupLiteralOperator - Determine which literal operator should be used for\n/// a user-defined literal, per C++11 [lex.ext].\n///\n/// Normal overload resolution is not used to select which literal operator to\n/// call for a user-defined literal. Look up the provided literal operator name,\n/// and filter the results to the appropriate set for the given argument types.\nSema::LiteralOperatorLookupResult Sema::LookupLiteralOperator(Scope *S, LookupResult &R, ArrayRef<QualType> ArgTys, bool AllowRaw, bool AllowTemplate, bool AllowStringTemplatePack, bool DiagnoseMissing, StringLiteral *StringLit) {\n  // ...\n  // C++11 [lex.ext]p3, p4: S shall contain a raw literal operator or a literal\n // operator template, but not both.\n  if (FoundRaw && FoundTemplate) {\n    Diag(R.getNameLoc(), diag::err_ovl_ambiguous_call) << R.getLookupName();"},{B,13536,"/// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns\n/// the completed call expression. If overload resolution fails, emits\n/// diagnostics and returns ExprError()\nstatic ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, OverloadCandidateSet *CandidateSet, OverloadCandidateSet::iterator *Best, OverloadingResult OverloadResult, bool AllowTypoCorrection) {\n // ...\n  case OR_Ambiguous:\n    CandidateSet->NoteCandidates(PartialDiagnosticAt(Fn->getBeginLoc(), SemaRef.PDiag(diag::err_ovl_ambiguous_call) << ULE->getName() << Fn->getSourceRange()), SemaRef, OCD_AmbiguousCandidates, Args);"},{B,15371,"/// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to\n/// a literal operator described by the provided lookup results.\nExprResult Sema::BuildLiteralOperatorCall(LookupResult &R, DeclarationNameInfo &SuffixInfo, ArrayRef<Expr *> Args, SourceLocation LitEndLoc, TemplateArgumentListInfo *TemplateArgs) {\n // ...\n case OR_Ambiguous:\n   CandidateSet.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), PDiag(diag::err_ovl_ambiguous_call) << R.getLookupName()), *this, OCD_AmbiguousCandidates, Args);"}},
[l]={
[l]={
["clang/test/Parser/cxx0x-lambda-expressions.cpp"]={"clang/test/Parser/cxx0x-lambda-expressions.cpp:17:11: error: \'this\' cannot be captured by reference","clang/test/Parser/cxx0x-lambda-expressions.cpp:18:7: error: \'this\' cannot be captured by reference"}
["clang/test/Sema/overloadable-complex.c"]={"clang/test/Sema/overloadable-complex.c:34:14: error: call to \'promote_or_convert\' is ambiguous","clang/test/Sema/overloadable-complex.c:35:14: error: call to \'promote_or_convert\' is ambiguous"}
}
}
},
},
["err_this_static_member_func"]={
["err_ovl_ambiguous_conversion_in_cast"]={
[b]="err_this_static_member_func",
[d]="err_ovl_ambiguous_conversion_in_cast",
[c]="\'this\' cannot be%select{| implicitly}0 used in a static member function declaration",
[e]={{nil,p,"ambiguous conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2"},{w,nil,"ambiguous conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2"}},
[d]={{nil,nil,{"\'this\' cannot be",{a," implicitly"}," used in a static member function declaration"}}},
[i]={{nil,p,{"ambiguous conversion for ",{a,qb,tb,sb,mb,rb,a}," from B to C"}},{w,nil,{"ambiguous conversion for ",{a,qb,tb,sb,mb,rb}," from B to C"}}},
[e]=k,
[j]=k,
[g]="\'this\' cannot be(?:| implicitly) used in a static member function declaration",
[c]="ambiguous conversion for (?:|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"3024f07c1232",1334559922,"Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'","Implement C++11 [expr.prim.general]p3, which permits the use of \'this\'\nin the declaration of a non-static member function after the\n(optional) cv-qualifier-seq, which in practice means in the exception\nspecification and late-specified return type. \n\nThe new scheme here used to manage \'this\' outside of a member function\nscope is more general than the Scope-based mechanism previously used\nfor non-static data member initializers and late-parsesd attributes,\nbecause it can also handle the cv-qualifiers on the member\nfunction. Note, however, that a separate pass is required for static\nmember functions to determine whether \'this\' was used, because we\nmight not know that we have a static function until after declaration\nmatching.\n\nFinally, this introduces name mangling for \'this\' and for the implicit\n\'this\', which is intended to match GCC\'s mangling. Independent\nverification for the new mangling test case would be appreciated.\n\nFixes PR10036 and PR12450.\n\nllvm-svn: 154799"},
[f]={"909acf820969",1297708450,"Provide overload diagnostics when explicit casts involving class types fail.","Provide overload diagnostics when explicit casts involving class types fail.\nPR8626.\n\nllvm-svn: 125506"},
[j]={{C,18588,"/// AST visitor that finds references to the \'this\' expression.\nclass FindCXXThisExpr : public RecursiveASTVisitor<FindCXXThisExpr> {\n  // ...\n  bool VisitCXXThisExpr(CXXThisExpr *E) {\n    S.Diag(E->getLocation(), diag::err_this_static_member_func) << E->isImplicit();"}},
[b]={{cb,498,"/// Try to diagnose a failed overloaded cast.  Returns true if\n/// diagnostics were emitted.\nstatic bool tryDiagnoseOverloadedCast(Sema &S, CastType CT, SourceRange range, Expr *src, QualType destType, bool listInitialization) {\n  // ...\n  case OR_Ambiguous:\n    msg = diag::err_ovl_ambiguous_conversion_in_cast;"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:112:33: error: \'this\' cannot be implicitly used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:113:33: error: \'this\' cannot be used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:117:38: error: \'this\' cannot be implicitly used in a static member function declaration","clang/test/CXX/expr/expr.prim/expr.prim.general/p3-0x.cpp:120:28: error: \'this\' cannot be implicitly used in a static member function declaration"}
["clang/test/SemaCXX/cast-conversion.cpp"]={"clang/test/SemaCXX/cast-conversion.cpp:73:10: error: ambiguous conversion for static_cast from \'AmbiguousCast\' to \'long long\'"}
}
}
},
},
["err_thread_dynamic_init"]={
["err_ovl_ambiguous_init"]={
[b]="err_thread_dynamic_init",
[d]="err_ovl_ambiguous_init",
[c]="initializer for thread-local variable must be a constant expression",
[e]="call to constructor of %0 is ambiguous",
[d]="initializer for thread-local variable must be a constant expression",
[i]="call to constructor of A is ambiguous",
[e]=k,
[j]=k,
[g]="initializer for thread\\-local variable must be a constant expression",
[c]="call to constructor of (.*?) is ambiguous",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer","Diagnose if a __thread or _Thread_local variable has a non-constant initializer\nor non-trivial destructor.\n\nllvm-svn: 179491"},
[f]={t,1236199783,r,s},
[j]={{t,14108,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n   if (var->getType().isDestructedType()) {\n    // ...\n    } else if (getLangOpts().CPlusPlus && var->hasInit()) {\n      if (!checkConstInit()) {\n        // ...\n        Diag(CacheCulprit->getExprLoc(), diag::err_thread_dynamic_init) << CacheCulprit->getSourceRange();"}},
[b]={{kb,9857,"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_Ambiguous:\n      FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), S.PDiag(diag::err_ovl_ambiguous_init) << DestType << ArgsRange), S, OCD_AmbiguousCandidates, Args);"}},
[l]={
[l]={
["clang/test/SemaCXX/declspec-thread.cpp"]={"clang/test/SemaCXX/declspec-thread.cpp:12:28: error: initializer for thread-local variable must be a constant expression","clang/test/SemaCXX/declspec-thread.cpp:19:28: error: initializer for thread-local variable must be a constant expression","clang/test/SemaCXX/declspec-thread.cpp:26:28: error: initializer for thread-local variable must be a constant expression"}
["clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p15.cpp"]={"clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p15.cpp:15:4: error: call to constructor of \'D1\' is ambiguous","clang/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p15.cpp:93:7: error: call to constructor of \'D\' is ambiguous"}
}
}
},
},
["err_thread_non_global"]={
["err_ovl_ambiguous_member_call"]={
[b]="err_thread_non_global",
[d]="err_ovl_ambiguous_member_call",
[c]="\'%0\' variables must have global storage",
[e]="call to member function %0 is ambiguous",
[d]="\'A\' variables must have global storage",
[i]="call to member function A is ambiguous",
[e]=k,
[j]=k,
[g]="\'(.*?)\' variables must have global storage",
[c]="call to member function (.*?) is ambiguous",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers.","Add more thorough/correct checking for invalid __thread specifiers.\n\nllvm-svn: 69542"},
[f]={t,1236199783,r,s},
[j]={{t,7764,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n // ...\n if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n   // C++11 [dcl.stc]p4:\n    //   When thread_local is applied to a variable of block scope the\n   //   storage-class-specifier static is implied if it does not appear\n    //  explicitly.\n   // Core issue: \'static\' is not implied if the variable is declared\n   //   \'extern\'.\n    if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n      Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_non_global) << DeclSpec::getSpecifierName(TSCS);"},{M,7314,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (VD->hasLocalStorage()) {\n    S.Diag(AL.getLoc(), diag::err_thread_non_global) << \"__declspec(thread)\";"}},
[b]={{B,14831,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  if (isa<MemberExpr>(NakedMemExpr)) {\n  // ...\n  } else {\n    // ...\n    case OR_Ambiguous:\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(UnresExpr->getMemberLoc(), PDiag(diag::err_ovl_ambiguous_member_call) << DeclName << MemExprE->getSourceRange()), *this, OCD_AmbiguousCandidates, Args);"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:46:3: error: \'_Thread_local\' variables must have global storage","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:54:3: error: \'__thread\' variables must have global storage"}
["clang/test/SemaTemplate/concepts-using-decl.cpp"]={"clang/test/SemaTemplate/concepts-using-decl.cpp:91:9: error: call to member function \'foo\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:127:10: error: call to member function \'foo1\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:128:10: error: call to member function \'foo2\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:129:10: error: call to member function \'foo3\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:130:10: error: call to member function \'foo1\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:131:10: error: call to member function \'foo2\' is ambiguous","clang/test/SemaTemplate/concepts-using-decl.cpp:132:10: error: call to member function \'foo3\' is ambiguous"}
}
}
},
},
["err_thread_non_thread"]={
["err_ovl_ambiguous_object_call"]={
[b]="err_thread_non_thread",
[d]="err_ovl_ambiguous_object_call",
[c]="thread-local declaration of %0 follows non-thread-local declaration",
[e]="call to object of type %0 is ambiguous",
[d]="thread-local declaration of A follows non-thread-local declaration",
[i]="call to object of type A is ambiguous",
[e]=k,
[j]=k,
[g]="thread\\-local declaration of (.*?) follows non\\-thread\\-local declaration",
[c]="call to object of type (.*?) is ambiguous",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"d5c0eeda7285",1240172875,"Add more thorough/correct checking for invalid __thread specifiers.","Add more thorough/correct checking for invalid __thread specifiers.\n\nllvm-svn: 69542"},
[f]={t,1236199783,r,s},
[j]={{t,4707,"/// 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      Diag(New->getLocation(), diag::err_thread_non_thread) << New->getDeclName();"}},
[b]={{B,15081,"/// 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  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(Object.get()->getBeginLoc(), PDiag(diag::err_ovl_ambiguous_object_call) << Object.get()->getType() << Object.get()->getSourceRange()), *this, OCD_AmbiguousCandidates, Args);"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx11-thread-local.cpp"]={"clang/test/SemaCXX/cxx11-thread-local.cpp:11:21: error: thread-local declaration of \'b\' follows non-thread-local declaration"}
["clang/test/SemaCXX/overloaded-operator.cpp"]={"clang/test/SemaCXX/overloaded-operator.cpp:211:3: error: call to object of type \'ConvertToFunc\' is ambiguous","clang/test/SemaCXX/overloaded-operator.cpp:216:3: error: call to object of type \'ConvertToFuncDerived\' is ambiguous"}
}
}
},
},
["err_thread_nontrivial_dtor"]={
["err_ovl_ambiguous_oper_binary"]={
[b]="err_thread_nontrivial_dtor",
[d]="err_ovl_ambiguous_oper_binary",
[c]="type of thread-local variable has non-trivial destruction",
[e]="use of overloaded operator \'%0\' is ambiguous (with operand types %1 and %2)",
[d]="type of thread-local variable has non-trivial destruction",
[i]="use of overloaded operator \'A\' is ambiguous (with operand types B and C)",
[e]=k,
[j]=k,
[g]="type of thread\\-local variable has non\\-trivial destruction",
[c]="use of overloaded operator \'(.*?)\' is ambiguous \\(with operand types (.*?) and (.*?)\\)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"6ea1a4d1dcd6",1365970291,"Diagnose if a __thread or _Thread_local variable has a non-constant initializer","Diagnose if a __thread or _Thread_local variable has a non-constant initializer\nor non-trivial destructor.\n\nllvm-svn: 179491"},
[f]={"052caec1f3ff",1289678798,"When complaining about ambiguous overload resolution for a unary or","When complaining about ambiguous overload resolution for a unary or\nbinary operator, provide the types.\n\nllvm-svn: 119008"},
[j]={{t,14099,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  if (var->getTLSKind() == VarDecl::TLS_Static) {\n    if (var->getType().isDestructedType()) {\n     // ...\n      Diag(var->getLocation(), diag::err_thread_nontrivial_dtor);"}},
[b]={{B,14284,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_ambiguous_oper_binary) << BinaryOperator::getOpcodeStr(Opc) << Args[0]->getType() << Args[1]->getType() << Args[0]->getSourceRange() << Args[1]->getSourceRange()), *this, OCD_AmbiguousCandidates, Args, BinaryOperator::getOpcodeStr(Opc), OpLoc);"},{B,14618,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n // ...\n  case OR_Ambiguous:\n    if (Args.size() == 2) {\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(LLoc, PDiag(diag::err_ovl_ambiguous_oper_binary) << \"[]\" << Args[0]->getType() << Args[1]->getType() << Args[0]->getSourceRange() << Range), *this, OCD_AmbiguousCandidates, Args, \"[]\", LLoc);"}},
[l]={
[l]={
["clang/test/Sema/thread-specifier.c"]={"clang/test/Sema/thread-specifier.c:109:12: error: type of thread-local variable has non-trivial destruction"}
["clang/test/SemaCXX/builtin-ptrtomember-overload-1.cpp"]={"clang/test/SemaCXX/builtin-ptrtomember-overload-1.cpp:43:19: error: use of overloaded operator \'->*\' is ambiguous (with operand types \'C1\' and \'int E::*\')"}
}
}
},
},
["err_thread_thread_different_kind"]={
["err_ovl_ambiguous_oper_unary"]={
[b]="err_thread_thread_different_kind",
[d]="err_ovl_ambiguous_oper_unary",
[c]="thread-local declaration of %0 with %select{static|dynamic}1 initialization follows declaration with %select{dynamic|static}1 initialization",
[e]="use of overloaded operator \'%0\' is ambiguous (operand type %1)",
[d]={{nil,nil,{"thread-local declaration of A with ",{"static","dynamic"}," initialization follows declaration with ",{"dynamic","static"}," initialization"}}},
[i]="use of overloaded operator \'A\' is ambiguous (operand type B)",
[e]=k,
[j]=k,
[g]="thread\\-local declaration of (.*?) with (?:static|dynamic) initialization follows declaration with (?:dynamic|static) initialization",
[c]="use of overloaded operator \'(.*?)\' is ambiguous \\(operand type (.*?)\\)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"fd3834f7a1cc",1365821034,"Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST.","Annotate flavor of TLS variable (statically or dynamically initialized) onto the AST.\n\nllvm-svn: 179447"},
[f]={"052caec1f3ff",1289678798,"When complaining about ambiguous overload resolution for a unary or","When complaining about ambiguous overload resolution for a unary or\nbinary operator, provide the types.\n\nllvm-svn: 119008"},
[j]={{t,4717,"/// 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   // ...\n   } else {\n     // ...\n      Diag(New->getLocation(), diag::err_thread_thread_different_kind) << New->getDeclName() << (New->getTLSKind() == VarDecl::TLS_Dynamic);"}},
[b]={{B,13796,"/// Create a unary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'*\').\n///\n/// \\param Opc The UnaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedUnaryOp().\n///\n/// \\param Input The input argument.\nExprResult Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *Input, bool PerformADL) {\n  // ...\n  case OR_Ambiguous:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_ambiguous_oper_unary) << UnaryOperator::getOpcodeStr(Opc) << Input->getType() << Input->getSourceRange()), *this, OCD_AmbiguousCandidates, ArgsArray, UnaryOperator::getOpcodeStr(Opc), OpLoc);"},{B,15289,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n // ...\n case OR_Ambiguous:\n   CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_ambiguous_oper_unary) << \"->\" << Base->getType() << Base->getSourceRange()), *this, OCD_AmbiguousCandidates, Base);"}},
[l]={
[l]={
["clang/test/Sema/thread-specifier.c"]={"clang/test/Sema/thread-specifier.c:74:19: error: thread-local declaration of \'t17\' with static initialization follows declaration with dynamic initialization","clang/test/Sema/thread-specifier.c:78:18: error: thread-local declaration of \'t18\' with dynamic initialization follows declaration with static initialization"}
["clang/test/SemaCXX/ambiguous-builtin-unary-operator.cpp"]={"clang/test/SemaCXX/ambiguous-builtin-unary-operator.cpp:16:3: error: use of overloaded operator \'++\' is ambiguous (operand type \'C\')","clang/test/SemaCXX/ambiguous-builtin-unary-operator.cpp:30:3: error: use of overloaded operator \'++\' is ambiguous (operand type \'C1\')"}
}
}
},
},
["err_thread_unsupported"]={
["err_ovl_ambiguous_subscript_call"]={
[b]="err_thread_unsupported",
[d]={{nil,J,"err_ovl_ambiguous_subscript_call"}},
[c]="thread-local storage is not supported for the current target",
[e]={{nil,J,"call to subscript operator of type %0 is ambiguous"}},
[d]="thread-local storage is not supported for the current target",
[i]={{nil,J,"call to subscript operator of type A is ambiguous"}},
[e]=k,
[j]=k,
[g]="thread\\-local storage is not supported for the current target",
[c]="call to subscript operator of type (.*?) is ambiguous",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,J,m}},
[f]={"daea3f62b561",1240177713,"Print an error for uses of __thread on targets which don\'t support it.","Print an error for uses of __thread on targets which don\'t support it.\n\nllvm-svn: 69553"},
[f]={"f9c3310d32c6",1616787805,"[OPENMP]Fix PR49366: crash on VLAs in task untied regions.","[OPENMP]Fix PR49366: crash on VLAs in task untied regions.\n\nWe need to capture the local variables into a record in task untied\nregions but clang does not support record with VLA data members.\n\nDifferential Revision: https://reviews.llvm.org/D99436"},
[j]={{t,7779,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (DeclSpec::TSCS TSCS = D.getDeclSpec().getThreadStorageClassSpec()) {\n   // C++11 [dcl.stc]p4:\n    //  When thread_local is applied to a variable of block scope the\n    //  storage-class-specifier static is implied if it does not appear\n    //  explicitly.\n   // Core issue: \'static\' is not implied if the variable is declared\n    //  \'extern\'.\n    if (NewVD->hasLocalStorage() && (SCSpec != DeclSpec::SCS_unspecified || TSCS != DeclSpec::TSCS_thread_local || !DC->isFunctionOrMethod()))\n    // ...\n    else if (!Context.getTargetInfo().isTLSSupported()) {\n      if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n      // ...\n      } else\n        Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{t,7903,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n    if (EmitTLSUnsupportedError && ((getLangOpts().CUDA && DeclAttrsMatchCUDAMode(getLangOpts(), NewVD)) || (getLangOpts().OpenMPIsTargetDevice && OMPDeclareTargetDeclAttr::isDeclareTargetDeclaration(NewVD))))\n      Diag(D.getDeclSpec().getThreadStorageClassSpecLoc(), diag::err_thread_unsupported);"},{t,7908,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (getLangOpts().CUDA || getLangOpts().OpenMPIsTargetDevice || getLangOpts().SYCLIsDevice) {\n    // ...\n    if (EmitTLSUnsupportedError && (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)))\n      targetDiag(D.getIdentifierLoc(), diag::err_thread_unsupported);"},{M,7306,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!S.Context.getTargetInfo().isTLSSupported()) {\n    S.Diag(AL.getLoc(), diag::err_thread_unsupported);"},{n,396,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // ...\n  if (LangOpts.SYCLIsDevice || (LangOpts.OpenMP && LangOpts.OpenMPIsTargetDevice)) {\n    if (!Context.getTargetInfo().isTLSSupported())\n      if (const auto *VD = dyn_cast<VarDecl>(D))\n        if (VD->getTLSKind() != VarDecl::TLS_None)\n          targetDiag(*Locs.begin(), diag::err_thread_unsupported);"}},
[b]={{B,14625,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n  // ...\n  case OR_Ambiguous:\n    if (Args.size() == 2) {\n    // ...\n    } else {\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(LLoc, PDiag(diag::err_ovl_ambiguous_subscript_call) << Args[0]->getType() << Args[0]->getSourceRange() << Range), *this, OCD_AmbiguousCandidates, Args, \"[]\", LLoc);"}},
[l]={
[l]={
["clang/test/SemaSYCL/prohibit-thread-local.cpp"]={"clang/test/SemaSYCL/prohibit-thread-local.cpp:29:9: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:31:9: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:33:12: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:35:12: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:18:26: error: thread-local storage is not supported for the current target","clang/test/SemaSYCL/prohibit-thread-local.cpp:20:20: error: thread-local storage is not supported for the current target"}
["clang/test/SemaCXX/cxx2b-overloaded-operator.cpp"]={"clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:51:20: error: call to subscript operator of type \'S\' is ambiguous"}
}
}
},
},
["err_three_way_vector_comparison"]={
["err_ovl_deleted_call"]={
[b]={{nil,u,"err_three_way_vector_comparison"}},
[d]="err_ovl_deleted_call",
[c]={{nil,u,"three-way comparison between vectors is not supported"}},
[e]={{nil,v,"call to deleted function %0"},{u,nil,"call to %select{unavailable|deleted}0 function %1%2"}},
[d]={{nil,u,"three-way comparison between vectors is not supported"}},
[i]={{nil,v,"call to deleted function A"},{u,nil,{"call to ",{Lb,Eb}," function BC"}}},
[e]=k,
[j]=k,
[g]="three\\-way comparison between vectors is not supported",
[c]="call to deleted function (.*?)",
[h]=a,
[h]=a,
[i]={{nil,u,y}},
[g]=m,
[f]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[f]={t,1236199783,r,s},
[j]={{n,13510,"/// CheckVectorCompareOperands - vector comparisons are a clang extension that\n/// operates on extended vector types. Instead of producing an IntTy result,\n/// like a scalar comparison, a vector comparison produces a vector of integer\n/// types.\nQualType Sema::CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (Opc == BO_Cmp) {\n    Diag(Loc, diag::err_three_way_vector_comparison);"},{n,13671,"QualType Sema::CheckSizelessVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  if (Opc == BO_Cmp) {\n    Diag(Loc, diag::err_three_way_vector_comparison);"}},
[b]={{"clang/lib/ARCMigrate/TransGCCalls.cpp",56,"class GCCollectableCallsChecker : public RecursiveASTVisitor<GCCollectableCallsChecker> {\n  // ...\n bool VisitCallExpr(CallExpr *E) {\n   // ...\n    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(CEE)) {\n      if (FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(DRE->getDecl())) {\n       // ...\n        if (FD->getIdentifier() == NSMakeCollectableII) {\n         // ...\n          TA.clearDiagnostic(diag::err_unavailable, diag::err_unavailable_message,\n                             diag::err_ovl_deleted_call, // ObjC++"},{N,2627,"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_Deleted: {\n    if (Diagnose) {\n      Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_deleted_call) << R.getLookupName() << Range), S, OCD_AllCandidates, Args);"},{N,3888,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  // ...\n  case OR_Deleted: {\n    Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_deleted_call) << R.getLookupName() << Range), S, OCD_AllCandidates, Args);"},{B,13544,"/// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns\n/// the completed call expression. If overload resolution fails, emits\n/// diagnostics and returns ExprError()\nstatic ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, OverloadCandidateSet *CandidateSet, OverloadCandidateSet::iterator *Best, OverloadingResult OverloadResult, bool AllowTypoCorrection) {\n  // ...\n  case OR_Deleted: {\n    CandidateSet->NoteCandidates(PartialDiagnosticAt(Fn->getBeginLoc(), SemaRef.PDiag(diag::err_ovl_deleted_call) << ULE->getName() << Fn->getSourceRange()), SemaRef, OCD_AllCandidates, Args);"}},
[l]={
[l]={
["clang/test/SemaCXX/compare-cxx2a.cpp"]={"clang/test/SemaCXX/compare-cxx2a.cpp:419:15: error: three-way comparison between vectors is not supported"}
["clang/test/CXX/over/over.match/over.match.best/over.best.ics/over.ics.scs/p3.cpp"]={"clang/test/CXX/over/over.match/over.match.best/over.best.ics/over.ics.scs/p3.cpp:10:3: error: call to deleted function \'f\'"}
}
}
},
},
["err_throw_abstract_type"]={
["err_ovl_deleted_comparison"]={
[b]="err_throw_abstract_type",
[d]={{nil,w,"err_ovl_deleted_comparison"}},
[c]="cannot throw an object of abstract type %0",
[e]={{nil,w,"object of type %0 cannot be compared because its %1 is implicitly deleted"}},
[d]="cannot throw an object of abstract type A",
[i]={{nil,w,"object of type A cannot be compared because its B is implicitly deleted"}},
[e]=k,
[j]=k,
[g]="cannot throw an object of abstract type (.*?)",
[c]="object of type (.*?) cannot be compared because its (.*?) is implicitly deleted",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,w,m}},
[f]={"e8154339f46e",1271354739,"Diagnose attempts to throw an abstract class type.","Diagnose attempts to throw an abstract class type.\n\nllvm-svn: 101381"},
[f]={"5253d9138eb3",1573070592,"[c++20] Determine whether a defaulted comparison should be deleted or","[c++20] Determine whether a defaulted comparison should be deleted or\nconstexpr."},
[j]={{J,1011,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  // ...\n  if (!isPointer || !Ty->isVoidType()) {\n   // ...\n   if (RequireNonAbstractType(ThrowLoc, ExceptionObjectTy, diag::err_throw_abstract_type, E))"}},
[b]={{B,14303,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Deleted:\n    if (isImplicitlyDeleted(Best->Function)) {\n     // ...\n     if (DFK.isSpecialMember()) {\n      // ...\n      } else {\n        // ...\n        Diag(OpLoc, diag::err_ovl_deleted_comparison) << Args[0]->getType() << DeletedFD;"}},
[l]={
[l]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:112:5: error: cannot throw an object of abstract type \'foo\'"}
["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:24:10: error: object of type \'A1\' cannot be compared because its \'operator==\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:25:10: error: object of type \'A1\' cannot be compared because its \'operator==\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:26:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:27:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:28:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:29:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:30:10: error: object of type \'A1\' cannot be compared because its \'operator<=>\' is implicitly deleted"}
}
}
},
},
["err_throw_incomplete"]={
["err_ovl_deleted_conversion_in_cast"]={
[b]="err_throw_incomplete",
[d]="err_ovl_deleted_conversion_in_cast",
[c]="cannot throw object of incomplete type %0",
[e]={{nil,p,"%select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2 uses deleted function"},{w,nil,"%select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 uses deleted function"}},
[d]="cannot throw object of incomplete type A",
[i]={{nil,p,{{a,qb,tb,sb,mb,rb,a}," from B to C uses deleted function"}},{w,nil,{{a,qb,tb,sb,mb,rb}," from B to C uses deleted function"}}},
[e]=k,
[j]=k,
[g]="cannot throw object of incomplete type (.*?)",
[c]="(?:|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?) uses deleted function",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot...","Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes.\n\nllvm-svn: 70242"},
[f]={"909acf820969",1297708450,"Provide overload diagnostics when explicit casts involving class types fail.","Provide overload diagnostics when explicit casts involving class types fail.\nPR8626.\n\nllvm-svn: 125506"},
[j]={{J,1001,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  // ...\n  if (!isPointer || !Ty->isVoidType()) {\n    if (RequireCompleteType(ThrowLoc, Ty, isPointer ? diag::err_throw_incomplete_ptr : diag::err_throw_incomplete, E->getSourceRange()))"}},
[b]={{cb,503,"/// Try to diagnose a failed overloaded cast.  Returns true if\n/// diagnostics were emitted.\nstatic bool tryDiagnoseOverloadedCast(Sema &S, CastType CT, SourceRange range, Expr *src, QualType destType, bool listInitialization) {\n  // ...\n  case OR_Deleted:\n    msg = diag::err_ovl_deleted_conversion_in_cast;"}},
[l]={
[l]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:37:3: error: cannot throw object of incomplete type \'void\'"}
["clang/test/SemaCXX/deleted-function.cpp"]={"clang/test/SemaCXX/deleted-function.cpp:78:15: error: C-style cast from \'int\' to \'DelCtor\' uses deleted function","clang/test/SemaCXX/deleted-function.cpp:79:15: error: functional-style cast from \'int\' to \'DelCtor\' uses deleted function"}
}
}
},
},
["err_throw_incomplete_ptr"]={
["err_ovl_deleted_init"]={
[b]="err_throw_incomplete_ptr",
[d]="err_ovl_deleted_init",
[c]="cannot throw pointer to object of incomplete type %0",
[e]={{nil,v,"call to deleted constructor of %0"},{u,nil,"call to %select{unavailable|deleted}0 constructor of %1"}},
[d]="cannot throw pointer to object of incomplete type A",
[i]={{nil,v,"call to deleted constructor of A"},{u,nil,{"call to ",{Lb,Eb}," constructor of B"}}},
[e]=k,
[j]=k,
[g]="cannot throw pointer to object of incomplete type (.*?)",
[c]="call to deleted constructor of (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"4de47b445b96",1240864051,"Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into prot...","Improve validation of C++ exception handling: diagnose throwing incomplete types and jumps into protected try-catch scopes.\n\nllvm-svn: 70242"},
[f]={t,1236199783,r,s},
[j]={{J,1000,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  // ...\n  if (!isPointer || !Ty->isVoidType()) {\n   if (RequireCompleteType(ThrowLoc, Ty, isPointer ? diag::err_throw_incomplete_ptr : diag::err_throw_incomplete, E->getSourceRange()))"}},
[b]={{kb,9922,"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_Deleted: {\n      // ...\n      if (Ovl != OR_Deleted) {\n       S.Diag(Kind.getLocation(), diag::err_ovl_deleted_init) << DestType << ArgsRange;"},{kb,9936,"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_Deleted: {\n      // ...\n      // If this is a defaulted or implicitly-declared function, then\n      // it was implicitly deleted. Make it clear that the deletion was\n      // implicit.\n      if (S.isImplicitlyDeleted(Best->Function))\n      // ...\n      else\n        S.Diag(Kind.getLocation(), diag::err_ovl_deleted_init) << DestType << ArgsRange;"}},
[l]={
[l]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:38:3: error: cannot throw pointer to object of incomplete type \'A\'"}
["clang/test/SemaCXX/cxx11-call-to-deleted-constructor.cpp"]={"clang/test/SemaCXX/cxx11-call-to-deleted-constructor.cpp:37:12: error: call to deleted constructor of \'Matrix<double> &&\'"}
}
}
},
},
["err_throw_sizeless"]={
["err_ovl_deleted_member_call"]={
[b]={{nil,s,"err_throw_sizeless"}},
[d]="err_ovl_deleted_member_call",
[c]={{nil,s,"cannot throw object of sizeless type %0"}},
[e]={{nil,v,"call to deleted member function %0"},{u,nil,"call to %select{unavailable|deleted}0 member function %1%2"}},
[d]={{nil,s,"cannot throw object of sizeless type A"}},
[i]={{nil,v,"call to deleted member function A"},{u,nil,{"call to ",{Lb,Eb}," member function BC"}}},
[e]=k,
[j]=k,
[g]="cannot throw object of sizeless type (.*?)",
[c]="call to deleted member function (.*?)",
[h]=a,
[h]=a,
[i]={{nil,s,m}},
[g]=m,
[f]={Q,1576908663,O,N},
[f]={t,1236199783,r,s},
[j]={{J,1006,"/// CheckCXXThrowOperand - Validate the operand of a throw.\nbool Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, QualType ExceptionObjectTy, Expr *E) {\n  // ...\n  if (!isPointer || !Ty->isVoidType()) {\n    // ...\n    if (!isPointer && Ty->isSizelessType()) {\n      Diag(ThrowLoc, diag::err_throw_sizeless) << Ty << E->getSourceRange();"}},
[b]={{B,14838,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  if (isa<MemberExpr>(NakedMemExpr)) {\n  // ...\n  } else {\n    // ...\n    case OR_Deleted:\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(UnresExpr->getMemberLoc(), PDiag(diag::err_ovl_deleted_member_call) << DeclName << MemExprE->getSourceRange()), *this, OCD_AllCandidates, Args);"}},
[l]={
[l]={
["clang/test/SemaCXX/sizeless-1.cpp"]={"clang/test/SemaCXX/sizeless-1.cpp:361:3: error: cannot throw object of sizeless type \'svint8_t\' (aka \'__SVInt8_t\')"}
["clang/test/SemaCXX/co_await-range-for.cpp"]={"clang/test/SemaCXX/co_await-range-for.cpp:53:23: error: call to deleted member function \'await_transform\'","clang/test/SemaCXX/co_await-range-for.cpp:75:23: error: call to deleted member function \'await_transform\'","clang/test/SemaCXX/co_await-range-for.cpp:82:23: error: call to deleted member function \'await_transform\'"}
}
}
},
},
["err_tls_var_aligned_over_maximum"]={
["err_ovl_deleted_object_call"]={
[b]="err_tls_var_aligned_over_maximum",
[d]="err_ovl_deleted_object_call",
[c]="alignment (%0) of thread-local variable %1 is greater than the maximum supported alignment (%2) for a thread-local variable on this target",
[e]={{nil,v,"call to deleted function call operator in type %0"},{u,nil,"call to %select{unavailable|deleted}0 function call operator in type %1%2"}},
[d]="alignment (A) of thread-local variable B is greater than the maximum supported alignment (C) for a thread-local variable on this target",
[i]={{nil,v,"call to deleted function call operator in type A"},{u,nil,{"call to ",{Lb,Eb}," function call operator in type BC"}}},
[e]=k,
[j]=k,
[g]="alignment \\((.*?)\\) of thread\\-local variable (.*?) is greater than the maximum supported alignment \\((.*?)\\) for a thread\\-local variable on this target",
[c]="call to deleted function call operator in type (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"d30e2eefc3cf",1436907152,"Add a \"maximum TLS alignment\" characteristic to the target info, so it","Add a \"maximum TLS alignment\" characteristic to the target info, so it\ncan be different from the normal variable maximum.\nAdd an error diagnostic for when TLS variables exceed maximum TLS alignment.\nCurrenty only PS4 sets an explicit maximum TLS alignment.\n\nPatch by Charles Li!\n\nllvm-svn: 242198"},
[f]={t,1236199783,r,s},
[j]={{t,14367,"void Sema::CheckThreadLocalForLargeAlignment(VarDecl *VD) {\n  // ...\n  // Perform TLS alignment check here after attributes attached to the variable\n // which may affect the alignment have been processed. Only perform the check\n  // if the target has a maximum TLS alignment (zero means no constraints).\n  if (unsigned MaxAlign = Context.getTargetInfo().getMaxTLSAlign()) {\n   // Protect the check so that it\'s not performed on dependent types and\n    // dependent alignments (we can\'t determine the alignment in that case).\n    if (!VD->hasDependentAlignment()) {\n     // ...\n      if (Context.getDeclAlign(VD) > MaxAlignChars) {\n        Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)Context.getDeclAlign(VD).getQuantity() << VD << (unsigned)MaxAlignChars.getQuantity();"},{M,4507,"void Sema::AddAlignedAttr(Decl *D, const AttributeCommonInfo &CI, Expr *E, bool IsPackExpansion) {\n  // ...\n  if (VD) {\n    // ...\n    if (MaxTLSAlign && AlignVal > MaxTLSAlign && VD->getTLSKind() != VarDecl::TLS_None) {\n      Diag(VD->getLocation(), diag::err_tls_var_aligned_over_maximum) << (unsigned)AlignVal << VD << MaxTLSAlign;"}},
[b]={{B,15090,"/// 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  case OR_Deleted:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(Object.get()->getBeginLoc(), PDiag(diag::err_ovl_deleted_object_call) << Object.get()->getType() << Object.get()->getSourceRange()), *this, OCD_AllCandidates, Args);"}}
[l]={
["clang/test/Sema/tls_alignment.cpp"]={"clang/test/Sema/tls_alignment.cpp:37:44: error: alignment (64) of thread-local variable \'bar\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:40:44: error: alignment (64) of thread-local variable \'bar2\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:43:44: error: alignment (64) of thread-local variable \'bar3\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:46:44: error: alignment (64) of thread-local variable \'bar4\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:49:44: error: alignment (64) of thread-local variable \'bar5\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:65:30: error: alignment (64) of thread-local variable \'blah\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:76:51: error: alignment (64) of thread-local variable \'x\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:75:50: error: alignment (64) of thread-local variable \'b<64>\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:72:20: error: alignment (64) of thread-local variable \'b\' is greater than the maximum supported alignment (32) for a thread-local variable on this target","clang/test/Sema/tls_alignment.cpp:73:20: error: alignment (64) of thread-local variable \'c\' is greater than the maximum supported alignment (32) for a thread-local variable on this target"}
}
},
},
["err_too_few_args_in_macro_invoc"]={
["err_ovl_deleted_oper"]={
[b]="err_too_few_args_in_macro_invoc",
[d]="err_ovl_deleted_oper",
[c]="too few arguments provided to function-like macro invocation",
[e]={{nil,v,"overload resolution selected deleted operator \'%0\'"},{u,nil,"overload resolution selected %select{unavailable|deleted}0 operator \'%1\'%2"}},
[d]="too few arguments provided to function-like macro invocation",
[i]={{nil,v,"overload resolution selected deleted operator \'A\'"},{u,nil,{"overload resolution selected ",{Lb,Eb}," operator \'B\'C"}}},
[e]=k,
[j]=k,
[g]="too few arguments provided to function\\-like macro invocation",
[c]="overload resolution selected deleted operator \'(.*?)\'",
[h]=a,
[h]=a,
[i]="Lexical or Preprocessor Issue",
[g]=m,
[f]={ob,1236199783,mb,nb},
[f]={t,1236199783,r,s},
[j]={{nc,1015,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation. This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // ...\n  if (NumActuals < MinArgsExpected) {\n   // There are several cases where too few arguments is ok, handle them now.\n   if (NumActuals == 0 && MinArgsExpected == 1) {\n   // ...\n   } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected ||          // A(x, ...) -> A(X)\n   // ...\n   } else if (!ContainsCodeCompletionTok) {\n     // ...\n     Diag(Tok, diag::err_too_few_args_in_macro_invoc);"},{nc,1357,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  // ...\n  already_lexed:\n    // ...\n    case tok::r_paren:\n     // ...\n     // The last \')\' has been reached; return the value if one found or\n      // a diagnostic and a dummy value.\n     if (Result) {\n     // ...\n      } else {\n       // ...\n       if (!SuppressDiagnostic)\n         PP.Diag(Tok.getLocation(), diag::err_too_few_args_in_macro_invoc);"}},
[b]={{B,13805,"/// Create a unary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'*\').\n///\n/// \\param Opc The UnaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedUnaryOp().\n///\n/// \\param Input The input argument.\nExprResult Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *Input, bool PerformADL) {\n  // ...\n  case OR_Deleted:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_deleted_oper) << UnaryOperator::getOpcodeStr(Opc) << Input->getSourceRange()), *this, OCD_AllCandidates, ArgsArray, UnaryOperator::getOpcodeStr(Opc), OpLoc);"},{B,14314,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///       our overload resolution. This also enables synthesizing a three-way\n///       comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Deleted:\n    // ...\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_deleted_oper) << getOperatorSpelling(Best->Function->getDeclName().getCXXOverloadedOperator()) << Args[0]->getSourceRange() << Args[1]->getSourceRange()), *this, OCD_AllCandidates, Args, BinaryOperator::getOpcodeStr(Opc), OpLoc);"},{B,14634,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n // ...\n case OR_Deleted:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(LLoc, PDiag(diag::err_ovl_deleted_oper) << \"[]\" << Args[0]->getSourceRange() << Range), *this, OCD_AllCandidates, Args, \"[]\", LLoc);"},{B,15297,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n // ...\n case OR_Deleted:\n   CandidateSet.NoteCandidates(PartialDiagnosticAt(OpLoc, PDiag(diag::err_ovl_deleted_oper) << \"->\" << Base->getSourceRange()), *this, OCD_AllCandidates, Base);"}},
[l]={
[l]={
["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:20:5: error: too few arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:21:6: error: too few arguments provided to function-like macro invocation"}
["clang/test/SemaCXX/rval-references-examples.cpp"]={"clang/test/SemaCXX/rval-references-examples.cpp:80:6: error: overload resolution selected deleted operator \'=\'"}
}
}
},
},
["err_too_large_for_fixed_point"]={
["err_ovl_deleted_special_init"]={
[b]={{nil,H,"err_too_large_for_fixed_point"}},
[d]="err_ovl_deleted_special_init",
[c]={{nil,H,"this value is too large for this fixed point type"}},
[e]="call to implicitly-deleted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function}0 of %1",
[d]={{nil,H,"this value is too large for this fixed point type"}},
[i]={{nil,nil,{"call to implicitly-deleted ",{"default constructor","copy constructor","move constructor","copy assignment operator","move assignment operator","destructor","function"}," of B"}}},
[e]=k,
[j]=k,
[g]="this value is too large for this fixed point type",
[c]="call to implicitly\\-deleted (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function) of (.*?)",
[h]=a,
[h]=a,
[i]={{nil,H,y}},
[g]=m,
[f]={"db01c3adc6f9",1529515180,"[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals","[Fixed Point Arithmetic] Fixed Point Precision Bits and Fixed Point Literals\n\nThis diff includes the logic for setting the precision bits for each primary fixed point type in the target info and logic for initializing a fixed point literal.\n\nFixed point literals are declared using the suffixes\n\n```\nhr: short _Fract\nuhr: unsigned short _Fract\nr: _Fract\nur: unsigned _Fract\nlr: long _Fract\nulr: unsigned long _Fract\nhk: short _Accum\nuhk: unsigned short _Accum\nk: _Accum\nuk: unsigned _Accum\n```\nErrors are also thrown for illegal literal values\n\n```\nunsigned short _Accum u_short_accum = 256.0uhk;  // expected-error{{the integral part of this literal is too large for this unsigned _Accum type}}\n```\n\nDifferential Revision: https://reviews.llvm.org/D46915\n\nllvm-svn: 335148"},
[f]={"74f7d50f6a5b",1329334432,"When overload resolution picks an implicitly-deleted special member","When overload resolution picks an implicitly-deleted special member\nfunction, provide a specialized diagnostic that indicates the kind of\nspecial member function (default constructor, copy assignment\noperator, etc.) and that it was implicitly deleted. Add a hook where\nwe can provide more detailed information later.\n\nllvm-svn: 150611"},
[j]={{n,4010,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.isFixedPointLiteral()) {\n    // ...\n    if (Literal.isFract && Val == MaxVal + 1 && !ValIsZero)\n   // ...\n   else if (Val.ugt(MaxVal) || Overflowed)\n     Diag(Tok.getLocation(), diag::err_too_large_for_fixed_point);"}},
[b]={{kb,9932,"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_Deleted: {\n      // ...\n     // If this is a defaulted or implicitly-declared function, then\n      // it was implicitly deleted. Make it clear that the deletion was\n      // implicit.\n     if (S.isImplicitlyDeleted(Best->Function))\n       S.Diag(Kind.getLocation(), diag::err_ovl_deleted_special_init) << S.getSpecialMember(cast<CXXMethodDecl>(Best->Function)) << DestType << ArgsRange;"}},
[l]={
[l]={
["clang/test/Frontend/fixed_point_errors.c"]={"clang/test/Frontend/fixed_point_errors.c:83:37: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:84:39: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:85:25: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:86:27: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:87:35: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:88:37: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:91:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:92:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:93:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:94:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:95:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:96:43: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:99:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:100:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:101:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:102:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:103:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:104:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:107:12: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:111:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:112:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:113:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:114:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:115:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:116:48: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:118:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:119:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:120:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:121:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:122:47: error: this value is too large for this fixed point type","clang/test/Frontend/fixed_point_errors.c:123:47: error: this value is too large for this fixed point type"}
["clang/test/SemaCXX/dr1301.cpp"]={"clang/test/SemaCXX/dr1301.cpp:17:9: error: call to implicitly-deleted default constructor of \'C\'","clang/test/SemaCXX/dr1301.cpp:23:9: error: call to implicitly-deleted default constructor of \'D\'","clang/test/SemaCXX/dr1301.cpp:40:9: error: call to implicitly-deleted default constructor of \'G\'","clang/test/SemaCXX/dr1301.cpp:52:9: error: call to implicitly-deleted default constructor of \'I\'","clang/test/SemaCXX/dr1301.cpp:66:10: error: call to implicitly-deleted default constructor of \'K\'","clang/test/SemaCXX/dr1301.cpp:67:10: error: call to implicitly-deleted default constructor of \'K\'"}
}
}
},
},
["err_too_many_args_in_macro_invoc"]={
["err_ovl_deleted_special_oper"]={
[b]="err_too_many_args_in_macro_invoc",
[d]="err_ovl_deleted_special_oper",
[c]="too many arguments provided to function-like macro invocation",
[e]="object of type %0 cannot be %select{constructed|copied|moved|assigned|assigned|destroyed}1 because its %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}1 is implicitly deleted",
[d]="too many arguments provided to function-like macro invocation",
[i]={{nil,nil,{"object of type A cannot be ",{"constructed","copied","moved","assigned","assigned","destroyed"}," because its ",{"default constructor","copy constructor","move constructor","copy assignment operator","move assignment operator","destructor"}," is implicitly deleted"}}},
[e]=k,
[j]=k,
[g]="too many arguments provided to function\\-like macro invocation",
[c]="object of type (.*?) cannot be (?:constructed|copied|moved|assigned|assigned|destroyed) because its (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) is implicitly deleted",
[h]=a,
[h]=a,
[i]="Lexical or Preprocessor Issue",
[g]=m,
[f]={ob,1236199783,mb,nb},
[f]={"74f7d50f6a5b",1329334432,"When overload resolution picks an implicitly-deleted special member","When overload resolution picks an implicitly-deleted special member\nfunction, provide a specialized diagnostic that indicates the kind of\nspecial member function (default constructor, copy assignment\noperator, etc.) and that it was implicitly deleted. Add a hook where\nwe can provide more detailed information later.\n\nllvm-svn: 150611"},
[j]={{nc,929,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n // ...\n // If this is not a variadic macro, and too many args were specified, emit\n // an error.\n if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n   // ...\n   Diag(TooManyArgsLoc, diag::err_too_many_args_in_macro_invoc);"},{nc,1037,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation. This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n // ...\n if (NumActuals < MinArgsExpected) {\n  // ...\n  } else if (NumActuals > MinArgsExpected && !MI->isVariadic() && !ContainsCodeCompletionTok) {\n   // ...\n   Diag(MacroName, diag::err_too_many_args_in_macro_invoc);"},{nc,1327,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  // ...\n  already_lexed:\n    // ...\n    case tok::comma:\n      if (!SuppressDiagnostic) {\n        PP.Diag(Tok.getLocation(), diag::err_too_many_args_in_macro_invoc);"}},
[b]={{B,14299,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///       our overload resolution. This also enables synthesizing a three-way\n///       comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Deleted:\n    if (isImplicitlyDeleted(Best->Function)) {\n      // ...\n      if (DFK.isSpecialMember()) {\n        Diag(OpLoc, diag::err_ovl_deleted_special_oper) << Args[0]->getType() << DFK.asSpecialMember();"}},
[l]={
[l]={
["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:11:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:12:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:16:6: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:18:8: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:24:9: error: too many arguments provided to function-like macro invocation","clang/test/Preprocessor/macro_fn.c:27:5: error: too many arguments provided to function-like macro invocation"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:16:11: error: object of type \'(lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:10:18)\' cannot be assigned because its copy assignment operator is implicitly deleted","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:19:11: error: object of type \'(lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:10:18)\' cannot be assigned because its copy assignment operator is implicitly deleted"}
}
}
},
},
["err_toomany_element_decls"]={
["err_ovl_diff_return_type"]={
[b]="err_toomany_element_decls",
[d]="err_ovl_diff_return_type",
[c]="only one element declaration is allowed",
[e]="functions that differ only in their return type cannot be overloaded",
[d]="only one element declaration is allowed",
[i]="functions that differ only in their return type cannot be overloaded",
[e]=k,
[j]=k,
[g]="only one element declaration is allowed",
[c]="functions that differ only in their return type cannot be overloaded",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{S,2296,"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      if (!DS->isSingleDecl())\n        return StmtError(Diag((*DS->decl_begin())->getLocation(), diag::err_toomany_element_decls));"}},
[b]={{G,3939,"/// 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        // ...\n        else\n          Diag(New->getLocation(), diag::err_ovl_diff_return_type) << New->getReturnTypeSourceRange();"}},
[l]={
[l]={
["clang/test/Parser/objc-forcollection-neg-2.m"]={"clang/test/Parser/objc-forcollection-neg-2.m:28:17: error: only one element declaration is allowed"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:163:14: error: functions that differ only in their return type cannot be overloaded","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:174:9: error: functions that differ only in their return type cannot be overloaded"}
}
}
},
},
["err_trailing_requires_clause_on_deduction_guide"]={
["err_ovl_no_conversion_in_cast"]={
[b]={{nil,u,"err_trailing_requires_clause_on_deduction_guide"}},
[d]="err_ovl_no_conversion_in_cast",
[c]={{nil,u,"deduction guide cannot have a requires clause"}},
[e]="cannot convert %1 to %2 without a conversion operator",
[d]={{nil,u,"deduction guide cannot have a requires clause"}},
[i]="cannot convert B to C without a conversion operator",
[e]=k,
[j]=k,
[g]="deduction guide cannot have a requires clause",
[c]="cannot convert (.*?) to (.*?) without a conversion operator",
[h]=a,
[h]=a,
[i]={{nil,u,m}},
[g]=m,
[f]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension.","Implement VectorType conditional operator GNU extension.\n\nGCC supports the conditional operator on VectorTypes that acts as a\n\'select\' in C++ mode. This patch implements the support. Types are\nconverted as closely to GCC\'s behavior as possible, though in a few\nplaces consistency with our existing vector type support was preferred.\n\nNote that this implementation is different from the OpenCL version in a\nnumber of ways, so it unfortunately required a different implementation.\n\nFirst, the SEMA rules and promotion rules are significantly different.\n\nSecondly, GCC implements COND[i] != 0 ? LHS[i] : RHS[i] (where i is in\nthe range 0- VectorSize, for each element).  In OpenCL, the condition is\nCOND[i] < 0 ? LHS[i]: RHS[i].\n\nIn the process of implementing this, it was also required to make the\nexpression COND ? LHS : RHS type dependent if COND is type dependent,\nsince the type is now dependent on the condition.  For example:\n\n    T ? 1 : 2;\n\nIs not typically type dependent, since the result can be deduced from\nthe operands.  HOWEVER, if T is a VectorType now, it could change this\nto a \'select\' (basically a swizzle with a non-constant mask) with the 1\nand 2 being promoted to vectors themselves.\n\nWhile this is a change, it is NOT a standards incompatible change. Based\non my (and D. Gregor\'s, at the time of writing the code) reading of the\nstandard, the expression is supposed to be type dependent if ANY\nsub-expression is type dependent.\n\nDifferential Revision: https://reviews.llvm.org/D71463"},
[f]={"909acf820969",1297708450,"Provide overload diagnostics when explicit casts involving class types fail.","Provide overload diagnostics when explicit casts involving class types fail.\nPR8626.\n\nllvm-svn: 125506"},
[j]={{t,9257,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  // ...\n if (Name.getNameKind() == DeclarationName::CXXConstructorName) {\n // ...\n  } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n  // ...\n  } else if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName) {\n // ...\n  } else if (Name.getNameKind() == DeclarationName::CXXDeductionGuideName) {\n    if (TrailingRequiresClause)\n      SemaRef.Diag(TrailingRequiresClause->getBeginLoc(), diag::err_trailing_requires_clause_on_deduction_guide) << TrailingRequiresClause->getSourceRange();"}},
[b]={{cb,491,"/// Try to diagnose a failed overloaded castReturns true if\n/// diagnostics were emitted.\nstatic bool tryDiagnoseOverloadedCast(Sema &S, CastType CT, SourceRange range, Expr *src, QualType destType, bool listInitialization) {\n  // ...\n  case OR_No_Viable_Function:\n   if (candidates.empty())\n      msg = diag::err_ovl_no_conversion_in_cast;"}},
[l]={
[l]={
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:68:23: error: deduction guide cannot have a requires clause"}
["clang/test/SemaObjCXX/cstyle-cast.mm"]={"clang/test/SemaObjCXX/cstyle-cast.mm:21:3: error: cannot convert \'X\' to \'id\' without a conversion operator"}
}
}
},
},
["err_trailing_return_in_parens"]={
["err_ovl_no_oper"]={
[b]="err_trailing_return_in_parens",
[d]="err_ovl_no_oper",
[c]="trailing return type may not be nested within parentheses",
[e]="type %0 does not provide a %select{subscript|call}1 operator",
[d]="trailing return type may not be nested within parentheses",
[i]={{nil,nil,{"type A does not provide a ",{"subscript","call"}," operator"}}},
[e]=k,
[j]=k,
[g]="trailing return type may not be nested within parentheses",
[c]="type (.*?) does not provide a (?:subscript|call) operator",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"59006e4338ce",1298335013,"Fix a few auto-related issues:","Fix a few auto-related issues:\n\n * \'auto\' was being rejected on abstract-declarators with trailing return\ntypes and on typedefs with trailing return types. \'auto\' is always\nallowed in these cases. This was found while testing the fix for PR 9278.\n\n * A very poor diagnostic was being issued for auto (f() -> int): \"return\ntype must be \'auto\', not \'auto\'\". This is closely related to PR 9060.\n\n * Trailing return type handling was happening slightly too late,\nresulting in the checks for functions returning arrays and functions\nreturning functions being missed.\n\nllvm-svn: 126166"},
[f]={"0237485287e9",1262829855,"Improve the lead diagnostic for C++ object subscript expressions with","Improve the lead diagnostic for C++ object subscript expressions with\nno viable overloads. Use a different message when the class provides\nno operator[] overloads at all; use it for operator(), too.\n\nPartially addresses PR 5900.\n\nllvm-svn: 92894"},
[j]={{F,5210,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::Function: {\n     // ...\n     // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n       // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n       // ...\n       } else if (FTI.hasTrailingReturnType()) {\n          // T must be exactly \'auto\' at this point. See CWG issue 681.\n          if (isa<ParenType>(T)) {\n            S.Diag(D.getBeginLoc(), diag::err_trailing_return_in_parens) << T << D.getSourceRange();"}},
[b]={{B,14604,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n  // ...\n  case OR_No_Viable_Function: {\n    PartialDiagnostic PD = CandidateSet.empty() ? (PDiag(diag::err_ovl_no_oper) << Args[0]->getType() << /*subscript*/ 0 << Args[0]->getSourceRange() << Range) : (PDiag(diag::err_ovl_no_viable_subscript) << Args[0]->getType() << Args[0]->getSourceRange() << Range);"},{B,15068,"/// 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 case OR_No_Viable_Function: {\n    PartialDiagnostic PD = CandidateSet.empty() ? (PDiag(diag::err_ovl_no_oper) << Object.get()->getType() << /*call*/ 1 << Object.get()->getSourceRange()) : (PDiag(diag::err_ovl_no_viable_object_call) << Object.get()->getType() << Object.get()->getSourceRange());"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p2-cxx0x.cpp:6:1: error: trailing return type may not be nested within parentheses"}
["clang/test/SemaCXX/cxx2b-overloaded-operator.cpp"]={"clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:101:13: error: type \'int[3]\' does not provide a subscript operator","clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:101:13: error: type \'int[3]\' does not provide a subscript operator"}
}
}
},
},
["err_trailing_return_without_auto"]={
["err_ovl_no_viable_conversion_in_cast"]={
[b]="err_trailing_return_without_auto",
[d]="err_ovl_no_viable_conversion_in_cast",
[c]="function with trailing return type must specify return type \'auto\', not %0",
[e]={{nil,p,"no matching conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2"},{w,nil,"no matching conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2"}},
[d]="function with trailing return type must specify return type \'auto\', not A",
[i]={{nil,p,{"no matching conversion for ",{a,qb,tb,sb,mb,rb,a}," from B to C"}},{w,nil,{"no matching conversion for ",{a,qb,tb,sb,mb,rb}," from B to C"}}},
[e]=k,
[j]=k,
[g]="function with trailing return type must specify return type \'auto\', not (.*?)",
[c]="no matching conversion for (?:|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"7fb25418ed72",1285958690,"Implement the C++0x \"trailing return type\" feature, e.g.,","Implement the C++0x \"trailing return type\" feature, e.g.,\n\n  auto f(int) -> int\n\nfrom Daniel Wallin!\n\n(With a few minor bug fixes from me).\n\nllvm-svn: 115322"},
[f]={"909acf820969",1297708450,"Provide overload diagnostics when explicit casts involving class types fail.","Provide overload diagnostics when explicit casts involving class types fail.\nPR8626.\n\nllvm-svn: 125506"},
[j]={{F,5231,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n   // ...\n    case DeclaratorChunk::Function: {\n      // ...\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n       // ...\n       } else if (FTI.hasTrailingReturnType()) {\n         // T must be exactly \'auto\' at this point. See CWG issue 681.\n          if (isa<ParenType>(T)) {\n         // ...\n         } else if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName) {\n         // ...\n          } else if (D.getContext() != DeclaratorContext::LambdaExpr && (T.hasQualifiers() || !isa<AutoType>(T) || cast<AutoType>(T)->getKeyword() != AutoTypeKeyword::Auto || cast<AutoType>(T)->isConstrained())) {\n            S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), diag::err_trailing_return_without_auto) << T << D.getDeclSpec().getSourceRange();"}},
[b]={{cb,493,"/// Try to diagnose a failed overloaded castReturns true if\n/// diagnostics were emitted.\nstatic bool tryDiagnoseOverloadedCast(Sema &S, CastType CT, SourceRange range, Expr *src, QualType destType, bool listInitialization) {\n // ...\n case OR_No_Viable_Function:\n   if (candidates.empty())\n   // ...\n   else\n     msg = diag::err_ovl_no_viable_conversion_in_cast;"}},
[l]={
[l]={
["clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp"]={"clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:41:7: error: function with trailing return type must specify return type \'auto\', not \'Large auto\'"}
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:36:9: error: no matching conversion for C-style cast from \'__v2si\' (vector of 2 \'int\' values) to \'S\'"}
}
}
},
},
["err_two_right_angle_brackets_need_space"]={
["err_ovl_no_viable_function_in_call"]={
[b]="err_two_right_angle_brackets_need_space",
[d]="err_ovl_no_viable_function_in_call",
[c]="a space is required between consecutive right angle brackets (use \'> >\')",
[e]="no matching function for call to %0",
[d]="a space is required between consecutive right angle brackets (use \'> >\')",
[i]="no matching function for call to A",
[e]=k,
[j]=k,
[g]="a space is required between consecutive right angle brackets \\(use \'\\> \\>\'\\)",
[c]="no matching function for call to (.*?)",
[h]=a,
[h]=a,
[i]=G,
[g]=m,
[f]={ob,1236199783,mb,nb},
[f]={t,1236199783,r,s},
[j]={{"clang/lib/Parse/ParseTemplate.cpp",1204,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  // ...\n // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n   // ...\n    unsigned DiagId = diag::err_two_right_angle_brackets_need_space;"}},
[b]={{E,6910,"static void checkDirectCallValidity(Sema &S, const Expr *Fn, FunctionDecl *Callee, MultiExprArg ArgExprs) {\n // ...\n if (const EnableIfAttr *Attr = S.CheckEnableIf(Callee, Fn->getBeginLoc(), ArgExprs, true)) {\n    S.Diag(Fn->getBeginLoc(), isa<CXXMethodDecl>(Callee) ? diag::err_ovl_no_viable_member_function_in_call : diag::err_ovl_no_viable_function_in_call) << Callee << Callee->getSourceRange();"},{N,2604,"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     // ...\n      S.Diag(R.getNameLoc(), diag::err_ovl_no_viable_function_in_call) << R.getLookupName() << Range;"},{N,3873,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n // ...\n case OR_No_Viable_Function:\n    Candidates.NoteCandidates(PartialDiagnosticAt(R.getNameLoc(), S.PDiag(diag::err_ovl_no_viable_function_in_call) << R.getLookupName() << Range), S, OCD_AllCandidates, Args);"},{B,13527,"/// FinishOverloadedCallExpr - given an OverloadCandidateSet, builds and returns\n/// the completed call expression. If overload resolution fails, emits\n/// diagnostics and returns ExprError()\nstatic ExprResult FinishOverloadedCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, OverloadCandidateSet *CandidateSet, OverloadCandidateSet::iterator *Best, OverloadingResult OverloadResult, bool AllowTypoCorrection) {\n // ...\n case OR_No_Viable_Function: {\n   // ...\n    CandidateSet->NoteCandidates(PartialDiagnosticAt(Fn->getBeginLoc(), SemaRef.PDiag(diag::err_ovl_no_viable_function_in_call) << ULE->getName() << Fn->getSourceRange()), SemaRef, OCD_AllCandidates, Args);"},{B,15364,"/// BuildLiteralOperatorCall - Build a UserDefinedLiteral by creating a call to\n/// a literal operator described by the provided lookup results.\nExprResult Sema::BuildLiteralOperatorCall(LookupResult &R, DeclarationNameInfo &SuffixInfo, ArrayRef<Expr *> Args, SourceLocation LitEndLoc, TemplateArgumentListInfo *TemplateArgs) {\n // ...\n  case OR_No_Viable_Function:\n    CandidateSet.NoteCandidates(PartialDiagnosticAt(UDSuffixLoc, PDiag(diag::err_ovl_no_viable_function_in_call) << R.getLookupName()), *this, OCD_AllCandidates, Args);"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.param/p15.cpp"]={"clang/test/CXX/temp/temp.param/p15.cpp:6:8: error: a space is required between consecutive right angle brackets (use \'> >\')","clang/test/CXX/temp/temp.param/p15.cpp:8:12: error: a space is required between consecutive right angle brackets (use \'> >\')","clang/test/CXX/temp/temp.param/p15.cpp:9:5: error: a space is required between consecutive right angle brackets (use \'> >\')"}
["clang/test/SemaOpenCL/queue_t_overload.cl"]={"clang/test/SemaOpenCL/queue_t_overload.cl:10:3: error: no matching function for call to \'foo\'","clang/test/SemaOpenCL/queue_t_overload.cl:11:3: error: no matching function for call to \'foo\'"}
}
}
},
},
["err_type_attribute_wrong_type"]={
["err_ovl_no_viable_function_in_init"]={
[b]="err_type_attribute_wrong_type",
[d]="err_ovl_no_viable_function_in_init",
[c]="\'%0\' only applies to %select{function|pointer|Objective-C object or block pointer}1 types; type here is %2",
[e]="no matching constructor for initialization of %0",
[d]={{nil,nil,{"\'A\' only applies to ",{L,"pointer","Objective-C object or block pointer"}," types; type here is C"}}},
[i]="no matching constructor for initialization of A",
[e]=k,
[j]=k,
[g]="\'(.*?)\' only applies to (?:function|pointer|Objective\\-C object or block pointer) types; type here is (.*?)",
[c]="no matching constructor for initialization of (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={sb,1625925174,qb,rb},
[f]={t,1236199783,r,s},
[j]={{F,108,"/// diagnoseBadTypeAttribute - Diagnoses a type attribute which\n/// doesn\'t apply to the given type.\nstatic void diagnoseBadTypeAttribute(Sema &S, const ParsedAttr &attr, QualType type) {\n  // ...\n  S.Diag(loc, attr.isRegularKeywordAttribute() ? diag::err_type_attribute_wrong_type : diag::warn_type_attribute_wrong_type) << name << WhichType << type;"}},
[b]={{kb,9912,"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      // ...\n      FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), S.PDiag(diag::err_ovl_no_viable_function_in_init) << DestType << ArgsRange), S, OCD_AllCandidates, Args);"}},
[l]={
[l]={
["clang/test/Parser/cxx0x-keyword-attributes.cpp"]={"clang/test/Parser/cxx0x-keyword-attributes.cpp:38:1: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:39:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:41:16: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:42:7: error: \'__arm_streaming\' only applies to function types; type here is \'int *\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:43:7: error: \'__arm_streaming\' only applies to function types; type here is \'int &\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:44:8: error: \'__arm_streaming\' only applies to function types; type here is \'int &&\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:45:20: error: \'__arm_streaming\' only applies to function types; type here is \'int[1]\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:72:9: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:72:25: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:9: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:25: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:43: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:73:59: error: \'__arm_streaming\' only applies to function types; type here is \'class c\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:91:1: error: \'__arm_streaming\' only applies to function types; type here is \'struct with_init_declarators\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:95:3: error: \'__arm_streaming\' only applies to function types; type here is \'struct with_init_declarators\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:107:14: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:37: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:53: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:1: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:17: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:80: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:109:96: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:135:7: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:135:34: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:140:9: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:141:30: error: \'__arm_streaming\' only applies to function types; type here is \'T\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:162:9: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:166:30: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:167:41: error: \'__arm_streaming\' only applies to function types; type here is \'struct struct_attr\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:212:15: error: \'__arm_streaming\' only applies to function types; type here is \'void\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:238:29: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:238:52: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:240:26: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:248:32: error: \'__arm_streaming\' only applies to function types; type here is \'int[5]\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:253:7: error: \'__arm_streaming\' only applies to function types; type here is \'bool\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:254:13: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:256:12: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:256:39: error: \'__arm_streaming\' only applies to function types; type here is \'char\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:266:10: error: \'__arm_streaming\' only applies to function types; type here is \'bool\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:273:8: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:283:37: error: \'__arm_streaming\' only applies to function types; type here is \'unsigned int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:285:39: error: \'__arm_streaming\' only applies to function types; type here is \'unsigned long\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:287:29: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:287:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:292:5: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:294:6: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:313:10: error: \'__arm_streaming\' only applies to function types; type here is \'int\'","clang/test/Parser/cxx0x-keyword-attributes.cpp:318:15: error: \'__arm_streaming\' only applies to function types; type here is \'int\'"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:13:21: error: no matching constructor for initialization of \'decltype(lambda1)\' (aka \'(lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:10:18)\')"}
}
}
},
},
["err_type_available_only_in_default_eval_method"]={
["err_ovl_no_viable_literal_operator"]={
[b]="err_type_available_only_in_default_eval_method",
[d]="err_ovl_no_viable_literal_operator",
[c]="cannot use type \'%0\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
[e]="no matching literal operator for call to %0%select{| with argument of type %2| with arguments of types %2 and %3}1%select{| or \'const char *\'}4%select{|, and no matching literal operator template}5",
[d]="cannot use type \'A\' within \'#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
[i]={{nil,nil,{"no matching literal operator for call to A",{a," with argument of type C"," with arguments of types C and D"},{a," or \'const char *\'"},{a,", and no matching literal operator template"}}}},
[e]=k,
[j]=k,
[g]="cannot use type \'(.*?)\' within \'\\#pragma clang fp eval_method\'; type is set according to the default eval method for the translation unit",
[c]="no matching literal operator for call to (.*?)(?:| with argument of type (.*?)| with arguments of types (.*?) and (.*?))(?:| or \'const char \\*\')(?:|, and no matching literal operator template)",
[h]=a,
[h]=a,
[i]=y,
[g]=m,
[f]={sb,1625925174,qb,rb},
[f]={"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]={{n,384,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  // ...\n  if (D->hasAttr<AvailableOnlyInDefaultEvalMethodAttr>()) {\n    if (getLangOpts().getFPEvalMethod() != LangOptions::FPEvalMethodKind::FEM_UnsetOnCommandLine && PP.getLastFPEvalPragmaLocation().isValid() && PP.getCurrentFPEvalMethod() != getLangOpts().getFPEvalMethod())\n      Diag(D->getLocation(), diag::err_type_available_only_in_default_eval_method) << D->getName();"}},
[b]={{"clang/lib/Sema/SemaLookup.cpp",3781,"/// LookupLiteralOperator - Determine which literal operator should be used for\n/// a user-defined literal, per C++11 [lex.ext].\n///\n/// Normal overload resolution is not used to select which literal operator to\n/// call for a user-defined literal. Look up the provided literal operator name,\n/// and filter the results to the appropriate set for the given argument types.\nSema::LiteralOperatorLookupResult Sema::LookupLiteralOperator(Scope *S, LookupResult &R, ArrayRef<QualType> ArgTys, bool AllowRaw, bool AllowTemplate, bool AllowStringTemplatePack, bool DiagnoseMissing, StringLiteral *StringLit) {\n  // ...\n  // Didn\'t find anything we could use.\n  if (DiagnoseMissing) {\n    Diag(R.getNameLoc(), diag::err_ovl_no_viable_literal_operator) << R.getLookupName() << (int)ArgTys.size() << ArgTys[0] << (ArgTys.size() == 2 ? ArgTys[1] : QualType()) << AllowRaw << (AllowTemplate || AllowStringTemplatePack);"}},
[l]={
[l]={
["clang/test/Sema/fp-eval-pragma-with-float-double_t-1.c"]={Hb,Ib,Hb,Ib,Hb,Ib,Hb,Ib,Hb,Ib,Hb,Ib,Hb,Ib,Hb,Ib,Hb,Ib}
["clang/test/Lexer/half-literal.cpp"]={"clang/test/Lexer/half-literal.cpp:2:14: error: no matching literal operator for call to \'operator\"\"h\' with argument of type \'long double\' or \'const char *\', and no matching literal operator template"}
}
}
},
},
["err_type_constraint_missing_arguments"]={
["err_ovl_no_viable_member_function_in_call"]={
[b]={{nil,u,"err_type_constraint_missing_arguments"}},
[d]="err_ovl_no_viable_member_function_in_call",
[c]={{nil,u,"%0 requires more than 1 template argument; provide the remaining arguments explicitly to use it here"}},
[e]="no matching member function for call to %0",
[d]={{nil,u,"A requires more than 1 template argument; provide the remaining arguments explicitly to use it here"}},
[i]="no matching member function for call to A",
[e]=k,
[j]=k,
[g]="(.*?) requires more than 1 template argument; provide the remaining arguments explicitly to use it here",
[c]="no matching member function for call to (.*?)",
[h]=a,
[h]=a,
[i]={{nil,u,m}},
[g]=m,
[f]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","Improve static checks for sprintf and __builtin___sprintf_chk\n\nImplement a pessimistic evaluator of the minimal required size for a buffer\nbased on the format string, and couple that with the fortified version to emit a\nwarning when the buffer size is lower than the lower bound computed from the\nformat string.\n\nDifferential Revision: https://reviews.llvm.org/D71566"},
[f]={t,1236199783,r,s},
[j]={{o,1130,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n  // ...\n  if (!WereArgsSpecified && CD->getTemplateParameters()->getMinRequiredArguments() > 1) {\n   Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_missing_arguments) << CD;"}},
[b]={{E,6907,"static void checkDirectCallValidity(Sema &S, const Expr *Fn, FunctionDecl *Callee, MultiExprArg ArgExprs) {\n  // ...\n if (const EnableIfAttr *Attr = S.CheckEnableIf(Callee, Fn->getBeginLoc(), ArgExprs, true)) {\n    S.Diag(Fn->getBeginLoc(), isa<CXXMethodDecl>(Callee) ? diag::err_ovl_no_viable_member_function_in_call : diag::err_ovl_no_viable_function_in_call) << Callee << Callee->getSourceRange();"},{B,14824,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  if (isa<MemberExpr>(NakedMemExpr)) {\n  // ...\n  } else {\n    // ...\n    case OR_No_Viable_Function:\n      CandidateSet.NoteCandidates(PartialDiagnosticAt(UnresExpr->getMemberLoc(), PDiag(diag::err_ovl_no_viable_member_function_in_call) << DeclName << MemExprE->getSourceRange()), *this, OCD_AllCandidates, Args);"},{B,14903,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  // In the case the method to call was not selected by the overloading\n  // resolution process, we still need to handle the enable_if attribute. Do\n  // that here, so it will not hide previous -- and more relevant -- errors.\n  if (auto *MemE = dyn_cast<MemberExpr>(NakedMemExpr)) {\n    if (const EnableIfAttr *Attr = CheckEnableIf(Method, LParenLoc, Args, true)) {\n     Diag(MemE->getMemberLoc(), diag::err_ovl_no_viable_member_function_in_call) << Method << Method->getSourceRange();"}},
[l]={
[l]={
["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:65:15: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:66:10: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:67:3: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:68:3: error: \'C1\' requires more than 1 template argument; provide the remaining arguments explicitly to use it here"}
["clang/test/SemaOpenCLCXX/method-overload-address-space.clcpp"]={"clang/test/SemaOpenCLCXX/method-overload-address-space.clcpp:19:10: error: no matching member function for call to \'m1\'"}
}
}
},
},
["err_type_constraint_non_type_concept"]={
["err_ovl_no_viable_object_call"]={
[b]={{nil,u,"err_type_constraint_non_type_concept"}},
[d]="err_ovl_no_viable_object_call",
[c]={{nil,u,"concept named in type constraint is not a type concept"}},
[e]="no matching function for call to object of type %0",
[d]={{nil,u,"concept named in type constraint is not a type concept"}},
[i]="no matching function for call to object of type A",
[e]=k,
[j]=k,
[g]="concept named in type constraint is not a type concept",
[c]="no matching function for call to object of type (.*?)",
[h]=a,
[h]=a,
[i]={{nil,u,m}},
[g]=m,
[f]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","Improve static checks for sprintf and __builtin___sprintf_chk\n\nImplement a pessimistic evaluator of the minimal required size for a buffer\nbased on the format string, and couple that with the fortified version to emit a\nwarning when the buffer size is lower than the lower bound computed from the\nformat string.\n\nDifferential Revision: https://reviews.llvm.org/D71566"},
[f]={t,1236199783,r,s},
[j]={{o,1121,"bool Sema::CheckTypeConstraint(TemplateIdAnnotation *TypeConstr) {\n  // ...\n // C++2a [temp.param]p4:\n //     [...] The concept designated by a type-constraint shall be a type\n  //     concept ([temp.concept]).\n  if (!CD->isTypeConcept()) {\n    Diag(TypeConstr->TemplateNameLoc, diag::err_type_constraint_non_type_concept);"}},
[b]={{B,15071,"/// 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  case OR_No_Viable_Function: {\n    PartialDiagnostic PD = CandidateSet.empty() ? (PDiag(diag::err_ovl_no_oper) << Object.get()->getType() << /*call*/ 1 << Object.get()->getSourceRange()) : (PDiag(diag::err_ovl_no_viable_object_call) << Object.get()->getType() << Object.get()->getSourceRange());"}},
[l]={
[l]={
["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:55:15: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:56:10: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:57:3: error: concept named in type constraint is not a type concept","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:58:3: error: concept named in type constraint is not a type concept"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:31:3: error: no matching function for call to object of type \'const decltype(ml)\' (aka \'const (lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:27:13)\')","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:36:3: error: no matching function for call to object of type \'volatile decltype(l)\' (aka \'volatile (lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:22:12)\')","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:37:3: error: no matching function for call to object of type \'volatile decltype(ml)\' (aka \'volatile (lambda at clang/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp:27:13)\')"}
}
}
},
},
["err_type_defined_in_alias_template"]={
["err_ovl_no_viable_oper"]={
[b]="err_type_defined_in_alias_template",
[d]="err_ovl_no_viable_oper",
[c]="%0 cannot be defined in a type alias template",
[e]="no viable overloaded \'%0\'",
[d]="A cannot be defined in a type alias template",
[i]="no viable overloaded \'A\'",
[e]=k,
[j]=k,
[g]="(.*?) cannot be defined in a type alias template",
[c]="no viable overloaded \'(.*?)\'",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"3f1b5d077b7e",1304632627,"Implement support for C++0x alias templates.","Implement support for C++0x alias templates.\n\nllvm-svn: 130953"},
[f]={t,1236199783,r,s},
[j]={{F,3782,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // ...\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    // ...\n    case DeclaratorContext::AliasTemplate:\n      DiagID = diag::err_type_defined_in_alias_template;"}},
[b]={{B,14256,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_No_Viable_Function: {\n    // ...\n    if (Args[0]->getType()->isRecordType() && Opc >= BO_Assign && Opc <= BO_OrAssign) {\n      Diag(OpLoc, diag::err_ovl_no_viable_oper) << BinaryOperator::getOpcodeStr(Opc) << Args[0]->getSourceRange() << Args[1]->getSourceRange();"},{B,15282,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  // ...\n  case OR_No_Viable_Function: {\n    // ...\n    if (CandidateSet.empty()) {\n    // ...\n    } else\n      Diag(OpLoc, diag::err_ovl_no_viable_oper) << \"operator->\" << Base->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:5:32: error: \'(unnamed struct at clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:5:32)\' cannot be defined in a type alias template"}
["clang/test/SemaCUDA/implicit-member-target-inherited.cu"]={"clang/test/SemaCUDA/implicit-member-target-inherited.cu:172:6: error: no viable overloaded \'=\'","clang/test/SemaCUDA/implicit-member-target-inherited.cu:204:6: error: no viable overloaded \'=\'"}
}
}
},
},
["err_type_defined_in_condition"]={
["err_ovl_no_viable_subscript"]={
[b]="err_type_defined_in_condition",
[d]="err_ovl_no_viable_subscript",
[c]="%0 cannot be defined in a condition",
[e]="no viable overloaded operator[] for type %0",
[d]="A cannot be defined in a condition",
[i]="no viable overloaded operator[] for type A",
[e]=k,
[j]=k,
[g]="(.*?) cannot be defined in a condition",
[c]="no viable overloaded operator\\[\\] for type (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"0237485287e9",1262829855,"Improve the lead diagnostic for C++ object subscript expressions with","Improve the lead diagnostic for C++ object subscript expressions with\nno viable overloads.  Use a different message when the class provides\nno operator[] overloads at all; use it for operator(), too.\n\nPartially addresses PR 5900.\n\nllvm-svn: 92894"},
[j]={{F,3810,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // ...\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    // ...\n    case DeclaratorContext::Condition:\n      // ...\n      DiagID = diag::err_type_defined_in_condition;"}},
[b]={{B,14607,"ExprResult Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc, SourceLocation RLoc, Expr *Base, MultiExprArg ArgExpr) {\n  // ...\n  case OR_No_Viable_Function: {\n    PartialDiagnostic PD = CandidateSet.empty() ? (PDiag(diag::err_ovl_no_oper) << Args[0]->getType() << /*subscript*/ 0 << Args[0]->getSourceRange() << Range) : (PDiag(diag::err_ovl_no_viable_subscript) << Args[0]->getType() << Args[0]->getSourceRange() << Range);"}},
[l]={
[l]={
["clang/test/SemaCXX/condition.cpp"]={"clang/test/SemaCXX/condition.cpp:20:17: error: \'S\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:21:10: error: \'(unnamed struct at clang/test/SemaCXX/condition.cpp:21:10)\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:22:11: error: \'(unnamed enum at clang/test/SemaCXX/condition.cpp:22:11)\' cannot be defined in a condition","clang/test/SemaCXX/condition.cpp:64:14: error: \'S\' cannot be defined in a condition"}
["clang/test/SemaCXX/cxx2b-overloaded-operator.cpp"]={"clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:11:6: error: no viable overloaded operator[] for type \'S\'","clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:20:20: error: no viable overloaded operator[] for type \'S\'","clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:65:29: error: no viable overloaded operator[] for type \'T1<int, int>\'"}
}
}
},
},
["err_type_defined_in_enum"]={
["err_ovl_rewrite_equalequal_not_bool"]={
[b]={{nil,A,"err_type_defined_in_enum"}},
[d]={{nil,w,"err_ovl_rewrite_equalequal_not_bool"}},
[c]={{nil,A,"%0 cannot be defined in an enumeration"}},
[e]={{nil,w,"return type %0 of selected \'operator==\' function for rewritten \'%1\' comparison is not \'bool\'"}},
[d]={{nil,A,"A cannot be defined in an enumeration"}},
[i]={{nil,w,"return type A of selected \'operator==\' function for rewritten \'B\' comparison is not \'bool\'"}},
[e]=k,
[j]=k,
[g]="(.*?) cannot be defined in an enumeration",
[c]="return type (.*?) of selected \'operator\\=\\=\' function for rewritten \'(.*?)\' comparison is not \'bool\'",
[h]=a,
[h]=a,
[i]={{nil,A,m}},
[g]={{nil,w,m}},
[f]={"8b0bbc6fe03b",1505505102,"[Sema] Error out early for tags defined inside an enumeration.","[Sema] Error out early for tags defined inside an enumeration.\n\nThis fixes PR28903 by avoiding access check for inner enum constant. We\nare performing access check because one enum constant references another\nand because enum is defined in CXXRecordDecl. But access check doesn\'t\nwork because FindDeclaringClass doesn\'t expect more than one EnumDecl\nand because inner enum has access AS_none due to not being an immediate\nchild of a record.\n\nThe change detects an enum is defined in wrong place and allows to skip\nparsing its body. Access check is skipped together with body parsing.\nThere was no crash in C, added test case to cover the new error.\n\nrdar://problem/28530809\n\nReviewers: rnk, doug.gregor, rsmith\n\nReviewed By: doug.gregor\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D37089\n\nllvm-svn: 313386"},
[f]={"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"},
[j]={{t,17563,"CreateNewDecl:\n  // ...\n  if (!Invalid && getLangOpts().CPlusPlus && TUK == TUK_Definition && DC->getDeclKind() == Decl::Enum) {\n   Diag(New->getLocation(), diag::err_type_defined_in_enum) << Context.getTagDeclType(New);"}},
[b]={{B,14011,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  // ...\n  case OR_Success: {\n    // ...\n    if (FnDecl) {\n      // ...\n      // C++2a [over.match.oper]p9:\n      //  If a rewritten operator== candidate is selected by overload\n      //  resolution for an operator@, its return type shall be cv bool\n      if (Best->RewriteKind && ChosenOp == OO_EqualEqual && !FnDecl->getReturnType()->isBooleanType()) {\n       // ...\n        Diag(OpLoc, IsExtension ? diag::ext_ovl_rewrite_equalequal_not_bool : diag::err_ovl_rewrite_equalequal_not_bool) << FnDecl->getReturnType() << BinaryOperator::getOpcodeStr(Opc) << Args[0]->getSourceRange() << Args[1]->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/enum.cpp"]={"clang/test/SemaCXX/enum.cpp:123:18: error: \'PR28903::(unnamed enum at clang/test/SemaCXX/enum.cpp:123:18)\' cannot be defined in an enumeration"}
["clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp"]={"clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp:9:14: error: return type \'double\' of selected \'operator==\' function for rewritten \'==\' comparison is not \'bool\'","clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp:10:14: error: return type \'double\' of selected \'operator==\' function for rewritten \'!=\' comparison is not \'bool\'","clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp:11:14: error: return type \'double\' of selected \'operator==\' function for rewritten \'!=\' comparison is not \'bool\'","clang/test/CXX/over/over.match/over.match.funcs/over.match.oper/p9-2a.cpp:18:14: error: return type \'double\' of selected \'operator==\' function for rewritten \'!=\' comparison is not \'bool\'"}
}
}
},
},
["err_type_defined_in_for_range"]={
["err_ovl_static_nonstatic_member"]={
[b]="err_type_defined_in_for_range",
[d]="err_ovl_static_nonstatic_member",
[c]="types may not be defined in a for range declaration",
[e]="static and non-static member functions with the same parameter types cannot be overloaded",
[d]="types may not be defined in a for range declaration",
[i]="static and non-static member functions with the same parameter types cannot be overloaded",
[e]=k,
[j]=k,
[g]="types may not be defined in a for range declaration",
[c]="static and non\\-static member functions with the same parameter types cannot be overloaded",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"02e85f3bc5fc",1302818966,"Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291).","Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291).\n\nllvm-svn: 129541"},
[f]={t,1236199783,r,s},
[j]={{S,2504,"/// 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 (!DS->isSingleDecl()) {\n   Diag(DS->getBeginLoc(), diag::err_type_defined_in_for_range);"}},
[b]={{G,3987,"/// 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       //   -- Member function declarations with the same name and the\n       //       same parameter types cannot be overloaded if any of them\n       //       is a static member function declaration.\n       if (OldMethod->isStatic() != NewMethod->isStatic()) {\n         Diag(New->getLocation(), diag::err_ovl_static_nonstatic_member);"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:18:8: error: types may not be defined in a for range declaration","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/p3-0x.cpp:21:8: error: types may not be defined in a for range declaration"}
["clang/test/SemaCXX/overload-decl.cpp"]={"clang/test/SemaCXX/overload-decl.cpp:30:15: error: static and non-static member functions with the same parameter types cannot be overloaded"}
}
}
},
},
["err_type_defined_in_param_type"]={
["err_ovl_unresolvable"]={
[b]="err_type_defined_in_param_type",
[d]="err_ovl_unresolvable",
[c]="%0 cannot be defined in a parameter type",
[e]={{nil,z,"reference to %select{overloaded|multiversioned}1 function could not be resolved; did you mean to call it%select{| with no arguments}0?"},{F,nil,"reference to overloaded function could not be resolved; did you mean to call it%select{| with no arguments}0?"}},
[d]="A cannot be defined in a parameter type",
[i]={{nil,z,{"reference to ",{"overloaded","multiversioned"}," function could not be resolved; did you mean to call it",{a," with no arguments"},"?"}},{F,nil,{"reference to overloaded function could not be resolved; did you mean to call it",{a," with no arguments"},"?"}}},
[e]=k,
[j]=k,
[g]="(.*?) cannot be defined in a parameter type",
[c]="reference to (?:overloaded|multiversioned) function could not be resolved; did you mean to call it(?:| with no arguments)\\?",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag","When we parse a tag specifier, keep track of whether that tag\nspecifier resulted in the creation of a new TagDecl node, which\nhappens either when the tag specifier was a definition or when the tag\nspecifier was the first declaration of that tag type. This information\nhas several uses, the first of which is implemented in this commit:\n\n  1) In C++, one is not allowed to define tag types within a type\n  specifier (e.g., static_cast<struct S { int x; } *>(0) is\n  ill-formed) or within the result or parameter types of a\n  function. We now diagnose this.\n\n  2) We can extend DeclGroups to contain information about any tags\n  that are declared/defined within the declaration specifiers of a\n  variable, e.g.,\n\n    struct Point { int x, y, z; } p;\n\n  This will help improve AST printing and template instantiation,\n  among other things.\n\n  3) For C99, we can keep track of whether a tag type is defined\n  within the type of a parameter, to properly cope with cases like,\n  e.g.,\n\n    int bar(struct T2 { int x; } y) {\n      struct T2 z;\n    }\n\n  We can also do similar things wherever there is a type specifier,\n  e.g., to keep track of where the definition of S occurs in this\n  legal C99 code:\n\n    (struct S { int x, y; } *)0\n\n  \n\nllvm-svn: 72555"},
[f]={"36226621f600",1286849357,"Progress.","Progress.\n\nllvm-svn: 116287"},
[j]={{t,17629,"CreateNewDecl:\n  // ...\n  // If we\'re declaring or defining a tag in function prototype scope in C,\n  // note that this type can only be used within the function and add it to\n  // the list of decls to inject into the function definition scope.\n  if ((Name || Kind == TTK_Enum) && getNonFieldDeclScope(S)->isFunctionPrototypeScope()) {\n    if (getLangOpts().CPlusPlus) {\n     // C++ [dcl.fct]p6:\n      //  Types shall not be defined in return or parameter types.\n      if (TUK == TUK_Definition && !IsTypeSpecifier) {\n        Diag(Loc, diag::err_type_defined_in_param_type) << Name;"},{F,3804,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // ...\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    // ...\n   case DeclaratorContext::Prototype:\n    case DeclaratorContext::LambdaExprParameter:\n    case DeclaratorContext::ObjCParameter:\n    case DeclaratorContext::ObjCResult:\n    case DeclaratorContext::KNRTypeList:\n    case DeclaratorContext::RequiresExpr:\n      // ...\n     DiagID = diag::err_type_defined_in_param_type;"}},
[b]={{E,21546,"/// 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  // Overloaded expressions.\n case BuiltinType::Overload: {\n    // ...\n   tryToRecoverWithCall(Result, PDiag(diag::err_ovl_unresolvable),"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:4:7: error: (null) cannot be defined in a parameter type","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:5:11: error: (null) cannot be defined in a parameter type"}
["clang/test/Sema/PR28181.c"]={"clang/test/Sema/PR28181.c:12:21: error: reference to overloaded function could not be resolved; did you mean to call it?"}
}
}
},
},
["err_type_defined_in_result_type"]={
["err_ownership_returns_index_mismatch"]={
[b]="err_type_defined_in_result_type",
[d]="err_ownership_returns_index_mismatch",
[c]="%0 cannot be defined in the result type of a function",
[e]="\'ownership_returns\' attribute index does not match; here it is %0",
[d]="A cannot be defined in the result type of a function",
[i]="\'ownership_returns\' attribute index does not match; here it is A",
[e]=k,
[j]=k,
[g]="(.*?) cannot be defined in the result type of a function",
[c]="\'ownership_returns\' attribute index does not match; here it is (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag","When we parse a tag specifier, keep track of whether that tag\nspecifier resulted in the creation of a new TagDecl node, which\nhappens either when the tag specifier was a definition or when the tag\nspecifier was the first declaration of that tag type. This information\nhas several uses, the first of which is implemented in this commit:\n\n  1) In C++, one is not allowed to define tag types within a type\n  specifier (e.g., static_cast<struct S { int x; } *>(0) is\n  ill-formed) or within the result or parameter types of a\n  function. We now diagnose this.\n\n  2) We can extend DeclGroups to contain information about any tags\n  that are declared/defined within the declaration specifiers of a\n  variable, e.g.,\n\n    struct Point { int x, y, z; } p;\n\n  This will help improve AST printing and template instantiation,\n  among other things.\n\n  3) For C99, we can keep track of whether a tag type is defined\n  within the type of a parameter, to properly cope with cases like,\n  e.g.,\n\n    int bar(struct T2 { int x; } y) {\n      struct T2 z;\n    }\n\n  We can also do similar things wherever there is a type specifier,\n  e.g., to keep track of where the definition of S occurs in this\n  legal C99 code:\n\n    (struct S { int x, y; } *)0\n\n  \n\nllvm-svn: 72555"},
[f]={"ef7aef8fe5d3",1406839466,"Implemented a diagnostic to handle multiple, distinct ownership_return attributes on the same declar...","Implemented a diagnostic to handle multiple, distinct ownership_return attributes on the same declaration. This removes a FIXME from the code.\n\nllvm-svn: 214436"},
[j]={{F,5411,"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      if (LangOpts.CPlusPlus && D.getDeclSpec().hasTagDefinition()) {\n        // ...\n        S.Diag(Tag->getLocation(), diag::err_type_defined_in_result_type) << Context.getTypeDeclType(Tag);"}},
[b]={{Q,1895,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 1; i < AL.getNumArgs(); ++i) {\n    // ...\n    // Check we don\'t have a conflict with another ownership attribute.\n    for (const auto *I : D->specific_attrs<OwnershipAttr>()) {\n      // Cannot have two ownership attributes of different kinds for the same\n      // index.\n      if (I->getOwnKind() != K && llvm::is_contained(I->args(), Idx)) {\n      // ...\n      } else if (K == OwnershipAttr::Returns && I->getOwnKind() == OwnershipAttr::Returns) {\n        // A returns attribute conflicts with any other returns attribute using\n        // a different index.\n        if (!llvm::is_contained(I->args(), Idx)) {\n          S.Diag(I->getLocation(), diag::err_ownership_returns_index_mismatch) << I->args_begin()->getSourceIndex();"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:7:1: error: \'(unnamed enum at clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p8.cpp:7:1)\' cannot be defined in the result type of a function"}
["clang/test/Sema/attr-ownership.cpp"]={"clang/test/Sema/attr-ownership.cpp:5:22: error: \'ownership_returns\' attribute index does not match; here it is 2"}
}
}
},
},
["err_type_defined_in_type_specifier"]={
["err_ownership_type"]={
[b]="err_type_defined_in_type_specifier",
[d]="err_ownership_type",
[c]="%0 cannot be defined in a type specifier",
[e]="%0 attribute only applies to %select{pointer|integer}1 arguments",
[d]="A cannot be defined in a type specifier",
[i]={{nil,nil,{"A attribute only applies to ",{"pointer","integer"}," arguments"}}},
[e]=k,
[j]=k,
[g]="(.*?) cannot be defined in a type specifier",
[c]="(.*?) attribute only applies to (?:pointer|integer) arguments",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"d6ab8744dc68",1243553519,"When we parse a tag specifier, keep track of whether that tag","When we parse a tag specifier, keep track of whether that tag\nspecifier resulted in the creation of a new TagDecl node, which\nhappens either when the tag specifier was a definition or when the tag\nspecifier was the first declaration of that tag type. This information\nhas several uses, the first of which is implemented in this commit:\n\n  1) In C++, one is not allowed to define tag types within a type\n  specifier (e.g., static_cast<struct S { int x; } *>(0) is\n  ill-formed) or within the result or parameter types of a\n  function. We now diagnose this.\n\n  2) We can extend DeclGroups to contain information about any tags\n  that are declared/defined within the declaration specifiers of a\n  variable, e.g.,\n\n    struct Point { int x, y, z; } p;\n\n  This will help improve AST printing and template instantiation,\n  among other things.\n\n  3) For C99, we can keep track of whether a tag type is defined\n  within the type of a parameter, to properly cope with cases like,\n  e.g.,\n\n    int bar(struct T2 { int x; } y) {\n      struct T2 z;\n    }\n\n  We can also do similar things wherever there is a type specifier,\n  e.g., to keep track of where the definition of S occurs in this\n  legal C99 code:\n\n    (struct S { int x, y; } *)0\n\n \n\nllvm-svn: 72555"},
[f]={"d21139a34f51",1280541131,"After a lengthy design discussion, add support for \"ownership attributes\" for malloc/free checking. ...","After a lengthy design discussion, add support for \"ownership attributes\" for malloc/free checkingPatch by Andrew McGregor!\n\nllvm-svn: 109939"},
[j]={{t,17556,"CreateNewDecl:\n  // ...\n  // C++11 [dcl.type]p3:\n //   A type-specifier-seq shall not define a class or enumeration [...].\n if (!Invalid && getLangOpts().CPlusPlus && (IsTypeSpecifier || IsTemplateParamOrArg) && TUK == TUK_Definition) {\n   Diag(New->getLocation(), diag::err_type_defined_in_type_specifier) << Context.getTagDeclType(New);"},{F,3794,"static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, TypeSourceInfo *&ReturnTypeInfo) {\n  // ...\n  if (SemaRef.getLangOpts().CPlusPlus && OwnedTagDecl && OwnedTagDecl->isCompleteDefinition()) {\n    // ...\n    case DeclaratorContext::TypeName:\n    case DeclaratorContext::FunctionalCast:\n    case DeclaratorContext::ConversionId:\n    case DeclaratorContext::TemplateParam:\n    case DeclaratorContext::CXXNew:\n    case DeclaratorContext::CXXCatch:\n    case DeclaratorContext::ObjCCatch:\n    case DeclaratorContext::TemplateArg:\n    case DeclaratorContext::TemplateTypeArg:\n    case DeclaratorContext::Association:\n      DiagID = diag::err_type_defined_in_type_specifier;"}},
[b]={{Q,1875,"static void handleOwnershipAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  for (unsigned i = 1; i < AL.getNumArgs(); ++i) {\n   // ...\n   if (-1 != Err) {\n     S.Diag(AL.getLoc(), diag::err_ownership_type) << AL << Err << Ex->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/PR16677.cpp"]={"clang/test/SemaCXX/PR16677.cpp:11:7: error: \'Derived\' cannot be defined in a type specifier"}
["clang/test/Sema/attr-ownership.c"]={"clang/test/Sema/attr-ownership.c:15:35: error: \'ownership_returns\' attribute only applies to integer arguments","clang/test/Sema/attr-ownership.c:16:57: error: \'ownership_returns\' attribute only applies to integer arguments"}
}
}
},
},
["err_type_mismatch_continuation_class"]={
["err_pack_expansion_length_conflict"]={
[b]="err_type_mismatch_continuation_class",
[d]="err_pack_expansion_length_conflict",
[c]="type of property %0 in class extension does not match property type in primary class",
[e]="pack expansion contains parameter packs %0 and %1 that have different lengths (%2 vs. %3)",
[d]="type of property A in class extension does not match property type in primary class",
[i]="pack expansion contains parameter packs A and B that have different lengths (C vs. D)",
[e]=k,
[j]=k,
[g]="type of property (.*?) in class extension does not match property type in primary class",
[c]="pack expansion contains parameter packs (.*?) and (.*?) that have different lengths \\((.*?) vs\\. (.*?)\\)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"22b405c7aa40",1322505507,"objc: turn warning for property type mismatch in ","objc: turn warning for property type mismatch in \nprimary and its continuation class into error.\n// rdar://10142679\n\nllvm-svn: 145255"},
[f]={"840bd6cce5ac",1292882700,"Implement basic support for template instantiation of pack expansions","Implement basic support for template instantiation of pack expansions\nwhose patterns are template arguments. We can now instantiate, e.g.,\n\n  typedef tuple<pair<OuterTypes, InnerTypes>...> type;\n\nwhere OuterTypes and InnerTypes are template type parameter packs.\n\nThere is a horrible inefficiency in\nTemplateArgumentLoc::getPackExpansionPattern(), where we need to\ncreate copies of TypeLoc data because our interfaces traffic in\nTypeSourceInfo pointers where they should traffic in TypeLocs\ninstead. I\'ve isolated in efficiency in this one routine; once we\nrefactor our interfaces to traffic in TypeLocs, we can eliminate it.\n\nllvm-svn: 122278"},
[j]={{Jb,544,"ObjCPropertyDecl *Sema::HandlePropertyInClassExtension(Scope *S, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, unsigned &Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TSI, tok::ObjCKeywordKind MethodImplKind) {\n  // ...\n  if (!Context.hasSameType(PIDecl->getType(), PDecl->getType())) {\n    // ...\n    if (!isa<ObjCObjectPointerType>(PrimaryClassPropertyT) || !isa<ObjCObjectPointerType>(ClassExtPropertyT) || (!isObjCPointerConversion(ClassExtPropertyT, PrimaryClassPropertyT, ConvertedType, IncompatibleObjC)) || IncompatibleObjC) {\n     Diag(AtLoc, diag::err_type_mismatch_continuation_class) << PDecl->getType();"}},
[b]={{ab,770,"bool Sema::CheckParameterPacksForExpansion(SourceLocation EllipsisLoc, SourceRange PatternRange, ArrayRef<UnexpandedParameterPack> Unexpanded, const MultiLevelTemplateArgumentList &TemplateArgs, bool &ShouldExpand, bool &RetainExpansion, std::optional<unsigned> &NumExpansions) {\n  // ...\n  for (UnexpandedParameterPack ParmPack : Unexpanded) {\n    // ...\n    if (NewPackSize != *NumExpansions) {\n      // C++0x [temp.variadic]p5:\n      //  All of the parameter packs expanded by a pack expansion shall have\n      //  the same number of arguments specified.\n      if (HaveFirstPack)\n       Diag(EllipsisLoc, diag::err_pack_expansion_length_conflict) << FirstPack.first << Name << *NumExpansions << NewPackSize << SourceRange(FirstPack.second) << SourceRange(ParmPack.second);"}},
[l]={
[l]={
["clang/test/SemaObjC/continuation-class-property.m"]={"clang/test/SemaObjC/continuation-class-property.m:41:1: error: type of property \'NSString *\' in class extension does not match property type in primary class","clang/test/SemaObjC/continuation-class-property.m:42:1: error: type of property \'NSRect\' in class extension does not match property type in primary class"}
["clang/test/SemaCXX/attr-cxx0x.cpp"]={"clang/test/SemaCXX/attr-cxx0x.cpp:28:35: error: pack expansion contains parameter packs \'A\' and \'B\' that have different lengths (1 vs. 2)"}
}
}
},
},
["err_type_pack_element_out_of_bounds"]={
["err_pack_expansion_length_conflict_multilevel"]={
[b]="err_type_pack_element_out_of_bounds",
[d]="err_pack_expansion_length_conflict_multilevel",
[c]="a parameter pack may not be accessed at an out of bounds index",
[e]="pack expansion contains parameter pack %0 that has a different length (%1 vs. %2) from outer parameter packs",
[d]="a parameter pack may not be accessed at an out of bounds index",
[i]="pack expansion contains parameter pack A that has a different length (B vs. C) from outer parameter packs",
[e]=k,
[j]=k,
[g]="a parameter pack may not be accessed at an out of bounds index",
[c]="pack expansion contains parameter pack (.*?) that has a different length \\((.*?) vs\\. (.*?)\\) from outer parameter packs",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"6ad68551c3fb",1467336249,"[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne.","[Feature] Add a builtin for indexing into parameter packs. Patch by Louis Dionne.\n\nThis patch adds a __nth_element builtin that allows fetching the n-th type of a\nparameter pack with very little compile-time overhead. The patch was inspired by\nr252036 and r252115 by David Majnemer, which add a similar __make_integer_seq\nbuiltin for efficiently creating a std::integer_sequence.\n\nReviewed as D15421. http://reviews.llvm.org/D15421\n\nllvm-svn: 274316"},
[f]={"0dca5fdb4e03",1295024684,"Keep track of the number of expansions to be produced from a type pack","Keep track of the number of expansions to be produced from a type pack\nexpansion, when it is known due to the substitution of an out\nparameter pack. This allows us to properly handle substitution into\npack expansions that involve multiple parameter packs at different\ntemplate parameter levels, even when this substitution happens one\nlevel at a time (as with partial specializations of member class\ntemplates and the signatures of member function templates).\n\nNote that the diagnostic we provide when there is an arity mismatch\nbetween an outer parameter pack and an inner parameter pack in this\ncase isn\'t as clear as the normal diagnostic for an arity\nmismatch. However, this doesn\'t matter because these cases are very,\nvery rare and (even then) only typically occur in a SFINAE context.\n\nThe other kinds of pack expansions (expression, template, etc.) still\nneed to support optional tracking of the number of expansions, and we\nneed the moral equivalent of SubstTemplateTypeParmPackType for\nsubstituted argument packs of template template and non-type template\nparameters.\n\nllvm-svn: 123448"},
[j]={{o,3717,"static QualType checkBuiltinTemplateIdType(Sema &SemaRef, BuiltinTemplateDecl *BTD, ArrayRef<TemplateArgument> Converted, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs) {\n  // ...\n  case BTK__type_pack_element:\n    // ...\n    // If the Index is out of bounds, the program is ill-formed.\n   if (Index >= Ts.pack_size()) {\n      SemaRef.Diag(TemplateArgs[0].getLocation(), diag::err_type_pack_element_out_of_bounds);"}},
[b]={{ab,774,"bool Sema::CheckParameterPacksForExpansion(SourceLocation EllipsisLoc, SourceRange PatternRange, ArrayRef<UnexpandedParameterPack> Unexpanded, const MultiLevelTemplateArgumentList &TemplateArgs, bool &ShouldExpand, bool &RetainExpansion, std::optional<unsigned> &NumExpansions) {\n  // ...\n  for (UnexpandedParameterPack ParmPack : Unexpanded) {\n    // ...\n    if (NewPackSize != *NumExpansions) {\n      // C++0x [temp.variadic]p5:\n      //  All of the parameter packs expanded by a pack expansion shall have\n      //   the same number of arguments specified.\n     if (HaveFirstPack)\n      // ...\n      else\n        Diag(EllipsisLoc, diag::err_pack_expansion_length_conflict_multilevel) << Name << *NumExpansions << NewPackSize << SourceRange(ParmPack.second);"}},
[l]={
[l]={
["clang/test/SemaCXX/type_pack_element.cpp"]={"clang/test/SemaCXX/type_pack_element.cpp:44:51: error: a parameter pack may not be accessed at an out of bounds index"}
["clang/test/SemaTemplate/cxx1z-fold-expressions.cpp"]={"clang/test/SemaTemplate/cxx1z-fold-expressions.cpp:100:61: error: pack expansion contains parameter pack \'Js\' that has a different length (1 vs. 2) from outer parameter packs"}
}
}
},
},
["err_type_safety_unknown_flag"]={
["err_pack_expansion_length_conflict_partial"]={
[b]="err_type_safety_unknown_flag",
[d]={{nil,z,"err_pack_expansion_length_conflict_partial"}},
[c]="invalid comparison flag %0; use \'layout_compatible\' or \'must_be_null\'",
[e]={{nil,z,"pack expansion contains parameter pack %0 that has a different length (at least %1 vs. %2) from outer parameter packs"}},
[d]="invalid comparison flag A; use \'layout_compatible\' or \'must_be_null\'",
[i]={{nil,z,"pack expansion contains parameter pack A that has a different length (at least B vs. C) from outer parameter packs"}},
[e]=k,
[j]=k,
[g]="invalid comparison flag (.*?); use \'layout_compatible\' or \'must_be_null\'",
[c]="pack expansion contains parameter pack (.*?) that has a different length \\(at least (.*?) vs\\. (.*?)\\) from outer parameter packs",
[h]=a,
[h]=a,
[i]=G,
[g]={{nil,z,m}},
[f]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'","Add support for \"type safety\" attributes that allow checking that \'void *\'\nfunction arguments and arguments for variadic functions are of a particular\ntype which is determined by some other argument to the same function call.\n\nUsecases include:\n* MPI library implementations, where these attributes enable checking that\n  buffer type matches the passed MPI_Datatype;\n* for HDF5 library there is a similar usecase as MPI;\n* checking types of variadic functions\' arguments for functions like\n  fcntl() and ioctl().\n\nllvm-svn: 162067"},
[f]={"4a8f3518cb14",1532026837,"Fix template argument deduction when a parameter pack has a value","Fix template argument deduction when a parameter pack has a value\nprovided by an outer template.\n\nWe made the incorrect assumption in various places that the only way we\ncan have any arguments already provided for a pack during template\nargument deduction was from a partially-specified pack. That\'s not true;\nwe can also have arguments from an enclosing already-instantiated\ntemplate, and that can even result in the function template\'s own pack\nparameters having a fixed length and not being packs for the purposes of\ntemplate argument deduction.\n\nllvm-svn: 337481"},
[j]={{Z,1639,"void Parser::ParseTypeTagForDatatypeAttribute(IdentifierInfo &AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  while (TryConsumeToken(tok::comma)) {\n   // ...\n   if (Flag->isStr(\"layout_compatible\"))\n   // ...\n    else if (Flag->isStr(\"must_be_null\"))\n   // ...\n    else {\n      Diag(Tok, diag::err_type_safety_unknown_flag) << Flag;"}},
[b]={{ab,794,"bool Sema::CheckParameterPacksForExpansion(SourceLocation EllipsisLoc, SourceRange PatternRange, ArrayRef<UnexpandedParameterPack> Unexpanded, const MultiLevelTemplateArgumentList &TemplateArgs, bool &ShouldExpand, bool &RetainExpansion, std::optional<unsigned> &NumExpansions) {\n  // ...\n  // If we\'re performing a partial expansion but we also have a full expansion,\n  // expand to the number of common arguments. For example, given:\n //\n  //   template<typename ...T> struct A {\n //    template<typename ...U> void f(pair<T, U>...);\n  //  };\n  //\n // ... a call to \'A<int, int>().f<int>\' should expand the pack once and\n  // retain an expansion.\n  if (NumPartialExpansions) {\n    if (NumExpansions && *NumExpansions < *NumPartialExpansions) {\n     // ...\n      Diag(EllipsisLoc, diag::err_pack_expansion_length_conflict_partial) << PartialPack << *NumPartialExpansions << *NumExpansions << SourceRange(PartiallySubstitutedPackLoc);"}}
[l]={
["clang/test/Sema/attr-type-safety.c"]={"clang/test/Sema/attr-type-safety.c:15:72: error: invalid comparison flag \'not_a_flag\'; use \'layout_compatible\' or \'must_be_null\'","clang/test/Sema/attr-type-safety.c:17:90: error: invalid comparison flag \'not_a_flag\'; use \'layout_compatible\' or \'must_be_null\'"}
}
},
},
["err_type_tag_for_datatype_not_ice"]={
["err_pack_expansion_member_init"]={
[b]="err_type_tag_for_datatype_not_ice",
[d]="err_pack_expansion_member_init",
[c]="\'type_tag_for_datatype\' attribute requires the initializer to be an %select{integer|integral}0 constant expression",
[e]="pack expansion for initialization of member %0",
[d]={{nil,nil,{"\'type_tag_for_datatype\' attribute requires the initializer to be an ",{"integer","integral"}," constant expression"}}},
[i]="pack expansion for initialization of member A",
[e]=k,
[j]=k,
[g]="\'type_tag_for_datatype\' attribute requires the initializer to be an (?:integer|integral) constant expression",
[c]="pack expansion for initialization of member (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'","Add support for \"type safety\" attributes that allow checking that \'void *\'\nfunction arguments and arguments for variadic functions are of a particular\ntype which is determined by some other argument to the same function call.\n\nUsecases include:\n* MPI library implementations, where these attributes enable checking that\n  buffer type matches the passed MPI_Datatype;\n* for HDF5 library there is a similar usecase as MPI;\n* checking types of variadic functions\' arguments for functions like\n  fcntl() and ioctl().\n\nllvm-svn: 162067"},
[f]={"44e7df67d963",1294101176,"Implement pack expansion of base initializers, so that we can","Implement pack expansion of base initializers, so that we can\ninitialize those lovely mixins that come from pack expansions of base\nspecifiers.\n\nllvm-svn: 122793"},
[j]={{t,14508,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  // ...\n  for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {\n    // ...\n    if (!(MagicValueInt = MagicValueExpr->getIntegerConstantExpr(Context))) {\n      Diag(I->getRange().getBegin(), diag::err_type_tag_for_datatype_not_ice) << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();"}},
[b]={{y,4392,"/// 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  // Look for a member, first.\n  if (ValueDecl *Member = tryLookupCtorInitMemberDecl(ClassDecl, SS, TemplateTypeTy, MemberOrBase)) {\n    if (EllipsisLoc.isValid())\n      Diag(EllipsisLoc, diag::err_pack_expansion_member_init) << MemberOrBase << SourceRange(IdLoc, Init->getSourceRange().getEnd());"}},
[l]={
[l]={
["clang/test/Sema/warn-type-safety.cpp"]={"clang/test/Sema/warn-type-safety.cpp:16:45: error: \'type_tag_for_datatype\' attribute requires the initializer to be an integral constant expression"}
["clang/test/CXX/temp/temp.decls/temp.variadic/p4.cpp"]={"clang/test/CXX/temp/temp.decls/temp.variadic/p4.cpp:144:17: error: pack expansion for initialization of member \'member\'"}
}
}
},
},
["err_type_tag_for_datatype_too_large"]={
["err_pack_expansion_without_parameter_packs"]={
[b]="err_type_tag_for_datatype_too_large",
[d]="err_pack_expansion_without_parameter_packs",
[c]="\'type_tag_for_datatype\' attribute requires the initializer to be an %select{integer|integral}0 constant expression that can be represented by a 64 bit integer",
[e]="pack expansion does not contain any unexpanded parameter packs",
[d]={{nil,nil,{"\'type_tag_for_datatype\' attribute requires the initializer to be an ",{"integer","integral"}," constant expression that can be represented by a 64 bit integer"}}},
[i]="pack expansion does not contain any unexpanded parameter packs",
[e]=k,
[j]=k,
[g]="\'type_tag_for_datatype\' attribute requires the initializer to be an (?:integer|integral) constant expression that can be represented by a 64 bit integer",
[c]="pack expansion does not contain any unexpanded parameter packs",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"e4a5a90e8d6b",1345162118,"Add support for \"type safety\" attributes that allow checking that \'void *\'","Add support for \"type safety\" attributes that allow checking that \'void *\'\nfunction arguments and arguments for variadic functions are of a particular\ntype which is determined by some other argument to the same function call.\n\nUsecases include:\n* MPI library implementations, where these attributes enable checking that\n buffer type matches the passed MPI_Datatype;\n* for HDF5 library there is a similar usecase as MPI;\n* checking types of variadic functions\' arguments for functions like\n  fcntl() and ioctl().\n\nllvm-svn: 162067"},
[f]={"d2fa766ad03e",1292811851,"Introduce a new type, PackExpansionType, to capture types that are","Introduce a new type, PackExpansionType, to capture types that are\npack expansions, e.g. given\n\n  template<typename... Types> struct tuple;\n\n  template<typename... Types>\n struct tuple_of_refs {\n    typedef tuple<Types&...> types;\n };\n\nthe type of the \"types\" typedef is a PackExpansionType whose pattern\nis Types&. \n\nThis commit introduces support for creating pack expansions for\ntemplate type arguments, as above, but not for any other kind of pack\nexpansion, nor for any form of instantiation.\n\nllvm-svn: 122223"},
[j]={{t,14514,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  // ...\n  for (const auto *I : ThisDecl->specific_attrs<TypeTagForDatatypeAttr>()) {\n   // ...\n    if (MagicValueInt->getActiveBits() > 64) {\n      Diag(I->getRange().getBegin(), diag::err_type_tag_for_datatype_too_large) << LangOpts.CPlusPlus << MagicValueExpr->getSourceRange();"}}
[b]={{Q,4358,"static void handleAlignedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.hasParsedType()) {\n    // ...\n    if (AL.isPackExpansion() && !TInfo->getType()->containsUnexpandedParameterPack()) {\n      S.Diag(AL.getEllipsisLoc(), diag::err_pack_expansion_without_parameter_packs);"},{Q,4385,"static void handleAlignedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (AL.isPackExpansion() && !E->containsUnexpandedParameterPack()) {\n    S.Diag(AL.getEllipsisLoc(), diag::err_pack_expansion_without_parameter_packs);"},{y,2670,"/// 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 (EllipsisLoc.isValid() && !TInfo->getType()->containsUnexpandedParameterPack()) {\n    Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << TInfo->getTypeLoc().getSourceRange();"},{y,4705,"MemInitResult Sema::BuildBaseInitializer(QualType BaseType, TypeSourceInfo *BaseTInfo, Expr *Init, CXXRecordDecl *ClassDecl, SourceLocation EllipsisLoc) {\n // ...\n  if (EllipsisLoc.isValid()) {\n    // This is a pack expansion.\n    if (!BaseType->containsUnexpandedParameterPack()) {\n      Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << SourceRange(BaseLoc, InitRange.getEnd());"},{y,12080,"Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, SourceLocation UsingLoc, SourceLocation TypenameLoc, CXXScopeSpec &SS, UnqualifiedId &Name, SourceLocation EllipsisLoc, const ParsedAttributesView &AttrList) {\n  // ...\n  if (EllipsisLoc.isInvalid()) {\n  // ...\n  } else {\n    if (!SS.getScopeRep()->containsUnexpandedParameterPack() && !TargetNameInfo.containsUnexpandedParameterPack()) {\n      Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << SourceRange(SS.getBeginLoc(), TargetNameInfo.getEndLoc());"},{"clang/lib/Sema/SemaExprObjC.cpp",1110,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  // ...\n  for (ObjCDictionaryElement &Element : Elements) {\n    // ...\n    if (!Element.Key->containsUnexpandedParameterPack() && !Element.Value->containsUnexpandedParameterPack()) {\n      Diag(Element.EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << SourceRange(Element.Key->getBeginLoc(), Element.Value->getEndLoc());"},{"clang/lib/Sema/SemaLambda.cpp",1198,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // ...\n    if (C->EllipsisLoc.isValid()) {\n      if (Var->isParameterPack()) {\n      // ...\n      } else {\n        Diag(C->EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << (C->Init.isUsable() ? C->Init.get()->getSourceRange() : SourceRange(C->Loc));"},{ab,582,"ParsedTemplateArgument Sema::ActOnPackExpansion(const ParsedTemplateArgument &Arg, SourceLocation EllipsisLoc) {\n  // ...\n  case ParsedTemplateArgument::Template:\n    if (!Arg.getAsTemplate().get().containsUnexpandedParameterPack()) {\n      // ...\n      Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << R;"},{ab,637,"QualType Sema::CheckPackExpansion(QualType Pattern, SourceRange PatternRange, SourceLocation EllipsisLoc, std::optional<unsigned> NumExpansions) {\n  // C++11 [temp.variadic]p5:\n  //  The pattern of a pack expansion shall name one or more\n  //  parameter packs that are not expanded by a nested pack\n  //  expansion.\n  //\n  // A pattern containing a deduced type can\'t occur \"naturally\" but arises in\n  // the desugaring of an init-capture pack.\n if (!Pattern->containsUnexpandedParameterPack() && !Pattern->getContainedDeducedType()) {\n    Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << PatternRange;"},{ab,660,"ExprResult Sema::CheckPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc, std::optional<unsigned> NumExpansions) {\n  // ...\n  // C++0x [temp.variadic]p5:\n //  The pattern of a pack expansion shall name one or more\//   parameter packs that are not expanded by a nested pack\n  //   expansion.\n if (!Pattern->containsUnexpandedParameterPack()) {\n    Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << Pattern->getSourceRange();"},{ab,1214,"ExprResult Sema::ActOnCXXFoldExpr(Scope *S, SourceLocation LParenLoc, Expr *LHS, tok::TokenKind Operator, SourceLocation EllipsisLoc, Expr *RHS, SourceLocation RParenLoc) {\n  // ...\n  // [expr.prim.fold]p3:\n  //  In a binary fold, op1 and op2 shall be the same fold-operator, and\n  //  either e1 shall contain an unexpanded parameter pack or e2 shall contain\n  //  an unexpanded parameter pack, but not both.\n  if (LHS && RHS && LHS->containsUnexpandedParameterPack() == RHS->containsUnexpandedParameterPack()) {\n    // ...\n    return Diag(EllipsisLoc, LHS->containsUnexpandedParameterPack() ? diag::err_fold_expression_packs_both_sides : diag::err_pack_expansion_without_parameter_packs) << LHS->getSourceRange() << RHS->getSourceRange();"},{ab,1226,"ExprResult Sema::ActOnCXXFoldExpr(Scope *S, SourceLocation LParenLoc, Expr *LHS, tok::TokenKind Operator, SourceLocation EllipsisLoc, Expr *RHS, SourceLocation RParenLoc) {\n  // ...\n  // [expr.prim.fold]p2:\n  //  In a unary fold, the cast-expression shall contain an unexpanded\n  //  parameter pack.\n  if (!LHS || !RHS) {\n    // ...\n    if (!Pack->containsUnexpandedParameterPack()) {\n      // ...\n      return Diag(EllipsisLoc, diag::err_pack_expansion_without_parameter_packs) << Pack->getSourceRange();"}},
},
["err_type_trait_arity"]={
[b]="err_type_trait_arity",
[c]="type trait requires %0%select{| or more}1 argument%select{|s}2; have %3 argument%s3",
[d]={{nil,nil,{"type trait requires A",{a," or more"}," argument",{a,uc},"; have D argumentD"}}},
[e]=k,
[g]="type trait requires (.*?)(?:| or more) argument(?:|s); have (.*?) argument(.*?)",
[h]=a,
[i]=G,
[f]={"29c42f2a25d6",1330069114,"Implement a new type trait __is_trivially_constructible(T, Args...)","Implement a new type trait __is_trivially_constructible(T, Args...)\nthat provides the behavior of the C++11 library trait\nstd::is_trivially_constructible<T, Args...>, which can\'t be\nimplemented purely as a library.\n\nSince __is_trivially_constructible can have zero or more arguments, I\nneeded to add Yet Another Type Trait Expression Class, this one\nhandling arbitrary arguments. The next step will be to migrate\nUnaryTypeTrait and BinaryTypeTrait over to this new, more general\nTypeTrait class.\n\nFixes the Clang side of <rdar://problem/10895483> / PR12038.\n\nllvm-svn: 151352"},
[j]={{J,5565,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n  if (Arity && N != Arity) {\n    Diag(Loc, diag::err_type_trait_arity) << Arity << 0 << (Arity > 1) << (int)N << SourceRange(Loc);"},{J,5571,"bool Sema::CheckTypeTraitArity(unsigned Arity, SourceLocation Loc, size_t N) {\n  // ...\n  if (!Arity && N == 0) {\n    Diag(Loc, diag::err_type_trait_arity) << 1 << 1 << 1 << (int)N << SourceRange(Loc);"}},
[l]={
[l]={
["clang/test/SemaCXX/type-trait-eval-crash-issue-57008.cpp"]={"clang/test/SemaCXX/type-trait-eval-crash-issue-57008.cpp:5:32: error: type trait requires 1 or more arguments; have 0 arguments"}
["clang/test/SemaTemplate/stmt-expr.cpp"]={"clang/test/SemaTemplate/stmt-expr.cpp:9:8: error: pack expansion does not contain any unexpanded parameter packs"}
}
}
},
},
["err_type_unsupported"]={
["err_param_default_argument"]={
[b]="err_type_unsupported",
[d]="err_param_default_argument",
[c]="%0 is not supported on this target",
[e]="C does not support default arguments",
[d]="A is not supported on this target",
[i]="C does not support default arguments",
[e]=k,
[j]=k,
[g]="(.*?) is not supported on this target",
[c]="C does not support default arguments",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"50f29e06a1b6",1460540985,"Enable support for __float128 in Clang","Enable support for __float128 in Clang\n\nThis patch corresponds to review:\nhttp://reviews.llvm.org/D15120\n\nIt adds support for the __float128 keyword, literals and a target feature to\nenable it. This support is disabled by default on all targets and any target\nthat has support for this type is free to add it.\n\nBased on feedback that I\'ve received from target maintainers, this appears to\nbe the right thing for most targets. I have not heard from the maintainers of\nX86 which I believe supports this type. I will subsequently investigate the\nimpact of enabling this on X86.\n\nllvm-svn: 266186"},
[f]={t,1236199783,r,s},
[j]={{F,1447,"/// 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_bitint: {\n    if (!S.Context.getTargetInfo().hasBitIntType())\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_BitInt\";"},{F,1507,"/// 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_int128:\n    if (!S.Context.getTargetInfo().hasInt128Type() && !(S.getLangOpts().SYCLIsDevice || S.getLangOpts().CUDAIsDevice || (S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice)))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__int128\";"},{F,1520,"/// 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_float16:\n    // CUDA host and device may have different _Float16 support, therefore\n    // do not diagnose _Float16 usage to avoid false alarm.\n    // ToDo: more precise diagnostics for CUDA.\n    if (!S.Context.getTargetInfo().hasFloat16Type() && !S.getLangOpts().CUDA && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"_Float16\";"},{F,1529,"/// 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_BFloat16:\n    if (!S.Context.getTargetInfo().hasBFloat16Type() && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice) && !S.getLangOpts().SYCLIsDevice)\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__bf16\";"},{F,1553,"/// 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_float128:\n    if (!S.Context.getTargetInfo().hasFloat128Type() && !S.getLangOpts().SYCLIsDevice && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__float128\";"},{F,1561,"/// 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_ibm128:\n    if (!S.Context.getTargetInfo().hasIbm128Type() && !S.getLangOpts().SYCLIsDevice && !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice))\n      S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << \"__ibm128\";"}}
[b]={{y,341,"/// ActOnParamDefaultArgument - Check whether the default argument\n/// provided for a function parameter is well-formed. If so, attach it\n/// to the parameter declaration.\nvoid Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc, Expr *DefaultArg) {\n  // ...\n  // Default arguments are only permitted in C++\n if (!getLangOpts().CPlusPlus) {\n   Diag(EqualLoc, diag::err_param_default_argument) << DefaultArg->getSourceRange();"}},
},
["err_typecheck_address_of"]={
[b]="err_typecheck_address_of",
[c]={{nil,s,"address of %select{bit-field|vector element|property expression|register variable|matrix element}0 requested"},{u,nil,"address of %select{bit-field|vector element|property expression|register variable}0 requested"}},
[d]={{nil,s,{"address of ",{"bit-field","vector element","property expression","register variable","matrix element"}," requested"}},{u,nil,{"address of ",{"bit-field","vector element","property expression","register variable"}," requested"}}},
[e]=k,
[g]="address of (?:bit\\-field|vector element|property expression|register variable|matrix element) requested",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{Tb,688,"#endif\n  // ...\n  if (Kind == CK_ArrayToPointerDecay) {\n    // ...\n    // C17 6.7.1p6 footnote 124: The implementation can treat any register\n    // declaration simply as an auto declaration. However, whether or not\n    // addressable storage is actually used, the address of any part of an\n    // object declared with storage-class specifier register cannot be\n    // computed, either explicitly(by use of the unary & operator as discussed\n    // in 6.5.3.2) or implicitly(by converting an array name to a pointer as\n   // discussed in 6.3.2.1).Thus, the only operator that can be applied to an\n    // array declared with storage-class specifier register is sizeof.\n    if (VK == VK_PRValue && !getLangOpts().CPlusPlus && !E->isPRValue()) {\n     if (const auto *DRE = dyn_cast<DeclRefExpr>(E)) {\n        if (const auto *VD = dyn_cast<VarDecl>(DRE->getDecl())) {\n          if (VD->getStorageClass() == SC_Register) {\n            Diag(E->getExprLoc(), diag::err_typecheck_address_of) << /*register variable*/ 3 << E->getSourceRange();"},{n,14861,"static void diagnoseAddressOfInvalidType(Sema &S, SourceLocation Loc, Expr *E, unsigned Type) { S.Diag(Loc, diag::err_typecheck_address_of) << Type << E->getSourceRange(); }"}},
[l]={
[l]={
["clang/test/SemaObjC/property-expression-error.m"]={"clang/test/SemaObjC/property-expression-error.m:16:2: error: address of property expression requested"}
["clang/test/Sema/default1.c"]={"clang/test/Sema/default1.c:2:14: error: C does not support default arguments"}
}
}
},
},
["err_typecheck_addrof_dtor"]={
["err_param_default_argument_member_template_redecl"]={
[b]="err_typecheck_addrof_dtor",
[d]="err_param_default_argument_member_template_redecl",
[c]="taking the address of a destructor",
[e]="default arguments cannot be added to an out-of-line definition of a member of a %select{class template|class template partial specialization|nested class in a template}0",
[d]="taking the address of a destructor",
[i]={{nil,nil,{"default arguments cannot be added to an out-of-line definition of a member of a ",{"class template","class template partial specialization","nested class in a template"}}}},
[e]=k,
[j]=k,
[g]="taking the address of a destructor",
[c]="default arguments cannot be added to an out\\-of\\-line definition of a member of a (?:class template|class template partial specialization|nested class in a template)",
[h]=a,
[i]=m,
[f]={"915d169c6a73",1381398281,"Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2.","Sema: Taking the address of a dtor is illegal per C++ [class.dtor]p2.\n\nEmit a proper error instead of crashing in CodeGen. PR16892.\n\nllvm-svn: 192345"},
[j]={{n,14994,"/// 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    // Taking the address of a dtor is illegal per C++ [class.dtor]p2.\n    if (isa<CXXDestructorDecl>(MD))\n      Diag(OpLoc, diag::err_typecheck_addrof_dtor) << op->getSourceRange();"}}
},
["err_typecheck_addrof_temporary"]={
[b]="err_typecheck_addrof_temporary",
[c]="taking the address of a temporary object of type %0",
[d]="taking the address of a temporary object of type A",
[e]=k,
[g]="taking the address of a temporary object of type (.*?)",
[h]=a,
[i]=m,
[f]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function","PR15132: Replace \"address expression must be an lvalue or a function\ndesignator\" diagnostic with more correct and more human-friendly \"cannot take\naddress of rvalue of type \'T\'\".\n\nFor the case of & &T::f, provide a custom diagnostic, rather than unhelpfully\nsaying \"cannot take address of rvalue of type \'<overloaded function type>\'\".\n\nFor the case of &array_temporary, treat it just like a class temporary\n(including allowing it as an extension); the existing diagnostic wording\nfor the class temporary case works fine.\n\nllvm-svn: 174262"},
[j]={{n,14935,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  // ...\n  if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n    // ...\n    Diag(OpLoc, isSFINAEContext() ? diag::err_typecheck_addrof_temporary : diag::ext_typecheck_addrof_temporary) << op->getType() << op->getSourceRange();"}}
},
["err_typecheck_ambiguous_condition"]={
[b]="err_typecheck_ambiguous_condition",
[c]="conversion %diff{from $ to $|between types}0,1 is ambiguous",
[d]={{nil,nil,{"conversion ",{"from A to B","between types"}," is ambiguous"}}},
[e]=k,
[g]="conversion (?:from (.*?) to (.*?)|between types) is ambiguous",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"0b51c729c9c3",1253649195,"Issue good ambiguity diagnostic when convesion fails.","Issue good ambiguity diagnostic when convesion fails.\n\nllvm-svn: 82565"},
[f]={"c732aba9a98c",1252694672,"Cleanup and test C++ default arguments. Improvements include:","Cleanup and test C++ default arguments. Improvements include:\n\n  - Diagnose attempts to add default arguments to templates (or member\n    functions of templates) after the initial declaration (DR217).\n  - Improve diagnostics when a default argument is redefined. Now, the\n    note will always point at the place where the default argument was\n    previously defined, rather than pointing to the most recent\n    declaration of the function.\n\nllvm-svn: 81548"},
[j]={{J,4248,"/// PerformImplicitConversion - Perform an implicit conversion of the\n/// expression From to the type ToType using the pre-computed implicit\n/// conversion sequence ICS. Returns the converted\n/// expression. Action is the kind of conversion we\'re performing,\n/// used in the error message.\nExprResult Sema::PerformImplicitConversion(Expr *From, QualType ToType, const ImplicitConversionSequence &ICS, AssignmentAction Action, CheckedConversionKind CCK) {\n  // ...\n  case ImplicitConversionSequence::AmbiguousConversion:\n   ICS.DiagnoseAmbiguousConversion(*this, From->getExprLoc(), PDiag(diag::err_typecheck_ambiguous_condition) << From->getSourceRange());"},{pb,9648,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n // ...\n case FK_ReferenceInitOverloadFailed:\n  case FK_UserConversionOverloadFailed:\n    // ...\n    case OR_Ambiguous:\n      FailedCandidateSet.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), Failure == FK_UserConversionOverloadFailed ? (S.PDiag(diag::err_typecheck_ambiguous_condition) << OnlyArg->getType() << DestType << Args[0]->getSourceRange()) : (S.PDiag(diag::err_ref_init_ambiguous) << DestType << OnlyArg->getType() << Args[0]->getSourceRange())), S, OCD_AmbiguousCandidates, Args);"},{vb,3774,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n // ...\n if (OvResult == OR_Ambiguous)\n    Diag(From->getBeginLoc(), diag::err_typecheck_ambiguous_condition) << From->getType() << ToType << From->getSourceRange();"}},
[b]={{y,644,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // ...\n  // C++ [dcl.fct.default]p4:\n //   For non-template functions, default arguments can be added in\n  //   later declarations of a function in the same\n  //  scope. Declarations in different scopes have completely\n  //  distinct sets of default arguments. That is, declarations in\n  //  inner scopes do not acquire default arguments from\n  //  declarations in outer scopes, and vice versa. In a given\n  //  function declaration, all parameters subsequent to a\n  //  parameter with a default argument shall have default\n  //  arguments supplied in this or previous declarations. A\n  //  default argument shall not be redefined by a later\n  //  declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //  Except for member functions of class templates, the default arguments\n  //  in a member function definition that appears outside of the class\n  //  definition are added to the set of default arguments provided by the\n //  member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    // ...\n    if (OldParamHasDfl && NewParamHasDfl) {\n   // ...\n   } else if (OldParamHasDfl) {\n    // ...\n    } else if (NewParamHasDfl) {\n      if (New->getDescribedFunctionTemplate()) {\n      // ...\n      } else if (New->getTemplateSpecializationKind() != TSK_ImplicitInstantiation && New->getTemplateSpecializationKind() != TSK_Undeclared) {\n      // ...\n      } else if (New->getDeclContext()->isDependentContext()) {\n       // ...\n       Diag(NewParam->getLocation(), diag::err_param_default_argument_member_template_redecl) << WhichKind << NewParam->getDefaultArgRange();"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/p4-0x.cpp"]={"clang/test/CXX/dcl.dcl/p4-0x.cpp:19:15: error: conversion from \'U\' to \'bool\' is ambiguous"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp:29:19: error: default arguments cannot be added to an out-of-line definition of a member of a class template","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp:33:26: error: default arguments cannot be added to an out-of-line definition of a member of a nested class in a template"}
}
}
},
},
["err_typecheck_arc_assign_externally_retained"]={
["err_param_default_argument_missing"]={
[b]={{nil,R,"err_typecheck_arc_assign_externally_retained"}},
[d]="err_param_default_argument_missing",
[c]={{nil,R,"variable declared with \'objc_externally_retained\' cannot be modified in ARC"}},
[e]="missing default argument on parameter",
[d]={{nil,R,"variable declared with \'objc_externally_retained\' cannot be modified in ARC"}},
[i]="missing default argument on parameter",
[e]=k,
[j]=k,
[g]="variable declared with \'objc_externally_retained\' cannot be modified in ARC",
[c]="missing default argument on parameter",
[h]=a,
[h]=a,
[i]={{nil,R,"ARC Semantic Issue"}},
[g]=m,
[f]={"1e36882b5291",1546626786,"[ObjCARC] Add an new attribute, objc_externally_retained","[ObjCARC] Add an new attribute, objc_externally_retained\n\nThis attribute, called \"objc_externally_retained\", exposes clang\'s\nnotion of pseudo-__strong variables in ARC. Pseudo-strong variables\n\"borrow\" their initializer, meaning that they don\'t retain/release\nit, instead assuming that someone else is keeping their value alive.\n\nIf a function is annotated with this attribute, implicitly strong\nparameters of that function aren\'t implicitly retained/released in\nthe function body, and are implicitly const. This is useful to expose\nfor performance reasons, most functions don\'t need the extra safety\nof the retain/release, so programmers can opt out as needed.\n\nThis attribute can also apply to declarations of local variables,\nwith similar effect.\n\nDifferential revision: https://reviews.llvm.org/D55865\n\nllvm-svn: 350422"},
[f]={t,1236199783,r,s},
[j]={{n,14313,"/// 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    // ...\n   // In ARC, use some specialized diagnostics for occasions where we\n   // infer \'const\'. These are always pseudo-strong variables.\n   if (S.getLangOpts().ObjCAutoRefCount) {\n      // ...\n     if (declRef && isa<VarDecl>(declRef->getDecl())) {\n       // ...\n       // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n         // ...\n         if (method && var == method->getSelfDecl()) {\n         // ...\n         } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n            DiagID = diag::err_typecheck_arc_assign_externally_retained;"}},
[b]={{y,1659,"/// CheckCXXDefaultArguments - Verify that the default arguments for a\n/// function declaration are well-formed according to C++\n/// [dcl.fct.default].\nvoid Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {\n  // ...\n  // C++20 [dcl.fct.default]p4:\n //   In a given function declaration, each parameter subsequent to a parameter\n //   with a default argument shall have a default argument supplied in this or\n //  a previous declaration, unless the parameter was expanded from a\n //   parameter pack, or shall be a function parameter pack.\n for (; ParamIdx < NumParams; ++ParamIdx) {\n   // ...\n   if (!Param->hasDefaultArg() && !Param->isParameterPack() && !(CurrentInstantiationScope && CurrentInstantiationScope->isLocalPackExpansion(Param))) {\n      if (Param->isInvalidDecl())\n     // ...\n     else if (Param->getIdentifier())\n     // ...\n     else\n        Diag(Param->getLocation(), diag::err_param_default_argument_missing);"}},
[l]={
[l]={
["clang/test/SemaObjC/externally-retained.m"]={"clang/test/SemaObjC/externally-retained.m:18:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:19:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:20:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:26:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:36:5: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:45:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:51:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:61:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:68:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:74:10: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:81:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:85:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:91:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:95:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:103:11: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:107:11: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC","clang/test/SemaObjC/externally-retained.m:114:9: error: variable declared with \'objc_externally_retained\' cannot be modified in ARC"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p4.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p4.cpp:40:24: error: missing default argument on parameter"}
}
}
},
},
["err_typecheck_arc_assign_self"]={
["err_param_default_argument_missing_name"]={
[b]="err_typecheck_arc_assign_self",
[d]="err_param_default_argument_missing_name",
[c]="cannot assign to \'self\' outside of a method in the init family",
[e]="missing default argument on parameter %0",
[d]="cannot assign to \'self\' outside of a method in the init family",
[i]="missing default argument on parameter A",
[e]=k,
[j]=k,
[g]="cannot assign to \'self\' outside of a method in the init family",
[c]="missing default argument on parameter (.*?)",
[h]=a,
[h]=a,
[i]="ARC Semantic Issue",
[g]=m,
[f]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>.","ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>.\n\nllvm-svn: 144572"},
[f]={t,1236199783,r,s},
[j]={{n,14309,"/// 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    // ...\n   // In ARC, use some specialized diagnostics for occasions where we\n   // infer \'const\'. These are always pseudo-strong variables.\n   if (S.getLangOpts().ObjCAutoRefCount) {\n      // ...\n     if (declRef && isa<VarDecl>(declRef->getDecl())) {\n       // ...\n       // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n         // ...\n         if (method && var == method->getSelfDecl()) {\n           DiagID = method->isClassMethod() ? diag::err_typecheck_arc_assign_self_class_method : diag::err_typecheck_arc_assign_self;"}},
[b]={{y,1655,"/// CheckCXXDefaultArguments - Verify that the default arguments for a\n/// function declaration are well-formed according to C++\n/// [dcl.fct.default].\nvoid Sema::CheckCXXDefaultArguments(FunctionDecl *FD) {\n  // ...\n  // C++20 [dcl.fct.default]p4:\n //   In a given function declaration, each parameter subsequent to a parameter\n //   with a default argument shall have a default argument supplied in this or\n //  a previous declaration, unless the parameter was expanded from a\n //   parameter pack, or shall be a function parameter pack.\n for (; ParamIdx < NumParams; ++ParamIdx) {\n   // ...\n   if (!Param->hasDefaultArg() && !Param->isParameterPack() && !(CurrentInstantiationScope && CurrentInstantiationScope->isLocalPackExpansion(Param))) {\n      if (Param->isInvalidDecl())\n     // ...\n     else if (Param->getIdentifier())\n       Diag(Param->getLocation(), diag::err_param_default_argument_missing_name) << Param->getIdentifier();"}},
[l]={
[l]={
["clang/test/ARCMT/checking.m"]={"clang/test/ARCMT/checking.m:142:8: error: cannot assign to \'self\' outside of a method in the init family"}
["clang/test/CXX/expr/expr.post/expr.call/p4.cpp"]={"clang/test/CXX/expr/expr.post/expr.call/p4.cpp:3:23: error: missing default argument on parameter \'y\'"}
}
}
},
},
["err_typecheck_arc_assign_self_class_method"]={
["err_param_default_argument_nonfunc"]={
[b]="err_typecheck_arc_assign_self_class_method",
[d]="err_param_default_argument_nonfunc",
[c]="cannot assign to \'self\' in a class method",
[e]="default arguments can only be specified for parameters in a function declaration",
[d]="cannot assign to \'self\' in a class method",
[i]="default arguments can only be specified for parameters in a function declaration",
[e]=k,
[j]=k,
[g]="cannot assign to \'self\' in a class method",
[c]="default arguments can only be specified for parameters in a function declaration",
[h]=a,
[h]=a,
[i]="ARC Semantic Issue",
[g]=m,
[f]={"1fcdaa9c058e",1321307965,"ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>.","ARC: make assignment to \'self\' within class methods illegal.  Fixes <rdar://problem/10416568>.\n\nllvm-svn: 144572"},
[f]={t,1236199783,r,s},
[j]={{n,14304,"/// 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    // ...\n    // In ARC, use some specialized diagnostics for occasions where we\n   // infer \'const\'. These are always pseudo-strong variables.\n   if (S.getLangOpts().ObjCAutoRefCount) {\n     // ...\n     if (declRef && isa<VarDecl>(declRef->getDecl())) {\n       // ...\n       // Use the normal diagnostic if it\'s pseudo-__strong but the\n       // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n         // ...\n         if (method && var == method->getSelfDecl()) {\n           DiagID = method->isClassMethod() ? diag::err_typecheck_arc_assign_self_class_method : diag::err_typecheck_arc_assign_self;"}}
[b]={{y,441,"/// CheckExtraCXXDefaultArguments - Check for any extra default\n/// arguments in the declarator, which is not a function declaration\n/// or definition and therefore is not permitted to have default\n/// arguments. This routine should be invoked for every declarator\n/// that is not a function declaration or definition.\nvoid Sema::CheckExtraCXXDefaultArguments(Declarator &D) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    if (chunk.Kind == DeclaratorChunk::Function) {\n     // ...\n     for (unsigned argIdx = 0, e = chunk.Fun.NumParams; argIdx != e; ++argIdx) {\n       // ...\n       if (Param->hasUnparsedDefaultArg()) {\n         // ...\n         Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc) << SR;"},{y,444,"/// CheckExtraCXXDefaultArguments - Check for any extra default\n/// arguments in the declarator, which is not a function declaration\n/// or definition and therefore is not permitted to have default\n/// arguments. This routine should be invoked for every declarator\n/// that is not a function declaration or definition.\nvoid Sema::CheckExtraCXXDefaultArguments(Declarator &D) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n   // ...\n   if (chunk.Kind == DeclaratorChunk::Function) {\n     // ...\n      for (unsigned argIdx = 0, e = chunk.Fun.NumParams; argIdx != e; ++argIdx) {\n       // ...\n       if (Param->hasUnparsedDefaultArg()) {\n       // ...\n       } else if (Param->getDefaultArg()) {\n          Diag(Param->getLocation(), diag::err_param_default_argument_nonfunc) << Param->getDefaultArg()->getSourceRange();"}},
},
["err_typecheck_arithmetic_incomplete_or_sizeless_type"]={
[b]={{nil,s,"err_typecheck_arithmetic_incomplete_or_sizeless_type"}},
[c]={{nil,s,"arithmetic on a pointer to %select{an incomplete|sizeless}0 type %1"}},
[d]={{nil,s,{"arithmetic on a pointer to ",{"an incomplete","sizeless"}," type B"}}},
[e]=k,
[g]="arithmetic on a pointer to (?:an incomplete|sizeless) type (.*?)",
[h]=a,
[i]={{nil,s,m}},
[f]={Q,1576908663,O,N},
[j]={{n,11577,"/// Emit error if Operand is incomplete pointer type\n///\n/// \\returns True if pointer has incomplete type\nstatic bool checkArithmeticIncompletePointerType(Sema &S, SourceLocation Loc, Expr *Operand) {\n // ...\n return S.RequireCompleteSizedType(Loc, PointeeTy, diag::err_typecheck_arithmetic_incomplete_or_sizeless_type, Operand->getSourceRange());"}},
[l]={
[l]={
["clang/test/Sema/empty1.c"]={"clang/test/Sema/empty1.c:74:12: error: arithmetic on a pointer to an incomplete type \'struct A\'","clang/test/Sema/empty1.c:82:12: error: arithmetic on a pointer to an incomplete type \'struct emp_1[]\'"}
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:13:22: error: default arguments can only be specified for parameters in a function declaration"}
}
}
},
},
["err_typecheck_arr_assign_enumeration"]={
["err_param_default_argument_on_parameter_pack"]={
[b]="err_typecheck_arr_assign_enumeration",
[d]="err_param_default_argument_on_parameter_pack",
[c]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
[e]="parameter pack cannot have a default argument",
[d]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
[i]="parameter pack cannot have a default argument",
[e]=k,
[j]=k,
[g]="fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this",
[c]="parameter pack cannot have a default argument",
[h]=a,
[h]=a,
[i]="ARC Semantic Issue",
[g]=m,
[f]={"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"},
[f]={"3b8044c02d33",1427464711,"[Sema] Diagnose default argument on a parameter pack.","[Sema] Diagnose default argument on a parameter pack.\n\nThis is ill-formed (and cannot be used anyways).\n\nPR23028.\n\nllvm-svn: 233376"},
[j]={{"clang/lib/ARCMigrate/TransARCAssign.cpp",58,"class ARCAssignChecker : public RecursiveASTVisitor<ARCAssignChecker> {\n  // ...\n  bool VisitBinaryOperator(BinaryOperator *Exp) {\n    // ...\n    if (declRef && isa<VarDecl>(declRef->getDecl())) {\n     // ...\n      if (var->isARCPseudoStrong()) {\n        // ...\n        if (Pass.TA.clearDiagnostic(diag::err_typecheck_arr_assign_enumeration, Exp->getOperatorLoc())) {"},{n,14343,"/// 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    // ...\n   // In ARC, use some specialized diagnostics for occasions where we\n    // infer \'const\'. These are always pseudo-strong variables.\n    if (S.getLangOpts().ObjCAutoRefCount) {\n      // ...\n     if (declRef && isa<VarDecl>(declRef->getDecl())) {\n        // ...\n       // Use the normal diagnostic if it\'s pseudo-__strong but the\n        // user actually wrote \'const\'.\n        if (var->isARCPseudoStrong() && (!var->getTypeSourceInfo() || !var->getTypeSourceInfo()->getType().isConstQualified())) {\n         // ...\n          if (method && var == method->getSelfDecl()) {\n          // ...\n          } else if (var->hasAttr<ObjCExternallyRetainedAttr>() || isa<ParmVarDecl>(var)) {\n          // ...\n          } else {\n            DiagID = diag::err_typecheck_arr_assign_enumeration;"}},
[b]={{y,355,"/// ActOnParamDefaultArgument - Check whether the default argument\n/// provided for a function parameter is well-formed. If so, attach it\n/// to the parameter declaration.\nvoid Sema::ActOnParamDefaultArgument(Decl *param, SourceLocation EqualLoc, Expr *DefaultArg) {\n  // ...\n  // C++11 [dcl.fct.default]p3\n  //   A default argument expression [...] shall not be specified for a\n //   parameter pack.\n if (Param->isParameterPack()) {\n   Diag(EqualLoc, diag::err_param_default_argument_on_parameter_pack) << DefaultArg->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:306:7: error: fast enumeration variables cannot be modified in ARC by default; declare the variable __strong to allow this"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p3.cpp:19:24: error: parameter pack cannot have a default argument"}
}
}
},
},
["err_typecheck_array_not_modifiable_lvalue"]={
["err_param_default_argument_redefinition"]={
[b]="err_typecheck_array_not_modifiable_lvalue",
[d]="err_param_default_argument_redefinition",
[c]="array type %0 is not assignable",
[e]="redefinition of default argument",
[d]="array type A is not assignable",
[i]="redefinition of default argument",
[e]=k,
[j]=k,
[g]="array type (.*?) is not assignable",
[c]="redefinition of default argument",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{n,14347,"/// 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_ArrayType:\n  case Expr::MLV_ArrayTemporary:\n    DiagID = diag::err_typecheck_array_not_modifiable_lvalue;"}}
[b]={{y,538,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // ...\n  // C++ [dcl.fct.default]p4:\n  //   For non-template functions, default arguments can be added in\n //   later declarations of a function in the same\n  //   scope. Declarations in different scopes have completely\n  //   distinct sets of default arguments. That is, declarations in\n //   inner scopes do not acquire default arguments from\n //   declarations in outer scopes, and vice versa. In a given\n //   function declaration, all parameters subsequent to a\n //   parameter with a default argument shall have default\n  //   arguments supplied in this or previous declarations. A\n  //   default argument shall not be redefined by a later\n  //   declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //   Except for member functions of class templates, the default arguments\n //   in a member function definition that appears outside of the class\n //   definition are added to the set of default arguments provided by the\n  //   member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    // ...\n    if (OldParamHasDfl && NewParamHasDfl) {\n      unsigned DiagDefaultParamID = diag::err_param_default_argument_redefinition;"}},
},
["err_typecheck_assign_const"]={
[b]="err_typecheck_assign_const",
[c]={{nil,A,"%select{cannot assign to return value because function %1 returns a const value|cannot assign to variable %1 with const-qualified type %2|cannot assign to %select{non-|}1static data member %2 with const-qualified type %3|cannot assign to non-static data member within const member function %1|cannot assign to %select{variable %2|non-static data member %2|lvalue}1 with %select{|nested }3const-qualified data member %4|read-only variable is not assignable}0"},{E,nil,"%select{cannot assign to return value because function %1 returns a const value|cannot assign to variable %1 with const-qualified type %2|cannot assign to %select{non-|}1static data member %2 with const-qualified type %3|cannot assign to non-static data member within const member function %1|read-only variable is not assignable}0"}},
[d]={{nil,A,{{"cannot assign to return value because function B returns a const value","cannot assign to variable B with const-qualified type C",{"cannot assign to ",{"non-",a},"static data member C with const-qualified type D"},"cannot assign to non-static data member within const member function B",{"cannot assign to ",{"variable C","non-static data member C","lvalue"}," with ",{a,"nested "},"const-qualified data member E"},"read-only variable is not assignable"}}},{E,nil,{{"cannot assign to return value because function B returns a const value","cannot assign to variable B with const-qualified type C",{"cannot assign to ",{"non-",a},"static data member C with const-qualified type D"},"cannot assign to non-static data member within const member function B","read-only variable is not assignable"}}}},
[e]=k,
[g]="(?:cannot assign to return value because function (.*?) returns a const value|cannot assign to variable (.*?) with const\\-qualified type (.*?)|cannot assign to (?:non\\-|)static data member (.*?) with const\\-qualified type (.*?)|cannot assign to non\\-static data member within const member function (.*?)|cannot assign to (?:variable (.*?)|non\\-static data member (.*?)|lvalue) with (?:|nested )const\\-qualified data member (.*?)|read\\-only variable is not assignable)",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{n,14105,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // ...\n  // Loop to process MemberExpr chains.\n  while (true) {\n    // ...\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n     // ...\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n        // ...\n        if (!IsTypeModifiable(Field->getType(), IsDereference)) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << false /*static*/ << Field << Field->getType();"},{n,14119,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // ...\n  // Loop to process MemberExpr chains.\n  while (true) {\n    // ...\n    if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) {\n      // ...\n      if (const FieldDecl *Field = dyn_cast<FieldDecl>(VD)) {\n      // ...\n      } else if (const VarDecl *VDecl = dyn_cast<VarDecl>(VD)) {\n        if (VDecl->getType().isConstQualified()) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMember << true /*static*/ << VDecl << VDecl->getType();"},{n,14149,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // ...\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n    // ...\n    if (FD && !IsTypeModifiable(FD->getReturnType(), IsDereference)) {\n     if (!DiagnosticEmitted) {\n        S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstFunction << FD;"},{n,14162,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // ...\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  // ...\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n    // Point to variable declaration.\n    if (const ValueDecl *VD = DRE->getDecl()) {\n      if (!IsTypeModifiable(VD->getType(), IsDereference)) {\n        if (!DiagnosticEmitted) {\n          S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstVariable << VD << VD->getType();"},{n,14175,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // ...\n  if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {\n  // ...\n  } else if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n  // ...\n  } else if (isa<CXXThisExpr>(E)) {\n    if (const DeclContext *DC = S.getFunctionLevelDeclContext()) {\n      if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(DC)) {\n        if (MD->isConst()) {\n          if (!DiagnosticEmitted) {\n            S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstMethod << MD;"},{n,14213,"/// Emit the \"read-only variable not assignable\" error and print notes to give\n/// more information about why the variable is not assignable, such as pointing\n/// to the declaration of a const variable, showing that a method is const, or\n/// that the function is returning a const reference.\nstatic void DiagnoseConstAssignment(Sema &S, const Expr *E, SourceLocation Loc) {\n  // ...\n  S.Diag(Loc, diag::err_typecheck_assign_const) << ExprRange << ConstUnknown;"},{n,14218,"static void DiagnoseRecursiveConstFields(Sema &S, const ValueDecl *VD, const RecordType *Ty, SourceLocation Loc, SourceRange Range, OriginalExprKind OEK, bool &DiagnosticEmitted) {\n  // ...\n  // We walk the record hierarchy breadth-first to ensure that we print\n  // diagnostics in field nesting order.\n  while (RecordTypeList.size() > NextToCheckIndex) {\n    // ...\n    for (const FieldDecl *Field : RecordTypeList[NextToCheckIndex]->getDecl()->fields()) {\n      // ...\n      if (FieldTy.isConstQualified()) {\n        if (!DiagnosticEmitted) {\n          S.Diag(Loc, diag::err_typecheck_assign_const) << Range << NestedConstMember << OEK << VD << IsNested << Field;"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx0x-constexpr-const.cpp"]={"clang/test/SemaCXX/cxx0x-constexpr-const.cpp:7:5: error: cannot assign to variable \'x\' with const-qualified type \'const int\'"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p6.cpp:9:15: error: redefinition of default argument"}
}
}
},
},
["err_typecheck_bool_condition"]={
["err_param_default_argument_references_local"]={
[b]="err_typecheck_bool_condition",
[d]="err_param_default_argument_references_local",
[c]="value of type %0 is not contextually convertible to \'bool\'",
[e]="default argument references local variable %0 of enclosing function",
[d]="value of type A is not contextually convertible to \'bool\'",
[i]="default argument references local variable A of enclosing function",
[e]=k,
[j]=k,
[g]="value of type (.*?) is not contextually convertible to \'bool\'",
[c]="default argument references local variable (.*?) of enclosing function",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{vb,5744,"/// PerformContextuallyConvertToBool - Perform a contextual conversion\n/// of the expression From to bool (C++0x [conv]p3).\nExprResult Sema::PerformContextuallyConvertToBool(Expr *From) {\n // ...\n if (!DiagnoseMultipleUserDefinedConversion(From, Context.BoolTy))\n   return Diag(From->getBeginLoc(), diag::err_typecheck_bool_condition) << From->getType() << From->getSourceRange();"}},
[b]={{y,128,"/// VisitDeclRefExpr - Visit a reference to a declaration, to\n/// determine whether this declaration can be used in the default\n/// argument expression.\nbool CheckDefaultArgumentVisitor::VisitDeclRefExpr(const DeclRefExpr *DRE) {\n  // ...\n  if (const auto *Param = dyn_cast<ParmVarDecl>(Decl)) {\n  // ...\n  } else if (auto *VD = Decl->getPotentiallyDecomposedVarDecl()) {\n    // C++ [dcl.fct.default]p7:\n    //  Local variables shall not be used in default argument\n    //  expressions.\n    //\n    // C++17 [dcl.fct.default]p7 (by CWG 2082):\n    //  A local variable shall not appear as a potentially-evaluated\n    //  expression in a default argument.\n    //\n    // C++20 [dcl.fct.default]p7 (DR as part of P0588R1, see also CWG 2346):\n    //  Note: A local variable cannot be odr-used (6.3) in a default\n   //   argument.\n   //\n    if (VD->isLocalVarDecl() && !DRE->isNonOdrUse())\n     return S.Diag(DRE->getBeginLoc(), diag::err_param_default_argument_references_local) << Decl << DefaultArg->getSourceRange();"}},
[l]={
[l]={
["clang/test/Parser/decomposed-condition.cpp"]={"clang/test/Parser/decomposed-condition.cpp:38:12: error: value of type \'Na\' is not contextually convertible to \'bool\'","clang/test/Parser/decomposed-condition.cpp:49:15: error: value of type \'Na\' is not contextually convertible to \'bool\'","clang/test/Parser/decomposed-condition.cpp:60:15: error: value of type \'Na\' is not contextually convertible to \'bool\'"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp:5:26: error: default argument references local variable \'i1\' of enclosing function","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp:13:34: error: default argument references local variable \'i3\' of enclosing function","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp:24:24: error: default argument references local variable \'\' of enclosing function","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p7.cpp:30:24: error: default argument references local variable \'x\' of enclosing function"}
}
}
},
},
["err_typecheck_call_different_arg_types"]={
["err_param_default_argument_references_param"]={
[b]={{nil,v,"err_typecheck_call_different_arg_types"}},
[d]="err_param_default_argument_references_param",
[c]={{nil,v,"arguments are of different types%diff{ ($ vs $)|}0,1"}},
[e]="default argument references parameter %0",
[d]={{nil,v,{"arguments are of different types",{" (A vs B)",a}}}},
[i]="default argument references parameter A",
[e]=k,
[j]=k,
[g]="arguments are of different types(?: \\((.*?) vs (.*?)\\)|)",
[c]="default argument references parameter (.*?)",
[h]=a,
[h]=a,
[i]={{nil,v,m}},
[g]=m,
[f]={Qb,1582847864,Ob,Nb},
[f]={t,1236199783,r,s},
[j]={{w,2724,"#include \"clang/Basic/Builtins.def\"\n // ...\n  case Builtin::BI__builtin_elementwise_copysign: {\n    // ...\n    if (MagnitudeTy.getCanonicalType() != SignTy.getCanonicalType()) {\n     return Diag(Sign.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << MagnitudeTy << SignTy;"},{w,8368,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n  // ...\n  if (!Context.hasSameType(Real->getType(), Imag->getType())) {\n    return Diag(Real->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Real->getType() << Imag->getType() << Real->getSourceRange() << Imag->getSourceRange();"},{w,18659,"bool Sema::SemaBuiltinElementwiseMath(CallExpr *TheCall) {\n // ...\n if (Res.isNull() || TyA.getCanonicalType() != TyB.getCanonicalType())\n    return Diag(A.get()->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << TyA << TyB;"},{w,18694,"bool Sema::SemaBuiltinElementwiseTernaryMath(CallExpr *TheCall) {\n // ...\n for (int I = 1; I < 3; ++I) {\n    if (Args[0]->getType().getCanonicalType() != Args[I]->getType().getCanonicalType()) {\n      return Diag(Args[0]->getBeginLoc(), diag::err_typecheck_call_different_arg_types) << Args[0]->getType() << Args[I]->getType();"}},
[b]={{y,111,"/// VisitDeclRefExpr - Visit a reference to a declaration, to\n/// determine whether this declaration can be used in the default\n/// argument expression.\nbool CheckDefaultArgumentVisitor::VisitDeclRefExpr(const DeclRefExpr *DRE) {\n  // ...\n  if (const auto *Param = dyn_cast<ParmVarDecl>(Decl)) {\n    // C++ [dcl.fct.default]p9:\n   //   [...] parameters of a function shall not be used in default\n   //  argument expressions, even if they are not evaluated. [...]\n    //\n    // C++17 [dcl.fct.default]p9 (by CWG 2082):\n    //  [...] A parameter shall not appear as a potentially-evaluated\n   //   expression in a default argument. [...]\n   //\n    if (DRE->isNonOdrUse() != NOUR_Unevaluated)\n      return S.Diag(DRE->getBeginLoc(), diag::err_param_default_argument_references_param) << Param->getDeclName() << DefaultArg->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/builtins-elementwise-math.c"]={"clang/test/Sema/builtins-elementwise-math.c:47:37: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:62:37: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:65:37: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:105:37: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:120:37: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:123:37: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:163:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:178:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:181:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:218:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:233:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:236:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:442:33: error: arguments are of different types (\'int *\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:457:33: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:460:33: error: arguments are of different types (\'unsigned3\' (vector of 3 \'unsigned int\' values) vs \'int3\' (vector of 3 \'int\' values))","clang/test/Sema/builtins-elementwise-math.c:690:53: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:693:50: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:697:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:700:50: error: arguments are of different types (\'float\' vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:705:56: error: arguments are of different types (\'double4\' (vector of 4 \'double\' values) vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:708:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'double4\' (vector of 4 \'double\' values))","clang/test/Sema/builtins-elementwise-math.c:711:55: error: arguments are of different types (\'float4\' (vector of 4 \'float\' values) vs \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:714:55: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:739:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:742:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:745:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:748:35: error: arguments are of different types (\'float\' vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:751:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:754:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:757:35: error: arguments are of different types (\'double\' vs \'float\')","clang/test/Sema/builtins-elementwise-math.c:760:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:763:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double2\' (vector of 2 \'double\' values))","clang/test/Sema/builtins-elementwise-math.c:766:37: error: arguments are of different types (\'float2\' (vector of 2 \'float\' values) vs \'double\')","clang/test/Sema/builtins-elementwise-math.c:769:37: error: arguments are of different types (\'double\' vs \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/builtins-elementwise-math.c:772:37: error: arguments are of different types (\'double\' vs \'double2\' (vector of 2 \'double\' values))"}
["clang/test/CXX/basic/basic.lookup/basic.lookup.unqual/p11.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.unqual/p11.cpp:6:17: error: default argument references parameter \'a\'"}
}
}
},
},
["err_typecheck_call_invalid_ordered_compare"]={
["err_param_default_argument_references_this"]={
[b]="err_typecheck_call_invalid_ordered_compare",
[d]="err_param_default_argument_references_this",
[c]="ordered compare requires two args of floating point type%diff{ ($ and $)|}0,1",
[e]="default argument references \'this\'",
[d]={{nil,nil,{"ordered compare requires two args of floating point type",{Pb,a}}}},
[i]="default argument references \'this\'",
[e]=k,
[j]=k,
[g]="ordered compare requires two args of floating point type(?: \\((.*?) and (.*?)\\)|)",
[c]="default argument references \'this\'",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{w,8269,"/// SemaBuiltinUnorderedCompare - Handle functions like __builtin_isgreater and\n/// friends.  This is declared to take (...), so we have to check everything.\nbool Sema::SemaBuiltinUnorderedCompare(CallExpr *TheCall) {\n  // ...\n  // If the common type isn\'t a real floating type, then the arguments were\n  // invalid for this operation.\n  if (Res.isNull() || !Res->isRealFloatingType())\n    return Diag(OrigArg0.get()->getBeginLoc(), diag::err_typecheck_call_invalid_ordered_compare) << OrigArg0.get()->getType() << OrigArg1.get()->getType() << SourceRange(OrigArg0.get()->getBeginLoc(), OrigArg1.get()->getEndLoc());"}},
[b]={{y,140,"/// VisitCXXThisExpr - Visit a C++ \"this\" expression.\nbool CheckDefaultArgumentVisitor::VisitCXXThisExpr(const CXXThisExpr *ThisE) {\n  // ...\n  return S.Diag(ThisE->getBeginLoc(), diag::err_param_default_argument_references_this) << ThisE->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/builtins.c"]={"clang/test/Sema/builtins.c:8:32: error: ordered compare requires two args of floating point type (\'int\' and \'int\')","clang/test/Sema/builtins.c:15:32: error: ordered compare requires two args of floating point type (\'int *\' and \'double\')"}
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p8.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p8.cpp:13:23: error: default argument references \'this\'"}
}
}
},
},
["err_typecheck_call_invalid_unary_fp"]={
["err_param_default_argument_template_redecl"]={
[b]="err_typecheck_call_invalid_unary_fp",
[d]="err_param_default_argument_template_redecl",
[c]="floating point classification requires argument of floating point type (passed in %0)",
[e]="default arguments cannot be added to a function template that has already been declared",
[d]="floating point classification requires argument of floating point type (passed in A)",
[i]="default arguments cannot be added to a function template that has already been declared",
[e]=k,
[j]=k,
[g]="floating point classification requires argument of floating point type \\(passed in (.*?)\\)",
[c]="default arguments cannot be added to a function template that has already been declared",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"7e4faaccda69",1251749160,"PR4836, part 1: add Sema support for __builtin_isnan and friends; they ","PR4836, part 1: add Sema support for __builtin_isnan and friends; they \nare apparently used by Solaris libc despite the fact that clang claims \nto be compatible with gcc 4.2, which doesn\'t support them.\n\nllvm-svn: 80610"},
[f]={"c732aba9a98c",1252694672,"Cleanup and test C++ default arguments. Improvements include:","Cleanup and test C++ default arguments. Improvements include:\n\n  - Diagnose attempts to add default arguments to templates (or member\n    functions of templates) after the initial declaration (DR217).\n  - Improve diagnostics when a default argument is redefined. Now, the\n    note will always point at the place where the default argument was\n    previously defined, rather than pointing to the most recent\n    declaration of the function.\n\nllvm-svn: 81548"},
[j]={{w,8320,"/// SemaBuiltinSemaBuiltinFPClassification - Handle functions like\n/// __builtin_isnan and friends.  This is declared to take (...), so we have\n/// to check everything. We expect the last argument to be a floating point\n/// value.\nbool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) {\n  // ...\n  // This operation requires a non-_Complex floating-point number.\n  if (!OrigArg->getType()->isRealFloatingType())\n   return Diag(OrigArg->getBeginLoc(), diag::err_typecheck_call_invalid_unary_fp) << OrigArg->getType() << OrigArg->getSourceRange();"}},
[b]={{y,601,"/// MergeCXXFunctionDecl - Merge two declarations of the same C++\n/// function, once we already know that they have the same\n/// type. Subroutine of MergeFunctionDecl. Returns true if there was an\n/// error, false otherwise.\nbool Sema::MergeCXXFunctionDecl(FunctionDecl *New, FunctionDecl *Old, Scope *S) {\n  // ...\n  // C++ [dcl.fct.default]p4:\n  //  For non-template functions, default arguments can be added in\n  //  later declarations of a function in the same\n  //  scope. Declarations in different scopes have completely\n  //  distinct sets of default arguments. That is, declarations in\n  //  inner scopes do not acquire default arguments from\n  //  declarations in outer scopes, and vice versa. In a given\n  //  function declaration, all parameters subsequent to a\n  //  parameter with a default argument shall have default\n  //  arguments supplied in this or previous declarations. A\n  //  default argument shall not be redefined by a later\n  //  declaration (not even to the same value).\n  //\n  // C++ [dcl.fct.default]p6:\n  //  Except for member functions of class templates, the default arguments\n  //  in a member function definition that appears outside of the class\n  //  definition are added to the set of default arguments provided by the\n  //  member function declaration in the class definition.\n  for (unsigned p = 0, NumParams = PrevForDefaultArgs ? PrevForDefaultArgs->getNumParams() : 0; p < NumParams; ++p) {\n    // ...\n    if (OldParamHasDfl && NewParamHasDfl) {\n    // ...\n    } else if (OldParamHasDfl) {\n    // ...\n    } else if (NewParamHasDfl) {\n      if (New->getDescribedFunctionTemplate()) {\n       // ...\n        Diag(NewParam->getLocation(), diag::err_param_default_argument_template_redecl) << NewParam->getDefaultArgRange();"}},
[l]={
[l]={
["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:9:28: error: floating point classification requires argument of floating point type (passed in \'int\')","clang/test/Sema/builtin-unary-fp.c:13:45: error: floating point classification requires argument of floating point type (passed in \'int\')"}
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p21.cpp:19:25: error: default arguments cannot be added to a function template that has already been declared"}
}
}
},
},
["err_typecheck_call_not_function"]={
["err_param_redefinition"]={
[b]="err_typecheck_call_not_function",
[d]="err_param_redefinition",
[c]="called object type %0 is not a function or function pointer",
[e]="redefinition of parameter %0",
[d]="called object type A is not a function or function pointer",
[i]="redefinition of parameter A",
[e]=k,
[j]=k,
[g]="called object type (.*?) is not a function or function pointer",
[c]="redefinition of parameter (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=K,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{n,7417,"/// 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  retry:\n    if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n     // ...\n     if (!FuncT)\n       return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"},{n,7483,"/// 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  retry:\n    if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) {\n    // ...\n    } else if (const BlockPointerType *BPT = Fn->getType()->getAs<BlockPointerType>()) {\n   // ...\n   } else {\n      // ...\n      return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) << Fn->getType() << Fn->getSourceRange());"}},
[b]={{ib,7241,"/// ParseFunctionDeclaratorIdentifierList - While parsing a function declarator\n/// we found a K&R-style identifier list instead of a typed parameter list.\n///\n/// After returning, ParamInfo will hold the parsed parameters.\n///\n///       identifier-list: [C99 6.7.5]\n///         identifier\n///         identifier-list \',\' identifier\n///\nvoid Parser::ParseFunctionDeclaratorIdentifierList(Declarator &D, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo) {\n  // ...\n  do {\n    // ...\n   // Verify that the argument identifier has not already been mentioned.\n   if (!ParamsSoFar.insert(ParmII).second) {\n     Diag(Tok, diag::err_param_redefinition) << ParmII;"},{"clang/lib/Parse/Parser.cpp",1573,"/// 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          // ...\n          if (FTI.Params[i].Ident == ParmDeclarator.getIdentifier()) {\n           // Reject redefinitions of parameters.\n            if (FTI.Params[i].Param) {\n              Diag(ParmDeclarator.getIdentifierLoc(), diag::err_param_redefinition) << ParmDeclarator.getIdentifier();"},{G,14782,"/// ActOnParamDeclarator - Called from Parser::ParseFunctionDeclarator()\n/// to introduce parameters into function prototype scope.\nDecl *Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (II) {\n    // ...\n    if (R.isSingleResult()) {\n     // ...\n     if (PrevDecl->isTemplateParameter()) {\n      // ...\n      } else if (S->isDeclScope(PrevDecl)) {\n        Diag(D.getIdentifierLoc(), diag::err_param_redefinition) << II;"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp:17:10: error: called object type \'test0::Test::E\' is not a function or function pointer"}
["clang/test/Parser/declarators.c"]={"clang/test/Parser/declarators.c:34:15: error: redefinition of parameter \'x\'"}
}
}
},
},
["err_typecheck_call_requires_real_fp"]={
["err_param_with_void_type"]={
[b]={{nil,v,"err_typecheck_call_requires_real_fp"}},
[d]="err_param_with_void_type",
[c]={{nil,v,"argument type %0 is not a real floating point type"}},
[e]="argument may not have \'void\' type",
[d]={{nil,v,"argument type A is not a real floating point type"}},
[i]="argument may not have \'void\' type",
[e]=k,
[j]=k,
[g]="argument type (.*?) is not a real floating point type",
[c]="argument may not have \'void\' type",
[h]=a,
[h]=a,
[i]={{nil,v,m}},
[g]=m,
[f]={Qb,1582847864,Ob,Nb},
[f]={t,1236199783,r,s},
[j]={{w,8349,"/// Perform semantic analysis for a call to __builtin_complex.\nbool Sema::SemaBuiltinComplex(CallExpr *TheCall) {\n  // ...\n  for (unsigned I = 0; I != 2; ++I) {\n    // ...\n    // Despite supporting _Complex int, GCC requires a real floating point type\n   // for the operands of __builtin_complex.\n   if (!T->isRealFloatingType()) {\n      return Diag(Arg->getBeginLoc(), diag::err_typecheck_call_requires_real_fp) << Arg->getType() << Arg->getSourceRange();"}},
[b]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp",2853,"ParmVarDecl *Sema::SubstParmVarDecl(ParmVarDecl *OldParm, const MultiLevelTemplateArgumentList &TemplateArgs, int indexAdjustment, std::optional<unsigned> NumExpansions, bool ExpectParameterPack, bool EvaluateConstraint) {\n  // ...\n  if (NewDI->getType()->isVoidType()) {\n    Diag(OldParm->getLocation(), diag::err_param_with_void_type);"},{H,3025,"QualType Sema::BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes, SourceLocation Loc, DeclarationName Entity, const FunctionProtoType::ExtProtoInfo &EPI) {\n  // ...\n  for (unsigned Idx = 0, Cnt = ParamTypes.size(); Idx < Cnt; ++Idx) {\n    // ...\n    if (ParamType->isVoidType()) {\n      Diag(Loc, diag::err_param_with_void_type);"},{H,5508,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::Function: {\n      // ...\n      // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n      // strict prototypes as in C2x because it allows a function definition to\n     // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n     if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n      // ...\n      } else {\n        // ...\n        for (unsigned i = 0, e = FTI.NumParams; i != e; ++i) {\n          // ...\n          // Look for \'void\'.  void is allowed only as a single parameter to a\n          // function with no other parameters (C99 6.7.5.3p10).  We record\n          // int(void) as a FunctionProtoType with an empty parameter list.\n          if (ParamTy->isVoidType()) {\n            // If this is something like \'float(int, void)\', reject it.  \'void\'\n            // is an incomplete type (C99 6.2.5p19) and function decls cannot\n            // have parameters of incomplete type.\n            if (FTI.NumParams != 1 || FTI.isVariadic) {\n            // ...\n            } else if (FTI.Params[i].Ident) {\n              // ...\n              S.Diag(FTI.Params[i].IdentLoc, diag::err_param_with_void_type);"}},
[l]={
[l]={
["clang/test/Sema/builtins.c"]={"clang/test/Sema/builtins.c:373:21: error: argument type \'int\' is not a real floating point type","clang/test/Sema/builtins.c:374:21: error: argument type \'int\' is not a real floating point type","clang/test/Sema/builtins.c:375:26: error: argument type \'int\' is not a real floating point type"}
["clang/test/Sema/void_arg.c"]={"clang/test/Sema/void_arg.c:9:24: error: argument may not have \'void\' type","clang/test/Sema/void_arg.c:13:24: error: argument may not have \'void\' type"}
}
}
},
},
["err_typecheck_call_too_few_args"]={
["err_parameter_shadow_capture"]={
[b]="err_typecheck_call_too_few_args",
[d]={{nil,u,"err_parameter_shadow_capture"}},
[c]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2",
[e]={{nil,u,"a lambda parameter cannot shadow an explicitly captured entity"}},
[d]={{nil,nil,{bc,{a,a,a,V},W,{L,U,P,T}," call, expected B, have C"}}},
[i]={{nil,u,"a lambda parameter cannot shadow an explicitly captured entity"}},
[e]=k,
[j]=k,
[g]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?)",
[c]="a lambda parameter cannot shadow an explicitly captured entity",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,u,"Lambda Issue"}},
[f]={p,1237025389,q,r},
[f]={"3cde5e4a4c69",1540498503,"[C++17] Reject shadowing of capture by parameter in lambda","[C++17] Reject shadowing of capture by parameter in lambda\n\nSummary:\nThis change rejects the shadowing of a capture by a parameter in lambdas in C++17.\n\n```\nint main() {\n  int a;\n  auto f = [a](int a) { return a; };\n}\n```\n\nresults in:\n\n```\nmain.cpp:3:20: error: a lambda parameter cannot shadow an explicitly captured entity\n  auto f = [a](int a) { return a; };\n                   ^\nmain.cpp:3:13: note: variable a is explicitly captured here\n auto f = [a](int a) { return a; };\n           ^\n```\n\nReviewers: rsmith\n\nReviewed By: rsmith\n\nSubscribers: lebedev.ri, erik.pilkington, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D53595\n\nllvm-svn: 345308"},
[j]={{w,127,"/// Checks that a call expression\'s argument count is at least the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtLeast(Sema &S, CallExpr *Call, unsigned MinArgCount) {\n  // ...\n  return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /*function call*/ << MinArgCount << ArgCount << Call->getSourceRange();"},{w,7132,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n // ...\n // Check we have the right number of arguments.\n if (Args.size() < AdjustedNumArgs) {\n   Diag(CallRange.getEnd(), diag::err_typecheck_call_too_few_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{w,8700,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n  // ...\n  if (NumArgs < NumRequiredArgs) {\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args) << 0 /* function call */ << NumRequiredArgs << NumArgs << TheCall->getSourceRange();"},{n,6471,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\n // If too few arguments are available (and we don\'t have default\n // arguments for the remaining parameters), don\'t make the call.\n if (Args.size() < NumParams) {\n   if (Args.size() < MinArgs) {\n      // ...\n     if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      // ...\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      // ...\n     else\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"},{"clang/lib/Sema/SemaExprObjC.cpp",1803,"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  // FIXME. This need be cleaned up.\n if (Args.size() < NumNamedArgs) {\n   Diag(SelLoc, diag::err_typecheck_call_too_few_args) << 2 << NumNamedArgs << static_cast<unsigned>(Args.size());"}},
[b]={{"clang/lib/Sema/SemaLambda.cpp",1351,"void Sema::ActOnStartOfLambdaDefinition(LambdaIntroducer &Intro, Declarator &ParamInfo, const DeclSpec &DS) {\n  // ...\n  auto CheckRedefinition = [&](ParmVarDecl *Param) {\n    for (const auto &Capture : Intro.Captures) {\n     if (Capture.Id == Param->getIdentifier()) {\n       Diag(Param->getLocation(), diag::err_parameter_shadow_capture);"}},
[l]={
[l]={
["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:10:25: error: too few arguments to function call, expected 1, have 0","clang/test/Sema/builtin-unary-fp.c:15:43: error: too few arguments to function call, expected 6, have 5"}
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/expr.prim.lambda.capture/p5.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/expr.prim.lambda.capture/p5.cpp:5:20: error: a lambda parameter cannot shadow an explicitly captured entity"}
}
}
},
},
["err_typecheck_call_too_few_args_at_least"]={
["err_parameters_retval_cannot_have_fp16_type"]={
[b]="err_typecheck_call_too_few_args_at_least",
[d]="err_parameters_retval_cannot_have_fp16_type",
[c]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at least %1, have %2",
[e]="%select{parameters|function return value}0 cannot have __fp16 type; did you forget * ?",
[d]={{nil,nil,{bc,{a,a,a,V},W,{L,U,P,T}," call, expected at least B, have C"}}},
[i]={{nil,nil,{{"parameters","function return value"}," cannot have __fp16 type; did you forget * ?"}}},
[e]=k,
[j]=k,
[g]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at least (.*?), have (.*?)",
[c]="(?:parameters|function return value) cannot have __fp16 type; did you forget \\* \\?",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"abf1e18e32c9",1271393302,"Expand argument diagnostic for too few arguments to give the number","Expand argument diagnostic for too few arguments to give the number\nof arguments both seen and expected.\n\nFixes PR6501.\n\nllvm-svn: 101441"},
[f]={"f0c267e6e05c",1318634595,"Provide half floating point support as a storage only type.","Provide half floating point support as a storage only type.\nLack of half FP was a regression compared to llvm-gcc.\n\nllvm-svn: 142016"},
[j]={{w,219,"static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) {\n  // We need at least one argument.\n  if (TheCall->getNumArgs() < 1) {\n    S.Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << TheCall->getCallee()->getSourceRange();"},{w,1533,"/// OpenCL C v2.0, s6.13.17 - Enqueue kernel function contains four different\n/// overload formats specified in Table 6.13.17.1.\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(void))\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\n/// int enqueue_kernel(queue_t queue,\n///                    kernel_enqueue_flags_t flags,\n///                    const ndrange_t ndrange,\n///                    uint num_events_in_wait_list,\n///                    clk_event_t *event_wait_list,\n///                    clk_event_t *event_ret,\n///                    void (^block)(local void*, ...),\n///                    uint size0, ...)\nstatic bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) {\n // ...\n if (NumArgs < 4) {\n    S.Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 4 << NumArgs;"},{w,7535,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n // ...\n // Ensure that we have at least one argument to do type inference from.\n if (TheCall->getNumArgs() < 1) {\n   Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 << TheCall->getNumArgs() << Callee->getSourceRange();"},{w,7811,"/// We have a call to a function like __sync_fetch_and_add, which is an\n/// overloaded function based on the pointer type of its first argument.\n/// The main BuildCallExpr routines have already promoted the types of\n/// arguments because all of these calls are prototyped as void(...).\n///\n/// This function goes through and does final semantic checking for these\n/// builtins, as well as generating any warnings.\nExprResult Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {\n  // ...\n  // Now that we know how many fixed arguments we expect, first check that we\n  // have at least that many.\n  if (TheCall->getNumArgs() < 1 + NumFixed) {\n   Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 << 1 + NumFixed << TheCall->getNumArgs() << Callee->getSourceRange();"},{w,8201,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  // ...\n  if (Call->getNumArgs() < 3)\n    return Diag(Call->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 3 << Call->getNumArgs();"},{w,8441,"/// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.\n// This is declared to take (...), so we have to check everything.\nExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {\n if (TheCall->getNumArgs() < 2)\n   return ExprError(Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) << 0 /*function call*/ << 2 << TheCall->getNumArgs() << TheCall->getSourceRange());"},{n,6477,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n // ...\n // If too few arguments are available (and we don\'t have default\n // arguments for the remaining parameters), don\'t make the call.\n if (Args.size() < NumParams) {\n   if (Args.size() < MinArgs) {\n     // ...\n     if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n     // ...\n     } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n     // ...\n      else\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args : diag::err_typecheck_call_too_few_args_at_least) << FnKind << MinArgs << static_cast<unsigned>(Args.size()) << Fn->getSourceRange();"}},
[b]={{H,2920,"bool Sema::CheckFunctionReturnType(QualType T, SourceLocation Loc) {\n  // ...\n  // Functions cannot return half FP.\n  if (T->isHalfType() && !getLangOpts().NativeHalfArgsAndReturns && !Context.getTargetInfo().allowHalfArgsAndReturns()) {\n    Diag(Loc, diag::err_parameters_retval_cannot_have_fp16_type) << 1 << FixItHint::CreateInsertion(Loc, \"*\");"},{H,3030,"QualType Sema::BuildFunctionType(QualType T, MutableArrayRef<QualType> ParamTypes, SourceLocation Loc, DeclarationName Entity, const FunctionProtoType::ExtProtoInfo &EPI) {\n // ...\n for (unsigned Idx = 0, Cnt = ParamTypes.size(); Idx < Cnt; ++Idx) {\n   // ...\n   if (ParamType->isVoidType()) {\n   // ...\n   } else if (ParamType->isHalfType() && !getLangOpts().NativeHalfArgsAndReturns && !Context.getTargetInfo().allowHalfArgsAndReturns()) {\n     // ...\n     Diag(Loc, diag::err_parameters_retval_cannot_have_fp16_type) << 0 << FixItHint::CreateInsertion(Loc, \"*\");"},{H,5292,"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     // Do not allow returning half FP value.\n     // FIXME: This really should be in BuildFunctionType.\n     if (T->isHalfType()) {\n       if (S.getLangOpts().OpenCL) {\n       // ...\n       } else if (!S.getLangOpts().NativeHalfArgsAndReturns && !S.Context.getTargetInfo().allowHalfArgsAndReturns()) {\n         S.Diag(D.getIdentifierLoc(), diag::err_parameters_retval_cannot_have_fp16_type) << 1;"},{H,5533,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n   // ...\n    case DeclaratorChunk::Function: {\n     // ...\n     // OpenCL disallows functions without a prototype, but it doesn\'t enforce\n     // strict prototypes as in C2x because it allows a function definition to\n     // have an identifier list. See OpenCL 3.0 6.11/g for more details.\n     if (!FTI.NumParams && !FTI.isVariadic && !LangOpts.requiresStrictPrototypes() && !LangOpts.OpenCL) {\n     // ...\n     } else {\n       // ...\n        for (unsigned i = 0, e = FTI.NumParams; i != e; ++i) {\n         // ...\n         // Look for \'void\'.  void is allowed only as a single parameter to a\n         // function with no other parameters (C99 6.7.5.3p10).  We record\n          // int(void) as a FunctionProtoType with an empty parameter list.\n         if (ParamTy->isVoidType()) {\n         // ...\n          } else if (ParamTy->isHalfType()) {\n           // Disallow half FP parameters.\n            // FIXME: This really should be in BuildFunctionType.\n           if (S.getLangOpts().OpenCL) {\n           // ...\n           } else if (!S.getLangOpts().NativeHalfArgsAndReturns && !S.Context.getTargetInfo().allowHalfArgsAndReturns()) {\n             S.Diag(Param->getLocation(), diag::err_parameters_retval_cannot_have_fp16_type) << 0;"}},
[l]={
[l]={
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:182:12: error: too few arguments to function call, expected at least 2, have 0"}
["clang/test/Sema/fp16-sema.c"]={"clang/test/Sema/fp16-sema.c:5:22: error: parameters cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:8:26: error: parameters cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:11:26: error: parameters cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:15:9: error: parameters cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:23:15: error: function return value cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:26:17: error: function return value cannot have __fp16 type; did you forget * ?","clang/test/Sema/fp16-sema.c:29:18: error: function return value cannot have __fp16 type; did you forget * ?"}
}
}
},
},
["err_typecheck_call_too_few_args_at_least_one"]={
["err_paren_sizeof_parameter_pack"]={
[b]="err_typecheck_call_too_few_args_at_least_one",
[d]="err_paren_sizeof_parameter_pack",
[c]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, at least argument %1 must be specified",
[e]="missing parentheses around the size of parameter pack %0",
[d]={{nil,nil,{bc,{a,a,a,V},W,{L,U,P,T}," call, at least argument B must be specified"}}},
[i]="missing parentheses around the size of parameter pack A",
[e]=k,
[j]=k,
[g]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, at least argument (.*?) must be specified",
[c]="missing parentheses around the size of parameter pack (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=K,
[f]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function","PR11857: When the wrong number of arguments are provided for a function\nwhich expects exactly one argument, include the name of the argument in\nthe diagnostic text. Patch by Terry Long!\n\nllvm-svn: 156607"},
[f]={"820ba7ba43a2",1294162438,"Implement the sizeof...(pack) expression to compute the length of a","Implement the sizeof...(pack) expression to compute the length of a\nparameter pack.\n\nNote that we\'re missing proper libclang support for the new\nSizeOfPackExpr expression node.\n\nllvm-svn: 122813"},
[j]={{n,6470,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // ...\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n     // ...\n     if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      // ...\n      } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_one : diag::err_typecheck_call_too_few_args_at_least_one) << FnKind << FDecl->getParamDecl(0) << Fn->getSourceRange();"}},
[b]={{"clang/lib/Parse/ParseExpr.cpp",2472,"/// Parse a sizeof or alignof expression.\n///\n/// \\verbatim\n///       unary-expression:  [C99 6.5.3]\n///        \'sizeof\' unary-expression\n///         \'sizeof\' \'(\' type-name \')\'\n/// [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n/// [GNU]  \'__alignof\' unary-expression\n/// [GNU]  \'__alignof\' \'(\' type-name \')\'\n/// [C11]  \'_Alignof\' \'(\' type-name \')\'\n/// [C++11] \'alignof\' \'(\' type-id \')\'\n/// \\endverbatim\nExprResult Parser::ParseUnaryExprOrTypeTraitExpression() {\n  // ...\n  // [C++11] \'sizeof\' \'...\' \'(\' identifier \')\'\n  if (Tok.is(tok::ellipsis) && OpTok.is(tok::kw_sizeof)) {\n    // ...\n    if (Tok.is(tok::l_paren)) {\n   // ...\n   } else if (Tok.is(tok::identifier)) {\n      // ...\n      Diag(LParenLoc, diag::err_paren_sizeof_parameter_pack) << Name << FixItHint::CreateInsertion(LParenLoc, \"(\") << FixItHint::CreateInsertion(RParenLoc, \")\");"}},
[l]={
[l]={
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:181:12: error: too few arguments to function call, at least argument \'a\' must be specified"}
["clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp"]={"clang/test/CXX/expr/expr.unary/expr.sizeof/p5-0x.cpp:35:42: error: missing parentheses around the size of parameter pack \'Type\'"}
}
}
},
},
["err_typecheck_call_too_few_args_at_least_suggest"]={
["err_parens_pointer_member_function"]={
[b]="err_typecheck_call_too_few_args_at_least_suggest",
[d]="err_parens_pointer_member_function",
[c]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at least %1, have %2; did you mean %3?",
[e]="cannot parenthesize the name of a method when forming a member pointer",
[d]={{nil,nil,{bc,{a,a,a,V},W,{L,U,P,T}," call, expected at least B, have C; did you mean D?"}}},
[i]="cannot parenthesize the name of a method when forming a member pointer",
[e]=k,
[j]=k,
[g]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at least (.*?), have (.*?); did you mean (.*?)\\?",
[c]="cannot parenthesize the name of a method when forming a member pointer",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments.","Attempt typo correction for function calls with the wrong number of arguments.\n\nCombined with typo correction\'s new ability to apply global/absolute nested\nname specifiers to possible corrections, cases such as in PR12287 where the\ndesired function is being shadowed by a lexically closer function with the\nsame name but a different number of parameters will now include a FixIt.\n\nOn a side note, since the test for this change caused\ntest/SemaCXX/typo-correction.cpp to exceed the typo correction limit for\na single file, I\'ve included a test case for exceeding the limit and added\nsome comments to both the original and part two of typo-correction.cpp\nwarning future editors of the files about the limit.\n\nllvm-svn: 185881"},
[f]={"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]={{n,6465,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // ...\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n   if (Args.size() < MinArgs) {\n     // ...\n     if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n        unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_suggest : diag::err_typecheck_call_too_few_args_at_least_suggest;"}}
[b]={{E,14965,"/// CheckAddressOfOperand - The operand of & must be either a function\n/// designator or an lvalue designating an object. If it is an lvalue, the\n/// object cannot be declared with storage class register or be a bit field.\n/// Note: The usual conversions are *not* applied to the operand of the &\n/// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue.\n/// In C++, the operand might be an overloaded function name, in which case\n/// we allow the \'&\' but retain the overloaded-function type.\nQualType Sema::CheckAddressOfOperand(ExprResult &OrigOp, SourceLocation OpLoc) {\n  // ...\n  if (lval == Expr::LV_ClassTemporary || lval == Expr::LV_ArrayTemporary) {\n  // ...\n  } else if (isa<ObjCSelectorExpr>(op)) {\n // ...\n  } else if (lval == Expr::LV_MemberFunction) {\n   // ...\n   // The id-expression was parenthesized.\n    if (OrigOp.get() != DRE) {\n      Diag(OpLoc, diag::err_parens_pointer_member_function) << OrigOp.get()->getSourceRange();"}}
},
},
["err_typecheck_call_too_few_args_one"]={
["err_partial_spec_args_match_primary_template"]={
[b]="err_typecheck_call_too_few_args_one",
[d]="err_partial_spec_args_match_primary_template",
[c]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, single argument %1 was not specified",
[e]="%select{class|variable}0 template partial specialization does not specialize any template argument; to %select{declare|define}1 the primary template, remove the template argument list",
[d]={{nil,nil,{bc,{a,a,a,V},W,{L,U,P,T}," call, single argument B was not specified"}}},
[i]={{nil,nil,{{"class","variable"}," template partial specialization does not specialize any template argument; to ",{"declare","define"}," the primary template, remove the template argument list"}}},
[e]=k,
[j]=k,
[g]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, single argument (.*?) was not specified",
[c]="(?:class|variable) template partial specialization does not specialize any template argument; to (?:declare|define) the primary template, remove the template argument list",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"10ff50d7d8d6",1336713401,"PR11857: When the wrong number of arguments are provided for a function","PR11857: When the wrong number of arguments are provided for a function\nwhich expects exactly one argument, include the name of the argument in\nthe diagnostic text. Patch by Terry Long!\n\nllvm-svn: 156607"},
[f]={"09a3023e65d1",1244844486,"Diagnose C++ [temp.class.spec]p9b3, where a class template partial","Diagnose C++ [temp.class.spec]p9b3, where a class template partial\nspecialization\'s arguments are identical to the implicit template\narguments of the primary template. Typically, this is meant to be a\ndeclaration/definition of the primary template, so we give that\nadvice.\n\nllvm-svn: 73259"},
[j]={{n,6466,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // ...\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      // ...\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n     // ...\n     } else if (MinArgs == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n       Diag(RParenLoc, MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_one : diag::err_typecheck_call_too_few_args_at_least_one) << FnKind << FDecl->getParamDecl(0) << Fn->getSourceRange();"}},
[b]={{fb,4588,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n  // ...\n  // Find the variable template (partial) specialization declaration that\n  // corresponds to these arguments.\n  if (IsPartialSpecialization) {\n    // ...\n    if (isSameAsPrimaryTemplate(VarTemplate->getTemplateParameters(), CanonicalConverted) && (!Context.getLangOpts().CPlusPlus20 || !TemplateParams->hasAssociatedConstraints())) {\n      // ...\n      Diag(TemplateNameLoc, diag::err_partial_spec_args_match_primary_template) << /*variable template*/ 1 << /*is definition*/ (SC != SC_Extern && !CurContext->isRecord()) << FixItHint::CreateRemoval(SourceRange(LAngleLoc, RAngleLoc));"},{fb,8799,"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 (isPartialSpecialization) {\n   // ...\n   if (Context.hasSameType(CanonType, ClassTemplate->getInjectedClassNameSpecialization()) && (!Context.getLangOpts().CPlusPlus20 || !TemplateParams->hasAssociatedConstraints())) {\n     // ...\n      Diag(TemplateNameLoc, diag::err_partial_spec_args_match_primary_template) << /*class template*/ 0 << (TUK == TUK_Definition) << FixItHint::CreateRemoval(SourceRange(LAngleLoc, RAngleLoc));"}},
[l]={
[l]={
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:177:12: error: too few arguments to function call, single argument \'a\' was not specified"}
["clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp:33:6: error: variable template partial specialization does not specialize any template argument; to define the primary template, remove the template argument list","clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp:39:6: error: variable template partial specialization does not specialize any template argument; to define the primary template, remove the template argument list"}
}
}
},
},
["err_typecheck_call_too_few_args_suggest"]={
["err_partial_spec_fully_specialized"]={
[b]="err_typecheck_call_too_few_args_suggest",
[d]="err_partial_spec_fully_specialized",
[c]="too few %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2; did you mean %3?",
[e]="partial specialization of %0 does not use any of its template parameters",
[d]={{nil,nil,{bc,{a,a,a,V},W,{L,U,P,T}," call, expected B, have C; did you mean D?"}}},
[i]="partial specialization of A does not use any of its template parameters",
[e]=k,
[j]=k,
[g]="too few (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?); did you mean (.*?)\\?",
[c]="partial specialization of (.*?) does not use any of its template parameters",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments.","Attempt typo correction for function calls with the wrong number of arguments.\n\nCombined with typo correction\'s new ability to apply global/absolute nested\nname specifiers to possible corrections, cases such as in PR12287 where the\ndesired function is being shadowed by a lexically closer function with the\nsame name but a different number of parameters will now include a FixIt.\n\nOn a side note, since the test for this change caused\ntest/SemaCXX/typo-correction.cpp to exceed the typo correction limit for\na single file, I\'ve included a test case for exceeding the limit and added\nsome comments to both the original and part two of typo-correction.cpp\nwarning future editors of the files about the limit.\n\nllvm-svn: 185881"},
[f]={"92354b6b552e",1265675852,"Implement a specific diagnostic when a class template partial","Implement a specific diagnostic when a class template partial\nspecialization does not use any of its template parameters, then\nrecover far more gracefully. Fixes PR6181.\n\nllvm-svn: 95629"},
[j]={{n,6458,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // ...\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n     // ...\n     if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n       unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_few_args_suggest : diag::err_typecheck_call_too_few_args_at_least_suggest;"}},
[b]={{fb,4575,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n  // ...\n // Find the variable template (partial) specialization declaration that\n // corresponds to these arguments.\n if (IsPartialSpecialization) {\n    // ...\n   // FIXME: Move these checks to CheckTemplatePartialSpecializationArgs so we\n   // also do them during instantiation.\n    if (!Name.isDependent() && !TemplateSpecializationType::anyDependentTemplateArguments(TemplateArgs, CanonicalConverted)) {\n      Diag(TemplateNameLoc, diag::err_partial_spec_fully_specialized) << VarTemplate->getDeclName();"},{fb,8754,"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  // Find the class template (partial) specialization declaration that\n  // corresponds to these arguments.\n  if (isPartialSpecialization) {\n    // ...\n   // FIXME: Move this to CheckTemplatePartialSpecializationArgs so we\n    // also do it during instantiation.\n   if (!Name.isDependent() && !TemplateSpecializationType::anyDependentTemplateArguments(TemplateArgs, CanonicalConverted)) {\n     Diag(TemplateNameLoc, diag::err_partial_spec_fully_specialized) << ClassTemplate->getDeclName();"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct.default/p10.cpp:15:7: error: too few arguments to function call, expected 1, have 0; did you mean \'A::f\'?"}
["clang/test/SemaTemplate/temp_class_spec.cpp"]={"clang/test/SemaTemplate/temp_class_spec.cpp:359:9: error: partial specialization of \'a\' does not use any of its template parameters","clang/test/SemaTemplate/temp_class_spec.cpp:374:7: error: partial specialization of \'Bar\' does not use any of its template parameters","clang/test/SemaTemplate/temp_class_spec.cpp:386:7: error: partial specialization of \'Foo\' does not use any of its template parameters"}
}
}
},
},
["err_typecheck_call_too_many_args"]={
["err_partial_spec_ordering_ambiguous"]={
[b]="err_typecheck_call_too_many_args",
[d]="err_partial_spec_ordering_ambiguous",
[c]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2",
[e]="ambiguous partial specializations of %0",
[d]={{nil,nil,{ec,{a,a,a,V},W,{L,U,P,T}," call, expected B, have C"}}},
[i]="ambiguous partial specializations of A",
[e]=k,
[j]=k,
[g]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?)",
[c]="ambiguous partial specializations of (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={p,1237025389,q,r},
[f]={"be999390ebc7",1253031831,"Implement partial ordering of class template partial specializations ","Implement partial ordering of class template partial specializations \n(C++ [temp.class.order]).\n\nllvm-svn: 81866"},
[j]={{w,169,"/// Checks that a call expression\'s argument count is the desired number.\n/// This is useful when doing custom type-checking. Returns true on error.\nstatic bool checkArgCount(Sema &S, CallExpr *Call, unsigned DesiredArgCount) {\n // ...\n  return S.Diag(Range.getBegin(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << DesiredArgCount << ArgCount << Call->getArg(1)->getSourceRange();"},{w,7138,"ExprResult Sema::BuildAtomicExpr(SourceRange CallRange, SourceRange ExprRange, SourceLocation RParenLoc, MultiExprArg Args, AtomicExpr::AtomicOp Op, AtomicArgumentOrder ArgOrder) {\n  // ...\n  // Check we have the right number of arguments.\n  if (Args.size() < AdjustedNumArgs) {\n // ...\n  } else if (Args.size() > AdjustedNumArgs) {\n    Diag(Args[AdjustedNumArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 << AdjustedNumArgs << static_cast<unsigned>(Args.size()) << ExprRange;"},{w,7502,"bool Sema::BuiltinWasmRefNullFunc(CallExpr *TheCall) {\n  if (TheCall->getNumArgs() != 0) {\n    Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 0 /*function call*/ << 0 << TheCall->getNumArgs();"},{n,6515,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // ...\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      // ...\n     if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      // ...\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      // ...\n      else\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"},{"clang/lib/Sema/SemaExprObjC.cpp",1900,"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 // Promote additional arguments to variadic methods.\n  if (Method->isVariadic()) {\n // ...\n } else {\n    // Check for extra arguments to non-variadic methods.\n    if (Args.size() != NumNamedArgs) {\n      Diag(Args[NumNamedArgs]->getBeginLoc(), diag::err_typecheck_call_too_many_args) << 2 /*method*/ << NumNamedArgs << static_cast<unsigned>(Args.size()) << Method->getSourceRange() << SourceRange(Args[NumNamedArgs]->getBeginLoc(), Args.back()->getEndLoc());"}},
[b]={{fb,4852,"DeclResult Sema::CheckVarTemplateId(VarTemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation TemplateNameLoc, const TemplateArgumentListInfo &TemplateArgs) {\n  // ...\n  if (AmbiguousPartialSpec) {\n   // ...\n    Diag(PointOfInstantiation, diag::err_partial_spec_ordering_ambiguous) << Decl;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",3691,"/// Get the instantiation pattern to use to instantiate the definition of a\n/// given ClassTemplateSpecializationDecl (either the pattern of the primary\n/// template or of a partial specialization).\nstatic ActionResult<CXXRecordDecl *> getPatternForClassTemplateSpecialization(Sema &S, SourceLocation PointOfInstantiation, ClassTemplateSpecializationDecl *ClassTemplateSpec, TemplateSpecializationKind TSK) {\n  // ...\n  if (!Specialized.is<ClassTemplatePartialSpecializationDecl *>()) {\n    // ...\n   if (Matched.size() >= 1) {\n      // ...\n      if (Matched.size() == 1) {\n      // ...\n      } else {\n        // ...\n       if (Ambiguous) {\n         // ...\n         S.Diag(PointOfInstantiation, diag::err_partial_spec_ordering_ambiguous) << ClassTemplateSpec;"}},
[l]={
[l]={
["clang/test/Sema/builtin-unary-fp.c"]={"clang/test/Sema/builtin-unary-fp.c:11:27: error: too many arguments to function call, expected 1, have 2","clang/test/Sema/builtin-unary-fp.c:16:48: error: too many arguments to function call, expected 6, have 7"}
["clang/test/SemaTemplate/temp_class_order.cpp"]={"clang/test/SemaTemplate/temp_class_order.cpp:41:16: error: ambiguous partial specializations of \'X2<int *, int *>\'"}
}
}
},
},
["err_typecheck_call_too_many_args_at_most"]={
["err_partial_spec_redeclared"]={
[b]="err_typecheck_call_too_many_args_at_most",
[d]="err_partial_spec_redeclared",
[c]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most %1, have %2",
[e]="class template partial specialization %0 cannot be redeclared",
[d]={{nil,nil,{ec,{a,a,a,V},W,{L,U,P,T}," call, expected at most B, have C"}}},
[i]="class template partial specialization A cannot be redeclared",
[e]=k,
[j]=k,
[g]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most (.*?), have (.*?)",
[c]="class template partial specialization (.*?) cannot be redeclared",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"2a5aafff307a",1271393806,"Expand the argument diagnostics for too many arguments and give","Expand the argument diagnostics for too many arguments and give\nboth number seen and number expected.\n\nFinishes fixing PR6501.\n\nllvm-svn: 101442"},
[f]={"21610380de97",1256774651,"Implement support for semantic checking and template instantiation of","Implement support for semantic checking and template instantiation of\nclass template partial specializations of member templates. Also,\nfixes a silly little bug in the marking of \"used\" template parameters\nin member templates. Fixes PR5236.\n\nllvm-svn: 85447"},
[j]={{w,140,"/// Checks that a call expression\'s argument count is at most the desired\n/// number. This is useful when doing custom type-checking on a variadic\n/// function. Returns true on error.\nstatic bool checkArgCountAtMost(Sema &S, CallExpr *Call, unsigned MaxArgCount) {\n // ...\n  return S.Diag(Call->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << MaxArgCount << ArgCount << Call->getSourceRange();"},{w,8562,"/// SemaBuiltinPrefetch - Handle __builtin_prefetch.\n// This is declared to take (const void*, ...) and can take two\n// optional constant int args.\nbool Sema::SemaBuiltinPrefetch(CallExpr *TheCall) {\n  // ...\n if (NumArgs > 3)\n    return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /*function call*/ << 3 << NumArgs << TheCall->getSourceRange();"},{w,8706,"bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) {\n // ...\n  if (NumArgs >= NumRequiredArgs + 0x100) {\n   return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_many_args_at_most) << 0 /* function call */ << (NumRequiredArgs + 0xff) << NumArgs << TheCall->getSourceRange();"},{n,6523,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // ...\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      // ...\n     if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      // ...\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n      // ...\n      else\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args : diag::err_typecheck_call_too_many_args_at_most) << FnKind << NumParams << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}},
[b]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",4244,"/// Instantiate the declaration of a class template partial\n/// specialization.\n///\n/// \\param ClassTemplate the (instantiated) class template that is partially\n// specialized by the instantiation of \\p PartialSpec.\n///\n/// \\param PartialSpec the (uninstantiated) class template partial\n/// specialization that we are instantiating.\n///\n/// \\returns The instantiated partial specialization, if successful; otherwise,\n/// NULL to indicate an error.\nClassTemplatePartialSpecializationDecl *TemplateDeclInstantiator::InstantiateClassTemplatePartialSpecialization(ClassTemplateDecl *ClassTemplate, ClassTemplatePartialSpecializationDecl *PartialSpec) {\n  // ...\n  if (PrevDecl) {\n    // ...\n   SemaRef.Diag(PartialSpec->getLocation(), diag::err_partial_spec_redeclared) << WrittenTy->getType();"}},
[l]={
[l]={
["clang/test/Sema/builtin-prefetch.c"]={"clang/test/Sema/builtin-prefetch.c:8:33: error: too many arguments to function call, expected at most 3, have 4"}
["clang/test/CXX/temp/temp.decls/temp.class.spec/p6.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class.spec/p6.cpp:42:31: error: class template partial specialization \'Inner<int, Y>\' cannot be redeclared","clang/test/CXX/temp/temp.decls/temp.class.spec/p6.cpp:84:29: error: class template partial specialization \'Bar<0, int, Y>\' cannot be redeclared"}
}
}
},
},
["err_typecheck_call_too_many_args_at_most_one"]={
["err_partial_specialization_friend"]={
[b]="err_typecheck_call_too_many_args_at_most_one",
[d]="err_partial_specialization_friend",
[c]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most single argument %1, have %2 arguments",
[e]="partial specialization cannot be declared as a friend",
[d]={{nil,nil,{ec,{a,a,a,V},W,{L,U,P,T}," call, expected at most single argument B, have C arguments"}}},
[i]="partial specialization cannot be declared as a friend",
[e]=k,
[j]=k,
[g]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most single argument (.*?), have (.*?) arguments",
[c]="partial specialization cannot be declared as a friend",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including","Further improvement to wording of overload resolution diagnostics, and including\nthe sole parameter name in the diagnostic in more cases. Patch by Terry Long!\n\nllvm-svn: 156807"},
[f]={"ec9518be89c9",1292919297,"A class template partial specialization cannot be a friend. Fixes PR8649.","A class template partial specialization cannot be a friend. Fixes PR8649.\n\nllvm-svn: 122325"},
[j]={{n,6514,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // ...\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      // ...\n     if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      // ...\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args_one : diag::err_typecheck_call_too_many_args_at_most_one) << FnKind << FDecl->getParamDecl(0) << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}},
[b]={{fb,8662,"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 (TemplateParams && TemplateParams->size() > 0) {\n    // ...\n   if (TUK == TUK_Friend) {\n      Diag(KWLoc, diag::err_partial_specialization_friend) << SourceRange(LAngleLoc, RAngleLoc);"}},
[l]={
[l]={
["clang/test/SemaCXX/default1.cpp"]={"clang/test/SemaCXX/default1.cpp:69:10: error: too many arguments to function call, expected at most single argument \'f\', have 2 arguments"}
["clang/test/CXX/temp/temp.decls/temp.friend/p8.cpp"]={"clang/test/CXX/temp/temp.decls/temp.friend/p8.cpp:5:28: error: partial specialization cannot be declared as a friend"}
}
}
},
},
["err_typecheck_call_too_many_args_at_most_suggest"]={
["err_partition_import_outside_module"]={
[b]="err_typecheck_call_too_many_args_at_most_suggest",
[d]={{nil,J,"err_partition_import_outside_module"}},
[c]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected at most %1, have %2; did you mean %3?",
[e]={{nil,J,"module partition imports must be within a module purview"}},
[d]={{nil,nil,{ec,{a,a,a,V},W,{L,U,P,T}," call, expected at most B, have C; did you mean D?"}}},
[i]={{nil,J,"module partition imports must be within a module purview"}},
[e]=k,
[j]=k,
[g]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected at most (.*?), have (.*?); did you mean (.*?)\\?",
[c]="module partition imports must be within a module purview",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,J,"Modules Issue"}},
[f]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments.","Attempt typo correction for function calls with the wrong number of arguments.\n\nCombined with typo correction\'s new ability to apply global/absolute nested\nname specifiers to possible corrections, cases such as in PR12287 where the\ndesired function is being shadowed by a lexically closer function with the\nsame name but a different number of parameters will now include a FixIt.\n\nOn a side note, since the test for this change caused\ntest/SemaCXX/typo-correction.cpp to exceed the typo correction limit for\na single file, I\'ve included a test case for exceeding the limit and added\nsome comments to both the original and part two of typo-correction.cpp\nwarning future editors of the files about the limit.\n\nllvm-svn: 185881"},
[f]={"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]={{n,6505,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // ...\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      // ...\n      if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n        unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_many_args_suggest : diag::err_typecheck_call_too_many_args_at_most_suggest;"}}
[b]={{"clang/lib/Parse/Parser.cpp",2555,"/// 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::FirstDecl:\n  case Sema::ModuleImportState::NotACXX20Module:\n    // We can only import a partition within a module purview.\n    if (IsPartition)\n      Diag(ImportLoc, diag::err_partition_import_outside_module);"}}
},
},
["err_typecheck_call_too_many_args_one"]={
["err_pascal_string_too_long"]={
[b]="err_typecheck_call_too_many_args_one",
[d]="err_pascal_string_too_long",
[c]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected single argument %1, have %2 arguments",
[e]="Pascal string is too long",
[d]={{nil,nil,{ec,{a,a,a,V},W,{L,U,P,T}," call, expected single argument B, have C arguments"}}},
[i]="Pascal string is too long",
[e]=k,
[j]=k,
[g]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected single argument (.*?), have (.*?) arguments",
[c]="Pascal string is too long",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={"d72da1513aa9",1337062914,"Further improvement to wording of overload resolution diagnostics, and including","Further improvement to wording of overload resolution diagnostics, and including\nthe sole parameter name in the diagnostic in more cases. Patch by Terry Long!\n\nllvm-svn: 156807"},
[f]={t,1236199783,r,s},
[j]={{n,6506,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // ...\n  // If too many are passed and not variadic, error on the extras and drop\n // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      // ...\n     if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n      // ...\n      } else if (NumParams == 1 && FDecl && FDecl->getParamDecl(0)->getDeclName())\n        Diag(Args[NumParams]->getBeginLoc(), MinArgs == NumParams ? diag::err_typecheck_call_too_many_args_one : diag::err_typecheck_call_too_many_args_at_most_one) << FnKind << FDecl->getParamDecl(0) << static_cast<unsigned>(Args.size()) << Fn->getSourceRange() << SourceRange(Args[NumParams]->getBeginLoc(), Args.back()->getEndLoc());"}},
[b]={{"clang/lib/Lex/LiteralSupport.cpp",2209,"void StringLiteralParser::init(ArrayRef<Token> StringToks) {\n  // ...\n  if (Pascal) {\n   // ...\n    // Verify that pascal strings aren\'t too large.\n   if (GetStringLength() > 256) {\n      if (Diags)\n        Diags->Report(StringToks.front().getLocation(), diag::err_pascal_string_too_long) << SourceRange(StringToks.front().getLocation(), StringToks.back().getLocation());"}}
[l]={
["clang/test/Sema/exprs.c"]={"clang/test/Sema/exprs.c:176:15: error: too many arguments to function call, expected single argument \'a\', have 2 arguments"}
}
},
},
["err_typecheck_call_too_many_args_suggest"]={
["err_paste_at_end"]={
[b]="err_typecheck_call_too_many_args_suggest",
[d]="err_paste_at_end",
[c]="too many %select{|||execution configuration }0arguments to %select{function|block|method|kernel function}0 call, expected %1, have %2; did you mean %3?",
[e]="\'##\' cannot appear at end of macro expansion",
[d]={{nil,nil,{ec,{a,a,a,V},W,{L,U,P,T}," call, expected B, have C; did you mean D?"}}},
[i]="\'##\' cannot appear at end of macro expansion",
[e]=k,
[j]=k,
[g]="too many (?:|||execution configuration )arguments to (?:function|block|method|kernel function) call, expected (.*?), have (.*?); did you mean (.*?)\\?",
[c]="\'\\#\\#\' cannot appear at end of macro expansion",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={"476c823ec8fd",1373325224,"Attempt typo correction for function calls with the wrong number of arguments.","Attempt typo correction for function calls with the wrong number of arguments.\n\nCombined with typo correction\'s new ability to apply global/absolute nested\nname specifiers to possible corrections, cases such as in PR12287 where the\ndesired function is being shadowed by a lexically closer function with the\nsame name but a different number of parameters will now include a FixIt.\n\nOn a side note, since the test for this change caused\ntest/SemaCXX/typo-correction.cpp to exceed the typo correction limit for\na single file, I\'ve included a test case for exceeding the limit and added\nsome comments to both the original and part two of typo-correction.cpp\nwarning future editors of the files about the limit.\n\nllvm-svn: 185881"},
[f]={t,1236199783,r,s},
[j]={{n,6497,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // ...\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      // ...\n     if (FDecl && (TC = TryTypoCorrectionForCall(*this, Fn, FDecl, Args))) {\n       unsigned diag_id = MinArgs == NumParams && !Proto->isVariadic() ? diag::err_typecheck_call_too_many_args_suggest : diag::err_typecheck_call_too_many_args_at_most_suggest;"}},
[b]={{I,3080,"/// HandleDefineDirective - Implements \\#define. This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  if (NumTokens != 0) {\n    // ...\n   if (MI->getReplacementToken(NumTokens - 1).is(tok::hashhash)) {\n     Diag(MI->getReplacementToken(NumTokens - 1), diag::err_paste_at_end);"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.argdep/p3.cpp:33:7: error: too many arguments to function call, expected 0, have 1; did you mean \'N::f\'?"}
["clang/test/Preprocessor/macro_paste_bad.c"]={"clang/test/Preprocessor/macro_paste_bad.c:10:18: error: \'##\' cannot appear at end of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:11:18: error: \'##\' cannot appear at end of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:12:15: error: \'##\' cannot appear at end of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:13:15: error: \'##\' cannot appear at end of macro expansion"}
}
}
},
},
["err_typecheck_cast_to_incomplete"]={
["err_paste_at_start"]={
[b]="err_typecheck_cast_to_incomplete",
[d]="err_paste_at_start",
[c]="cast to incomplete type %0",
[e]="\'##\' cannot appear at start of macro expansion",
[d]="cast to incomplete type A",
[i]="\'##\' cannot appear at start of macro expansion",
[e]=k,
[j]=k,
[g]="cast to incomplete type (.*?)",
[c]="\'\\#\\#\' cannot appear at start of macro expansion",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={"e98194d9e8d2",1279399429,"Check for casts to an incomplete type in C.  Improves diagnostics for cast to","Check for casts to an incomplete type in C.  Improves diagnostics for cast to\nincomplete union (PR5692) and incomplete enum, and fixes obscure\naccepts-invalid on cast to incomplete struct.\n\nllvm-svn: 108630"},
[f]={t,1236199783,r,s},
[j]={{Mb,2975,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  if (Self.RequireCompleteType(OpRange.getBegin(), DestType, diag::err_typecheck_cast_to_incomplete)) {"},{Mb,3257,"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)) {"},{n,21464,"/// Check a cast of an unknown-any type.  We intentionally only\n/// trigger this for C-style casts.\nExprResult Sema::checkUnknownAnyCast(SourceRange TypeRange, QualType CastType, Expr *CastExpr, CastKind &CastKind, ExprValueKind &VK, CXXCastPath &Path) {\n  // ...\n  if (!CastType->isVoidType() && RequireCompleteType(TypeRange.getBegin(), CastType, diag::err_typecheck_cast_to_incomplete))"}},
[b]={{I,3076,"/// HandleDefineDirective - Implements \\#define.  This consumes the entire macro\n/// line then lets the caller lex the next real token.\nvoid Preprocessor::HandleDefineDirective(Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  if (NumTokens != 0) {\n   if (MI->getReplacementToken(0).is(tok::hashhash)) {\n     Diag(MI->getReplacementToken(0), diag::err_paste_at_start);"}},
[l]={
[l]={
["clang/test/Sema/cast-incomplete.c"]={"clang/test/Sema/cast-incomplete.c:9:3: error: cast to incomplete type \'enum x\'","clang/test/Sema/cast-incomplete.c:10:3: error: cast to incomplete type \'struct y\'","clang/test/Sema/cast-incomplete.c:11:3: error: cast to incomplete type \'union z\'","clang/test/Sema/cast-incomplete.c:12:3: error: cast to incomplete type \'union z\'"}
["clang/test/Preprocessor/macro_paste_bad.c"]={"clang/test/Preprocessor/macro_paste_bad.c:16:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:17:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:18:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:19:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:20:13: error: \'##\' cannot appear at start of macro expansion","clang/test/Preprocessor/macro_paste_bad.c:21:13: error: \'##\' cannot appear at start of macro expansion"}
}
}
},
},
["err_typecheck_cast_to_union_no_type"]={
["err_pch_diagopt_mismatch"]={
[b]="err_typecheck_cast_to_union_no_type",
[d]="err_pch_diagopt_mismatch",
[c]="cast to union type from type %0 not present in union",
[e]="%0 is currently enabled, but was not in the PCH file",
[d]="cast to union type from type A not present in union",
[i]="A is currently enabled, but was not in the PCH file",
[e]=k,
[j]=k,
[g]="cast to union type from type (.*?) not present in union",
[c]="(.*?) is currently enabled, but was not in the PCH file",
[h]=a,
[h]=a,
[i]=m,
[g]=P,
[f]={p,1237025389,q,r},
[f]={"be84adbf1b7d",1398731813,"Check -Werror options during module validation","Check -Werror options during module validation\n\nThis patch checks whether the diagnostic options that could lead to\nerrors (principally -Werror) are consistent between when a module was\nbuilt and when it is loaded.  If there are new -Werror flags, then the\nmodule is rebuilt.  In order to canonicalize the options we do this\ncheck at the level of the constructed DiagnosticsEngine, which contains\nthe final set of diag to diagnostic level mappings.  Currently we only\nrebuild with the new diagnostic options, but we intend to refine this in\nthe future to include the union of the new and old flags, since we know\nthe old ones did not cause errors.  System modules are only rebuilt when\n-Wsystem-headers is enabled.\n\nOne oddity is that unlike checking language options, we don’t perform\nthis diagnostic option checking when loading from a precompiled header.\nThe reason for this is that the compiler cannot rebuild the PCH, so\nanything that requires it to be rebuilt effectively leaks into the build\nsystem.  And in this case, that would mean the build system\nunderstanding the complex relationship between diagnostic options and\nthe underlying diagnostic mappings, which is unreasonable.  Skipping the\ncheck is safe, because these options do not affect the generated AST.\nYou simply won’t get new build errors due to changed -Werror options\nautomatically, which is also true for non-module cases.\n\nllvm-svn: 207477"},
[j]={{Mb,3022,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n    // ...\n    // GCC\'s cast to union extension.\n   if (DestRecordTy && DestRecordTy->getDecl()->isUnion()) {\n     // ...\n      if (CastExpr::getTargetFieldForToUnionCast(RD, SrcType)) {\n     // ...\n     } else {\n       Self.Diag(OpRange.getBegin(), diag::err_typecheck_cast_to_union_no_type) << SrcType << SrcExpr.get()->getSourceRange();"}},
[b]={{D,493,"static bool checkDiagnosticGroupMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool Complain) {\n  // ...\n  for (DiagnosticsEngine *MappingSource : MappingSources) {\n    for (auto DiagIDMappingPair : MappingSource->getDiagnosticMappings()) {\n     // ...\n     if (StoredLevel < DiagnosticsEngine::Error) {\n        if (Complain)\n          Diags.Report(diag::err_pch_diagopt_mismatch) << \"-Werror=\" + Diags.getDiagnosticIDs()->getWarningOptionForDiag(DiagID).str();"},{D,520,"static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool IsSystem, bool Complain) {\n  // Top-level options\n  if (IsSystem) {\n    // ...\n    // If -Wsystem-headers was not enabled before, be conservative\n    if (StoredDiags.getSuppressSystemWarnings()) {\n     if (Complain)\n        Diags.Report(diag::err_pch_diagopt_mismatch) << \"-Wsystem-headers\";"},{D,527,"static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool IsSystem, bool Complain) {\n // ...\n  if (Diags.getWarningsAsErrors() && !StoredDiags.getWarningsAsErrors()) {\n    if (Complain)\n      Diags.Report(diag::err_pch_diagopt_mismatch) << \"-Werror\";"},{D,534,"static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool IsSystem, bool Complain) {\n // ...\n if (Diags.getWarningsAsErrors() && Diags.getEnableAllWarnings() && !StoredDiags.getEnableAllWarnings()) {\n   if (Complain)\n      Diags.Report(diag::err_pch_diagopt_mismatch) << \"-Weverything -Werror\";"},{D,541,"static bool checkDiagnosticMappings(DiagnosticsEngine &StoredDiags, DiagnosticsEngine &Diags, bool IsSystem, bool Complain) {\n  // ...\n  if (isExtHandlingFromDiagsError(Diags) && !isExtHandlingFromDiagsError(StoredDiags)) {\n    if (Complain)\n      Diags.Report(diag::err_pch_diagopt_mismatch) << \"-pedantic-errors\";"}}
[l]={
["clang/test/Sema/cast-to-union.c"]={"clang/test/Sema/cast-to-union.c:8:5: error: cast to union type from type \'int *\' not present in union","clang/test/Sema/cast-to-union.c:9:5: error: cast to union type from type \'unsigned int\' not present in union","clang/test/Sema/cast-to-union.c:13:14: error: cast to union type from type \'double\' not present in union"}
}
},
},
["err_typecheck_choose_expr_requires_constant"]={
["err_pch_different_branch"]={
[b]="err_typecheck_choose_expr_requires_constant",
[d]="err_pch_different_branch",
[c]="\'__builtin_choose_expr\' requires a constant expression",
[e]="PCH file built from a different branch (%0) than the compiler (%1)",
[d]="\'__builtin_choose_expr\' requires a constant expression",
[i]="PCH file built from a different branch (A) than the compiler (B)",
[e]=k,
[j]=k,
[g]="\'__builtin_choose_expr\' requires a constant expression",
[c]="PCH file built from a different branch \\((.*?)\\) than the compiler \\((.*?)\\)",
[h]=a,
[h]=a,
[i]=m,
[g]=P,
[f]={p,1237025389,q,r},
[f]={"2228cd3f070d",1392133209,"Rename some PCH-related errors to have \'err_\' as their prefix","Rename some PCH-related errors to have \'err_\' as their prefix\n\nllvm-svn: 201157"},
[j]={{n,16896,"ExprResult Sema::ActOnChooseExpr(SourceLocation BuiltinLoc, Expr *CondExpr, Expr *LHSExpr, Expr *RHSExpr, SourceLocation RPLoc) {\n  // ...\n  if (CondExpr->isTypeDependent() || CondExpr->isValueDependent()) {\n  // ...\n  } else {\n    // ...\n    ExprResult CondICE = VerifyIntegerConstantExpression(CondExpr, &condEval, diag::err_typecheck_choose_expr_requires_constant);"}},
[b]={{D,2869,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case METADATA: {\n      // ...\n     if (StringRef(CurBranch) != ASTBranch && !DisableValidation) {\n       if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)\n         Diag(diag::err_pch_different_branch) << ASTBranch << CurBranch;"}}
[l]={
["clang/test/Parser/builtin_types_compatible.c"]={"clang/test/Parser/builtin_types_compatible.c:37:29: error: \'__builtin_choose_expr\' requires a constant expression"}
}
},
["err_typecheck_comparison_of_distinct_blocks"]={
[b]="err_typecheck_comparison_of_distinct_blocks",
[c]="comparison of distinct block types%diff{ ($ and $)|}0,1",
[d]={{nil,nil,{"comparison of distinct block types",{Pb,a}}}},
[e]=k,
[g]="comparison of distinct block types(?: \\((.*?) and (.*?)\\)|)",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{n,13258,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n  // Handle block pointer types.\n  if (!IsOrdered && LHSType->isBlockPointerType() && RHSType->isBlockPointerType()) {\n    // ...\n    if (!LHSIsNull && !RHSIsNull && !Context.typesAreCompatible(lpointee, rpointee)) {\n      Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,13348,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n // Allow block pointers to be compared with null pointer constants.\n  if (!IsOrdered && ((LHSType->isBlockPointerType() && RHSType->isPointerType()) || (LHSType->isPointerType() && RHSType->isBlockPointerType()))) {\n    if (!LHSIsNull && !RHSIsNull) {\n     if (!((RHSType->isPointerType() && RHSType->castAs<PointerType>()->getPointeeType()->isVoidType()) || (LHSType->isPointerType() && LHSType->castAs<PointerType>()->getPointeeType()->isVoidType())))\n       Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}}
},
},
["err_typecheck_comparison_of_distinct_pointers"]={
["err_pch_langopt_mismatch"]={
[b]="err_typecheck_comparison_of_distinct_pointers",
[d]="err_pch_langopt_mismatch",
[c]="comparison of distinct pointer types%diff{ ($ and $)|}0,1",
[e]="%0 was %select{disabled|enabled}1 in PCH file but is currently %select{disabled|enabled}2",
[d]={{nil,nil,{"comparison of distinct pointer types",{Pb,a}}}},
[i]={{nil,nil,{"A was ",{"disabled","enabled"}," in PCH file but is currently ",{"disabled","enabled"}}}},
[e]=k,
[j]=k,
[g]="comparison of distinct pointer types(?: \\((.*?) and (.*?)\\)|)",
[c]="(.*?) was (?:disabled|enabled) in PCH file but is currently (?:disabled|enabled)",
[h]=a,
[h]=a,
[i]=m,
[g]=P,
[f]={"5b07c7ec057d",1241417232,"Implement support for comparing pointers with <, >, <=, >=, ==, and !=","Implement support for comparing pointers with <, >, <=, >=, ==, and !=\nin C++, taking into account conversions to the \"composite pointer\ntype\" so that we can compare, e.g., a pointer to a derived class to a\npointer to a base class. \n\nAlso, upgrade the \"comparing distinct pointer types\" from a warning to\nan error for C++, since this is clearly an error. Turns out that we\nhadn\'t gone through and audited this code for C++, ever. \n\nFixes <rdar://problem/6816420>.\n\nllvm-svn: 70829"},
[f]={"c2ae8800701c",1315938399,"Switch the serialization of LangOptions over to use the .def file. We","Switch the serialization of LangOptions over to use the .def file. We\nshould no longer have the serialization of LangOptions out of sync\nwith the structure itself (yay).\n\nllvm-svn: 139613"},
[j]={{n,12324,"static void diagnoseDistinctPointerComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) { S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_distinct_pointers : diag::ext_typecheck_comparison_of_distinct_pointers) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); }"}},
[b]={{D,285,"#define LANGOPT(Name, Bits, Default, Description) \\\n  if (ExistingLangOpts.Name != LangOpts.Name) { \\\n    if (Diags) { \\\n      if (Bits == 1) \\\n        Diags->Report(diag::err_pch_langopt_mismatch) << Description << LangOpts.Name << ExistingLangOpts.Name; \\"}},
[l]={
[l]={
["clang/test/SemaCXX/compare-function-pointer.cpp"]={"clang/test/SemaCXX/compare-function-pointer.cpp:17:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:18:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:19:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:21:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:23:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))","clang/test/SemaCXX/compare-function-pointer.cpp:25:14: error: comparison of distinct pointer types (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))"}
["clang/test/Modules/prebuilt-implicit-modules.m"]={"error: signed char was disabled in PCH file but is currently enabled"}
}
}
},
},
["err_typecheck_comparison_of_fptr_to_void"]={
["err_pch_langopt_value_mismatch"]={
[b]="err_typecheck_comparison_of_fptr_to_void",
[d]="err_pch_langopt_value_mismatch",
[c]="equality comparison between function pointer and void pointer (%0 and %1)",
[e]="%0 differs in PCH file vs. current file",
[d]="equality comparison between function pointer and void pointer (A and B)",
[i]="A differs in PCH file vs. current file",
[e]=k,
[j]=k,
[g]="equality comparison between function pointer and void pointer \\((.*?) and (.*?)\\)",
[c]="(.*?) differs in PCH file vs\\. current file",
[h]=a,
[h]=a,
[i]=m,
[g]=P,
[f]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect","Update equality and relationship comparisons of pointers to reflect\nC++ semantics, eliminating an extension diagnostic that doesn\'t match\nC++ semantics (ordered comparison with NULL) and tightening some\nextwarns to errors in C++ to match GCC and maintain conformance in\nSFINAE contexts. Fixes <rdar://problem/7941392>.\n\nllvm-svn: 106050"},
[f]={"c2ae8800701c",1315938399,"Switch the serialization of LangOptions over to use the .def file. We","Switch the serialization of LangOptions over to use the .def file. We\nshould no longer have the serialization of LangOptions out of sync\nwith the structure itself (yay).\n\nllvm-svn: 139613"},
[j]={{n,12365,"static void diagnoseFunctionPointerToVoidComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, bool IsError) { S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_fptr_to_void : diag::ext_typecheck_comparison_of_fptr_to_void) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); }"}}
[b]={{D,288,"#define LANGOPT(Name, Bits, Default, Description) \\\n  if (ExistingLangOpts.Name != LangOpts.Name) { \\\n    if (Diags) { \\\n      if (Bits == 1) \\\n        Diags->Report(diag::err_pch_langopt_mismatch) << Description << LangOpts.Name << ExistingLangOpts.Name; \\\n      else \\\n        Diags->Report(diag::err_pch_langopt_value_mismatch) << Description; \\"},{D,297,"#define VALUE_LANGOPT(Name, Bits, Default, Description) \\\n  if (ExistingLangOpts.Name != LangOpts.Name) { \\\n    if (Diags) \\\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << Description; \\"},{D,305,"#define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \\\n  if (ExistingLangOpts.get##Name() != LangOpts.get##Name()) { \\\n    if (Diags) \\\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << Description; \\"},{D,329,"#include \"clang/Basic/LangOptions.def\"\n  if (ExistingLangOpts.ModuleFeatures != LangOpts.ModuleFeatures) {\n    if (Diags)\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << \"module features\";"},{D,335,"#include \"clang/Basic/LangOptions.def\"\n  // ...\n  if (ExistingLangOpts.ObjCRuntime != LangOpts.ObjCRuntime) {\n    if (Diags)\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << \"target Objective-C runtime\";"},{D,343,"#include \"clang/Basic/LangOptions.def\"\n  // ...\n  if (ExistingLangOpts.CommentOpts.BlockCommandNames != LangOpts.CommentOpts.BlockCommandNames) {\n    if (Diags)\n      Diags->Report(diag::err_pch_langopt_value_mismatch) << \"block command names\";"}}
},
},
["err_typecheck_comparison_of_pointer_integer"]={
["err_pch_macro_def_conflict"]={
[b]="err_typecheck_comparison_of_pointer_integer",
[d]="err_pch_macro_def_conflict",
[c]="comparison between pointer and integer (%0 and %1)",
[e]="definition of macro \'%0\' differs between the precompiled header (\'%1\') and the command line (\'%2\')",
[d]="comparison between pointer and integer (A and B)",
[i]="definition of macro \'A\' differs between the precompiled header (\'B\') and the command line (\'C\')",
[e]=k,
[j]=k,
[g]="comparison between pointer and integer \\((.*?) and (.*?)\\)",
[c]="definition of macro \'(.*?)\' differs between the precompiled header \\(\'(.*?)\'\\) and the command line \\(\'(.*?)\'\\)",
[h]=a,
[h]=a,
[i]=m,
[g]=P,
[f]={"f267edd8ac6f",1276637920,"Update equality and relationship comparisons of pointers to reflect","Update equality and relationship comparisons of pointers to reflect\nC++ semantics, eliminating an extension diagnostic that doesn\'t match\nC++ semantics (ordered comparison with NULL) and tightening some\nextwarns to errors in C++ to match GCC and maintain conformance in\nSFINAE contexts. Fixes <rdar://problem/7941392>.\n\nllvm-svn: 106050"},
[f]={"b63687519610",1351122110,"Teach the PCH validator to check the preprocessor options, especially","Teach the PCH validator to check the preprocessor options, especially\nthe macros that are #define\'d or #undef\'d on the command line. This\nchecking happens much earlier than the current macro-definition\nchecking and is far cleaner, because it does a direct comparison\nrather than a diff of the predefines buffers. Moreover, it allows us\nto use the result of this check to skip over PCH files within a\ndirectory that have non-matching -D\'s or -U\'s on the command\nline. Finally, it improves the diagnostics a bit for mismatches,\nfixing <rdar://problem/8612222>.\n\nThe old predefines-buffer diff\'ing will go away in a subsequent commit.\n\nllvm-svn: 166641"},
[j]={{n,13355,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n // ...\n if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n   // ...\n    if (LangOpts.DebuggerSupport) {\n   // ...\n   } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n    // ...\n    } else if (getLangOpts().CPlusPlus) {\n      DiagID = diag::err_typecheck_comparison_of_pointer_integer;"}},
[b]={{D,721,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///        are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n // ...\n for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {\n    // ...\n    // The macro bodies differ; complain.\n    if (Diags) {\n      Diags->Report(diag::err_pch_macro_def_conflict) << MacroName << Known->second.first << Existing.first;"}}
[l]={
["clang/test/CXX/over/over.built/spaceship.cpp"]={"clang/test/CXX/over/over.built/spaceship.cpp:16:12: error: comparison between pointer and integer (\'int\' and \'int *\')"}
}
},
},
["err_typecheck_cond_expect_int_float"]={
["err_pch_macro_def_undef"]={
[b]="err_typecheck_cond_expect_int_float",
[d]="err_pch_macro_def_undef",
[c]="used type %0 where integer or floating point type is required",
[e]="macro \'%0\' was %select{defined|undef\'d}1 in the precompiled header but %select{undef\'d|defined}1 on the command line",
[d]="used type A where integer or floating point type is required",
[i]={{nil,nil,{"macro \'A\' was ",{"defined","undef\'d"}," in the precompiled header but ",{"undef\'d","defined"}," on the command line"}}},
[e]=k,
[j]=k,
[g]="used type (.*?) where integer or floating point type is required",
[c]="macro \'(.*?)\' was (?:defined|undef\'d) in the precompiled header but (?:undef\'d|defined) on the command line",
[h]=a,
[h]=a,
[i]=m,
[g]=P,
[f]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector","OpenCL: handle ternary operator when the condition is a vector\n\nWhen the condition is a vector, OpenCL specifies additional\nrequirements on the operand types, and also the operations\nrequired to determine the result type of the operator. This is a\ncombination of OpenCL v1.1 s6.3.i and s6.11.6, and the semantics\nremain unchanged in later versions of OpenCL.\n\nllvm-svn: 228118"},
[f]={"b63687519610",1351122110,"Teach the PCH validator to check the preprocessor options, especially","Teach the PCH validator to check the preprocessor options, especially\nthe macros that are #define\'d or #undef\'d on the command line. This\nchecking happens much earlier than the current macro-definition\nchecking and is far cleaner, because it does a direct comparison\nrather than a diff of the predefines buffers. Moreover, it allows us\nto use the result of this check to skip over PCH files within a\ndirectory that have non-matching -D\'s or -U\'s on the command\nline. Finally, it improves the diagnostics a bit for mismatches,\nfixing <rdar://problem/8612222>.\n\nThe old predefines-buffer diff\'ing will go away in a subsequent commit.\n\nllvm-svn: 166641"},
[j]={{n,8889,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (!LHSType->isIntegerType() && !LHSType->isRealFloatingType()) {\n   S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << LHSType << LHS.get()->getSourceRange();"},{n,8941,"/// Simple conversion between integer and floating point types.\n///\n/// Used when handling the OpenCL conditional operator where the\n/// condition is a vector while the other operands are scalar.\n///\n/// OpenCL v1.1 s6.3.i and s6.11.6 together require that the scalar\n/// types are either integer or floating type. Between the two\n/// operands, the type with the higher rank is defined as the \"result\n/// type\". The other operand needs to be promoted to the same type. No\n/// other type promotion is allowed. We cannot use\n/// UsualArithmeticConversions() for this purpose, since it always\n/// promotes promotable types.\nstatic QualType OpenCLArithmeticConversions(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  if (!RHSType->isIntegerType() && !RHSType->isRealFloatingType()) {\n   S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_int_float) << RHSType << RHS.get()->getSourceRange();"}},
[b]={{D,680,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///       require that options passed both in the AST file and on the command\n///       line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///       are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n // ...\n  for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {\n    // ...\n    if (Validation == OptionValidateNone || Known == ASTFileMacros.end()) {\n      if (Validation == OptionValidateStrictMatches) {\n       // If strict matches are requested, don\'t tolerate any extra defines on\n        // the command line that are missing in the AST file.\n       if (Diags) {\n          Diags->Report(diag::err_pch_macro_def_undef) << MacroName << true;"},{D,706,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///       require that options passed both in the AST file and on the command\n///       line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///       are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  for (unsigned I = 0, N = ExistingMacroNames.size(); I != N; ++I) {\n    // ...\n    // If the macro was defined in one but undef\'d in the other, we have a\n    // conflict.\n    if (Existing.second != Known->second.second) {\n      if (Diags) {\n       Diags->Report(diag::err_pch_macro_def_undef) << MacroName << Known->second.second;"},{D,735,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///       preprocessor options. If set to OptionValidateContradictions,\n///       require that options passed both in the AST file and on the command\n///       line (-D or -U) match, but tolerate options missing in one or the\n///       other. If set to OptionValidateContradictions, require that there\n///       are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  if (Validation == OptionValidateStrictMatches) {\n    // If strict matches are requested, don\'t tolerate any extra defines in\n    // the AST file that are missing on the command line.\n    for (const auto &MacroName : ASTFileMacros.keys()) {\n     if (Diags) {\n        Diags->Report(diag::err_pch_macro_def_undef) << MacroName << false;"}}
[l]={
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:113:12: error: used type \'__global int *\' where integer or floating point type is required"}
}
},
},
["err_typecheck_cond_expect_nonfloat"]={
["err_pch_modulecache_mismatch"]={
[b]="err_typecheck_cond_expect_nonfloat",
[d]="err_pch_modulecache_mismatch",
[c]="used type %0 where floating point type is not allowed",
[e]="PCH was compiled with module cache path \'%0\', but the path is currently \'%1\'",
[d]="used type A where floating point type is not allowed",
[i]="PCH was compiled with module cache path \'A\', but the path is currently \'B\'",
[e]=k,
[j]=k,
[g]="used type (.*?) where floating point type is not allowed",
[c]="PCH was compiled with module cache path \'(.*?)\', but the path is currently \'(.*?)\'",
[h]=a,
[h]=a,
[i]=m,
[g]=P,
[f]={"e8d2aaf32021",1423031898,"OpenCL: handle ternary operator when the condition is a vector","OpenCL: handle ternary operator when the condition is a vector\n\nWhen the condition is a vector, OpenCL specifies additional\nrequirements on the operand types, and also the operations\nrequired to determine the result type of the operator. This is a\ncombination of OpenCL v1.1 s6.3.i and s6.11.6, and the semantics\nremain unchanged in later versions of OpenCL.\n\nllvm-svn: 228118"},
[f]={"bd0b651bd249",1424376740,"[PCH/Modules] Check that the specific module cache path the PCH was built with, is the same as","[PCH/Modules] Check that the specific module cache path the PCH was built with, is the same as\nthe one in the current compiler invocation. If they differ reject the PCH.\n\nThis protects against the badness occurring from getting modules loaded from different module caches (see crashes).\n\nrdar://19889860\n\nllvm-svn: 229909"},
[j]={{n,8619,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n  // ...\n  // OpenCL v1.1 s6.3.i says the condition cannot be a floating point type.\n  if (S.getLangOpts().OpenCL && CondTy->isFloatingType()) {\n    S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << CondTy << Cond->getSourceRange();"},{n,8981,"/// Return false if this is a valid OpenCL condition vector\nstatic bool checkOpenCLConditionVector(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n // ...\n  S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_nonfloat) << Cond->getType() << Cond->getSourceRange();"}},
[b]={{D,833,"/// Check the header search options deserialized from the control block\n/// against the header search options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\nstatic bool checkHeaderSearchOptions(const HeaderSearchOptions &HSOpts, StringRef SpecificModuleCachePath, StringRef ExistingModuleCachePath, DiagnosticsEngine *Diags, const LangOptions &LangOpts, const PreprocessorOptions &PPOpts) {\n  if (LangOpts.Modules) {\n    if (SpecificModuleCachePath != ExistingModuleCachePath && !PPOpts.AllowPCHWithDifferentModulesCachePath) {\n     if (Diags)\n       Diags->Report(diag::err_pch_modulecache_mismatch) << SpecificModuleCachePath << ExistingModuleCachePath;"}}
[l]={
["clang/test/SemaOpenCL/cond.cl"]={"clang/test/SemaOpenCL/cond.cl:102:12: error: used type \'float\' where floating point type is not allowed","clang/test/SemaOpenCL/cond.cl:107:12: error: used type \'float2\' (vector of 2 \'float\' values) where floating point type is not allowed"}
}
},
},
["err_typecheck_cond_expect_scalar"]={
["err_pch_pp_detailed_record"]={
[b]="err_typecheck_cond_expect_scalar",
[d]="err_pch_pp_detailed_record",
[c]="used type %0 where arithmetic or pointer type is required",
[e]="%select{command line contains|precompiled header was built with}0 \'-detailed-preprocessing-record\' but %select{precompiled header was not built with it|it is not present on the command line}0",
[d]="used type A where arithmetic or pointer type is required",
[i]={{nil,nil,{{"command line contains","precompiled header was built with"}," \'-detailed-preprocessing-record\' but ",{"precompiled header was not built with it","it is not present on the command line"}}}},
[e]=k,
[j]=k,
[g]="used type (.*?) where arithmetic or pointer type is required",
[c]="(?:command line contains|precompiled header was built with) \'\\-detailed\\-preprocessing\\-record\' but (?:precompiled header was not built with it|it is not present on the command line)",
[h]=a,
[h]=a,
[i]=m,
[g]=P,
[f]={p,1237025389,q,r},
[f]={"d3afa0c7fbac",1367012020,"[PCH/modules] Require the preprocessing record option to match the used PCH, if modules are enabled.","[PCH/modules] Require the preprocessing record option to match the used PCH, if modules are enabled.\n\nThe preprocessing record becomes important when modules are enabled, since it is used to calculate the\nmodule cache hash.\n\nllvm-svn: 180635"},
[j]={{Mb,3047,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n if (!DestType->isScalarType() && !DestType->isVectorType() && !DestType->isMatrixType()) {\n   // ...\n   Self.Diag(OpRange.getBegin(), diag::err_typecheck_cond_expect_scalar) << DestType << SrcExpr.get()->getSourceRange();"},{n,8686,"/// Return false if the condition expression is valid, true otherwise.\nstatic bool checkCondition(Sema &S, Expr *Cond, SourceLocation QuestionLoc) {\n  // ...\n  S.Diag(QuestionLoc, diag::err_typecheck_cond_expect_scalar) << CondTy << Cond->getSourceRange();"}},
[b]={{D,755,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///        preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///       are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  // Detailed record is important since it is used for the module cache hash.\n  if (LangOpts.Modules && PPOpts.DetailedRecord != ExistingPPOpts.DetailedRecord && Validation != OptionValidateNone) {\n    if (Diags) {\n      Diags->Report(diag::err_pch_pp_detailed_record) << PPOpts.DetailedRecord;"}}
[l]={
["clang/test/Parser/check_cast.c"]={"clang/test/Parser/check_cast.c:10:9: error: used type \'struct foo\' where arithmetic or pointer type is required"}
}
},
},
["err_typecheck_cond_incompatible_operands"]={
["err_pch_targetopt_feature_mismatch"]={
[b]="err_typecheck_cond_incompatible_operands",
[d]="err_pch_targetopt_feature_mismatch",
[c]="incompatible operand types%diff{ ($ and $)|}0,1",
[e]={{nil,z,"%select{AST file was|current translation unit is}0 compiled with the target feature \'%1\' but the %select{current translation unit is|AST file was}0 not"},{F,nil,"%select{AST file|current translation unit}0 was compiled with the target feature\'%1\' but the %select{current translation unit is|AST file was}0 not"}},
[d]={{nil,nil,{"incompatible operand types",{Pb,a}}}},
[i]={{nil,z,{{"AST file was","current translation unit is"}," compiled with the target feature \'B\' but the ",{"current translation unit is","AST file was"}," not"}},{F,nil,{{"AST file","current translation unit"}," was compiled with the target feature\'B\' but the ",{"current translation unit is","AST file was"}," not"}}},
[e]=k,
[j]=k,
[g]="incompatible operand types(?: \\((.*?) and (.*?)\\)|)",
[c]="(?:AST file was|current translation unit is) compiled with the target feature \'(.*?)\' but the (?:current translation unit is|AST file was) not",
[h]=a,
[h]=a,
[i]=m,
[g]=P,
[f]={p,1237025389,q,r},
[f]={"cb177f15e788",1350430858,"Serialize TargetOptions into an AST file, and make sure that we keep","Serialize TargetOptions into an AST file, and make sure that we keep\ntarget options around so they can be accessed at any point (rather\nthan keeping them transient).\n\nllvm-svn: 166072"},
[j]={{n,8845,"/// Return the resulting type when the operands are both block pointers.\nstatic QualType checkConditionalBlockPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n // ...\n  if (!LHSTy->isBlockPointerType() || !RHSTy->isBlockPointerType()) {\n    // ...\n    S.Diag(Loc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,9143,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // ...\n  // Diagnose attempts to convert between __ibm128, __float128 and long double\n  // where such conversions currently can\'t be handled.\n  if (unsupportedTypeConversion(*this, LHSTy, RHSTy)) {\n    Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,9180,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // ...\n  // If both operands have arithmetic type, do the usual arithmetic conversions\n  // to find a common type: C99 6.5.15p3,5.\n if (LHSTy->isArithmeticType() && RHSTy->isArithmeticType()) {\n    // Disallow invalid arithmetic conversions, such as those between bit-\n    // precise integers types of different sizes, or between a bit-precise\n    // integer and another type.\n   if (ResTy.isNull() && (LHSTy->isBitIntType() || RHSTy->isBitIntType())) {\n      Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,9334,"/// Note that LHS is not null here, even if this is the gnu \"x ?: y\" extension.\n/// In that case, LHS = cond.\n/// C99 6.5.15\nQualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n // ...\n  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHSTy << RHSTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{J,6261,"/// Try to find a common type for two according to C++0x 5.16p5.\n///\n/// This is part of the parameter validation for the ? operator. If either\n/// value operand is a class type, overload resolution is used to find a\n/// conversion to a common type.\nstatic bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS, SourceLocation QuestionLoc) {\n  // ...\n  case OR_No_Viable_Function:\n    // ...\n   Self.Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{J,6766,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///    most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // ...\n  //  -- The second and third operands have arithmetic or enumeration type;\n  //      the usual arithmetic conversions are performed to bring them to a\n  //      common type, and the result is of that type.\n  if (LTy->isArithmeticType() && RTy->isArithmeticType()) {\n    // ...\n    if (ResTy.isNull()) {\n      Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{J,6804,"/// Check the operands of ?: under C++ semantics.\n///\n/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y\n/// extension. In this case, LHS == Cond. (But they\'re not aliases.)\n///\n/// This function also implements GCC\'s vector extension and the\n/// OpenCL/ext_vector_type extension for conditionals. The vector extensions\n/// permit the use of a?b:c where the type of a is that of a integer vector with\n/// the same number of elements and size as the vectors of b and c. If one of\n/// either b or c is a scalar it is implicitly converted to match the type of\n/// the vector. Otherwise the expression is ill-formed. If both b and c are\n/// scalars, then b and c are checked and converted to the type of a if\n/// possible.\n///\n/// The expressions are evaluated differently for GCC\'s and OpenCL\'s extensions.\n/// For the GCC extension, the ?: operator is evaluated as\n///  (a[0] != 0 ? b[0] : c[0], .. , a[n] != 0 ? b[n] : c[n]).\n/// For the OpenCL extensions, the ?: operator is evaluated as\n///  (most-significant-bit-set(a[0])  ? b[0] : c[0], .. ,\n///   most-significant-bit-set(a[n]) ? b[n] : c[n]).\nQualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation QuestionLoc) {\n  // ...\n  Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[b]={{D,366,"#define SANITIZER(NAME, ID) \\\n  { \\\n    bool InExistingModule = ExistingSanitizers.has(SanitizerKind::ID); \\\n   bool InImportedModule = ImportedSanitizers.has(SanitizerKind::ID); \\\n   if (InExistingModule != InImportedModule) \\\n     Diags->Report(diag::err_pch_targetopt_feature_mismatch) << InExistingModule << (Flag + NAME); \\"},{D,436,"/// Compare the given set of target options against an existing set of\n/// target options.\n///\n/// \\param Diags If non-NULL, diagnostics will be emitted via this engine.\n///\n/// \\returns true if the target options mis-match, false otherwise.\nstatic bool checkTargetOptions(const TargetOptions &TargetOpts, const TargetOptions &ExistingTargetOpts, DiagnosticsEngine *Diags, bool AllowCompatibleDifferences = true) {\n  // ...\n  if (Diags) {\n    for (StringRef Feature : UnmatchedReadFeatures)\n     Diags->Report(diag::err_pch_targetopt_feature_mismatch) << /* is-existing-feature */ false << Feature;"},{D,439,"/// Compare the given set of target options against an existing set of\n/// target options.\n///\n/// \\param Diags If non-NULL, diagnostics will be emitted via this engine.\n///\n/// \\returns true if the target options mis-match, false otherwise.\nstatic bool checkTargetOptions(const TargetOptions &TargetOpts, const TargetOptions &ExistingTargetOpts, DiagnosticsEngine *Diags, bool AllowCompatibleDifferences = true) {\n  // ...\n  if (Diags) {\n    // ...\n    for (StringRef Feature : UnmatchedExistingFeatures)\n      Diags->Report(diag::err_pch_targetopt_feature_mismatch) << /* is-existing-feature */ true << Feature;"}}
[l]={
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:175:7: error: incompatible operand types (\'void (^)(int)\' and \'void (*)(int)\')"}
}
},
},
["err_typecheck_cond_incompatible_operands_null"]={
["err_pch_targetopt_mismatch"]={
[b]="err_typecheck_cond_incompatible_operands_null",
[d]="err_pch_targetopt_mismatch",
[c]="non-pointer operand type %0 incompatible with %select{NULL|nullptr}1",
[e]="PCH file was compiled for the %0 \'%1\' but the current translation unit is being compiled for target \'%2\'",
[d]={{nil,nil,{"non-pointer operand type A incompatible with ",{"NULL","nullptr"}}}},
[i]="PCH file was compiled for the A \'B\' but the current translation unit is being compiled for target \'C\'",
[e]=k,
[j]=k,
[g]="non\\-pointer operand type (.*?) incompatible with (?:NULL|nullptr)",
[c]="PCH file was compiled for the (.*?) \'(.*?)\' but the current translation unit is being compiled for target \'(.*?)\'",
[h]=a,
[h]=a,
[i]=m,
[g]=P,
[f]={"a8bea4b90ec7",1298073290,"Initial steps to improve diagnostics when there is a NULL and","Initial steps to improve diagnostics when there is a NULL and\na non-pointer on the two sides of a conditional expression.\n\nPatch by Stephen Hines and Mihai Rusu.\n\nllvm-svn: 125995"},
[f]={"cb177f15e788",1350430858,"Serialize TargetOptions into an AST file, and make sure that we keep","Serialize TargetOptions into an AST file, and make sure that we keep\ntarget options around so they can be accessed at any point (rather\nthan keeping them transient).\n\nllvm-svn: 166072"},
[j]={{n,8611,"/// Emit a specialized diagnostic when one expression is a null pointer\n/// constant and the other is not a pointer. Returns true if a diagnostic is\n/// emitted.\nbool Sema::DiagnoseConditionalForNull(Expr *LHSExpr, Expr *RHSExpr, SourceLocation QuestionLoc) {\n  // ...\n Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands_null) << NonPointerExpr->getType() << DiagType << NonPointerExpr->getSourceRange();"}},
[b]={{D,391,"#define CHECK_TARGET_OPT(Field, Name) \\\n  if (TargetOpts.Field != ExistingTargetOpts.Field) { \\\n   if (Diags) \\\n     Diags->Report(diag::err_pch_targetopt_mismatch) << Name << TargetOpts.Field << ExistingTargetOpts.Field; \\"}}
[l]={
["clang/test/SemaCXX/nullptr.cpp"]={"clang/test/SemaCXX/nullptr.cpp:51:12: error: non-pointer operand type \'A\' incompatible with nullptr","clang/test/SemaCXX/nullptr.cpp:52:12: error: non-pointer operand type \'A\' incompatible with nullptr"}
}
},
},
["err_typecheck_convert_discards_qualifiers"]={
["err_pch_undef"]={
[b]={{nil,s,"err_typecheck_convert_discards_qualifiers"}},
[d]="err_pch_undef",
[c]={{nil,s,"%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"}},
[e]="%select{command line contains|precompiled header was built with}0 \'-undef\' but %select{precompiled header was not built with it|it is not present on the command line}0",
[d]={{nil,s,{{{{Kb,gb}},{{fb,eb}},{{cb,bb}},{{ab,Y}},{{db,ib}},{{jb,kb}},{{X,lb}}}," discards qualifiers"}}},
[i]={{nil,nil,{{"command line contains","precompiled header was built with"}," \'-undef\' but ",{"precompiled header was not built with it","it is not present on the command line"}}}},
[e]=k,
[j]=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",
[c]="(?:command line contains|precompiled header was built with) \'\\-undef\' but (?:precompiled header was not built with it|it is not present on the command line)",
[h]=a,
[h]=a,
[i]={{nil,s,m}},
[g]=P,
[f]={Q,1576908663,O,N},
[f]={"b63687519610",1351122110,"Teach the PCH validator to check the preprocessor options, especially","Teach the PCH validator to check the preprocessor options, especially\nthe macros that are #define\'d or #undef\'d on the command line. This\nchecking happens much earlier than the current macro-definition\nchecking and is far cleaner, because it does a direct comparison\nrather than a diff of the predefines buffers. Moreover, it allows us\nto use the result of this check to skip over PCH files within a\ndirectory that have non-matching -D\'s or -U\'s on the command\nline. Finally, it improves the diagnostics a bit for mismatches,\nfixing <rdar://problem/8612222>.\n\nThe old predefines-buffer diff\'ing will go away in a subsequent commit.\n\nllvm-svn: 166641"},
[j]={{n,17631,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\// ...\n case CompatiblePointerDiscardsQualifiers:\n    // ...\n   if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_discards_qualifiers;"}},
[b]={{D,745,"/// Check the preprocessor options deserialized from the control block\n/// against the preprocessor options in an existing preprocessor.\n///\n/// \\param Diags If non-null, produce diagnostics for any mismatches incurred.\n/// \\param Validation If set to OptionValidateNone, ignore differences in\n///       preprocessor options. If set to OptionValidateContradictions,\n///        require that options passed both in the AST file and on the command\n///        line (-D or -U) match, but tolerate options missing in one or the\n///        other. If set to OptionValidateContradictions, require that there\n///        are no differences in the options between the two.\nstatic bool checkPreprocessorOptions(const PreprocessorOptions &PPOpts, const PreprocessorOptions &ExistingPPOpts, DiagnosticsEngine *Diags, FileManager &FileMgr, std::string &SuggestedPredefines, const LangOptions &LangOpts, OptionValidation Validation = OptionValidateContradictions) {\n  // ...\n  // Check whether we\'re using predefines.\n  if (PPOpts.UsePredefines != ExistingPPOpts.UsePredefines && Validation != OptionValidateNone) {\n    if (Diags) {\n      Diags->Report(diag::err_pch_undef) << ExistingPPOpts.UsePredefines;"}}
[l]={
["clang/test/CXX/drs/dr3xx.cpp"]={"clang/test/CXX/drs/dr3xx.cpp:405:9: error: assigning to \'T\' (aka \'const int *(*)[]\') from \'S\' (aka \'const int *const (*)[]\') discards qualifiers"}
}
},
},
["err_typecheck_convert_incompatible"]={
["err_pch_version_too_new"]={
[b]="err_typecheck_convert_incompatible",
[d]="err_pch_version_too_new",
[c]={{nil,R,"%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%select{|; dereference with *|; take the address with &|; remove *|; remove &}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 (%5 vs %6)|: different exception specifications}4"},{"7.1",nil,"%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%select{|; dereference with *|; take the address with &|; remove *|; remove &}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]="PCH file uses a newer PCH format that cannot be read",
[d]={{nil,R,{{{{"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"}}},{a,Wb,ic,Xb,kc},{a,{": different classes",{" (F vs G)",a}},": different number of parameters (F vs G)",{": type mismatch at F parameter",{" (G vs H)",a}},{": different return type",{" (F vs G)",a}},": different qualifiers (F vs G)",": different exception specifications"}}},{"7.1",nil,{{{{"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"}}},{a,Wb,ic,Xb,kc},{a,{": different classes",{" (F vs G)",a}},": different number of parameters (F vs G)",{": type mismatch at F parameter",{" (G vs H)",a}},{": different return type",{" (F vs G)",a}},{": different qualifiers (",{"none","const","restrict","const and restrict","volatile","const and volatile","volatile and restrict","const, volatile, and restrict"}," vs ",{"none","const","restrict","const and restrict","volatile","const and volatile","volatile and restrict","const, volatile, and restrict"},")"},": different exception specifications"}}}},
[i]="PCH file uses a newer PCH format that cannot be read",
[e]=k,
[j]=k,
[g]="(?:(?:assigning to (.*?) from incompatible type (.*?)|assigning to type from incompatible type)|(?:passing (.*?) to parameter of incompatible type (.*?)|passing type to parameter of incompatible type)|(?:returning (.*?) from a function with incompatible result type (.*?)|returning type from a function with incompatible result type)|(?:converting (.*?) to incompatible type (.*?)|converting type to incompatible type)|(?:initializing (.*?) with an expression of incompatible type (.*?)|initializing type with an expression of incompatible type)|(?:sending (.*?) to parameter of incompatible type (.*?)|sending type to parameter of incompatible type)|(?:casting (.*?) to incompatible type (.*?)|casting type to incompatible type))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)(?:|\\: different classes(?: \\((.*?) vs (.*?)\\)|)|\\: different number of parameters \\((.*?) vs (.*?)\\)|\\: type mismatch at (.*?) parameter(?: \\((.*?) vs (.*?)\\)|)|\\: different return type(?: \\((.*?) vs (.*?)\\)|)|\\: different qualifiers \\((.*?) vs (.*?)\\)|\\: different exception specifications)",
[c]="PCH file uses a newer PCH format that cannot be read",
[h]=a,
[h]=a,
[i]=m,
[g]=P,
[f]={p,1237025389,q,r},
[f]={"2228cd3f070d",1392133209,"Rename some PCH-related errors to have \'err_\' as their prefix","Rename some PCH-related errors to have \'err_\' as their prefix\n\nllvm-svn: 201157"},
[j]={{w,4387,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case PPC::BI__builtin_ppc_maxfe:\n  case PPC::BI__builtin_ppc_minfe:\n  case PPC::BI__builtin_ppc_maxfl:\n  case PPC::BI__builtin_ppc_minfl:\n  case PPC::BI__builtin_ppc_maxfs:\n  case PPC::BI__builtin_ppc_minfs: {\n    // ...\n    for (unsigned I = 0, E = TheCall->getNumArgs(); I < E; ++I)\n      if (TheCall->getArg(I)->getType() != ArgType)\n        return Diag(TheCall->getBeginLoc(), diag::err_typecheck_convert_incompatible) << TheCall->getArg(I)->getType() << ArgType << 1 << 0 << 0;"},{w,8223,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  // ...\n if (!Arg1Ty->isPointerType() || !IsSuitablyTypedFormatArgument(Arg1))\n    Diag(Arg1->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg1->getType() << ConstCharPtrTy << 1 /* different class */"},{w,8231,"bool Sema::SemaBuiltinVAStartARMMicrosoft(CallExpr *Call) {\n  // ...\n  if (Arg2Ty->getCanonicalTypeInternal().withoutLocalFastQualifiers() != SizeTy)\n    Diag(Arg2->getBeginLoc(), diag::err_typecheck_convert_incompatible) << Arg2->getType() << SizeTy << 1 /* different class */"},{w,9278,"/// SemaBuiltinPPCMMACall - Check the call to a PPC MMA builtin for validity.\n/// Emit an error and return true on failure; return false on success.\n/// TypeStr is a string containing the type descriptor of the value returned by\n/// the builtin and the descriptors of the expected type of the arguments.\nbool Sema::SemaBuiltinPPCMMACall(CallExpr *TheCall, unsigned BuiltinID, const char *TypeStr) {\n  // ...\n  while (*TypeStr != \'\\0\') {\n    // ...\n    // The only case where the argument type and expected type are allowed to\n   // mismatch is if the argument type is a non-void pointer (or array) and\n    // expected type is a void pointer.\n    if (StrippedRVType != ExpectedType)\n     if (!(ExpectedType->isVoidPointerType() && (StrippedRVType->isPointerType() || StrippedRVType->isArrayType())))\n       return Diag(Arg->getBeginLoc(), diag::err_typecheck_convert_incompatible) << PassedType << ExpectedType << 1 << 0 << 0;"},{n,17742,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case Incompatible:\n    // ...\n    DiagKind = diag::err_typecheck_convert_incompatible;"}},
[b]={{D,2833,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case METADATA: {\n     if (Record[0] != VERSION_MAJOR && !DisableValidation) {\n       if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)\n         Diag(Record[0] < VERSION_MAJOR ? diag::err_pch_version_too_old : diag::err_pch_version_too_new);"}}
[l]={
["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:17:7: error: assigning to \'C\' (aka \'void (X::*)() noexcept\') from incompatible type \'void (X::*)()\': different exception specifications","clang/test/CXX/expr/p13.cpp:20:7: error: assigning to \'E\' (aka \'void (Y::*)() noexcept\') from incompatible type \'void (Y::*)()\': different exception specifications","clang/test/CXX/expr/p13.cpp:21:7: error: assigning to \'E\' (aka \'void (Y::*)() noexcept\') from incompatible type \'void (Y::*)()\': different exception specifications"}
}
},
},
["err_typecheck_convert_incompatible_block_pointer"]={
["err_pch_version_too_old"]={
[b]="err_typecheck_convert_incompatible_block_pointer",
[d]="err_pch_version_too_old",
[c]="incompatible block pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2",
[e]="PCH file uses an older PCH format that is no longer supported",
[d]={{nil,nil,{"incompatible block pointer types ",{{{Kb,gb}},{{fb,eb}},{{cb,bb}},{{ab,Y}},{{db,ib}},{{jb,kb}},{{X,lb}}}}}},
[i]="PCH file uses an older PCH format that is no longer supported",
[e]=k,
[j]=k,
[g]="incompatible block pointer types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))",
[c]="PCH file uses an older PCH format that is no longer supported",
[h]=a,
[h]=a,
[i]=m,
[g]=P,
[f]={"d79b5a85b059",1240354302,"Tighten up blocks type checking.  This was discussed back in the","Tighten up blocks type checking.  This was discussed back in the\nr56595 timeframe, but left undone.  Radar 6812711\n\nllvm-svn: 69745"},
[f]={"2228cd3f070d",1392133209,"Rename some PCH-related errors to have \'err_\' as their prefix","Rename some PCH-related errors to have \'err_\' as their prefix\n\nllvm-svn: 201157"},
[j]={{n,17679,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleBlockPointer:\n   DiagKind = diag::err_typecheck_convert_incompatible_block_pointer;"}},
[b]={{D,2832,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case METADATA: {\n      if (Record[0] != VERSION_MAJOR && !DisableValidation) {\n       if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)\n          Diag(Record[0] < VERSION_MAJOR ? diag::err_pch_version_too_old : diag::err_pch_version_too_new);"},{D,4701,"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 AST_BLOCK_ID:\n      if (!HaveReadControlBlock) {\n        if ((ClientLoadCapabilities & ARR_VersionMismatch) == 0)\n          Diag(diag::err_pch_version_too_old);"}}
[l]={
["clang/test/SemaObjC/block-omitted-return-type.m"]={"clang/test/SemaObjC/block-omitted-return-type.m:26:10: error: incompatible block pointer types initializing \'void (^)(void)\' with an expression of type \'const void (^)(void)\'"}
}
},
},
["err_typecheck_convert_incompatible_function_pointer"]={
["err_pch_with_compiler_errors"]={
[b]={{nil,s,"err_typecheck_convert_incompatible_function_pointer"}},
[d]="err_pch_with_compiler_errors",
[c]={{nil,s,"incompatible function pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3"}},
[e]="PCH file contains compiler errors",
[d]={{nil,s,{"incompatible function pointer types ",{{{Kb,gb}},{{fb,eb}},{{cb,bb}},{{ab,Y}},{{db,ib}},{{jb,kb}},{{X,lb}}},{a,Wb,ic,Xb,kc}}}},
[i]="PCH file contains compiler errors",
[e]=k,
[j]=k,
[g]="incompatible function pointer types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
[c]="PCH file contains compiler errors",
[h]=a,
[h]=a,
[i]={{nil,s,m}},
[g]=P,
[f]={Q,1576908663,O,N},
[f]={"4a280ff48fd6",1331085077,"[PCH] Mark a PCH file with a flag to indicate if the serialized AST had","[PCH] Mark a PCH file with a flag to indicate if the serialized AST had\ncompiler errors or not.\n\n-Control whether ASTReader should reject such a PCH by a boolean flag at ASTReader\'s creation time.\nBy default, such a PCH file will be rejected with an error when trying to load it.\n\n[libclang] Allow clang_saveTranslationUnit to create a PCH file even if compiler errors\noccurred.\n-Have libclang API calls accept a PCH that had compiler errors.\n\nThe general idea is that we want libclang to stay functional even if a PCH had a compiler error.\nrdar://10976363.\n\nllvm-svn: 152192"},
[j]={{n,17554,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatibleFunctionPointer:\n   if (getLangOpts().CPlusPlus) {\n     DiagKind = diag::err_typecheck_convert_incompatible_function_pointer;"}},
[b]={{D,2846,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  // ...\n  while (true) {\n    // ...\n    case METADATA: {\n     // ...\n      if (hasErrors && !DisableValidation) {\n        // ...\n        if (!AllowASTWithCompilerErrors) {\n         Diag(diag::err_pch_with_compiler_errors);"}},
[l]={
[l]={
["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:14:7: error: incompatible function pointer types assigning to \'A\' (aka \'void (*)() noexcept\') from \'void (*)()\'"}
["clang/test/Modules/load-module-with-errors.m"]={"clang/test/Modules/load-module-with-errors.m:5:2: error: PCH file contains compiler errors"}
}
}
},
},
["err_typecheck_convert_incompatible_pointer"]={
["err_placeholder_constraints_not_satisfied"]={
[b]={{nil,s,"err_typecheck_convert_incompatible_pointer"}},
[d]={{nil,w,"err_placeholder_constraints_not_satisfied"}},
[c]={{nil,s,"incompatible pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3"}},
[e]={{nil,w,"deduced type %0 does not satisfy %1"}},
[d]={{nil,s,{"incompatible pointer types ",{{{Kb,gb}},{{fb,eb}},{{cb,bb}},{{ab,Y}},{{db,ib}},{{jb,kb}},{{X,lb}}},{a,Wb,ic,Xb,kc}}}},
[i]={{nil,w,"deduced type A does not satisfy B"}},
[e]=k,
[j]=k,
[g]="incompatible pointer types (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
[c]="deduced type (.*?) does not satisfy (.*?)",
[h]=a,
[h]=a,
[i]={{nil,s,m}},
[g]={{nil,w,m}},
[f]={Q,1576908663,O,N},
[f]={"6d485ff455ea",1576172311,"Improve static checks for sprintf and __builtin___sprintf_chk","Improve static checks for sprintf and __builtin___sprintf_chk\n\nImplement a pessimistic evaluator of the minimal required size for a buffer\nbased on the format string, and couple that with the fortified version to emit a\nwarning when the buffer size is lower than the lower bound computed from the\nformat string.\n\nDifferential Revision: https://reviews.llvm.org/D71566"},
[j]={{n,17566,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatiblePointer:\n    if (Action == AA_Passing_CFAudited) {\n    // ...\n    } else if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_incompatible_pointer;"}},
[b]={{"clang/lib/Sema/SemaTemplateDeduction.cpp",4733,"static bool CheckDeducedPlaceholderConstraints(Sema &S, const AutoType &Type, AutoTypeLoc TypeLoc, QualType Deduced) {\n  // ...\n  if (!Satisfaction.IsSatisfied) {\n    // ...\n    S.Diag(TypeLoc.getConceptNameLoc(), diag::err_placeholder_constraints_not_satisfied) << Deduced << Buf << TypeLoc.getLocalSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.decls/temp.class/temp.mem.class/p1.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class/temp.mem.class/p1.cpp:13:18: error: incompatible pointer types assigning to \'int *\' from \'float *\'"}
["clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp"]={"clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:23:3: error: deduced type \'char\' does not satisfy \'Large\'","clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:29:3: error: deduced type \'int\' does not satisfy \'LargerThan<10>\'","clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:22:1: error: deduced type \'char\' does not satisfy \'Large\'","clang/test/CXX/dcl/dcl.spec/dcl.type/dcl.spec.auto/p6.cpp:37:1: error: deduced type \'int\' does not satisfy \'LargerThan<4>\'"}
}
}
},
},
["err_typecheck_convert_incompatible_pointer_sign"]={
["err_placeholder_expected_auto_or_decltype_auto"]={
[b]={{nil,s,"err_typecheck_convert_incompatible_pointer_sign"}},
[d]={{nil,w,"err_placeholder_expected_auto_or_decltype_auto"}},
[c]={{nil,v,"%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between pointers to integer types %select{with different sign|where one is of the unique plain \'char\' type and the other is not}3"},{tb,s,"%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between pointers to integer types with different sign"}},
[e]={{nil,w,"expected \'auto\' or \'decltype(auto)\' after concept name"}},
[d]={{nil,v,{{{{Kb,gb}},{{fb,eb}},{{cb,bb}},{{ab,Y}},{{db,ib}},{{jb,kb}},{{X,lb}}}," converts between pointers to integer types ",{"with different sign","where one is of the unique plain \'char\' type and the other is not"}}},{tb,s,{{{{Kb,gb}},{{fb,eb}},{{cb,bb}},{{ab,Y}},{{db,ib}},{{jb,kb}},{{X,lb}}}," converts between pointers to integer types with different sign"}}},
[i]={{nil,w,"expected \'auto\' or \'decltype(auto)\' after concept name"}},
[e]=k,
[j]=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)) converts between pointers to integer types (?:with different sign|where one is of the unique plain \'char\' type and the other is not)",
[c]="expected \'auto\' or \'decltype\\(auto\\)\' after concept name",
[h]=a,
[h]=a,
[i]={{nil,s,m}},
[g]={{nil,w,"Concepts Issue"}},
[f]={Q,1576908663,O,N},
[f]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit","Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit\n\nSee\nhttps://docs.google.com/document/d/1xMkTZMKx9llnMPgso0jrx3ankI4cv60xeZ0y4ksf4wc/preview\nfor background discussion.\n\nThis adds a warning, flags and pragmas to limit the number of\npre-processor tokens either at a certain point in a translation unit, or\noverall.\n\nThe idea is that this would allow projects to limit the size of certain\nwidely included headers, or for translation units overall, as a way to\ninsert backstops for header bloat and prevent compile-time regressions.\n\nDifferential revision: https://reviews.llvm.org/D72703"},
[j]={{n,17583,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatiblePointerSign:\n   if (getLangOpts().CPlusPlus) {\n     DiagKind = diag::err_typecheck_convert_incompatible_pointer_sign;"},{n,17764,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  if (DiagKind == diag::ext_typecheck_convert_incompatible_pointer_sign || DiagKind == diag::err_typecheck_convert_incompatible_pointer_sign) {"}},
[b]={{ib,3800,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  while (true) {\n    // ...\n    case tok::annot_template_id: {\n     // ...\n      if (TemplateId->Kind == TNK_Concept_template) {\n        // ...\n        // Any of the following tokens are likely the start of the user\n        // forgetting \'auto\' or \'decltype(auto)\', so diagnose.\n        // Note: if updating this list, please make sure we update\n        // isCXXDeclarationSpecifier\'s check for IsPlaceholderSpecifier to have\n        // a matching list.\n        if (NextToken().isOneOf(tok::identifier, tok::kw_const, tok::kw_volatile, tok::kw_restrict, tok::amp, tok::ampamp)) {\n         Diag(Loc, diag::err_placeholder_expected_auto_or_decltype_auto) << FixItHint::CreateInsertion(NextToken().getLocation(), \"auto\");"},{ib,3824,"/// ParseDeclarationSpecifiers\n///      declaration-specifiers: [C99 6.7]\n///        storage-class-specifier declaration-specifiers[opt]\n///        type-specifier declaration-specifiers[opt]\n/// [C99]  function-specifier declaration-specifiers[opt]\n/// [C11]  alignment-specifier declaration-specifiers[opt]\n/// [GNU]  attributes declaration-specifiers[opt]\n/// [Clang] \'__module_private__\' declaration-specifiers[opt]\n/// [ObjC1] \'__kindof\' declaration-specifiers[opt]\n///\n///      storage-class-specifier: [C99 6.7.1]\n///        \'typedef\'\n///        \'extern\'\n///        \'static\'\n///        \'auto\'\n///        \'register\'\n/// [C++]  \'mutable\'\n/// [C++11] \'thread_local\'\n/// [C11]  \'_Thread_local\'\n/// [GNU]  \'__thread\'\n///      function-specifier: [C99 6.7.4]\n/// [C99]  \'inline\'\n/// [C++]  \'virtual\'\n/// [C++]  \'explicit\'\n/// [OpenCL] \'__kernel\'\n///      \'friend\': [C++ dcl.friend]\n///      \'constexpr\': [C++0x dcl.constexpr]\nvoid Parser::ParseDeclarationSpecifiers(DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSContext, LateParsedAttrList *LateAttrs, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  while (true) {\n    // ...\n    case tok::annot_template_id: {\n      // ...\n      if (TemplateId->Kind == TNK_Concept_template) {\n        // ...\n        if (TryConsumeToken(tok::kw_decltype)) {\n          // ...\n          if (Tracker.consumeOpen()) {\n          // ...\n          } else {\n            if (!TryConsumeToken(tok::kw_auto)) {\n              // ...\n              Diag(Tok, diag::err_placeholder_expected_auto_or_decltype_auto) << FixItHint::CreateReplacement(SourceRange(AutoLoc, Tok.getLocation()), \"auto\");"}},
[l]={
[l]={
["clang/test/Sema/incompatible-sign.cpp"]={"clang/test/Sema/incompatible-sign.cpp:7:7: error: assigning to \'signed char *\' from \'char *\' converts between pointers to integer types where one is of the unique plain \'char\' type and the other is not","clang/test/Sema/incompatible-sign.cpp:13:7: error: assigning to \'char *\' from \'unsigned char *\' converts between pointers to integer types where one is of the unique plain \'char\' type and the other is not"}
["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:30:4: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:32:4: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:34:4: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:36:4: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:40:18: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:45:11: error: expected \'auto\' or \'decltype(auto)\' after concept name","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:48:17: error: expected \'auto\' or \'decltype(auto)\' after concept name"}
}
}
},
},
["err_typecheck_convert_int_pointer"]={
["err_placeholder_in_source"]={
[b]={{nil,s,"err_typecheck_convert_int_pointer"}},
[d]={{nil,q,"err_placeholder_in_source"}},
[c]={{nil,s,"incompatible integer to pointer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3"}},
[e]={{nil,q,"editor placeholder in source file"}},
[d]={{nil,s,{"incompatible integer to pointer conversion ",{{{Kb,gb}},{{fb,eb}},{{cb,bb}},{{ab,Y}},{{db,ib}},{{jb,kb}},{{X,lb}}},{a,Wb,ic,Xb,kc}}}},
[i]={{nil,q,"editor placeholder in source file"}},
[e]=k,
[j]=k,
[g]="incompatible integer to pointer conversion (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
[c]="editor placeholder in source file",
[h]=a,
[h]=a,
[i]={{nil,s,m}},
[g]={{nil,q,x}},
[f]={Q,1576908663,O,N},
[f]={"1be800c511c8",1492592336,"Add support for editor placeholders to Clang","Add support for editor placeholders to Clang\n\nThis commit teaches Clang to recognize editor placeholders that are produced\nwhen an IDE like Xcode inserts a code-completion result that includes a\nplaceholder. Now when the lexer sees a placeholder token, it emits an\n\'editor placeholder in source file\' error and creates an identifier token\nthat represents the placeholder. The parser/sema can now recognize the\nplaceholders and can suppress the diagnostics related to the placeholders. This\nensures that live issues in an IDE like Xcode won\'t get spurious diagnostics\nrelated to placeholders.\n\nThis commit also adds a new compiler option named \'-fallow-editor-placeholders\'\nthat silences the \'editor placeholder in source file\' error. This is useful\nfor an IDE like Xcode as we don\'t want to display those errors in live issues.\n\nrdar://31581400\n\nDifferential Revision: https://reviews.llvm.org/D32081\n\nllvm-svn: 300667"},
[j]={{n,17538,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IntToPointer:\n    if (getLangOpts().CPlusPlus) {\n     DiagKind = diag::err_typecheck_convert_int_pointer;"}},
[b]={{"clang/lib/Lex/Lexer.cpp",3241,"bool Lexer::lexEditorPlaceholder(Token &Result, const char *CurPtr) {\n  // ...\n  if (!LangOpts.AllowEditorPlaceholders)\n   Diag(Start, diag::err_placeholder_in_source);"}},
[l]={
[l]={
["clang/test/SemaCXX/goto.cpp"]={"clang/test/SemaCXX/goto.cpp:43:9: error: incompatible integer to pointer conversion assigning to \'double *\' from \'int\'"}
["clang/test/Frontend/pp-only-no-editor-placeholders.c"]={"clang/test/Frontend/pp-only-no-editor-placeholders.c:4:1: error: editor placeholder in source file"}
}
}
},
},
["err_typecheck_convert_pointer_int"]={
["err_placement_new_non_placement_delete"]={
[b]={{nil,s,"err_typecheck_convert_pointer_int"}},
[d]="err_placement_new_non_placement_delete",
[c]={{nil,s,"incompatible pointer to integer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3"}},
[e]="\'new\' expression with placement arguments refers to non-placement \'operator delete\'",
[d]={{nil,s,{"incompatible pointer to integer conversion ",{{{Kb,gb}},{{fb,eb}},{{cb,bb}},{{ab,Y}},{{db,ib}},{{jb,kb}},{{X,lb}}},{a,Wb,ic,Xb,kc}}}},
[i]="\'new\' expression with placement arguments refers to non-placement \'operator delete\'",
[e]=k,
[j]=k,
[g]="incompatible pointer to integer conversion (?:(?:assigning to (.*?) from (.*?)|assigning to different types)|(?:passing (.*?) to parameter of type (.*?)|passing to parameter of different type)|(?:returning (.*?) from a function with result type (.*?)|returning from function with different return type)|(?:converting (.*?) to type (.*?)|converting between types)|(?:initializing (.*?) with an expression of type (.*?)|initializing with expression of different type)|(?:sending (.*?) to parameter of type (.*?)|sending to parameter of different type)|(?:casting (.*?) to type (.*?)|casting between types))(?:|; dereference with \\*|; take the address with &|; remove \\*|; remove &)",
[c]="\'new\' expression with placement arguments refers to non\\-placement \'operator delete\'",
[h]=a,
[h]=a,
[i]={{nil,s,m}},
[g]=m,
[f]={Q,1576908663,O,N},
[f]={"6642ca217e73",1267160778,"Implement semantic analysis for C++ [expr.new]p18-20, which describe","Implement semantic analysis for C++ [expr.new]p18-20, which describe\nhow we find the operator delete that matches withe operator new we\nfound in a C++ new-expression.\n\nThis will also need CodeGen support. On a happy note, we\'re now a\n\"nans\" away from building tramp3d-v4.\n\nllvm-svn: 97209"},
[j]={{n,17528,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case PointerToInt:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_pointer_int;"}},
[b]={{N,2926,"bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, AllocationFunctionScope NewScope, AllocationFunctionScope DeleteScope, QualType AllocType, bool IsArray, bool &PassAlignment, MultiExprArg PlaceArgs, FunctionDecl *&OperatorNew, FunctionDecl *&OperatorDelete, bool Diagnose) {\n  // ...\n  // C++ [expr.new]p20:\n  //  [...] If the lookup finds a single matching deallocation\n  //  function, that function will be called; otherwise, no\n  //  deallocation function will be called.\n  if (Matches.size() == 1) {\n    // ...\n    // C++1z [expr.new]p23:\n    //  If the lookup finds a usual deallocation function (3.7.4.2)\n    //  with a parameter of type std::size_t and that function, considered\n    //  as a placement deallocation function, would have been\n    //  selected as a match for the allocation function, the program\n    //  is ill-formed.\n    if (getLangOpts().CPlusPlus11 && isPlacementNew && isNonPlacementDeallocationFunction(*this, OperatorDelete)) {\n      // ...\n      if (IsSizedDelete) {\n        // ...\n        Diag(StartLoc, diag::err_placement_new_non_placement_delete) << R;"}},
[l]={
[l]={
["clang/test/SemaObjCXX/comptypes-7.mm"]={"clang/test/SemaObjCXX/comptypes-7.mm:38:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'id\'","clang/test/SemaObjCXX/comptypes-7.mm:39:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'id<MyProtocol>\'","clang/test/SemaObjCXX/comptypes-7.mm:40:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'MyClass *\'","clang/test/SemaObjCXX/comptypes-7.mm:41:7: error: incompatible pointer to integer conversion assigning to \'int\' from \'Class\'"}
["clang/test/SemaCXX/cxx1y-sized-deallocation.cpp"]={"clang/test/SemaCXX/cxx1y-sized-deallocation.cpp:18:3: error: \'new\' expression with placement arguments refers to non-placement \'operator delete\'"}
}
}
},
},
["err_typecheck_convert_pointer_void_func"]={
["err_pointer_to_member_call_drops_quals"]={
[b]={{nil,s,"err_typecheck_convert_pointer_void_func"}},
[d]="err_pointer_to_member_call_drops_quals",
[c]={{nil,s,"%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between void pointer and function pointer"}},
[e]="call to pointer to member function of type %0 drops \'%1\' qualifier%s2",
[d]={{nil,s,{{{{Kb,gb}},{{fb,eb}},{{cb,bb}},{{ab,Y}},{{db,ib}},{{jb,kb}},{{X,lb}}}," converts between void pointer and function pointer"}}},
[i]="call to pointer to member function of type A drops \'B\' qualifierC",
[e]=k,
[j]=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)) converts between void pointer and function pointer",
[c]="call to pointer to member function of type (.*?) drops \'(.*?)\' qualifier(.*?)",
[h]=a,
[i]={{nil,s,m}},
[f]={Q,1576908663,O,N},
[j]={{n,17591,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case FunctionVoidPointer:\n    if (getLangOpts().CPlusPlus) {\n      DiagKind = diag::err_typecheck_convert_pointer_void_func;"}}
},
["err_typecheck_converted_constant_expression"]={
[b]="err_typecheck_converted_constant_expression",
[c]="value of type %0 is not implicitly convertible to %1",
[d]="value of type A is not implicitly convertible to B",
[e]=k,
[g]="value of type (.*?) is not implicitly convertible to (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case","constexpr: converted constant expression handling for enumerator values, case\nvalues and non-type template arguments of integral and enumeration types.\n\nThis change causes some legal C++98 code to no longer compile in C++11 mode, by\nenforcing the C++11 rule that narrowing integral conversions are not permitted\nin the final implicit conversion sequence for the above cases.\n\nllvm-svn: 148439"},
[f]={"125fa40c34a4",1296824269,"When calling a bound pointer to member function, check the","When calling a bound pointer to member function, check the\ncv-qualifiers on the object against the cv-qualifiers on the member\nfunction. Fixes PR8315.\n\nllvm-svn: 124865"},
[j]={{vb,5859,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n  // ...\n  case ImplicitConversionSequence::AmbiguousConversion:\n  case ImplicitConversionSequence::BadConversion:\n    if (!S.DiagnoseMultipleUserDefinedConversion(From, T))\n      return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression) << From->getType() << From->getSourceRange() << T;"}},
[b]={{B,14691,"/// BuildCallToMemberFunction - Build a call to a member\n/// function. MemExpr is the expression that refers to the member\n/// function (and includes the object parameter), Args/NumArgs are the\n/// arguments to the function call (not including the object\n/// parameter). The caller needs to validate that the member\n/// expression refers to a non-static member function or an overloaded\n/// member function.\nExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE, SourceLocation LParenLoc, MultiExprArg Args, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  // Determine whether this is a call to a pointer-to-member function.\n  if (BinaryOperator *op = dyn_cast<BinaryOperator>(NakedMemExpr)) {\n    // ...\n    if (difference) {\n      // ...\n      Diag(LParenLoc, diag::err_pointer_to_member_call_drops_quals) << fnType.getUnqualifiedType() << qualsString << (qualsString.find(\' \') == std::string::npos ? 1 : 2);"}},
[l]={
[l]={
["clang/test/Misc/integer-literal-printing.cpp"]={"clang/test/Misc/integer-literal-printing.cpp:71:27: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type3Helper<(boolTy)false>::Ty\' (aka \'boolTy\')","clang/test/Misc/integer-literal-printing.cpp:73:27: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type4Helper<(charTy)\'\\x00\'>::Ty\' (aka \'charTy\')","clang/test/Misc/integer-literal-printing.cpp:74:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type5Helper<(scharTy)\'\\x00\'>::Ty\' (aka \'scharTy\')","clang/test/Misc/integer-literal-printing.cpp:75:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type6Helper<(ucharTy)\'\\x00\'>::Ty\' (aka \'ucharTy\')","clang/test/Misc/integer-literal-printing.cpp:76:28: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type7Helper<(wcharTy)L\'\\x00\'>::Ty\' (aka \'wcharTy\')","clang/test/Misc/integer-literal-printing.cpp:77:29: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type8Helper<(char16Ty)u\'\\x00\'>::Ty\' (aka \'char16Ty\')","clang/test/Misc/integer-literal-printing.cpp:78:29: error: value of type \'const char[2]\' is not implicitly convertible to \'typename Type9Helper<(char32Ty)u\'\\x00\'>::Ty\' (aka \'char32Ty\')"}
["clang/test/CXX/expr/expr.mptr.oper/p5.cpp"]={"clang/test/CXX/expr/expr.mptr.oper/p5.cpp:27:12: error: call to pointer to member function of type \'void ()\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:29:13: error: call to pointer to member function of type \'void () volatile\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:32:12: error: call to pointer to member function of type \'void ()\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:33:13: error: call to pointer to member function of type \'void () const\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:37:13: error: call to pointer to member function of type \'void ()\' drops \'const volatile\' qualifiers","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:38:14: error: call to pointer to member function of type \'void () const\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:39:14: error: call to pointer to member function of type \'void () volatile\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:47:11: error: call to pointer to member function of type \'void ()\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:49:12: error: call to pointer to member function of type \'void () volatile\' drops \'const\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:52:11: error: call to pointer to member function of type \'void ()\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:53:12: error: call to pointer to member function of type \'void () const\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:57:12: error: call to pointer to member function of type \'void ()\' drops \'const volatile\' qualifiers","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:58:13: error: call to pointer to member function of type \'void () const\' drops \'volatile\' qualifier","clang/test/CXX/expr/expr.mptr.oper/p5.cpp:59:13: error: call to pointer to member function of type \'void () volatile\' drops \'const\' qualifier"}
}
}
},
},
["err_typecheck_converted_constant_expression_disallowed"]={
["err_pointer_to_member_oper_value_classify"]={
[b]="err_typecheck_converted_constant_expression_disallowed",
[d]="err_pointer_to_member_oper_value_classify",
[c]="conversion from %0 to %1 is not allowed in a converted constant expression",
[e]="pointer-to-member function type %0 can only be called on an %select{rvalue|lvalue}1",
[d]="conversion from A to B is not allowed in a converted constant expression",
[i]={{nil,nil,{"pointer-to-member function type A can only be called on an ",{"rvalue","lvalue"}}}},
[e]=k,
[j]=k,
[g]="conversion from (.*?) to (.*?) is not allowed in a converted constant expression",
[c]="pointer\\-to\\-member function type (.*?) can only be called on an (?:rvalue|lvalue)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"f8379a0fc359",1326930952,"constexpr: converted constant expression handling for enumerator values, case","constexpr: converted constant expression handling for enumerator values, case\nvalues and non-type template arguments of integral and enumeration types.\n\nThis change causes some legal C++98 code to no longer compile in C++11 mode, by\nenforcing the C++11 rule that narrowing integral conversions are not permitted\nin the final implicit conversion sequence for the above cases.\n\nllvm-svn: 148439"},
[f]={"1d042091d39c",1296060018,"Reference qualifiers for *this: implement C++0x [expr.mptr.oper]p6,","Reference qualifiers for *this: implement C++0x [expr.mptr.oper]p6,\nthe restrictions on .* and ->* for ref-qualified pointer-to-member\nfunctions.\n\nllvm-svn: 124294"},
[j]={{vb,5871,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n  // ...\n  // Check that we would only use permitted conversions.\n  if (!CheckConvertedConstantConversions(S, *SCS)) {\n    return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression_disallowed) << From->getType() << From->getSourceRange() << T;"}},
[b]={{N,6094,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  // C++0x [expr.mptr.oper]p6:\n  //  In a .* expression whose object expression is an rvalue, the program is\n  //  ill-formed if the second operand is a pointer to member function with\n //  ref-qualifier &. In a ->* expression or in a .* expression whose object\n  //   expression is an lvalue, the program is ill-formed if the second operand\n  //  is a pointer to member function with ref-qualifier &&.\n  if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) {\n   // ...\n    case RQ_LValue:\n      if (!isIndirect && !LHS.get()->Classify(Context).isLValue()) {\n        // C++2a allows functions with ref-qualifier & if their cv-qualifier-seq\n        // is (exactly) \'const\'.\n        if (Proto->isConst() && !Proto->isVolatile())\n        // ...\n        else\n          Diag(Loc, diag::err_pointer_to_member_oper_value_classify) << RHSType << 1 << LHS.get()->getSourceRange();"},{N,6101,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  // C++0x [expr.mptr.oper]p6:\n  //  In a .* expression whose object expression is an rvalue, the program is\n  //  ill-formed if the second operand is a pointer to member function with\n  //  ref-qualifier &. In a ->* expression or in a .* expression whose object\n  //  expression is an lvalue, the program is ill-formed if the second operand\n  //  is a pointer to member function with ref-qualifier &&.\n  if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) {\n    // ...\n    case RQ_RValue:\n      if (isIndirect || !LHS.get()->Classify(Context).isRValue())\n        Diag(Loc, diag::err_pointer_to_member_oper_value_classify) << RHSType << 0 << LHS.get()->getSourceRange();"}},
[l]={
[l]={
["clang/test/Misc/explicit.cpp"]={"clang/test/Misc/explicit.cpp:5:13: error: conversion from \'void *\' to \'bool\' is not allowed in a converted constant expression"}
["clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp"]={"clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp:14:7: error: pointer-to-member function type \'void (X::*)() &\' can only be called on an lvalue","clang/test/SemaCXX/cxx2a-pointer-to-const-ref-member.cpp:16:7: error: pointer-to-member function type \'void (X::*)() const volatile &\' can only be called on an lvalue"}
}
}
},
},
["err_typecheck_converted_constant_expression_indirect"]={
["err_pointer_to_member_type"]={
[b]="err_typecheck_converted_constant_expression_indirect",
[d]="err_pointer_to_member_type",
[c]="conversion from %0 to %1 in converted constant expression would bind reference to a temporary",
[e]="invalid use of pointer to member type after %select{.*|->*}0",
[d]="conversion from A to B in converted constant expression would bind reference to a temporary",
[i]={{nil,nil,{"invalid use of pointer to member type after ",{".*","->*"}}}},
[e]=k,
[j]=k,
[g]="conversion from (.*?) to (.*?) in converted constant expression would bind reference to a temporary",
[c]="invalid use of pointer to member type after (?:\\.\\*|\\-\\>\\*)",
[h]=a,
[h]=a,
[i]=m,
[g]=m,
[f]={"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"},
[f]={"9a14b84ac559",1256331699,"Diagnose misuse of \'.*\' and \'->*\' operators during parse","Diagnose misuse of \'.*\' and \'->*\' operators during parse\ninstead of crashing in code gen.\n\nllvm-svn: 84968"},
[j]={{vb,5877,"/// BuildConvertedConstantExpression - Check that the expression From is a\n/// converted constant expression of type T, perform the conversion but\n/// does not evaluate the expression\nstatic ExprResult BuildConvertedConstantExpression(Sema &S, Expr *From, QualType T, Sema::CCEKind CCE, NamedDecl *Dest, APValue &PreNarrowingValue) {\n  // ...\n  // [...] and where the reference binding (if any) binds directly.\n  if (SCS->ReferenceBinding && !SCS->DirectBinding) {\n    return S.Diag(From->getBeginLoc(), diag::err_typecheck_converted_constant_expression_indirect) << From->getType() << From->getSourceRange() << T;"}},
[b]={{N,6061,"QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK, SourceLocation Loc, bool isIndirect) {\n  // ...\n  if (isa<CXXScalarValueInitExpr>(RHS.get()->IgnoreParens())) {\n    // ...\n    Diag(Loc, diag::err_pointer_to_member_type) << isIndirect;"}},
[l]={
[l]={
["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:231:5: error: conversion from \'int\' to \'const int &\' in converted constant expression would bind reference to a temporary"}
["clang/test/SemaCXX/cxx-member-pointer-op.cpp"]={"clang/test/SemaCXX/cxx-member-pointer-op.cpp:11:4: error: invalid use of pointer to member type after ->*","clang/test/SemaCXX/cxx-member-pointer-op.cpp:13:5: error: invalid use of pointer to member type after .*","clang/test/SemaCXX/cxx-member-pointer-op.cpp:14:4: error: invalid use of pointer to member type after ->*","clang/test/SemaCXX/cxx-member-pointer-op.cpp:15:5: error: invalid use of pointer to member type after .*"}
}
}
},
},
["err_typecheck_decl_incomplete_type"]={
["err_postfix_after_unary_requires_parens"]={
[b]="err_typecheck_decl_incomplete_type",
[d]={{nil,p,"err_postfix_after_unary_requires_parens"}},
[c]="variable has incomplete type %0",
[e]={{nil,p,"expression cannot be followed by a postfix %0 operator; add parentheses"}},
[d]="variable has incomplete type A",
[i]={{nil,p,"expression cannot be followed by a postfix A operator; add parentheses"}},
[e]=k,
[j]=k,
[g]="variable has incomplete type (.*?)",
[c]="expression cannot be followed by a postfix (.*?) operator; add parentheses",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,p,K}},
[f]={p,1237025389,q,r},
[f]={"4d1b7e9820ee",1593465134,"Fix a few cases that were incorrectly parsed as unary-expressions","Fix a few cases that were incorrectly parsed as unary-expressions\ninstead of postfix-expressions, and improve error recovery for postfix\noperators after unary-expressions.\n\nThis covers nullptr, __null, and some calls to type traits with special\nparsing rules. We would previously not parse a postfix-expression suffix\nfor these expressions, so would reject expressions such as\n__is_trivial(int)[\"foo\"].\n\nFor the case where a postfix-expression suffix is *not* permitted after\na unary-expression (for example, after a new-expression or sizeof\nexpression), produce a diagnostic if one appears there anyway. That\'s\nalways ill-formed, but previously produced very bad diagnostics."},
[j]={{w,16640,"/// CheckParmsForFunctionDef - Check that the parameters of the given\n/// function are appropriate for the definition of a function. This\n/// takes care of any checks that cannot be performed on the\n/// declaration itself, e.g., that the types of each of the function\n/// parameters are complete.\nbool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters, bool CheckParameterNames) {\n  // ...\n  for (ParmVarDecl *Param : Parameters) {\n    // ...\n    if (!Param->isInvalidDecl() && (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type) || RequireNonAbstractType(Param->getBeginLoc(), Param->getOriginalType(), diag::err_abstract_type_in_decl, AbstractParamType))) {"},{t,8734,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n if (T->isVoidType()) {\n    // C++98 [dcl.stc]p5: The extern specifier can be applied only to the names\n    //                    of objects and functions.\n    if (NewVD->isThisDeclarationADefinition() || getLangOpts().CPlusPlus) {\n      Diag(NewVD->getLocation(), diag::err_typecheck_decl_incomplete_type) << T;"},{t,13202,"/// 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->getType()->isDependentType()) {\n    // ...\n    if (RequireCompleteType(VDecl->getLocation(), BaseDeclType, diag::err_typecheck_decl_incomplete_type)) {"},{t,13636,"/// ActOnInitializerError - Given that there was an error parsing an\n/// initializer for the given declaration, try to at least re-establish\n/// invariants such as whether a variable\'s type is either dependent or\n/// complete.\nvoid Sema::ActOnInitializerError(Decl *D) {\n  // ...\n  if (RequireCompleteType(VD->getLocation(), Context.getBaseElementType(Ty), diag::err_typecheck_decl_incomplete_type)) {"},{t,13728,"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 (RequireCompleteType(Var->getLocation(), Var->getType(), diag::err_typecheck_decl_incomplete_type)) {"},{t,13770,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    case VarDecl::DeclarationOnly:\n      // ...\n      if (!Type->isDependentType() && Var->isLocalVarDecl() && !Var->hasLinkage() && !Var->isInvalidDecl() && RequireCompleteType(Var->getLocation(), Type, diag::err_typecheck_decl_incomplete_type))"},{t,13858,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    if (!Var->hasAttr<AliasAttr>()) {\n      if (RequireCompleteType(Var->getLocation(), Context.getBaseElementType(Type), diag::err_typecheck_decl_incomplete_type)) {"},{C,278,"ExprResult Sema::ConvertParamDefaultArgument(ParmVarDecl *Param, Expr *Arg, SourceLocation EqualLoc) {\n  if (RequireCompleteType(Param->getLocation(), Param->getType(), diag::err_typecheck_decl_incomplete_type))"},{n,7741,"ExprResult Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, SourceLocation RParenLoc, Expr *LiteralExpr) {\n  // ...\n  } else if (!literalType->isDependentType() && RequireCompleteType(LParenLoc, literalType, diag::err_typecheck_decl_incomplete_type, SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd())))"}},
[b]={{"clang/lib/Parse/ParseExpr.cpp",1844,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  if (!AllowSuffix) {\n    // ...\n    Diag(Tok.getLocation(), diag::err_postfix_after_unary_requires_parens) << Tok.getKind() << Res.get()->getSourceRange() << FixItHint::CreateInsertion(Res.get()->getBeginLoc(), \"(\") << FixItHint::CreateInsertion(PP.getLocForEndOfToken(PrevTokLocation), \")\");"}},
[l]={
[l]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p10.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p10.cpp:7:8: error: variable has incomplete type \'X<int>\'"}
["clang/test/Parser/expressions.cpp"]={"clang/test/Parser/expressions.cpp:9:17: error: expression cannot be followed by a postfix \'->\' operator; add parentheses","clang/test/Parser/expressions.cpp:12:31: error: expression cannot be followed by a postfix \'(\' operator; add parentheses","clang/test/Parser/expressions.cpp:14:23: error: expression cannot be followed by a postfix \'[\' operator; add parentheses","clang/test/Parser/expressions.cpp:15:24: error: expression cannot be followed by a postfix \'[\' operator; add parentheses","clang/test/Parser/expressions.cpp:16:23: error: expression cannot be followed by a postfix \'[\' operator; add parentheses","clang/test/Parser/expressions.cpp:17:32: error: expression cannot be followed by a postfix \'[\' operator; add parentheses","clang/test/Parser/expressions.cpp:21:19: error: expression cannot be followed by a postfix \'->\' operator; add parentheses"}
}
}
},
},
["err_typecheck_deleted_function"]={
["err_pp_arc_cf_code_audited_syntax"]={
[b]="err_typecheck_deleted_function",
[d]="err_pp_arc_cf_code_audited_syntax",
[c]="conversion function %diff{from $ to $|between types}0,1 invokes a deleted function",
[e]=jb,
[d]={{nil,nil,{"conversion function ",{"from A to B","between types"}," invokes a deleted function"}}},
[i]=jb,
[e]=k,
[j]=k,
[g]="conversion function (?:from (.*?) to (.*?)|between types) invokes a deleted function",
[c]=jb,
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={"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"},
[f]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their","Add explicit attributes to mark functions as having had their\nCoreFoundation object-transfer properties audited, and add a #pragma\nto cause them to be automatically applied to functions in a particular\nspan of code.  This has to be implemented largely in the preprocessor\nbecause of the requirement that the region be entirely contained in\na single file;  that\'s hard to impose from the parser without registering\nfor a ton of callbacks.\n\nllvm-svn: 140846"},
[j]={{pb,9672,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitOverloadFailed:\n  case FK_UserConversionOverloadFailed:\n    // ...\n    case OR_Deleted: {\n      S.Diag(Kind.getLocation(), diag::err_typecheck_deleted_function) << OnlyArg->getType() << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}},
[b]={{T,1881,"/// PragmaARCCFCodeAuditedHandler -\n//\\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n   // ...\n    if (BeginEnd && BeginEnd->isStr(\"begin\")) {\n   // ...\n   } else if (BeginEnd && BeginEnd->isStr(\"end\")) {\n    // ...\n    } else {\n      PP.Diag(Tok.getLocation(), diag::err_pp_arc_cf_code_audited_syntax);"}}
[l]={
["clang/test/SemaCXX/deleted-function.cpp"]={"clang/test/SemaCXX/deleted-function.cpp:34:7: error: conversion function from \'WithDel\' to \'int\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:74:9: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:83:19: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function","clang/test/SemaCXX/deleted-function.cpp:85:19: error: conversion function from \'int\' to \'DelCtor\' invokes a deleted function"}
}
},
},
["err_typecheck_duplicate_vector_components_not_mlvalue"]={
["err_pp_assume_nonnull_syntax"]={
[b]="err_typecheck_duplicate_vector_components_not_mlvalue",
[d]="err_pp_assume_nonnull_syntax",
[c]="vector is not assignable (contains duplicate components)",
[e]=jb,
[d]="vector is not assignable (contains duplicate components)",
[i]=jb,
[e]=k,
[j]=k,
[g]="vector is not assignable \\(contains duplicate components\\)",
[c]=jb,
[h]=a,
[h]=a,
[i]=m,
[g]="Nullability Issue",
[f]={p,1237025389,q,r},
[f]={"2a20bd1a9457",1434738357,"Introduced pragmas for audited nullability regions.","Introduced pragmas for audited nullability regions.\n\nIntroduce the clang pragmas \"assume_nonnull begin\" and \"assume_nonnull\nend\" in which we make default assumptions about the nullability of many\nunannotated pointers:\n\n  - Single-level pointers are inferred to __nonnull\n  - NSError** in a (function or method) parameter list is inferred to\n    NSError * __nullable * __nullable.\n  - CFErrorRef * in a (function or method) parameter list is inferred\n    to CFErrorRef __nullable * __nullable.\n  - Other multi-level pointers are never inferred to anything.\n\nImplements rdar://problem/19191042.\n\nllvm-svn: 240156"},
[j]={{n,14370,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalueIf 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_DuplicateVectorComponents:\n   DiagID = diag::err_typecheck_duplicate_vector_components_not_mlvalue;"}},
[b]={{T,1936,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n   // ...\n    if (BeginEnd && BeginEnd->isStr(\"begin\")) {\n    // ...\n    } else if (BeginEnd && BeginEnd->isStr(\"end\")) {\n   // ...\n   } else {\n     PP.Diag(Tok.getLocation(), diag::err_pp_assume_nonnull_syntax);"}},
[l]={
[l]={
["clang/test/Sema/ext_vector_components.c"]={"clang/test/Sema/ext_vector_components.c:29:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:30:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:31:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:33:13: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:56:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:57:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:58:17: error: vector is not assignable (contains duplicate components)","clang/test/Sema/ext_vector_components.c:60:13: error: vector is not assignable (contains duplicate components)"}
["clang/test/Sema/pragma-arc-cf-code-audited.c"]={"clang/test/Sema/pragma-arc-cf-code-audited.c:3:35: error: expected \'begin\' or \'end\'"}
}
}
},
},
["err_typecheck_expect_flt_or_vector"]={
["err_pp_bad_paste"]={
[b]={{nil,B,"err_typecheck_expect_flt_or_vector"}},
[d]="err_pp_bad_paste",
[c]={{nil,B,"invalid operand of type %0 where floating, complex or a vector of such types is required"}},
[e]="pasting formed \'%0\', an invalid preprocessing token",
[d]={{nil,B,"invalid operand of type A where floating, complex or a vector of such types is required"}},
[i]="pasting formed \'A\', an invalid preprocessing token",
[e]=k,
[j]=k,
[g]="invalid operand of type (.*?) where floating, complex or a vector of such types is required",
[c]="pasting formed \'(.*?)\', an invalid preprocessing token",
[h]=a,
[h]=a,
[i]={{nil,B,m}},
[g]=x,
[f]={"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"},
[f]={t,1236199783,r,s},
[j]={{w,8587,"/// SemaBuiltinArithmeticFence - Handle __arithmetic_fence.\nbool Sema::SemaBuiltinArithmeticFence(CallExpr *TheCall) {\n // ...\n if (!ArgTy->hasFloatingRepresentation())\n   return Diag(TheCall->getEndLoc(), diag::err_typecheck_expect_flt_or_vector) << ArgTy;"}},
[b]={{"clang/lib/Lex/TokenLexer.cpp",870,"/// LHSTok is the LHS of a ## operator, and CurTokenIdx is the ##\n/// operator. Read the ## and RHS, and paste the LHS/RHS together. If there\n/// are more ## after it, chomp them iteratively.  Return the result as LHSTok.\n/// If this returns true, the caller should immediately return the token.\nbool TokenLexer::pasteTokens(Token &LHSTok, ArrayRef<Token> TokenStream, unsigned int &CurIdx) {\n // ...\n  do {\n   // ...\n   if (LHSTok.isAnyIdentifier() && RHS.isAnyIdentifier()) {\n    // ...\n   } else {\n      // ...\n      // If pasting the two tokens didn\'t form a full new token, this is an\n     // error. This occurs with \"x ## +\" and other stuff.  Return with LHSTok\n      // unmodified and with RHS as the next token to lex.\n      if (isInvalid) {\n       // ...\n       // Do not emit the error when preprocessing assembler code.\n        if (!PP.getLangOpts().AsmPreprocessor) {\n         // ...\n          PP.Diag(Loc, PP.getLangOpts().MicrosoftExt ? diag::ext_pp_bad_paste_ms : diag::err_pp_bad_paste) << Buffer;"}},
[l]={
[l]={
["clang/test/Sema/arithmetic-fence-builtin.c"]={"clang/test/Sema/arithmetic-fence-builtin.c:21:27: error: invalid operand of type \'stype\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:32:31: error: invalid operand of type \'int\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:9:31: error: invalid operand of type \'float *\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:9:31: error: invalid operand of type \'int *\' where floating, complex or a vector of such types is required","clang/test/Sema/arithmetic-fence-builtin.c:12:34: error: invalid operand of type \'int\' where floating, complex or a vector of such types is required"}
["clang/test/CXX/lex/lex.pptoken/p3-0x.cpp"]={"clang/test/CXX/lex/lex.pptoken/p3-0x.cpp:11:9: error: pasting formed \':::\', an invalid preprocessing token"}
}
}
},
},
["err_typecheck_expect_int"]={
["err_pp_colon_without_question"]={
[b]="err_typecheck_expect_int",
[d]="err_pp_colon_without_question",
[c]="used type %0 where integer is required",
[e]="\':\' without preceding \'?\'",
[d]="used type A where integer is required",
[i]="\':\' without preceding \'?\'",
[e]=k,
[j]=k,
[g]="used type (.*?) where integer is required",
[c]="\'\\:\' without preceding \'\\?\'",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands","OpenCL: handle shift operator with vector operands\n\nIntroduce a number of checks:\n1. If LHS is a scalar, then RHS cannot be a vector.\n2. Operands must be of integer type.\n3. If both are vectors, then the number of elements must match.\n\nRelax the requirement for \"usual arithmetic conversions\":\nWhen LHS is a vector, a scalar RHS can simply be expanded into a\nvector; OpenCL does not require that its rank be lower than the LHS.\nFor example, the following code is not an error even if the implicit\ntype of the constant literal is \"int\".\n\n  char2 foo(char2 v) { return v << 1; }\n\nConsolidate existing tests under CodeGenOpenCL, and add more tests\nunder SemaOpenCL.\n\nllvm-svn: 228382"},
[f]={t,1236199783,r,s},
[j]={{w,316,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n // ...\n if (!IsValidIntegerType(AlignOp->getType())) {\n    S.Diag(AlignOp->getExprLoc(), diag::err_typecheck_expect_int) << AlignOp->getType();"},{w,4441,"bool Sema::CheckAMDGCNBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n if (!ArgExpr->EvaluateAsInt(ArgResult, Context))\n    return Diag(ArgExpr->getExprLoc(), diag::err_typecheck_expect_int) << ArgExpr->getType();"},{n,12117,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n  // The operands need to be integers.\n if (!LHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{n,12139,"/// Return the resulting type when a vector is shifted\n///       by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // ...\n  if (!RHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"},{n,12204,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // ...\n  if (!LHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << LHS.get()->getType() << LHS.get()->getSourceRange();"},{n,12212,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n // ...\n if (!RHSEleType->isIntegerType()) {\n    S.Diag(Loc, diag::err_typecheck_expect_int) << RHS.get()->getType() << RHS.get()->getSourceRange();"}},
[b]={{R,851,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrecThis returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not usedAs such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  // ...\n  while (true) {\n    // ...\n    case tok::colon:\n     // ...\n     PP.Diag(OpLoc, diag::err_pp_colon_without_question) << LHS.getRange() << RHS.getRange();"}}
[l]={
["clang/test/Sema/ext_vector_ops.c"]={"clang/test/Sema/ext_vector_ops.c:129:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:130:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:131:13: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:132:13: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:133:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:134:15: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:135:13: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:136:13: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:146:8: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:147:8: error: used type \'v2f\' (vector of 2 \'float\' values) where integer is required","clang/test/Sema/ext_vector_ops.c:157:6: error: used type \'float\' where integer is required","clang/test/Sema/ext_vector_ops.c:158:6: error: used type \'float\' where integer is required"}
}
},
},
["err_typecheck_expect_scalar_operand"]={
["err_pp_directive_required"]={
[b]="err_typecheck_expect_scalar_operand",
[d]="err_pp_directive_required",
[c]="operand of type %0 where arithmetic or pointer type is required",
[e]="%0 must be used within a preprocessing directive",
[d]="operand of type A where arithmetic or pointer type is required",
[i]="A must be used within a preprocessing directive",
[e]=k,
[j]=k,
[g]="operand of type (.*?) where arithmetic or pointer type is required",
[c]="(.*?) must be used within a preprocessing directive",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={"6ce0000dd528",1358364741,"No longer crashing with an assert when __has_include or __has_include_next is used outside of a prep...","No longer crashing with an assert when __has_include or __has_include_next is used outside of a preprocessor directive.  This fixes PR14837.\n\nllvm-svn: 172639"},
[j]={{Mb,3059,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  // Require the operand to be a scalar, a vector, or a matrix.\n if (!SrcType->isScalarType() && !SrcType->isVectorType() && !SrcType->isMatrixType()) {\n    Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcType << SrcExpr.get()->getSourceRange();"},{w,309,"/// Check that the value argument for __builtin_is_aligned(value, alignment) and\n/// __builtin_aligned_{up,down}(value, alignment) is an integer or a pointer\n/// type (but not a function pointer) and that the alignment is a power-of-two.\nstatic bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) {\n  // ...\n  if ((!SrcTy->isPointerType() && !IsValidIntegerType(SrcTy)) || SrcTy->isFunctionPointerType()) {\n    // ...\n    S.Diag(Source->getExprLoc(), diag::err_typecheck_expect_scalar_operand) << SrcTy;"}},
[b]={{S,1192,"/// EvaluateHasIncludeCommon - Process a \'__has_include(\"path\")\'\n/// or \'__has_include_next(\"path\")\' expression.\n/// Returns true if successful.\nstatic bool EvaluateHasIncludeCommon(Token &Tok, IdentifierInfo *II, Preprocessor &PP, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  // These expressions are only allowed within a preprocessor directive.\n  if (!PP.isParsingIfOrElifDirective()) {\n    PP.Diag(LParenLoc, diag::err_pp_directive_required) << II;"}},
[l]={
[l]={
["clang/test/Parser/check_cast.c"]={"clang/test/Parser/check_cast.c:11:12: error: operand of type \'struct foo\' where arithmetic or pointer type is required"}
["clang/test/Preprocessor/has_include.c"]={"clang/test/Preprocessor/has_include.c:96:3: error: \'__has_include_next\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:97:3: error: \'__has_include\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:100:1: error: \'__has_include\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:103:1: error: \'__has_include\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:108:1: error: \'__has_include\' must be used within a preprocessing directive","clang/test/Preprocessor/has_include.c:152:1: error: \'__has_include\' must be used within a preprocessing directive"}
}
}
},
},
["err_typecheck_expression_not_modifiable_lvalue"]={
["err_pp_division_by_zero"]={
[b]="err_typecheck_expression_not_modifiable_lvalue",
[d]="err_pp_division_by_zero",
[c]="expression is not assignable",
[e]="division by zero in preprocessor expression",
[d]="expression is not assignable",
[i]="division by zero in preprocessor expression",
[e]=k,
[j]=k,
[g]="expression is not assignable",
[c]="division by zero in preprocessor expression",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{n,14363,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalue.  If not,\n/// emit an error and return trueIf so, return false.\nstatic bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) {\n  // ...\n  case Expr::MLV_InvalidExpression:\n  case Expr::MLV_MemberFunction:\n  case Expr::MLV_ClassTemporary:\n    DiagID = diag::err_typecheck_expression_not_modifiable_lvalue;"}}
[b]={{R,721,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrecThis returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  // ...\n  while (true) {\n    // ...\n    case tok::slash:\n      if (RHS.Val != 0) {\n     // ...\n     } else if (ValueLive) {\n       PP.Diag(OpLoc, diag::err_pp_division_by_zero) << LHS.getRange() << RHS.getRange();"}},
},
["err_typecheck_field_variable_size"]={
[b]="err_typecheck_field_variable_size",
[c]="fields must have a constant size: \'variable length array in structure\' extension will never be supported",
[d]="fields must have a constant size: \'variable length array in structure\' extension will never be supported",
[e]=k,
[g]="fields must have a constant size\\: \'variable length array in structure\' extension will never be supported",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{t,18160,"/// 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  // C99 6.7.2.1p8: A member of a structure or union may have any type other\n // than a variably modified type.\n if (!InvalidDecl && T->isVariablyModifiedType()) {\n   if (!tryToFixVariablyModifiedVarType(TInfo, T, Loc, diag::err_typecheck_field_variable_size))"}},
[l]={
[l]={
["clang/test/Sema/vla.c"]={"clang/test/Sema/vla.c:17:28: error: fields must have a constant size: \'variable length array in structure\' extension will never be supported","clang/test/Sema/vla.c:74:7: error: fields must have a constant size: \'variable length array in structure\' extension will never be supported"}
["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:52:5: error: division by zero in preprocessor expression"}
}
}
},
},
["err_typecheck_illegal_increment_decrement"]={
["err_pp_double_begin_of_arc_cf_code_audited"]={
[b]="err_typecheck_illegal_increment_decrement",
[d]="err_pp_double_begin_of_arc_cf_code_audited",
[c]="cannot %select{decrement|increment}1 value of type %0",
[e]="already inside \'#pragma clang arc_cf_code_audited\'",
[d]={{nil,nil,{"cannot ",{"decrement","increment"}," value of type A"}}},
[i]="already inside \'#pragma clang arc_cf_code_audited\'",
[e]=k,
[j]=k,
[g]="cannot (?:decrement|increment) value of type (.*?)",
[c]="already inside \'\\#pragma clang arc_cf_code_audited\'",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their","Add explicit attributes to mark functions as having had their\nCoreFoundation object-transfer properties audited, and add a #pragma\nto cause them to be automatically applied to functions in a particular\nspan of codeThis has to be implemented largely in the preprocessor\nbecause of the requirement that the region be entirely contained in\na single file; that\'s hard to impose from the parser without registering\nfor a ton of callbacks.\n\nllvm-svn: 140846"},
[j]={{n,14751,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n  // ...\n  if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n // ...\n  } else if (S.getLangOpts().CPlusPlus && ResType->isEnumeralType()) {\n // ...\n  } else if (ResType->isRealType()) {\n  // ...\n } else if (ResType->isPointerType()) {\n  // ...\n  } else if (ResType->isObjCObjectPointerType()) {\n // ...\n  } else if (ResType->isAnyComplexType()) {\// ...\n  } else if (ResType->isPlaceholderType()) {\n  // ...\n  } else if (S.getLangOpts().AltiVec && ResType->isVectorType()) {\n // ...\n } else if (S.getLangOpts().ZVector && ResType->isVectorType() && (ResType->castAs<VectorType>()->getVectorKind() != VectorType::AltiVecBool)) {\n // ...\n } else if (S.getLangOpts().OpenCL && ResType->isVectorType() && ResType->castAs<VectorType>()->getElementType()->isIntegerType()) {\n // ...\n  } else {\n    S.Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement) << ResType << int(IsInc) << Op->getSourceRange();"}},
[b]={{T,1899,"/// PragmaARCCFCodeAuditedHandler -\n//\\#pragma clang arc_cf_code_audited begin/end\nstruct PragmaARCCFCodeAuditedHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n   // ...\n   if (IsBegin) {\n     // Complain about attempts to re-enter an audit.\n     if (BeginLoc.isValid()) {\n       PP.Diag(Loc, diag::err_pp_double_begin_of_arc_cf_code_audited);"}},
[l]={
[l]={
["clang/test/SemaCXX/overloaded-builtin-operators-cxx17.cpp"]={"clang/test/SemaCXX/overloaded-builtin-operators-cxx17.cpp:9:14: error: cannot increment value of type \'BoolRef\'"}
["clang/test/Sema/pragma-arc-cf-code-audited.c"]={"clang/test/Sema/pragma-arc-cf-code-audited.c:11:15: error: already inside \'#pragma clang arc_cf_code_audited\'"}
}
}
},
},
["err_typecheck_incompatible_address_space"]={
["err_pp_double_begin_of_assume_nonnull"]={
[b]="err_typecheck_incompatible_address_space",
[d]="err_pp_double_begin_of_assume_nonnull",
[c]="%select{%diff{assigning $ to $|assigning to different types}1,0|%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 changes address space of pointer",
[e]="already inside \'#pragma clang assume_nonnull\'",
[d]={{nil,nil,{{{{"assigning B to A",gb}},{{fb,eb}},{{cb,bb}},{{ab,Y}},{{db,ib}},{{jb,kb}},{{X,lb}}}," changes address space of pointer"}}},
[i]="already inside \'#pragma clang assume_nonnull\'",
[e]=k,
[j]=k,
[g]="(?:(?:assigning (.*?) to (.*?)|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)) changes address space of pointer",
[c]="already inside \'\\#pragma clang assume_nonnull\'",
[h]=a,
[h]=a,
[i]=m,
[g]="Nullability Issue",
[f]={"4fff8f6cff1c",1296519029,"Perform the bad-address-space conversions check as part of ","Perform the bad-address-space conversions check as part of \nCheckPointerTypesForAssignment.\n\nllvm-svn: 124632"},
[f]={"2a20bd1a9457",1434738357,"Introduced pragmas for audited nullability regions.","Introduced pragmas for audited nullability regions.\n\nIntroduce the clang pragmas \"assume_nonnull begin\" and \"assume_nonnull\nend\" in which we make default assumptions about the nullability of many\nunannotated pointers:\n\n  - Single-level pointers are inferred to __nonnull\n  - NSError** in a (function or method) parameter list is inferred to\n   NSError * __nullable * __nullable.\n  - CFErrorRef * in a (function or method) parameter list is inferred\n   to CFErrorRef __nullable * __nullable.\n  - Other multi-level pointers are never inferred to anything.\n\nImplements rdar://problem/19191042.\n\nllvm-svn: 240156"},
[j]={{Mb,2655,"void CastOperation::checkAddressSpaceCast(QualType SrcType, QualType DestType) {\n // ...\n  // Converting the top level pointee addrspace is permitted for compatible\n  // addrspaces (such as \'generic int *\' to \'local int *\' or vice versa), but\n // if any of the nested pointee addrspaces differ, we emit a warning\n  // regardless of addrspace compatibility. This makes\n  //  local int ** p;\n //  return (generic int **) p;\n  // warn even though local -> generic is permitted.\n if (Self.getLangOpts().OpenCL) {\n    // ...\n   unsigned DiagID = diag::err_typecheck_incompatible_address_space;"},{n,17607,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatiblePointerDiscardsQualifiers: {\n    // ...\n    if (lhq.getAddressSpace() != rhq.getAddressSpace()) {\n     DiagKind = diag::err_typecheck_incompatible_address_space;"}},
[b]={{T,1955,"/// PragmaAssumeNonNullHandler -\n///  \\#pragma clang assume_nonnull begin/end\nstruct PragmaAssumeNonNullHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override {\n    // ...\n    if (IsBegin) {\n      // Complain about attempts to re-enter an audit.\n      if (BeginLoc.isValid()) {\n       PP.Diag(Loc, diag::err_pp_double_begin_of_assume_nonnull);"}},
[l]={
[l]={
["clang/test/SemaSYCL/address-space-conversions.cpp"]={"clang/test/SemaSYCL/address-space-conversions.cpp:20:10: error: assigning \'__private int *\' to \'__global int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:21:10: error: assigning \'__local int *\' to \'__global int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:72:15: error: assigning \'__global int *\' to \'__global_host int *\' changes address space of pointer","clang/test/SemaSYCL/address-space-conversions.cpp:78:17: error: assigning \'__global int *\' to \'__global_device int *\' changes address space of pointer"}
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-2.h:8:15: error: already inside \'#pragma clang assume_nonnull\'"}
}
}
},
},
["err_typecheck_incompatible_nested_address_space"]={
["err_pp_double_begin_pragma_unsafe_buffer_usage"]={
[b]={{nil,I,"err_typecheck_incompatible_nested_address_space"}},
[d]="err_pp_double_begin_pragma_unsafe_buffer_usage",
[c]={{nil,I,"%select{%diff{assigning $ to $|assigning to different types}1,0|%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 changes address space of nested pointer"}},
[e]="already inside \'#pragma unsafe_buffer_usage\'",
[d]={{nil,I,{{{{"assigning B to A",gb}},{{fb,eb}},{{cb,bb}},{{ab,Y}},{{db,ib}},{{jb,kb}},{{X,lb}}}," changes address space of nested pointer"}}},
[i]="already inside \'#pragma unsafe_buffer_usage\'",
[e]=k,
[j]=k,
[g]="(?:(?:assigning (.*?) to (.*?)|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)) changes address space of nested pointer",
[c]="already inside \'\\#pragma unsafe_buffer_usage\'",
[h]=a,
[h]=a,
[i]={{nil,I,m}},
[g]=x,
[f]={"5b6dda33d122",1557325429,"[Sema][OpenCL] Make address space conversions a bit stricter.","[Sema][OpenCL] Make address space conversions a bit stricter.\n\nThe semantics for converting nested pointers between address\nspaces are not very well defined. Some conversions which do not\nreally carry any meaning only produce warnings, and in some cases\nwarnings hide invalid conversions, such as \'global int*\' to\n\'local float*\'!\n\nThis patch changes the logic in checkPointerTypesForAssignment\nand checkAddressSpaceCast to fail properly on implicit conversions\nthat should definitely not be permitted. We also dig deeper into the\npointer types and warn on explicit conversions where the address\nspace in a nested pointer changes, regardless of whether the address\nspace is compatible with the corresponding pointer nesting level\non the destination type.\n\nFixes PR39674!\n\nPatch by ebevhan (Bevin Hansson)!\n\nDifferential Revision: https://reviews.llvm.org/D58236\n\nllvm-svn: 360258"},
[f]={"95f50964fbf5",1625925174,"Implement P2361 Unevaluated string literals","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"},
[j]={{n,17648,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n // ...\n case IncompatibleNestedPointerAddressSpaceMismatch:\n   DiagKind = diag::err_typecheck_incompatible_nested_address_space;"}},
[b]={{T,1266,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n   // ...\n   if (II->isStr(\"begin\")) {\n      if (PP.enterOrExitSafeBufferOptOutRegion(true, Loc))\n       PP.Diag(Loc, diag::err_pp_double_begin_pragma_unsafe_buffer_usage);"}},
[l]={
[l]={
["clang/test/SemaOpenCL/address-spaces.cl"]={"clang/test/SemaOpenCL/address-spaces.cl:196:8: error: assigning \'__local int *__private *__private\' to \'__global int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:207:8: error: assigning \'__global int *__private *__private\' to \'__local int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:209:8: error: assigning \'__global float *__private *__private\' to \'__local int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:215:10: error: assigning \'__local int *__private *__private\' to \'__global float *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:222:8: error: assigning \'__private l_t *__private\' (aka \'__local int *__private *__private\') to \'__global int *__private *\' changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:223:8: error: assigning \'__global int *__private *__private\' to \'__private l_t *\' (aka \'__local int *__private *\') changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:226:8: error: assigning \'__private l_t *__private\' (aka \'__local int *__private *__private\') to \'__private g_t *\' (aka \'__global int *__private *\') changes address space of nested pointer","clang/test/SemaOpenCL/address-spaces.cl:227:8: error: assigning \'__private g_t *__private\' (aka \'__global int *__private *__private\') to \'__private l_t *\' (aka \'__local int *__private *\') changes address space of nested pointer"}
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:7:35: error: already inside \'#pragma unsafe_buffer_usage\'"}
}
}
},
},
["err_typecheck_incompatible_ownership"]={
["err_pp_duplicate_name_in_arg_list"]={
[b]="err_typecheck_incompatible_ownership",
[d]="err_pp_duplicate_name_in_arg_list",
[c]="%select{%diff{assigning $ to $|assigning to different types}1,0|%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 changes retain/release properties of pointer",
[e]="duplicate macro parameter name %0",
[d]={{nil,nil,{{{{"assigning B to A",gb}},{{fb,eb}},{{cb,bb}},{{ab,Y}},{{db,ib}},{{jb,kb}},{{X,lb}}}," changes retain/release properties of pointer"}}},
[i]="duplicate macro parameter name A",
[e]=k,
[j]=k,
[g]="(?:(?:assigning (.*?) to (.*?)|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)) changes retain\\/release properties of pointer",
[c]="duplicate macro parameter name (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet...","Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifetime\'.\n\nrdar://9477613.\n\nllvm-svn: 133779"},
[f]={t,1236199783,r,s},
[j]={{Mb,3206,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n // ...\n  // ARC imposes extra restrictions on casts.\n if (Self.getLangOpts().allowsNonTrivialObjCLifetimeQualifiers()) {\n   // ...\n    if (Self.getLangOpts().ObjCAutoRefCount && CastPtr) {\n      if (const PointerType *ExprPtr = SrcType->getAs<PointerType>()) {\n       // ...\n        if (CastPtr->getPointeeType()->isObjCLifetimeType() && ExprPtr->getPointeeType()->isObjCLifetimeType() && !CastQuals.compatiblyIncludesObjCLifetime(ExprQuals)) {\n          Self.Diag(SrcExpr.get()->getBeginLoc(), diag::err_typecheck_incompatible_ownership) << SrcType << DestType << Sema::AA_Casting << SrcExpr.get()->getSourceRange();"},{n,17628,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  // ...\n  case IncompatiblePointerDiscardsQualifiers: {\n    // ...\n    if (lhq.getAddressSpace() != rhq.getAddressSpace()) {\n   // ...\n   } else if (lhq.getObjCLifetime() != rhq.getObjCLifetime()) {\n      DiagKind = diag::err_typecheck_incompatible_ownership;"}},
[b]={{I,2714,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been readLex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    default:\n     // ...\n     // If this is already used as a parameter, it is used multiple times (e.g.\n      // #define X(A,A.\n      if (llvm::is_contained(Parameters, II)) { // C99 6.10.3p6\n        Diag(Tok, diag::err_pp_duplicate_name_in_arg_list) << II;"}}
[l]={
["clang/test/SemaObjC/mrc-weak.m"]={"clang/test/SemaObjC/mrc-weak.m:53:7: error: initializing \'id *\' with an expression of type \'__weak id *\' changes retain/release properties of pointer","clang/test/SemaObjC/mrc-weak.m:54:14: error: initializing \'__weak id *\' with an expression of type \'id *\' changes retain/release properties of pointer","clang/test/SemaObjC/mrc-weak.m:65:27: error: initializing \'id *\' with an expression of type \'__weak id *\' changes retain/release properties of pointer"}
}
},
},
["err_typecheck_incomplete_array_needs_initializer"]={
["err_pp_empty_filename"]={
[b]="err_typecheck_incomplete_array_needs_initializer",
[d]="err_pp_empty_filename",
[c]="definition of variable with array type needs an explicit size or an initializer",
[e]="empty filename",
[d]="definition of variable with array type needs an explicit size or an initializer",
[i]="empty filename",
[e]=k,
[j]=k,
[g]="definition of variable with array type needs an explicit size or an initializer",
[c]="empty filename",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={"1060067dd11a",1257450467,"Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401","Don\'t allow definitions of array variables without some size information in C++. Fixed PR5401\n\nllvm-svn: 86165"},
[f]={t,1236199783,r,s},
[j]={{t,13834,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n // ...\n if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n   // ...\n   // Provide a specific diagnostic for uninitialized variable\n   // definitions with incomplete array type.\n    if (Type->isIncompleteArrayType()) {\n     if (Var->isConstexpr())\n      // ...\n     else\n       Diag(Var->getLocation(), diag::err_typecheck_incomplete_array_needs_initializer);"}},
[b]={{I,1798,"/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully\n/// checked and spelled filename, e.g. as an operand of \\#include. This returns\n/// true if the input filename was in <>\'s or false if it were in \"\"\'s.  The\n/// caller is expected to provide a buffer that is large enough to hold the\n/// spelling of the filename, but is also expected to handle the case when\n/// this method decides to use a different buffer.\nbool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer) {\n // ...\n // Diagnose #include \"\" as invalid.\n if (Buffer.size() <= 2) {\n    Diag(Loc, diag::err_pp_empty_filename);"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p1.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p1.cpp:23:5: error: definition of variable with array type needs an explicit size or an initializer"}
["clang/test/Preprocessor/include-directive2.c"]={"clang/test/Preprocessor/include-directive2.c:17:10: error: empty filename"}
}
}
},
},
["err_typecheck_incomplete_tag"]={
["err_pp_endif_without_if"]={
[b]="err_typecheck_incomplete_tag",
[d]="err_pp_endif_without_if",
[c]="incomplete definition of type %0",
[e]="#endif without #if",
[d]="incomplete definition of type A",
[i]="#endif without #if",
[e]=k,
[j]=k,
[g]="incomplete definition of type (.*?)",
[c]="\\#endif without \\#if",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{hb,655,"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  if (!SemaRef.isThisOutsideMemberFunctionBody(QualType(RTy, 0)) && SemaRef.RequireCompleteType(OpLoc, QualType(RTy, 0), diag::err_typecheck_incomplete_tag, BaseRange))"},{hb,675,"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  if (SS.isSet()) {\n    // ...\n    if (SemaRef.RequireCompleteDeclContext(SS, DC)) {\n      SemaRef.Diag(SS.getRange().getEnd(), diag::err_typecheck_incomplete_tag) << SS.getRange() << DC;"},{hb,1361,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n/// * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    // ...\n    if (S.RequireCompleteType(OpLoc, BaseType, diag::err_typecheck_incomplete_tag, BaseExpr.get()))"},{vb,15242,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  // ...\n  if (RequireCompleteType(Loc, Base->getType(), diag::err_typecheck_incomplete_tag, Base))"}},
[b]={{I,3383,"/// HandleEndifDirective - Implements the \\#endif directive.\n///\nvoid Preprocessor::HandleEndifDirective(Token &EndifToken) {\n  // ...\n  if (CurPPLexer->popConditionalLevel(CondInfo)) {\n    // ...\n    Diag(EndifToken, diag::err_pp_endif_without_if);"}},
[l]={
[l]={
["clang/test/Parser/recovery.c"]={"clang/test/Parser/recovery.c:70:36: error: incomplete definition of type \'struct forward\'"}
["clang/test/Parser/diag-crash.c"]={"clang/test/Parser/diag-crash.c:6:2: error: #endif without #if"}
}
}
},
},
["err_typecheck_incomplete_type_not_modifiable_lvalue"]={
["err_pp_eof_in_arc_cf_code_audited"]={
[b]="err_typecheck_incomplete_type_not_modifiable_lvalue",
[d]="err_pp_eof_in_arc_cf_code_audited",
[c]="incomplete type %0 is not assignable",
[e]="\'#pragma clang arc_cf_code_audited\' was not ended within this file",
[d]="incomplete type A is not assignable",
[i]="\'#pragma clang arc_cf_code_audited\' was not ended within this file",
[e]=k,
[j]=k,
[g]="incomplete type (.*?) is not assignable",
[c]="\'\\#pragma clang arc_cf_code_audited\' was not ended within this file",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their","Add explicit attributes to mark functions as having had their\nCoreFoundation object-transfer properties audited, and add a #pragma\nto cause them to be automatically applied to functions in a particular\nspan of code.  This has to be implemented largely in the preprocessor\nbecause of the requirement that the region be entirely contained in\na single file;  that\'s hard to impose from the parser without registering\nfor a ton of callbacks.\n\nllvm-svn: 140846"},
[j]={{n,14365,"/// CheckForModifiableLvalue - Verify that E is a modifiable lvalueIf 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_IncompleteType:\n  case Expr::MLV_IncompleteVoidType:\n   return S.RequireCompleteType(Loc, E->getType(), diag::err_typecheck_incomplete_type_not_modifiable_lvalue, E);"}},
[b]={{"clang/lib/Lex/PPLexerChange.cpp",418,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current fileThis either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  // Complain about reaching a true EOF within arc_cf_code_audited.\n  // We don\'t want to complain about reaching the end of a macro\n  // instantiation or a _Pragma.\n if (PragmaARCCFCodeAuditedInfo.second.isValid() && !isEndOfMacro && !(CurLexer && CurLexer->Is_PragmaLexer)) {\n    Diag(PragmaARCCFCodeAuditedInfo.second, diag::err_pp_eof_in_arc_cf_code_audited);"}},
[l]={
[l]={
["clang/test/Sema/conditional-expr.c"]={"clang/test/Sema/conditional-expr.c:5:41: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:7:44: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:9:41: error: incomplete type \'void\' is not assignable","clang/test/Sema/conditional-expr.c:13:17: error: incomplete type \'void\' is not assignable"}
["clang/test/Sema/pragma-arc-cf-code-audited.c"]={"clang/test/Sema/Inputs/pragma-arc-cf-code-audited.h:16:15: error: \'#pragma clang arc_cf_code_audited\' was not ended within this file","clang/test/Sema/pragma-arc-cf-code-audited.c:18:15: error: \'#pragma clang arc_cf_code_audited\' was not ended within this file"}
}
}
},
},
["err_typecheck_indirection_requires_pointer"]={
["err_pp_eof_in_assume_nonnull"]={
[b]="err_typecheck_indirection_requires_pointer",
[d]="err_pp_eof_in_assume_nonnull",
[c]="indirection requires pointer operand (%0 invalid)",
[e]="\'#pragma clang assume_nonnull\' was not ended within this file",
[d]="indirection requires pointer operand (A invalid)",
[i]="\'#pragma clang assume_nonnull\' was not ended within this file",
[e]=k,
[j]=k,
[g]="indirection requires pointer operand \\((.*?) invalid\\)",
[c]="\'\\#pragma clang assume_nonnull\' was not ended within this file",
[h]=a,
[h]=a,
[i]=m,
[g]="Nullability Issue",
[f]={p,1237025389,q,r},
[f]={"2a20bd1a9457",1434738357,"Introduced pragmas for audited nullability regions.","Introduced pragmas for audited nullability regions.\n\nIntroduce the clang pragmas \"assume_nonnull begin\" and \"assume_nonnull\nend\" in which we make default assumptions about the nullability of many\nunannotated pointers:\n\n  - Single-level pointers are inferred to __nonnull\n  - NSError** in a (function or method) parameter list is inferred to\n    NSError * __nullable * __nullable.\n  - CFErrorRef * in a (function or method) parameter list is inferred\n    to CFErrorRef __nullable * __nullable.\n  - Other multi-level pointers are never inferred to anything.\n\nImplements rdar://problem/19191042.\n\nllvm-svn: 240156"},
[j]={{n,15152,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n  // ...\n  if (Result.isNull()) {\n    S.Diag(OpLoc, diag::err_typecheck_indirection_requires_pointer) << OpTy << Op->getSourceRange();"}},
[b]={{"clang/lib/Lex/PPLexerChange.cpp",435,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // ...\n  // Complain about reaching a true EOF within assume_nonnull.\n  // We don\'t want to complain about reaching the end of a macro\n  // instantiation or a _Pragma.\n  if (PragmaAssumeNonNullLoc.isValid() && !isEndOfMacro && !(CurLexer && CurLexer->Is_PragmaLexer)) {\n    // If we\'re at the end of generating a preamble, we should record the\n    // unterminated \\#pragma clang assume_nonnull so we can restore it later\n    // when the preamble is loaded into the main file.\n    if (isRecordingPreamble() && isInPrimaryFile())\n    // ...\n    else\n      Diag(PragmaAssumeNonNullLoc, diag::err_pp_eof_in_assume_nonnull);"}},
[l]={
[l]={
["clang/test/SemaTemplate/instantiate-case.cpp"]={"clang/test/SemaTemplate/instantiate-case.cpp:6:12: error: indirection requires pointer operand (\'int\' invalid)"}
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-2.h:11:15: error: \'#pragma clang assume_nonnull\' was not ended within this file"}
}
}
},
},
["err_typecheck_indirection_through_void_pointer_cpp"]={
["err_pp_error_opening_file"]={
[b]="err_typecheck_indirection_through_void_pointer_cpp",
[d]="err_pp_error_opening_file",
[c]="indirection not permitted on operand of type %0",
[e]="error opening file \'%0\': %1",
[d]="indirection not permitted on operand of type A",
[i]="error opening file \'A\': B",
[e]=k,
[j]="fatal error\\: ",
[g]="indirection not permitted on operand of type (.*?)",
[c]="error opening file \'(.*?)\'\\: (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={sb,1625925174,qb,rb},
[f]={"710bb871478f",1259554724,"Fix PR5633 by making the preprocessor handle the case where we can","Fix PR5633 by making the preprocessor handle the case where we can\nstat a file but where mmaping it fails.  In this case, we emit an\nerror like:\nt.c:1:10: fatal error: error opening file \'../../foo.h\'\n\ninstead of \"cannot find file\".\n\nllvm-svn: 90110"},
[j]={{n,15155,"/// CheckIndirectionOperand - Type check unary indirection (prefix \'*\').\nstatic QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, SourceLocation OpLoc, bool IsAfterAmp = false) {\n  // ...\n  if (Result->isVoidType()) {\n    // ...\n    if (LO.CPlusPlus)\n      S.Diag(OpLoc, diag::err_typecheck_indirection_through_void_pointer_cpp) << OpTy << Op->getSourceRange();"}},
[b]={{"clang/lib/Lex/PPLexerChange.cpp",84,"/// EnterSourceFile - Add a source file to the top of the include stack and\n/// start lexing tokens from it instead of the current buffer.\nbool Preprocessor::EnterSourceFile(FileID FID, ConstSearchDirIterator CurDir, SourceLocation Loc, bool IsFirstIncludeOfFile) {\n  // ...\n  if (!InputFile) {\n    // ...\n    Diag(Loc, diag::err_pp_error_opening_file) << std::string(SourceMgr.getBufferName(FileStart)) << \"\";"}}
[l]={
["clang/test/SemaCXX/reinterpret-cast.cpp"]={"clang/test/SemaCXX/reinterpret-cast.cpp:217:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:218:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:219:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:220:9: error: indirection not permitted on operand of type \'void *\'","clang/test/SemaCXX/reinterpret-cast.cpp:221:9: error: indirection not permitted on operand of type \'void *\'"}
}
},
},
["err_typecheck_invalid_lvalue_addrof"]={
["err_pp_expected_after"]={
[b]="err_typecheck_invalid_lvalue_addrof",
[d]="err_pp_expected_after",
[c]="cannot take the address of an rvalue of type %0",
[e]="missing %1 after %0",
[d]="cannot take the address of an rvalue of type A",
[i]="missing B after A",
[e]=k,
[j]=k,
[g]="cannot take the address of an rvalue of type (.*?)",
[c]="missing (.*?) after (.*?)",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={"751d635a2adc",1388368769,"Cleanup: Switch the preprocessor to err_pp_expected_after","Cleanup: Switch the preprocessor to err_pp_expected_after\n\nThis is approaching consistency but the PP and Parse categories they still have\nslightly different wording:\n\ndef err_pp_expected_after : Error<\"missing %1 after %0\">;\ndef err_expected_after  : Error<\"expected %1 after %0\">;\n\nllvm-svn: 198189"},
[j]={{n,15031,"/// 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  } else if (lval != Expr::LV_Valid && lval != Expr::LV_IncompleteVoidType) {\n   // C99 6.5.3.2p1\n   // The operand must be either an l-value or a function designator\n   if (!op->getType()->isFunctionType()) {\n     // Use a special diagnostic for loads from property references.\n     if (isa<PseudoObjectExpr>(op)) {\n     // ...\n     } else {\n       Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof) << op->getType() << op->getSourceRange();"}},
[b]={{I,3021,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  // ...\n  } else {\n    // ...\n    if (VAOCtx.isInVAOpt()) {\n      // ...\n     Diag(Tok, diag::err_pp_expected_after) << LastTok.getKind() << tok::r_paren;"},{R,153,"/// EvaluateDefined - Process a \'defined(sym)\' expression.\nstatic bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  // If we are in parens, ensure we have a trailing ).\n  if (LParenLoc.isValid()) {\n   // ...\n    if (PeekTok.isNot(tok::r_paren)) {\n      PP.Diag(PeekTok.getLocation(), diag::err_pp_expected_after) << \"\'defined\'\" << tok::r_paren;"},{S,1209,"/// EvaluateHasIncludeCommon - Process a \'__has_include(\"path\")\'\n/// or \'__has_include_next(\"path\")\' expression.\n/// Returns true if successful.\nstatic bool EvaluateHasIncludeCommon(Token &Tok, IdentifierInfo *II, Preprocessor &PP, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n // ...\n  // Ensure we have a \'(\'.\n  if (Tok.isNot(tok::l_paren)) {\n    // ...\n    PP.Diag(LParenLoc, diag::err_pp_expected_after) << II << tok::l_paren;"},{S,1240,"/// EvaluateHasIncludeCommon - Process a \'__has_include(\"path\")\'\n/// or \'__has_include_next(\"path\")\' expression.\n/// Returns true if successful.\nstatic bool EvaluateHasIncludeCommon(Token &Tok, IdentifierInfo *II, Preprocessor &PP, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n // ...\n  // Ensure we have a trailing ).\n  if (Tok.isNot(tok::r_paren)) {\n    PP.Diag(PP.getLocForEndOfToken(FilenameLoc), diag::err_pp_expected_after) << II << tok::r_paren;"},{S,1292,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  // ...\n  if (Tok.isNot(tok::l_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pp_expected_after) << II << tok::l_paren;"},{S,1378,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  // ...\n  already_lexed:\n    // ...\n    // Diagnose missing \')\'.\n    if (!SuppressDiagnostic) {\n      if (auto Diag = PP.Diag(Tok.getLocation(), diag::err_pp_expected_after)) {"},{S,1859,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  } else if (II == Ident__has_constexpr_builtin) {\n  // ...\n  } else if (II == Ident__is_identifier) {\n  // ...\n  } else if (II == Ident__has_attribute) {\n  // ...\n  } else if (II == Ident__has_declspec) {\n  // ...\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  // ...\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n  // ...\n  } else if (II == Ident__has_warning) {\n  // ...\n  } else if (II == Ident__building_module) {\n  // ...\n  } else if (II == Ident__MODULE__) {\n  // ...\n  } else if (II == Ident__identifier) {\n    // ...\n    if (Tok.isNot(tok::l_paren)) {\n      // ...\n      Diag(getLocForEndOfToken(Loc), diag::err_pp_expected_after) << II << tok::l_paren;"},{S,1892,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  } else if (II == Ident__has_constexpr_builtin) {\n // ...\n } else if (II == Ident__is_identifier) {\n  // ...\n } else if (II == Ident__has_attribute) {\n  // ...\n  } else if (II == Ident__has_declspec) {\n  // ...\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  // ...\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n // ...\n } else if (II == Ident__has_warning) {\n  // ...\n  } else if (II == Ident__building_module) {\n  // ...\n  } else if (II == Ident__MODULE__) {\n // ...\n } else if (II == Ident__identifier) {\n    // ...\n    if (RParen.isNot(tok::r_paren)) {\n     Diag(getLocForEndOfToken(Tok.getLocation()), diag::err_pp_expected_after) << Tok.getKind() << tok::r_paren;"}},
[l]={
[l]={
["clang/test/SemaObjC/property-not-lvalue.m"]={"clang/test/SemaObjC/property-not-lvalue.m:41:20: error: cannot take the address of an rvalue of type \'simd_float2\' (vector of 2 \'float\' values)"}
["clang/test/Preprocessor/has_attribute_errors.cpp"]={"clang/test/Preprocessor/has_attribute_errors.cpp:13:30: error: missing \')\' after <numeric_constant>"}
}
}
},
},
["err_typecheck_invalid_lvalue_addrof_addrof_function"]={
["err_pp_expected_comma_in_arg_list"]={
[b]="err_typecheck_invalid_lvalue_addrof_addrof_function",
[d]="err_pp_expected_comma_in_arg_list",
[c]="extra \'&\' taking address of overloaded function",
[e]="expected comma in macro parameter list",
[d]="extra \'&\' taking address of overloaded function",
[i]="expected comma in macro parameter list",
[e]=k,
[j]=k,
[g]="extra \'&\' taking address of overloaded function",
[c]="expected comma in macro parameter list",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={"c084bd288815",1359771285,"PR15132: Replace \"address expression must be an lvalue or a function","PR15132: Replace \"address expression must be an lvalue or a function\ndesignator\" diagnostic with more correct and more human-friendly \"cannot take\naddress of rvalue of type \'T\'\".\n\nFor the case of & &T::f, provide a custom diagnostic, rather than unhelpfully\nsaying \"cannot take address of rvalue of type \'<overloaded function type>\'\".\n\nFor the case of &array_temporary, treat it just like a class temporary\n(including allowing it as an extension); the existing diagnostic wording\nfor the class temporary case works fine.\n\nllvm-svn: 174262"},
[f]={t,1236199783,r,s},
[j]={{n,14869,"/// 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<OverloadExpr>(E)) {\n       // ...\n        Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof_addrof_function) << OrigOp.get()->getSourceRange();"}},
[b]={{I,2726,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n while (true) {\n   // ...\n   default:\n     // ...\n      default: // #define X(A B\n        Diag(Tok, diag::err_pp_expected_comma_in_arg_list);"}}
[l]={
["clang/test/SemaCXX/address-of.cpp"]={"clang/test/SemaCXX/address-of.cpp:44:30: error: extra \'&\' taking address of overloaded function"}
}
},
},
["err_typecheck_invalid_operands"]={
["err_pp_expected_eol"]={
[b]="err_typecheck_invalid_operands",
[d]="err_pp_expected_eol",
[c]="invalid operands to binary expression (%0 and %1)",
[e]="expected end of line in preprocessor expression",
[d]="invalid operands to binary expression (A and B)",
[i]="expected end of line in preprocessor expression",
[e]=k,
[j]=k,
[g]="invalid operands to binary expression \\((.*?) and (.*?)\\)",
[c]="expected end of line in preprocessor expression",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{n,10632,"QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  // ...\n  Diag(Loc, diag::err_typecheck_invalid_operands) << OrigLHS.getType() << OrigRHS.getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,11218,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n // ...\n unsigned DiagID = diag::err_typecheck_invalid_operands;"},{n,12111,"/// Return the resulting type when a vector is shifted\n///       by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // ...\n  // Do not allow shifts for boolean vectors.\n  if ((LHSVecTy && LHSVecTy->isExtVectorBoolType()) || (RHSVecTy && RHSVecTy->isExtVectorBoolType())) {\n    S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange();"},{n,12198,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // ...\n  if ((LHSBuiltinTy && LHSBuiltinTy->isSVEBool()) || (RHSBuiltinTy && RHSBuiltinTy->isSVEBool())) {\n    S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange();"},{n,12235,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // ...\n  if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && (S.Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != S.Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC)) {\n    S.Diag(Loc, diag::err_typecheck_invalid_operands) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[b]={{R,940,"/// EvaluateDirectiveExpression - Evaluate an integer constant expression that\n/// may occur after a #if or #elif directiveIf the expression is equivalent\n/// to \"!defined(X)\" return X in IfNDefMacro.\nPreprocessor::DirectiveEvalResult Preprocessor::EvaluateDirectiveExpression(IdentifierInfo *&IfNDefMacro) {\n  // ...\n  // If we aren\'t at the tok::eod token, something bad happened, like an extra\n  // \')\' token.\n  if (Tok.isNot(tok::eod)) {\n    Diag(Tok, diag::err_pp_expected_eol);"}},
[l]={
[l]={
["clang/test/SemaObjC/arc-invalid.m"]={"clang/test/SemaObjC/arc-invalid.m:12:24: error: invalid operands to binary expression (\'id\' and \'const __strong id\')"}
["clang/test/Preprocessor/has_include.c"]={"clang/test/Preprocessor/has_include.c:175:22: error: expected end of line in preprocessor expression"}
}
}
},
},
["err_typecheck_invalid_restrict_invalid_pointee"]={
["err_pp_expected_ident_in_arg_list"]={
[b]="err_typecheck_invalid_restrict_invalid_pointee",
[d]="err_pp_expected_ident_in_arg_list",
[c]="pointer to function type %0 may not be \'restrict\' qualified",
[e]="expected identifier in macro parameter list",
[d]="pointer to function type A may not be \'restrict\' qualified",
[i]="expected identifier in macro parameter list",
[e]=k,
[j]=k,
[g]="pointer to function type (.*?) may not be \'restrict\' qualified",
[c]="expected identifier in macro parameter list",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{F,1965,"QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, const DeclSpec *DS) {\n // ...\n // Enforce C99 6.7.3p2: \"Types other than pointer types derived from\n // object or incomplete types shall not be restrict-qualified.\"\n  if (Qs.hasRestrict()) {\n   // ...\n   if (T->isAnyPointerType() || T->isReferenceType() || T->isMemberPointerType()) {\n     // ...\n     // If we have a pointer or reference, the pointee must have an object\n      // incomplete type.\n      if (!EltTy->isIncompleteOrObjectType()) {\n        DiagID = diag::err_typecheck_invalid_restrict_invalid_pointee;"}},
[b]={{I,2674,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn. Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n // ...\n while (true) {\n   // ...\n   case tok::r_paren:\n      // ...\n      Diag(Tok, diag::err_pp_expected_ident_in_arg_list);"}}
[l]={
["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:23:1: error: pointer to function type \'f\' (aka \'int (void)\') may not be \'restrict\' qualified","clang/test/Sema/declspec.c:24:3: error: pointer to function type \'f\' (aka \'int (void)\') may not be \'restrict\' qualified"}
}
},
},
["err_typecheck_invalid_restrict_not_pointer"]={
["err_pp_expected_module_name"]={
[b]="err_typecheck_invalid_restrict_not_pointer",
[d]={{nil,q,"err_pp_expected_module_name"}},
[c]="restrict requires a pointer or reference (%0 is invalid)",
[e]={{nil,q,"expected %select{identifier after \'.\' in |}0module name"}},
[d]="restrict requires a pointer or reference (A is invalid)",
[i]={{nil,q,{"expected ",{"identifier after \'.\' in ",a},"module name"}}},
[e]=k,
[j]=k,
[g]="restrict requires a pointer or reference \\((.*?) is invalid\\)",
[c]="expected (?:identifier after \'\\.\' in |)module name",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,q,x}},
[f]={p,1237025389,q,r},
[f]={"d13863008b38",1493857794,"Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.","Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.\n\nThese pragmas are intended to simulate the effect of entering or leaving a file\nwith an associated module. This is not completely implemented yet: declarations\nbetween the pragmas will not be attributed to the correct module, but macro\nvisibility is already functional.\n\nModules named by #pragma clang module begin must already be known to clang (in\nsome module map that\'s either loaded or on the search path).\n\nllvm-svn: 302098"},
[j]={{F,1972,"QualType Sema::BuildQualifiedType(QualType T, SourceLocation Loc, Qualifiers Qs, const DeclSpec *DS) {\n  // ...\n  // Enforce C99 6.7.3p2: \"Types other than pointer types derived from\n  // object or incomplete types shall not be restrict-qualified.\"\n  if (Qs.hasRestrict()) {\n   // ...\n   if (T->isAnyPointerType() || T->isReferenceType() || T->isMemberPointerType()) {\n   // ...\n   } else if (!isDependentOrGNUAutoType(T)) {\n     // ...\n      DiagID = diag::err_typecheck_invalid_restrict_not_pointer;"}},
[b]={{T,786,"// Lex a component of a module name: either an identifier or a string literal;\n// for components that can be expressed both ways, the two forms are equivalent.\nstatic bool LexModuleNameComponent(Preprocessor &PP, Token &Tok, std::pair<IdentifierInfo *, SourceLocation> &ModuleNameComponent, bool First) {\n  // ...\n  if (Tok.is(tok::string_literal) && !Tok.hasUDSuffix()) {\n // ...\n } else if (!Tok.isAnnotation() && Tok.getIdentifierInfo()) {\n // ...\n } else {\n   PP.Diag(Tok.getLocation(), diag::err_pp_expected_module_name) << First;"}},
[l]={
[l]={
["clang/test/Sema/declspec.c"]={"clang/test/Sema/declspec.c:22:1: error: restrict requires a pointer or reference (\'f\' (aka \'int (void)\') is invalid)"}
["clang/test/Preprocessor/pragma_module.c"]={"clang/test/Preprocessor/pragma_module.c:13:100: error: expected identifier after \'.\' in module name"}
}
}
},
},
["err_typecheck_invalid_restrict_not_pointer_noarg"]={
["err_pp_expected_rparen"]={
[b]="err_typecheck_invalid_restrict_not_pointer_noarg",
[d]="err_pp_expected_rparen",
[c]="restrict requires a pointer or reference",
[e]="expected \')\' in preprocessor expression",
[d]="restrict requires a pointer or reference",
[i]="expected \')\' in preprocessor expression",
[e]=k,
[j]=k,
[g]="restrict requires a pointer or reference",
[c]="expected \'\\)\' in preprocessor expression",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={"e9823fab83ac",1261049726,"implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a...","implement PR3962: diagnose more faulty cases of usage of the restrict qualifier. this also removes a FIXME\n\nllvm-svn: 91601"},
[f]={t,1236199783,r,s},
[j]={{t,5109,"/// 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 (unsigned TypeQuals = DS.getTypeQualifiers()) {\n    // Enforce C99 6.7.3p2: \"Types other than pointer types derived from object\n   // or incomplete types shall not be restrict-qualified.\"\n   if (TypeQuals & DeclSpec::TQ_restrict)\n     Diag(DS.getRestrictSpecLoc(), diag::err_typecheck_invalid_restrict_not_pointer_noarg) << DS.getSourceRange();"}},
[b]={{R,457,"/// 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::l_paren: {\n    // ...\n    // If this is a silly value like (X), which doesn\'t need parens, check for\n    // !(defined X).\n    if (PeekTok.is(tok::r_paren)) {\n    // ...\n    } else {\n     // ...\n     if (PeekTok.isNot(tok::r_paren)) {\n       PP.Diag(PeekTok.getLocation(), diag::err_pp_expected_rparen) << Result.getRange();"}}
[l]={
["clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp"]={"clang/test/CXX/class.access/class.friend/p3-cxx0x.cpp:66:10: error: restrict requires a pointer or reference"}
}
},
},
["err_typecheck_ivar_variable_size"]={
["err_pp_expected_value_in_expr"]={
[b]="err_typecheck_ivar_variable_size",
[d]="err_pp_expected_value_in_expr",
[c]="instance variables must have a constant size",
[e]="expected value in expression",
[d]="instance variables must have a constant size",
[i]="expected value in expression",
[e]=k,
[j]=k,
[g]="instance variables must have a constant size",
[c]="expected value in expression",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{t,18386,"/// 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  }\n  // C99 6.7.2.1p8: A member of a structure or union may have any type other\n // than a variably modified type.\n  else if (T->isVariablyModifiedType()) {\n    if (!tryToFixVariablyModifiedVarType(TInfo, T, Loc, diag::err_typecheck_ivar_variable_size))"}},
[b]={{R,291,"/// 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::eod:\n  case tok::r_paren:\n   // ...\n    PP.Diag(PeekTok, diag::err_pp_expected_value_in_expr);"}},
[l]={
[l]={
["clang/test/SemaObjC/variable-size-ivar.m"]={"clang/test/SemaObjC/variable-size-ivar.m:9:7: error: instance variables must have a constant size"}
["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:19:8: error: expected value in expression"}
}
}
},
},
["err_typecheck_logical_vector_expr_gnu_cpp_restrict"]={
["err_pp_expects_filename"]={
[b]={{nil,E,"err_typecheck_logical_vector_expr_gnu_cpp_restrict"}},
[d]="err_pp_expects_filename",
[c]={{nil,E,"logical expression with vector %select{type %1 and non-vector type %2|types %1 and %2}0 is only supported in C++"}},
[e]="expected \"FILENAME\" or <FILENAME>",
[d]={{nil,E,{"logical expression with vector ",{"type B and non-vector type C","types B and C"}," is only supported in C++"}}},
[i]="expected \"FILENAME\" or <FILENAME>",
[e]=k,
[j]=k,
[g]="logical expression with vector (?:type (.*?) and non\\-vector type (.*?)|types (.*?) and (.*?)) is only supported in C\\+\\+",
[c]="expected \"FILENAME\" or \\<FILENAME\\>",
[h]=a,
[h]=a,
[i]={{nil,E,m}},
[g]=x,
[f]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions","[Sema] Support implicit scalar to vector conversions\n\nThis patch teaches clang to perform implicit scalar to vector conversions\nwhen one of the operands of a binary vector expression is a scalar which\ncan be converted to the element type of the vector without truncation\nfollowing GCC\'s implementation.\n\nIf the (constant) scalar is can be casted safely, it is implicitly casted to the\nvector elements type and splatted to produce a vector of the same type.\n\nContributions from: Petar Jovanovic\n\nReviewers: bruno, vkalintiris\n\nDifferential Revision: https://reviews.llvm.org/D25866\n\nllvm-svn: 302935"},
[f]={t,1236199783,r,s},
[j]={{n,10664,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  // ...\n  if (!(LHSNatVec && RHSNatVec)) {\n   // ...\n    Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 0 << Vector->getType() << NonVector->IgnoreImpCasts()->getType() << Vector->getSourceRange();"},{n,10696,"// Diagnose cases where a scalar was implicitly converted to a vector and\n// diagnose the underlying types. Otherwise, diagnose the error\n// as invalid vector logical operands for non-C++ cases.\nQualType Sema::InvalidLogicalVectorOperands(SourceLocation Loc, ExprResult &LHS, ExprResult &RHS) {\n  // ...\n  Diag(Loc, diag::err_typecheck_logical_vector_expr_gnu_cpp_restrict) << 1 << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[b]={{I,1778,"/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully\n/// checked and spelled filename, e.g. as an operand of \\#include. This returns\n/// true if the input filename was in <>\'s or false if it were in \"\"\'s.  The\n/// caller is expected to provide a buffer that is large enough to hold the\n/// spelling of the filename, but is also expected to handle the case when\n/// this method decides to use a different buffer.\nbool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer) {\n  // ...\n  if (Buffer[0] == \'<\') {\n    if (Buffer.back() != \'>\') {\n      Diag(Loc, diag::err_pp_expects_filename);"},{I,1785,"/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully\n/// checked and spelled filename, e.g. as an operand of \\#include. This returns\n/// true if the input filename was in <>\'s or false if it were in \"\"\'s. The\n/// caller is expected to provide a buffer that is large enough to hold the\n/// spelling of the filename, but is also expected to handle the case when\n/// this method decides to use a different buffer.\nbool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer) {\n // ...\n  if (Buffer[0] == \'<\') {\n // ...\n } else if (Buffer[0] == \'\"\') {\n    if (Buffer.back() != \'\"\') {\n     Diag(Loc, diag::err_pp_expects_filename);"},{I,1791,"/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully\n/// checked and spelled filename, e.g. as an operand of \\#include. This returns\n/// true if the input filename was in <>\'s or false if it were in \"\"\'s.  The\n/// caller is expected to provide a buffer that is large enough to hold the\n/// spelling of the filename, but is also expected to handle the case when\n/// this method decides to use a different buffer.\nbool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer) {\n  // ...\n  if (Buffer[0] == \'<\') {\n  // ...\n  } else if (Buffer[0] == \'\"\') {\n // ...\n  } else {\n    Diag(Loc, diag::err_pp_expects_filename);"},{I,1971,"/// HandleIncludeDirective - The \"\\#include\" tokens have just been read, read\n/// the file to be included from the lexer, then include it!  This is a common\n/// routine with functionality shared between \\#include, \\#include_next and\n/// \\#import.  LookupFrom is set when this is a \\#include_next directive, it\n/// specifies the file to start searching from.\nvoid Preprocessor::HandleIncludeDirective(SourceLocation HashLoc, Token &IncludeTok, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  if (FilenameTok.isNot(tok::header_name)) {\n    Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename);"},{S,1222,"/// EvaluateHasIncludeCommon - Process a \'__has_include(\"path\")\'\n/// or \'__has_include_next(\"path\")\' expression.\n/// Returns true if successful.\nstatic bool EvaluateHasIncludeCommon(Token &Tok, IdentifierInfo *II, Preprocessor &PP, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // ...\n  if (Tok.isNot(tok::header_name)) {\n    PP.Diag(Tok.getLocation(), diag::err_pp_expects_filename);"},{T,524,"/// HandlePragmaDependency - Handle \\#pragma GCC dependency \"foo\" blah.\nvoid Preprocessor::HandlePragmaDependency(Token &DependencyTok) {\n  // ...\n  // If the next token wasn\'t a header-name, diagnose the error.\n  if (FilenameTok.isNot(tok::header_name)) {\n    Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename);"}},
[l]={
[l]={
["clang/test/Sema/vector-ops.c"]={
["clang/test/Preprocessor/_Pragma-dependency.c"]={"clang/test/Preprocessor/_Pragma-dependency.c:7:24: error: expected \"FILENAME\" or <FILENAME>"}
[1]="clang/test/Sema/vector-ops.c:32:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
[2]="clang/test/Sema/vector-ops.c:33:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
[3]="clang/test/Sema/vector-ops.c:35:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
[4]="clang/test/Sema/vector-ops.c:36:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
[5]="clang/test/Sema/vector-ops.c:38:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[6]="clang/test/Sema/vector-ops.c:39:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[7]="clang/test/Sema/vector-ops.c:41:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[8]="clang/test/Sema/vector-ops.c:42:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[9]="clang/test/Sema/vector-ops.c:44:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2s\' is only supported in C++",
[10]="clang/test/Sema/vector-ops.c:45:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2s\' is only supported in C++",
[11]="clang/test/Sema/vector-ops.c:47:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
[12]="clang/test/Sema/vector-ops.c:48:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
[13]="clang/test/Sema/vector-ops.c:50:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
[14]="clang/test/Sema/vector-ops.c:51:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
[15]="clang/test/Sema/vector-ops.c:53:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[16]="clang/test/Sema/vector-ops.c:54:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[17]="clang/test/Sema/vector-ops.c:56:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[18]="clang/test/Sema/vector-ops.c:57:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[19]="clang/test/Sema/vector-ops.c:59:15: error: logical expression with vector types \'v2f\' (vector of 2 \'float\' values) and \'v2f\' is only supported in C++",
[20]="clang/test/Sema/vector-ops.c:60:15: error: logical expression with vector types \'v2f\' (vector of 2 \'float\' values) and \'v2f\' is only supported in C++",
[21]="clang/test/Sema/vector-ops.c:62:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[22]="clang/test/Sema/vector-ops.c:63:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[23]="clang/test/Sema/vector-ops.c:65:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[24]="clang/test/Sema/vector-ops.c:66:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2f\' (vector of 2 \'float\' values) is only supported in C++",
[25]="clang/test/Sema/vector-ops.c:68:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
[26]="clang/test/Sema/vector-ops.c:69:15: error: logical expression with vector types \'v2u\' (vector of 2 \'unsigned int\' values) and \'v2u\' is only supported in C++",
[27]="clang/test/Sema/vector-ops.c:71:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2s\' is only supported in C++",
[28]="clang/test/Sema/vector-ops.c:72:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2s\' is only supported in C++",
[29]="clang/test/Sema/vector-ops.c:74:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
[30]="clang/test/Sema/vector-ops.c:75:15: error: logical expression with vector types \'v2s\' (vector of 2 \'int\' values) and \'v2u\' (vector of 2 \'unsigned int\' values) is only supported in C++",
[31]="clang/test/Sema/vector-ops.c:80:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'unsigned int\' is only supported in C++",
[32]="clang/test/Sema/vector-ops.c:81:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'unsigned int\' is only supported in C++",
[33]="clang/test/Sema/vector-ops.c:88:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'unsigned int\' is only supported in C++",
[34]="clang/test/Sema/vector-ops.c:89:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'unsigned int\' is only supported in C++",
[35]="clang/test/Sema/vector-ops.c:98:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'int\' is only supported in C++",
[36]="clang/test/Sema/vector-ops.c:99:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'int\' is only supported in C++",
[37]="clang/test/Sema/vector-ops.c:101:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'int\' is only supported in C++",
[38]="clang/test/Sema/vector-ops.c:102:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'int\' is only supported in C++",
[39]="clang/test/Sema/vector-ops.c:104:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'int\' is only supported in C++",
[40]="clang/test/Sema/vector-ops.c:105:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'int\' is only supported in C++",
[41]="clang/test/Sema/vector-ops.c:107:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'int\' is only supported in C++",
[42]="clang/test/Sema/vector-ops.c:108:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'int\' is only supported in C++",
[43]="clang/test/Sema/vector-ops.c:117:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'float\' is only supported in C++",
[44]="clang/test/Sema/vector-ops.c:118:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'float\' is only supported in C++",
[45]="clang/test/Sema/vector-ops.c:120:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'float\' is only supported in C++",
[46]="clang/test/Sema/vector-ops.c:121:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'float\' is only supported in C++",
[47]="clang/test/Sema/vector-ops.c:123:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'float\' is only supported in C++",
[48]="clang/test/Sema/vector-ops.c:124:15: error: logical expression with vector type \'v2s\' (vector of 2 \'int\' values) and non-vector type \'float\' is only supported in C++",
[49]="clang/test/Sema/vector-ops.c:126:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'float\' is only supported in C++",
[50]="clang/test/Sema/vector-ops.c:127:15: error: logical expression with vector type \'v2u\' (vector of 2 \'unsigned int\' values) and non-vector type \'float\' is only supported in C++",
[51]="clang/test/Sema/vector-ops.c:129:15: error: logical expression with vector type \'v2f\' (vector of 2 \'float\' values) and non-vector type \'float\' is only supported in C++",
[52]="clang/test/Sema/vector-ops.c:130:15: error: logical expression with vector type \'v2f\' (vector of 2 \'float\' values) and non-vector type \'float\' is only supported in C++",
[53]="clang/test/Sema/vector-ops.c:132:15: error: logical expression with vector type \'v2f\' (vector of 2 \'float\' values) and non-vector type \'float\' is only supported in C++",
[54]="clang/test/Sema/vector-ops.c:133:15: error: logical expression with vector type \'v2f\' (vector of 2 \'float\' values) and non-vector type \'float\' is only supported in C++"
}
}
}
},
},
["err_typecheck_lvalue_casts_not_supported"]={
["err_pp_expr_bad_token_binop"]={
[b]="err_typecheck_lvalue_casts_not_supported",
[d]="err_pp_expr_bad_token_binop",
[c]="assignment to cast is illegal, lvalue casts are not supported",
[e]="token is not a valid binary operator in a preprocessor subexpression",
[d]="assignment to cast is illegal, lvalue casts are not supported",
[i]="token is not a valid binary operator in a preprocessor subexpression",
[e]=k,
[j]=k,
[g]="assignment to cast is illegal, lvalue casts are not supported",
[c]="token is not a valid binary operator in a preprocessor subexpression",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{n,14358,"/// 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_LValueCast:\n    DiagID = diag::err_typecheck_lvalue_casts_not_supported;"}},
[b]={{R,581,"static void diagnoseUnexpectedOperator(Preprocessor &PP, PPValue &LHS, Token &Tok) {\n  if (Tok.is(tok::l_paren) && LHS.getIdentifier())\n  // ...\n  else\n    PP.Diag(Tok.getLocation(), diag::err_pp_expr_bad_token_binop) << LHS.getRange();"}},
[l]={
[l]={
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:33:3: error: assignment to cast is illegal, lvalue casts are not supported"}
["clang/test/Preprocessor/disabled-cond-diags2.c"]={"clang/test/Preprocessor/disabled-cond-diags2.c:11:7: error: token is not a valid binary operator in a preprocessor subexpression"}
}
}
},
},
["err_typecheck_member_reference_arrow"]={
["err_pp_expr_bad_token_lparen"]={
[b]="err_typecheck_member_reference_arrow",
[d]="err_pp_expr_bad_token_lparen",
[c]="member reference type %0 is not a pointer",
[e]="function-like macro %0 is not defined",
[d]="member reference type A is not a pointer",
[i]="function-like macro A is not defined",
[e]=k,
[j]=k,
[g]="member reference type (.*?) is not a pointer",
[c]="function\\-like macro (.*?) is not defined",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={"4d247e7012ae",1460765229,"Improve diagnostic for the case when a non-defined function-like macro is used","Improve diagnostic for the case when a non-defined function-like macro is used\nin a preprocessor constant expression.\n\nllvm-svn: 266495"},
[j]={{J,7614,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // ...\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n if (OpKind == tok::arrow) {\n    // ...\n    while (BaseType->isRecordType()) {\n      // ...\n      if (Result.isInvalid()) {\n        if (NoArrowOperatorFound) {\n          // ...\n          Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"},{hb,1293,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // For later type-checking purposes, turn arrow accesses into dot\n  // accesses.  The only access type we support that doesn\'t follow\n  // the C equivalence \"a->b === (*a).b\" is ObjC property accesses,\n  // and those never use arrows, so this is unaffected.\n  if (IsArrow) {\n    if (const PointerType *Ptr = BaseType->getAs<PointerType>())\n    // ...\n    else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n    // ...\n    else if (BaseType->isRecordType()) {\n    // ...\n    } else if (BaseType->isFunctionType()) {\n    // ...\n    } else {\n      S.Diag(MemberLoc, diag::err_typecheck_member_reference_arrow) << BaseType << BaseExpr.get()->getSourceRange();"},{vb,15275,"/// BuildOverloadedArrowExpr - Build a call to an overloaded @c operator->\n///  (if one exists), where @c Base is an expression of class type and\n/// @c Member is the name of the member we\'re trying to find.\nExprResult Sema::BuildOverloadedArrowExpr(Scope *S, Expr *Base, SourceLocation OpLoc, bool *NoArrowOperatorFound) {\n  // ...\n  case OR_No_Viable_Function: {\n    // ...\n    if (CandidateSet.empty()) {\n      // ...\n      Diag(OpLoc, diag::err_typecheck_member_reference_arrow) << BaseType << Base->getSourceRange();"}},
[b]={{R,578,"static void diagnoseUnexpectedOperator(Preprocessor &PP, PPValue &LHS, Token &Tok) {\n  if (Tok.is(tok::l_paren) && LHS.getIdentifier())\n    PP.Diag(LHS.getRange().getBegin(), diag::err_pp_expr_bad_token_lparen) << LHS.getIdentifier();"}},
[l]={
[l]={
["clang/test/SemaHLSL/prohibit_pointer.hlsl"]={"clang/test/SemaHLSL/prohibit_pointer.hlsl:79:14: error: member reference type \'Fins\' is not a pointer"}
["clang/test/Preprocessor/has_attribute.c"]={"clang/test/Preprocessor/has_attribute.c:57:5: error: function-like macro \'__has_cpp_attribute\' is not defined"}
}
}
},
},
["err_typecheck_member_reference_ivar"]={
["err_pp_expr_bad_token_start_expr"]={
[b]="err_typecheck_member_reference_ivar",
[d]="err_pp_expr_bad_token_start_expr",
[c]="%0 does not have a member named %1",
[e]="invalid token at start of a preprocessor expression",
[d]="A does not have a member named B",
[i]="invalid token at start of a preprocessor expression",
[e]=k,
[j]=k,
[g]="(.*?) does not have a member named (.*?)",
[c]="invalid token at start of a preprocessor expression",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{hb,1404,"/// Look up the given member of the given non-type-dependent\n/// expressionThis can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///   the provided structureIt will take over from there.\n/// * Otherwise, the returned expression will be produced in place of\n///   an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n    // ...\n    if (!IV) {\n      // ...\n      if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n      // ...\n      } else {\n        // ...\n        S.Diag(MemberLoc, diag::err_typecheck_member_reference_ivar) << IDecl->getDeclName() << MemberName << BaseExpr.get()->getSourceRange();"}},
[b]={{R,286,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in ResultReturn true if there was an error\n/// parsing. This function also returns information about the form of the\n/// expression in DTSee 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  default:\n    // ...\n    PP.Diag(PeekTok, diag::err_pp_expr_bad_token_start_expr);"}},
[l]={
[l]={
["clang/test/SemaObjC/ivar-in-class-extension.m"]={"clang/test/SemaObjC/ivar-in-class-extension.m:6:14: error: \'SomeClass\' does not have a member named \'privateIvar\'","clang/test/SemaObjC/ivar-in-class-extension.m:7:21: error: \'SomeClass\' does not have a member named \'publicIvar\'"}
["clang/test/Preprocessor/has_include.c"]={"clang/test/Preprocessor/has_include.c:140:19: error: invalid token at start of a preprocessor expression"}
}
}
},
},
["err_typecheck_member_reference_ivar_suggest"]={
["err_pp_file_not_found"]={
[b]="err_typecheck_member_reference_ivar_suggest",
[d]="err_pp_file_not_found",
[c]="%0 does not have a member named %1; did you mean %2?",
[e]="\'%0\' file not found",
[d]="A does not have a member named B; did you mean C?",
[i]="\'A\' file not found",
[e]=k,
[j]="fatal error\\: ",
[g]="(.*?) does not have a member named (.*?); did you mean (.*?)\\?",
[c]="\'(.*?)\' file not found",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={"35b0bac8c51a",1262541717,"Implement typo correction for a variety of Objective-C-specific","Implement typo correction for a variety of Objective-C-specific\nconstructs:\n\n  - Instance variable lookup (\"foo->ivar\" and, in instance methods, \"ivar\")\n  - Property name lookup (\"foo.prop\")\n  - Superclasses\n  - Various places where a class name is required\n  - Protocol names (e.g., id<proto>)\n\nThis seems to cover many of the common places where typos could occur.\n\nllvm-svn: 92449"},
[f]={t,1236199783,r,s},
[j]={{hb,1378,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // Handle ivar access to Objective-C objects.\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>()) {\n   // ...\n   if (!IV) {\n     // ...\n      if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), Sema::LookupMemberName, nullptr, nullptr, Validator, Sema::CTK_ErrorRecovery, IDecl)) {\n       // ...\n        S.diagnoseTypo(Corrected, S.PDiag(diag::err_typecheck_member_reference_ivar_suggest) << IDecl->getDeclName() << MemberName);"}},
[b]={{I,2091,"OptionalFileEntryRef Preprocessor::LookupHeaderIncludeOrImport(ConstSearchDirIterator *CurDir, StringRef &Filename, SourceLocation FilenameLoc, CharSourceRange FilenameRange, const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, bool &IsMapped, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile, StringRef &LookupFilename, SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, ModuleMap::KnownHeader &SuggestedModule, bool isAngled) {\n  // ...\n  Diag(FilenameTok, diag::err_pp_file_not_found) << OriginalFilename << FilenameRange;"},{T,548,"/// HandlePragmaDependency - Handle \\#pragma GCC dependency \"foo\" blah.\nvoid Preprocessor::HandlePragmaDependency(Token &DependencyTok) {\n // ...\n if (!File) {\n   if (!SuppressIncludeNotFoundError)\n     Diag(FilenameTok, diag::err_pp_file_not_found) << Filename;"}},
[l]={
[l]={
["clang/test/SemaObjC/typo-correction.m"]={"clang/test/SemaObjC/typo-correction.m:48:15: error: \'I\' does not have a member named \'implementation\'; did you mean \'_implementation\'?","clang/test/SemaObjC/typo-correction.m:49:15: error: \'I\' does not have a member named \'interface\'; did you mean \'_interface\'?","clang/test/SemaObjC/typo-correction.m:50:15: error: \'I\' does not have a member named \'extension\'; did you mean \'_extension\'?"}
["clang/test/SemaCXX/template-specialization-fatal.cpp"]={"clang/test/SemaCXX/template-specialization-fatal.cpp:5:10: fatal error: \'not_found.h\' file not found"}
}
}
},
},
["err_typecheck_member_reference_struct_union"]={
["err_pp_file_not_found_angled_include_not_fatal"]={
[b]="err_typecheck_member_reference_struct_union",
[d]={{nil,u,"err_pp_file_not_found_angled_include_not_fatal"}},
[c]="member reference base type %0 is not a structure or union",
[e]={{nil,v,"\'%0\' file not found with <angled> %select{include|import}1; use \"quotes\" instead"},{u,u,"\'%0\' file not found with <angled> include; use \"quotes\" instead"}},
[d]="member reference base type A is not a structure or union",
[i]={{nil,v,{"\'A\' file not found with <angled> ",{"include","import"},"; use \"quotes\" instead"}},{u,u,"\'A\' file not found with <angled> include; use \"quotes\" instead"}},
[e]=k,
[j]=k,
[g]="member reference base type (.*?) is not a structure or union",
[c]="\'(.*?)\' file not found with \\<angled\\> (?:include|import); use \"quotes\" instead",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,u,x}},
[f]={p,1237025389,q,r},
[f]={"2ce63b424632",1536873008,"Diagnose likely typos in #include directives.","Diagnose likely typos in #include directives.\n\nSummary:\nWhen someone writes\n\n  #include \"<some_file>\"\n\nor\n\n  #include \" some_file \"\n\nthe compiler returns \"file not fuond...\" with fonts and quotes that may\nmake it hard to see there are excess quotes or surprising bytes in the\nfilename.  Assuming that files are usually logically named and start and\nend with an alphanumeric character, we can check for the file\'s\nexistence by stripping the non-alphanumeric leading or trailing\ncharacters.  If the file is found, emit a non-fatal error with a\nFixItHint.\n\nPatch by Christy Lee!\n\nReviewers: aaron.ballman, erikjv, rsmith\n\nReviewed By: rsmith\n\nSubscribers: lebedev.ri, xbolva00, sammccall, modocache, erikjv, aaron.ballman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D51333\n\nllvm-svn: 342177"},
[j]={{hb,505,"ExprResult Sema::ActOnDependentMemberExpr(Expr *BaseExpr, QualType BaseType, bool IsArrow, SourceLocation OpLoc, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, const DeclarationNameInfo &NameInfo, const TemplateArgumentListInfo *TemplateArgs) {\n  // Even in dependent contexts, try to diagnose base expressions with\n  // obviously wrong types, e.g.:\n  //\n  // T* t;\n  // t.f;\n  //\n  // In Obj-C++, however, the above expression is valid, since it could be\n  // accessing the \'f\' property if T is an Obj-C interface. The extra check\n  // allows this, while still reporting an error if T is a struct pointer.\n  if (!IsArrow) {\n    // ...\n    if (PT && (!getLangOpts().ObjC || PT->getPointeeType()->isRecordType())) {\n      // ...\n      Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr->getSourceRange() << NameInfo.getSourceRange();"},{hb,1691,"fail:\n  // ...\n  S.Diag(OpLoc, diag::err_typecheck_member_reference_struct_union) << BaseType << BaseExpr.get()->getSourceRange() << MemberLoc;"}},
[b]={{I,2044,"OptionalFileEntryRef Preprocessor::LookupHeaderIncludeOrImport(ConstSearchDirIterator *CurDir, StringRef &Filename, SourceLocation FilenameLoc, CharSourceRange FilenameRange, const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, bool &IsMapped, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile, StringRef &LookupFilename, SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, ModuleMap::KnownHeader &SuggestedModule, bool isAngled) {\n  // ...\n  // If the file could not be located and it was included via angle\n  // brackets, we can attempt a lookup as though it were a quoted path to\n  // provide the user with a possible fixit.\n  if (isAngled) {\n    // ...\n    if (File) {\n      Diag(FilenameTok, diag::err_pp_file_not_found_angled_include_not_fatal) << Filename << IsImportDecl << FixItHint::CreateReplacement(FilenameRange, \"\\\"\" + Filename.str() + \"\\\"\");"}},
[l]={
[l]={
["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:66:24: error: member reference base type \'void *\' is not a structure or union"}
["clang/test/FixIt/fixit-include.c"]={"clang/test/FixIt/fixit-include.c:9:10: error: \'fixit-include.h\' file not found with <angled> include; use \"quotes\" instead"}
}
}
},
},
["err_typecheck_member_reference_suggestion"]={
["err_pp_file_not_found_typo_not_fatal"]={
[b]="err_typecheck_member_reference_suggestion",
[d]={{nil,u,"err_pp_file_not_found_typo_not_fatal"}},
[c]="member reference type %0 is %select{a|not a}1 pointer; did you mean to use \'%select{->|.}1\'?",
[e]={{nil,u,"\'%0\' file not found, did you mean \'%1\'?"}},
[d]={{nil,nil,{"member reference type A is ",{"a","not a"}," pointer; did you mean to use \'",{"->","."},"\'?"}}},
[i]={{nil,u,"\'A\' file not found, did you mean \'B\'?"}},
[e]=k,
[j]=k,
[g]="member reference type (.*?) is (?:a|not a) pointer; did you mean to use \'(?:\\-\\>|\\.)\'\\?",
[c]="\'(.*?)\' file not found, did you mean \'(.*?)\'\\?",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,u,x}},
[f]={"a928c652bec1",1260226019,"Recover from dot accesses to record pointers and arrow accesses to records.","Recover from dot accesses to record pointers and arrow accesses to records.\nPatch by Nicola Gigante!\n\nllvm-svn: 90814"},
[f]={"2ce63b424632",1536873008,"Diagnose likely typos in #include directives.","Diagnose likely typos in #include directives.\n\nSummary:\nWhen someone writes\n\n  #include \"<some_file>\"\n\nor\n\n #include \" some_file \"\n\nthe compiler returns \"file not fuond...\" with fonts and quotes that may\nmake it hard to see there are excess quotes or surprising bytes in the\nfilenameAssuming that files are usually logically named and start and\nend with an alphanumeric character, we can check for the file\'s\nexistence by stripping the non-alphanumeric leading or trailing\ncharacters. If the file is found, emit a non-fatal error with a\nFixItHint.\n\nPatch by Christy Lee!\n\nReviewers: aaron.ballman, erikjv, rsmith\n\nReviewed By: rsmith\n\nSubscribers: lebedev.ri, xbolva00, sammccall, modocache, erikjv, aaron.ballman, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D51333\n\nllvm-svn: 342177"},
[j]={{J,7608,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n // ...\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n if (OpKind == tok::arrow) {\n    // ...\n   while (BaseType->isRecordType()) {\n     // ...\n      if (Result.isInvalid()) {\n        if (NoArrowOperatorFound) {\n         if (FirstIteration) {\n            Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << 1 << Base->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{J,7720,"static bool CheckArrow(Sema &S, QualType &ObjectType, Expr *&Base, tok::TokenKind &OpKind, SourceLocation OpLoc) {\n  // ...\n  // C++ [expr.pseudo]p2:\n  //  The left-hand side of the dot operator shall be of scalar type. The\n  //  left-hand side of the arrow operator shall be of pointer to scalar type.\n //  This scalar type is the object type.\n  // Note that this is rather different from the normal handling for the\n  // arrow operator.\n  if (OpKind == tok::arrow) {\n    // ...\n    if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) {\n    // ...\n   } else if (!Base->isTypeDependent()) {\n     // ...\n      S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << true << FixItHint::CreateReplacement(OpLoc, \".\");"},{J,7792,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // ...\n  // C++ [expr.pseudo]p2:\n  //  [...] The cv-unqualified versions of the object type and of the type\n //  designated by the pseudo-destructor-name shall be the same type.\n  if (DestructedTypeInfo) {\n    // ...\n    if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) {\n      if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {\n        // Detect dot pseudo destructor calls on pointer objects, e.g.:\n        //   Foo *foo;\n       //  foo.~Foo();\n        if (OpKind == tok::period && ObjectType->isPointerType() && Context.hasSameUnqualifiedType(DestructedType, ObjectType->getPointeeType())) {\n          auto Diagnostic = Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << ObjectType << /*IsArrow=*/0 << Base->getSourceRange();"},{hb,1285,"/// Look up the given member of the given non-type-dependent\n/// expression.  This can return in one of two ways:\n///  * If it returns a sentinel null-but-valid result, the caller will\n///    assume that lookup was performed and the results written into\n///    the provided structure.  It will take over from there.\n///  * Otherwise, the returned expression will be produced in place of\n///    an ordinary member expression.\n///\n/// The ObjCImpDecl bit is a gross hack that will need to be properly\n/// fixed for ObjC++.\nstatic ExprResult LookupMemberExpr(Sema &S, LookupResult &R, ExprResult &BaseExpr, bool &IsArrow, SourceLocation OpLoc, CXXScopeSpec &SS, Decl *ObjCImpDecl, bool HasTemplateArgs, SourceLocation TemplateKWLoc) {\n  // ...\n  // For later type-checking purposes, turn arrow accesses into dot\n  // accesses.  The only access type we support that doesn\'t follow\n  // the C equivalence \"a->b === (*a).b\" is ObjC property accesses,\n  // and those never use arrows, so this is unaffected.\n  if (IsArrow) {\n   if (const PointerType *Ptr = BaseType->getAs<PointerType>())\n    // ...\n   else if (const ObjCObjectPointerType *Ptr = BaseType->getAs<ObjCObjectPointerType>())\n    // ...\n    else if (BaseType->isRecordType()) {\n      // Recover from arrow accesses to records, e.g.:\n      //  struct MyRecord foo;\n      //  foo->bar\n      // This is actually well-formed in C++ if MyRecord has an\n      // overloaded operator->, but that should have been dealt with\n      // by now--or a diagnostic message already issued if a problem\n      // was encountered while looking for the overloaded operator->.\n      if (!S.getLangOpts().CPlusPlus) {\n        S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \".\");"},{hb,1664,"fail:\n  // Recover from dot accesses to pointers, e.g.:\n  //  type *foo;\n  //  foo.bar\n  // This is actually well-formed in two cases:\n  //  - \'type\' is an Objective C type\n  //  - \'bar\' is a pseudo-destructor name which happens to refer to\n  //    the appropriate pointer type\n  if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {\n    if (!IsArrow && Ptr->getPointeeType()->isRecordType() && MemberName.getNameKind() != DeclarationName::CXXDestructorName) {\n      S.Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange() << FixItHint::CreateReplacement(OpLoc, \"->\");"}},
[b]={{I,2079,"OptionalFileEntryRef Preprocessor::LookupHeaderIncludeOrImport(ConstSearchDirIterator *CurDir, StringRef &Filename, SourceLocation FilenameLoc, CharSourceRange FilenameRange, const Token &FilenameTok, bool &IsFrameworkFound, bool IsImportDecl, bool &IsMapped, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile, StringRef &LookupFilename, SmallVectorImpl<char> &RelativePath, SmallVectorImpl<char> &SearchPath, ModuleMap::KnownHeader &SuggestedModule, bool isAngled) {\n // ...\n if (LangOpts.SpellChecking) {\n    // ...\n    if (File) {\n      // ...\n      Diag(FilenameTok, diag::err_pp_file_not_found_typo_not_fatal) << OriginalFilename << TypoCorrectionName << Hint;"}},
[l]={
[l]={
["clang/test/Sema/member-reference.c"]={"clang/test/Sema/member-reference.c:23:11: error: member reference type \'struct simple\' is not a pointer; did you mean to use \'.\'?"}
["clang/test/Preprocessor/include-likely-typo.c"]={"clang/test/Preprocessor/include-likely-typo.c:4:10: error: \'<empty_file_to_include.h>\' file not found, did you mean \'empty_file_to_include.h\'?"}
}
}
},
},
["err_typecheck_member_reference_type"]={
["err_pp_identifier_arg_not_identifier"]={
[b]="err_typecheck_member_reference_type",
[d]="err_pp_identifier_arg_not_identifier",
[c]="cannot refer to type member %0 in %1 with \'%select{.|->}2\'",
[e]="cannot convert %0 token to an identifier",
[d]={{nil,nil,{"cannot refer to type member A in B with \'",{".","->"},"\'"}}},
[i]="cannot convert A token to an identifier",
[e]=k,
[j]=k,
[g]="cannot refer to type member (.*?) in (.*?) with \'(?:\\.|\\-\\>)\'",
[c]="cannot convert (.*?) token to an identifier",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={"ae385084c517",1394841968,"Implement the MS extension __identifier properly: take a token and strip it of","Implement the MS extension __identifier properly: take a token and strip it of\nits keywordliness.\n\nllvm-svn: 203987"},
[j]={{hb,1176,"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  // We found something that we didn\'t expect. Complain.\n  if (isa<TypeDecl>(MemberDecl))\n    Diag(MemberLoc, diag::err_typecheck_member_reference_type) << MemberName << BaseType << int(IsArrow);"}},
[b]={{S,1881,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  } else if (II == Ident__has_constexpr_builtin) {\n  // ...\n  } else if (II == Ident__is_identifier) {\n  // ...\n  } else if (II == Ident__has_attribute) {\n  // ...\n  } else if (II == Ident__has_declspec) {\n  // ...\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  // ...\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n  // ...\n  } else if (II == Ident__has_warning) {\n  // ...\n  } else if (II == Ident__building_module) {\n  // ...\n  } else if (II == Ident__MODULE__) {\n  // ...\n  } else if (II == Ident__identifier) {\n    // ...\n    if (!Tok.isAnnotation() && Tok.getIdentifierInfo())\n    // ...\n    else if (Tok.is(tok::string_literal) && !Tok.hasUDSuffix()) {\n    // ...\n    } else {\n      Diag(Tok.getLocation(), diag::err_pp_identifier_arg_not_identifier) << Tok.getKind();"}},
[l]={
[l]={
["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:16:5: error: cannot refer to type member \'E\' in \'X\' with \'.\'","clang/test/SemaCXX/member-expr.cpp:17:7: error: cannot refer to type member \'E\' in \'X\' with \'->\'"}
["clang/test/Parser/MicrosoftExtensions.cpp"]={"clang/test/Parser/MicrosoftExtensions.cpp:281:16: error: cannot convert \'(\' token to an identifier","clang/test/Parser/MicrosoftExtensions.cpp:283:16: error: cannot convert \')\' token to an identifier","clang/test/Parser/MicrosoftExtensions.cpp:285:16: error: cannot convert <numeric_constant> token to an identifier","clang/test/Parser/MicrosoftExtensions.cpp:286:16: error: cannot convert \'+\' token to an identifier","clang/test/Parser/MicrosoftExtensions.cpp:287:16: error: cannot convert \';\' token to an identifier"}
}
}
},
},
["err_typecheck_member_reference_unknown"]={
["err_pp_illegal_floating_literal"]={
[b]="err_typecheck_member_reference_unknown",
[d]="err_pp_illegal_floating_literal",
[c]="cannot refer to member %0 in %1 with \'%select{.|->}2\'",
[e]="floating point literal in preprocessor expression",
[d]={{nil,nil,{"cannot refer to member A in B with \'",{".","->"},"\'"}}},
[i]="floating point literal in preprocessor expression",
[e]=k,
[j]=k,
[g]="cannot refer to member (.*?) in (.*?) with \'(?:\\.|\\-\\>)\'",
[c]="floating point literal in preprocessor expression",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{hb,1179,"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  // We found something that we didn\'t expect. Complain.\n if (isa<TypeDecl>(MemberDecl))\n // ...\n  else\n    Diag(MemberLoc, diag::err_typecheck_member_reference_unknown) << MemberName << BaseType << int(IsArrow);"}}
[b]={{R,308,"/// 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   if (Literal.isFloatingLiteral() || Literal.isImaginary) {\n     PP.Diag(PeekTok, diag::err_pp_illegal_floating_literal);"}}
},
},
["err_typecheck_missing_return_type_incompatible"]={
["err_pp_import_directive_ms"]={
[b]="err_typecheck_missing_return_type_incompatible",
[d]="err_pp_import_directive_ms",
[c]="%diff{return type $ must match previous return type $|return type must match previous return type}0,1 when %select{block literal|lambda expression}2 has unspecified explicit return type",
[e]="#import of type library is an unsupported Microsoft feature",
[d]={{nil,nil,{{"return type A must match previous return type B","return type must match previous return type"}," when ",{"block literal","lambda expression"}," has unspecified explicit return type"}}},
[i]="#import of type library is an unsupported Microsoft feature",
[e]=k,
[j]=k,
[g]="(?:return type (.*?) must match previous return type (.*?)|return type must match previous return type) when (?:block literal|lambda expression) has unspecified explicit return type",
[c]="\\#import of type library is an unsupported Microsoft feature",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={"dd5eb9df0cd2",1322934473,"If block literal return type is not specified, return type of the block is ","If block literal return type is not specified, return type of the block is \ninferred from return types. All the return statements have to agree about the type.\n// rdar://10466373\n\nllvm-svn: 145774"},
[f]={"0467f55d6283",1332040237,"Turns #import in MS Mode into an error.","Turns #import in MS Mode into an error.\n\nllvm-svn: 153009"},
[j]={{"clang/lib/Sema/SemaLambda.cpp",704,"void Sema::deduceClosureReturnType(CapturingScopeInfo &CSI) {\n  // ...\n  // We require the return types to strictly match here.\n  // Note that we\'ve already done the required promotions as part of\n  // processing the return statement.\n  for (const ReturnStmt *RS : CSI.Returns) {\n    // ...\n    Diag(RS->getBeginLoc(), diag::err_typecheck_missing_return_type_incompatible) << ReturnType << CSI.ReturnType << isa<LambdaScopeInfo>(CSI);"},{S,3860,"/// 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  {\n    // ...\n    case TDK_Inconsistent: {\n      // ...\n      if (LambdaSI && LambdaSI->HasImplicitReturnType)\n        Diag(ReturnLoc, diag::err_typecheck_missing_return_type_incompatible) << Info.SecondArg << Info.FirstArg << true /*IsLambda*/;"}},
[b]={{I,2609,"/// HandleMicrosoftImportDirective - Implements \\#import for Microsoft Mode\nvoid Preprocessor::HandleMicrosoftImportDirective(Token &Tok) {\n  // ...\n  Diag(Tok, diag::err_pp_import_directive_ms);"}},
[l]={
[l]={
["clang/test/SemaCXX/instantiate-blocks.cpp"]={"clang/test/SemaCXX/instantiate-blocks.cpp:22:7: error: return type \'double\' must match previous return type \'float\' when block literal has unspecified explicit return type"}
["clang/test/Preprocessor/microsoft-import.c"]={"clang/test/Preprocessor/microsoft-import.c:3:2: error: #import of type library is an unsupported Microsoft feature","clang/test/Preprocessor/microsoft-import.c:6:2: error: #import of type library is an unsupported Microsoft feature","clang/test/Preprocessor/microsoft-import.c:8:2: error: #import of type library is an unsupported Microsoft feature"}
}
}
},
},
["err_typecheck_negative_array_size"]={
["err_pp_include_in_arc_cf_code_audited"]={
[b]="err_typecheck_negative_array_size",
[d]="err_pp_include_in_arc_cf_code_audited",
[c]="array size is negative",
[e]={{nil,v,"cannot %select{#include files|import headers}0 inside \'#pragma clang arc_cf_code_audited\'"},{u,nil,"cannot #include files inside \'#pragma clang arc_cf_code_audited\'"}},
[d]="array size is negative",
[i]={{nil,v,{"cannot ",{"#include files","import headers"}," inside \'#pragma clang arc_cf_code_audited\'"}},{u,nil,"cannot #include files inside \'#pragma clang arc_cf_code_audited\'"}},
[e]=k,
[j]=k,
[g]="array size is negative",
[c]="cannot (?:\\#include files|import headers) inside \'\\#pragma clang arc_cf_code_audited\'",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={"32f5fe1467c4",1317359532,"Add explicit attributes to mark functions as having had their","Add explicit attributes to mark functions as having had their\nCoreFoundation object-transfer properties audited, and add a #pragma\nto cause them to be automatically applied to functions in a particular\nspan of codeThis has to be implemented largely in the preprocessor\nbecause of the requirement that the region be entirely contained in\na single filethat\'s hard to impose from the parser without registering\nfor a ton of callbacks.\n\nllvm-svn: 140846"},
[j]={{t,6609,"/// Attempt to fold a variable-sized type to a constant-sized type, returning\n/// true if we were successful.\nbool Sema::tryToFixVariablyModifiedVarType(TypeSourceInfo *&TInfo, QualType &T, SourceLocation Loc, unsigned FailedFoldDiagID) {\n // ...\n  if (SizeIsNegative)\n    Diag(Loc, diag::err_typecheck_negative_array_size);"},{t,6726,"void Sema::CheckTypedefForVariablyModifiedType(Scope *S, TypedefNameDecl *NewTD) {\n // ...\n  if (T->isVariablyModifiedType()) {\n    // ...\n    if (S->getFnParent() == nullptr) {\n      // ...\n      if (FixedTInfo) {\n      // ...\n     } else {\n        if (SizeIsNegative)\n          Diag(NewTD->getLocation(), diag::err_typecheck_negative_array_size);"},{J,2221,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  // ...\n  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    // ...\n    // We\'ve already performed any required implicit conversion to integer or\n   // unscoped enumeration type.\n    // FIXME: Per CWG1464, we are required to check the value prior to\n    // converting to size_t. This will never find a negative array size in\n    // C++14 onwards, because Value is always unsigned here!\n    if (std::optional<llvm::APSInt> Value = (*ArraySize)->getIntegerConstantExpr(Context)) {\n      if (Value->isSigned() && Value->isNegative()) {\n        return ExprError(Diag((*ArraySize)->getBeginLoc(), diag::err_typecheck_negative_array_size) << (*ArraySize)->getSourceRange());"},{F,2640,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // ...\n  if (!ArraySize) {\n  // ...\n  } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n  // ...\n  } else {\n    // ...\n    if (!R.isUsable()) {\n    // ...\n    } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n    // ...\n    } else {\n      // C99 6.7.5.2p1: If the expression is a constant expression, it shall\n      // have a value greater than zero.\n      // In C++, this follows from narrowing conversions being disallowed.\n      if (ConstVal.isSigned() && ConstVal.isNegative()) {\n        if (Entity)\n        // ...\n        else\n          Diag(ArraySize->getBeginLoc(), diag::err_typecheck_negative_array_size) << ArraySize->getSourceRange();"}},
[b]={{I,2145,"/// 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  // Complain about attempts to #include files in an audit pragma.\n  if (PragmaARCCFCodeAuditedInfo.second.isValid()) {\n    Diag(StartLoc, diag::err_pp_include_in_arc_cf_code_audited) << IsImportDecl;"}},
[l]={
[l]={
[vc]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:76:19: error: array size is negative"}
["clang/test/Sema/pragma-arc-cf-code-audited.c"]={"clang/test/Sema/pragma-arc-cf-code-audited.c:13:1: error: cannot #include files inside \'#pragma clang arc_cf_code_audited\'"}
}
}
},
},
["err_typecheck_non_object_not_modifiable_lvalue"]={
["err_pp_include_in_assume_nonnull"]={
[b]="err_typecheck_non_object_not_modifiable_lvalue",
[d]="err_pp_include_in_assume_nonnull",
[c]="non-object type %0 is not assignable",
[e]={{nil,v,"cannot %select{#include files|import headers}0 inside \'#pragma clang assume_nonnull\'"},{u,nil,"cannot #include files inside \'#pragma clang assume_nonnull\'"}},
[d]="non-object type A is not assignable",
[i]={{nil,v,{"cannot ",{"#include files","import headers"}," inside \'#pragma clang assume_nonnull\'"}},{u,nil,"cannot #include files inside \'#pragma clang assume_nonnull\'"}},
[e]=k,
[j]=k,
[g]="non\\-object type (.*?) is not assignable",
[c]="cannot (?:\\#include files|import headers) inside \'\\#pragma clang assume_nonnull\'",
[h]=a,
[h]=a,
[i]=m,
[g]="Nullability Issue",
[f]={p,1237025389,q,r},
[f]={"2a20bd1a9457",1434738357,"Introduced pragmas for audited nullability regions.","Introduced pragmas for audited nullability regions.\n\nIntroduce the clang pragmas \"assume_nonnull begin\" and \"assume_nonnull\nend\" in which we make default assumptions about the nullability of many\nunannotated pointers:\n\n  - Single-level pointers are inferred to __nonnull\n  - NSError** in a (function or method) parameter list is inferred to\n    NSError * __nullable * __nullable.\n  - CFErrorRef * in a (function or method) parameter list is inferred\n    to CFErrorRef __nullable * __nullable.\n  - Other multi-level pointers are never inferred to anything.\n\nImplements rdar://problem/19191042.\n\nllvm-svn: 240156"},
[j]={{n,14351,"/// 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_NotObjectType:\n    DiagID = diag::err_typecheck_non_object_not_modifiable_lvalue;"}},
[b]={{I,2154,"/// 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  // Complain about attempts to #include files in an assume-nonnull pragma.\n  if (PragmaAssumeNonNullLoc.isValid()) {\n    Diag(StartLoc, diag::err_pp_include_in_assume_nonnull) << IsImportDecl;"}},
[l]={
[l]={
["clang/test/Sema/ucn-identifiers.c"]={"clang/test/Sema/ucn-identifiers.c:26:13: error: non-object type \'void (int)\' is not assignable"}
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-2.h:5:1: error: cannot #include files inside \'#pragma clang assume_nonnull\'"}
}
}
},
},
["err_typecheck_nonviable_condition"]={
["err_pp_include_too_deep"]={
[b]="err_typecheck_nonviable_condition",
[d]="err_pp_include_too_deep",
[c]="no viable conversion%select{%diff{ from $ to $|}1,2|%diff{ from returned value of type $ to function return type $|}1,2}0",
[e]="#include nested too deeply",
[d]={{nil,nil,{"no viable conversion",{{{" from B to C",a}},{{" from returned value of type B to function return type C",a}}}}}},
[i]="#include nested too deeply",
[e]=k,
[j]=k,
[g]="no viable conversion(?:(?: from (.*?) to (.*?)|)|(?: from returned value of type (.*?) to function return type (.*?)|))",
[c]="\\#include nested too deeply",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={"76197416ac15",1258568789,"Improve on diagnosing type mismatches because of ","Improve on diagnosing type mismatches because of \nlack of viable convesion functions.\n\nllvm-svn: 89216"},
[f]={t,1236199783,r,s},
[j]={{pb,9663,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitOverloadFailed:\n  case FK_UserConversionOverloadFailed:\n    // ...\n    case OR_No_Viable_Function: {\n      // ...\n      if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))\n        S.Diag(Kind.getLocation(), diag::err_typecheck_nonviable_condition) << (Entity.getKind() == InitializedEntity::EK_Result) << OnlyArg->getType() << Args[0]->getSourceRange() << DestType.getNonReferenceType();"},{vb,3780,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n  // ...\n  if (OvResult == OR_Ambiguous)\n  // ...\n  else { // OR_No_Viable_Function && !CandidateSet.empty()\n    if (!RequireCompleteType(From->getBeginLoc(), ToType, diag::err_typecheck_nonviable_condition_incomplete, From->getType(), From->getSourceRange()))\n      Diag(From->getBeginLoc(), diag::err_typecheck_nonviable_condition) << false << From->getType() << From->getSourceRange() << ToType;"}},
[b]={{I,2525,"#endif\n  // ...\n  // Check that we don\'t have infinite #include recursion.\n  if (IncludeMacroStack.size() == MaxAllowedIncludeStackDepth - 1) {\n    Diag(FilenameTok, diag::err_pp_include_too_deep);"}}
[l]={
["clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl"]={"clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:19:34: error: no viable conversion from \'S\' to \'float\'","clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:19:37: error: no viable conversion from \'S\' to \'float\'","clang/test/SemaHLSL/BuiltIns/vector-constructors-erros.hlsl:21:32: error: no viable conversion from \'S2\' to \'float\'"}
}
},
["err_typecheck_nonviable_condition_incomplete"]={
[b]="err_typecheck_nonviable_condition_incomplete",
[c]="no viable conversion%diff{ from $ to incomplete type $|}0,1",
[d]={{nil,nil,{"no viable conversion",{" from A to incomplete type B",a}}}},
[e]=k,
[g]="no viable conversion(?: from (.*?) to incomplete type (.*?)|)",
[h]=a,
[i]=m,
[f]={"64cf3efd47bc",1372297825,"Fix a conversion to incomplete type bug -- The error message now specifically states that the type i...","Fix a conversion to incomplete type bug -- The error message now specifically states that the type is incomplete and points to the forward declaration of the incomplete type.\n\nllvm-svn: 185056"},
[j]={{pb,9661,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitOverloadFailed:\n  case FK_UserConversionOverloadFailed:\n    // ...\n    case OR_No_Viable_Function: {\n      // ...\n      if (!S.RequireCompleteType(Kind.getLocation(), DestType.getNonReferenceType(), diag::err_typecheck_nonviable_condition_incomplete, OnlyArg->getType(), Args[0]->getSourceRange()))"},{vb,3778,"bool Sema::DiagnoseMultipleUserDefinedConversion(Expr *From, QualType ToType) {\n  // ...\n  if (OvResult == OR_Ambiguous)\n  // ...\n  else { // OR_No_Viable_Function && !CandidateSet.empty()\n    if (!RequireCompleteType(From->getBeginLoc(), ToType, diag::err_typecheck_nonviable_condition_incomplete, From->getType(), From->getSourceRange()))"}},
[l]={
["clang/test/SemaCXX/conversion-incomplete-type.cpp"]={"clang/test/SemaCXX/conversion-incomplete-type.cpp:12:23: error: no viable conversion from \'const string\' to incomplete type \'const StringPiece\'","clang/test/SemaCXX/conversion-incomplete-type.cpp:20:23: error: no viable conversion from \'const string\' to incomplete type \'const StringPiece\'"}
}
},
["err_typecheck_op_on_nonoverlapping_address_space_pointers"]={
[b]="err_typecheck_op_on_nonoverlapping_address_space_pointers",
[c]="%select{comparison between %diff{ ($ and $)|}0,1|arithmetic operation with operands of type %diff{ ($ and $)|}0,1|conditional operator with the second and third operands of type %diff{ ($ and $)|}0,1}2 which are pointers to non-overlapping address spaces",
[d]={{nil,nil,{{{"comparison between ",{Pb,a}},{"arithmetic operation with operands of type ",{Pb,a}},{"conditional operator with the second and third operands of type ",{Pb,a}}}," which are pointers to non-overlapping address spaces"}}},
[e]=k,
[g]="(?:comparison between (?: \\((.*?) and (.*?)\\)|)|arithmetic operation with operands of type (?: \\((.*?) and (.*?)\\)|)|conditional operator with the second and third operands of type (?: \\((.*?) and (.*?)\\)|)) which are pointers to non\\-overlapping address spaces",
[h]=a,
[i]=m,
[f]={"5d8ad8a7b891",1417016201,"[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0.","[OpenCL] Implemented restrictions for pointer conversions specified in OpenCL v2.0.\n\nOpenCL v2.0 s6.5.5 restricts conversion of pointers to different address spaces:\n- the named address spaces (__global, __local, and __private) => __generic - implicitly converted;\n- __generic => named - with an explicit cast;\n- named <=> named - disallowed;\n- __constant <=> any other - disallowed.\n\nllvm-svn: 222834"},
[j]={{n,8738,"/// Checks compatibility between two pointers and return the resulting\n/// type.\nstatic QualType checkConditionalPointerCompatibility(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc) {\n  // ...\n  // OpenCL v1.1 s6.5 - Conversion between pointers to distinct address\n  // spaces is disallowed.\n  if (lhQual.isAddressSpaceSupersetOf(rhQual))\n  // ...\n  else if (rhQual.isAddressSpaceSupersetOf(lhQual))\n  // ...\n  else {\n    S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSTy << RHSTy << 2 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,11631,"/// Check the validity of a binary arithmetic operation w.r.t. pointer\n/// operands.\n///\n/// This routine will diagnose any invalid arithmetic on pointer operands much\n/// like \\see checkArithmeticOpPointerOperand. However, it has special logic\n/// for emitting a single diagnostic even for operations where both LHS and RHS\n/// are (potentially problematic) pointers.\n///\n/// \\returns True when the operand is valid to use (even if as an extension).\nstatic bool checkArithmeticBinOpPointerOperands(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n  // ...\n  // if both are pointers check if operation is valid wrt address spaces\n  if (isLHSPointer && isRHSPointer) {\n    if (!LHSPointeeTy.isAddressSpaceOverlapping(RHSPointeeTy)) {\n      S.Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSExpr->getType() << RHSExpr->getType() << 1 /*arithmetic op*/"},{n,13241,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n  if ((LHSType->isIntegerType() && !LHSIsNull) || (RHSType->isIntegerType() && !RHSIsNull)) {\n  // ...\n  } else if (getLangOpts().CPlusPlus) {\n  // ...\n  } else if (LHSType->isPointerType() && RHSType->isPointerType()) { // C99 6.5.8p2\n    // ...\n    if (LCanPointeeTy != RCanPointeeTy) {\n      // Treat NULL constant as a special case in OpenCL.\n      if (getLangOpts().OpenCL && !LHSIsNull && !RHSIsNull) {\n        if (!LCanPointeeTy.isAddressSpaceOverlapping(RCanPointeeTy)) {\n          Diag(Loc, diag::err_typecheck_op_on_nonoverlapping_address_space_pointers) << LHSType << RHSType << 0 /* comparison */"}},
[l]={
["clang/test/SemaCXX/address-space-arithmetic.cpp"]={"clang/test/SemaCXX/address-space-arithmetic.cpp:5:12: error: arithmetic operation with operands of type  (\'__private int *\' and \'__local int *\') which are pointers to non-overlapping address spaces"}
}
},
["err_typecheck_ordered_comparison_of_function_pointers"]={
[b]={{nil,B,"err_typecheck_ordered_comparison_of_function_pointers"}},
[c]={{nil,B,"ordered comparison of function pointers (%0 and %1)"}},
[d]={{nil,B,"ordered comparison of function pointers (A and B)"}},
[e]=k,
[g]="ordered comparison of function pointers \\((.*?) and (.*?)\\)",
[h]=a,
[i]={{nil,B,m}},
[f]={"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]={{n,13039,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n  if (IsOrdered && LHSType->isFunctionPointerType() && RHSType->isFunctionPointerType()) {\n    // ...\n    auto DiagID = IsError ? diag::err_typecheck_ordered_comparison_of_function_pointers : getLangOpts().CPlusPlus ? diag::warn_typecheck_ordered_comparison_of_function_pointers : diag::ext_typecheck_ordered_comparison_of_function_pointers;"}},
[l]={
["clang/test/SemaCXX/compare-function-pointer.cpp"]={"clang/test/SemaCXX/compare-function-pointer.cpp:15:14: error: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp0_t\')","clang/test/SemaCXX/compare-function-pointer.cpp:27:14: error: ordered comparison of function pointers (\'fp0_t\' (aka \'void (*)()\') and \'fp1_t\' (aka \'int (*)()\'))"}
}
},
["err_typecheck_ordered_comparison_of_pointer_and_zero"]={
[b]="err_typecheck_ordered_comparison_of_pointer_and_zero",
[c]="ordered comparison between pointer and zero (%0 and %1)",
[d]="ordered comparison between pointer and zero (A and B)",
[e]=k,
[g]="ordered comparison between pointer and zero \\((.*?) and (.*?)\\)",
[h]=a,
[i]=m,
[f]={"0c1c53e3fad7",1477017397,"DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules.","DR583, DR1512: Implement a rewrite to C++\'s \'composite pointer type\' rules.\nThis has two significant effects:\n\n1) Direct relational comparisons between null pointer constants (0 and nullopt)\n  and pointers are now ill-formed. This was always the case for C, and it\n  appears that C++ only ever permitted by accident. For instance, cases like\n    nullptr < &a\n  are now rejected.\n\n2) Comparisons and conditional operators between differently-cv-qualified\n  pointer types now work, and produce a composite type that both source\n  pointer types can convert to (when possible). For instance, comparison\n  between \'int **\' and \'const int **\' is now valid, and uses an intermediate\n  type of \'const int *const *\'.\n\nClang previously supported #2 as an extension.\n\nWe do not accept the cases in #1 as an extension. I\'ve tested a fair amount of\ncode to check that this doesn\'t break it, but if it turns out that someone is\nrelying on this, we can easily add it back as an extension.\n\nllvm-svn: 284800"},
[j]={{n,13349,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n  if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || (LHSType->isIntegerType() && RHSType->isAnyPointerType())) {\n    // ...\n    if (LangOpts.DebuggerSupport) {\n    // ...\n    } else if ((LHSIsNull && LHSType->isIntegerType()) || (RHSIsNull && RHSType->isIntegerType())) {\n      if (IsOrdered) {\n        // ...\n        DiagID = isError ? diag::err_typecheck_ordered_comparison_of_pointer_and_zero : diag::ext_typecheck_ordered_comparison_of_pointer_and_zero;"}},
[l]={
["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:10: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:25: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:36: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:74:51: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:10: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:26: error: ordered comparison between pointer and zero (\'long\' and \'int *\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:38: error: ordered comparison between pointer and zero (\'int *\' and \'long\')","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:75:54: error: ordered comparison between pointer and zero (\'long\' and \'int *\')"}
}
},
},
["err_typecheck_pointer_arith_function_type"]={
["err_pp_including_mainfile_in_preamble"]={
[b]="err_typecheck_pointer_arith_function_type",
[d]={{nil,v,"err_pp_including_mainfile_in_preamble"}},
[c]="arithmetic on%select{ a|}0 pointer%select{|s}0 to%select{ the|}2 function type%select{|s}2 %1%select{| and %3}2",
[e]={{nil,v,"main file cannot be included recursively when building a preamble"}},
[d]={{nil,nil,{"arithmetic on",{" a",a}," pointer",{a,uc}," to",{" the",a}," function type",{a,uc}," B",{a," and D"}}}},
[i]={{nil,v,"main file cannot be included recursively when building a preamble"}},
[e]=k,
[j]=k,
[g]="arithmetic on(?: a|) pointer(?:|s) to(?: the|) function type(?:|s) (.*?)(?:| and (.*?))",
[c]="main file cannot be included recursively when building a preamble",
[h]=a,
[h]=a,
[i]=m,
[g]={{nil,v,x}},
[f]={p,1237025389,q,r},
[f]={"3c28a2dc6bdc",1557483935,"[Preamble] Stop circular inclusion of main file when building preamble","[Preamble] Stop circular inclusion of main file when building preamble\n\nIf a header file was processed for the second time, we could end up with a\nwrong conditional stack and skipped ranges:\n\nIn the particular example, if the header guard is evaluated the second time and\nit is decided to skip the conditional block, the corresponding \"#endif\" is\nnever seen since the preamble does not include it and we end up in the\nTok.is(tok::eof) case with a wrong conditional stack.\n\nDetect the circular inclusion, emit a diagnostic and stop processing the\ninclusion.\n\nllvm-svn: 360418"},
[j]={{n,11485,"/// Diagnose invalid arithmetic on two function pointers.\nstatic void diagnoseArithmeticOnTwoFunctionPointers(Sema &S, SourceLocation Loc, Expr *LHS, Expr *RHS) {\n // ...\n S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 1 /* two pointers */"},{n,11500,"/// Diagnose invalid arithmetic on a function pointer.\nstatic void diagnoseArithmeticOnFunctionPointer(Sema &S, SourceLocation Loc, Expr *Pointer) {\n  // ...\n  S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_function_type : diag::ext_gnu_ptr_func_arith) << 0 /* one pointer */ << Pointer->getType()->getPointeeType() << 0 /* one pointer, so only one type */"}},
[b]={{I,2371,"/// 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  // Check for circular inclusion of the main file.\n  // We can\'t generate a consistent preamble with regard to the conditional\n  // stack if the main file is included again as due to the preamble bounds\n  // some directives (e.g. #endif of a header guard) will never be seen.\n  // Since this will lead to confusing errors, avoid the inclusion.\n  if (Action == Enter && File && PreambleConditionalStack.isRecording() && SourceMgr.isMainFile(File->getFileEntry())) {\n    Diag(FilenameTok.getLocation(), diag::err_pp_including_mainfile_in_preamble);"}}
[l]={
["clang/test/SemaCXX/null_in_arithmetic_ops.cpp"]={"clang/test/SemaCXX/null_in_arithmetic_ops.cpp:36:16: error: arithmetic on a pointer to the function type \'void ()\'","clang/test/SemaCXX/null_in_arithmetic_ops.cpp:36:24: error: arithmetic on a pointer to the function type \'void ()\'"}
}
},
},
["err_typecheck_pointer_arith_void_type"]={
["err_pp_invalid_directive"]={
[b]="err_typecheck_pointer_arith_void_type",
[d]="err_pp_invalid_directive",
[c]="arithmetic on%select{ a|}0 pointer%select{|s}0 to void",
[e]={{nil,J,"invalid preprocessing directive%select{|, did you mean \'#%1\'?}0"},{M,nil,"invalid preprocessing directive"}},
[d]={{nil,nil,{"arithmetic on",{" a",a}," pointer",{a,uc}," to void"}}},
[i]={{nil,J,{"invalid preprocessing directive",{a,", did you mean \'#B\'?"}}},{M,nil,"invalid preprocessing directive"}},
[e]=k,
[j]=k,
[g]="arithmetic on(?: a|) pointer(?:|s) to void",
[c]="invalid preprocessing directive(?:|, did you mean \'\\#(.*?)\'\\?)",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{n,11431,"static void diagnoseArithmeticOnTwoVoidPointers(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) { S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_void_type : diag::ext_gnu_void_ptr) << 1 /* two pointers */ << LHSExpr->getSourceRange() << RHSExpr->getSourceRange(); }"},{n,11441,"static void diagnoseArithmeticOnVoidPointer(Sema &S, SourceLocation Loc, Expr *Pointer) { S.Diag(Loc, S.getLangOpts().CPlusPlus ? diag::err_typecheck_pointer_arith_void_type : diag::ext_gnu_void_ptr) << 0 /* one pointer */ << Pointer->getSourceRange(); }"}},
[b]={{I,1334,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line.  This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n // ...\n  Diag(Result, diag::err_pp_invalid_directive) << 0;"}},
[l]={
[l]={
["clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp"]={"clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp:178:15: error: arithmetic on a pointer to void"}
["clang/test/Preprocessor/disabled-cond-diags2.c"]={"clang/test/Preprocessor/disabled-cond-diags2.c:14:2: error: invalid preprocessing directive"}
}
}
},
},
["err_typecheck_sclass_fscope"]={
["err_pp_invalid_poison"]={
[b]="err_typecheck_sclass_fscope",
[d]="err_pp_invalid_poison",
[c]="illegal storage class on file-scoped variable",
[e]="can only poison identifier tokens",
[d]="illegal storage class on file-scoped variable",
[i]="can only poison identifier tokens",
[e]=k,
[j]=k,
[g]="illegal storage class on file\\-scoped variable",
[c]="can only poison identifier tokens",
[h]=a,
[h]=a,
[i]=m,
[g]=x,
[f]={p,1237025389,q,r},
[f]={t,1236199783,r,s},
[j]={{t,7508,"NamedDecl *Sema::ActOnVariableDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamLists, bool &AddToScope, ArrayRef<BindingDecl *> Bindings) {\n  // ...\n  if (!DC->isRecord() && S->getFnParent() == nullptr) {\n    // C99 6.9p2: The storage-class specifiers auto and register shall not\n    // appear in the declaration specifiers in an external declaration.\n    // Global Register+Asm is a GNU extension we support.\n    if (SC == SC_Auto || (SC == SC_Register && !D.getAsmLabel())) {\n      Diag(D.getIdentifierLoc(), diag::err_typecheck_sclass_fscope);"}},
[b]={{T,461,"/// HandlePragmaPoison - Handle \\#pragma GCC poisonPoisonTok is the \'poison\'.\nvoid Preprocessor::HandlePragmaPoison() {\n  // ...\n  while (true) {\n    // ...\n    // Can only poison identifiers.\n    if (Tok.isNot(tok::raw_identifier)) {\n      Diag(Tok, diag::err_pp_invalid_poison);"}}
[l]={
["clang/test/Sema/decl-invalid.c"]={"clang/test/Sema/decl-invalid.c:26:14: error: illegal storage class on file-scoped variable"}
}
},
["err_typecheck_sclass_func"]={
[b]="err_typecheck_sclass_func",
[c]="illegal storage class on function",
[d]="illegal storage class on function",
[e]=k,
[g]="illegal storage class on function",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{t,9104,"static StorageClass getFunctionStorageClass(Sema &SemaRef, Declarator &D) {\n  // ...\n  case DeclSpec::SCS_auto:\n  case DeclSpec::SCS_register:\n  case DeclSpec::SCS_mutable:\n    SemaRef.Diag(D.getDeclSpec().getStorageClassSpecLoc(), diag::err_typecheck_sclass_func);"}},
[l]={
["clang/test/Sema/function.c"]={"clang/test/Sema/function.c:59:3: error: illegal storage class on function"}
}
},
["err_typecheck_statement_requires_integer"]={
[b]="err_typecheck_statement_requires_integer",
[c]="statement requires expression of integer type (%0 invalid)",
[d]="statement requires expression of integer type (A invalid)",
[e]=k,
[g]="statement requires expression of integer type \\((.*?) invalid\\)",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{S,1040,"ExprResult Sema::CheckSwitchCondition(SourceLocation SwitchLoc, Expr *Cond) {\n  class SwitchConvertDiagnoser : public ICEConvertDiagnoser {\n    // ...\n    SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_typecheck_statement_requires_integer) << T; }"}},
[l]={
["clang/test/SemaTemplate/non-integral-switch-cond.cpp"]={"clang/test/SemaTemplate/non-integral-switch-cond.cpp:9:5: error: statement requires expression of integer type (\'NOT_AN_INTEGRAL_TYPE\' invalid)"}
}
},
["err_typecheck_statement_requires_scalar"]={
[b]="err_typecheck_statement_requires_scalar",
[c]="statement requires expression of scalar type (%0 invalid)",
[d]="statement requires expression of scalar type (A invalid)",
[e]=k,
[g]="statement requires expression of scalar type \\((.*?) invalid\\)",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{n,21002,"ExprResult Sema::CheckBooleanCondition(SourceLocation Loc, Expr *E, bool IsConstexpr) {\n  // ...\n  if (!E->isTypeDependent()) {\n    // ...\n    if (!T->isScalarType()) { // C99 6.8.4.1p1\n      Diag(Loc, diag::err_typecheck_statement_requires_scalar) << T << E->getSourceRange();"}},
[l]={
["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:43:3: error: statement requires expression of scalar type (\'enum some_undefined_enum\' invalid)"}
}
},
["err_typecheck_sub_ptr_compatible"]={
[b]="err_typecheck_sub_ptr_compatible",
[c]="%diff{$ and $ are not pointers to compatible types|pointers to incompatible types}0,1",
[d]={{nil,nil,{{"A and B are not pointers to compatible types","pointers to incompatible types"}}}},
[e]=k,
[g]="(?:(.*?) and (.*?) are not pointers to compatible types|pointers to incompatible types)",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{w,9078,"/// 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    // Ensure Pointee types are compatible\n    if (ArgTypeA->isAnyPointerType() && !isNull(ArgA) && ArgTypeB->isAnyPointerType() && !isNull(ArgB)) {\n      // ...\n      if (!Context.typesAreCompatible(Context.getCanonicalType(pointeeA).getUnqualifiedType(), Context.getCanonicalType(pointeeB).getUnqualifiedType())) {\n        return Diag(TheCall->getBeginLoc(), diag::err_typecheck_sub_ptr_compatible) << ArgTypeA << ArgTypeB << ArgA->getSourceRange() << ArgB->getSourceRange();"},{n,11948,"/// Emit error when two pointers are incompatible.\nstatic void diagnosePointerIncompatibility(Sema &S, SourceLocation Loc, Expr *LHSExpr, Expr *RHSExpr) {\n  // ...\n  S.Diag(Loc, diag::err_typecheck_sub_ptr_compatible) << LHSExpr->getType() << RHSExpr->getType() << LHSExpr->getSourceRange() << RHSExpr->getSourceRange();"}},
[l]={
["clang/test/CXX/over/over.built/p15.cpp"]={"clang/test/CXX/over/over.built/p15.cpp:6:13: error: \'int *\' and \'float *\' are not pointers to compatible types"}
}
},
["err_typecheck_subscript_not_integer"]={
[b]="err_typecheck_subscript_not_integer",
[c]="array subscript is not an integer",
[d]="array subscript is not an integer",
[e]=k,
[g]="array subscript is not an integer",
[h]=a,
[i]=m,
[f]={"003af249275a",1240699855,"minor diagnostics improvements.","minor diagnostics improvements.\n\nllvm-svn: 70092"},
[j]={{n,5956,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // ...\n  // C99 6.5.2.1p1\n  if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent())\n    return ExprError(Diag(LLoc, diag::err_typecheck_subscript_not_integer) << IndexExpr->getSourceRange());"},{n,16636,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  // ...\n  for (const OffsetOfComponent &OC : Components) {\n    if (OC.isBrackets) {\n      // ...\n      // The expression must be an integral expression.\n      // FIXME: An integral constant expression?\n      if (!Idx->isTypeDependent() && !Idx->isValueDependent() && !Idx->getType()->isIntegerType())\n        return ExprError(Diag(Idx->getBeginLoc(), diag::err_typecheck_subscript_not_integer) << Idx->getSourceRange());"}},
[l]={
["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:23:16: error: array subscript is not an integer"}
}
},
["err_typecheck_subscript_value"]={
[b]="err_typecheck_subscript_value",
[c]="subscripted value is not an array, pointer, or vector",
[d]="subscripted value is not an array, pointer, or vector",
[e]=k,
[g]="subscripted value is not an array, pointer, or vector",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{n,5950,"ExprResult Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, Expr *Idx, SourceLocation RLoc) {\n  // ...\n  if (LHSTy->isDependentType() || RHSTy->isDependentType()) {\n  // ...\n  } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) {\n  // ...\n  } else if (const ObjCObjectPointerType *PTy = LHSTy->getAs<ObjCObjectPointerType>()) {\n  // ...\n  } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) {\n  // ...\n  } else if (const ObjCObjectPointerType *PTy = RHSTy->getAs<ObjCObjectPointerType>()) {\n  // ...\n  } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) {\n  // ...\n  } else if (LHSTy->isBuiltinType() && LHSTy->getAs<BuiltinType>()->isVLSTBuiltinType()) {\n  // ...\n  } else if (LHSTy->isArrayType()) {\n  // ...\n  } else if (RHSTy->isArrayType()) {\n  // ...\n  } else {\n    return ExprError(Diag(LLoc, diag::err_typecheck_subscript_value) << LHSExp->getSourceRange() << RHSExp->getSourceRange());"}},
[l]={
["clang/test/SemaObjC/matrix-type-operators.m"]={"clang/test/SemaObjC/matrix-type-operators.m:20:17: error: subscripted value is not an array, pointer, or vector"}
}
},
["err_typecheck_sve_rvv_ambiguous"]={
[b]="err_typecheck_sve_rvv_ambiguous",
[c]="cannot combine fixed-length and sizeless %select{SVE|RVV}0 vectors in expression, result is ambiguous (%1 and %2)",
[d]={{nil,nil,{"cannot combine fixed-length and sizeless ",{"SVE","RVV"}," vectors in expression, result is ambiguous (B and C)"}}},
[e]=k,
[g]="cannot combine fixed\\-length and sizeless (?:SVE|RVV) vectors in expression, result is ambiguous \\((.*?) and (.*?)\\)",
[h]=a,
[i]=m,
[f]={sb,1625925174,qb,rb},
[j]={{n,11066,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // ...\n  if (IsSveRVVConversion(LHSType, RHSType, SVEorRVV) || IsSveRVVConversion(RHSType, LHSType, SVEorRVV)) {\n    Diag(Loc, diag::err_typecheck_sve_rvv_ambiguous) << SVEorRVV << LHSType << RHSType;"}},
[l]={
["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:131:11: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:132:11: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:141:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:144:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:150:7: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:153:7: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:159:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:162:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:168:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:171:13: error: cannot combine fixed-length and sizeless SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))"}
}
},
["err_typecheck_sve_rvv_gnu_ambiguous"]={
[b]="err_typecheck_sve_rvv_gnu_ambiguous",
[c]="cannot combine GNU and %select{SVE|RVV}0 vectors in expression, result is ambiguous (%1 and %2)",
[d]={{nil,nil,{"cannot combine GNU and ",{"SVE","RVV"}," vectors in expression, result is ambiguous (B and C)"}}},
[e]=k,
[g]="cannot combine GNU and (?:SVE|RVV) vectors in expression, result is ambiguous \\((.*?) and (.*?)\\)",
[h]=a,
[i]=m,
[f]={sb,1625925174,qb,rb},
[j]={{n,11073,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // ...\n  if (IsSveRVVGnuConversion(LHSType, RHSType, SVEorRVV) || IsSveRVVGnuConversion(RHSType, LHSType, SVEorRVV)) {\n    Diag(Loc, diag::err_typecheck_sve_rvv_gnu_ambiguous) << SVEorRVV << LHSType << RHSType;"}},
[l]={
["clang/test/Sema/attr-arm-sve-vector-bits.c"]={"clang/test/Sema/attr-arm-sve-vector-bits.c:134:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:135:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:137:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:138:11: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:142:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:145:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:147:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:148:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:151:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:154:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:156:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:157:7: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:160:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:163:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:165:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:166:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:169:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'svint8_t\' (aka \'__SVInt8_t\') and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:172:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'fixed_int8_t\' (vector of 256 \'signed char\' values) and \'gnu_int8_t\' (vector of 256 \'int8_t\' values))","clang/test/Sema/attr-arm-sve-vector-bits.c:174:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'svint8_t\' (aka \'__SVInt8_t\'))","clang/test/Sema/attr-arm-sve-vector-bits.c:175:13: error: cannot combine GNU and SVE vectors in expression, result is ambiguous (\'gnu_int8_t\' (vector of 256 \'int8_t\' values) and \'fixed_int8_t\' (vector of 256 \'signed char\' values))"}
}
},
["err_typecheck_three_way_comparison_of_pointer_and_zero"]={
[b]={{nil,u,"err_typecheck_three_way_comparison_of_pointer_and_zero"}},
[c]={{nil,u,"three-way comparison between pointer and zero"}},
[d]={{nil,u,"three-way comparison between pointer and zero"}},
[e]=k,
[g]="three\\-way comparison between pointer and zero",
[h]=a,
[i]={{nil,u,m}},
[f]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles.","[attributes][analyzer] Add annotations for handles.\n\nThese annotations will be used in an upcomming static analyzer check\nthat finds handle leaks, use after releases, and double releases.\n\nDifferential Revision: https://reviews.llvm.org/D70469"},
[j]={{n,13037,"// C99 6.5.8, C++ [expr.rel]\nQualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // ...\n  auto computeResultTy = [&]() {\n    // ...\n    if (CompositeTy->isPointerType() && LHSIsNull != RHSIsNull) {\n      // ...\n      Diag(Loc, diag::err_typecheck_three_way_comparison_of_pointer_and_zero) << (LHSIsNull ? LHS.get()->getSourceRange() : RHS.get()->getSourceRange());"}}
},
["err_typecheck_unary_expr"]={
[b]="err_typecheck_unary_expr",
[c]="invalid argument type %0 to unary expression",
[d]="invalid argument type A to unary expression",
[e]=k,
[g]="invalid argument type (.*?) to unary expression",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{n,16161,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    // ...\n    // The only legal unary operation for atomics is \'&\'.\n    if ((Opc != UO_AddrOf && Ty->isAtomicType()) ||\n      // ...\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << InputExpr->getType() << Input.get()->getSourceRange());"},{n,16237,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  // ...\n  case UO_Plus:\n  case UO_Minus:\n    // ...\n    return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{n,16249,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  // ...\n  case UO_Not: // bitwise complement\n    // ...\n    // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n    if (resultType->isComplexType() || resultType->isComplexIntegerType())\n    // ...\n    else if (resultType->hasIntegerRepresentation())\n    // ...\n    else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n      // ...\n      if (!T->isIntegerType())\n        return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{n,16269,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  // ...\n  case UO_Not: // bitwise complement\n    // ...\n    // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.\n    if (resultType->isComplexType() || resultType->isComplexIntegerType())\n    // ...\n    else if (resultType->hasIntegerRepresentation())\n    // ...\n    else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {\n    // ...\n    } else {\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{n,16287,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  // ...\n  case UO_LNot: // logical negation\n    // ...\n    // WebAsembly tables can\'t be used in unary expressions.\n    if (resultType->isPointerType() && resultType->getPointeeType().isWebAssemblyReferenceType()) {\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{n,16297,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  // ...\n  case UO_LNot: // logical negation\n    // ...\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n      // C99 6.5.3.3p1: ok, fallthrough;\n      if (Context.getLangOpts().CPlusPlus) {\n      // ...\n      } else if (Context.getLangOpts().OpenCL && Context.getLangOpts().OpenCLVersion < 120) {\n        // OpenCL v1.1 6.3.h: The logical operator not (!) does not\n        // operate on scalar float types.\n        if (!resultType->isIntegerType() && !resultType->isPointerType())\n          return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{n,16306,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  // ...\n  case UO_LNot: // logical negation\n    // ...\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n    // ...\n    } else if (resultType->isExtVectorType()) {\n      if (Context.getLangOpts().OpenCL && Context.getLangOpts().getOpenCLCompatibleVersion() < 120) {\n        // ...\n        if (!T->isIntegerType())\n          return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{n,16313,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  // ...\n  case UO_LNot: // logical negation\n    // ...\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n    // ...\n    } else if (resultType->isExtVectorType()) {\n    // ...\n    } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n      // ...\n      if (VTy->getVectorKind() != VectorType::GenericVector)\n        return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"},{n,16580,"ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr, bool IsAfterAmp) {\n  // ...\n  case UO_LNot: // logical negation\n    // ...\n    if (resultType->isScalarType() && !isScopedEnumerationType(resultType)) {\n    // ...\n    } else if (resultType->isExtVectorType()) {\n    // ...\n    } else if (Context.getLangOpts().CPlusPlus && resultType->isVectorType()) {\n    // ...\n    } else {\n      return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange());"}},
[l]={
["clang/test/Sema/vector-ops.c"]={"clang/test/Sema/vector-ops.c:13:10: error: invalid argument type \'v2f\' (vector of 2 \'float\' values) to unary expression"}
}
},
["err_typecheck_vector_lengths_not_equal"]={
[b]="err_typecheck_vector_lengths_not_equal",
[c]="vector operands do not have the same number of elements (%0 and %1)",
[d]="vector operands do not have the same number of elements (A and B)",
[e]=k,
[g]="vector operands do not have the same number of elements \\((.*?) and (.*?)\\)",
[h]=a,
[i]=m,
[f]={"c65605d008dd",1423201495,"OpenCL: handle shift operator with vector operands","OpenCL: handle shift operator with vector operands\n\nIntroduce a number of checks:\n1. If LHS is a scalar, then RHS cannot be a vector.\n2. Operands must be of integer type.\n3. If both are vectors, then the number of elements must match.\n\nRelax the requirement for \"usual arithmetic conversions\":\nWhen LHS is a vector, a scalar RHS can simply be expanded into a\nvector; OpenCL does not require that its rank be lower than the LHS.\nFor example, the following code is not an error even if the implicit\ntype of the constant literal is \"int\".\n\n  char2 foo(char2 v) { return v << 1; }\n\nConsolidate existing tests under CodeGenOpenCL, and add more tests\nunder SemaOpenCL.\n\nllvm-svn: 228382"},
[j]={{n,11239,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  // ...\n if (LHSType->isVLSTBuiltinType() && RHSType->isVLSTBuiltinType() && Context.getBuiltinVectorTypeInfo(LHSBuiltinTy).EC != Context.getBuiltinVectorTypeInfo(RHSBuiltinTy).EC) {\n    Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,12149,"/// Return the resulting type when a vector is shifted\n///        by a scalar or vector shift amount.\nstatic QualType checkVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // ...\n  if (!LHSVecTy) {\n  // ...\n  } else if (RHSVecTy) {\n    // OpenCL v1.1 s6.3.j says that for vector types, the operators\n    // are applied component-wise. So if RHS is a vector, then ensure\n    // that the number of elements is the same as LHS...\n    if (RHSVecTy->getNumElements() != LHSVecTy->getNumElements()) {\n      S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHS.get()->getType() << RHS.get()->getType() << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,12323,"static QualType checkSizelessVectorShift(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) {\n  // ...\n  if (!LHSType->isVLSTBuiltinType()) {\n  // ...\n  } else if (RHSBuiltinTy && RHSBuiltinTy->isVLSTBuiltinType()) {\n    if (S.Context.getTypeSize(RHSBuiltinTy) != S.Context.getTypeSize(LHSBuiltinTy)) {\n      S.Diag(Loc, diag::err_typecheck_vector_lengths_not_equal) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[l]={
["clang/test/Sema/shift.c"]={"clang/test/Sema/shift.c:82:11: error: vector operands do not have the same number of elements (\'vec16\' (vector of 4 \'unsigned int\' values) and \'vec8\' (vector of 2 \'unsigned int\' values))"}
}
},
["err_typecheck_vector_not_convertable"]={
[b]="err_typecheck_vector_not_convertable",
[c]="cannot convert between vector values of different size (%0 and %1)",
[d]="cannot convert between vector values of different size (A and B)",
[e]=k,
[g]="cannot convert between vector values of different size \\((.*?) and (.*?)\\)",
[h]=a,
[i]=m,
[f]={ob,1236199783,mb,nb},
[j]={{n,11109,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // ...\n  unsigned DiagID = diag::err_typecheck_vector_not_convertable;"}},
[l]={
["clang/test/Sema/ext_vector_casts.c"]={"clang/test/Sema/ext_vector_casts.c:25:10: error: cannot convert between vector values of different size (\'float3\' (vector of 3 \'float\' values) and \'float2\' (vector of 2 \'float\' values))","clang/test/Sema/ext_vector_casts.c:26:10: error: cannot convert between vector values of different size (\'float4\' (vector of 4 \'float\' values) and \'float3\' (vector of 3 \'float\' values))","clang/test/Sema/ext_vector_casts.c:49:11: error: cannot convert between vector values of different size (\'int4\' (vector of 4 \'int\' values) and \'float4\' (vector of 4 \'float\' values))","clang/test/Sema/ext_vector_casts.c:107:11: error: cannot convert between vector values of different size (\'short8\' (vector of 8 \'short\' values) and \'float\')","clang/test/Sema/ext_vector_casts.c:111:11: error: cannot convert between vector values of different size (\'int4\' (vector of 4 \'int\' values) and \'double\')"}
}
},
["err_typecheck_vector_not_convertable_implict_truncation"]={
[b]={{nil,E,"err_typecheck_vector_not_convertable_implict_truncation"}},
[c]={{nil,E,"cannot convert between %select{scalar|vector}0 type %1 and vector type %2 as implicit conversion would cause truncation"}},
[d]={{nil,E,{"cannot convert between ",{"scalar","vector"}," type B and vector type C as implicit conversion would cause truncation"}}},
[e]=k,
[g]="cannot convert between (?:scalar|vector) type (.*?) and vector type (.*?) as implicit conversion would cause truncation",
[h]=a,
[i]={{nil,E,m}},
[f]={"7cd5876e6031",1494616266,"[Sema] Support implicit scalar to vector conversions","[Sema] Support implicit scalar to vector conversions\n\nThis patch teaches clang to perform implicit scalar to vector conversions\nwhen one of the operands of a binary vector expression is a scalar which\ncan be converted to the element type of the vector without truncation\nfollowing GCC\'s implementation.\n\nIf the (constant) scalar is can be casted safely, it is implicitly casted to the\nvector elements type and splatted to produce a vector of the same type.\n\nContributions from: Petar Jovanovic\n\nReviewers: bruno, vkalintiris\n\nDifferential Revision: https://reviews.llvm.org/D25866\n\nllvm-svn: 302935"},
[j]={{n,11194,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // ...\n  // If there is a vector type that is not a ExtVector and a scalar, we reach\n  // this point if scalar could not be converted to the vector\'s element type\n  // without truncation.\n  if ((RHSVecType && !isa<ExtVectorType>(RHSVecType)) || (LHSVecType && !isa<ExtVectorType>(LHSVecType))) {\n    // ...\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"},{n,11272,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  // ...\n  if (LHSType->isVLSTBuiltinType() || RHSType->isVLSTBuiltinType()) {\n    // ...\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_implict_truncation) << ScalarOrVector << Scalar << Vector;"}},
[l]={
["clang/test/SemaCXX/vector-no-lax.cpp"]={"clang/test/SemaCXX/vector-no-lax.cpp:7:5: error: cannot convert between vector type \'vUInt32\' (vector of 4 \'unsigned int\' values) and vector type \'vSInt32\' (vector of 4 \'int\' values) as implicit conversion would cause truncation"}
}
},
["err_typecheck_vector_not_convertable_non_scalar"]={
[b]="err_typecheck_vector_not_convertable_non_scalar",
[c]="cannot convert between vector and non-scalar values (%0 and %1)",
[d]="cannot convert between vector and non-scalar values (A and B)",
[e]=k,
[g]="cannot convert between vector and non\\-scalar values \\((.*?) and (.*?)\\)",
[h]=a,
[i]=m,
[f]={"d07dcdb9588b",1389081571,"For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types","For areVectorOperandsLaxBitCastable(), only return false if both opearands are vector types\nand add a diagnostic when the operand is a vector and non-scalar value.\n\nrdar://15722301\n\nllvm-svn: 198680"},
[j]={{n,11147,"QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, bool AllowBothBool, bool AllowBoolConversions, bool AllowBoolOperation, bool ReportInvalid) {\n  // ...\n  // If there\'s a non-vector, non-real operand, diagnose that.\n  if ((!RHSVecType && !RHSType->isRealType()) || (!LHSVecType && !LHSType->isRealType())) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"},{n,11227,"QualType Sema::CheckSizelessVectorOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign, ArithConvKind OperationKind) {\n  // ...\n  if ((!LHSType->isVLSTBuiltinType() && !LHSType->isRealType()) || (!RHSType->isVLSTBuiltinType() && !RHSType->isRealType())) {\n    Diag(Loc, diag::err_typecheck_vector_not_convertable_non_scalar) << LHSType << RHSType << LHS.get()->getSourceRange() << RHS.get()->getSourceRange();"}},
[l]={
["clang/test/SemaCXX/vector-casts.cpp"]={"clang/test/SemaCXX/vector-casts.cpp:62:11: error: cannot convert between vector and non-scalar values (\'__v2si\' (vector of 2 \'int\' values) and \'testvec\')","clang/test/SemaCXX/vector-casts.cpp:65:11: error: cannot convert between vector and non-scalar values (\'__v2si\' (vector of 2 \'int\' values) and \'testvec\')"}
}
},
["err_typecheck_wasm_table_must_have_zero_length"]={
[b]="err_typecheck_wasm_table_must_have_zero_length",
[c]="only zero-length WebAssembly tables are currently supported",
[d]="only zero-length WebAssembly tables are currently supported",
[e]=k,
[g]="only zero\\-length WebAssembly tables are currently supported",
[h]=a,
[i]=y,
[f]={sb,1625925174,qb,rb},
[j]={{t,8671,"void Sema::CheckVariableDeclarationType(VarDecl *NewVD) {\n  // ...\n  // WebAssembly tables must be static with a zero length and can\'t be\n  // declared within functions.\n  if (T->isWebAssemblyTableType()) {\n    // ...\n    if (!ATy || ATy->getSize().getSExtValue() != 0) {\n      Diag(NewVD->getLocation(), diag::err_typecheck_wasm_table_must_have_zero_length);"}},
[l]={
["clang/test/Sema/wasm-refs-and-tables.c"]={"clang/test/Sema/wasm-refs-and-tables.c:15:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:16:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:17:22: error: only zero-length WebAssembly tables are currently supported","clang/test/Sema/wasm-refs-and-tables.c:24:22: error: only zero-length WebAssembly tables are currently supported"}
}
},
["err_typecheck_zero_array_size"]={
[b]="err_typecheck_zero_array_size",
[c]={{nil,z,"zero-length arrays are not permitted in %select{C++|SYCL device code}0"},{B,nil,"zero-length arrays are not permitted in C++"}},
[d]={{nil,z,{"zero-length arrays are not permitted in ",{"C++","SYCL device code"}}},{B,nil,"zero-length arrays are not permitted in C++"}},
[e]=k,
[g]="zero\\-length arrays are not permitted in (?:C\\+\\+|SYCL device code)",
[h]=a,
[i]=m,
[f]={"d5cb1ddb2cf4",1269744163,"After performing template argument deduction for a function template,","After performing template argument deduction for a function template,\ncheck deduced non-type template arguments and template template\narguments against the template parameters for which they were deduced,\nperforming conversions as appropriate so that deduced template\narguments get the same treatment as explicitly-specified template\narguments. This is the bulk of PR6723.\n\nAlso keep track of whether deduction of a non-type template argument\ncame from an array bound (vs. anywhere else). With this information,\nwe enforce C++ [temp.deduct.type]p17, which requires exact type\nmatches when deduction deduces a non-type template argument from\nsomething that is not an array bound.\n\nFinally, when in a SFINAE context, translate the \"zero sized\narrays are an extension\" extension diagnostic into a hard error (for\nbetter standard conformance), which was a minor part of PR6723.\n\nllvm-svn: 99734"},
[j]={{"clang/lib/Sema/SemaSYCL.cpp",55,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n  // ...\n  auto Check = [&](QualType TypeToCheck, const ValueDecl *D) {\n    // ...\n    if (isZeroSizedArray(*this, TypeToCheck)) {\n      SYCLDiagIfDeviceCode(UsedAt, diag::err_typecheck_zero_array_size) << 1;"},{F,2648,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // ...\n  if (!ArraySize) {\n  // ...\n  } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n  // ...\n  } else {\n    // ...\n    if (!R.isUsable()) {\n    // ...\n    } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n    // ...\n    } else {\n      // ...\n      if (ConstVal == 0 && !T.isWebAssemblyReferenceType()) {\n        // ...\n        Diag(ArraySize->getBeginLoc(), isSFINAEContext() ? diag::err_typecheck_zero_array_size : diag::ext_typecheck_zero_array_size) << 0 << ArraySize->getSourceRange();"}},
[l]={
["clang/test/SemaSYCL/zero-length-arrays.cpp"]={K,K,K,K,K,K,K,K,K,K,K,K,K,K,K,K,K,K,"clang/test/SemaSYCL/zero-length-arrays.cpp:69:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:70:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:72:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:77:26: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:14: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:84:16: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:89:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:89:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:99:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:99:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:101:13: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:101:13: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:108:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:108:32: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:53:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:53:11: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:19:8: error: zero-length arrays are not permitted in SYCL device code","clang/test/SemaSYCL/zero-length-arrays.cpp:19:8: error: zero-length arrays are not permitted in SYCL device code"}
}
},
["err_typedef_changes_linkage"]={
[b]="err_typedef_changes_linkage",
[c]={{nil,s,"unsupported: anonymous 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"},{u,nil,"unsupported: typedef changes linkage of anonymous type, but linkage was already computed"}},
[d]={{nil,s,{"unsupported: anonymous 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"}},{u,nil,"unsupported: typedef changes linkage of anonymous type, but linkage was already computed"}},
[e]=k,
[g]="unsupported\\: anonymous 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",
[h]=a,
[i]=m,
[f]={"2575d8805927",1391044373,"Diagnose typedef names for linkage purposes that would change","Diagnose typedef names for linkage purposes that would change\na previously-computed linkage as an unsupportable error condition.\n\nPer discussion on cfe-commits, this appears to be a\ndifficult-to-resolve flaw in our implementation approach;\nwe may pursue this as a language defect, but for now it\'s\nbetter to diagnose it as unsupported than to produce\ninconsistent results (or assertions).  Anything that we can\ndo to limit how often this diagnostic fires, such as the\nchanges in r200380, is probably for the best, though.\n\nllvm-svn: 200438"},
[j]={{t,5015,"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        DiagID = diag::err_typedef_changes_linkage;"}},
[l]={
["clang/test/SemaCXX/anonymous-struct.cpp"]={"clang/test/SemaCXX/anonymous-struct.cpp:115:17: error: unsupported: anonymous 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/SemaCXX/anonymous-struct.cpp:131:17: error: unsupported: anonymous 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"}
}
},
["err_typedef_not_bitfield"]={
[b]="err_typedef_not_bitfield",
[c]="typedef member %0 cannot be a bit-field",
[d]="typedef member A cannot be a bit-field",
[e]=k,
[g]="typedef member (.*?) cannot be a bit\\-field",
[h]=a,
[i]=m,
[f]={p,1237025389,q,r},
[j]={{C,3630,"/// 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        Diag(Loc, diag::err_typedef_not_bitfield) << Name << BitWidth->getSourceRange();"}},
[l]={
["clang/test/SemaCXX/class.cpp"]={"clang/test/SemaCXX/class.cpp:33:15: error: typedef member \'E\' cannot be a bit-field"}
}
},
["err_typedef_not_identifier"]={
[b]="err_typedef_not_identifier",
[c]="typedef name must be an identifier",
[d]="typedef name must be an identifier",
[e]=k,
[g]="typedef name must be an identifier",
[h]=a,
[i]=m,
[f]={"d8f446f1b2db",1279003021,"Diagnose typedef of an operator name. Fixes PR7462","Diagnose typedef of an operator name. Fixes PR7462\n\nllvm-svn: 108233"},
[j]={{t,6684,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n  // ...\n  if (D.getName().getKind() != UnqualifiedIdKind::IK_Identifier) {\n    if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName)\n    // ...\n    else\n      Diag(D.getName().StartLocation, diag::err_typedef_not_identifier) << D.getName().getSourceRange();"}},
[l]={
["clang/test/SemaCXX/typedef-redecl.cpp"]={"clang/test/SemaCXX/typedef-redecl.cpp:54:15: error: typedef name must be an identifier"}
}
},
["err_typename_identifiers_only"]={
[b]="err_typename_identifiers_only",
[c]="typename is allowed for identifiers only",
[d]="typename is allowed for identifiers only",
[e]=k,
[g]="typename is allowed for identifiers only",
[h]=a,
[i]=G,
[f]={"882a61a64035",1317047428,"Diagnose attempts to use \'using typename\' with a non-identifier name,","Diagnose attempts to use \'using typename\' with a non-identifier name,\nfrom Stepan Dyatkovskiy. Fixes PR10925.\n\nllvm-svn: 140528"},
[j]={{Sb,830,"/// 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  while (true) {\n    // ...\n    if (InvalidDeclarator)\n    // ...\n    else {\n      // \"typename\" keyword is allowed for identifiers only,\n      // because it may be a type definition.\n      if (D.TypenameLoc.isValid() && D.Name.getKind() != UnqualifiedIdKind::IK_Identifier) {\n        Diag(D.Name.getSourceRange().getBegin(), diag::err_typename_identifiers_only) << FixItHint::CreateRemoval(SourceRange(D.TypenameLoc));"}},
[l]={
["clang/test/SemaTemplate/typename-specifier.cpp"]={"clang/test/SemaTemplate/typename-specifier.cpp:136:47: error: typename is allowed for identifiers only"}
}
},
["err_typename_invalid_constexpr"]={
[b]="err_typename_invalid_constexpr",
[c]={{nil,u,"type name does not allow %select{<ERROR>|constexpr|consteval|constinit}0 specifier to be specified"},{I,I,"type name does not allow %select{constexpr|consteval}0 specifier to be specified"},{R,nil,"type name does not allow constexpr specifier to be specified"}},
[d]={{nil,u,{"type name does not allow ",{"constexpr","consteval","constinit"}," specifier to be specified"}},{I,I,{"type name does not allow ",{"constexpr","consteval"}," specifier to be specified"}},{R,nil,"type name does not allow constexpr specifier to be specified"}},
[e]=k,
[g]="type name does not allow (?:constexpr|consteval|constinit) specifier to be specified",
[h]=a,
[i]=G,
[f]={"c5b05520550a",1331538975,"Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be","Fix parsing of type-specifier-seq\'s. Types are syntactically allowed to be\ndefined here, but not semantically, so\n\n  new struct S {};\n\nis always ill-formed, even if there is a struct S in scope.\n\nWe also had a couple of bugs in ParseOptionalTypeSpecifier caused by it being\nunder-loved (due to it only being used in a few places) so merge it into\nParseDeclarationSpecifiers with a new DeclSpecContext. To avoid regressing, this\nrequired improving ParseDeclarationSpecifiers\' diagnostics in some cases. This\nalso required teaching ParseSpecifierQualifierList about constexpr... which\nincidentally fixes an issue where we\'d allow the constexpr specifier in other\nbad places.\n\nllvm-svn: 152549"},
[j]={{Z,2688,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // ...\n  // Issue diagnostic and remove constexpr specifier if present.\n  if (DS.hasConstexprSpecifier() && DSC != DeclSpecContext::DSC_condition) {\n    Diag(DS.getConstexprSpecLoc(), diag::err_typename_invalid_constexpr) << static_cast<int>(DS.getConstexprSpecifier());"}},
[l]={
[vc]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:20:13: error: type name does not allow constexpr specifier to be specified"}
}
},
["err_typename_invalid_functionspec"]={
[b]="err_typename_invalid_functionspec",
[c]="type name does not allow function specifier to be specified",
[d]="type name does not allow function specifier to be specified",
[e]=k,
[g]="type name does not allow function specifier to be specified",
[h]=a,
[i]=G,
[f]={ob,1236199783,mb,nb},
[j]={{Z,2676,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // ...\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    if (DS.isInlineSpecified())\n      Diag(DS.getInlineSpecLoc(), diag::err_typename_invalid_functionspec);"},{Z,2678,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // ...\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    // ...\n    if (DS.isVirtualSpecified())\n      Diag(DS.getVirtualSpecLoc(), diag::err_typename_invalid_functionspec);"},{Z,2680,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // ...\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    // ...\n    if (DS.hasExplicitSpecifier())\n      Diag(DS.getExplicitSpecLoc(), diag::err_typename_invalid_functionspec);"},{Z,2682,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // ...\n  // Issue diagnostic and remove function specifier if present.\n  if (Specs & DeclSpec::PQ_FunctionSpecifier) {\n    // ...\n    if (DS.isNoreturnSpecified())\n      Diag(DS.getNoreturnSpecLoc(), diag::err_typename_invalid_functionspec);"}},
[l]={
[vc]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:14:13: error: type name does not allow function specifier to be specified","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:15:13: error: type name does not allow function specifier to be specified","clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:16:13: error: type name does not allow function specifier to be specified"}
}
},
["err_typename_invalid_storageclass"]={
[b]="err_typename_invalid_storageclass",
[c]="type name does not allow storage class to be specified",
[d]="type name does not allow storage class to be specified",
[e]=k,
[g]="type name does not allow storage class to be specified",
[h]=a,
[i]=G,
[f]={ob,1236199783,mb,nb},
[j]={{Z,2666,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // ...\n  // Issue diagnostic and remove storage class if present.\n  if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n    if (DS.getStorageClassSpecLoc().isValid())\n      Diag(DS.getStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"},{Z,2669,"/// ParseSpecifierQualifierList\n///        specifier-qualifier-list:\n///          type-specifier specifier-qualifier-list[opt]\n///          type-qualifier specifier-qualifier-list[opt]\n/// [GNU]    attributes    specifier-qualifier-list[opt]\n///\nvoid Parser::ParseSpecifierQualifierList(DeclSpec &DS, ImplicitTypenameContext AllowImplicitTypename, AccessSpecifier AS, DeclSpecContext DSC) {\n  // ...\n  // Issue diagnostic and remove storage class if present.\n  if (Specs & DeclSpec::PQ_StorageClassSpecifier) {\n    if (DS.getStorageClassSpecLoc().isValid())\n    // ...\n    else\n      Diag(DS.getThreadStorageClassSpecLoc(), diag::err_typename_invalid_storageclass);"}},
[l]={
[vc]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.typedef/p2-0x.cpp:19:13: error: type name does not allow storage class to be specified"}
}
},
["err_typename_missing"]={
[b]="err_typename_missing",
[c]="missing \'typename\' prior to dependent type name \'%0%1\'",
[d]="missing \'typename\' prior to dependent type name \'AB\'",
[e]=k,
[g]="missing \'typename\' prior to dependent type name \'(.*?)(.*?)\'",
[h]=a,
[i]=m,
[f]={"15e5602e5998",1255476442,"Improve diagnostics when the parser encounters a declarator with an","Improve diagnostics when the parser encounters a declarator with an\nunknown type name, e.g.,\n\n  foo::bar x;\n\nwhen \"bar\" does not refer to a type in \"foo\". \n\nWith this change, the parser now calls into the action to perform\ndiagnostics and can try to recover by substituting in an appropriate\ntype. For example, this allows us to easily diagnose some missing\n\"typename\" specifiers, which we now do:\n\n  test/SemaCXX/unknown-type-name.cpp:29:1: error: missing \'typename\'\n        prior to dependent type name \'A<T>::type\'\n  A<T>::type A<T>::f() { return type(); }\n  ^~~~~~~~~~\n  typename \n\nFixes PR3990.\n\nllvm-svn: 84053"},
[j]={{t,819,"void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, SourceLocation IILoc, Scope *S, CXXScopeSpec *SS, ParsedType &SuggestedType, bool IsTemplateName) {\n  // ...\n  if (!SS || (!SS->isSet() && !SS->isInvalid()))\n  // ...\n  else if (DeclContext *DC = computeDeclContext(*SS, false))\n  // ...\n  else if (SS->isValid() && SS->getScopeRep()->containsErrors()) {\n  // ...\n  } else if (isDependentScopeSpecifier(*SS)) {\n    unsigned DiagID = diag::err_typename_missing;"},{n,2878,"/// BuildQualifiedDeclarationNameExpr - Build a C++ qualified\n/// declaration name, generally during template instantiation.\n/// There\'s a large number of things which don\'t need to be done along\n/// this path.\nExprResult Sema::BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, bool IsAddressOfOperand, const Scope *S, TypeSourceInfo **RecoveryTSI) {\n  // ...\n  if (const TypeDecl *TD = R.getAsSingle<TypeDecl>()) {\n    // ...\n    unsigned DiagID = diag::err_typename_missing;"}},
[l]={
["clang/test/SemaCXX/PR11358.cpp"]={"clang/test/SemaCXX/PR11358.cpp:15:7: error: missing \'typename\' prior to dependent type name \'Container::iterator\'","clang/test/SemaCXX/PR11358.cpp:31:10: error: missing \'typename\' prior to dependent type name \'hash_map<KeyType, ValueType>::const_iterator\'","clang/test/SemaCXX/PR11358.cpp:47:7: error: missing \'typename\' prior to dependent type name \'Container::iterator\'"}
}
},
},
["err_typename_missing_template"]={
["err_pp_invalid_tok_in_arg_list"]={
[b]={{nil,E,"err_typename_missing_template"}},
[d]="err_pp_invalid_tok_in_arg_list",
[c]={{nil,E,"missing \'typename\' prior to dependent type template name \'%0%1\'"}},
[e]="invalid token in macro parameter list",
[d]={{nil,E,"missing \'typename\' prior to dependent type template name \'AB\'"}},
[i]="invalid token in macro parameter list",
[e]=k,
[j]=k,
[g]="missing \'typename\' prior to dependent type template name \'(.*?)(.*?)\'",
[c]="invalid token in macro parameter list",
[h]=a,
[h]=a,
[i]={{nil,E,m}},
[g]=x,
[f]={"62559bd7ce0c",1485984998,"Fix hole in our enforcement of rule requiring \'typename\' prior to a dependent","Fix hole in our enforcement of rule requiring \'typename\' prior to a dependent\nname. If the dependent name happened to end in a template-id (X<T>::Y<U>), we\nwould fail to notice that the \'typename\' keyword is missing when resolving it\nto a type.\n\nIt turns out that GCC has a similar bug. If this shows up in much real code, we\ncan easily downgrade this to an ExtWarn.\n\nllvm-svn: 293815"},
[f]={t,1236199783,r,s},
[j]={{o,4153,"TypeResult Sema::ActOnTemplateIdType(Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, IdentifierInfo *TemplateII, SourceLocation TemplateIILoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, bool IsCtorOrDtorName, bool IsClassName, ImplicitTypenameContext AllowImplicitTypename) {\n  // ...\n  if (!IsCtorOrDtorName && !IsClassName && SS.isSet()) {\n    // ...\n    // C++ [temp.res]p3:\n   //   A qualified-id that refers to a type and in which the\n    //  nested-name-specifier depends on a template-parameter (14.6.2)\n    //  shall be prefixed by the keyword typename to indicate that the\n    //  qualified-id denotes a type, forming an\n    //  elaborated-type-specifier (7.1.5.3).\n   if (!LookupCtx && isDependentScopeSpecifier(SS)) {\n     // C++2a relaxes some of those restrictions in [temp.res]p5.\n      if (AllowImplicitTypename == ImplicitTypenameContext::Yes) {\n      // ...\n      } else\n        Diag(SS.getBeginLoc(), diag::err_typename_missing_template) << SS.getScopeRep() << TemplateII->getName();"}}
[b]={{I,2707,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read. Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    default:\n     // ...\n     if (!II) {\n       // ...\n        Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);"}}
}
}
};
};
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