Module:ClangDiags/DiagsLongData6: 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="regex3";
local b="message_hist";
local c="category_hist";
local c="hierarchical_hist";
local d="id_hist";
local d="(?:error|fatal error)\\: ";
local e="message_hist";
local e="regex1";
local f="hierarchical_hist";
local f="regex2";
local g="regex1";
local g="regex3";
local h="regex2";
local h="commit";
local i="source";
local i="category_hist";
local j="commit";
local j="id_hist";
local k="(?:error|fatal error)\\: ";
local k="source";
local l="tests2";
local l="tests2";
local m="Semantic Issue";
local m="clang/lib/Sema/SemaOpenMP.cpp";
local n="5.0";
local n="OpenMP Issue";
local o="10.0";
local o="11.0";
local p="Lexical or Preprocessor Issue";
local p="10.0";
local q="b1c4d5507fad";
local q="Semantic Issue";
local r="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local r="13.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 s="14.0";
local t="11.0";
local t="clang/lib/Parse/ParseOpenMP.cpp";
local u="8.0";
local u="Parse Issue";
local v="clang/lib/Parse/ParsePragma.cpp";
local v="9.0";
local w="clang/lib/Sema/SemaDeclCXX.cpp";
local w="16.0";
local x="9.0";
local x="clang/lib/AST/ASTStructuralEquivalence.cpp";
local y="Parse Issue";
local y="8.0";
local z="clang/lib/Lex/PPDirectives.cpp";
local z="clang/lib/Sema/SemaDeclObjC.cpp";
local A="12.0";
local A="12.0";
local B="6.0";
local B="clang/lib/Parse/ParseObjc.cpp";
local C="15.0";
local C="None";
local D="clang/lib/Sema/SemaDecl.cpp";
local D="Generics Issue";
local E="clang/lib/Sema/SemaOverload.cpp";
local E="15.0";
local F="14.0";
local F="[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 G="clang/lib/Serialization/ASTReader.cpp";
local G="clang/lib/Sema/SemaObjCProperty.cpp";
local H="clang/lib/Lex/Pragma.cpp";
local H="[WebAssembly] Improve clang diagnostics for wasm attributes";
local I="clang/lib/Sema/SemaChecking.cpp";
local I="931fcd3ba011";
local J="clang/lib/Sema/SemaAttr.cpp";
local J="clang/lib/Sema/SemaExprObjC.cpp";
local K="7.0";
local K="clang/lib/Sema/SemaType.cpp";
local L="Update tablegen diagnostic files to be in sync with the def files.";
local L="6.0";
local M="5a8987ca5113";
local M="clang/test/SemaObjC/parameterized_classes.m";
local N="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local N="clang/lib/Sema/SemaExpr.cpp";
local O="clang/lib/Sema/SemaExpr.cpp";
local O="clang/lib/Sema/SemaPseudoObject.cpp";
local P="clang/lib/Sema/SemaInit.cpp";
local P="5.0";
local Q="clang/lib/Sema/SemaExprCXX.cpp";
local Q="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local R="0a849f47d2f7";
local R="b1c4d5507fad";
local S="None";
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="Add #pragma clang attribute\n\nThe new \'#pragma clang attribute\' directive can be used to apply attributes to\nmultiple declarations. An attribute must satisfy the following conditions to\nbe supported by the pragma:\n- It must have a subject list that\'s defined in the TableGen file.\n- It must be documented.\n- It must not be late parsed.\n- It must have a GNU/C++11 spelling.\n\nDifferential Revision: https://reviews.llvm.org/D30009\n\nllvm-svn: 300539";
local T="Fix declare target implementation to support enter.";
local U="Add #pragma clang attribute";
local U="clang/test/OpenMP/declare_target_messages.cpp";
local V="13.0";
local V="Parsing, semantic analysis, and AST for Objective-C type parameters.";
local W="clang/lib/Sema/SemaTemplate.cpp";
local W="Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,";
local X="AST Deserialization Issue";
local X="Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,\nNSNumber, and boolean literals. This includes both Sema and Codegen support.\nIncluded is also support for new Objective-C container subscripting.\n\nMy apologies for the large patch.  It was very difficult to break apart.\nThe patch introduces changes to the driver as well to cause clang to link\nin additional runtime support when needed to support the new language features.\n\nDocs are forthcoming to document the implementation and behavior of these features.\n\nllvm-svn: 152137";
local Y="clang/test/Parser/pragma-attribute.cpp";
local Y="85f3f9513dbc";
local Z="clang/lib/Lex/PPExpressions.cpp";
local Z="Parsing, semantic analysis, and AST for Objective-C type parameters.\n\nProduce type parameter declarations for Objective-C type parameters,\nand attach lists of type parameters to Objective-C classes,\ncategories, forward declarations, and extensions as\nappropriate. Perform semantic analysis of type bounds for type\nparameters, both in isolation and across classes/categories/extensions\nto ensure consistency.\n\nAlso handle (de-)serialization of Objective-C type parameter lists,\nalong with sundry other things one must do to add a new declaration to\nClang.\n\nNote that Objective-C type parameters are typedef name declarations,\nlike typedefs and C++11 type aliases, in support of type erasure.\n\nPart of rdar://problem/6294649.\n\nllvm-svn: 241541";
local ab="clang/lib/Lex/PPMacroExpansion.cpp";
local ab="e65b086e07a6";
local bb="clang/lib/Sema/SemaDeclObjC.cpp";
local bb="Handle Objective-C type arguments.";
local cb="Mass-rename the handful of error_* diagnostics to err_*.";
local cb="e9d95f1ecc98";
local db="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";
local db="Handle Objective-C type arguments.\n\nObjective-C type arguments can be provided in angle brackets following\nan Objective-C interface type. Syntactically, this is the same\nposition as one would provide protocol qualifiers (e.g.,\nid<NSCopying>), so parse both together and let Sema sort out the\nambiguous cases. This applies both when parsing types and when parsing\nthe superclass of an Objective-C class, which can now be a specialized\ntype (e.g., NSMutableArray<T> inherits from NSArray<T>).\n\nCheck Objective-C type arguments against the type parameters of the\ncorresponding class. Verify the length of the type argument list and\nthat each type argument satisfies the corresponding bound.\n\nSpecializations of parameterized Objective-C classes are represented\nin the type system as distinct types. Both specialized types (e.g.,\nNSArray<NSString *> *) and unspecialized types (NSArray *) are\nrepresented, separately.\n\nllvm-svn: 241542";
local eb="f881267db9a9";
local eb="clang/lib/Sema/SemaDeclAttr.cpp";
local fb="Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545";
local fb="clang/lib/Sema/SemaStmt.cpp";
local gb="95f50964fbf5";
local gb="Let clang atomic builtins fetch add/sub support floating point types";
local hb="clang/lib/Sema/SemaExprMember.cpp";
local hb="61d065e21ff3";
local ib="Implement P2361 Unevaluated string literals";
local ib="f9c3310d32c6";
local jb="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 jb="[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";
local kb="Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit";
local kb="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 lb="739b410f1ff5";
local lb="[OPENMP]Fix PR49366: crash on VLAs in task untied regions.";
local mb="clang/lib/Basic/Targets/PPC.cpp";
local mb="11.1";
local nb="invalid";
local nb="clang/test/OpenMP/atomic_messages.c";
local ob="clang/lib/Sema/SemaType.cpp";
local ob="[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";
local pb="931fcd3ba011";
local pb="a8e9d2eccc6e";
local qb="clang/lib/Sema/SemaExprObjC.cpp";
local qb="69350e569dc4";
local rb="clang/lib/Sema/SemaTemplateVariadic.cpp";
local rb="[OPENMP] Loop canonical form analysis (Sema)";
local sb="[WebAssembly] Improve clang diagnostics for wasm attributes";
local sb="[C++20][Modules][3/8] Initial handling for module partitions.";
local tb="16.0";
local tb="[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";
local ub="[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 ub="clang/test/OpenMP/declare_variant_messages.c";
local vb="clang/test/SemaCXX/overloaded-operator-decl.cpp";
local vb="clang/test/OpenMP/declare_mapper_messages.cpp";
local wb=" B";
local wb="clang/test/OpenMP/interop_messages.cpp";
local xb="clang/lib/Sema/SemaObjCProperty.cpp";
local xb="c094e7dc4b3f";
local yb="clang/lib/Parse/ParseDecl.cpp";
local yb="[SYCL] Add sycl_kernel attribute for accelerated code outlining\n\nSYCL is single source offload programming model relying on compiler to\nseparate device code (i.e. offloaded to an accelerator) from the code\nexecuted on the host.\n\nHere is code example of the SYCL program to demonstrate compiler\noutlining work:\n\n```\nint foo(int x) { return ++x; }\nint bar(int x) { throw std::exception(\"CPU code only!\"); }\n...\nusing namespace cl::sycl;\nqueue Q;\nbuffer<int, 1> a(range<1>{1024});\nQ.submit([&](handler& cgh) {\n  auto A = a.get_access<access::mode::write>(cgh);\n  cgh.parallel_for<init_a>(range<1>{1024}, [=](id<1> index) {\n    A[index] = index[0] + foo(42);\n  });\n}\n...\n```\n\nSYCL device compiler must compile lambda expression passed to\ncl::sycl::handler::parallel_for method and function foo called from this\nlambda expression for an \"accelerator\". SYCL device compiler also must\nignore bar function as it\'s not required for offloaded code execution.\n\nThis patch adds the sycl_kernel attribute, which is used to mark code\npassed to cl::sycl::handler::parallel_for as \"accelerated code\".\n\nAttribute must be applied to function templates which parameters include\nat least \"kernel name\" and \"kernel function object\". These parameters\nwill be used to establish an ABI between the host application and\noffloaded part.\n\nReviewers: jlebar, keryell, Naghasan, ABataev, Anastasia, bader, aaron.ballman, rjmccall, rsmith\n\nReviewed By: keryell, bader\n\nSubscribers: mgorny, OlegM, ArturGainullin, agozillon, aaron.ballman, ebevhan, Anastasia, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D60455\n\nSigned-off-by: Alexey Bader <alexey.bader@intel.com>";
local zb="expected \'begin\' or \'end\'";
local zb="clang/test/OpenMP/declare_variant_clauses_messages.cpp";
local Ab="[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 Ab="98bfd7f976f1";
local Bb="Refactoring Invocation Issue";
local Bb="clang/test/OpenMP/ordered_messages.cpp";
local Cb="11.1";
local Cb="[SYCL] Add sycl_kernel attribute for accelerated code outlining";
local Db="clang/lib/Lex/PPLexerChange.cpp";
local Db="class";
local Eb="static_cast";
local Eb="clang/test/OpenMP/task_affinity_messages.cpp";
local Fb="d13863008b38";
local Fb="clang/test/OpenMP/declare_simd_messages.cpp";
local Gb="Add #pragma clang module begin/end pragmas and generate them when preprocessing a module.";
local Gb="clang/test/OpenMP/unroll_messages.cpp";
local Hb="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";
local Hb="[OpenMP 5.0] Parsing/sema support for \"omp declare mapper\" directive.\n\nThis patch implements parsing and sema for \"omp declare mapper\"\ndirective. User defined mapper, i.e., declare mapper directive, is a new\nfeature in OpenMP 5.0. It is introduced to extend existing map clauses\nfor the purpose of simplifying the copy of complex data structures\nbetween host and device (i.e., deep copy). An example is shown below:\n\n    struct S {  int len; int *d; };\n    #pragma omp declare mapper(struct S s) map(s, s.d[0:s.len]) // Memory region that d points to is also mapped using this mapper.\n\nContributed-by: Lingda Li <lildmh@gmail.com>\n\nDifferential Revision: https://reviews.llvm.org/D56326\n\nllvm-svn: 352906";
local Ib="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local Ib="clang/test/SemaObjC/objc-container-subscripting.m";
local Jb="14f6bfcb52e7";
local Jb="251e1488e195";
local Kb="clang/lib/Sema/SemaStmt.cpp";
local Kb="[OpenMP 5.0] Parsing/sema support for \"omp declare mapper\" directive.";
local Lb="missing";
local Lb="Nullability Issue";
local Mb="clang/test/Parser/cxx2a-concepts-requires-expr.cpp";
local Nb="clang/lib/Parse/ParseExprCXX.cpp";
local Ob=" option";
local Pb="functional-style cast";
local Qb="C-style cast";
local Rb="clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp";
local Sb="dynamic_cast";
local Tb="reinterpret_cast";
local Ub="Let clang atomic builtins fetch add/sub support floating point types";
local Vb="61d065e21ff3";
local Wb="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";
local Xb="Add explicit attributes to mark functions as having had their";
local Yb="32f5fe1467c4";
local Zb="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 ac="Modules Issue";
local bc="lvalue";
local cc="rvalue";
local dc="clang/lib/Sema/SemaDeclAttr.cpp";
local ec="deleted";
local fc="unavailable";
local gc="__host__ __device__";
local hc="__host__";
local ic="__global__";
local jc="clang/test/Preprocessor/line-directive.c";
local kc="__device__";
local lc="clang/lib/Parse/ParseDeclCXX.cpp";
local mc="Nullability Issue";
local nc="2a20bd1a9457";
local oc="Introduced pragmas for audited nullability regions.";
local pc="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";
local qc="Improve diagnostics for malformed delete operator function declarations.\n\nllvm-svn: 91180";
local rc="fatal error\\: ";
local sc="clang/test/Sema/pragma-arc-cf-code-audited.c";
local tc="clang/lib/Parse/ParseStmt.cpp";
local uc="Improve diagnostics for malformed delete operator function declarations.";
local vc="12308f41e7e2";


return {
return {
["err_operator_arrow_circular"]={
["err_nsobject_attribute"]={
[d]="err_operator_arrow_circular",
[j]="err_nsobject_attribute",
[e]="circular pointer delegation detected",
[b]="\'NSObject\' attribute is for pointer types only",
[f]="circular pointer delegation detected",
[c]="\'NSObject\' attribute is for pointer types only",
[g]=k,
[e]=d,
[h]="circular pointer delegation detected",
[f]="\'NSObject\' attribute is for pointer types only",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={R,1236199783,Q,S},
[i]={{Q,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;"}},
[k]={{eb,2994,"static void handleObjCNSObject(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n    // ...\n   if (!T->isCARCBridgableType()) {\n     S.Diag(TD->getLocation(), diag::err_nsobject_attribute);"},{eb,3001,"static void handleObjCNSObject(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n // ...\n } else if (const auto *PD = dyn_cast<ObjCPropertyDecl>(D)) {\n   // ...\n   if (!T->isCARCBridgableType()) {\n     S.Diag(PD->getLocation(), diag::err_nsobject_attribute);"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/nsobject-attribute.m"]={"clang/test/SemaObjC/nsobject-attribute.m:9:47: error: \'NSObject\' attribute is for pointer types only","clang/test/SemaObjC/nsobject-attribute.m:64:49: error: \'NSObject\' attribute is for pointer types only"}
}
}
},
},
["err_operator_arrow_depth_exceeded"]={
["err_nsreturns_retained_attribute_mismatch"]={
[d]="err_operator_arrow_depth_exceeded",
[j]="err_nsreturns_retained_attribute_mismatch",
[e]="use of \'operator->\' on type %0 would invoke a sequence of more than %1 \'operator->\' calls",
[b]="overriding method has mismatched ns_returns_%select{not_retained|retained}0 attributes",
[f]="use of \'operator->\' on type A would invoke a sequence of more than B \'operator->\' calls",
[c]={{nil,nil,{"overriding method has mismatched ns_returns_",{"not_retained","retained"}," attributes"}}},
[g]=k,
[e]=d,
[h]="use of \'operator\\-\\>\' on type (.*?) would invoke a sequence of more than (.*?) \'operator\\-\\>\' calls",
[f]="overriding method has mismatched ns_returns_(?:not_retained|retained) attributes",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={"ac8dbf0fc70c",1317162936,"objcetive-c-arc: When overriding a method, its ns_consumed patameter","objcetive-c-arc: When overriding a method, its ns_consumed patameter\nattribute must match its overriden method. Same also for\nns_returns_retained/not_retained on the result type.\nThis is one half of // rdar://10187884\n\nllvm-svn: 140649"},
[i]={{Q,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();"}},
[k]={{z,189,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n  // ...\n  if ((NewMethod->hasAttr<NSReturnsRetainedAttr>() != Overridden->hasAttr<NSReturnsRetainedAttr>())) {\n   Diag(NewMethod->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsreturns_retained_attribute_mismatch : diag::warn_nsreturns_retained_attribute_mismatch) << 1;"},{z,198,"void Sema::CheckObjCMethodOverride(ObjCMethodDecl *NewMethod, const ObjCMethodDecl *Overridden) {\n // ...\n if ((NewMethod->hasAttr<NSReturnsNotRetainedAttr>() != Overridden->hasAttr<NSReturnsNotRetainedAttr>())) {\n   Diag(NewMethod->getLocation(), getLangOpts().ObjCAutoRefCount ? diag::err_nsreturns_retained_attribute_mismatch : diag::warn_nsreturns_retained_attribute_mismatch) << 0;"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:129:1: error: overriding method has mismatched ns_returns_not_retained attributes","clang/test/SemaObjC/arc-decls.m:130:1: error: overriding method has mismatched ns_returns_retained attributes"}
}
}
},
},
["err_operator_delete_dependent_param_type"]={
["err_nullability_conflicting"]={
[d]="err_operator_delete_dependent_param_type",
[j]="err_nullability_conflicting",
[e]="%0 cannot take a dependent type as first parameter; use %1 instead",
[b]="nullability specifier %0 conflicts with existing specifier %1",
[f]="A cannot take a dependent type as first parameter; use B instead",
[c]="nullability specifier A conflicts with existing specifier B",
[g]=k,
[e]=d,
[h]="(.*?) cannot take a dependent type as first parameter; use (.*?) instead",
[f]="nullability specifier (.*?) conflicts with existing specifier (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=Lb,
[j]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[h]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++.","Introduce type nullability specifiers for C/C++.\n\nIntroduces the type specifiers __nonnull, __nullable, and\n__null_unspecified that describe the nullability of the pointer type\nto which the specifier appertains. Nullability type specifiers improve\non the existing nonnull attributes in a few ways:\n  - They apply to types, so one can represent a pointer to a non-null\n    pointer, use them in function pointer types, etc.\n  - As type specifiers, they are syntactically more lightweight than\n    __attribute__s or [[attribute]]s.\n  - They can express both the notion of \'should never be null\' and\n  also \'it makes sense for this to be null\', and therefore can more\n  easily catch errors of omission where one forgot to annotate the\n  nullability of a particular pointer (this will come in a subsequent\n  patch).\n\nNullability type specifiers are maintained as type sugar, and\ntherefore have no effect on mangling, encoding, overloading,\netc. Nonetheless, they will be used for warnings about, e.g., passing\n\'null\' to a method that does not accept it.\n\nThis is the C/C++ part of rdar://problem/18868820.\n\nllvm-svn: 240146"},
[i]={{w,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))"}},
[k]={{B,854,"/// Diagnose redundant or conflicting nullability information.\nstatic void diagnoseRedundantPropertyNullability(Parser &P, ObjCDeclSpec &DS, NullabilityKind nullability, SourceLocation nullabilityLoc) {\n  // ...\n  P.Diag(nullabilityLoc, diag::err_nullability_conflicting) << DiagNullabilityKind(nullability, true) << DiagNullabilityKind(DS.getNullability(), true) << SourceRange(DS.getNullabilityLoc());"},{z,4563,"/// Merge type nullability from for a redeclaration of the same entity,\n/// producing the updated type of the redeclared entity.\nstatic QualType mergeTypeNullabilityForRedecl(Sema &S, SourceLocation loc, QualType type, bool usesCSKeyword, SourceLocation prevLoc, QualType prevType, bool prevUsesCSKeyword) {\n  // ...\n  // Easy case: both have nullability.\n  if (nullability.has_value() == prevNullability.has_value()) {\n    // ...\n    S.Diag(loc, diag::err_nullability_conflicting) << DiagNullabilityKind(*nullability, usesCSKeyword) << DiagNullabilityKind(*prevNullability, prevUsesCSKeyword);"},{K,7501,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  while (auto attributed = dyn_cast<AttributedType>(desugared.getTypePtr())) {\n    // Check whether there is already a null\n    if (auto existingNullability = attributed->getImmediateNullability()) {\n      // ...\n      S.Diag(nullabilityLoc, diag::err_nullability_conflicting) << DiagNullabilityKind(nullability, isContextSensitive) << DiagNullabilityKind(*existingNullability, false);"},{K,7516,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  // If there is already a different nullability specifier, complain.\n  // This (unlike the code above) looks through typedefs that might\n  // have nullability specifiers on them, which means we cannot\n  // provide a useful Fix-It.\n  if (auto existingNullability = desugared->getNullability()) {\n    if (nullability != *existingNullability) {\n      S.Diag(nullabilityLoc, diag::err_nullability_conflicting) << DiagNullabilityKind(nullability, isContextSensitive) << DiagNullabilityKind(*existingNullability, false);"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/nullability.m"]={"clang/test/SemaObjC/nullability.m:39:4: error: nullability specifier \'nonnull\' conflicts with existing specifier \'_Nullable\'","clang/test/SemaObjC/nullability.m:45:27: error: nullability specifier \'null_unspecified\' conflicts with existing specifier \'_Nullable\'","clang/test/SemaObjC/nullability.m:48:43: error: nullability specifier \'nullable\' conflicts with existing specifier \'null_unspecified\'","clang/test/SemaObjC/nullability.m:56:27: error: nullability specifier \'null_unspecified\' conflicts with existing specifier \'_Nullable\'","clang/test/SemaObjC/nullability.m:102:13: error: nullability specifier \'nullable\' conflicts with existing specifier \'nonnull\'","clang/test/SemaObjC/nullability.m:102:54: error: nullability specifier \'null_unspecified\' conflicts with existing specifier \'nonnull\'","clang/test/SemaObjC/nullability.m:168:4: error: nullability specifier \'nonnull\' conflicts with existing specifier \'_Nullable\'"}
}
}
},
},
["err_operator_delete_param_type"]={
["err_nullability_cs_multilevel"]={
[d]="err_operator_delete_param_type",
[j]="err_nullability_cs_multilevel",
[e]="first parameter of %0 must have type %1",
[b]="nullability keyword %0 cannot be applied to multi-level pointer type %1",
[f]="first parameter of A must have type B",
[c]="nullability keyword A cannot be applied to multi-level pointer type B",
[g]=k,
[e]=d,
[h]="first parameter of (.*?) must have type (.*?)",
[f]="nullability keyword (.*?) cannot be applied to multi\\-level pointer type (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=Lb,
[j]={vc,1260573802,uc,qc},
[h]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C.","Extend type nullability qualifiers for Objective-C.\n\nIntroduce context-sensitive, non-underscored nullability specifiers\n(nonnull, nullable, null_unspecified) for Objective-C method return\ntypes, method parameter types, and properties.\n\nIntroduce Objective-C-specific semantics, including computation of the\nnullability of the result of a message send, merging of nullability\ninformation from the @interface of a class into its @implementation,\netc .\n\nThis is the Objective-C part of rdar://problem/18868820.\n\nllvm-svn: 240154"},
[i]={{w,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))"}},
[k]={{K,7558,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  // For the context-sensitive keywords/Objective-C property\n  // attributes, require that the type be a single-level pointer.\n  if (isContextSensitive) {\n    // ...\n    if (pointeeType && (pointeeType->isAnyPointerType() || pointeeType->isObjCObjectPointerType() || pointeeType->isMemberPointerType())) {\n      S.Diag(nullabilityLoc, diag::err_nullability_cs_multilevel) << DiagNullabilityKind(nullability, true) << type;"}},
[l]={
[l]={
["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 *\'"}
["clang/test/SemaObjC/nullability.m"]={"clang/test/SemaObjC/nullability.m:37:4: error: nullability keyword \'nonnull\' cannot be applied to multi-level pointer type \'NSFoo **\'","clang/test/SemaObjC/nullability.m:43:19: error: nullability keyword \'nullable\' cannot be applied to multi-level pointer type \'NSFoo **\'","clang/test/SemaObjC/nullability.m:54:19: error: nullability keyword \'nullable\' cannot be applied to multi-level pointer type \'NSFoo **\'","clang/test/SemaObjC/nullability.m:283:22: error: nullability keyword \'nonnull\' cannot be applied to multi-level pointer type \'void * _Nullable[2]\'"}
}
}
},
},
["err_operator_new_default_arg"]={
["err_nullability_nonpointer"]={
[d]="err_operator_new_default_arg",
[j]="err_nullability_nonpointer",
[e]="parameter of %0 cannot have a default argument",
[b]="nullability specifier %0 cannot be applied to non-pointer type %1",
[f]="parameter of A cannot have a default argument",
[c]="nullability specifier A cannot be applied to non-pointer type B",
[g]=k,
[e]=d,
[h]="parameter of (.*?) cannot have a default argument",
[f]="nullability specifier (.*?) cannot be applied to non\\-pointer type (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=Lb,
[j]={"7e0b207e5478",1260726823,"More improvements to checking allocation and deallocation functions.","More improvements to checking allocation and deallocation functions.\n\nllvm-svn: 91244"},
[h]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++.","Introduce type nullability specifiers for C/C++.\n\nIntroduces the type specifiers __nonnull, __nullable, and\n__null_unspecified that describe the nullability of the pointer type\nto which the specifier appertains. Nullability type specifiers improve\non the existing nonnull attributes in a few ways:\n  - They apply to types, so one can represent a pointer to a non-null\n    pointer, use them in function pointer types, etc.\n  - As type specifiers, they are syntactically more lightweight than\n    __attribute__s or [[attribute]]s.\n  - They can express both the notion of \'should never be null\' and\n  also \'it makes sense for this to be null\', and therefore can more\n  easily catch errors of omission where one forgot to annotate the\n  nullability of a particular pointer (this will come in a subsequent\n  patch).\n\nNullability type specifiers are maintained as type sugar, and\ntherefore have no effect on mangling, encoding, overloading,\netc. Nonetheless, they will be used for warnings about, e.g., passing\n\'null\' to a method that does not accept it.\n\nThis is the C/C++ part of rdar://problem/18868820.\n\nllvm-svn: 240146"},
[i]={{w,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();"}},
[k]={{K,7540,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // ...\n  // If this definitely isn\'t a pointer type, reject the specifier.\n  if (!desugared->canHaveNullability() && !(allowOnArrayType && desugared->isArrayType())) {\n    S.Diag(nullabilityLoc, diag::err_nullability_nonpointer) << DiagNullabilityKind(nullability, isContextSensitive) << type;"}},
[l]={
[l]={
[Rb]={"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"}
["clang/test/SemaObjC/block-omitted-return-type.m"]={"clang/test/SemaObjC/block-omitted-return-type.m:16:34: error: nullability specifier \'_Nonnull\' cannot be applied to non-pointer type \'void\'"}
}
}
},
},
["err_operator_new_delete_declared_in_namespace"]={
["err_nullptr_cast"]={
[d]="err_operator_new_delete_declared_in_namespace",
[j]={{nil,w,"err_nullptr_cast"}},
[e]="%0 cannot be declared inside a namespace",
[b]={{nil,w,"cannot cast an object of type %select{\'nullptr_t\' to %1|%1 to \'nullptr_t\'}0"}},
[f]="A cannot be declared inside a namespace",
[c]={{nil,w,{"cannot cast an object of type ",{"\'nullptr_t\' to B","B to \'nullptr_t\'"}}}},
[g]=k,
[e]=d,
[h]="(.*?) cannot be declared inside a namespace",
[f]="cannot cast an object of type (?:\'nullptr_t\' to (.*?)|(.*?) to \'nullptr_t\')",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,w,q}},
[j]={vc,1260573802,uc,qc},
[h]={"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"},
[i]={{w,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();"}},
[k]={{"clang/lib/Sema/SemaCast.cpp",3075,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  // C2x 6.5.4p4:\n  //  The type nullptr_t shall not be converted to any type other than void,\n  //  bool, or a pointer type. No type other than nullptr_t shall be converted\n  //  to nullptr_t.\n  if (SrcType->isNullPtrType()) {\n    // FIXME: 6.3.2.4p2 says that nullptr_t can be converted to itself, but\n    // 6.5.4p4 is a constraint check and nullptr_t is not void, bool, or a\n    // pointer type. We\'re not going to diagnose that as a constraint violation.\n    if (!DestType->isVoidType() && !DestType->isBooleanType() && !DestType->isPointerType() && !DestType->isNullPtrType()) {\n      Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_nullptr_cast) << /*nullptr to type*/ 0 << DestType;"},{"clang/lib/Sema/SemaCast.cpp",3090,"/// Check the semantics of a C-style cast operation, in C.\nvoid CastOperation::CheckCStyleCast() {\n  // ...\n  if (DestType->isNullPtrType() && !SrcType->isNullPtrType()) {\n    Self.Diag(SrcExpr.get()->getExprLoc(), diag::err_nullptr_cast) << /*type to nullptr*/ 1 << SrcType;"}},
[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:8:8: error: \'operator delete\' cannot be declared inside a namespace"}
["clang/test/C/C2x/n3042.c"]={"clang/test/C/C2x/n3042.c:80:14: error: cannot cast an object of type \'int\' to \'nullptr_t\'","clang/test/C/C2x/n3042.c:81:10: error: cannot cast an object of type \'nullptr_t\' to \'float\'","clang/test/C/C2x/n3042.c:82:10: error: cannot cast an object of type \'nullptr_t\' to \'float\'","clang/test/C/C2x/n3042.c:83:14: error: cannot cast an object of type \'int\' to \'nullptr_t\'","clang/test/C/C2x/n3042.c:84:14: error: cannot cast an object of type \'void *\' to \'nullptr_t\'","clang/test/C/C2x/n3042.c:85:14: error: cannot cast an object of type \'int *\' to \'nullptr_t\'"}
}
}
},
},
["err_operator_new_delete_declared_static"]={
["err_objc_array_of_interfaces"]={
[d]="err_operator_new_delete_declared_static",
[j]="err_objc_array_of_interfaces",
[e]="%0 cannot be declared static in global scope",
[b]="array of interface %0 is invalid (probably should be an array of pointers)",
[f]="A cannot be declared static in global scope",
[c]="array of interface A is invalid (probably should be an array of pointers)",
[g]=k,
[e]=d,
[h]="(.*?) cannot be declared static in global scope",
[f]="array of interface (.*?) is invalid \\(probably should be an array of pointers\\)",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={vc,1260573802,uc,qc},
[h]={"669e32f8c0d1",1240797356,"rdar://6827200 - [sema] reject statically allocated arrays of interface types","rdar://6827200 - [sema] reject statically allocated arrays of interface types\n\nUpgrade \"array of interface\" warning to an error.  In addition to being a\nterrible idea, this crashes codegen.\n\nllvm-svn: 70178"},
[i]={{w,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();"}},
[k]={{K,2542,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // ...\n  if (const RecordType *EltTy = T->getAs<RecordType>()) {\n  // ...\n  } else if (T->isObjCObjectType()) {\n    Diag(Loc, diag::err_objc_array_of_interfaces) << T;"}},
[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:12:13: error: \'operator delete\' cannot be declared static in global scope"}
["clang/test/SemaObjC/interface-1.m"]={"clang/test/SemaObjC/interface-1.m:24:11: error: array of interface \'INT1\' is invalid (probably should be an array of pointers)"}
}
}
},
},
["err_operator_new_delete_dependent_result_type"]={
["err_objc_attr_not_id"]={
[d]="err_operator_new_delete_dependent_result_type",
[j]="err_objc_attr_not_id",
[e]="%0 cannot have a dependent return type; use %1 instead",
[b]="parameter of %0 attribute must be a single name of an Objective-C %select{class|protocol}1",
[f]="A cannot have a dependent return type; use B instead",
[c]={{nil,nil,{"parameter of A attribute must be a single name of an Objective-C ",{Db,"protocol"}}}},
[g]=k,
[e]=d,
[h]="(.*?) cannot have a dependent return type; use (.*?) instead",
[f]="parameter of (.*?) attribute must be a single name of an Objective\\-C (?:class|protocol)",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[h]={"2d3379e394ee",1385018434,"Refactor some of handleObjCBridgeAttr to make it more concise and the diagnostic reusable.","Refactor some of handleObjCBridgeAttr to make it more concise and the diagnostic reusable.\n\nllvm-svn: 195322"},
[i]={{w,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;"}},
[k]={{eb,6174,"static void handleObjCBridgeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!Parm) {\n    S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0;"},{eb,6201,"static void handleObjCBridgeMutableAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!Parm) {\n    S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0;"},{eb,6214,"static void handleObjCBridgeRelatedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n // ...\n  if (!RelatedClass) {\n    S.Diag(D->getBeginLoc(), diag::err_objc_attr_not_id) << AL << 0;"}},
[l]={
[l]={
[Rb]={"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"}
["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:8:9: error: parameter of \'objc_bridge\' attribute must be a single name of an Objective-C class"}
}
}
},
},
["err_operator_new_delete_invalid_result_type"]={
["err_objc_attr_protocol_requires_definition"]={
[d]="err_operator_new_delete_invalid_result_type",
[j]="err_objc_attr_protocol_requires_definition",
[e]="%0 must return type %1",
[b]="attribute %0 can only be applied to @protocol definitions, not forward declarations",
[f]="A must return type B",
[c]="attribute A can only be applied to @protocol definitions, not forward declarations",
[g]=k,
[e]=d,
[h]="(.*?) must return type (.*?)",
[f]="attribute (.*?) can only be applied to @protocol definitions, not forward declarations",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={vc,1260573802,uc,qc},
[h]={"27cfe10df899",1393022944,"Add requirement that attribute \'objc_protocol_requires_explicit_implementation\' can only be applied ...","Add requirement that attribute \'objc_protocol_requires_explicit_implementation\' can only be applied to protocol definitions.\n\nllvm-svn: 201899"},
[i]={{w,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;"}},
[k]={{eb,2376,"static void handleObjCSuppresProtocolAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (!cast<ObjCProtocolDecl>(D)->isThisDeclarationADefinition()) {\n    S.Diag(AL.getLoc(), diag::err_objc_attr_protocol_requires_definition) << AL << AL.getRange();"}},
[l]={
[l]={
[Rb]={"clang/test/CXX/basic/basic.stc/basic.stc.dynamic/basic.stc.dynamic.allocation/p1.cpp:16:8: error: \'operator new\' must return type \'void *\'"}
["clang/test/SemaObjC/protocols-suppress-conformance.m"]={"clang/test/SemaObjC/protocols-suppress-conformance.m:170:16: error: attribute \'objc_protocol_requires_explicit_implementation\' can only be applied to @protocol definitions, not forward declarations"}
}
}
},
},
["err_operator_new_delete_template_too_few_parameters"]={
["err_objc_attr_typedef_not_id"]={
[d]="err_operator_new_delete_template_too_few_parameters",
[j]="err_objc_attr_typedef_not_id",
[e]="%0 template must have at least two parameters",
[b]="parameter of %0 attribute must be \'id\' when used on a typedef",
[f]="A template must have at least two parameters",
[c]="parameter of A attribute must be \'id\' when used on a typedef",
[g]=k,
[e]=d,
[h]="(.*?) template must have at least two parameters",
[f]="parameter of (.*?) attribute must be \'id\' when used on a typedef",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[h]={"2859258e2faf",1422830046,"Allow objc_bridge(id) to be used on typedefs of [cv] void*.","Allow objc_bridge(id) to be used on typedefs of [cv] void*.\n\nrdar://19678874\n\nllvm-svn: 227774"},
[i]={{w,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();"}},
[k]={{eb,6181,"static void handleObjCBridgeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Typedefs only allow objc_bridge(id) and have some additional checking.\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n    if (!Parm->Ident->isStr(\"id\")) {\n     S.Diag(AL.getLoc(), diag::err_objc_attr_typedef_not_id) << AL;"}},
[l]={
[l]={
[Rb]={"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"}
["clang/test/SemaObjC/objcbridge-attribute.m"]={"clang/test/SemaObjC/objcbridge-attribute.m:12:33: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:14:44: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:18:40: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:22:53: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:24:41: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef","clang/test/SemaObjC/objcbridge-attribute.m:26:41: error: parameter of \'objc_bridge\' attribute must be \'id\' when used on a typedef"}
}
}
},
},
["err_operator_new_delete_too_few_parameters"]={
["err_objc_attr_typedef_not_void_pointer"]={
[d]="err_operator_new_delete_too_few_parameters",
[j]="err_objc_attr_typedef_not_void_pointer",
[e]="%0 must have at least one parameter",
[b]="\'objc_bridge(id)\' is only allowed on structs and typedefs of void pointers",
[f]="A must have at least one parameter",
[c]="\'objc_bridge(id)\' is only allowed on structs and typedefs of void pointers",
[g]=k,
[e]=d,
[h]="(.*?) must have at least one parameter",
[f]="\'objc_bridge\\(id\\)\' is only allowed on structs and typedefs of void pointers",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={vc,1260573802,uc,qc},
[h]={"2859258e2faf",1422830046,"Allow objc_bridge(id) to be used on typedefs of [cv] void*.","Allow objc_bridge(id) to be used on typedefs of [cv] void*.\n\nrdar://19678874\n\nllvm-svn: 227774"},
[i]={{w,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();"}},
[k]={{eb,6188,"static void handleObjCBridgeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Typedefs only allow objc_bridge(id) and have some additional checking.\n  if (const auto *TD = dyn_cast<TypedefNameDecl>(D)) {\n    // ...\n    if (!T->isVoidPointerType()) {\n      S.Diag(AL.getLoc(), diag::err_objc_attr_typedef_not_void_pointer);"}},
[l]={
[l]={
["clang/test/SemaCXX/PR12778.cpp"]={"clang/test/SemaCXX/PR12778.cpp:3:6: error: \'operator delete\' must have at least one parameter"}
["clang/test/SemaObjC/objcbridge-attribute.m"]={"clang/test/SemaObjC/objcbridge-attribute.m:33:49: error: \'objc_bridge(id)\' is only allowed on structs and typedefs of void pointers"}
}
}
},
},
["err_operator_new_dependent_param_type"]={
["err_objc_bridged_related_invalid_class"]={
[d]="err_operator_new_dependent_param_type",
[j]="err_objc_bridged_related_invalid_class",
[e]="%0 cannot take a dependent type as first parameter; use size_t (%1) instead",
[b]="could not find Objective-C class %0 to convert %1 to %2",
[f]="A cannot take a dependent type as first parameter; use size_t (B) instead",
[c]="could not find Objective-C class A to convert B to C",
[g]=k,
[e]=d,
[h]="(.*?) cannot take a dependent type as first parameter; use size_t \\((.*?)\\) instead",
[f]="could not find Objective\\-C class (.*?) to convert (.*?) to (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"c0b2ce14cdc1",1260576962,"More work on improving the operator delete diagnostics.","More work on improving the operator delete diagnostics.\n\nllvm-svn: 91187"},
[h]={"1f0b3bfd7502",1386376463,"ObjectiveC. Continuing implementation of objc_bridge_related","ObjectiveC. Continuing implementation of objc_bridge_related\nattribute in sema and issuing a variety of diagnostics lazily \nfor misuse of this attribute (and what to do) when converting \nfrom CF types to ObjectiveC types (and vice versa).\n// rdar://15499111\n\nllvm-svn: 196629"},
[i]={{w,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))"}},
[k]={{J,4246,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n  if (!LookupName(R, TUScope)) {\n    if (Diagnose) {\n      Diag(Loc, diag::err_objc_bridged_related_invalid_class) << RCId << SrcType << DestType;"}},
[l]={
[l]={
[Rb]={"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"}
["clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m"]={"clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:29:30: error: could not find Objective-C class \'XNSColor\' to convert \'CGColorRef1\' (aka \'struct CGColor1 *\') to \'NSColor *\'","clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:31:13: error: could not find Objective-C class \'XNSColor\' to convert \'NSColor *\' to \'CGColorRef1\' (aka \'struct CGColor1 *\')"}
}
}
},
},
["err_operator_new_param_type"]={
["err_objc_bridged_related_invalid_class_name"]={
[d]="err_operator_new_param_type",
[j]="err_objc_bridged_related_invalid_class_name",
[e]="%0 takes type size_t (%1) as first parameter",
[b]="%0 must be name of an Objective-C class to be able to convert %1 to %2",
[f]="A takes type size_t (B) as first parameter",
[c]="A must be name of an Objective-C class to be able to convert B to C",
[g]=k,
[e]=d,
[h]="(.*?) takes type size_t \\((.*?)\\) as first parameter",
[f]="(.*?) must be name of an Objective\\-C class to be able to convert (.*?) to (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"4e088941ad99",1257896838,"Diagnose illegally typed operator new/new[].","Diagnose illegally typed operator new/new[].\n\nllvm-svn: 86755"},
[h]={"1f0b3bfd7502",1386376463,"ObjectiveC. Continuing implementation of objc_bridge_related","ObjectiveC. Continuing implementation of objc_bridge_related\nattribute in sema and issuing a variety of diagnostics lazily \nfor misuse of this attribute (and what to do) when converting \nfrom CF types to ObjectiveC types (and vice versa).\n// rdar://15499111\n\nllvm-svn: 196629"},
[i]={{w,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))"}},
[k]={{J,4257,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n  if (Target && isa<ObjCInterfaceDecl>(Target))\n  // ...\n  else {\n    if (Diagnose) {\n      Diag(Loc, diag::err_objc_bridged_related_invalid_class_name) << RCId << SrcType << DestType;"}},
[l]={
[l]={
[Rb]={"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"}
["clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m"]={"clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:36:30: error: \'PNsColor\' must be name of an Objective-C class to be able to convert \'CGColorRef2\' (aka \'struct CGColor2 *\') to \'NSColor *\'","clang/test/SemaObjC/check-objcbridge-related-attribute-lookup.m:38:13: error: \'PNsColor\' must be name of an Objective-C class to be able to convert \'NSColor *\' to \'CGColorRef2\' (aka \'struct CGColor2 *\')"}
}
}
},
},
["err_operator_overload_default_arg"]={
["err_objc_bridged_related_known_method"]={
[d]="err_operator_overload_default_arg",
[j]="err_objc_bridged_related_known_method",
[e]="parameter of overloaded %0 cannot have a default argument",
[b]="%0 must be explicitly converted to %1; use %select{%objcclass2|%objcinstance2}3 method for this conversion",
[f]="parameter of overloaded A cannot have a default argument",
[c]={{nil,nil,{"A must be explicitly converted to B; use ",{"C","C"}," method for this conversion"}}},
[g]=k,
[e]=d,
[h]="parameter of overloaded (.*?) cannot have a default argument",
[f]="(.*?) must be explicitly converted to (.*?); use (?:(.*?)|(.*?)) method for this conversion",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={M,1237025389,L,N},
[h]={"1f0b3bfd7502",1386376463,"ObjectiveC. Continuing implementation of objc_bridge_related","ObjectiveC. Continuing implementation of objc_bridge_related\nattribute in sema and issuing a variety of diagnostics lazily \nfor misuse of this attribute (and what to do) when converting \nfrom CF types to ObjectiveC types (and vice versa).\n// rdar://15499111\n\nllvm-svn: 196629"},
[i]={{w,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();"}},
[k]={{J,4272,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n  // Check for an existing class method with the given selector name.\n if (CfToNs && CMId) {\n    // ...\n    if (!ClassMethod) {\n      if (Diagnose) {\n        Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << Sel << false;"},{J,4286,"bool Sema::checkObjCBridgeRelatedComponents(SourceLocation Loc, QualType DestType, QualType SrcType, ObjCInterfaceDecl *&RelatedClass, ObjCMethodDecl *&ClassMethod, ObjCMethodDecl *&InstanceMethod, TypedefNameDecl *&TDNDecl, bool CfToNs, bool Diagnose) {\n  // ...\n // Check for an existing instance method with the given selector name.\n  if (!CfToNs && IMId) {\n    // ...\n    if (!InstanceMethod) {\n      if (Diagnose) {\n        Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << Sel << true;"},{J,4327,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n  // ...\n  if (CfToNs) {\n    // Implicit conversion from CF to ObjC object is needed.\n    if (ClassMethod) {\n      if (Diagnose) {\n        // ...\n        Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << ClassMethod->getSelector() << false << FixItHint::CreateInsertion(SrcExpr->getBeginLoc(), ExpressionString) << FixItHint::CreateInsertion(SrcExprEndLoc, \"]\");"},{J,4360,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n  // ...\n  if (CfToNs) {\n  // ...\n  } else {\n    // Implicit conversion from ObjC type to CF object is needed.\n    if (InstanceMethod) {\n     if (Diagnose) {\n        // ...\n        if (InstanceMethod->isPropertyAccessor())\n          if (const ObjCPropertyDecl *PDecl = InstanceMethod->findPropertyDecl()) {\n            // ...\n            Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << InstanceMethod->getSelector() << true << FixItHint::CreateInsertion(SrcExprEndLoc, ExpressionString);"},{J,4370,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n  // ...\n  if (CfToNs) {\n // ...\n  } else {\n    // Implicit conversion from ObjC type to CF object is needed.\n    if (InstanceMethod) {\n      if (Diagnose) {\n       // ...\n       if (ExpressionString.empty()) {\n         // ...\n          Diag(Loc, diag::err_objc_bridged_related_known_method) << SrcType << DestType << InstanceMethod->getSelector() << true << FixItHint::CreateInsertion(SrcExpr->getBeginLoc(), \"[\") << FixItHint::CreateInsertion(SrcExprEndLoc, ExpressionString);"}},
[l]={
[l]={
[vb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:25:18: error: parameter of overloaded \'operator*\' cannot have a default argument"}
["clang/test/SemaObjC/objcbridge-related-attribute.m"]={"clang/test/SemaObjC/objcbridge-related-attribute.m:22:7: error: \'CGColorRef\' (aka \'struct CGColor *\') must be explicitly converted to \'NSColor *\'; use \'+colorWithCGColor:\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:23:31: error: \'CGColorRef\' (aka \'struct CGColor *\') must be explicitly converted to \'NSColor *\'; use \'+colorWithCGColor:\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:24:10: error: \'CGColorRef\' (aka \'struct CGColor *\') must be explicitly converted to \'NSColor *\'; use \'+colorWithCGColor:\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:34:14: error: \'NSColor *\' must be explicitly converted to \'CGColorRef\' (aka \'struct CGColor *\'); use \'-CGColor\' method for this conversion","clang/test/SemaObjC/objcbridge-related-attribute.m:35:10: error: \'NSColor *\' must be explicitly converted to \'CGColorRef\' (aka \'struct CGColor *\'); use \'-CGColor\' method for this conversion"}
}
}
},
},
["err_operator_overload_must_be"]={
["err_objc_cf_bridged_not_interface"]={
[d]="err_operator_overload_must_be",
[j]="err_objc_cf_bridged_not_interface",
[e]="overloaded %0 must be a %select{unary|binary|unary or binary}2 operator (has %1 parameter%s1)",
[b]="CF object of type %0 is bridged to %1, which is not an Objective-C class",
[f]={{nil,nil,{"overloaded A must be a ",{"unary","binary","unary or binary"}," operator (has B parameterB)"}}},
[c]="CF object of type A is bridged to B, which is not an Objective-C class",
[g]=k,
[e]=d,
[h]="overloaded (.*?) must be a (?:unary|binary|unary or binary) operator \\(has (.*?) parameter(.*?)\\)",
[f]="CF object of type (.*?) is bridged to (.*?), which is not an Objective\\-C class",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={M,1237025389,L,N},
[h]={"8a0210e535c5",1384629392,"ObjectiveC ARC. Validate toll free bridge casting","ObjectiveC ARC. Validate toll free bridge casting\nof ObjectiveC objects to CF types when CF type\nhas the objc_bridge attribute.\n\nllvm-svn: 194930"},
[i]={{w,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;"}},
[k]={{J,4053,"template <typename TB> static bool CheckObjCBridgeNSCast(Sema &S, QualType castType, Expr *castExpr, bool &HadTheAttribute, bool warn) {\// ...\n  while (const auto *TD = T->getAs<TypedefType>()) {\n   // ...\n   if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {\n      if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {\n        // ...\n        if (S.LookupName(R, S.TUScope)) {\n       // ...\n       } else if (!castType->isObjCIdType()) {\n          S.Diag(castExpr->getBeginLoc(), diag::err_objc_cf_bridged_not_interface) << castExpr->getType() << Parm;"}},
[l]={
[l]={
[vb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:29:3: error: overloaded \'operator%\' must be a binary operator (has 1 parameter)"}
["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:30:34: error: CF object of type \'CFTestingRef\' (aka \'__CFError *\') is bridged to \'NSTesting\', which is not an Objective-C class"}
}
}
},
},
["err_operator_overload_must_be_member"]={
["err_objc_concat_string"]={
[d]="err_operator_overload_must_be_member",
[j]="err_objc_concat_string",
[e]="overloaded %0 must be a non-static member function",
[b]="unexpected token after Objective-C string",
[f]="overloaded A must be a non-static member function",
[c]="unexpected token after Objective-C string",
[g]=k,
[e]=d,
[h]="overloaded (.*?) must be a non\\-static member function",
[f]="unexpected token after Objective\\-C string",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={M,1237025389,L,N},
[h]={R,1236199783,Q,S},
[i]={{w,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();"}},
[k]={{B,3397,"ExprResult Parser::ParseObjCStringLiteral(SourceLocation AtLoc) {\// ...\n  while (Tok.is(tok::at)) {\n   // ...\n   // Invalid unless there is a string literal.\n   if (!isTokenStringLiteral())\n     return ExprError(Diag(Tok, diag::err_objc_concat_string));"}},
[l]={
[l]={
[vb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:31:6: error: overloaded \'operator()\' must be a non-static member function"}
["clang/test/SemaObjC/string.m"]={"clang/test/SemaObjC/string.m:14:17: error: unexpected token after Objective-C string"}
}
}
},
},
["err_operator_overload_needs_class_or_enum"]={
["err_objc_decls_may_only_appear_in_global_scope"]={
[d]="err_operator_overload_needs_class_or_enum",
[j]="err_objc_decls_may_only_appear_in_global_scope",
[e]="overloaded %0 must have at least one parameter of class or enumeration type",
[b]="Objective-C declarations may only appear in global scope",
[f]="overloaded A must have at least one parameter of class or enumeration type",
[c]="Objective-C declarations may only appear in global scope",
[g]=k,
[e]=d,
[h]="overloaded (.*?) must have at least one parameter of class or enumeration type",
[f]="Objective\\-C declarations may only appear in global scope",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={M,1237025389,L,N},
[h]={R,1236199783,Q,S},
[i]={{w,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();"}},
[k]={{z,5092,"bool Sema::CheckObjCDeclScope(Decl *D) {\n  // ...\n  Diag(D->getLocation(), diag::err_objc_decls_may_only_appear_in_global_scope);"}},
[l]={
[l]={
[vb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:23:3: error: overloaded \'operator+\' must have at least one parameter of class or enumeration type"}
["clang/test/SemaObjC/invalid-code.m"]={"clang/test/SemaObjC/invalid-code.m:53:41: error: Objective-C declarations may only appear in global scope"}
}
}
},
},
["err_operator_overload_post_incdec_must_be_int"]={
["err_objc_direct_duplicate_decl"]={
[d]="err_operator_overload_post_incdec_must_be_int",
[j]={{nil,p,"err_objc_direct_duplicate_decl"}},
[e]="parameter of overloaded post-%select{increment|decrement}1 operator must have type \'int\' (not %0)",
[b]={{nil,o,"%select{|direct }0%select{method|property}1 declaration conflicts with previous %select{|direct }2declaration of %select{method|property}1 %3"},{p,p,"%select{|direct }0method declaration conflicts with previous %select{|direct }1declaration of method %2"}},
[f]={{nil,nil,{"parameter of overloaded post-",{"increment","decrement"}," operator must have type \'int\' (not A)"}}},
[c]={{nil,o,{{a,"direct "},{"method","property"}," declaration conflicts with previous ",{a,"direct "},"declaration of ",{"method","property"}," D"}},{p,p,{{a,"direct "},"method declaration conflicts with previous ",{a,"direct "},"declaration of method C"}}},
[g]=k,
[e]=d,
[h]="parameter of overloaded post\\-(?:increment|decrement) operator must have type \'int\' \\(not (.*?)\\)",
[f]="(?:|direct )(?:method|property) declaration conflicts with previous (?:|direct )declaration of (?:method|property) (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,p,q}},
[j]={M,1237025389,L,N},
[h]={"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"},
[i]={{w,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);"}},
[k]={{z,4685,"static void checkObjCDirectMethodClashes(Sema &S, ObjCInterfaceDecl *IDecl, ObjCMethodDecl *Method, ObjCImplDecl *ImpDecl = nullptr) {\// ...\n  auto diagClash = [&](const ObjCMethodDecl *IMD) {\n   // ...\n   if (Method->isDirectMethod() || IMD->isDirectMethod()) {\n      S.Diag(Method->getLocation(), diag::err_objc_direct_duplicate_decl) << Method->isDirectMethod() << /* method */ 0 << IMD->isDirectMethod() << Method->getDeclName();"},{G,2417,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  // ...\n  // synthesizing accessors must not result in a direct method that is not\n  // monomorphic\n  if (!GetterMethod) {\n    if (const ObjCCategoryDecl *CatDecl = dyn_cast<ObjCCategoryDecl>(CD)) {\n      // ...\n      if (ExistingGetter) {\n        if (ExistingGetter->isDirectMethod() || property->isDirectProperty()) {\n          Diag(property->getLocation(), diag::err_objc_direct_duplicate_decl) << property->isDirectProperty() << 1 /* property */"},{G,2433,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  // ...\n  if (!property->isReadOnly() && !SetterMethod) {\n    if (const ObjCCategoryDecl *CatDecl = dyn_cast<ObjCCategoryDecl>(CD)) {\n     // ...\n     if (ExistingSetter) {\n        if (ExistingSetter->isDirectMethod() || property->isDirectProperty()) {\n         Diag(property->getLocation(), diag::err_objc_direct_duplicate_decl) << property->isDirectProperty() << 1 /* property */"}},
[l]={
[l]={
[vb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:37:23: error: parameter of overloaded post-increment operator must have type \'int\' (not \'FLOAT\' (aka \'float\'))"}
["clang/test/SemaObjC/method-direct-one-definition.m"]={"clang/test/SemaObjC/method-direct-one-definition.m:51:1: error: direct method declaration conflicts with previous direct declaration of method \'B_implOnly\'","clang/test/SemaObjC/method-direct-one-definition.m:62:1: error: method declaration conflicts with previous direct declaration of method \'C1\'","clang/test/SemaObjC/method-direct-one-definition.m:63:1: error: direct method declaration conflicts with previous declaration of method \'C2\'"}
}
}
},
},
["err_operator_overload_static"]={
["err_objc_direct_dynamic_property"]={
[d]="err_operator_overload_static",
[j]={{nil,o,"err_objc_direct_dynamic_property"}},
[e]="overloaded %0 cannot be a static member function",
[b]={{nil,o,"direct property cannot be @dynamic"}},
[f]="overloaded A cannot be a static member function",
[c]={{nil,o,"direct property cannot be @dynamic"}},
[g]=k,
[e]=d,
[h]="overloaded (.*?) cannot be a static member function",
[f]="direct property cannot be @dynamic",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,o,q}},
[j]={M,1237025389,L,N},
[h]={I,1576908663,H,F},
[i]={{w,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;"}},
[k]={{G,1618,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if (PIDecl->getPropertyImplementation() == ObjCPropertyImplDecl::Dynamic && PIDecl->getPropertyDecl() && PIDecl->getPropertyDecl()->isDirectProperty()) {\n   Diag(PropertyLoc, diag::err_objc_direct_dynamic_property);"}},
[l]={
[l]={
[vb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:15:14: error: overloaded \'operator+\' cannot be a static member function"}
["clang/test/SemaObjC/dynamic-direct-properties.m"]={"clang/test/SemaObjC/dynamic-direct-properties.m:11:10: error: direct property cannot be @dynamic","clang/test/SemaObjC/dynamic-direct-properties.m:21:10: error: direct property cannot be @dynamic"}
}
}
},
},
["err_operator_overload_variadic"]={
["err_objc_direct_impl_decl_mismatch"]={
[d]="err_operator_overload_variadic",
[j]={{nil,p,"err_objc_direct_impl_decl_mismatch"}},
[e]="overloaded %0 cannot be variadic",
[b]={{nil,p,"direct method was declared in %select{the primary interface|an extension|a category}0 but is implemented in %select{the primary interface|a category|a different category}1"}},
[f]="overloaded A cannot be variadic",
[c]={{nil,p,{"direct method was declared in ",{"the primary interface","an extension","a category"}," but is implemented in ",{"the primary interface","a category","a different category"}}}},
[g]=k,
[e]=d,
[h]="overloaded (.*?) cannot be variadic",
[f]="direct method was declared in (?:the primary interface|an extension|a category) but is implemented in (?:the primary interface|a category|a different category)",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,p,q}},
[j]={M,1237025389,L,N},
[h]={"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"},
[i]={{w,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();"}},
[k]={{z,4923,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\// ...\n  if (ObjCImplDecl *ImpDecl = dyn_cast<ObjCImplDecl>(ClassDecl)) {\n   // ...\n   // Merge information from the @interface declaration into the\n   // @implementation.\n   if (ObjCInterfaceDecl *IDecl = ImpDecl->getClassInterface()) {\n      if (auto *IMD = IDecl->lookupMethod(ObjCMethod->getSelector(), ObjCMethod->isInstanceMethod())) {\n       // ...\n        // The Idecl->lookupMethod() above will find declarations for ObjCMethod\n        // in one of these places:\n        //\n        // (1) the canonical declaration in an @interface container paired\n        //    with the ImplDecl,\n        // (2) non canonical declarations in @interface not paired with the\n        //    ImplDecl for the same Class,\n        // (3) any superclass container.\n        //\n        // Direct methods only allow for canonical declarations in the matching\n        // container (case 1).\n        //\n        // Direct methods overriding a superclass declaration (case 3) is\n        // handled during overrides checks in CheckObjCMethodOverrides().\n        //\n        // We deal with same-class container mismatches (Case 2) here.\n        if (IDecl == IMD->getClassInterface()) {\n          auto diagContainerMismatch = [&] {\n            // ...\n            Diag(ObjCMethod->getLocation(), diag::err_objc_direct_impl_decl_mismatch) << decl << impl;"}},
[l]={
[l]={
[vb]={"clang/test/SemaCXX/overloaded-operator-decl.cpp:27:3: error: overloaded \'operator/\' cannot be variadic"}
["clang/test/SemaObjC/method-direct-one-definition.m"]={"clang/test/SemaObjC/method-direct-one-definition.m:12:1: error: direct method was declared in a category but is implemented in the primary interface","clang/test/SemaObjC/method-direct-one-definition.m:43:1: error: direct method was declared in the primary interface but is implemented in a category","clang/test/SemaObjC/method-direct-one-definition.m:45:1: error: direct method was declared in an extension but is implemented in a different category","clang/test/SemaObjC/method-direct-one-definition.m:49:1: error: direct method was declared in a category but is implemented in a different category"}
}
}
},
},
["err_opt_not_valid_on_target"]={
["err_objc_direct_missing_on_decl"]={
[d]={{nil,K,"err_opt_not_valid_on_target"}},
[j]={{nil,p,"err_objc_direct_missing_on_decl"}},
[e]={{nil,K,"option \'%0\' cannot be specified on this target"}},
[b]={{nil,p,"direct method implementation was previously declared not direct"}},
[f]={{nil,K,"option \'A\' cannot be specified on this target"}},
[c]={{nil,p,"direct method implementation was previously declared not direct"}},
[g]=k,
[e]=d,
[h]="option \'(.*?)\' cannot be specified on this target",
[f]="direct method implementation was previously declared not direct",
[b]=a,
[g]=a,
[c]={{nil,K,S}},
[i]={{nil,p,q}},
[j]={"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"},
[h]={xb,1573050950,Cb,yb},
[i]={{"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  // ...\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\";"}}
[k]={{z,4933,"Decl *Sema::ActOnMethodDeclaration(Scope *S, SourceLocation MethodLoc, SourceLocation EndLoc, tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType, ArrayRef<SourceLocation> SelectorLocs, Selector Sel,\n  // ...\n  if (ObjCImplDecl *ImpDecl = dyn_cast<ObjCImplDecl>(ClassDecl)) {\n    // ...\n    // Merge information from the @interface declaration into the\n   // @implementation.\n    if (ObjCInterfaceDecl *IDecl = ImpDecl->getClassInterface()) {\n      if (auto *IMD = IDecl->lookupMethod(ObjCMethod->getSelector(), ObjCMethod->isInstanceMethod())) {\n       // ...\n       // The Idecl->lookupMethod() above will find declarations for ObjCMethod\n       // in one of these places:\n       //\n       // (1) the canonical declaration in an @interface container paired\n        //     with the ImplDecl,\n       // (2) non canonical declarations in @interface not paired with the\n        //     ImplDecl for the same Class,\n        // (3) any superclass container.\n       //\n       // Direct methods only allow for canonical declarations in the matching\n       // container (case 1).\n       //\n        // Direct methods overriding a superclass declaration (case 3) is\n       // handled during overrides checks in CheckObjCMethodOverrides().\n       //\n       // We deal with same-class container mismatches (Case 2) here.\n       if (IDecl == IMD->getClassInterface()) {\n         // ...\n         if (ObjCMethod->isDirectMethod()) {\n           // ...\n           if (ObjCMethod->getCanonicalDecl() != IMD) {\n           // ...\n            } else if (!IMD->isDirectMethod()) {\n             Diag(attr->getLocation(), diag::err_objc_direct_missing_on_decl);"}},
},
["err_opt_not_valid_with_opt"]={
[d]="err_opt_not_valid_with_opt",
[e]="option \'%0\' cannot be specified with \'%1\'",
[f]="option \'A\' cannot be specified with \'B\'",
[g]=k,
[h]="option \'(.*?)\' cannot be specified with \'(.*?)\'",
[b]=a,
[c]=S,
[j]={"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"},
[i]={{"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;"},{mb,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\";"},{mb,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;"},{mb,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;"},{mb,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;"},{mb,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);"}}
},
["err_opt_not_valid_without_opt"]={
[d]={{nil,K,"err_opt_not_valid_without_opt"}},
[e]={{nil,K,"option \'%0\' cannot be specified without \'%1\'"}},
[f]={{nil,K,"option \'A\' cannot be specified without \'B\'"}},
[g]=k,
[h]="option \'(.*?)\' cannot be specified without \'(.*?)\'",
[b]=a,
[c]={{nil,K,S}},
[j]={"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"},
[i]={{mb,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\""},{mb,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\""},{mb,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_os_log_argument_too_big"]={
[d]="err_os_log_argument_too_big",
[e]="os_log() argument %0 is too big (%1 bytes, max %2)",
[f]="os_log() argument A is too big (B bytes, max C)",
[g]=k,
[h]="os_log\\(\\) argument (.*?) is too big \\((.*?) bytes, max (.*?)\\)",
[b]=a,
[c]=m,
[j]={"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"},
[i]={{I,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/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)"}
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:117:41: error: direct method implementation was previously declared not direct","clang/test/SemaObjC/method-direct.m:120:46: error: direct method implementation was previously declared not direct"}
}
}
},
},
["err_os_log_format_not_string_constant"]={
["err_objc_direct_on_override"]={
[d]="err_os_log_format_not_string_constant",
[j]={{nil,p,"err_objc_direct_on_override"}},
[e]="os_log() format argument is not a string constant",
[b]={{nil,p,"methods that %select{override superclass methods|implement protocol requirements}0 cannot be direct"}},
[f]="os_log() format argument is not a string constant",
[c]={{nil,p,{"methods that ",{"override superclass methods","implement protocol requirements"}," cannot be direct"}}},
[g]=k,
[e]=d,
[h]="os_log\\(\\) format argument is not a string constant",
[f]="methods that (?:override superclass methods|implement protocol requirements) cannot be direct",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,p,q}},
[j]={"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"},
[h]={xb,1573050950,Cb,yb},
[i]={{I,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());"}},
[k]={{z,4433,"void Sema::CheckObjCMethodDirectOverrides(ObjCMethodDecl *method, ObjCMethodDecl *overridden) {\n if (overridden->isDirectMethod()) {\n  // ...\n  } else if (method->isDirectMethod()) {\n    // ...\n    Diag(attr->getLocation(), diag::err_objc_direct_on_override) << isa<ObjCProtocolDecl>(overridden->getDeclContext());"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:62:36: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:63:41: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:64:36: error: methods that implement protocol requirements cannot be direct","clang/test/SemaObjC/method-direct.m:65:41: error: methods that implement protocol requirements cannot be direct","clang/test/SemaObjC/method-direct.m:66:45: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:67:50: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:68:44: error: methods that override superclass methods cannot be direct","clang/test/SemaObjC/method-direct.m:69:49: error: methods that override superclass methods cannot be direct"}
}
}
},
},
["err_out_of_line_constructor_template_id"]={
["err_objc_direct_on_protocol"]={
[d]="err_out_of_line_constructor_template_id",
[j]={{nil,p,"err_objc_direct_on_protocol"}},
[e]="out-of-line constructor for %0 cannot have template arguments",
[b]={{nil,p,"\'objc_direct\' attribute cannot be applied to %select{methods|properties}0 declared in an Objective-C protocol"}},
[f]="out-of-line constructor for A cannot have template arguments",
[c]={{nil,p,{"\'objc_direct\' attribute cannot be applied to ",{"methods","properties"}," declared in an Objective-C protocol"}}},
[g]=k,
[e]=d,
[h]="out\\-of\\-line constructor for (.*?) cannot have template arguments",
[f]="\'objc_direct\' attribute cannot be applied to (?:methods|properties) declared in an Objective\\-C protocol",
[b]=a,
[g]=a,
[c]=y,
[i]={{nil,p,q}},
[j]={"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"},
[h]={xb,1573050950,Cb,yb},
[i]={{Nb,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));"}},
[k]={{eb,2944,"static void handleObjCDirectAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // objc_direct cannot be set on methods declared in the context of a protocol\n  if (isa<ObjCProtocolDecl>(D->getDeclContext())) {\n   S.Diag(AL.getLoc(), diag::err_objc_direct_on_protocol) << false;"},{z,4699,"static void checkObjCDirectMethodClashes(Sema &S, ObjCInterfaceDecl *IDecl, ObjCMethodDecl *Method, ObjCImplDecl *ImpDecl = nullptr) {\n // ...\n //   diag::err_objc_direct_on_protocol has already been emitted"},{G,710,"ObjCPropertyDecl *Sema::CreatePropertyDecl(Scope *S, ObjCContainerDecl *CDecl, SourceLocation AtLoc, SourceLocation LParenLoc, FieldDeclarator &FD, Selector GetterSel, SourceLocation GetterNameLoc, Selector SetterSel, SourceLocation SetterNameLoc, const bool isReadWrite, const unsigned Attributes, const unsigned AttributesAsWritten, QualType T, TypeSourceInfo *TInfo, tok::ObjCKeywordKind MethodImplKind, DeclContext *lexicalDC) {\n  // ...\n  if ((Attributes & ObjCPropertyAttribute::kind_direct) || CDecl->hasAttr<ObjCDirectMembersAttr>()) {\n   if (isa<ObjCProtocolDecl>(CDecl)) {\n     Diag(PDecl->getLocation(), diag::err_objc_direct_on_protocol) << true;"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/method-direct-properties.m"]={"clang/test/SemaObjC/method-direct-properties.m:4:34: error: \'objc_direct\' attribute cannot be applied to properties declared in an Objective-C protocol"}
}
}
},
},
["err_out_of_line_default_deletes"]={
["err_objc_direct_protocol_conformance"]={
[d]="err_out_of_line_default_deletes",
[j]={{nil,A,"err_objc_direct_protocol_conformance"}},
[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",
[b]={{nil,A,"%select{category %1|class extension}0 cannot conform to protocol %2 because of direct members declared in interface %3"}},
[f]={{nil,nil,{"defaulting this ",{"default constructor","copy constructor","move constructor","copy assignment operator","move assignment operator","destructor"}," would delete it after its first declaration"}}},
[c]={{nil,A,{{"category B","class extension"}," cannot conform to protocol C because of direct members declared in interface D"}}},
[g]=k,
[e]=d,
[h]="defaulting this (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) would delete it after its first declaration",
[f]="(?:category (.*?)|class extension) cannot conform to protocol (.*?) because of direct members declared in interface (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,A,q}},
[j]={"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"},
[h]={hb,1590001902,gb,kb},
[i]={{w,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;"}},
[k]={{z,3969,"static void DiagnoseCategoryDirectMembersProtocolConformance(Sema &S, ObjCProtocolDecl *PDecl, ObjCCategoryDecl *CDecl) {\n  // ...\n  if (!DirectMembers.empty()) {\n    S.Diag(CDecl->getLocation(), diag::err_objc_direct_protocol_conformance) << CDecl->IsClassExtension() << CDecl << PDecl << IDecl;"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/category-direct-members-protocol-conformance.m"]={"clang/test/SemaObjC/category-direct-members-protocol-conformance.m:21:12: error: category \'Cat1\' cannot conform to protocol \'P\' because of direct members declared in interface \'I\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:54:12: error: category \'CatExpDirect\' cannot conform to protocol \'P\' because of direct members declared in interface \'ExpDirect\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:64:12: error: class extension cannot conform to protocol \'PRecursive1\' because of direct members declared in interface \'ExpDirect\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:81:12: error: class extension cannot conform to protocol \'PProp\' because of direct members declared in interface \'IProp1\'","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:97:12: error: class extension cannot conform to protocol \'PProp2\' because of direct members declared in interface \'IProp2\'"}
}
}
},
},
["err_out_of_line_qualified_id_type_names_constructor"]={
["err_objc_directive_only_in_protocol"]={
[d]={{nil,n,"err_out_of_line_qualified_id_type_names_constructor"}},
[j]="err_objc_directive_only_in_protocol",
[e]={{nil,n,"qualified reference to %0 is a constructor name rather than a %select{template name|type}1 in this context"}},
[b]="directive may only be specified in protocols only",
[f]={{nil,n,{"qualified reference to A is a constructor name rather than a ",{"template name","type"}," in this context"}}},
[c]="directive may only be specified in protocols only",
[g]=k,
[e]=d,
[h]="qualified reference to (.*?) is a constructor name rather than a (?:template name|type) in this context",
[f]="directive may only be specified in protocols only",
[b]=a,
[g]=a,
[c]={{nil,n,m}},
[i]=u,
[j]={"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"},
[h]={R,1236199783,Q,S},
[i]={{D,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;"},{W,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*/"}},
[k]={{B,756,"///   objc-interface-decl-list:\n///     empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///     objc-interface-decl-list declaration\n///     objc-interface-decl-list \';\'\n///\n///   objc-method-requirement: [OBJC2]\n///     @required\n///     @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    case tok::objc_required:\n   case tok::objc_optional:\n     // This is only valid on protocols.\n     if (contextKey != tok::objc_protocol)\n       Diag(AtLoc, diag::err_objc_directive_only_in_protocol);"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/protocols.m"]={"clang/test/SemaObjC/protocols.m:4:1: error: directive may only be specified in protocols only","clang/test/SemaObjC/protocols.m:8:1: error: directive may only be specified in protocols only"}
}
}
},
},
["err_overflow_builtin_bit_int_max_size"]={
["err_objc_exceptions_disabled"]={
[d]={{nil,F,"err_overflow_builtin_bit_int_max_size"}},
[j]="err_objc_exceptions_disabled",
[e]={{nil,F,"__builtin_mul_overflow does not support \'signed _BitInt\' operands of more than %0 bits"}},
[b]="cannot use \'%0\' with Objective-C exceptions disabled",
[f]={{nil,F,"__builtin_mul_overflow does not support \'signed _BitInt\' operands of more than A bits"}},
[c]="cannot use \'A\' with Objective-C exceptions disabled",
[g]=k,
[e]=d,
[h]="__builtin_mul_overflow does not support \'signed _BitInt\' operands of more than (.*?) bits",
[f]="cannot use \'(.*?)\' with Objective\\-C exceptions disabled",
[b]=a,
[g]=a,
[c]={{nil,F,m}},
[i]=q,
[j]={"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"},
[h]={"ce8dd3a5d474",1298159634,"Add a new ObjCExceptions member variable to LangOptions. This controls whether Objective-C exception...","Add a new ObjCExceptions member variable to LangOptions. This controls whether Objective-C exceptions are enabled or not (they are by default).\n\nllvm-svn: 126061"},
[i]={{I,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;"}},
[k]={{fb,4239,"StmtResult Sema::ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try, MultiStmtArg CatchStmts, Stmt *Finally) {\n  if (!getLangOpts().ObjCExceptions)\n   Diag(AtLoc, diag::err_objc_exceptions_disabled) << \"@try\";"},{fb,4283,"StmtResult Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, Scope *CurScope) {\n if (!getLangOpts().ObjCExceptions)\n   Diag(AtLoc, diag::err_objc_exceptions_disabled) << \"@throw\";"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/no-objc-exceptions.m"]={"clang/test/SemaObjC/no-objc-exceptions.m:4:3: error: cannot use \'@throw\' with Objective-C exceptions disabled","clang/test/SemaObjC/no-objc-exceptions.m:8:3: error: cannot use \'@try\' with Objective-C exceptions disabled"}
}
}
},
},
["err_overflow_builtin_must_be_int"]={
["err_objc_expected_equal_for_getter"]={
[d]="err_overflow_builtin_must_be_int",
[j]="err_objc_expected_equal_for_getter",
[e]="operand argument to overflow builtin must be an integer (%0 invalid)",
[b]="expected \'=\' for Objective-C getter",
[f]="operand argument to overflow builtin must be an integer (A invalid)",
[c]="expected \'=\' for Objective-C getter",
[g]=k,
[e]=d,
[h]="operand argument to overflow builtin must be an integer \\((.*?) invalid\\)",
[f]="expected \'\\=\' for Objective\\-C getter",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={"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"},
[h]={"fe15a78ff24f",1286041521,"Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR81...","Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR8169.\n\nllvm-svn: 115411"},
[i]={{I,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();"}},
[k]={{B,932,"///  Parse property attribute declarations.\n///\n///  property-attr-decl: \'(\' property-attrlist \')\'\n///  property-attrlist:\n///    property-attribute\n///    property-attrlist \',\' property-attribute\n///  property-attribute:\n///    getter \'=\' identifier\n///    setter \'=\' identifier \':\'\n///    direct\n///    readonly\n///    readwrite\n///    assign\n///    retain\n///    copy\n///    nonatomic\n///    atomic\n///    strong\n///    weak\n///    unsafe_unretained\n///    nonnull\n///    nullable\n///    null_unspecified\n///    null_resettable\n///    class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n  // ...\n  while (true) {\n    // ...\n   if (II->isStr(\"readonly\"))\n    // ...\n    else if (II->isStr(\"assign\"))\n   // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n    // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n      // ...\n      unsigned DiagID = IsSetter ? diag::err_objc_expected_equal_for_setter : diag::err_objc_expected_equal_for_getter;"}}
[l]={
["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_overflow_builtin_must_be_ptr_int"]={
["err_objc_expected_equal_for_setter"]={
[d]="err_overflow_builtin_must_be_ptr_int",
[j]="err_objc_expected_equal_for_setter",
[e]="result argument to overflow builtin must be a pointer to a non-const integer (%0 invalid)",
[b]="expected \'=\' for Objective-C setter",
[f]="result argument to overflow builtin must be a pointer to a non-const integer (A invalid)",
[c]="expected \'=\' for Objective-C setter",
[g]=k,
[e]=d,
[h]="result argument to overflow builtin must be a pointer to a non\\-const integer \\((.*?) invalid\\)",
[f]="expected \'\\=\' for Objective\\-C setter",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={"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"},
[h]={"fe15a78ff24f",1286041521,"Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR81...","Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR8169.\n\nllvm-svn: 115411"},
[i]={{I,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    // ...\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();"}},
[k]={{B,931,"///  Parse property attribute declarations.\n///\n///  property-attr-decl: \'(\' property-attrlist \')\'\n///  property-attrlist:\n///    property-attribute\n///    property-attrlist \',\' property-attribute\n///  property-attribute:\n///    getter \'=\' identifier\n///    setter \'=\' identifier \':\'\n///    direct\n///    readonly\n///    readwrite\n///    assign\n///    retain\n///    copy\n///    nonatomic\n///    atomic\n///    strong\n///    weak\n///    unsafe_unretained\n///    nonnull\n///    nullable\n///    null_unspecified\n///    null_resettable\n///    class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n  // ...\n  while (true) {\n    // ...\n    if (II->isStr(\"readonly\"))\n    // ...\n    else if (II->isStr(\"assign\"))\n    // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n   // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n      // ...\n      unsigned DiagID = IsSetter ? diag::err_objc_expected_equal_for_setter : diag::err_objc_expected_equal_for_getter;"}}
[l]={
["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_override_control_interface"]={
["err_objc_expected_property_attr"]={
[d]="err_override_control_interface",
[j]="err_objc_expected_property_attr",
[e]="\'%0\' keyword not permitted with interface types",
[b]="unknown property attribute %0",
[f]="\'A\' keyword not permitted with interface types",
[c]="unknown property attribute A",
[g]=k,
[e]=d,
[h]="\'(.*?)\' keyword not permitted with interface types",
[f]="unknown property attribute (.*?)",
[b]=a,
[g]=a,
[c]=y,
[i]=u,
[j]={"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"},
[h]={R,1236199783,Q,S},
[i]={{lc,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);"},{lc,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);"}},
[k]={{B,1007,"///   Parse property attribute declarations.\n///\n///   property-attr-decl: \'(\' property-attrlist \')\'\n///   property-attrlist:\n///     property-attribute\n///    property-attrlist \',\' property-attribute\n///  property-attribute:\n///    getter \'=\' identifier\n///    setter \'=\' identifier \':\'\n///    direct\n///    readonly\n///    readwrite\n///    assign\n///    retain\n///    copy\n///    nonatomic\n///    atomic\n///    strong\n///    weak\n///    unsafe_unretained\n///    nonnull\n///    nullable\n///    null_unspecified\n///    null_resettable\n///    class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n  // ...\n  while (true) {\n    // ...\n    if (II->isStr(\"readonly\"))\n    // ...\n    else if (II->isStr(\"assign\"))\n    // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n    // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n    // ...\n    } else if (II->isStr(\"nonnull\")) {\n    // ...\n    } else if (II->isStr(\"nullable\")) {\n    // ...\n    } else if (II->isStr(\"null_unspecified\")) {\n    // ...\n    } else if (II->isStr(\"null_resettable\")) {\n   // ...\n    } else if (II->isStr(\"class\")) {\n    // ...\n    } else if (II->isStr(\"direct\")) {\n    // ...\n    } else {\n      Diag(AttrName, diag::err_objc_expected_property_attr) << II;"},{B,2437,"///   property-dynamic:\n///    @dynamic  property-list\n///\n///   property-list:\n///     identifier\n///     property-list \',\' identifier\n///\nDecl *Parser::ParseObjCPropertyDynamic(SourceLocation atLoc) {\n  // ...\n  if (Tok.is(tok::l_paren)) {\n    // ...\n    if (!II) {\n      Diag(Tok, diag::err_objc_expected_property_attr) << II;"},{B,2449,"///  property-dynamic:\n///    @dynamic  property-list\n///\n///   property-list:\n///    identifier\n///    property-list \',\' identifier\n///\nDecl *Parser::ParseObjCPropertyDynamic(SourceLocation atLoc) {\n  // ...\n  if (Tok.is(tok::l_paren)) {\n    // ...\n    if (!II) {\n    // ...\n    } else {\n      // ...\n      if (II->isStr(\"class\")) {\n      // ...\n      } else {\n        Diag(AttrName, diag::err_objc_expected_property_attr) << II;"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/property-9.m"]={"clang/test/SemaObjC/property-9.m:56:12: error: unknown property attribute \'readonlyx\'"}
}
}
},
},
["err_override_exception_spec"]={
["err_objc_expected_selector_for_getter_setter"]={
[d]="err_override_exception_spec",
[j]="err_objc_expected_selector_for_getter_setter",
[e]="exception specification of overriding function is more lax than base version",
[b]="expected selector for Objective-C %select{setter|getter}0",
[f]="exception specification of overriding function is more lax than base version",
[c]={{nil,nil,{"expected selector for Objective-C ",{"setter","getter"}}}},
[g]=k,
[e]=d,
[h]="exception specification of overriding function is more lax than base version",
[f]="expected selector for Objective\\-C (?:setter|getter)",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={"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"},
[h]={"fe15a78ff24f",1286041521,"Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR81...","Use ParseObjCSelectorPiece for parsing getter and setter names in @property declarations. Fixes PR8169.\n\nllvm-svn: 115411"},
[i]={{"clang/lib/Sema/SemaExceptionSpec.cpp",990,"bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  unsigned DiagID = diag::err_override_exception_spec;"}},
[k]={{B,952,"///   Parse property attribute declarations.\n///\n///  property-attr-decl: \'(\' property-attrlist \')\'\n///  property-attrlist:\n///    property-attribute\n///    property-attrlist \',\' property-attribute\n///  property-attribute:\n///    getter \'=\' identifier\n///    setter \'=\' identifier \':\'\n///    direct\n///    readonly\n///    readwrite\n///    assign\n///    retain\n///    copy\n///    nonatomic\n///    atomic\n///    strong\n///    weak\n///    unsafe_unretained\n///    nonnull\n///    nullable\n///    null_unspecified\n///    null_resettable\n///    class\n///\nvoid Parser::ParseObjCPropertyAttribute(ObjCDeclSpec &DS) {\n  // ...\n  while (true) {\n    // ...\n    if (II->isStr(\"readonly\"))\n    // ...\n    else if (II->isStr(\"assign\"))\n    // ...\n    else if (II->isStr(\"unsafe_unretained\"))\n    // ...\n    else if (II->isStr(\"readwrite\"))\n    // ...\n    else if (II->isStr(\"retain\"))\n    // ...\n    else if (II->isStr(\"strong\"))\n    // ...\n    else if (II->isStr(\"copy\"))\n    // ...\n    else if (II->isStr(\"nonatomic\"))\n    // ...\n    else if (II->isStr(\"atomic\"))\n    // ...\n    else if (II->isStr(\"weak\"))\n    // ...\n    else if (II->isStr(\"getter\") || II->isStr(\"setter\")) {\n      // ...\n      if (!SelIdent) {\n        Diag(Tok, diag::err_objc_expected_selector_for_getter_setter) << IsSetter;"}}
[l]={
["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_ovl_ambiguous_call"]={
["err_objc_expected_type_parameter"]={
[d]="err_ovl_ambiguous_call",
[j]="err_objc_expected_type_parameter",
[e]="call to %0 is ambiguous",
[b]="expected type parameter name",
[f]="call to A is ambiguous",
[c]="expected type parameter name",
[g]=k,
[e]=d,
[h]="call to (.*?) is ambiguous",
[f]="expected type parameter name",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={q,1236199783,r,s},
[h]={Y,1436241435,V,Z},
[i]={{Q,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);"},{Q,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();"},{E,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);"},{E,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);"}},
[k]={{B,518,"/// Parse an Objective-C type parameter list, if present, or capture\n/// the locations of the protocol identifiers for a list of protocol\n/// references.\n///\n///  objc-type-parameter-list:\n///    \'<\' objc-type-parameter (\',\' objc-type-parameter)* \'>\'\n///\n///   objc-type-parameter:\n///     objc-type-parameter-variance? identifier objc-type-parameter-bound[opt]\n///\n///   objc-type-parameter-bound:\n///     \':\' type-name\n///\n///  objc-type-parameter-variance:\n///    \'__covariant\'\n///    \'__contravariant\'\n///\n/// \\param lAngleLoc The location of the starting \'<\'.\n///\n/// \\param protocolIdents Will capture the list of identifiers, if the\n/// angle brackets contain a list of protocol references rather than a\n/// type parameter list.\n///\n/// \\param rAngleLoc The location of the ending \'>\'.\nObjCTypeParamList *Parser::parseObjCTypeParamListOrProtocolRefs(ObjCTypeParamListScope &Scope, SourceLocation &lAngleLoc, SmallVectorImpl<IdentifierLocPair> &protocolIdents, SourceLocation &rAngleLoc, bool mayBeProtocolList) {\n  // ...\n  do {\n    // ...\n    // Parse the identifier.\n    if (!Tok.is(tok::identifier)) {\n      // ...\n      Diag(Tok, diag::err_objc_expected_type_parameter);"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/kindof.m"]={"clang/test/SemaObjC/kindof.m:465:19: error: expected type parameter name","clang/test/SemaObjC/kindof.m:471:25: error: expected type parameter name"}
}
}
},
},
["err_ovl_ambiguous_conversion_in_cast"]={
["err_objc_for_range_init_stmt"]={
[d]="err_ovl_ambiguous_conversion_in_cast",
[j]={{nil,y,"err_objc_for_range_init_stmt"}},
[e]={{nil,t,"ambiguous conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2"},{o,nil,"ambiguous conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2"}},
[b]={{nil,y,"initialization statement is not supported when iterating over Objective-C collection"}},
[f]={{nil,t,{"ambiguous conversion for ",{a,Eb,Tb,Sb,Qb,Pb,a}," from B to C"}},{o,nil,{"ambiguous conversion for ",{a,Eb,Tb,Sb,Qb,Pb}," from B to C"}}},
[c]={{nil,y,"initialization statement is not supported when iterating over Objective-C collection"}},
[g]=k,
[e]=d,
[h]="ambiguous conversion for (?:|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?)",
[f]="initialization statement is not supported when iterating over Objective\\-C collection",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,y,q}},
[j]={"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"},
[h]={"8baa50013c86",1538160249,"[cxx2a] P0614R1: Support init-statements in range-based for loops.","[cxx2a] P0614R1: Support init-statements in range-based for loops.\n\nWe don\'t yet support this for the case where a range-based for loop is\nimplicitly rewritten to an ObjC for..in statement.\n\nllvm-svn: 343350"},
[i]={{"clang/lib/Sema/SemaCast.cpp",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;"}},
[k]={{fb,2495,"/// ActOnCXXForRangeStmt - Check and build a C++11 for-range statement.\n///\n/// C++11 [stmt.ranged]:\n///  A range-based for statement is equivalent to\n///\n///  {\n///    auto && __range = range-init;\n///    for ( auto __begin = begin-expr,\n///          __end = end-expr;\n///          __begin != __end;\n///          ++__begin ) {\n///      for-range-declaration = *__begin;\n///      statement\n///    }\n///  }\n///\n/// The body of the loop is not available yet, since it cannot be analysed until\n/// we have determined the type of the for-range-declaration.\nStmtResult Sema::ActOnCXXForRangeStmt(Scope *S, SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, Stmt *First, SourceLocation ColonLoc, Expr *Range, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  // ...\n  if (Range && ObjCEnumerationCollection(Range)) {\n    // FIXME: Support init-statements in Objective-C++20 ranged for statement.\n    if (InitStmt)\n      return Diag(InitStmt->getBeginLoc(), diag::err_objc_for_range_init_stmt) << InitStmt->getSourceRange();"}},
[l]={
[l]={
["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\'"}
["clang/test/SemaObjCXX/foreach.mm"]={"clang/test/SemaObjCXX/foreach.mm:18:8: error: initialization statement is not supported when iterating over Objective-C collection","clang/test/SemaObjCXX/foreach.mm:21:8: error: initialization statement is not supported when iterating over Objective-C collection"}
}
}
},
},
["err_ovl_ambiguous_init"]={
["err_objc_illegal_boxed_expression_type"]={
[d]="err_ovl_ambiguous_init",
[j]="err_objc_illegal_boxed_expression_type",
[e]="call to constructor of %0 is ambiguous",
[b]="illegal type %0 used in a boxed expression",
[f]="call to constructor of A is ambiguous",
[c]="illegal type A used in a boxed expression",
[g]=k,
[e]=d,
[h]="call to constructor of (.*?) is ambiguous",
[f]="illegal type (.*?) used in a boxed expression",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={q,1236199783,r,s},
[h]={"0caa39474bfc",1334795112,"Implements boxed expressions for Objective-C. <rdar://problem/10194391>","Implements boxed expressions for Objective-C. <rdar://problem/10194391>\n\nllvm-svn: 155082"},
[i]={{P,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);"}},
[k]={{J,732,"ExprResult Sema::BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr) {\n  // ...\n  if (!BoxingMethod) {\n    Diag(Loc, diag::err_objc_illegal_boxed_expression_type) << ValueType << ValueExpr->getSourceRange();"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/objc-literal-nsnumber.m"]={"clang/test/SemaObjC/objc-literal-nsnumber.m:16:13: error: illegal type \'int\' used in a boxed expression","clang/test/SemaObjC/objc-literal-nsnumber.m:26:13: error: illegal type \'int\' used in a boxed expression"}
}
}
},
},
["err_ovl_ambiguous_member_call"]={
["err_objc_illegal_interface_qual"]={
[d]="err_ovl_ambiguous_member_call",
[j]="err_objc_illegal_interface_qual",
[e]="call to member function %0 is ambiguous",
[b]="illegal interface qualifier",
[f]="call to member function A is ambiguous",
[c]="illegal interface qualifier",
[g]=k,
[e]=d,
[h]="call to member function (.*?) is ambiguous",
[f]="illegal interface qualifier",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={q,1236199783,r,s},
[h]={R,1236199783,Q,S},
[i]={{E,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);"}},
[k]={{B,738,"///   objc-interface-decl-list:\n///    empty\n///     objc-interface-decl-list objc-property-decl [OBJC2]\n///     objc-interface-decl-list objc-method-requirement [OBJC2]\n///     objc-interface-decl-list objc-method-proto \';\'\n///     objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///   objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n   // ...\n   default:\n     // ...\n      Diag(AtLoc, diag::err_objc_illegal_interface_qual);"}},
[l]={
[l]={
["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"}
["clang/test/Parser/missing-end-4.m"]={"clang/test/Parser/missing-end-4.m:41:1: error: illegal interface qualifier","clang/test/Parser/missing-end-4.m:42:1: error: illegal interface qualifier"}
}
}
},
},
["err_ovl_ambiguous_object_call"]={
["err_objc_illegal_visibility_spec"]={
[d]="err_ovl_ambiguous_object_call",
[j]="err_objc_illegal_visibility_spec",
[e]="call to object of type %0 is ambiguous",
[b]="illegal visibility specification",
[f]="call to object of type A is ambiguous",
[c]="illegal visibility specification",
[g]=k,
[e]=d,
[h]="call to object of type (.*?) is ambiguous",
[f]="illegal visibility specification",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={q,1236199783,r,s},
[h]={R,1236199783,Q,S},
[i]={{E,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);"}},
[k]={{B,1999,"///   objc-class-instance-variables:\n///     \'{\' objc-instance-variable-decl-list[opt] \'}\'\n///\n///  objc-instance-variable-decl-list:\n///    objc-visibility-spec\n///    objc-instance-variable-decl \';\'\n///    \';\'\n///    objc-instance-variable-decl-list objc-visibility-spec\n///    objc-instance-variable-decl-list objc-instance-variable-decl \';\'\n///    objc-instance-variable-decl-list static_assert-declaration\n///    objc-instance-variable-decl-list \';\'\n///\n///  objc-visibility-spec:\n///    @private\n///    @protected\n///    @public\n///     @package [OBJC2]\n///\n///  objc-instance-variable-decl:\n///     struct-declaration\n///\nvoid Parser::ParseObjCClassInstanceVariables(ObjCContainerDecl *interfaceDecl, tok::ObjCKeywordKind visibility, SourceLocation atLoc) {\n  // ...\n  // While we still have something to read, read the instance variables.\n while (Tok.isNot(tok::r_brace) && !isEofOrEom()) {\n    // ...\n    // Set the default visibility to private.\n    if (TryConsumeToken(tok::at)) { // parse objc-visibility-spec\n      // ...\n      default:\n        Diag(Tok, diag::err_objc_illegal_visibility_spec);"}}
[l]={
["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_ovl_ambiguous_oper_binary"]={
["err_objc_incomplete_boxed_expression_type"]={
[d]="err_ovl_ambiguous_oper_binary",
[j]="err_objc_incomplete_boxed_expression_type",
[e]="use of overloaded operator \'%0\' is ambiguous (with operand types %1 and %2)",
[b]="incomplete type %0 used in a boxed expression",
[f]="use of overloaded operator \'A\' is ambiguous (with operand types B and C)",
[c]="incomplete type A used in a boxed expression",
[g]=k,
[e]=d,
[h]="use of overloaded operator \'(.*?)\' is ambiguous \\(with operand types (.*?) and (.*?)\\)",
[f]="incomplete type (.*?) used in a boxed expression",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={"8e6951d81b79",1337109464,"Allow objc @() syntax for enum types.","Allow objc @() syntax for enum types.\n\nPreviously we would reject it as illegal using a value of\nenum type and on ObjC++ it was illegal to use an enumerator\nas well.\n\nrdar://11454917\n\nllvm-svn: 156843"},
[i]={{E,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);"},{E,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);"}},
[k]={{J,640,"ExprResult Sema::BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr) {\n // ...\n if (const PointerType *PT = ValueType->getAs<PointerType>()) {\n // ...\n } else if (ValueType->isBuiltinType()) {\n  // ...\n  } else if (const EnumType *ET = ValueType->getAs<EnumType>()) {\n    if (!ET->getDecl()->isComplete()) {\n      Diag(Loc, diag::err_objc_incomplete_boxed_expression_type) << ValueType << ValueExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/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::*\')"}
["clang/test/SemaObjCXX/boxing-illegal-types.mm"]={"clang/test/SemaObjCXX/boxing-illegal-types.mm:57:9: error: incomplete type \'enum ForwE\' used in a boxed expression"}
}
}
},
},
["err_ovl_ambiguous_oper_unary"]={
["err_objc_index_incomplete_class_type"]={
[d]="err_ovl_ambiguous_oper_unary",
[j]="err_objc_index_incomplete_class_type",
[e]="use of overloaded operator \'%0\' is ambiguous (operand type %1)",
[b]="Objective-C index expression has incomplete class type %0",
[f]="use of overloaded operator \'A\' is ambiguous (operand type B)",
[c]="Objective-C index expression has incomplete class type A",
[g]=k,
[e]=d,
[h]="use of overloaded operator \'(.*?)\' is ambiguous \\(operand type (.*?)\\)",
[f]="Objective\\-C index expression has incomplete class type (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={ab,1331064356,W,X},
[i]={{E,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);"},{E,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);"}},
[k]={{O,1080,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (RequireCompleteType(FromE->getExprLoc(), T, diag::err_objc_index_incomplete_class_type, FromE))"}}
[l]={
["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_ovl_ambiguous_subscript_call"]={
["err_objc_indexing_method_result_type"]={
[d]={{nil,C,"err_ovl_ambiguous_subscript_call"}},
[j]="err_objc_indexing_method_result_type",
[e]={{nil,C,"call to subscript operator of type %0 is ambiguous"}},
[b]="method for accessing %select{dictionary|array}1 element must have Objective-C object return type instead of %0",
[f]={{nil,C,"call to subscript operator of type A is ambiguous"}},
[c]={{nil,nil,{"method for accessing ",{"dictionary","array"}," element must have Objective-C object return type instead of A"}}},
[g]=k,
[e]=d,
[h]="call to subscript operator of type (.*?) is ambiguous",
[f]="method for accessing (?:dictionary|array) element must have Objective\\-C object return type instead of (.*?)",
[b]=a,
[g]=a,
[c]={{nil,C,m}},
[i]=q,
[j]={"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"},
[h]={ab,1331064356,W,X},
[i]={{E,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);"}},
[k]={{O,1238,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n  if (AtIndexGetter) {\n    // ...\n    if (!R->isObjCObjectPointerType()) {\n      S.Diag(RefExpr->getKeyExpr()->getExprLoc(), diag::err_objc_indexing_method_result_type) << R << arrayRef;"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx2b-overloaded-operator.cpp"]={"clang/test/SemaCXX/cxx2b-overloaded-operator.cpp:51:20: error: call to subscript operator of type \'S\' is ambiguous"}
["clang/test/SemaObjC/objc-container-subscripting-3.m"]={"clang/test/SemaObjC/objc-container-subscripting-3.m:16:18: error: method for accessing array element must have Objective-C object return type instead of \'int\'","clang/test/SemaObjC/objc-container-subscripting-3.m:21:15: error: method for accessing dictionary element must have Objective-C object return type instead of \'int\'"}
}
}
},
},
["err_ovl_deleted_call"]={
["err_objc_kindof_nonobject"]={
[d]="err_ovl_deleted_call",
[j]="err_objc_kindof_nonobject",
[e]={{nil,x,"call to deleted function %0"},{u,nil,"call to %select{unavailable|deleted}0 function %1%2"}},
[b]="\'__kindof\' specifier cannot be applied to non-object type %0",
[f]={{nil,x,"call to deleted function A"},{u,nil,{"call to ",{fc,ec}," function BC"}}},
[c]="\'__kindof\' specifier cannot be applied to non-object type A",
[g]=k,
[e]=d,
[h]="call to deleted function (.*?)",
[f]="\'__kindof\' specifier cannot be applied to non\\-object type (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={q,1236199783,r,s},
[h]={"ab209d83be5d",1436241522,"Implement the Objective-C __kindof type qualifier.","Implement the Objective-C __kindof type qualifier.\n\nThe __kindof type qualifier can be applied to Objective-C object\n(pointer) types to indicate id-like behavior, which includes implicit\n\"downcasting\" of __kindof types to subclasses and id-like message-send\nbehavior. __kindof types provide better type bounds for substitutions\ninto unspecified generic types, which preserves more type information.\n\nllvm-svn: 241548"},
[i]={{"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++"},{Q,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);"},{Q,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);"},{E,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);"}},
[k]={{K,7597,"/// Check the application of the Objective-C \'__kindof\' qualifier to\n/// the given type.\nstatic bool checkObjCKindOfType(TypeProcessingState &state, QualType &type, ParsedAttr &attr) {\n  // ...\n  // If not, we can\'t apply __kindof.\n if (!objType) {\n   // ...\n    S.Diag(attr.getLoc(), diag::err_objc_kindof_nonobject) << type;"}},
[l]={
[l]={
["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\'"}
["clang/test/SemaObjC/kindof.m"]={"clang/test/SemaObjC/kindof.m:64:9: error: \'__kindof\' specifier cannot be applied to non-object type \'int\'","clang/test/SemaObjC/kindof.m:66:9: error: \'__kindof\' specifier cannot be applied to non-object type \'NSObject_ptr_ptr\' (aka \'NSObject **\')"}
}
}
},
},
["err_ovl_deleted_comparison"]={
["err_objc_kindof_wrong_position"]={
[d]={{nil,o,"err_ovl_deleted_comparison"}},
[j]="err_objc_kindof_wrong_position",
[e]={{nil,o,"object of type %0 cannot be compared because its %1 is implicitly deleted"}},
[b]="\'__kindof\' type specifier must precede the declarator",
[f]={{nil,o,"object of type A cannot be compared because its B is implicitly deleted"}},
[c]="\'__kindof\' type specifier must precede the declarator",
[g]=k,
[e]=d,
[h]="object of type (.*?) cannot be compared because its (.*?) is implicitly deleted",
[f]="\'__kindof\' type specifier must precede the declarator",
[b]=a,
[g]=a,
[c]={{nil,o,m}},
[i]=q,
[j]={"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."},
[h]={"ab209d83be5d",1436241522,"Implement the Objective-C __kindof type qualifier.","Implement the Objective-C __kindof type qualifier.\n\nThe __kindof type qualifier can be applied to Objective-C object\n(pointer) types to indicate id-like behavior, which includes implicit\n\"downcasting\" of __kindof types to subclasses and id-like message-send\nbehavior. __kindof types provide better type bounds for substitutions\ninto unspecified generic types, which preserves more type information.\n\nllvm-svn: 241548"},
[i]={{E,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;"}},
[k]={{K,8729,"static void processTypeAttrs(TypeProcessingState &state, QualType &type, TypeAttrLocation TAL, const ParsedAttributesView &attrs) {\n  // ...\n  for (ParsedAttr &attr : AttrsCopy) {\n   // ...\n   case ParsedAttr::AT_ObjCKindOf:\n      // ...\n      case TAL_DeclChunk:\n      case TAL_DeclName:\n        state.getSema().Diag(attr.getLoc(), diag::err_objc_kindof_wrong_position) << FixItHint::CreateRemoval(attr.getLoc()) << FixItHint::CreateInsertion(state.getDeclarator().getDeclSpec().getBeginLoc(), \"__kindof \");"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/kindof.m"]={"clang/test/SemaObjC/kindof.m:69:20: error: \'__kindof\' type specifier must precede the declarator"}
}
}
},
},
["err_ovl_deleted_conversion_in_cast"]={
["err_objc_literal_method_sig"]={
[d]="err_ovl_deleted_conversion_in_cast",
[j]="err_objc_literal_method_sig",
[e]={{nil,t,"%select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2 uses deleted function"},{o,nil,"%select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 uses deleted function"}},
[b]="literal construction method %0 has incompatible signature",
[f]={{nil,t,{{a,Eb,Tb,Sb,Qb,Pb,a}," from B to C uses deleted function"}},{o,nil,{{a,Eb,Tb,Sb,Qb,Pb}," from B to C uses deleted function"}}},
[c]="literal construction method A has incompatible signature",
[g]=k,
[e]=d,
[h]="(?:|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?) uses deleted function",
[f]="literal construction method (.*?) has incompatible signature",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={ab,1331064356,W,X},
[i]={{"clang/lib/Sema/SemaCast.cpp",503,"/// 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_Deleted:\n    msg = diag::err_ovl_deleted_conversion_in_cast;"}},
[k]={{J,161,"/// Emits an error if the given method does not exist, or if the return\n/// type is not an Objective-C object.\nstatic bool validateBoxingMethod(Sema &S, SourceLocation Loc, const ObjCInterfaceDecl *Class, Selector Sel, const ObjCMethodDecl *Method) {\n  // ...\n  if (!ReturnType->isObjCObjectPointerType()) {\n    S.Diag(Loc, diag::err_objc_literal_method_sig) << Sel;"},{J,849,"ExprResult Sema::BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements) {\n  // ...\n  if (!ArrayWithObjectsMethod) {\n    // ...\n    if (!PtrT || !Context.hasSameUnqualifiedType(PtrT->getPointeeType(), IdT)) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{J,860,"ExprResult Sema::BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements) {\n  // ...\n  if (!ArrayWithObjectsMethod) {\n    // ...\n   // Check that the \'count\' parameter is integral.\n    if (!Method->parameters()[1]->getType()->isIntegerType()) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{J,1020,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  // ...\n  if (!DictionaryWithObjectsMethod) {\n    // ...\n    if (!PtrValue || !Context.hasSameUnqualifiedType(PtrValue->getPointeeType(), IdT)) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{J,1054,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  // ...\n if (!DictionaryWithObjectsMethod) {\n   // ...\n    if (!PtrKey || !Context.hasSameUnqualifiedType(PtrKey->getPointeeType(), IdT)) {\n      // ...\n      if (err) {\n        Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"},{J,1067,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  // ...\n  if (!DictionaryWithObjectsMethod) {\n    // ...\n    if (!CountType->isIntegerType()) {\n      Diag(SR.getBegin(), diag::err_objc_literal_method_sig) << Sel;"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/objc-literal-sig.m"]={"clang/test/SemaObjC/objc-literal-sig.m:45:9: error: literal construction method \'numberWithBool:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:46:9: error: literal construction method \'numberWithBool:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:47:14: error: literal construction method \'arrayWithObjects:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:48:15: error: literal construction method \'arrayWithObjects:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:49:13: error: literal construction method \'dictionaryWithObjects:forKeys:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:50:14: error: literal construction method \'dictionaryWithObjects:forKeys:count:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:51:12: error: literal construction method \'stringWithUTF8String:\' has incompatible signature","clang/test/SemaObjC/objc-literal-sig.m:52:13: error: literal construction method \'stringWithUTF8String:\' has incompatible signature"}
}
}
},
},
["err_ovl_deleted_init"]={
["err_objc_method_unsupported_param_ret_type"]={
[d]="err_ovl_deleted_init",
[j]={{nil,P,"err_objc_method_unsupported_param_ret_type"}},
[e]={{nil,x,"call to deleted constructor of %0"},{u,nil,"call to %select{unavailable|deleted}0 constructor of %1"}},
[b]={{nil,P,"%0 %select{parameter|return}1 type is unsupported; support for vector types for this target is introduced in %2"}},
[f]={{nil,x,"call to deleted constructor of A"},{u,nil,{"call to ",{fc,ec}," constructor of B"}}},
[c]={{nil,P,{"A ",{"parameter","return"}," type is unsupported; support for vector types for this target is introduced in C"}}},
[g]=k,
[e]=d,
[h]="call to deleted constructor of (.*?)",
[f]="(.*?) (?:parameter|return) type is unsupported; support for vector types for this target is introduced in (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,P,q}},
[j]={q,1236199783,r,s},
[h]={"a8a372d85e09",1493289828,"[ObjC] Disallow vector parameters and return values in Objective-C methods","[ObjC] Disallow vector parameters and return values in Objective-C methods\nfor iOS < 9 and OS X < 10.11 X86 targets\n\nThis commit adds a new error that disallows methods that have parameters/return\nvalues with a vector type for some older X86 targets. This diagnostic is\nneeded because objc_msgSend doesn\'t support SIMD vector registers/return values\non X86 in iOS < 9 and OS X < 10.11. Note that we don\'t necessarily know if the\nvector argument/return value will use a SIMD register, so instead we chose to\nbe conservative and prohibit all vector types.\n\nrdar://21662309\n\nDifferential Revision: https://reviews.llvm.org/D28670\n\nllvm-svn: 301532"},
[i]={{P,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;"},{P,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;"}},
[k]={{z,4660,"/// Verify that the method parameters/return value have types that are supported\n/// by the x86 target.\nstatic void checkObjCMethodX86VectorTypes(Sema &SemaRef, const ObjCMethodDecl *Method) {\n // ...\n SemaRef.Diag(Loc, diag::err_objc_method_unsupported_param_ret_type) << T << (Method->getReturnType()->isVectorType() ? /*return value*/ 1 : /*parameter*/ 0) << (Triple.isMacOSX() ? \"macOS 10.11\" : \"iOS 9\");"}},
[l]={
[l]={
["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> &&\'"}
["clang/test/SemaObjC/x86-method-vector-values.m"]={"clang/test/SemaObjC/x86-method-vector-values.m:40:20: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:48:3: error: \'float3\' (vector of 3 \'float\' values) return type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:51:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:54:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:57:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:60:21: error: \'float3\' (vector of 3 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:63:4: error: \'__m128\' (vector of 4 \'float\' values) return type is unsupported; support for vector types for this target is introduced in iOS 9","clang/test/SemaObjC/x86-method-vector-values.m:66:19: error: \'__m128\' (vector of 4 \'float\' values) parameter type is unsupported; support for vector types for this target is introduced in iOS 9"}
}
}
},
},
["err_ovl_deleted_member_call"]={
["err_objc_missing_end"]={
[d]="err_ovl_deleted_member_call",
[j]="err_objc_missing_end",
[e]={{nil,x,"call to deleted member function %0"},{u,nil,"call to %select{unavailable|deleted}0 member function %1%2"}},
[b]="missing \'@end\'",
[f]={{nil,x,"call to deleted member function A"},{u,nil,{"call to ",{fc,ec}," member function BC"}}},
[c]="missing \'@end\'",
[g]=k,
[e]=d,
[h]="call to deleted member function (.*?)",
[f]="missing \'@end\'",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={q,1236199783,r,s},
[h]={R,1236199783,Q,S},
[i]={{E,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);"}},
[k]={{B,201,"void Parser::CheckNestedObjCContexts(SourceLocation AtLoc) {\n  // ...\n  Diag(AtLoc, diag::err_objc_missing_end) << FixItHint::CreateInsertion(AtLoc, \"@end\\n\");"},{B,745,"///  objc-interface-decl-list:\n///    empty\n///     objc-interface-decl-list objc-property-decl [OBJC2]\n///     objc-interface-decl-list objc-method-requirement [OBJC2]\n///     objc-interface-decl-list objc-method-proto \';\'\n///     objc-interface-decl-list declaration\n///     objc-interface-decl-list \';\'\n///\n///   objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    case tok::objc_implementation:\n    case tok::objc_interface:\n      Diag(AtLoc, diag::err_objc_missing_end) << FixItHint::CreateInsertion(AtLoc, \"@end\\n\");"},{B,829,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  // We break out of the big loop in two cases: when we see @end or when we see\n  // EOF.  In the former case, eat the @end.  In the later case, emit an error.\n  if (Tok.is(tok::code_completion)) {\n  // ...\n  } else if (Tok.isObjCAtKeyword(tok::objc_end)) {\n  // ...\n  } else {\n    Diag(Tok, diag::err_objc_missing_end) << FixItHint::CreateInsertion(Tok.getLocation(), \"\\n@end\\n\");"},{B,2307,"Parser::ObjCImplParsingDataRAII::~ObjCImplParsingDataRAII() {\n  if (!Finished) {\n    // ...\n    if (P.isEofOrEom()) {\n      P.Diag(P.Tok, diag::err_objc_missing_end) << FixItHint::CreateInsertion(P.Tok.getLocation(), \"\\n@end\\n\");"}},
[l]={
[l]={
["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\'"}
["clang/test/SemaObjC/missing-atend-metadata.m"]={"clang/test/SemaObjC/missing-atend-metadata.m:9:1: error: missing \'@end\'","clang/test/SemaObjC/missing-atend-metadata.m:15:1: error: missing \'@end\'","clang/test/SemaObjC/missing-atend-metadata.m:22:1: error: missing \'@end\'","clang/test/SemaObjC/missing-atend-metadata.m:22:110: error: missing \'@end\'"}
}
}
},
},
["err_ovl_deleted_object_call"]={
["err_objc_multiple_subscript_type_conversion"]={
[d]="err_ovl_deleted_object_call",
[j]="err_objc_multiple_subscript_type_conversion",
[e]={{nil,x,"call to deleted function call operator in type %0"},{u,nil,"call to %select{unavailable|deleted}0 function call operator in type %1%2"}},
[b]="indexing expression is invalid because subscript type %0 has multiple type conversion functions",
[f]={{nil,x,"call to deleted function call operator in type A"},{u,nil,{"call to ",{fc,ec}," function call operator in type BC"}}},
[c]="indexing expression is invalid because subscript type A has multiple type conversion functions",
[g]=k,
[e]=d,
[h]="call to deleted function call operator in type (.*?)",
[f]="indexing expression is invalid because subscript type (.*?) has multiple type conversion functions",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={q,1236199783,r,s},
[h]={ab,1331064356,W,X},
[i]={{E,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);"}}
[k]={{O,1113,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  Diag(FromE->getExprLoc(), diag::err_objc_multiple_subscript_type_conversion) << FromE->getType();"}},
},
["err_ovl_deleted_oper"]={
[d]="err_ovl_deleted_oper",
[e]={{nil,x,"overload resolution selected deleted operator \'%0\'"},{u,nil,"overload resolution selected %select{unavailable|deleted}0 operator \'%1\'%2"}},
[f]={{nil,x,"overload resolution selected deleted operator \'A\'"},{u,nil,{"overload resolution selected ",{fc,ec}," operator \'B\'C"}}},
[g]=k,
[h]="overload resolution selected deleted operator \'(.*?)\'",
[b]=a,
[c]=m,
[j]={q,1236199783,r,s},
[i]={{E,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);"},{E,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);"},{E,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);"},{E,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/SemaCXX/rval-references-examples.cpp"]={"clang/test/SemaCXX/rval-references-examples.cpp:80:6: error: overload resolution selected deleted operator \'=\'"}
["clang/test/SemaObjCXX/objc-container-subscripting.mm"]={"clang/test/SemaObjCXX/objc-container-subscripting.mm:136:16: error: indexing expression is invalid because subscript type \'WeirdIndex\' has multiple type conversion functions"}
}
}
},
},
["err_ovl_deleted_special_init"]={
["err_objc_non_runtime_protocol_in_protocol_expr"]={
[d]="err_ovl_deleted_special_init",
[j]={{nil,A,"err_objc_non_runtime_protocol_in_protocol_expr"}},
[e]="call to implicitly-deleted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function}0 of %1",
[b]={{nil,A,"cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression"}},
[f]={{nil,nil,{"call to implicitly-deleted ",{"default constructor","copy constructor","move constructor","copy assignment operator","move assignment operator","destructor","function"}," of B"}}},
[c]={{nil,A,"cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression"}},
[g]=k,
[e]=d,
[h]="call to implicitly\\-deleted (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function) of (.*?)",
[f]="cannot use a protocol declared \'objc_non_runtime_protocol\' in a @protocol expression",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,A,q}},
[j]={"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"},
[h]={"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"},
[i]={{P,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;"}},
[k]={{J,1397,"ExprResult Sema::ParseObjCProtocolExpression(IdentifierInfo *ProtocolId, SourceLocation AtLoc, SourceLocation ProtoLoc, SourceLocation LParenLoc, SourceLocation ProtoIdLoc, SourceLocation RParenLoc) {\n  // ...\n  if (PDecl->isNonRuntimeProtocol())\n   Diag(ProtoLoc, diag::err_objc_non_runtime_protocol_in_protocol_expr) << PDecl;"}}
[l]={
["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_ovl_deleted_special_oper"]={
["err_objc_non_trivially_copyable_boxed_expression_type"]={
[d]="err_ovl_deleted_special_oper",
[j]="err_objc_non_trivially_copyable_boxed_expression_type",
[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",
[b]="non-trivially copyable type %0 cannot be used in a boxed expression",
[f]={{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"}}},
[c]="non-trivially copyable type A cannot be used in a boxed expression",
[g]=k,
[e]=d,
[h]="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",
[f]="non\\-trivially copyable type (.*?) cannot be used in a boxed expression",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={"fde64956f95c",1435296516,"[ObjC] Add NSValue support for objc_boxed_expressions","[ObjC] Add NSValue support for objc_boxed_expressions\n\nPatch extends ObjCBoxedExpr to accept records (structs and unions):\n\ntypedef struct __attribute__((objc_boxable)) _Color {\n  int r, g, b;\n} Color;\n\nColor color;\nNSValue *boxedColor = @(color); // [NSValue valueWithBytes:&color objCType:@encode(Color)];\n\nllvm-svn: 240761"},
[i]={{E,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();"}},
[k]={{J,722,"ExprResult Sema::BuildObjCBoxedExpr(SourceRange SR, Expr *ValueExpr) {\n // ...\n if (const PointerType *PT = ValueType->getAs<PointerType>()) {\n // ...\n } else if (ValueType->isBuiltinType()) {\n // ...\n } else if (const EnumType *ET = ValueType->getAs<EnumType>()) {\n  // ...\n  } else if (ValueType->isObjCBoxableRecordType()) {\n   // ...\n   if (!ValueType.isTriviallyCopyableType(Context)) {\n     Diag(Loc, diag::err_objc_non_trivially_copyable_boxed_expression_type) << ValueType << ValueExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/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"}
["clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm"]={"clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm:87:15: error: non-trivially copyable type \'NonTriviallyCopyable\' cannot be used in a boxed expression","clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm:112:68: error: non-trivially copyable type \'NonTriviallyCopyable\' cannot be used in a boxed expression","clang/test/SemaObjCXX/objc-boxed-expressions-nsvalue.mm:105:45: error: non-trivially copyable type \'NonTriviallyCopyable\' cannot be used in a boxed expression"}
}
}
},
},
["err_ovl_diff_return_type"]={
["err_objc_ns_bridged_invalid_cfobject"]={
[d]="err_ovl_diff_return_type",
[j]="err_objc_ns_bridged_invalid_cfobject",
[e]="functions that differ only in their return type cannot be overloaded",
[b]="ObjectiveC object of type %0 is bridged to %1, which is not valid CF object",
[f]="functions that differ only in their return type cannot be overloaded",
[c]="ObjectiveC object of type A is bridged to B, which is not valid CF object",
[g]=k,
[e]=d,
[h]="functions that differ only in their return type cannot be overloaded",
[f]="ObjectiveC object of type (.*?) is bridged to (.*?), which is not valid CF object",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={q,1236199783,r,s},
[h]={"8a0210e535c5",1384629392,"ObjectiveC ARC. Validate toll free bridge casting","ObjectiveC ARC. Validate toll free bridge casting\nof ObjectiveC objects to CF types when CF type\nhas the objc_bridge attribute.\n\nllvm-svn: 194930"},
[i]={{D,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();"}},
[k]={{J,4121,"template <typename TB> static bool CheckObjCBridgeCFCast(Sema &S, QualType castType, Expr *castExpr, bool &HadTheAttribute, bool warn) {\n  // ...\n  while (const auto *TD = T->getAs<TypedefType>()) {\n    // ...\n    if (TB *ObjCBAttr = getObjCBridgeAttr<TB>(TD)) {\n      if (IdentifierInfo *Parm = ObjCBAttr->getBridgedType()) {\n        // ...\n        S.Diag(castExpr->getBeginLoc(), diag::err_objc_ns_bridged_invalid_cfobject) << castExpr->getType() << castType;"}}
[l]={
["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_ovl_no_conversion_in_cast"]={
["err_objc_object_assignment"]={
[d]="err_ovl_no_conversion_in_cast",
[j]="err_objc_object_assignment",
[e]="cannot convert %1 to %2 without a conversion operator",
[b]="cannot assign to class object (%0 invalid)",
[f]="cannot convert B to C without a conversion operator",
[c]="cannot assign to class object (A invalid)",
[g]=k,
[e]=d,
[h]="cannot convert (.*?) to (.*?) without a conversion operator",
[f]="cannot assign to class object \\((.*?) invalid\\)",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={"3c4225a8581f",1327428345,"objc: issue error if assigning objects in fragile-abi too.","objc: issue error if assigning objects in fragile-abi too.\n// rdar://10731065\n\nllvm-svn: 148823"},
[i]={{"clang/lib/Sema/SemaCast.cpp",491,"/// 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_No_Viable_Function:\n    if (candidates.empty())\n      msg = diag::err_ovl_no_conversion_in_cast;"}},
[k]={{N,14499,"// C99 6.5.16.1\nQualType Sema::CheckAssignmentOperands(Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType, BinaryOperatorKind Opc) {\n  // ...\n  if (CompoundType.isNull()) {\n    // ...\n    if (ConvTy == Compatible && LHSType->isObjCObjectType())\n      Diag(Loc, diag::err_objc_object_assignment) << LHSType;"}},
[l]={
[l]={
["clang/test/SemaObjCXX/cstyle-cast.mm"]={"clang/test/SemaObjCXX/cstyle-cast.mm:21:3: error: cannot convert \'X\' to \'id\' without a conversion operator"}
["clang/test/SemaObjCXX/fragile-abi-object-assign.m"]={"clang/test/SemaObjCXX/fragile-abi-object-assign.m:10:23: error: cannot assign to class object (\'MyView\' invalid)"}
}
}
},
},
["err_ovl_no_oper"]={
["err_objc_object_catch"]={
[d]="err_ovl_no_oper",
[j]="err_objc_object_catch",
[e]="type %0 does not provide a %select{subscript|call}1 operator",
[b]="cannot catch an Objective-C object by value",
[f]={{nil,nil,{"type A does not provide a ",{"subscript","call"}," operator"}}},
[c]="cannot catch an Objective-C object by value",
[g]=k,
[e]=d,
[h]="type (.*?) does not provide a (?:subscript|call) operator",
[f]="cannot catch an Objective\\-C object by value",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={"2ca705eb134f",1279931843,"Support catching Objective C pointers in C++ under the non-fragile NeXT runtime.","Support catching Objective C pointers in C++ under the non-fragile NeXT runtime.\nDiagnose attempts to do this under the GNU or fragile NeXT runtimes.\n\nllvm-svn: 109298"},
[i]={{E,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);"},{E,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());"}},
[k]={{"clang/lib/Sema/SemaDeclCXX.cpp",16673,"/// Perform semantic analysis for the variable declaration that\n/// occurs within a C++ catch clause, returning the newly-created\n/// variable.\nVarDecl *Sema::BuildExceptionDeclaration(Scope *S, TypeSourceInfo *TInfo, SourceLocation StartLoc, SourceLocation Loc, IdentifierInfo *Name) {\n  // ...\n  // Only the non-fragile NeXT runtime currently supports C++ catches\n // of ObjC types, and no runtime supports catching ObjC types by value.\n  if (!Invalid && getLangOpts().ObjC) {\n    // ...\n    if (T->isObjCObjectType()) {\n      Diag(Loc, diag::err_objc_object_catch);"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjCXX/exceptions.mm"]={"clang/test/SemaObjCXX/exceptions.mm:8:26: error: cannot catch an Objective-C object by value"}
}
}
},
},
["err_ovl_no_viable_conversion_in_cast"]={
["err_objc_override_direct_method"]={
[d]="err_ovl_no_viable_conversion_in_cast",
[j]={{nil,p,"err_objc_override_direct_method"}},
[e]={{nil,t,"no matching conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast|}0 from %1 to %2"},{o,nil,"no matching conversion for %select{|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2"}},
[b]={{nil,p,"cannot override a method that is declared direct by a superclass"}},
[f]={{nil,t,{"no matching conversion for ",{a,Eb,Tb,Sb,Qb,Pb,a}," from B to C"}},{o,nil,{"no matching conversion for ",{a,Eb,Tb,Sb,Qb,Pb}," from B to C"}}},
[c]={{nil,p,"cannot override a method that is declared direct by a superclass"}},
[g]=k,
[e]=d,
[h]="no matching conversion for (?:|static_cast|reinterpret_cast|dynamic_cast|C\\-style cast|functional\\-style cast|) from (.*?) to (.*?)",
[f]="cannot override a method that is declared direct by a superclass",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,p,q}},
[j]={"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"},
[h]={xb,1573050950,Cb,yb},
[i]={{"clang/lib/Sema/SemaCast.cpp",493,"/// 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_No_Viable_Function:\n    if (candidates.empty())\n    // ...\n    else\n      msg = diag::err_ovl_no_viable_conversion_in_cast;"}},
[k]={{z,4429,"void Sema::CheckObjCMethodDirectOverrides(ObjCMethodDecl *method, ObjCMethodDecl *overridden) {\n  if (overridden->isDirectMethod()) {\n    // ...\n    Diag(method->getLocation(), diag::err_objc_override_direct_method);"}},
[l]={
[l]={
["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\'"}
["clang/test/SemaObjC/method-direct-properties.m"]={"clang/test/SemaObjC/method-direct-properties.m:64:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:65:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:66:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:67:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:69:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:71:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:72:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:73:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:74:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:77:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:79:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:120:1: error: cannot override a method that is declared direct by a superclass","clang/test/SemaObjC/method-direct-properties.m:123:1: error: cannot override a method that is declared direct by a superclass"}
}
}
},
},
["err_ovl_no_viable_function_in_call"]={
["err_objc_parameterized_category_nonclass"]={
[d]="err_ovl_no_viable_function_in_call",
[j]="err_objc_parameterized_category_nonclass",
[e]="no matching function for call to %0",
[b]="%select{extension|category}0 of non-parameterized class %1 cannot have type parameters",
[f]="no matching function for call to A",
[c]={{nil,nil,{{"extension","category"}," of non-parameterized class B cannot have type parameters"}}},
[g]=k,
[e]=d,
[h]="no matching function for call to (.*?)",
[f]="(?:extension|category) of non\\-parameterized class (.*?) cannot have type parameters",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={q,1236199783,r,s},
[h]={Y,1436241435,V,Z},
[i]={{O,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();"},{Q,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;"},{Q,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);"},{E,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);"},{E,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);"}},
[k]={{z,1877,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  // ...\n  // If we have a type parameter list, check it.\n if (typeParamList) {\n   if (auto prevTypeParamList = IDecl->getTypeParamList()) {\n   // ...\n    } else {\n     Diag(typeParamList->getLAngleLoc(), diag::err_objc_parameterized_category_nonclass) << (CategoryName != nullptr) << ClassName << typeParamList->getSourceRange();"}},
[l]={
[l]={
["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\'"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:156:20: error: category of non-parameterized class \'NSObject\' cannot have type parameters","clang/test/SemaObjC/parameterized_classes.m:159:20: error: extension of non-parameterized class \'NSObject\' cannot have type parameters"}
}
}
},
},
["err_ovl_no_viable_function_in_init"]={
["err_objc_parameterized_forward_class"]={
[d]="err_ovl_no_viable_function_in_init",
[j]="err_objc_parameterized_forward_class",
[e]="no matching constructor for initialization of %0",
[b]="forward declaration of non-parameterized class %0 cannot have type parameters",
[f]="no matching constructor for initialization of A",
[c]="forward declaration of non-parameterized class A cannot have type parameters",
[g]=k,
[e]=d,
[h]="no matching constructor for initialization of (.*?)",
[f]="forward declaration of non\\-parameterized class (.*?) cannot have type parameters",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={q,1236199783,r,s},
[h]={Y,1436241435,V,Z},
[i]={{P,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);"}},
[k]={{z,3132,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  // ...\n  for (unsigned i = 0; i != NumElts; ++i) {\n    // ...\n    if (PrevIDecl && TypeParams) {\n      if (ObjCTypeParamList *PrevTypeParams = PrevIDecl->getTypeParamList()) {\n      // ...\n      } else if (ObjCInterfaceDecl *Def = PrevIDecl->getDefinition()) {\n        // ...\n        Diag(IdentLocs[i], diag::err_objc_parameterized_forward_class) << ClassName << TypeParams->getSourceRange();"}},
[l]={
[l]={
["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)\')"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:106:8: error: forward declaration of non-parameterized class \'NSObject\' cannot have type parameters"}
}
}
},
},
["err_ovl_no_viable_literal_operator"]={
["err_objc_parameterized_forward_class_first"]={
[d]="err_ovl_no_viable_literal_operator",
[j]="err_objc_parameterized_forward_class_first",
[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",
[b]="class %0 previously declared with type parameters",
[f]={{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"}}}},
[c]="class A previously declared with type parameters",
[g]=k,
[e]=d,
[h]="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)",
[f]="class (.*?) previously declared with type parameters",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={"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"},
[h]={Y,1436241435,V,Z},
[i]={{"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);"}},
[k]={{z,1026,"ObjCInterfaceDecl *Sema::ActOnStartClassInterface(Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  // ...\n  // If there was a forward declaration with type parameters, check\n  // for consistency.\n  if (PrevIDecl) {\n    if (ObjCTypeParamList *prevTypeParamList = PrevIDecl->getTypeParamList()) {\n      if (typeParamList) {\n      // ...\n      } else {\n        Diag(ClassLoc, diag::err_objc_parameterized_forward_class_first) << ClassName;"}},
[l]={
[l]={
["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"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:112:12: error: class \'NSNumber\' previously declared with type parameters"}
}
}
},
},
["err_ovl_no_viable_member_function_in_call"]={
["err_objc_parameterized_implementation"]={
[d]="err_ovl_no_viable_member_function_in_call",
[j]="err_objc_parameterized_implementation",
[e]="no matching member function for call to %0",
[b]="@implementation cannot have type parameters",
[f]="no matching member function for call to A",
[c]="@implementation cannot have type parameters",
[g]=k,
[e]=d,
[h]="no matching member function for call to (.*?)",
[f]="@implementation cannot have type parameters",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={q,1236199783,r,s},
[h]={Y,1436241435,V,Z},
[i]={{O,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();"},{E,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);"},{E,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();"}},
[k]={{B,2192,"///  objc-implementation:\n///     objc-class-implementation-prologue\n///     objc-category-implementation-prologue\n///\n///   objc-class-implementation-prologue:\n///     @implementation identifier objc-superclass[opt]\n///       objc-class-instance-variables[opt]\n///\n///   objc-category-implementation-prologue:\n///     @implementation identifier ( identifier )\nParser::DeclGroupPtrTy Parser::ParseObjCAtImplementationDeclaration(SourceLocation AtLoc, ParsedAttributes &Attrs) {\n  // ...\n  // Neither a type parameter list nor a list of protocol references is\n  // permitted here. Parse and diagnose them.\n  if (Tok.is(tok::less)) {\n    // ...\n    if (parseObjCTypeParamListOrProtocolRefs(typeParamScope, lAngleLoc, protocolIdents, rAngleLoc)) {\n      Diag(diagLoc, diag::err_objc_parameterized_implementation) << SourceRange(diagLoc, PrevTokLocation);"}},
[l]={
[l]={
["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\'"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:165:20: error: @implementation cannot have type parameters","clang/test/SemaObjC/parameterized_classes.m:171:20: error: @implementation cannot have type parameters","clang/test/SemaObjC/parameterized_classes.m:174:20: error: @implementation cannot have type parameters"}
}
}
},
},
["err_ovl_no_viable_object_call"]={
["err_objc_postfix_attribute"]={
[d]="err_ovl_no_viable_object_call",
[j]="err_objc_postfix_attribute",
[e]="no matching function for call to object of type %0",
[b]="postfix attributes are not allowed on Objective-C directives",
[f]="no matching function for call to object of type A",
[c]="postfix attributes are not allowed on Objective-C directives",
[g]=k,
[e]=d,
[h]="no matching function for call to object of type (.*?)",
[f]="postfix attributes are not allowed on Objective\\-C directives",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={q,1236199783,r,s},
[h]={"04e213b6b6fb",1365010571,"Emit a nicer diagnostic for misplaced attributes on ObjC directives.","Emit a nicer diagnostic for misplaced attributes on ObjC directives.\n\nllvm-svn: 178670"},
[i]={{E,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());"}},
[k]={{B,37,"/// Skips attributes after an Objective-C @ directive. Emits a diagnostic.\nvoid Parser::MaybeSkipAttributes(tok::ObjCKeywordKind Kind) {\n  // ...\n  if (Tok.is(tok::kw___attribute)) {\n    if (Kind == tok::objc_interface || Kind == tok::objc_protocol)\n    // ...\n    else\n      Diag(Tok, diag::err_objc_postfix_attribute);"}},
[l]={
[l]={
["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)\')"}
["clang/test/Parser/attributes.mm"]={"clang/test/Parser/attributes.mm:19:17: error: postfix attributes are not allowed on Objective-C directives","clang/test/Parser/attributes.mm:22:8: error: postfix attributes are not allowed on Objective-C directives"}
}
}
},
},
["err_ovl_no_viable_oper"]={
["err_objc_postfix_attribute_hint"]={
[d]="err_ovl_no_viable_oper",
[j]="err_objc_postfix_attribute_hint",
[e]="no viable overloaded \'%0\'",
[b]="postfix attributes are not allowed on Objective-C directives, place them in front of \'%select{@interface|@protocol}0\'",
[f]="no viable overloaded \'A\'",
[c]={{nil,nil,{"postfix attributes are not allowed on Objective-C directives, place them in front of \'",{"@interface","@protocol"},"\'"}}},
[g]=k,
[e]=d,
[h]="no viable overloaded \'(.*?)\'",
[f]="postfix attributes are not allowed on Objective\\-C directives, place them in front of \'(?:@interface|@protocol)\'",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={q,1236199783,r,s},
[h]={"69a7914fec81",1365034510,"Make the ObjC attributes diagnostics a bit more informative.","Make the ObjC attributes diagnostics a bit more informative.\n\nllvm-svn: 178720"},
[i]={{E,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();"},{E,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();"}},
[k]={{B,34,"/// Skips attributes after an Objective-C @ directive. Emits a diagnostic.\nvoid Parser::MaybeSkipAttributes(tok::ObjCKeywordKind Kind) {\n  // ...\n  if (Tok.is(tok::kw___attribute)) {\n   if (Kind == tok::objc_interface || Kind == tok::objc_protocol)\n      Diag(Tok, diag::err_objc_postfix_attribute_hint) << (Kind == tok::objc_protocol);"}},
[l]={
[l]={
["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 \'=\'"}
["clang/test/Parser/attributes.mm"]={"clang/test/Parser/attributes.mm:16:12: error: postfix attributes are not allowed on Objective-C directives, place them in front of \'@interface\'","clang/test/Parser/attributes.mm:25:11: error: postfix attributes are not allowed on Objective-C directives, place them in front of \'@protocol\'"}
}
}
},
},
["err_ovl_no_viable_subscript"]={
["err_objc_precise_lifetime_bad_type"]={
[d]="err_ovl_no_viable_subscript",
[j]="err_objc_precise_lifetime_bad_type",
[e]="no viable overloaded operator[] for type %0",
[b]="objc_precise_lifetime only applies to retainable types; type here is %0",
[f]="no viable overloaded operator[] for type A",
[c]="objc_precise_lifetime only applies to retainable types; type here is A",
[g]=k,
[e]=d,
[h]="no viable overloaded operator\\[\\] for type (.*?)",
[f]="objc_precise_lifetime only applies to retainable types; type here is (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={"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"},
[i]={{E,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);"}},
[k]={{eb,6301,"static void handleObjCPreciseLifetimeAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!QT->isDependentType() && !QT->isObjCLifetimeType()) {\n    S.Diag(AL.getLoc(), diag::err_objc_precise_lifetime_bad_type) << QT;"}}
[l]={
["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_ovl_rewrite_equalequal_not_bool"]={
["err_objc_property_attr_mutually_exclusive"]={
[d]={{nil,o,"err_ovl_rewrite_equalequal_not_bool"}},
[j]="err_objc_property_attr_mutually_exclusive",
[e]={{nil,o,"return type %0 of selected \'operator==\' function for rewritten \'%1\' comparison is not \'bool\'"}},
[b]="property attributes \'%0\' and \'%1\' are mutually exclusive",
[f]={{nil,o,"return type A of selected \'operator==\' function for rewritten \'B\' comparison is not \'bool\'"}},
[c]="property attributes \'A\' and \'B\' are mutually exclusive",
[g]=k,
[e]=d,
[h]="return type (.*?) of selected \'operator\\=\\=\' function for rewritten \'(.*?)\' comparison is not \'bool\'",
[f]="property attributes \'(.*?)\' and \'(.*?)\' are mutually exclusive",
[b]=a,
[g]=a,
[c]={{nil,o,m}},
[i]=q,
[j]={"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"},
[h]={R,1236199783,Q,S},
[i]={{E,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();"}},
[k]={{"clang/lib/ARCMigrate/TransGCAttrs.cpp",290,"static void checkAllAtProps(MigrationContext &MigrateCtx, SourceLocation AtLoc, IndivPropsTy &IndProps) {\n  // ...\n  for (unsigned i = 0, e = ATLs.size(); i != e; ++i) {\n    // ...\n    TA.clearDiagnostic(diag::err_objc_property_attr_mutually_exclusive, AtLoc);"},{G,2644,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n if ((Attributes & ObjCPropertyAttribute::kind_readonly) && (Attributes & ObjCPropertyAttribute::kind_readwrite))\n   Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"readonly\""},{G,2681,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n // ...\n // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n   if (Attributes & ObjCPropertyAttribute::kind_copy) {\n     Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{G,2686,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_retain) {\n     Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{G,2691,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_strong) {\n     Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{G,2697,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n    // ...\n    if (getLangOpts().ObjCAutoRefCount && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n     Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"assign\""},{G,2705,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n   if (Attributes & ObjCPropertyAttribute::kind_copy) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{G,2710,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n // Check for more than one of { assign, copy, retain }.\n if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n   // ...\n    if (Attributes & ObjCPropertyAttribute::kind_retain) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{G,2715,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n // ...\n // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n    // ...\n    if (Attributes & ObjCPropertyAttribute::kind_strong) {\n     Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{G,2721,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n // ...\n  // Check for more than one of { assign, copy, retain }.\n if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n   // ...\n    if (getLangOpts().ObjCAutoRefCount && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"unsafe_unretained\""},{G,2727,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n // ...\n // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n    if (Attributes & ObjCPropertyAttribute::kind_retain) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"copy\""},{G,2732,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n    // ...\n   if (Attributes & ObjCPropertyAttribute::kind_strong) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"copy\""},{G,2737,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n // ...\n // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n   // ...\n    if (Attributes & ObjCPropertyAttribute::kind_weak) {\n      Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"copy\""},{G,2743,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for more than one of { assign, copy, retain }.\n  if (Attributes & ObjCPropertyAttribute::kind_assign) {\n // ...\n } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n // ...\n } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n  // ...\n  } else if ((Attributes & ObjCPropertyAttribute::kind_retain) && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n    Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"retain\""},{G,2748,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n // ...\n // Check for more than one of { assign, copy, retain }.\n if (Attributes & ObjCPropertyAttribute::kind_assign) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_unsafe_unretained) {\n  // ...\n  } else if (Attributes & ObjCPropertyAttribute::kind_copy) {\n  // ...\n  } else if ((Attributes & ObjCPropertyAttribute::kind_retain) && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n // ...\n } else if ((Attributes & ObjCPropertyAttribute::kind_strong) && (Attributes & ObjCPropertyAttribute::kind_weak)) {\n    Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"strong\""},{G,2757,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  if (Attributes & ObjCPropertyAttribute::kind_weak) {\n    // \'weak\' and \'nonnull\' are mutually exclusive.\n    if (auto nullability = PropertyTy->getNullability()) {\n      if (*nullability == NullabilityKind::NonNull)\n        Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"nonnull\""},{G,2764,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  if ((Attributes & ObjCPropertyAttribute::kind_atomic) && (Attributes & ObjCPropertyAttribute::kind_nonatomic)) {\n    Diag(Loc, diag::err_objc_property_attr_mutually_exclusive) << \"atomic\""}},
[l]={
[l]={
["clang/test/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\'"}
["clang/test/SemaObjC/weak-property.m"]={"clang/test/SemaObjC/weak-property.m:13:1: error: property attributes \'assign\' and \'weak\' are mutually exclusive","clang/test/SemaObjC/weak-property.m:14:1: error: property attributes \'copy\' and \'weak\' are mutually exclusive","clang/test/SemaObjC/weak-property.m:15:1: error: property attributes \'retain\' and \'weak\' are mutually exclusive","clang/test/SemaObjC/weak-property.m:16:1: error: property attributes \'assign\' and \'weak\' are mutually exclusive"}
}
}
},
},
["err_ovl_static_nonstatic_member"]={
["err_objc_property_bitfield"]={
[d]="err_ovl_static_nonstatic_member",
[j]="err_objc_property_bitfield",
[e]="static and non-static member functions with the same parameter types cannot be overloaded",
[b]="property name cannot be a bit-field",
[f]="static and non-static member functions with the same parameter types cannot be overloaded",
[c]="property name cannot be a bit-field",
[g]=k,
[e]=d,
[h]="static and non\\-static member functions with the same parameter types cannot be overloaded",
[f]="property name cannot be a bit\\-field",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={q,1236199783,r,s},
[h]={R,1236199783,Q,S},
[i]={{D,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);"}},
[k]={{B,778,"///   objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///     objc-interface-decl-list objc-method-requirement [OBJC2]\n///     objc-interface-decl-list objc-method-proto \';\'\n///     objc-interface-decl-list declaration\n///     objc-interface-decl-list \';\'\n///\n///   objc-method-requirement: [OBJC2]\n///     @required\n///     @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    case tok::objc_property:\n      // ...\n      auto ObjCPropertyCallback = [&](ParsingFieldDeclarator &FD) {\n        // ...\n        if (FD.BitfieldSize) {\n          Diag(AtLoc, diag::err_objc_property_bitfield) << FD.D.getSourceRange();"}},
[l]={
[l]={
["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"}
["clang/test/Parser/objc-property-syntax.m"]={"clang/test/Parser/objc-property-syntax.m:7:1: error: property name cannot be a bit-field"}
}
}
},
},
["err_ovl_unresolvable"]={
["err_objc_property_requires_field_name"]={
[d]="err_ovl_unresolvable",
[j]="err_objc_property_requires_field_name",
[e]={{nil,K,"reference to %select{overloaded|multiversioned}1 function could not be resolved; did you mean to call it%select{| with no arguments}0?"},{B,nil,"reference to overloaded function could not be resolved; did you mean to call it%select{| with no arguments}0?"}},
[b]="property requires fields to be named",
[f]={{nil,K,{"reference to ",{"overloaded","multiversioned"}," function could not be resolved; did you mean to call it",{a," with no arguments"},"?"}},{B,nil,{"reference to overloaded function could not be resolved; did you mean to call it",{a," with no arguments"},"?"}}},
[c]="property requires fields to be named",
[g]=k,
[e]=d,
[h]="reference to (?:overloaded|multiversioned) function could not be resolved; did you mean to call it(?:| with no arguments)\\?",
[f]="property requires fields to be named",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={"36226621f600",1286849357,"Progress.","Progress.\n\nllvm-svn: 116287"},
[h]={R,1236199783,Q,S},
[i]={{O,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),"}},
[k]={{B,773,"///   objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n   case tok::objc_property:\n     // ...\n     auto ObjCPropertyCallback = [&](ParsingFieldDeclarator &FD) {\n        if (FD.D.getIdentifier() == nullptr) {\n          Diag(AtLoc, diag::err_objc_property_requires_field_name) << FD.D.getSourceRange();"}},
[l]={
[l]={
["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?"}
["clang/test/SemaObjC/property-9.m"]={"clang/test/SemaObjC/property-9.m:48:1: error: property requires fields to be named"}
}
}
},
},
["err_ownership_returns_index_mismatch"]={
["err_objc_property_requires_object"]={
[d]="err_ownership_returns_index_mismatch",
[j]="err_objc_property_requires_object",
[e]="\'ownership_returns\' attribute index does not match; here it is %0",
[b]="property with \'%0\' attribute must be of object type",
[f]="\'ownership_returns\' attribute index does not match; here it is A",
[c]="property with \'A\' attribute must be of object type",
[g]=k,
[e]=d,
[h]="\'ownership_returns\' attribute index does not match; here it is (.*?)",
[f]="property with \'(.*?)\' attribute must be of object type",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={R,1236199783,Q,S},
[i]={{dc,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();"}},
[k]={{G,2657,"void Sema::CheckObjCPropertyAttributes(Decl *PDecl, SourceLocation Loc, unsigned &Attributes, bool propertyInPrimaryClass) {\n  // ...\n  // Check for copy or retain on non-object types.\n if ((Attributes & (ObjCPropertyAttribute::kind_weak | ObjCPropertyAttribute::kind_copy | ObjCPropertyAttribute::kind_retain | ObjCPropertyAttribute::kind_strong)) && !PropertyTy->isObjCRetainableType() && !PropertyDecl->hasAttr<ObjCNSObjectAttr>()) {\n   Diag(Loc, diag::err_objc_property_requires_object) << (Attributes & ObjCPropertyAttribute::kind_weak ? \"weak\" : Attributes & ObjCPropertyAttribute::kind_copy ? \"copy\" : \"retain (or strong)\");"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/property-10.m"]={"clang/test/SemaObjC/property-10.m:8:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:9:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:11:1: error: property with \'copy\' attribute must be of object type","clang/test/SemaObjC/property-10.m:30:1: error: property with \'copy\' attribute must be of object type","clang/test/SemaObjC/property-10.m:35:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:36:1: error: property with \'retain (or strong)\' attribute must be of object type","clang/test/SemaObjC/property-10.m:37:1: error: property with \'copy\' attribute must be of object type","clang/test/SemaObjC/property-10.m:38:1: error: property with \'weak\' attribute must be of object type"}
}
}
},
},
["err_ownership_type"]={
["err_objc_root_class_subclass"]={
[d]="err_ownership_type",
[j]="err_objc_root_class_subclass",
[e]="%0 attribute only applies to %select{pointer|integer}1 arguments",
[b]="objc_root_class attribute may only be specified on a root class declaration",
[f]={{nil,nil,{"A attribute only applies to ",{"pointer","integer"}," arguments"}}},
[c]="objc_root_class attribute may only be specified on a root class declaration",
[g]=k,
[e]=d,
[h]="(.*?) attribute only applies to (?:pointer|integer) arguments",
[f]="objc_root_class attribute may only be specified on a root class declaration",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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 checking.  Patch by Andrew McGregor!\n\nllvm-svn: 109939"},
[h]={"acfbe9e1f228",1333735942,"Added a new attribute, objc_root_class, which informs the compiler when a root class is intentionall...","Added a new attribute, objc_root_class, which informs the compiler when a root class is intentionally declared.\nThe warning this inhibits, -Wobjc-root-class, is opt-in for now. However, all clang unit tests that would trigger\nthe warning have been updated to use -Wno-objc-root-class. <rdar://problem/7446698>\n\nllvm-svn: 154187"},
[i]={{dc,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();"}},
[k]={{z,4155,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    // ...\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      // ...\n      if (IDecl->getSuperClass() == nullptr) {\n      // ...\n      } else if (HasRootClassAttr) {\n        // ...\n        Diag(IDecl->getLocation(), diag::err_objc_root_class_subclass);"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/attr-root-class.m"]={"clang/test/SemaObjC/attr-root-class.m:9:12: error: objc_root_class attribute may only be specified on a root class declaration"}
}
}
},
},
["err_pack_expansion_length_conflict"]={
["err_objc_runtime_visible_category"]={
[d]="err_pack_expansion_length_conflict",
[j]="err_objc_runtime_visible_category",
[e]="pack expansion contains parameter packs %0 and %1 that have different lengths (%2 vs. %3)",
[b]="cannot implement a category for class %0 that is only visible via the Objective-C runtime",
[f]="pack expansion contains parameter packs A and B that have different lengths (C vs. D)",
[c]="cannot implement a category for class A that is only visible via the Objective-C runtime",
[g]=k,
[e]=d,
[h]="pack expansion contains parameter packs (.*?) and (.*?) that have different lengths \\((.*?) vs\\. (.*?)\\)",
[f]="cannot implement a category for class (.*?) that is only visible via the Objective\\-C runtime",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={"24ae22c04796",1459553032,"[Objective-C] Introduce objc_runtime_visible attribute.","[Objective-C] Introduce objc_runtime_visible attribute.\n\nThe objc_runtime_visible attribute deals with an odd corner case where\na particular Objective-C class is known to the Objective-C runtime\n(and, therefore, accessible by name) but its symbol has been hidden\nfor some reason. For such classes, teach CodeGen to use\nobjc_lookUpClass to retrieve the Class object, rather than referencing\nthe class symbol directly.\n\nClasses annotated with objc_runtime_visible have two major limitations\nthat fall out from places where Objective-C metadata needs to refer to\nthe class (or metaclass) symbol directly:\n\n* One cannot implement a subclass of an objc_runtime_visible class.\n* One cannot implement a category on an objc_runtime_visible class.\n\nImplements rdar://problem/25494092.\n\nllvm-svn: 265201"},
[i]={{rb,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);"}},
[k]={{z,1957,"/// ActOnStartCategoryImplementation - Perform semantic checks on the\n/// category implementation declaration and build an ObjCCategoryImplDecl\n/// object.\nObjCCategoryImplDecl *Sema::ActOnStartCategoryImplementation(SourceLocation AtCatImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *CatName, SourceLocation CatLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  // If the interface has the objc_runtime_visible attribute, we\n // cannot implement a category for it.\n if (IDecl && IDecl->hasAttr<ObjCRuntimeVisibleAttr>()) {\n   Diag(ClassLoc, diag::err_objc_runtime_visible_category) << IDecl->getDeclName();"}},
[l]={
[l]={
["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)"}
["clang/test/SemaObjC/attr-objc-runtime-visible.m"]={"clang/test/SemaObjC/attr-objc-runtime-visible.m:10:17: error: cannot implement a category for class \'A\' that is only visible via the Objective-C runtime"}
}
}
},
},
["err_pack_expansion_length_conflict_multilevel"]={
["err_objc_runtime_visible_subclass"]={
[d]="err_pack_expansion_length_conflict_multilevel",
[j]="err_objc_runtime_visible_subclass",
[e]="pack expansion contains parameter pack %0 that has a different length (%1 vs. %2) from outer parameter packs",
[b]="cannot implement subclass %0 of a superclass %1 that is only visible via the Objective-C runtime",
[f]="pack expansion contains parameter pack A that has a different length (B vs. C) from outer parameter packs",
[c]="cannot implement subclass A of a superclass B that is only visible via the Objective-C runtime",
[g]=k,
[e]=d,
[h]="pack expansion contains parameter pack (.*?) that has a different length \\((.*?) vs\\. (.*?)\\) from outer parameter packs",
[f]="cannot implement subclass (.*?) of a superclass (.*?) that is only visible via the Objective\\-C runtime",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={"24ae22c04796",1459553032,"[Objective-C] Introduce objc_runtime_visible attribute.","[Objective-C] Introduce objc_runtime_visible attribute.\n\nThe objc_runtime_visible attribute deals with an odd corner case where\na particular Objective-C class is known to the Objective-C runtime\n(and, therefore, accessible by name) but its symbol has been hidden\nfor some reason. For such classes, teach CodeGen to use\nobjc_lookUpClass to retrieve the Class object, rather than referencing\nthe class symbol directly.\n\nClasses annotated with objc_runtime_visible have two major limitations\nthat fall out from places where Objective-C metadata needs to refer to\nthe class (or metaclass) symbol directly:\n\n* One cannot implement a subclass of an objc_runtime_visible class.\n* One cannot implement a category on an objc_runtime_visible class.\n\nImplements rdar://problem/25494092.\n\nllvm-svn: 265201"},
[i]={{rb,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);"}},
[k]={{z,2107,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  // If the superclass has the objc_runtime_visible attribute, we\n // cannot implement a subclass of it.\n if (IDecl->getSuperClass() && IDecl->getSuperClass()->hasAttr<ObjCRuntimeVisibleAttr>()) {\n   Diag(ClassLoc, diag::err_objc_runtime_visible_subclass) << IDecl->getDeclName() << IDecl->getSuperClass()->getDeclName();"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/attr-objc-runtime-visible.m"]={"clang/test/SemaObjC/attr-objc-runtime-visible.m:16:17: error: cannot implement subclass \'B\' of a superclass \'A\' that is only visible via the Objective-C runtime"}
}
}
},
},
["err_pack_expansion_length_conflict_partial"]={
["err_objc_subscript_base_type"]={
[d]={{nil,K,"err_pack_expansion_length_conflict_partial"}},
[j]="err_objc_subscript_base_type",
[e]={{nil,K,"pack expansion contains parameter pack %0 that has a different length (at least %1 vs. %2) from outer parameter packs"}},
[b]="%select{dictionary|array}1 subscript base type %0 is not an Objective-C object",
[f]={{nil,K,"pack expansion contains parameter pack A that has a different length (at least B vs. C) from outer parameter packs"}},
[c]={{nil,nil,{{"dictionary","array"}," subscript base type A is not an Objective-C object"}}},
[g]=k,
[e]=d,
[h]="pack expansion contains parameter pack (.*?) that has a different length \\(at least (.*?) vs\\. (.*?)\\) from outer parameter packs",
[f]="(?:dictionary|array) subscript base type (.*?) is not an Objective\\-C object",
[b]=a,
[g]=a,
[c]={{nil,K,m}},
[i]=q,
[j]={"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"},
[h]={ab,1331064356,W,X},
[i]={{rb,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);"}}
[k]={{O,1166,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n  if (ResultType.isNull()) {\n   S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_base_type) << BaseExpr->getType() << arrayRef;"},{O,1270,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (ResultType.isNull()) {\n    S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_base_type) << BaseExpr->getType() << arrayRef;"}}
},
},
["err_pack_expansion_member_init"]={
["err_objc_subscript_dic_object_type"]={
[d]="err_pack_expansion_member_init",
[j]="err_objc_subscript_dic_object_type",
[e]="pack expansion for initialization of member %0",
[b]="method object parameter type %0 is not object type",
[f]="pack expansion for initialization of member A",
[c]="method object parameter type A is not object type",
[g]=k,
[e]=d,
[h]="pack expansion for initialization of member (.*?)",
[f]="method object parameter type (.*?) is not object type",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={ab,1331064356,W,X},
[i]={{w,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());"}},
[k]={{O,1369,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n  // ...\n  } else if (AtIndexSetter && !arrayRef)\n    for (unsigned i = 0; i < 2; i++) {\n      // ...\n     if (!T->isObjCObjectPointerType()) {\n       if (i == 1)\n        // ...\n        else\n         S.Diag(RefExpr->getBaseExpr()->getExprLoc(), diag::err_objc_subscript_dic_object_type) << T;"}},
[l]={
[l]={
["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\'"}
[Ib]={"clang/test/SemaObjC/objc-container-subscripting.m:40:3: error: method object parameter type \'void *\' is not object type"}
}
}
},
},
["err_pack_expansion_without_parameter_packs"]={
["err_objc_subscript_index_type"]={
[d]="err_pack_expansion_without_parameter_packs",
[j]="err_objc_subscript_index_type",
[e]="pack expansion does not contain any unexpanded parameter packs",
[b]="method index parameter type %0 is not integral type",
[f]="pack expansion does not contain any unexpanded parameter packs",
[c]="method index parameter type A is not integral type",
[g]=k,
[e]=d,
[h]="pack expansion does not contain any unexpanded parameter packs",
[f]="method index parameter type (.*?) is not integral type",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={ab,1331064356,W,X},
[i]={{dc,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);"},{dc,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);"},{w,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();"},{w,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());"},{w,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());"},{qb,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));"},{rb,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;"},{rb,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;"},{rb,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\n  //  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();"},{rb,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();"},{rb,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();"}},
[k]={{O,1229,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n  if (AtIndexGetter) {\n    // ...\n   if ((arrayRef && !T->isIntegralOrEnumerationType()) || (!arrayRef && !T->isObjCObjectPointerType())) {\n      S.Diag(RefExpr->getKeyExpr()->getExprLoc(), arrayRef ? diag::err_objc_subscript_index_type : diag::err_objc_subscript_key_type) << T;"},{O,1346,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n    // ...\n   if (!T->isIntegralOrEnumerationType()) {\n     S.Diag(RefExpr->getKeyExpr()->getExprLoc(), diag::err_objc_subscript_index_type) << T;"}},
[l]={
[l]={
["clang/test/SemaTemplate/stmt-expr.cpp"]={"clang/test/SemaTemplate/stmt-expr.cpp:9:8: error: pack expansion does not contain any unexpanded parameter packs"}
[Ib]={"clang/test/SemaObjC/objc-container-subscripting.m:15:25: error: method index parameter type \'double\' is not integral type","clang/test/SemaObjC/objc-container-subscripting.m:16:9: error: method index parameter type \'void *\' is not integral type"}
}
}
},
},
["err_param_default_argument"]={
["err_objc_subscript_key_type"]={
[d]="err_param_default_argument",
[j]="err_objc_subscript_key_type",
[e]="C does not support default arguments",
[b]="method key parameter type %0 is not object type",
[f]="C does not support default arguments",
[c]="method key parameter type A is not object type",
[g]=k,
[e]=d,
[h]="C does not support default arguments",
[f]="method key parameter type (.*?) is not object type",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={q,1236199783,r,s},
[h]={ab,1331064356,W,X},
[i]={{w,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();"}},
[k]={{O,1230,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n // ...\n  if (AtIndexGetter) {\n   // ...\n    if ((arrayRef && !T->isIntegralOrEnumerationType()) || (!arrayRef && !T->isObjCObjectPointerType())) {\n      S.Diag(RefExpr->getKeyExpr()->getExprLoc(), arrayRef ? diag::err_objc_subscript_index_type : diag::err_objc_subscript_key_type) << T;"},{O,1366,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n  // ...\n  } else if (AtIndexSetter && !arrayRef)\n    for (unsigned i = 0; i < 2; i++) {\n     // ...\n      if (!T->isObjCObjectPointerType()) {\n       if (i == 1)\n          S.Diag(RefExpr->getKeyExpr()->getExprLoc(), diag::err_objc_subscript_key_type) << T;"}},
[l]={
[l]={
["clang/test/Sema/default1.c"]={"clang/test/Sema/default1.c:2:14: error: C does not support default arguments"}
[Ib]={"clang/test/SemaObjC/objc-container-subscripting.m:39:26: error: method key parameter type \'id *\' is not object type","clang/test/SemaObjC/objc-container-subscripting.m:40:14: error: method key parameter type \'id *\' is not object type"}
}
}
},
},
["err_param_default_argument_member_template_redecl"]={
["err_objc_subscript_method_not_found"]={
[d]="err_param_default_argument_member_template_redecl",
[j]="err_objc_subscript_method_not_found",
[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",
[b]="expected method to %select{read|write}1 %select{dictionary|array}2 element not found on object of type %0",
[f]={{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"}}}},
[c]={{nil,nil,{"expected method to ",{"read","write"}," ",{"dictionary","array"}," element not found on object of type A"}}},
[g]=k,
[e]=d,
[h]="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)",
[f]="expected method to (?:read|write) (?:dictionary|array) element not found on object of type (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={ab,1331064356,W,X},
[i]={{w,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();"}},
[k]={{O,1214,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  // ...\n  if (!AtIndexGetter) {\n   if (!BaseT->isObjCIdType()) {\n     S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_method_not_found) << BaseExpr->getType() << 0 << arrayRef;"},{O,1331,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n // ...\n if (!AtIndexSetter) {\n   if (!BaseT->isObjCIdType()) {\n     S.Diag(BaseExpr->getExprLoc(), diag::err_objc_subscript_method_not_found) << BaseExpr->getType() << 1 << arrayRef;"}},
[l]={
[l]={
["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"}
[Ib]={"clang/test/SemaObjC/objc-container-subscripting.m:20:3: error: expected method to write array element not found on object of type \'I *\'","clang/test/SemaObjC/objc-container-subscripting.m:21:10: error: expected method to read array element not found on object of type \'I *\'"}
}
}
},
},
["err_param_default_argument_missing"]={
["err_objc_subscript_object_type"]={
[d]="err_param_default_argument_missing",
[j]="err_objc_subscript_object_type",
[e]="missing default argument on parameter",
[b]="cannot assign to this %select{dictionary|array}1 because assigning method\'s 2nd parameter of type %0 is not an Objective-C pointer type",
[f]="missing default argument on parameter",
[c]={{nil,nil,{"cannot assign to this ",{"dictionary","array"}," because assigning method\'s 2nd parameter of type A is not an Objective-C pointer type"}}},
[g]=k,
[e]=d,
[h]="missing default argument on parameter",
[f]="cannot assign to this (?:dictionary|array) because assigning method\'s 2nd parameter of type (.*?) is not an Objective\\-C pointer type",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={q,1236199783,r,s},
[h]={ab,1331064356,W,X},
[i]={{w,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);"}},
[k]={{O,1354,"bool ObjCSubscriptOpBuilder::findAtIndexSetter() {\n  // ...\n  if (AtIndexSetter && arrayRef) {\n    // ...\n    if (!T->isObjCObjectPointerType()) {\n      S.Diag(RefExpr->getBaseExpr()->getExprLoc(), diag::err_objc_subscript_object_type) << T << arrayRef;"}},
[l]={
[l]={
["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"}
[Ib]={"clang/test/SemaObjC/objc-container-subscripting.m:16:3: error: cannot assign to this array because assigning method\'s 2nd parameter of type \'id *\' is not an Objective-C pointer type"}
}
}
},
},
["err_param_default_argument_missing_name"]={
["err_objc_subscript_pointer"]={
[d]="err_param_default_argument_missing_name",
[j]="err_objc_subscript_pointer",
[e]="missing default argument on parameter %0",
[b]="indexing expression is invalid because subscript type %0 is not an Objective-C pointer",
[f]="missing default argument on parameter A",
[c]="indexing expression is invalid because subscript type A is not an Objective-C pointer",
[g]=k,
[e]=d,
[h]="missing default argument on parameter (.*?)",
[f]="indexing expression is invalid because subscript type (.*?) is not an Objective\\-C pointer",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={q,1236199783,r,s},
[h]={"ba0afde486f5",1332957409,"objective-c: Improve diagnostics and","objective-c: Improve diagnostics and\nprovide \'fixit\' hint when dictionary index \nis not of proper type. // rdar://11062080\n\nllvm-svn: 153584"},
[i]={{w,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();"}},
[k]={{O,1070,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (!getLangOpts().CPlusPlus || !RecordTy || RecordTy->isIncompleteType()) {\n   // ...\n   if (isa<StringLiteral>(IndexExpr))\n     Diag(FromE->getExprLoc(), diag::err_objc_subscript_pointer) << T << FixItHint::CreateInsertion(FromE->getExprLoc(), \"@\");"}},
[l]={
[l]={
["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\'"}
["clang/test/SemaObjC/objc-dictionary-literal.m"]={"clang/test/SemaObjC/objc-dictionary-literal.m:50:14: error: indexing expression is invalid because subscript type \'char *\' is not an Objective-C pointer"}
}
}
},
},
["err_param_default_argument_nonfunc"]={
["err_objc_subscript_type_conversion"]={
[d]="err_param_default_argument_nonfunc",
[j]="err_objc_subscript_type_conversion",
[e]="default arguments can only be specified for parameters in a function declaration",
[b]="indexing expression is invalid because subscript type %0 is not an integral or Objective-C pointer type",
[f]="default arguments can only be specified for parameters in a function declaration",
[c]="indexing expression is invalid because subscript type A is not an integral or Objective-C pointer type",
[g]=k,
[e]=d,
[h]="default arguments can only be specified for parameters in a function declaration",
[f]="indexing expression is invalid because subscript type (.*?) is not an integral or Objective\\-C pointer type",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={q,1236199783,r,s},
[h]={ab,1331064356,W,X},
[i]={{w,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;"},{w,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();"}},
[k]={{O,1073,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (!getLangOpts().CPlusPlus || !RecordTy || RecordTy->isIncompleteType()) {\n    // ...\n    if (isa<StringLiteral>(IndexExpr))\n   // ...\n   else\n     Diag(FromE->getExprLoc(), diag::err_objc_subscript_type_conversion) << T;"},{O,1109,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  // ...\n  if (NoIntegrals == 0 && NoObjCIdPointers == 0) {\n    // ...\n    Diag(FromE->getExprLoc(), diag::err_objc_subscript_type_conversion) << FromE->getType();"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/objc-container-subscripting-2.m"]={"clang/test/SemaObjC/objc-container-subscripting-2.m:19:9: error: indexing expression is invalid because subscript type \'float\' is not an integral or Objective-C pointer type","clang/test/SemaObjC/objc-container-subscripting-2.m:20:16: error: indexing expression is invalid because subscript type \'double\' is not an integral or Objective-C pointer type"}
}
}
},
},
["err_param_default_argument_on_parameter_pack"]={
["err_objc_synchronized_expects_object"]={
[d]="err_param_default_argument_on_parameter_pack",
[j]="err_objc_synchronized_expects_object",
[e]="parameter pack cannot have a default argument",
[b]="@synchronized requires an Objective-C object type (%0 invalid)",
[f]="parameter pack cannot have a default argument",
[c]="@synchronized requires an Objective-C object type (A invalid)",
[g]=k,
[e]=d,
[h]="parameter pack cannot have a default argument",
[f]="@synchronized requires an Objective\\-C object type \\((.*?) invalid\\)",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={"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"},
[h]={"f881267db9a9",1480718311,"Mass-rename the handful of error_* diagnostics to err_*.","Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545"},
[i]={{w,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();"}},
[k]={{fb,4313,"ExprResult Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {\n  // ...\n  if (!type->isDependentType() && !type->isObjCObjectPointerType()) {\n   // ...\n    if (!pointerType || !pointerType->getPointeeType()->isVoidType()) {\n      if (getLangOpts().CPlusPlus) {\n        if (RequireCompleteType(atLoc, type, diag::err_incomplete_receiver_type))\n         return Diag(atLoc, diag::err_objc_synchronized_expects_object) << type << operand->getSourceRange();"},{fb,4320,"ExprResult Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {\n  // ...\n  if (!type->isDependentType() && !type->isObjCObjectPointerType()) {\n    // ...\n    if (!pointerType || !pointerType->getPointeeType()->isVoidType()) {\n      if (getLangOpts().CPlusPlus) {\n       // ...\n        if (!result.isUsable())\n          return Diag(atLoc, diag::err_objc_synchronized_expects_object) << type << operand->getSourceRange();"},{fb,4325,"ExprResult Sema::ActOnObjCAtSynchronizedOperand(SourceLocation atLoc, Expr *operand) {\n  // ...\n  if (!type->isDependentType() && !type->isObjCObjectPointerType()) {\n    // ...\n    if (!pointerType || !pointerType->getPointeeType()->isVoidType()) {\n      if (getLangOpts().CPlusPlus) {\n      // ...\n      } else {\n        return Diag(atLoc, diag::err_objc_synchronized_expects_object) << type << operand->getSourceRange();"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjCXX/synchronized.mm"]={"clang/test/SemaObjCXX/synchronized.mm:18:3: error: @synchronized requires an Objective-C object type (\'struct y\' invalid)"}
}
}
},
},
["err_param_default_argument_redefinition"]={
["err_objc_throw_expects_object"]={
[d]="err_param_default_argument_redefinition",
[j]="err_objc_throw_expects_object",
[e]="redefinition of default argument",
[b]="@throw requires an Objective-C object type (%0 invalid)",
[f]="redefinition of default argument",
[c]="@throw requires an Objective-C object type (A invalid)",
[g]=k,
[e]=d,
[h]="redefinition of default argument",
[f]="@throw requires an Objective\\-C object type \\((.*?) invalid\\)",
[b]=a,
[g]=a,
[c]=m,
[i]=q,
[j]={q,1236199783,r,s},
[h]={"f881267db9a9",1480718311,"Mass-rename the handful of error_* diagnostics to err_*.","Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545"},
[i]={{w,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;"}},
[k]={{fb,4271,"StmtResult Sema::BuildObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw) {\n  if (Throw) {\n   // ...\n   // Make sure the expression type is an ObjC pointer or \"void *\".\n   if (!ThrowType->isDependentType() && !ThrowType->isObjCObjectPointerType()) {\n     // ...\n     if (!PT || !PT->getPointeeType()->isVoidType())\n       return StmtError(Diag(AtLoc, diag::err_objc_throw_expects_object) << Throw->getType() << Throw->getSourceRange());"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/try-catch.m"]={"clang/test/SemaObjC/try-catch.m:48:3: error: @throw requires an Objective-C object type (\'int\' invalid)","clang/test/SemaObjC/try-catch.m:49:3: error: @throw requires an Objective-C object type (\'struct s\' invalid)","clang/test/SemaObjC/try-catch.m:50:3: error: @throw requires an Objective-C object type (\'struct s *\' invalid)"}
}
}
},
},
["err_param_default_argument_references_local"]={
["err_objc_type_arg_does_not_match_bound"]={
[d]="err_param_default_argument_references_local",
[j]="err_objc_type_arg_does_not_match_bound",
[e]="default argument references local variable %0 of enclosing function",
[b]="type argument %0 does not satisfy the bound (%1) of type parameter %2",
[f]="default argument references local variable A of enclosing function",
[c]="type argument A does not satisfy the bound (B) of type parameter C",
[g]=k,
[e]=d,
[h]="default argument references local variable (.*?) of enclosing function",
[f]="type argument (.*?) does not satisfy the bound \\((.*?)\\) of type parameter (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=C,
[j]={q,1236199783,r,s},
[h]={cb,1436241455,bb,db},
[i]={{w,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();"}},
[k]={{K,969,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n   // ...\n   // Objective-C object pointer types must be substitutable for the bounds.\n    if (const auto *typeArgObjC = typeArg->getAs<ObjCObjectPointerType>()) {\n     // ...\n     S.Diag(typeArgInfo->getTypeLoc().getBeginLoc(), diag::err_objc_type_arg_does_not_match_bound) << typeArg << bound << typeParam->getDeclName();"},{K,997,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n // ...\n for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    // ...\n    // Block pointer types are permitted for unqualified \'id\' bounds.\n    if (typeArg->isBlockPointerType()) {\n      // ...\n      S.Diag(typeArgInfo->getTypeLoc().getBeginLoc(), diag::err_objc_type_arg_does_not_match_bound) << typeArg << bound << typeParam->getDeclName();"}},
[l]={
[l]={
["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"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:272:14: error: type argument \'NSObject *\' does not satisfy the bound (\'id<NSCopying>\') of type parameter \'V\'","clang/test/SemaObjC/parameterized_classes.m:275:14: error: type argument \'id\' does not satisfy the bound (\'NSObject *\') of type parameter \'U\'","clang/test/SemaObjC/parameterized_classes.m:279:14: error: type argument \'id\' does not satisfy the bound (\'id<NSCopying>\') of type parameter \'V\'","clang/test/SemaObjC/parameterized_classes.m:323:29: error: type argument \'T\' (aka \'id\') does not satisfy the bound (\'NSObject *\') of type parameter \'U\'"}
}
}
},
},
["err_param_default_argument_references_param"]={
["err_objc_type_arg_explicit_nullability"]={
[d]="err_param_default_argument_references_param",
[j]="err_objc_type_arg_explicit_nullability",
[e]="default argument references parameter %0",
[b]="type argument %0 cannot explicitly specify nullability",
[f]="default argument references parameter A",
[c]="type argument A cannot explicitly specify nullability",
[g]=k,
[e]=d,
[h]="default argument references parameter (.*?)",
[f]="type argument (.*?) cannot explicitly specify nullability",
[b]=a,
[g]=a,
[c]=m,
[i]=Lb,
[j]={q,1236199783,r,s},
[h]={"6997525eaa8f",1443046461,"Forbid qualifiers on ObjC generic parameters and arguments, but","Forbid qualifiers on ObjC generic parameters and arguments, but\nsilently ignore them on arguments when they\'re provided indirectly\n(.e.g behind a template argument or typedef).\n\nThis is mostly just good language design --- specifying that a\ngeneric argument is __weak doesn\'t actually do anything --- but\nit also prevents assertions when trying to apply a different\nownership qualifier.\n\nrdar://21612439\n\nllvm-svn: 248436"},
[i]={{w,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();"}},
[k]={{K,897,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    // ...\n    // Type arguments cannot have explicit qualifiers or nullability.\n    // We ignore indirect sources of these, e.g. behind typedefs or\n    // template arguments.\n    if (TypeLoc qual = typeArgInfo->getTypeLoc().findExplicitQualifierLoc()) {\n     // ...\n     if (auto attr = qual.getAs<AttributedTypeLoc>()) {\n        // ...\n       if (attr.getTypePtr()->getImmediateNullability()) {\n         // ...\n          S.Diag(attr.getBeginLoc(), diag::err_objc_type_arg_explicit_nullability) << typeArg << FixItHint::CreateRemoval(rangeToRemove);"}},
[l]={
[l]={
["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\'"}
["clang/test/SemaObjC/parameterized_classes_subst.m"]={"clang/test/SemaObjC/parameterized_classes_subst.m:140:18: error: type argument \'NSControl *\' cannot explicitly specify nullability"}
}
}
},
},
["err_param_default_argument_references_this"]={
["err_objc_type_arg_missing"]={
[d]="err_param_default_argument_references_this",
[j]="err_objc_type_arg_missing",
[e]="default argument references \'this\'",
[b]="no type or protocol named %0",
[f]="default argument references \'this\'",
[c]="no type or protocol named A",
[g]=k,
[e]=d,
[h]="default argument references \'this\'",
[f]="no type or protocol named (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={q,1236199783,r,s},
[h]={cb,1436241455,bb,db},
[i]={{w,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();"}},
[k]={{z,1744,"void Sema::actOnObjCTypeArgsOrProtocolQualifiers(Scope *S, ParsedType baseType, SourceLocation lAngleLoc, ArrayRef<IdentifierInfo *> identifiers, ArrayRef<SourceLocation> identifierLocs, SourceLocation rAngleLoc, SourceLocation &typeArgsLAngleLoc, SmallVectorImpl<ParsedType> &typeArgs, SourceLocation &typeArgsRAngleLoc, SourceLocation &protocolLAngleLoc, SmallVectorImpl<Decl *> &protocols, SourceLocation &protocolRAngleLoc, bool warnOnIncompleteProtocols) {\n  // ...\n  for (unsigned i = 0, n = identifiers.size(); i != n; ++i) {\n    // ...\n    Diag(identifierLocs[i], (lookupKind == LookupAnyName ? diag::err_objc_type_arg_missing : lookupKind == LookupObjCProtocolName ? diag::err_undeclared_protocol : diag::err_unknown_typename)) << identifiers[i];"}},
[l]={
[l]={
["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\'"}
["clang/test/SemaObjC/interface-1.m"]={"clang/test/SemaObjC/interface-1.m:6:2: error: no type or protocol named \'NSCopying\'"}
}
}
},
},
["err_param_default_argument_template_redecl"]={
["err_objc_type_arg_missing_star"]={
[d]="err_param_default_argument_template_redecl",
[j]="err_objc_type_arg_missing_star",
[e]="default arguments cannot be added to a function template that has already been declared",
[b]="type argument %0 must be a pointer (requires a \'*\')",
[f]="default arguments cannot be added to a function template that has already been declared",
[c]="type argument A must be a pointer (requires a \'*\')",
[g]=k,
[e]=d,
[h]="default arguments cannot be added to a function template that has already been declared",
[f]="type argument (.*?) must be a pointer \\(requires a \'\\*\'\\)",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={"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"},
[h]={cb,1436241455,bb,db},
[i]={{w,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();"}},
[k]={{z,1621,"void Sema::actOnObjCTypeArgsOrProtocolQualifiers(Scope *S, ParsedType baseType, SourceLocation lAngleLoc, ArrayRef<IdentifierInfo *> identifiers, ArrayRef<SourceLocation> identifierLocs, SourceLocation rAngleLoc, SourceLocation &typeArgsLAngleLoc, SmallVectorImpl<ParsedType> &typeArgs, SourceLocation &typeArgsRAngleLoc, SourceLocation &protocolLAngleLoc, SmallVectorImpl<Decl *> &protocols, SourceLocation &protocolRAngleLoc, bool warnOnIncompleteProtocols) {\n  // ...\n  // Local function that forms a reference to the given type or\n  // Objective-C class declaration.\n  auto resolveTypeReference = [&](TypeOrClassDecl typeDecl, SourceLocation loc) -> TypeResult {\n    // ...\n    // If we have a typedef of an Objective-C class type that is missing a \'*\',\n    // add the \'*\'.\n    if (type->getAs<ObjCInterfaceType>()) {\n     // ...\n     Diag(loc, diag::err_objc_type_arg_missing_star) << type << FixItHint::CreateInsertion(starLoc, \" *\");"}},
[l]={
[l]={
["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"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:211:13: error: type argument \'NSObject\' must be a pointer (requires a \'*\')","clang/test/SemaObjC/parameterized_classes.m:224:17: error: type argument \'NSObject\' must be a pointer (requires a \'*\')","clang/test/SemaObjC/parameterized_classes.m:230:21: error: type argument \'NSObject\' must be a pointer (requires a \'*\')","clang/test/SemaObjC/parameterized_classes.m:237:13: error: type argument \'NSObject\' must be a pointer (requires a \'*\')","clang/test/SemaObjC/parameterized_classes.m:237:23: error: type argument \'NSObject\' must be a pointer (requires a \'*\')"}
}
}
},
},
["err_param_redefinition"]={
["err_objc_type_arg_not_id_compatible"]={
[d]="err_param_redefinition",
[j]="err_objc_type_arg_not_id_compatible",
[e]="redefinition of parameter %0",
[b]="type argument %0 is neither an Objective-C object nor a block type",
[f]="redefinition of parameter A",
[c]="type argument A is neither an Objective-C object nor a block type",
[g]=k,
[e]=d,
[h]="redefinition of parameter (.*?)",
[f]="type argument (.*?) is neither an Objective\\-C object nor a block type",
[b]=a,
[g]=a,
[c]=y,
[i]=C,
[j]={q,1236199783,r,s},
[h]={cb,1436241455,bb,db},
[i]={{yb,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();"},{D,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;"}},
[k]={{K,1015,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n   // ...\n   S.Diag(typeArgInfo->getTypeLoc().getBeginLoc(), diag::err_objc_type_arg_not_id_compatible) << typeArg << typeArgInfo->getTypeLoc().getSourceRange();"}}
[l]={
["clang/test/Parser/declarators.c"]={"clang/test/Parser/declarators.c:34:15: error: redefinition of parameter \'x\'"}
}
},
},
["err_param_with_void_type"]={
["err_objc_type_arg_qualified"]={
[d]="err_param_with_void_type",
[j]="err_objc_type_arg_qualified",
[e]="argument may not have \'void\' type",
[b]="type argument %0 cannot be qualified with \'%1\'",
[f]="argument may not have \'void\' type",
[c]="type argument A cannot be qualified with \'B\'",
[g]=k,
[e]=d,
[h]="argument may not have \'void\' type",
[f]="type argument (.*?) cannot be qualified with \'(.*?)\'",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={q,1236199783,r,s},
[h]={"6997525eaa8f",1443046461,"Forbid qualifiers on ObjC generic parameters and arguments, but","Forbid qualifiers on ObjC generic parameters and arguments, but\nsilently ignore them on arguments when they\'re provided indirectly\n(.e.g behind a template argument or typedef).\n\nThis is mostly just good language design --- specifying that a\ngeneric argument is __weak doesn\'t actually do anything --- but\nit also prevents assertions when trying to apply a different\nownership qualifier.\n\nrdar://21612439\n\nllvm-svn: 248436"},
[i]={{"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);"},{ob,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);"},{ob,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);"}},
[k]={{K,906,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    // ...\n    // Type arguments cannot have explicit qualifiers or nullability.\n   // We ignore indirect sources of these, e.g. behind typedefs or\n   // template arguments.\n   if (TypeLoc qual = typeArgInfo->getTypeLoc().findExplicitQualifierLoc()) {\n      // ...\n      // When rebuilding, qualifiers might have gotten here through a\n     // final substitution.\n     if (!rebuilding && !diagnosed) {\n       S.Diag(qual.getBeginLoc(), diag::err_objc_type_arg_qualified) << typeArg << typeArg.getQualifiers().getAsString() << FixItHint::CreateRemoval(rangeToRemove);"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/parameterized_classes_arc.m"]={"clang/test/SemaObjC/parameterized_classes_arc.m:19:24: error: type argument \'__weak id\' cannot be qualified with \'__weak\'","clang/test/SemaObjC/parameterized_classes_arc.m:24:26: error: type argument \'__strong id\' cannot be qualified with \'__strong\'","clang/test/SemaObjC/parameterized_classes_arc.m:35:24: error: type argument \'Forward *__weak\' cannot be qualified with \'__weak\'","clang/test/SemaObjC/parameterized_classes_arc.m:40:26: error: type argument \'Forward *__strong\' cannot be qualified with \'__strong\'","clang/test/SemaObjC/parameterized_classes_arc.m:64:23: error: type argument \'const id\' cannot be qualified with \'const\'","clang/test/SemaObjC/parameterized_classes_arc.m:69:26: error: type argument \'volatile id\' cannot be qualified with \'volatile\'","clang/test/SemaObjC/parameterized_classes_arc.m:74:53: error: type argument \'__attribute__((address_space(256))) id\' cannot be qualified with \'__attribute__((address_space(256)))\'"}
}
}
},
},
["err_parameter_shadow_capture"]={
["err_objc_type_args_after_protocols"]={
[d]={{nil,u,"err_parameter_shadow_capture"}},
[j]="err_objc_type_args_after_protocols",
[e]={{nil,u,"a lambda parameter cannot shadow an explicitly captured entity"}},
[b]="protocol qualifiers must precede type arguments",
[f]={{nil,u,"a lambda parameter cannot shadow an explicitly captured entity"}},
[c]="protocol qualifiers must precede type arguments",
[g]=k,
[e]=d,
[h]="a lambda parameter cannot shadow an explicitly captured entity",
[f]="protocol qualifiers must precede type arguments",
[b]=a,
[g]=a,
[c]={{nil,u,"Lambda Issue"}},
[i]=D,
[j]={"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"},
[h]={cb,1436241455,bb,db},
[i]={{"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);"}},
[k]={{B,1858,"void Parser::parseObjCTypeArgsAndProtocolQualifiers(ParsedType baseType, SourceLocation &typeArgsLAngleLoc, SmallVectorImpl<ParsedType> &typeArgs, SourceLocation &typeArgsRAngleLoc, SourceLocation &protocolLAngleLoc, SmallVectorImpl<Decl *> &protocols, SmallVectorImpl<SourceLocation> &protocolLocs, SourceLocation &protocolRAngleLoc, bool consumeLastToken) {\n  // ...\n  // An Objective-C object pointer followed by type arguments\n  // can then be followed again by a set of protocol references, e.g.,\n // \\c NSArray<NSView><NSTextDelegate>\n if ((consumeLastToken && Tok.is(tok::less)) || (!consumeLastToken && NextToken().is(tok::less))) {\n   // ...\n    if (!protocols.empty()) {\n      // ...\n     Diag(Tok, diag::err_objc_type_args_after_protocols) << SourceRange(protocolLAngleLoc, protocolRAngleLoc);"}},
[l]={
[l]={
["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"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:221:33: error: protocol qualifiers must precede type arguments"}
}
}
},
},
["err_parameters_retval_cannot_have_fp16_type"]={
["err_objc_type_args_and_protocols"]={
[d]="err_parameters_retval_cannot_have_fp16_type",
[j]="err_objc_type_args_and_protocols",
[e]="%select{parameters|function return value}0 cannot have __fp16 type; did you forget * ?",
[b]="angle brackets contain both a %select{type|protocol}0 (%1) and a %select{protocol|type}0 (%2)",
[f]={{nil,nil,{{"parameters","function return value"}," cannot have __fp16 type; did you forget * ?"}}},
[c]={{nil,nil,{"angle brackets contain both a ",{"type","protocol"}," (B) and a ",{"protocol","type"}," (C)"}}},
[g]=k,
[e]=d,
[h]="(?:parameters|function return value) cannot have __fp16 type; did you forget \\* \\?",
[f]="angle brackets contain both a (?:type|protocol) \\((.*?)\\) and a (?:protocol|type) \\((.*?)\\)",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={"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"},
[h]={cb,1436241455,bb,db},
[i]={{ob,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, \"*\");"},{ob,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, \"*\");"},{ob,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;"},{ob,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;"}},
[k]={{z,1422,"void Sema::DiagnoseTypeArgsAndProtocols(IdentifierInfo *ProtocolId, SourceLocation ProtocolLoc, IdentifierInfo *TypeArgId, SourceLocation TypeArgLoc, bool SelectProtocolFirst) { Diag(TypeArgLoc, diag::err_objc_type_args_and_protocols) << SelectProtocolFirst << TypeArgId << ProtocolId << SourceRange(ProtocolLoc); }"}},
[l]={
[l]={
["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 * ?"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:242:24: error: angle brackets contain both a type (\'ObjCStringRef\') and a protocol (\'NSCopying\')","clang/test/SemaObjC/parameterized_classes.m:243:24: error: angle brackets contain both a type (\'NSString\') and a protocol (\'NSCopying\')","clang/test/SemaObjC/parameterized_classes.m:244:37: error: angle brackets contain both a type (\'NSString\') and a protocol (\'NSCopying\')","clang/test/SemaObjC/parameterized_classes.m:246:13: error: angle brackets contain both a type (\'NSString\') and a protocol (\'NSCopying\')"}
}
}
},
},
["err_paren_sizeof_parameter_pack"]={
["err_objc_type_args_non_class"]={
[d]="err_paren_sizeof_parameter_pack",
[j]="err_objc_type_args_non_class",
[e]="missing parentheses around the size of parameter pack %0",
[b]="type arguments cannot be applied to non-class type %0",
[f]="missing parentheses around the size of parameter pack A",
[c]="type arguments cannot be applied to non-class type A",
[g]=k,
[e]=d,
[h]="missing parentheses around the size of parameter pack (.*?)",
[f]="type arguments cannot be applied to non\\-class type (.*?)",
[b]=a,
[g]=a,
[c]=y,
[i]=D,
[j]={"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"},
[h]={cb,1436241455,bb,db},
[i]={{"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, \")\");"}},
[k]={{K,843,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  if (!objcObjectType || !objcObjectType->getInterface()) {\n    S.Diag(loc, diag::err_objc_type_args_non_class) << type << typeArgsRange;"}},
[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:42: error: missing parentheses around the size of parameter pack \'Type\'"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:289:9: error: type arguments cannot be applied to non-class type \'id\'"}
}
}
},
},
["err_parens_pointer_member_function"]={
["err_objc_type_args_non_parameterized_class"]={
[d]="err_parens_pointer_member_function",
[j]="err_objc_type_args_non_parameterized_class",
[e]="cannot parenthesize the name of a method when forming a member pointer",
[b]="type arguments cannot be applied to non-parameterized class %0",
[f]="cannot parenthesize the name of a method when forming a member pointer",
[c]="type arguments cannot be applied to non-parameterized class A",
[g]=k,
[e]=d,
[h]="cannot parenthesize the name of a method when forming a member pointer",
[f]="type arguments cannot be applied to non\\-parameterized class (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={"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"},
[h]={cb,1436241455,bb,db},
[i]={{O,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();"}}
[k]={{K,856,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  if (!typeParams) {\n    S.Diag(loc, diag::err_objc_type_args_non_parameterized_class) << objcClass->getDeclName() << FixItHint::CreateRemoval(typeArgsRange);"}},
},
["err_partial_spec_args_match_primary_template"]={
[d]="err_partial_spec_args_match_primary_template",
[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",
[f]={{nil,nil,{{"class","variable"}," template partial specialization does not specialize any template argument; to ",{"declare","define"}," the primary template, remove the template argument list"}}},
[g]=k,
[h]="(?:class|variable) template partial specialization does not specialize any template argument; to (?:declare|define) the primary template, remove the template argument list",
[b]=a,
[c]=m,
[j]={"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"},
[i]={{W,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));"},{W,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/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"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:287:9: error: type arguments cannot be applied to non-parameterized class \'NSObject\'"}
}
}
},
},
["err_partial_spec_fully_specialized"]={
["err_objc_type_args_specialized_class"]={
[d]="err_partial_spec_fully_specialized",
[j]="err_objc_type_args_specialized_class",
[e]="partial specialization of %0 does not use any of its template parameters",
[b]="type arguments cannot be applied to already-specialized class type %0",
[f]="partial specialization of A does not use any of its template parameters",
[c]="type arguments cannot be applied to already-specialized class type A",
[g]=k,
[e]=d,
[h]="partial specialization of (.*?) does not use any of its template parameters",
[f]="type arguments cannot be applied to already\\-specialized class type (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={"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"},
[h]={cb,1436241455,bb,db},
[i]={{W,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();"},{W,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();"}},
[k]={{K,868,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  // The type must not already be specialized.\n  if (objcObjectType->isSpecialized()) {\n    S.Diag(loc, diag::err_objc_type_args_specialized_class) << type << FixItHint::CreateRemoval(typeArgsRange);"}},
[l]={
[l]={
["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"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:297:9: error: type arguments cannot be applied to already-specialized class type \'typeArgs15\' (aka \'PC1<NSObject *,NSString *>\')"}
}
}
},
},
["err_partial_spec_ordering_ambiguous"]={
["err_objc_type_args_wrong_arity"]={
[d]="err_partial_spec_ordering_ambiguous",
[j]="err_objc_type_args_wrong_arity",
[e]="ambiguous partial specializations of %0",
[b]="too %select{many|few}0 type arguments for class %1 (have %2, expected %3)",
[f]="ambiguous partial specializations of A",
[c]={{nil,nil,{"too ",{"many","few"}," type arguments for class B (have C, expected D)"}}},
[g]=k,
[e]=d,
[h]="ambiguous partial specializations of (.*?)",
[f]="too (?:many|few) type arguments for class (.*?) \\(have (.*?), expected (.*?)\\)",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={"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"},
[h]={cb,1436241455,bb,db},
[i]={{W,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;"}},
[k]={{K,927,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    // ...\n    if (!anyPackExpansions) {\n      if (i < numTypeParams) {\n      // ...\n      } else {\n        // ...\n        S.Diag(loc, diag::err_objc_type_args_wrong_arity) << false << objcClass->getDeclName() << (unsigned)typeArgs.size() << numTypeParams;"},{K,1026,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  // ...\n  // Make sure we didn\'t have the wrong number of arguments.\n if (!anyPackExpansions && finalTypeArgs.size() != numTypeParams) {\n   S.Diag(loc, diag::err_objc_type_args_wrong_arity) << (typeArgs.size() < typeParams->size()) << objcClass->getDeclName() << (unsigned)finalTypeArgs.size() << (unsigned)numTypeParams;"}},
[l]={
[l]={
["clang/test/SemaTemplate/temp_class_order.cpp"]={"clang/test/SemaTemplate/temp_class_order.cpp:41:16: error: ambiguous partial specializations of \'X2<int *, int *>\'"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:261:9: error: too few type arguments for class \'PC4\' (have 1, expected 3)","clang/test/SemaObjC/parameterized_classes.m:263:9: error: too many type arguments for class \'PC4\' (have 4, expected 3)","clang/test/SemaObjC/parameterized_classes.m:317:35: error: too few type arguments for class \'PC1\' (have 1, expected 2)"}
}
}
},
},
["err_partial_spec_redeclared"]={
["err_objc_type_param_arity_mismatch"]={
[d]="err_partial_spec_redeclared",
[j]="err_objc_type_param_arity_mismatch",
[e]="class template partial specialization %0 cannot be redeclared",
[b]="%select{forward class declaration|class definition|category|extension}0 has too %select{few|many}1 type parameters (expected %2, have %3)",
[f]="class template partial specialization A cannot be redeclared",
[c]={{nil,nil,{{"forward class declaration","class definition","category","extension"}," has too ",{"few","many"}," type parameters (expected C, have D)"}}},
[g]=k,
[e]=d,
[h]="class template partial specialization (.*?) cannot be redeclared",
[f]="(?:forward class declaration|class definition|category|extension) has too (?:few|many) type parameters \\(expected (.*?), have (.*?)\\)",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={"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"},
[h]={Y,1436241435,V,Z},
[i]={{"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();"}},
[k]={{z,842,"/// Check consistency between two Objective-C type parameter lists, e.g.,\n/// between a category/extension and an \\@interface or between an \\@class and an\n/// \\@interface.\nstatic bool checkTypeParamListConsistency(Sema &S, ObjCTypeParamList *prevTypeParams, ObjCTypeParamList *newTypeParams, TypeParamListContext newContext) {\n  // If the sizes don\'t match, complain about that.\n  if (prevTypeParams->size() != newTypeParams->size()) {\n    // ...\n    S.Diag(diagLoc, diag::err_objc_type_param_arity_mismatch) << static_cast<unsigned>(newContext) << (newTypeParams->size() > prevTypeParams->size()) << prevTypeParams->size() << newTypeParams->size();"}},
[l]={
[l]={
["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"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:143:17: error: extension has too few type parameters (expected 2, have 1)","clang/test/SemaObjC/parameterized_classes.m:147:22: error: category has too many type parameters (expected 2, have 3)"}
}
}
},
},
["err_partial_specialization_friend"]={
["err_objc_type_param_bound_conflict"]={
[d]="err_partial_specialization_friend",
[j]="err_objc_type_param_bound_conflict",
[e]="partial specialization cannot be declared as a friend",
[b]="type bound %0 for type parameter %1 conflicts with %select{implicit|previous}2 bound %3%select{for type parameter %5|}4",
[f]="partial specialization cannot be declared as a friend",
[c]={{nil,nil,{"type bound A for type parameter B conflicts with ",{"implicit","previous"}," bound D",{"for type parameter F",a}}}},
[g]=k,
[e]=d,
[h]="partial specialization cannot be declared as a friend",
[f]="type bound (.*?) for type parameter (.*?) conflicts with (?:implicit|previous) bound (.*?)(?:for type parameter (.*?)|)",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={"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"},
[h]={Y,1436241435,V,Z},
[i]={{W,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);"}},
[k]={{z,925,"/// Check consistency between two Objective-C type parameter lists, e.g.,\n/// between a category/extension and an \\@interface or between an \\@class and an\n/// \\@interface.\nstatic bool checkTypeParamListConsistency(Sema &S, ObjCTypeParamList *prevTypeParams, ObjCTypeParamList *newTypeParams, TypeParamListContext newContext) {\n  // ...\n  // Match up the type parameters.\n  for (unsigned i = 0, n = prevTypeParams->size(); i != n; ++i) {\n    // ...\n    // If the new type parameter\'s bound was explicit, complain about it being\n    // different from the original.\n    if (newTypeParam->hasExplicitBound()) {\n      // ...\n      S.Diag(newBoundRange.getBegin(), diag::err_objc_type_param_bound_conflict) << newTypeParam->getUnderlyingType() << newTypeParam->getDeclName() << prevTypeParam->hasExplicitBound() << prevTypeParam->getUnderlyingType() << (newTypeParam->getDeclName() == prevTypeParam->getDeclName()) << prevTypeParam->getDeclName() << FixItHint::CreateReplacement(newBoundRange, prevTypeParam->getUnderlyingType().getAsString(S.Context.getPrintingPolicy()));"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-generics-1.h:20:26: error: type bound \'C *\' for type parameter \'T\' conflicts with previous bound \'B *\'"}
}
}
},
},
["err_partition_import_outside_module"]={
["err_objc_type_param_bound_explicit_nullability"]={
[d]={{nil,C,"err_partition_import_outside_module"}},
[j]="err_objc_type_param_bound_explicit_nullability",
[e]={{nil,C,"module partition imports must be within a module purview"}},
[b]="type parameter %0 bound %1 cannot explicitly specify nullability",
[f]={{nil,C,"module partition imports must be within a module purview"}},
[c]="type parameter A bound B cannot explicitly specify nullability",
[g]=k,
[e]=d,
[h]="module partition imports must be within a module purview",
[f]="type parameter (.*?) bound (.*?) cannot explicitly specify nullability",
[b]=a,
[g]=a,
[c]={{nil,C,ac}},
[i]=Lb,
[j]={"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"},
[h]={"6997525eaa8f",1443046461,"Forbid qualifiers on ObjC generic parameters and arguments, but","Forbid qualifiers on ObjC generic parameters and arguments, but\nsilently ignore them on arguments when they\'re provided indirectly\n(.e.g behind a template argument or typedef).\n\nThis is mostly just good language design --- specifying that a\ngeneric argument is __weak doesn\'t actually do anything --- but\nit also prevents assertions when trying to apply a different\nownership qualifier.\n\nrdar://21612439\n\nllvm-svn: 248436"},
[i]={{"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);"}}
[k]={{z,728,"DeclResult Sema::actOnObjCTypeParam(Scope *S, ObjCTypeParamVariance variance, SourceLocation varianceLoc, unsigned index, IdentifierInfo *paramName, SourceLocation paramLoc, SourceLocation colonLoc, ParsedType parsedTypeBound) {\n  // ...\n  if (parsedTypeBound) {\n    // ...\n    // Type bounds cannot have qualifiers (even indirectly) or explicit\n    // nullability.\n    if (typeBoundInfo) {\n      // ...\n      if (qual || typeBound.hasQualifiers()) {\n        // ...\n       if (qual) {\n         if (auto attr = qual.getAs<AttributedTypeLoc>()) {\n           // ...\n           if (attr.getTypePtr()->getImmediateNullability()) {\n             Diag(attr.getBeginLoc(), diag::err_objc_type_param_bound_explicit_nullability) << paramName << typeBound << FixItHint::CreateRemoval(rangeToRemove);"}},
},
["err_pascal_string_too_long"]={
[d]="err_pascal_string_too_long",
[e]="Pascal string is too long",
[f]="Pascal string is too long",
[g]=k,
[h]="Pascal string is too long",
[b]=a,
[c]=p,
[j]={q,1236199783,r,s},
[i]={{"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());"}}
},
["err_paste_at_end"]={
[d]="err_paste_at_end",
[e]="\'##\' cannot appear at end of macro expansion",
[f]="\'##\' cannot appear at end of macro expansion",
[g]=k,
[h]="\'\\#\\#\' cannot appear at end of macro expansion",
[b]=a,
[c]=p,
[j]={q,1236199783,r,s},
[i]={{z,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/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"}
["clang/test/SemaObjC/parameterized_classes_subst.m"]={"clang/test/SemaObjC/parameterized_classes_subst.m:123:39: error: type parameter \'ViewType\' bound \'NSView * _Nullable\' cannot explicitly specify nullability"}
}
}
},
},
["err_paste_at_start"]={
["err_objc_type_param_bound_missing"]={
[d]="err_paste_at_start",
[j]="err_objc_type_param_bound_missing",
[e]="\'##\' cannot appear at start of macro expansion",
[b]="missing type bound %0 for type parameter %1 in %select{@interface|@class}2",
[f]="\'##\' cannot appear at start of macro expansion",
[c]={{nil,nil,{"missing type bound A for type parameter B in ",{"@interface","@class"}}}},
[g]=k,
[e]=d,
[h]="\'\\#\\#\' cannot appear at start of macro expansion",
[f]="missing type bound (.*?) for type parameter (.*?) in (?:@interface|@class)",
[b]=a,
[g]=a,
[c]=p,
[i]=D,
[j]={q,1236199783,r,s},
[h]={Y,1436241435,V,Z},
[i]={{z,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);"}},
[k]={{z,958,"/// Check consistency between two Objective-C type parameter lists, e.g.,\n/// between a category/extension and an \\@interface or between an \\@class and an\n/// \\@interface.\nstatic bool checkTypeParamListConsistency(Sema &S, ObjCTypeParamList *prevTypeParams, ObjCTypeParamList *newTypeParams, TypeParamListContext newContext) {\n  // ...\n  // Match up the type parameters.\n  for (unsigned i = 0, n = prevTypeParams->size(); i != n; ++i) {\n    // ...\n    // The new type parameter got the implicit bound of \'id\'. That\'s okay for\n    // categories and extensions (overwrite it later), but not for forward\n    // declarations and @interfaces, because those must be standalone.\n    if (newContext == TypeParamListContext::ForwardDeclaration || newContext == TypeParamListContext::Definition) {\n      // ...\n      S.Diag(newTypeParam->getLocation(), diag::err_objc_type_param_bound_missing) << prevTypeParam->getUnderlyingType() << newTypeParam->getDeclName() << (newContext == TypeParamListContext::ForwardDeclaration) << FixItHint::CreateInsertion(insertionLoc, newCode);"}},
[l]={
[l]={
["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"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:89:17: error: missing type bound \'NSObject *\' for type parameter \'T\' in @interface","clang/test/SemaObjC/parameterized_classes.m:100:13: error: missing type bound \'NSObject *\' for type parameter \'U\' in @class","clang/test/SemaObjC/parameterized_classes.m:103:13: error: missing type bound \'NSObject *\' for type parameter \'T\' in @class"}
}
}
},
},
["err_pch_diagopt_mismatch"]={
["err_objc_type_param_bound_missing_pointer"]={
[d]="err_pch_diagopt_mismatch",
[j]="err_objc_type_param_bound_missing_pointer",
[e]="%0 is currently enabled, but was not in the PCH file",
[b]="missing \'*\' in type bound %0 for type parameter %1",
[f]="A is currently enabled, but was not in the PCH file",
[c]="missing \'*\' in type bound A for type parameter B",
[g]=k,
[e]=d,
[h]="(.*?) is currently enabled, but was not in the PCH file",
[f]="missing \'\\*\' in type bound (.*?) for type parameter (.*?)",
[b]=a,
[g]=a,
[c]=X,
[i]=D,
[j]={"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"},
[h]={Y,1436241435,V,Z},
[i]={{G,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();"},{G,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\";"},{G,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\";"},{G,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\";"},{G,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\";"}}
[k]={{z,688,"DeclResult Sema::actOnObjCTypeParam(Scope *S, ObjCTypeParamVariance variance, SourceLocation varianceLoc, unsigned index, IdentifierInfo *paramName, SourceLocation paramLoc, SourceLocation colonLoc, ParsedType parsedTypeBound) {\n  // ...\n  if (parsedTypeBound) {\n    // ...\n    if (typeBound->isObjCObjectPointerType()) {\n    // ...\n    } else if (typeBound->isObjCObjectType()) {\n      // ...\n      Diag(typeBoundInfo->getTypeLoc().getBeginLoc(), diag::err_objc_type_param_bound_missing_pointer) << typeBound << paramName << FixItHint::CreateInsertion(starLoc, \" *\");"}},
},
["err_pch_different_branch"]={
[d]="err_pch_different_branch",
[e]="PCH file built from a different branch (%0) than the compiler (%1)",
[f]="PCH file built from a different branch (A) than the compiler (B)",
[g]=k,
[h]="PCH file built from a different branch \\((.*?)\\) than the compiler \\((.*?)\\)",
[b]=a,
[c]=X,
[j]={"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"},
[i]={{G,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;"}}
},
["err_pch_langopt_mismatch"]={
[d]="err_pch_langopt_mismatch",
[e]="%0 was %select{disabled|enabled}1 in PCH file but is currently %select{disabled|enabled}2",
[f]={{nil,nil,{"A was ",{"disabled","enabled"}," in PCH file but is currently ",{"disabled","enabled"}}}},
[g]=k,
[h]="(.*?) was (?:disabled|enabled) in PCH file but is currently (?:disabled|enabled)",
[b]=a,
[c]=X,
[j]={"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"},
[i]={{G,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]={
["clang/test/Modules/prebuilt-implicit-modules.m"]={"error: signed char was disabled in PCH file but is currently enabled"}
}
},
["err_pch_langopt_value_mismatch"]={
[d]="err_pch_langopt_value_mismatch",
[e]="%0 differs in PCH file vs. current file",
[f]="A differs in PCH file vs. current file",
[g]=k,
[h]="(.*?) differs in PCH file vs\\. current file",
[b]=a,
[c]=X,
[j]={"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"},
[i]={{G,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; \\"},{G,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; \\"},{G,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; \\"},{G,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\";"},{G,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\";"},{G,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_pch_macro_def_conflict"]={
[d]="err_pch_macro_def_conflict",
[e]="definition of macro \'%0\' differs between the precompiled header (\'%1\') and the command line (\'%2\')",
[f]="definition of macro \'A\' differs between the precompiled header (\'B\') and the command line (\'C\')",
[g]=k,
[h]="definition of macro \'(.*?)\' differs between the precompiled header \\(\'(.*?)\'\\) and the command line \\(\'(.*?)\'\\)",
[b]=a,
[c]=X,
[j]={"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"},
[i]={{G,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;"}}
},
["err_pch_macro_def_undef"]={
[d]="err_pch_macro_def_undef",
[e]="macro \'%0\' was %select{defined|undef\'d}1 in the precompiled header but %select{undef\'d|defined}1 on the command line",
[f]={{nil,nil,{"macro \'A\' was ",{"defined","undef\'d"}," in the precompiled header but ",{"undef\'d","defined"}," on the command line"}}},
[g]=k,
[h]="macro \'(.*?)\' was (?:defined|undef\'d) in the precompiled header but (?:undef\'d|defined) on the command line",
[b]=a,
[c]=X,
[j]={"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"},
[i]={{G,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;"},{G,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;"},{G,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;"}}
},
["err_pch_modulecache_mismatch"]={
[d]="err_pch_modulecache_mismatch",
[e]="PCH was compiled with module cache path \'%0\', but the path is currently \'%1\'",
[f]="PCH was compiled with module cache path \'A\', but the path is currently \'B\'",
[g]=k,
[h]="PCH was compiled with module cache path \'(.*?)\', but the path is currently \'(.*?)\'",
[b]=a,
[c]=X,
[j]={"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"},
[i]={{G,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;"}}
},
["err_pch_pp_detailed_record"]={
[d]="err_pch_pp_detailed_record",
[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",
[f]={{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"}}}},
[g]=k,
[h]="(?: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)",
[b]=a,
[c]=X,
[j]={"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"},
[i]={{G,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;"}}
},
["err_pch_targetopt_feature_mismatch"]={
[d]="err_pch_targetopt_feature_mismatch",
[e]={{nil,K,"%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"},{B,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"}},
[f]={{nil,K,{{"AST file was","current translation unit is"}," compiled with the target feature \'B\' but the ",{"current translation unit is","AST file was"}," not"}},{B,nil,{{"AST file","current translation unit"}," was compiled with the target feature\'B\' but the ",{"current translation unit is","AST file was"}," not"}}},
[g]=k,
[h]="(?:AST file was|current translation unit is) compiled with the target feature \'(.*?)\' but the (?:current translation unit is|AST file was) not",
[b]=a,
[c]=X,
[j]={"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"},
[i]={{G,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); \\"},{G,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;"},{G,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;"}}
},
["err_pch_targetopt_mismatch"]={
[d]="err_pch_targetopt_mismatch",
[e]="PCH file was compiled for the %0 \'%1\' but the current translation unit is being compiled for target \'%2\'",
[f]="PCH file was compiled for the A \'B\' but the current translation unit is being compiled for target \'C\'",
[g]=k,
[h]="PCH file was compiled for the (.*?) \'(.*?)\' but the current translation unit is being compiled for target \'(.*?)\'",
[b]=a,
[c]=X,
[j]={"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"},
[i]={{G,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; \\"}}
},
["err_pch_undef"]={
[d]="err_pch_undef",
[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",
[f]={{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"}}}},
[g]=k,
[h]="(?: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)",
[b]=a,
[c]=X,
[j]={"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"},
[i]={{G,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;"}}
},
["err_pch_version_too_new"]={
[d]="err_pch_version_too_new",
[e]="PCH file uses a newer PCH format that cannot be read",
[f]="PCH file uses a newer PCH format that cannot be read",
[g]=k,
[h]="PCH file uses a newer PCH format that cannot be read",
[b]=a,
[c]=X,
[j]={"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"},
[i]={{G,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);"}}
},
["err_pch_version_too_old"]={
[d]="err_pch_version_too_old",
[e]="PCH file uses an older PCH format that is no longer supported",
[f]="PCH file uses an older PCH format that is no longer supported",
[g]=k,
[h]="PCH file uses an older PCH format that is no longer supported",
[b]=a,
[c]=X,
[j]={"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"},
[i]={{G,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);"},{G,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);"}}
},
["err_pch_with_compiler_errors"]={
[d]="err_pch_with_compiler_errors",
[e]="PCH file contains compiler errors",
[f]="PCH file contains compiler errors",
[g]=k,
[h]="PCH file contains compiler errors",
[b]=a,
[c]=X,
[j]={"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"},
[i]={{G,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/Modules/load-module-with-errors.m"]={"clang/test/Modules/load-module-with-errors.m:5:2: error: PCH file contains compiler errors"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:66:20: error: missing \'*\' in type bound \'NSString\' for type parameter \'U\'"}
}
}
},
},
["err_placeholder_constraints_not_satisfied"]={
["err_objc_type_param_bound_nonobject"]={
[d]={{nil,o,"err_placeholder_constraints_not_satisfied"}},
[j]="err_objc_type_param_bound_nonobject",
[e]={{nil,o,"deduced type %0 does not satisfy %1"}},
[b]="type bound %0 for type parameter %1 is not an Objective-C pointer type",
[f]={{nil,o,"deduced type A does not satisfy B"}},
[c]="type bound A for type parameter B is not an Objective-C pointer type",
[g]=k,
[e]=d,
[h]="deduced type (.*?) does not satisfy (.*?)",
[f]="type bound (.*?) for type parameter (.*?) is not an Objective\\-C pointer type",
[b]=a,
[g]=a,
[c]={{nil,o,m}},
[i]=D,
[j]={"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"},
[h]={Y,1436241435,V,Z},
[i]={{"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();"}},
[k]={{z,708,"DeclResult Sema::actOnObjCTypeParam(Scope *S, ObjCTypeParamVariance variance, SourceLocation varianceLoc, unsigned index, IdentifierInfo *paramName, SourceLocation paramLoc, SourceLocation colonLoc, ParsedType parsedTypeBound) {\n  // ...\n  if (parsedTypeBound) {\n    // ...\n    if (typeBound->isObjCObjectPointerType()) {\n    // ...\n    } else if (typeBound->isObjCObjectType()) {\n    // ...\n    } else {\n      // ...\n      Diag(typeBoundInfo->getTypeLoc().getBeginLoc(), diag::err_objc_type_param_bound_nonobject) << typeBound << paramName;"}},
[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: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>\'"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:65:20: error: type bound \'int\' for type parameter \'T\' is not an Objective-C pointer type"}
}
}
},
},
["err_placeholder_expected_auto_or_decltype_auto"]={
["err_objc_type_param_bound_qualified"]={
[d]={{nil,o,"err_placeholder_expected_auto_or_decltype_auto"}},
[j]="err_objc_type_param_bound_qualified",
[e]={{nil,o,"expected \'auto\' or \'decltype(auto)\' after concept name"}},
[b]="type bound %1 for type parameter %0 cannot be qualified with \'%2\'",
[f]={{nil,o,"expected \'auto\' or \'decltype(auto)\' after concept name"}},
[c]="type bound B for type parameter A cannot be qualified with \'C\'",
[g]=k,
[e]=d,
[h]="expected \'auto\' or \'decltype\\(auto\\)\' after concept name",
[f]="type bound (.*?) for type parameter (.*?) cannot be qualified with \'(.*?)\'",
[b]=a,
[g]=a,
[c]={{nil,o,"Concepts Issue"}},
[i]=D,
[j]={lb,1570627358,kb,db},
[h]={"6997525eaa8f",1443046461,"Forbid qualifiers on ObjC generic parameters and arguments, but","Forbid qualifiers on ObjC generic parameters and arguments, but\nsilently ignore them on arguments when they\'re provided indirectly\n(.e.g behind a template argument or typedef).\n\nThis is mostly just good language design --- specifying that a\ngeneric argument is __weak doesn\'t actually do anything --- but\nit also prevents assertions when trying to apply a different\nownership qualifier.\n\nrdar://21612439\n\nllvm-svn: 248436"},
[i]={{yb,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\");"},{yb,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\");"}},
[k]={{z,739,"DeclResult Sema::actOnObjCTypeParam(Scope *S, ObjCTypeParamVariance variance, SourceLocation varianceLoc, unsigned index, IdentifierInfo *paramName, SourceLocation paramLoc, SourceLocation colonLoc, ParsedType parsedTypeBound) {\n  // ...\n  if (parsedTypeBound) {\n    // ...\n    // Type bounds cannot have qualifiers (even indirectly) or explicit\n   // nullability.\n   if (typeBoundInfo) {\n     // ...\n     if (qual || typeBound.hasQualifiers()) {\n        // ...\n        if (!diagnosed) {\n          Diag(qual ? qual.getBeginLoc() : typeBoundInfo->getTypeLoc().getBeginLoc(), diag::err_objc_type_param_bound_qualified) << paramName << typeBound << typeBound.getQualifiers().getAsString() << FixItHint::CreateRemoval(rangeToRemove);"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/parameterized_classes_arc.m"]={"clang/test/SemaObjC/parameterized_classes_arc.m:81:29: error: type bound \'__strong id\' for type parameter \'T\' cannot be qualified with \'__strong\'","clang/test/SemaObjC/parameterized_classes_arc.m:84:27: error: type bound \'__weak id\' for type parameter \'T\' cannot be qualified with \'__weak\'","clang/test/SemaObjC/parameterized_classes_arc.m:87:29: error: type bound \'Forward *__strong\' for type parameter \'T\' cannot be qualified with \'__strong\'","clang/test/SemaObjC/parameterized_classes_arc.m:90:27: error: type bound \'Forward *__weak\' for type parameter \'T\' cannot be qualified with \'__weak\'","clang/test/SemaObjC/parameterized_classes_arc.m:93:20: error: type bound \'StrongID\' (aka \'__strong id\') for type parameter \'T\' cannot be qualified with \'__strong\'","clang/test/SemaObjC/parameterized_classes_arc.m:96:20: error: type bound \'StrongForward\' (aka \'Forward *__strong\') for type parameter \'T\' cannot be qualified with \'__strong\'","clang/test/SemaObjC/parameterized_classes_arc.m:100:26: error: type bound \'const id\' for type parameter \'T\' cannot be qualified with \'const\'","clang/test/SemaObjC/parameterized_classes_arc.m:103:29: error: type bound \'volatile id\' for type parameter \'T\' cannot be qualified with \'volatile\'","clang/test/SemaObjC/parameterized_classes_arc.m:106:57: error: type bound \'__attribute__((address_space(256))) id\' for type parameter \'T\' cannot be qualified with \'__attribute__((address_space(256)))\'"}
}
}
},
},
["err_placeholder_in_source"]={
["err_objc_type_param_redecl"]={
[d]={{nil,n,"err_placeholder_in_source"}},
[j]="err_objc_type_param_redecl",
[e]={{nil,n,"editor placeholder in source file"}},
[b]="redeclaration of type parameter %0",
[f]={{nil,n,"editor placeholder in source file"}},
[c]="redeclaration of type parameter A",
[g]=k,
[e]=d,
[h]="editor placeholder in source file",
[f]="redeclaration of type parameter (.*?)",
[b]=a,
[g]=a,
[c]={{nil,n,p}},
[i]=D,
[j]={"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"},
[h]={Y,1436241435,V,Z},
[i]={{"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);"}},
[k]={{z,789,"ObjCTypeParamList *Sema::actOnObjCTypeParamList(Scope *S, SourceLocation lAngleLoc, ArrayRef<Decl *> typeParamsIn, SourceLocation rAngleLoc) {\n  // ...\n  for (auto *typeParam : typeParams) {\n    // ...\n    if (known != knownParams.end()) {\n     Diag(typeParam->getLocation(), diag::err_objc_type_param_redecl) << typeParam->getIdentifier() << SourceRange(known->second->getLocation());"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/kindof.m"]={"clang/test/SemaObjC/kindof.m:471:22: error: redeclaration of type parameter \'T\'"}
}
}
},
},
["err_placement_new_non_placement_delete"]={
["err_objc_type_param_variance_conflict"]={
[d]="err_placement_new_non_placement_delete",
[j]="err_objc_type_param_variance_conflict",
[e]="\'new\' expression with placement arguments refers to non-placement \'operator delete\'",
[b]="%select{in|co|contra}0variant type parameter %1 conflicts with previous %select{in|co|contra}2variant type parameter %3",
[f]="\'new\' expression with placement arguments refers to non-placement \'operator delete\'",
[c]={{nil,nil,{{"in","co","contra"},"variant type parameter B conflicts with previous ",{"in","co","contra"},"variant type parameter D"}}},
[g]=k,
[e]=d,
[h]="\'new\' expression with placement arguments refers to non\\-placement \'operator delete\'",
[f]="(?:in|co|contra)variant type parameter (.*?) conflicts with previous (?:in|co|contra)variant type parameter (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=D,
[j]={"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"},
[h]={"1ac1b63c9ca8",1436241534,"Implement variance for Objective-C type parameters.","Implement variance for Objective-C type parameters.\n\nIntroduce co- and contra-variance for Objective-C type parameters,\nwhich allows us to express that (for example) an NSArray is covariant\nin its type parameter. This means that NSArray<NSMutableString *> * is\na subtype of NSArray<NSString *> *, which is expected of the immutable\nFoundation collections.\n\nType parameters can be annotated with __covariant or __contravariant\nto make them co- or contra-variant, respectively. This feature can be\ndetected by __has_feature(objc_generics_variance). Implements\nrdar://problem/20217490.\n\nllvm-svn: 241549"},
[i]={{Q,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;"}},
[k]={{z,879,"/// Check consistency between two Objective-C type parameter lists, e.g.,\n/// between a category/extension and an \\@interface or between an \\@class and an\n/// \\@interface.\nstatic bool checkTypeParamListConsistency(Sema &S, ObjCTypeParamList *prevTypeParams, ObjCTypeParamList *newTypeParams, TypeParamListContext newContext) {\n  // ...\n  // Match up the type parameters.\n  for (unsigned i = 0, n = prevTypeParams->size(); i != n; ++i) {\n    // ...\n    // Check for consistency of the variance.\n    if (newTypeParam->getVariance() != prevTypeParam->getVariance()) {\n     if (newTypeParam->getVariance() == ObjCTypeParamVariance::Invariant && newContext != TypeParamListContext::Definition) {\n     // ...\n     } else if (prevTypeParam->getVariance() == ObjCTypeParamVariance::Invariant && !(isa<ObjCInterfaceDecl>(prevTypeParam->getDeclContext()) && cast<ObjCInterfaceDecl>(prevTypeParam->getDeclContext())->getDefinition() == prevTypeParam->getDeclContext())) {\n      // ...\n      } else {\n        {\n          // ...\n         auto diag = S.Diag(diagLoc, diag::err_objc_type_param_variance_conflict) << static_cast<unsigned>(newTypeParam->getVariance()) << newTypeParam->getDeclName() << static_cast<unsigned>(prevTypeParam->getVariance()) << prevTypeParam->getDeclName();"}},
[l]={
[l]={
["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\'"}
[M]={"clang/test/SemaObjC/parameterized_classes.m:355:22: error: contravariant type parameter \'X\' conflicts with previous covariant type parameter \'T\'","clang/test/SemaObjC/parameterized_classes.m:356:22: error: covariant type parameter \'Y\' conflicts with previous contravariant type parameter \'U\'","clang/test/SemaObjC/parameterized_classes.m:361:22: error: contravariant type parameter \'T\' conflicts with previous covariant type parameter \'T\'","clang/test/SemaObjC/parameterized_classes.m:362:22: error: invariant type parameter \'U\' conflicts with previous contravariant type parameter \'U\'"}
}
}
},
},
["err_pointer_to_member_call_drops_quals"]={
["err_objc_unexpected_atend"]={
[d]="err_pointer_to_member_call_drops_quals",
[j]="err_objc_unexpected_atend",
[e]="call to pointer to member function of type %0 drops \'%1\' qualifier%s2",
[b]="\'@end\' appears where closing brace \'}\' is expected",
[f]="call to pointer to member function of type A drops \'B\' qualifierC",
[c]="\'@end\' appears where closing brace \'}\' is expected",
[g]=k,
[e]=d,
[h]="call to pointer to member function of type (.*?) drops \'(.*?)\' qualifier(.*?)",
[f]="\'@end\' appears where closing brace \'\\}\' is expected",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={"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"},
[h]={"1c5d4c54a943",1363724860,"Objective-C [qoi]: Provide improved parse diagnostics when","Objective-C [qoi]: Provide improved parse diagnostics when\nclosing rbrace is missing in an ObjC class declaration.\nCan do beter than this, but it involves addition of\noverhead which will be present in correct code.\n// rdar://6854840\n\nllvm-svn: 177435"},
[i]={{E,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);"}},
[k]={{B,1989,"///   objc-class-instance-variables:\n///    \'{\' objc-instance-variable-decl-list[opt] \'}\'\n///\n///  objc-instance-variable-decl-list:\n///    objc-visibility-spec\n///    objc-instance-variable-decl \';\'\n///    \';\'\n///    objc-instance-variable-decl-list objc-visibility-spec\n///    objc-instance-variable-decl-list objc-instance-variable-decl \';\'\n///    objc-instance-variable-decl-list static_assert-declaration\n///    objc-instance-variable-decl-list \';\'\n///\n///  objc-visibility-spec:\n///    @private\n///     @protected\n///     @public\n///     @package [OBJC2]\n///\n///   objc-instance-variable-decl:\n///     struct-declaration\n///\nvoid Parser::ParseObjCClassInstanceVariables(ObjCContainerDecl *interfaceDecl, tok::ObjCKeywordKind visibility, SourceLocation atLoc) {\n  // ...\n  // While we still have something to read, read the instance variables.\n  while (Tok.isNot(tok::r_brace) && !isEofOrEom()) {\n    // ...\n    // Set the default visibility to private.\n    if (TryConsumeToken(tok::at)) { // parse objc-visibility-spec\n      // ...\n      case tok::objc_end:\n        Diag(Tok, diag::err_objc_unexpected_atend);"}},
[l]={
[l]={
["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"}
["clang/test/Parser/missing-closing-rbrace.m"]={"clang/test/Parser/missing-closing-rbrace.m:3:16: error: \'@end\' appears where closing brace \'}\' is expected"}
}
}
},
},
["err_pointer_to_member_oper_value_classify"]={
["err_objc_unexpected_attr"]={
[d]="err_pointer_to_member_oper_value_classify",
[j]="err_objc_unexpected_attr",
[e]="pointer-to-member function type %0 can only be called on an %select{rvalue|lvalue}1",
[b]={{nil,v,"prefix attribute must be followed by an interface, protocol, or implementation"},{y,nil,"prefix attribute must be followed by an interface or protocol"}},
[f]={{nil,nil,{"pointer-to-member function type A can only be called on an ",{cc,bc}}}},
[c]={{nil,v,"prefix attribute must be followed by an interface, protocol, or implementation"},{y,nil,"prefix attribute must be followed by an interface or protocol"}},
[g]=k,
[e]=d,
[h]="pointer\\-to\\-member function type (.*?) can only be called on an (?:rvalue|lvalue)",
[f]="prefix attribute must be followed by an interface, protocol, or implementation",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={"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"},
[h]={R,1236199783,Q,S},
[i]={{Q,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();"},{Q,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();"}},
[k]={{B,71,"/// ParseObjCAtDirectives - Handle parts of the external-declaration production:\n///      external-declaration: [C99 6.9]\n/// [OBJC]  objc-class-definition\n/// [OBJC]  objc-class-declaration\n/// [OBJC]  objc-alias-declaration\n/// [OBJC]  objc-protocol-definition\n/// [OBJC]  objc-method-definition\n/// [OBJC] \'@\' \'end\'\nParser::DeclGroupPtrTy Parser::ParseObjCAtDirectives(ParsedAttributes &DeclAttrs, ParsedAttributes &DeclSpecAttrs) {\n  // ...\n  default:\n    llvm::for_each(DeclAttrs, [this](const auto &Attr) {\n      if (Attr.isGNUAttribute())\n        Diag(Tok.getLocation(), diag::err_objc_unexpected_attr);"},{"clang/lib/Parse/Parser.cpp",1176,"/// Parse either a function-definition or a declaration.  We can\'t tell which\n/// we have until we read up to the compound-statement in function-definition.\n/// TemplateParams, if non-NULL, provides the template parameters when we\'re\n/// parsing a C++ template-declaration.\n///\n///      function-definition: [C99 6.9.1]\n///        decl-specs      declarator declaration-list[opt] compound-statement\n/// [C90] function-definition: [C99 6.7.1] - implicit int result\n/// [C90]  decl-specs[opt] declarator declaration-list[opt] compound-statement\n///\n///      declaration: [C99 6.7]\n///        declaration-specifiers init-declarator-list[opt] \';\'\n/// [!C99]  init-declarator-list \';\'                  [TODO: warn in c99 mode]\n/// [OMP]  threadprivate-directive\n/// [OMP]  allocate-directive                        [TODO]\n///\nParser::DeclGroupPtrTy Parser::ParseDeclOrFunctionDefInternal(ParsedAttributes &Attrs, ParsedAttributes &DeclSpecAttrs, ParsingDeclSpec &DS, AccessSpecifier AS) {\n  // ...\n  // ObjC2 allows prefix attributes on class interfaces and protocols.\n  // FIXME: This still needs better diagnostics. We should only accept\n  // attributes here, no types, etc.\n  if (getLangOpts().ObjC && Tok.is(tok::at)) {\n    // ...\n    if (!Tok.isObjCAtKeyword(tok::objc_interface) && !Tok.isObjCAtKeyword(tok::objc_protocol) && !Tok.isObjCAtKeyword(tok::objc_implementation)) {\n     Diag(Tok, diag::err_objc_unexpected_attr);"}},
[l]={
[l]={
["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"}
["clang/test/Parser/objc-quirks.m"]={"clang/test/Parser/objc-quirks.m:4:6: error: prefix attribute must be followed by an interface, protocol, or implementation"}
}
}
},
},
["err_pointer_to_member_type"]={
["err_objc_unknown_at"]={
[d]="err_pointer_to_member_type",
[j]="err_objc_unknown_at",
[e]="invalid use of pointer to member type after %select{.*|->*}0",
[b]="expected an Objective-C directive after \'@\'",
[f]={{nil,nil,{"invalid use of pointer to member type after ",{".*","->*"}}}},
[c]="expected an Objective-C directive after \'@\'",
[g]=k,
[e]=d,
[h]="invalid use of pointer to member type after (?:\\.\\*|\\-\\>\\*)",
[f]="expected an Objective\\-C directive after \'@\'",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={"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"},
[h]={"00a0cf70d9ee",1268719487,"Don\'t consume tokens past the end-of-file in an @interface. Fixes","Don\'t consume tokens past the end-of-file in an @interface. Fixes\n<rdar://problem/7735566>.\n\nllvm-svn: 98613"},
[i]={{Q,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;"}},
[k]={{B,724,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // ...\n  while (true) {\n    // ...\n    if (DirectiveKind == tok::objc_end) { // @end -> terminate list\n    // ...\n    } else if (DirectiveKind == tok::objc_not_keyword) {\n      Diag(Tok, diag::err_objc_unknown_at);"}},
[l]={
[l]={
["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 .*"}
["clang/test/Parser/missing-end.m"]={"clang/test/Parser/missing-end.m:6:3: error: expected an Objective-C directive after \'@\'"}
}
}
},
},
["err_postfix_after_unary_requires_parens"]={
["err_objc_var_decl_inclass"]={
[d]={{nil,t,"err_postfix_after_unary_requires_parens"}},
[j]="err_objc_var_decl_inclass",
[e]={{nil,t,"expression cannot be followed by a postfix %0 operator; add parentheses"}},
[b]="cannot declare variable inside @interface or @protocol",
[f]={{nil,t,"expression cannot be followed by a postfix A operator; add parentheses"}},
[c]="cannot declare variable inside @interface or @protocol",
[g]=k,
[e]=d,
[h]="expression cannot be followed by a postfix (.*?) operator; add parentheses",
[f]="cannot declare variable inside @interface or @protocol",
[b]=a,
[g]=a,
[c]={{nil,t,y}},
[i]=q,
[j]={"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."},
[h]={"629aed932704",1237658805,"Issue error if variables are defined inside an objc class,","Issue error if variables are defined inside an objc class,\ncategory or protocol.\n\nllvm-svn: 67450"},
[i]={{"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), \")\");"}},
[k]={{z,4214,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  if (isInterfaceDeclKind) {\n    // Reject invalid vardecls.\n    for (unsigned i = 0, e = allTUVars.size(); i != e; i++) {\n      // ...\n      for (DeclGroupRef::iterator I = DG.begin(), E = DG.end(); I != E; ++I)\n        if (VarDecl *VDecl = dyn_cast<VarDecl>(*I)) {\n          if (!VDecl->hasExternalStorage())\n            Diag(VDecl->getLocation(), diag::err_objc_var_decl_inclass);"}},
[l]={
[l]={
["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"}
["clang/test/SemaObjC/interface-tu-variable.m"]={"clang/test/SemaObjC/interface-tu-variable.m:4:5: error: cannot declare variable inside @interface or @protocol","clang/test/SemaObjC/interface-tu-variable.m:5:5: error: cannot declare variable inside @interface or @protocol","clang/test/SemaObjC/interface-tu-variable.m:9:5: error: cannot declare variable inside @interface or @protocol","clang/test/SemaObjC/interface-tu-variable.m:13:10: error: cannot declare variable inside @interface or @protocol","clang/test/SemaObjC/interface-tu-variable.m:18:10: error: cannot declare variable inside @interface or @protocol"}
}
}
},
},
["err_pp_arc_cf_code_audited_syntax"]={
["err_objc_variable_sized_type_not_at_end"]={
[d]="err_pp_arc_cf_code_audited_syntax",
[j]={{nil,L,"err_objc_variable_sized_type_not_at_end"}},
[e]=zb,
[b]={{nil,L,"field %0 with variable sized type %1 is not at the end of class"}},
[f]=zb,
[c]={{nil,L,"field A with variable sized type B is not at the end of class"}},
[g]=k,
[e]=d,
[h]=zb,
[f]="field (.*?) with variable sized type (.*?) is not at the end of class",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,L,q}},
[j]={Yb,1317359532,Xb,Wb},
[h]={"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"},
[i]={{H,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);"}}
[k]={{z,3894,"static void DiagnoseVariableSizedIvars(Sema &S, ObjCContainerDecl *OCD) {\n // ...\n  // Check if variable sized ivar is followed by another ivar.\n  for (ObjCIvarDecl *ivar = IntfDecl->all_declared_ivar_begin(); ivar; ivar = ivar->getNextIvar()) {\n    // ...\n    if (IvarTy->isIncompleteArrayType()) {\n    // ...\n    } else if (const RecordType *RecordTy = IvarTy->getAs<RecordType>()) {\n     if (RecordTy->getDecl()->hasFlexibleArrayMember()) {\n       S.Diag(ivar->getLocation(), diag::err_objc_variable_sized_type_not_at_end) << ivar->getDeclName() << IvarTy;"}},
},
["err_pp_assume_nonnull_syntax"]={
[d]="err_pp_assume_nonnull_syntax",
[e]=zb,
[f]=zb,
[g]=k,
[h]=zb,
[b]=a,
[c]=mc,
[j]={nc,1434738357,oc,pc},
[i]={{H,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]={
[sc]={"clang/test/Sema/pragma-arc-cf-code-audited.c:3:35: error: expected \'begin\' or \'end\'"}
["clang/test/SemaObjCXX/flexible-array.mm"]={"clang/test/SemaObjCXX/flexible-array.mm:16:21: error: field \'flexible\' with variable sized type \'VariableSizeUnion\' is not at the end of class","clang/test/SemaObjCXX/flexible-array.mm:34:21: error: field \'flexible\' with variable sized type \'VariableSizeClass\' is not at the end of class"}
}
}
},
},
["err_pp_bad_paste"]={
["err_objc_weak_unsupported"]={
[d]="err_pp_bad_paste",
[j]="err_objc_weak_unsupported",
[e]="pasting formed \'%0\', an invalid preprocessing token",
[b]="-fobjc-weak is not supported on the current deployment target",
[f]="pasting formed \'A\', an invalid preprocessing token",
[c]="-fobjc-weak is not supported on the current deployment target",
[g]=k,
[e]=d,
[h]="pasting formed \'(.*?)\', an invalid preprocessing token",
[f]="\\-fobjc\\-weak is not supported on the current deployment target",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={q,1236199783,r,s},
[h]={"460ce58fa6a1",1445539097,"Define weak and __weak to mean ARC-style weak references, even in MRC.","Define weak and __weak to mean ARC-style weak references, even in MRC.\n\nPreviously, __weak was silently accepted and ignored in MRC mode.\nThat makes this a potentially source-breaking change that we have to\nroll out cautiously. Accordingly, for the time being, actual support\nfor __weak references in MRC is experimental, and the compiler will\nreject attempts to actually form such references.  The intent is to\neventually enable the feature by default in all non-GC modes.\n(It is, of course, incompatible with ObjC GC\'s interpretation of\n__weak.)\n\nIf you like, you can enable this feature with\n -Xclang -fobjc-weak\nbut like any -Xclang option, this option may be removed at any point,\ne.g. if/when it is eventually enabled by default.\n\nThis patch also enables the use of the ARC __unsafe_unretained qualifier\nin MRC.  Unlike __weak, this is being enabled immediatelySince\nvariables are essentially __unsafe_unretained by default in MRC,\nthe only practical uses are (1) communication and (2) changing the\ndefault behavior of by-value block capture.\n\nAs an implementation matter, this means that the ObjC ownership\nqualifiers may appear in any ObjC language mode, and so this patch\nremoves a number of checks for getLangOpts().ObjCAutoRefCount\nthat were guarding the processing of these qualifiers.  I don\'t\nexpect this to be a significant drain on performance; it may even\nbe faster to just check for these qualifiers directly on a type\n(since it\'s probably in a register anyway) than to do N dependent\nloads to grab the LangOptions.\n\nrdar://9674298\n\nllvm-svn: 251041"},
[i]={{"clang/lib/Lex/TokenLexer.cpp",870,"/// LHSTok is the LHS of a ## operator, and CurTokenIdx is the ##\n/// operatorRead the ## and RHS, and paste the LHS/RHS together. If there\n/// are more ## after it, chomp them iterativelyReturn the result as LHSTok.\n/// If this returns true, the caller should immediately return the token.\nbool TokenLexer::pasteTokens(Token &LHSTok, ArrayRef<Token> TokenStream, unsigned int &CurIdx) {\n  // ...\n  do {\n    // ...\n    if (LHSTok.isAnyIdentifier() && RHS.isAnyIdentifier()) {\n    // ...\n    } else {\n      // ...\n     // If pasting the two tokens didn\'t form a full new token, this is an\n      // error. This occurs with \"x ## +\" and other stuff.  Return with LHSTok\n     // unmodified and with RHS as the next token to lex.\n     if (isInvalid) {\n       // ...\n       // Do not emit the error when preprocessing assembler code.\n       if (!PP.getLangOpts().AsmPreprocessor) {\n         // ...\n         PP.Diag(Loc, PP.getLangOpts().MicrosoftExt ? diag::ext_pp_bad_paste_ms : diag::err_pp_bad_paste) << Buffer;"}},
[k]={{"clang/lib/Driver/ToolChains/Clang.cpp",4039,"static void RenderObjCOptions(const ToolChain &TC, const Driver &D, const llvm::Triple &T, const ArgList &Args, ObjCRuntime &Runtime, bool InferCovariantReturns, const InputInfo &Input, ArgStringList &CmdArgs) {\n  // ...\n  // Pass down -fobjc-weak or -fno-objc-weak if present.\n  if (types::isObjC(Input.getType())) {\n    // ...\n    if (!WeakArg) {\n    // ...\n    } else if (!Runtime.allowsWeak()) {\n      if (WeakArg->getOption().matches(options::OPT_fobjc_weak))\n       D.Diag(diag::err_objc_weak_unsupported);"},{"clang/lib/Frontend/CompilerInvocation.cpp",3685,"#include \"clang/Driver/Options.inc\"\n // ...\n if (Opts.ObjC) {\n   // ...\n   // ObjCWeak determines whether __weak is actually enabled.\n    // Note that we allow -fno-objc-weak to disable this even in ARC mode.\n    if (auto weakArg = Args.getLastArg(OPT_fobjc_weak, OPT_fno_objc_weak)) {\n     if (!weakArg->getOption().matches(OPT_fobjc_weak)) {\n     // ...\n     } else if (Opts.getGC() != LangOptions::NonGC) {\n      // ...\n      } else if (!Opts.ObjCWeakRuntime) {\n        Diags.Report(diag::err_objc_weak_unsupported);"}}
[l]={
["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_pp_colon_without_question"]={
["err_objc_weak_with_gc"]={
[d]="err_pp_colon_without_question",
[j]="err_objc_weak_with_gc",
[e]="\':\' without preceding \'?\'",
[b]="-fobjc-weak is not supported in Objective-C garbage collection",
[f]="\':\' without preceding \'?\'",
[c]="-fobjc-weak is not supported in Objective-C garbage collection",
[g]=k,
[e]=d,
[h]="\'\\:\' without preceding \'\\?\'",
[f]="\\-fobjc\\-weak is not supported in Objective\\-C garbage collection",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={q,1236199783,r,s},
[h]={"460ce58fa6a1",1445539097,"Define weak and __weak to mean ARC-style weak references, even in MRC.","Define weak and __weak to mean ARC-style weak references, even in MRC.\n\nPreviously, __weak was silently accepted and ignored in MRC mode.\nThat makes this a potentially source-breaking change that we have to\nroll out cautiously.  Accordingly, for the time being, actual support\nfor __weak references in MRC is experimental, and the compiler will\nreject attempts to actually form such referencesThe intent is to\neventually enable the feature by default in all non-GC modes.\n(It is, of course, incompatible with ObjC GC\'s interpretation of\n__weak.)\n\nIf you like, you can enable this feature with\n -Xclang -fobjc-weak\nbut like any -Xclang option, this option may be removed at any point,\ne.g. if/when it is eventually enabled by default.\n\nThis patch also enables the use of the ARC __unsafe_unretained qualifier\nin MRC.  Unlike __weak, this is being enabled immediately.  Since\nvariables are essentially __unsafe_unretained by default in MRC,\nthe only practical uses are (1) communication and (2) changing the\ndefault behavior of by-value block capture.\n\nAs an implementation matter, this means that the ObjC ownership\nqualifiers may appear in any ObjC language mode, and so this patch\nremoves a number of checks for getLangOpts().ObjCAutoRefCount\nthat were guarding the processing of these qualifiersI don\'t\nexpect this to be a significant drain on performance; it may even\nbe faster to just check for these qualifiers directly on a type\n(since it\'s probably in a register anyway) than to do N dependent\nloads to grab the LangOptions.\n\nrdar://9674298\n\nllvm-svn: 251041"},
[i]={{Z,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();"}}
[k]={{"clang/lib/Frontend/CompilerInvocation.cpp",3683,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Opts.ObjC) {\n    // ...\n    // ObjCWeak determines whether __weak is actually enabled.\n    // Note that we allow -fno-objc-weak to disable this even in ARC mode.\n    if (auto weakArg = Args.getLastArg(OPT_fobjc_weak, OPT_fno_objc_weak)) {\n      if (!weakArg->getOption().matches(OPT_fobjc_weak)) {\n      // ...\n      } else if (Opts.getGC() != LangOptions::NonGC) {\n        Diags.Report(diag::err_objc_weak_with_gc);"}}
},
},
["err_pp_directive_required"]={
["err_objcbridge_related_expected_related_class"]={
[d]="err_pp_directive_required",
[j]="err_objcbridge_related_expected_related_class",
[e]="%0 must be used within a preprocessing directive",
[b]="expected a related ObjectiveC class name, e.g., \'NSColor\'",
[f]="A must be used within a preprocessing directive",
[c]="expected a related ObjectiveC class name, e.g., \'NSColor\'",
[g]=k,
[e]=d,
[h]="(.*?) must be used within a preprocessing directive",
[f]="expected a related ObjectiveC class name, e\\.g\\., \'NSColor\'",
[b]=a,
[g]=a,
[c]=p,
[i]=u,
[j]={"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"},
[h]={"1a2519a7e974",1386189170,"ObjectiveC - Introducing objc_bridge_related attribute ","ObjectiveC - Introducing objc_bridge_related attribute \nwhich specifies couple of (optional) method selectors\nfor bridging a CFobject to or from an ObjectiveC \nobject. This is wip. // rdsr://15499111\n\nllvm-svn: 196408"},
[i]={{ab,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;"}},
[k]={{"clang/lib/Parse/ParseDecl.cpp",1500,"/// Parse the contents of the \"objc_bridge_related\" attribute.\n/// objc_bridge_related \'(\' related_class \',\' opt-class_method \',\' opt-instance_method \')\'\n/// related_class:\n///    Identifier\n///\n/// opt-class_method:\n///    Identifier: | <empty>\n///\n/// opt-instance_method:\n///    Identifier | <empty>\n///\nvoid Parser::ParseObjCBridgeRelatedAttribute(IdentifierInfo &ObjCBridgeRelated, SourceLocation ObjCBridgeRelatedLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  // Parse the related class name.\n  if (Tok.isNot(tok::identifier)) {\n    Diag(Tok, diag::err_objcbridge_related_expected_related_class);"}},
[l]={
[l]={
["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"}
["clang/test/Parser/objcbridge-related-attribute.m"]={"clang/test/Parser/objcbridge-related-attribute.m:9:51: error: expected a related ObjectiveC class name, e.g., \'NSColor\'","clang/test/Parser/objcbridge-related-attribute.m:12:51: error: expected a related ObjectiveC class name, e.g., \'NSColor\'"}
}
}
},
},
["err_pp_division_by_zero"]={
["err_objcbridge_related_selector_name"]={
[d]="err_pp_division_by_zero",
[j]="err_objcbridge_related_selector_name",
[e]="division by zero in preprocessor expression",
[b]="expected a class method selector with single argument, e.g., \'colorWithCGColor:\'",
[f]="division by zero in preprocessor expression",
[c]="expected a class method selector with single argument, e.g., \'colorWithCGColor:\'",
[g]=k,
[e]=d,
[h]="division by zero in preprocessor expression",
[f]="expected a class method selector with single argument, e\\.g\\., \'colorWithCGColor\\:\'",
[b]=a,
[g]=a,
[c]=p,
[i]=u,
[j]={q,1236199783,r,s},
[h]={"1a2519a7e974",1386189170,"ObjectiveC - Introducing objc_bridge_related attribute ","ObjectiveC - Introducing objc_bridge_related attribute \nwhich specifies couple of (optional) method selectors\nfor bridging a CFobject to or from an ObjectiveC \nobject. This is wip. // rdsr://15499111\n\nllvm-svn: 196408"},
[i]={{Z,721,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  // ...\n  while (true) {\n    // ...\n    case tok::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();"}},
[k]={{"clang/lib/Parse/ParseDecl.cpp",1517,"/// Parse the contents of the \"objc_bridge_related\" attribute.\n/// objc_bridge_related \'(\' related_class \',\' opt-class_method \',\' opt-instance_method \')\'\n/// related_class:\n///    Identifier\n///\n/// opt-class_method:\n///    Identifier: | <empty>\n///\n/// opt-instance_method:\n///     Identifier | <empty>\n///\nvoid Parser::ParseObjCBridgeRelatedAttribute(IdentifierInfo &ObjCBridgeRelated, SourceLocation ObjCBridgeRelatedLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n  // ...\n  if (Tok.is(tok::identifier)) {\n    // ...\n    if (!TryConsumeToken(tok::colon)) {\n      Diag(Tok, diag::err_objcbridge_related_selector_name);"},{"clang/lib/Parse/ParseDecl.cpp",1524,"/// Parse the contents of the \"objc_bridge_related\" attribute.\n/// objc_bridge_related \'(\' related_class \',\' opt-class_method \',\' opt-instance_method \')\'\n/// related_class:\n///    Identifier\n///\n/// opt-class_method:\n///    Identifier: | <empty>\n///\n/// opt-instance_method:\n///    Identifier | <empty>\n///\nvoid Parser::ParseObjCBridgeRelatedAttribute(IdentifierInfo &ObjCBridgeRelated, SourceLocation ObjCBridgeRelatedLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, ParsedAttr::Form Form) {\n // ...\n if (!TryConsumeToken(tok::comma)) {\n   if (Tok.is(tok::colon))\n      Diag(Tok, diag::err_objcbridge_related_selector_name);"}},
[l]={
[l]={
["clang/test/Preprocessor/ucn-pp-identifier.c"]={"clang/test/Preprocessor/ucn-pp-identifier.c:52:5: error: division by zero in preprocessor expression"}
["clang/test/Parser/objcbridge-related-attribute.m"]={"clang/test/Parser/objcbridge-related-attribute.m:10:75: error: expected a class method selector with single argument, e.g., \'colorWithCGColor:\'","clang/test/Parser/objcbridge-related-attribute.m:11:75: error: expected a class method selector with single argument, e.g., \'colorWithCGColor:\'"}
}
}
},
},
["err_pp_double_begin_of_arc_cf_code_audited"]={
["err_object_cannot_be_passed_returned_by_value"]={
[d]="err_pp_double_begin_of_arc_cf_code_audited",
[j]="err_object_cannot_be_passed_returned_by_value",
[e]="already inside \'#pragma clang arc_cf_code_audited\'",
[b]="interface type %1 cannot be %select{returned|passed}0 by value; did you forget * in %1?",
[f]="already inside \'#pragma clang arc_cf_code_audited\'",
[c]={{nil,nil,{"interface type B cannot be ",{"returned","passed"}," by value; did you forget * in B?"}}},
[g]=k,
[e]=d,
[h]="already inside \'\\#pragma clang arc_cf_code_audited\'",
[f]="interface type (.*?) cannot be (?:returned|passed) by value; did you forget \\* in (.*?)\\?",
[b]=a,
[g]=a,
[c]=p,
[i]=q,
[j]={Yb,1317359532,Xb,Wb},
[h]={"de5a53167743",1239476936,"Improve the \'cannot pass objc interface by value\' diagnostic:","Improve the \'cannot pass objc interface by value\' diagnostic:\n1) improve localizability by not passing english strings in.\n2) improve location for arguments.\n3) print the objc type being passed.\n\nBefore:\nmethod-bad-param.m:15:1: error: Objective-C type cannot be passed by value\n-(void) my_method:(foo) my_param\n^\n\nafter:\nmethod-bad-param.m:15:25: error: Objective-C interface type \'foo\' cannot be passed by value\n-(void) my_method:(foo) my_param\n                        ^\n\nllvm-svn: 68872"},
[i]={{H,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);"}},
[k]={{"clang/lib/Sema/SemaDecl.cpp",14939,"ParmVarDecl *Sema::CheckParameter(DeclContext *DC, SourceLocation StartLoc, SourceLocation NameLoc, IdentifierInfo *Name, QualType T, TypeSourceInfo *TSInfo, StorageClass SC) {\n  // ...\n  // Parameter declarators cannot be interface types. All ObjC objects are\n  // passed by reference.\n  if (T->isObjCObjectType()) {\n   // ...\n    Diag(NameLoc, diag::err_object_cannot_be_passed_returned_by_value) << 1 << T << FixItHint::CreateInsertion(TypeEndLoc, \"*\");"},{K,2928,"bool Sema::CheckFunctionReturnType(QualType T, SourceLocation Loc) {\n  // ...\n  // Methods cannot return interface types. All ObjC objects are\n  // passed by reference.\n  if (T->isObjCObjectType()) {\n    Diag(Loc, diag::err_object_cannot_be_passed_returned_by_value) << 0 << T << FixItHint::CreateInsertion(Loc, \"*\");"},{K,5332,"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      // Methods cannot return interface types. All ObjC objects are\n      // passed by reference.\n      if (T->isObjCObjectType()) {\n        // ...\n        S.Diag(DiagLoc, diag::err_object_cannot_be_passed_returned_by_value) << 0 << T << FixItHint::CreateInsertion(FixitLoc, \"*\");"}},
[l]={
[l]={
[sc]={"clang/test/Sema/pragma-arc-cf-code-audited.c:11:15: error: already inside \'#pragma clang arc_cf_code_audited\'"}
["clang/test/SemaObjCXX/parameters.mm"]={"clang/test/SemaObjCXX/parameters.mm:8:11: error: interface type \'A\' cannot be passed by value; did you forget * in \'A\'?"}
}
}
},
},
["err_pp_double_begin_of_assume_nonnull"]={
["err_odr_different_num_template_parameters"]={
[d]="err_pp_double_begin_of_assume_nonnull",
[j]="err_odr_different_num_template_parameters",
[e]="already inside \'#pragma clang assume_nonnull\'",
[b]="template parameter lists have a different number of parameters (%0 vs %1)",
[f]="already inside \'#pragma clang assume_nonnull\'",
[c]="template parameter lists have a different number of parameters (A vs B)",
[g]=k,
[e]=d,
[h]="already inside \'\\#pragma clang assume_nonnull\'",
[f]="template parameter lists have a different number of parameters \\((.*?) vs (.*?)\\)",
[b]=a,
[g]=a,
[c]=mc,
[i]=C,
[j]={nc,1434738357,oc,pc},
[h]={"a082a49d9e71",1291144490,"Implement basic AST importing and merging support for class template","Implement basic AST importing and merging support for class template\ndeclarations.\n\nllvm-svn: 120448"},
[i]={{H,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);"}},
[k]={{x,1804,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, TemplateParameterList *Params1, TemplateParameterList *Params2) {\n if (Params1->size() != Params2->size()) {\n    if (Context.Complain) {\n      Context.Diag2(Params2->getTemplateLoc(), Context.getApplicableDiagnostic(diag::err_odr_different_num_template_parameters)) << Params1->size() << Params2->size();"},{x,2239,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_different_num_template_parameters:"}}
[l]={
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-2.h:8:15: error: already inside \'#pragma clang assume_nonnull\'"}
}
},
},
["err_pp_double_begin_pragma_unsafe_buffer_usage"]={
["err_odr_different_template_parameter_kind"]={
[d]="err_pp_double_begin_pragma_unsafe_buffer_usage",
[j]="err_odr_different_template_parameter_kind",
[e]="already inside \'#pragma unsafe_buffer_usage\'",
[b]="template parameter has different kinds in different translation units",
[f]="already inside \'#pragma unsafe_buffer_usage\'",
[c]="template parameter has different kinds in different translation units",
[g]=k,
[e]=d,
[h]="already inside \'\\#pragma unsafe_buffer_usage\'",
[f]="template parameter has different kinds in different translation units",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={gb,1625925174,ib,jb},
[h]={"a082a49d9e71",1291144490,"Implement basic AST importing and merging support for class template","Implement basic AST importing and merging support for class template\ndeclarations.\n\nllvm-svn: 120448"},
[i]={{H,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);"}},
[k]={{x,1817,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, TemplateParameterList *Params1, TemplateParameterList *Params2) {\n  // ...\n  for (unsigned I = 0, N = Params1->size(); I != N; ++I) {\n    if (Params1->getParam(I)->getKind() != Params2->getParam(I)->getKind()) {\n      if (Context.Complain) {\n        Context.Diag2(Params2->getParam(I)->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_different_template_parameter_kind));"},{x,2241,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_different_template_parameter_kind:"}}
[l]={
["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_pp_duplicate_name_in_arg_list"]={
["err_odr_field_type_inconsistent"]={
[d]="err_pp_duplicate_name_in_arg_list",
[j]="err_odr_field_type_inconsistent",
[e]="duplicate macro parameter name %0",
[b]="field %0 declared with incompatible types in different translation units (%1 vs. %2)",
[f]="duplicate macro parameter name A",
[c]="field A declared with incompatible types in different translation units (B vs. C)",
[g]=k,
[e]=d,
[h]="duplicate macro parameter name (.*?)",
[f]="field (.*?) declared with incompatible types in different translation units \\((.*?) vs\\. (.*?)\\)",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={q,1236199783,r,s},
[h]={"03d1ed304b78",1318629282,"Teach the ASTImporter not to import redundant fields.","Teach the ASTImporter not to import redundant fields.\n\nllvm-svn: 142009"},
[i]={{z,2714,"/// 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 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;"}}
[k]={{x,2219,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_field_type_inconsistent:"}}
},
},
["err_pp_empty_filename"]={
["err_odr_function_type_inconsistent"]={
[d]="err_pp_empty_filename",
[j]="err_odr_function_type_inconsistent",
[e]="empty filename",
[b]="external function %0 declared with incompatible types in different translation units (%1 vs. %2)",
[f]="empty filename",
[c]="external function A declared with incompatible types in different translation units (B vs. C)",
[g]=k,
[e]=d,
[h]="empty filename",
[f]="external function (.*?) declared with incompatible types in different translation units \\((.*?) vs\\. (.*?)\\)",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={q,1236199783,r,s},
[h]={"bb7930c17e98",1265831671,"Implement basic support for merging function declarations across","Implement basic support for merging function declarations across\ntranslation units.\n\nllvm-svn: 95794"},
[i]={{z,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);"}},
[k]={{x,2215,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_function_type_inconsistent:"}}
[l]={
["clang/test/Preprocessor/include-directive2.c"]={"clang/test/Preprocessor/include-directive2.c:17:10: error: empty filename"}
}
},
},
["err_pp_endif_without_if"]={
["err_odr_ivar_type_inconsistent"]={
[d]="err_pp_endif_without_if",
[j]="err_odr_ivar_type_inconsistent",
[e]="#endif without #if",
[b]="instance variable %0 declared with incompatible types in different translation units (%1 vs. %2)",
[f]="#endif without #if",
[c]="instance variable A declared with incompatible types in different translation units (B vs. C)",
[g]=k,
[e]=d,
[h]="\\#endif without \\#if",
[f]="instance variable (.*?) declared with incompatible types in different translation units \\((.*?) vs\\. (.*?)\\)",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={q,1236199783,r,s},
[h]={"7244b0bb860b",1266366870,"Implement AST importing of Objective-C instance variables. ","Implement AST importing of Objective-C instance variables. \nCheck superclasses when merging two Objective-C @interfaces.\n\nllvm-svn: 96420"},
[i]={{z,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);"}},
[k]={{x,2221,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_ivar_type_inconsistent:"}}
[l]={
["clang/test/Parser/diag-crash.c"]={"clang/test/Parser/diag-crash.c:6:2: error: #endif without #if"}
}
},
},
["err_pp_eof_in_arc_cf_code_audited"]={
["err_odr_non_type_parameter_type_inconsistent"]={
[d]="err_pp_eof_in_arc_cf_code_audited",
[j]="err_odr_non_type_parameter_type_inconsistent",
[e]="\'#pragma clang arc_cf_code_audited\' was not ended within this file",
[b]="non-type template parameter declared with incompatible types in different translation units (%0 vs. %1)",
[f]="\'#pragma clang arc_cf_code_audited\' was not ended within this file",
[c]="non-type template parameter declared with incompatible types in different translation units (A vs. B)",
[g]=k,
[e]=d,
[h]="\'\\#pragma clang arc_cf_code_audited\' was not ended within this file",
[f]="non\\-type template parameter declared with incompatible types in different translation units \\((.*?) vs\\. (.*?)\\)",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={Yb,1317359532,Xb,Wb},
[h]={"a082a49d9e71",1291144490,"Implement basic AST importing and merging support for class template","Implement basic AST importing and merging support for class template\ndeclarations.\n\nllvm-svn: 120448"},
[i]={{Db,418,"/// 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 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);"}},
[k]={{x,1870,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, NonTypeTemplateParmDecl *D1, NonTypeTemplateParmDecl *D2) {\n  // ...\n  // Check types.\n  if (!IsStructurallyEquivalent(Context, D1->getType(), D2->getType())) {\n    if (Context.Complain) {\n      Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_non_type_parameter_type_inconsistent)) << D2->getType() << D1->getType();"},{x,2245,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\// ...\n  case diag::err_odr_non_type_parameter_type_inconsistent:"}}
[l]={
[sc]={"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_pp_eof_in_assume_nonnull"]={
["err_odr_objc_method_num_params_inconsistent"]={
[d]="err_pp_eof_in_assume_nonnull",
[j]="err_odr_objc_method_num_params_inconsistent",
[e]="\'#pragma clang assume_nonnull\' was not ended within this file",
[b]="%select{class|instance}0 method %1 has a different number of parameters in different translation units (%2 vs. %3)",
[f]="\'#pragma clang assume_nonnull\' was not ended within this file",
[c]={{nil,nil,{{Db,"instance"}," method B has a different number of parameters in different translation units (C vs. D)"}}},
[g]=k,
[e]=d,
[h]="\'\\#pragma clang assume_nonnull\' was not ended within this file",
[f]="(?:class|instance) method (.*?) has a different number of parameters in different translation units \\((.*?) vs\\. (.*?)\\)",
[b]=a,
[g]=a,
[c]=mc,
[i]=C,
[j]={nc,1434738357,oc,pc},
[h]={"43f54796ab42",1266372767,"Implement AST importing and checking for Objective-C method declarations.","Implement AST importing and checking for Objective-C method declarations.\n\nllvm-svn: 96442"},
[i]={{Db,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);"}},
[k]={{x,2227,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_objc_method_num_params_inconsistent:"}}
[l]={
["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_pp_error_opening_file"]={
["err_odr_objc_method_param_type_inconsistent"]={
[d]="err_pp_error_opening_file",
[j]="err_odr_objc_method_param_type_inconsistent",
[e]="error opening file \'%0\': %1",
[b]="%select{class|instance}0 method %1 has a parameter with a different types in different translation units (%2 vs. %3)",
[f]="error opening file \'A\': B",
[c]={{nil,nil,{{Db,"instance"}," method B has a parameter with a different types in different translation units (C vs. D)"}}},
[g]=rc,
[e]=d,
[h]="error opening file \'(.*?)\'\\: (.*?)",
[f]="(?:class|instance) method (.*?) has a parameter with a different types in different translation units \\((.*?) vs\\. (.*?)\\)",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={"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"},
[h]={"43f54796ab42",1266372767,"Implement AST importing and checking for Objective-C method declarations.","Implement AST importing and checking for Objective-C method declarations.\n\nllvm-svn: 96442"},
[i]={{Db,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)) << \"\";"}}
[k]={{x,2229,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_objc_method_param_type_inconsistent:"}}
},
},
["err_pp_expected_after"]={
["err_odr_objc_method_result_type_inconsistent"]={
[d]="err_pp_expected_after",
[j]="err_odr_objc_method_result_type_inconsistent",
[e]="missing %1 after %0",
[b]="%select{class|instance}0 method %1 has incompatible result types in different translation units (%2 vs. %3)",
[f]="missing B after A",
[c]={{nil,nil,{{Db,"instance"}," method B has incompatible result types in different translation units (C vs. D)"}}},
[g]=k,
[e]=d,
[h]="missing (.*?) after (.*?)",
[f]="(?:class|instance) method (.*?) has incompatible result types in different translation units \\((.*?) vs\\. (.*?)\\)",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={"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"},
[h]={"43f54796ab42",1266372767,"Implement AST importing and checking for Objective-C method declarations.","Implement AST importing and checking for Objective-C method declarations.\n\nllvm-svn: 96442"},
[i]={{z,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;"},{Z,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;"},{ab,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;"},{ab,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;"},{ab,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;"},{ab,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)) {"},{ab,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;"},{ab,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;"}},
[k]={{x,2225,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_objc_method_result_type_inconsistent:"}}
[l]={
["clang/test/Preprocessor/has_attribute_errors.cpp"]={"clang/test/Preprocessor/has_attribute_errors.cpp:13:30: error: missing \')\' after <numeric_constant>"}
}
},
},
["err_pp_expected_comma_in_arg_list"]={
["err_odr_objc_method_variadic_inconsistent"]={
[d]="err_pp_expected_comma_in_arg_list",
[j]="err_odr_objc_method_variadic_inconsistent",
[e]="expected comma in macro parameter list",
[b]="%select{class|instance}0 method %1 is variadic in one translation unit and not variadic in another",
[f]="expected comma in macro parameter list",
[c]={{nil,nil,{{Db,"instance"}," method B is variadic in one translation unit and not variadic in another"}}},
[g]=k,
[e]=d,
[h]="expected comma in macro parameter list",
[f]="(?:class|instance) method (.*?) is variadic in one translation unit and not variadic in another",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={q,1236199783,r,s},
[h]={"43f54796ab42",1266372767,"Implement AST importing and checking for Objective-C method declarations.","Implement AST importing and checking for Objective-C method declarations.\n\nllvm-svn: 96442"},
[i]={{z,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);"}}
[k]={{x,2231,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_objc_method_variadic_inconsistent:"}}
},
},
["err_pp_expected_eol"]={
["err_odr_objc_property_impl_kind_inconsistent"]={
[d]="err_pp_expected_eol",
[j]="err_odr_objc_property_impl_kind_inconsistent",
[e]="expected end of line in preprocessor expression",
[b]="property %0 is implemented with %select{@synthesize|@dynamic}1 in one translation but %select{@dynamic|@synthesize}1 in another translation unit",
[f]="expected end of line in preprocessor expression",
[c]={{nil,nil,{"property A is implemented with ",{"@synthesize","@dynamic"}," in one translation but ",{"@dynamic","@synthesize"}," in another translation unit"}}},
[g]=k,
[e]=d,
[h]="expected end of line in preprocessor expression",
[f]="property (.*?) is implemented with (?:@synthesize|@dynamic) in one translation but (?:@dynamic|@synthesize) in another translation unit",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={q,1236199783,r,s},
[h]={"14a49e2fbe1c",1291746723,"Implement AST import for Objective-C property implementations","Implement AST import for Objective-C property implementations\n(@synthesize and @dynamic).\n\nllvm-svn: 121159"},
[i]={{Z,940,"/// EvaluateDirectiveExpression - Evaluate an integer constant expression that\n/// may occur after a #if or #elif directive.  If 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);"}},
[k]={{x,2235,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_objc_property_impl_kind_inconsistent:"}}
[l]={
["clang/test/Preprocessor/has_include.c"]={"clang/test/Preprocessor/has_include.c:175:22: error: expected end of line in preprocessor expression"}
}
},
},
["err_pp_expected_ident_in_arg_list"]={
["err_odr_objc_property_type_inconsistent"]={
[d]="err_pp_expected_ident_in_arg_list",
[j]="err_odr_objc_property_type_inconsistent",
[e]="expected identifier in macro parameter list",
[b]="property %0 declared with incompatible types in different translation units (%1 vs. %2)",
[f]="expected identifier in macro parameter list",
[c]="property A declared with incompatible types in different translation units (B vs. C)",
[g]=k,
[e]=d,
[h]="expected identifier in macro parameter list",
[f]="property (.*?) declared with incompatible types in different translation units \\((.*?) vs\\. (.*?)\\)",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={q,1236199783,r,s},
[h]={"a11c45866eba",1266429730,"Implement AST merging for Objective-C properties.","Implement AST merging for Objective-C properties.\n\nllvm-svn: 96483"},
[i]={{z,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);"}}
[k]={{x,2233,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_objc_property_type_inconsistent:"}}
},
},
["err_pp_expected_module_name"]={
["err_odr_objc_superclass_inconsistent"]={
[d]={{nil,n,"err_pp_expected_module_name"}},
[j]="err_odr_objc_superclass_inconsistent",
[e]={{nil,n,"expected %select{identifier after \'.\' in |}0module name"}},
[b]="class %0 has incompatible superclasses",
[f]={{nil,n,{"expected ",{"identifier after \'.\' in ",a},"module name"}}},
[c]="class A has incompatible superclasses",
[g]=k,
[e]=d,
[h]="expected (?:identifier after \'\\.\' in |)module name",
[f]="class (.*?) has incompatible superclasses",
[b]=a,
[g]=a,
[c]={{nil,n,p}},
[i]=C,
[j]={Fb,1493857794,Gb,Hb},
[h]={"7244b0bb860b",1266366870,"Implement AST importing of Objective-C instance variables. ","Implement AST importing of Objective-C instance variables. \nCheck superclasses when merging two Objective-C @interfaces.\n\nllvm-svn: 96420"},
[i]={{H,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;"}},
[k]={{x,2223,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_objc_superclass_inconsistent:"}}
[l]={
["clang/test/Preprocessor/pragma_module.c"]={"clang/test/Preprocessor/pragma_module.c:13:100: error: expected identifier after \'.\' in module name"}
}
},
},
["err_pp_expected_rparen"]={
["err_odr_objc_synthesize_ivar_inconsistent"]={
[d]="err_pp_expected_rparen",
[j]="err_odr_objc_synthesize_ivar_inconsistent",
[e]="expected \')\' in preprocessor expression",
[b]="property %0 is synthesized to different ivars in different translation units (%1 vs. %2)",
[f]="expected \')\' in preprocessor expression",
[c]="property A is synthesized to different ivars in different translation units (B vs. C)",
[g]=k,
[e]=d,
[h]="expected \'\\)\' in preprocessor expression",
[f]="property (.*?) is synthesized to different ivars in different translation units \\((.*?) vs\\. (.*?)\\)",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={q,1236199783,r,s},
[h]={"14a49e2fbe1c",1291746723,"Implement AST import for Objective-C property implementations","Implement AST import for Objective-C property implementations\n(@synthesize and @dynamic).\n\nllvm-svn: 121159"},
[i]={{Z,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();"}}
[k]={{x,2237,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_objc_synthesize_ivar_inconsistent:"}}
},
},
["err_pp_expected_value_in_expr"]={
["err_odr_parameter_pack_non_pack"]={
[d]="err_pp_expected_value_in_expr",
[j]="err_odr_parameter_pack_non_pack",
[e]="expected value in expression",
[b]="parameter kind mismatch; parameter is %select{not a|a}0 parameter pack",
[f]="expected value in expression",
[c]={{nil,nil,{"parameter kind mismatch; parameter is ",{"not a","a"}," parameter pack"}}},
[g]=k,
[e]=d,
[h]="expected value in expression",
[f]="parameter kind mismatch; parameter is (?:not a|a) parameter pack",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={q,1236199783,r,s},
[h]={"a082a49d9e71",1291144490,"Implement basic AST importing and merging support for class template","Implement basic AST importing and merging support for class template\ndeclarations.\n\nllvm-svn: 120448"},
[i]={{Z,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);"}},
[k]={{x,1839,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, TemplateTypeParmDecl *D1, TemplateTypeParmDecl *D2) {\n  if (D1->isParameterPack() != D2->isParameterPack()) {\n   if (Context.Complain) {\n     Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_parameter_pack_non_pack)) << D2->isParameterPack();"},{x,1857,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, NonTypeTemplateParmDecl *D1, NonTypeTemplateParmDecl *D2) {\n if (D1->isParameterPack() != D2->isParameterPack()) {\n   if (Context.Complain) {\n     Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_parameter_pack_non_pack)) << D2->isParameterPack();"},{x,1888,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, TemplateTemplateParmDecl *D1, TemplateTemplateParmDecl *D2) {\n  if (D1->isParameterPack() != D2->isParameterPack()) {\n    if (Context.Complain) {\n     Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_parameter_pack_non_pack)) << D2->isParameterPack();"},{x,2243,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_parameter_pack_non_pack:"}}
[l]={
["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:19:8: error: expected value in expression"}
}
},
},
["err_pp_expects_filename"]={
["err_odr_tag_type_inconsistent"]={
[d]="err_pp_expects_filename",
[j]={{nil,P,"err_odr_tag_type_inconsistent"}},
[e]="expected \"FILENAME\" or <FILENAME>",
[b]={{nil,P,"type %0 has incompatible definitions in different translation units"}},
[f]="expected \"FILENAME\" or <FILENAME>",
[c]={{nil,P,"type A has incompatible definitions in different translation units"}},
[g]=k,
[e]=d,
[h]="expected \"FILENAME\" or \\<FILENAME\\>",
[f]="type (.*?) has incompatible definitions in different translation units",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,P,C}},
[j]={q,1236199783,r,s},
[h]={"df0ee34bc252",1498867607,"[Modules] Implement ODR-like semantics for tag types in C/ObjC","[Modules] Implement ODR-like semantics for tag types in C/ObjC\n\nAllow ODR for ObjC/C in the sense that we won\'t keep more that\none definition around (merge them). However, ensure the decl\npass the structural compatibility check in C11 6.2.7/1, for that,\nreuse the structural equivalence checks used by the ASTImporter.\n\nFew other considerations:\n- Create error diagnostics for tag types mismatches and thread\nthem into the structural equivalence checks.\n- Note that by doing this we only support redefinition between types\nthat are considered \"compatible types\" by C.\n\nThis is mixed approach of the suggestions discussed in\nhttp://lists.llvm.org/pipermail/cfe-dev/2017-March/053257.html\n\nDifferential Revision: https://reviews.llvm.org/D31778\n\nrdar://problem/31909368\n\nllvm-svn: 306918"},
[i]={{z,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);"},{z,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 \"\"\'sThe\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);"},{z,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);"},{z,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);"},{ab,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);"},{H,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);"}},
[k]={{x,1316,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, FieldDecl *Field1, FieldDecl *Field2, QualType Owner2Type) {\n // ...\n  if (!::IsStructurallyEquivalent(Name1, Name2)) {\n    if (Context.Complain) {\n      Context.Diag2(Owner2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Owner2Type;"},{x,1331,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, FieldDecl *Field1, FieldDecl *Field2, QualType Owner2Type) {\n  // ...\n  if (!IsStructurallyEquivalent(Context, Field1->getType(), Field2->getType())) {\n    if (Context.Complain) {\n      Context.Diag2(Owner2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Owner2Type;"},{x,1478,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n // ...\n  if (D1->isUnion() != D2->isUnion()) {\n    if (Context.Complain) {\n      Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Context.ToCtx.getTypeDeclType(D2);"},{x,1570,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n // ...\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n     // ...\n      if (D1CXX->getNumBases() != D2CXX->getNumBases()) {\n        if (Context.Complain) {\n          Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Context.ToCtx.getTypeDeclType(D2);"},{x,1590,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  // ...\n if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n   if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      // ...\n     // Check the base classes.\n      for (CXXRecordDecl::base_class_iterator Base1 = D1CXX->bases_begin(), BaseEnd1 = D1CXX->bases_end(), Base2 = D2CXX->bases_begin(); Base1 != BaseEnd1; ++Base1, ++Base2) {\n        if (!IsStructurallyEquivalent(Context, Base1->getType(), Base2->getType())) {\n          if (Context.Complain) {\n           Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Context.ToCtx.getTypeDeclType(D2);"},{x,1605,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  // ...\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n     // ...\n     // Check the base classes.\n      for (CXXRecordDecl::base_class_iterator Base1 = D1CXX->bases_begin(), BaseEnd1 = D1CXX->bases_end(), Base2 = D2CXX->bases_begin(); Base1 != BaseEnd1; ++Base1, ++Base2) {\n        // ...\n        // Check virtual vs. non-virtual inheritance mismatch.\n       if (Base1->isVirtual() != Base2->isVirtual()) {\n          if (Context.Complain) {\n           Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Context.ToCtx.getTypeDeclType(D2);"},{x,1626,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n // ...\n if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n     // ...\n     for (CXXRecordDecl::friend_iterator Friend1 = D1CXX->friend_begin(), Friend1End = D1CXX->friend_end(); Friend1 != Friend1End; ++Friend1, ++Friend2) {\n        if (Friend2 == Friend2End) {\n          if (Context.Complain) {\n           Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Context.ToCtx.getTypeDeclType(D2CXX);"},{x,1638,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  // ...\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n     // ...\n     for (CXXRecordDecl::friend_iterator Friend1 = D1CXX->friend_begin(), Friend1End = D1CXX->friend_end(); Friend1 != Friend1End; ++Friend1, ++Friend2) {\n       // ...\n       if (!IsStructurallyEquivalent(Context, *Friend1, *Friend2)) {\n          if (Context.Complain) {\n           Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Context.ToCtx.getTypeDeclType(D2CXX);"},{x,1651,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  // ...\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n     // ...\n      if (Friend2 != Friend2End) {\n        if (Context.Complain) {\n         Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Context.ToCtx.getTypeDeclType(D2);"},{x,1662,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  // ...\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n   // ...\n    } else if (D1CXX->getNumBases() > 0) {\n      if (Context.Complain) {\n        Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Context.ToCtx.getTypeDeclType(D2);"},{x,1684,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  // ...\n  for (RecordDecl::field_iterator Field1 = D1->field_begin(), Field1End = D1->field_end(); Field1 != Field1End; ++Field1, ++Field2) {\n    if (Field2 == Field2End) {\n      if (Context.Complain) {\n        Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Context.ToCtx.getTypeDeclType(D2);"},{x,1700,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n // ...\n  if (Field2 != Field2End) {\n    if (Context.Complain) {\n     Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Context.ToCtx.getTypeDeclType(D2);"},{x,1755,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  // ...\n  for (EnumDecl::enumerator_iterator EC1 = D1->enumerator_begin(), EC1End = D1->enumerator_end(); EC1 != EC1End; ++EC1, ++EC2) {\n    if (EC2 == EC2End) {\n      if (Context.Complain) {\n        Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Context.ToCtx.getTypeDeclType(D2);"},{x,1771,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  // ...\n  for (EnumDecl::enumerator_iterator EC1 = D1->enumerator_begin(), EC1End = D1->enumerator_end(); EC1 != EC1End; ++EC1, ++EC2) {\n    // ...\n    if (!llvm::APSInt::isSameValue(Val1, Val2) || !IsStructurallyEquivalent(EC1->getIdentifier(), EC2->getIdentifier())) {\n      if (Context.Complain) {\n       Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Context.ToCtx.getTypeDeclType(D2);"},{x,1785,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  // ...\n  if (EC2 != EC2End) {\n    if (Context.Complain) {\n      Context.Diag2(D2->getLocation(), Context.getApplicableDiagnostic(diag::err_odr_tag_type_inconsistent)) << Context.ToCtx.getTypeDeclType(D2);"},{x,2217,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_tag_type_inconsistent:"}},
[l]={
[l]={
["clang/test/Preprocessor/_Pragma-dependency.c"]={"clang/test/Preprocessor/_Pragma-dependency.c:7:24: error: expected \"FILENAME\" or <FILENAME>"}
["clang/test/Modules/elaborated-type-specifier-from-hidden-module.m"]={"clang/test/Modules/elaborated-type-specifier-from-hidden-module.m:10:8: error: type \'struct S3\' has incompatible definitions in different translation units"}
}
}
},
},
["err_pp_expr_bad_token_binop"]={
["err_odr_variable_multiple_def"]={
[d]="err_pp_expr_bad_token_binop",
[j]="err_odr_variable_multiple_def",
[e]="token is not a valid binary operator in a preprocessor subexpression",
[b]="external variable %0 defined in multiple translation units",
[f]="token is not a valid binary operator in a preprocessor subexpression",
[c]="external variable A defined in multiple translation units",
[g]=k,
[e]=d,
[h]="token is not a valid binary operator in a preprocessor subexpression",
[f]="external variable (.*?) defined in multiple translation units",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={q,1236199783,r,s},
[h]={"3aed6cdd5e61",1265663379,"Implement basic importing and merging of variable declarations within","Implement basic importing and merging of variable declarations within\nthe AST importer. This doesn\'t actually do anything (yet), because we\ndon\'t have driver logic for merging ASTs.\n\nllvm-svn: 95570"},
[i]={{Z,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();"}},
[k]={{x,2213,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n  case diag::err_odr_variable_multiple_def:"}}
[l]={
["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_pp_expr_bad_token_lparen"]={
["err_odr_variable_type_inconsistent"]={
[d]="err_pp_expr_bad_token_lparen",
[j]="err_odr_variable_type_inconsistent",
[e]="function-like macro %0 is not defined",
[b]="external variable %0 declared with incompatible types in different translation units (%1 vs. %2)",
[f]="function-like macro A is not defined",
[c]="external variable A declared with incompatible types in different translation units (B vs. C)",
[g]=k,
[e]=d,
[h]="function\\-like macro (.*?) is not defined",
[f]="external variable (.*?) declared with incompatible types in different translation units \\((.*?) vs\\. (.*?)\\)",
[b]=a,
[g]=a,
[c]=p,
[i]=C,
[j]={"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"},
[h]={"3aed6cdd5e61",1265663379,"Implement basic importing and merging of variable declarations within","Implement basic importing and merging of variable declarations within\nthe AST importer. This doesn\'t actually do anything (yet), because we\ndon\'t have driver logic for merging ASTs.\n\nllvm-svn: 95570"},
[i]={{Z,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();"}},
[k]={{x,2211,"unsigned StructuralEquivalenceContext::getApplicableDiagnostic(unsigned ErrorDiagnostic) {\n  // ...\n case diag::err_odr_variable_type_inconsistent:"}}
[l]={
["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_pp_expr_bad_token_start_expr"]={
["err_offsetof_array_type"]={
[d]="err_pp_expr_bad_token_start_expr",
[j]="err_offsetof_array_type",
[e]="invalid token at start of a preprocessor expression",
[b]="offsetof requires array type, %0 invalid",
[f]="invalid token at start of a preprocessor expression",
[c]="offsetof requires array type, A invalid",
[g]=k,
[e]=d,
[h]="invalid token at start of a preprocessor expression",
[f]="offsetof requires array type, (.*?) invalid",
[b]=a,
[g]=a,
[c]=p,
[i]=q,
[j]={q,1236199783,r,s},
[h]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files.","Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004"},
[i]={{Z,286,"/// 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 usedAs 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);"}},
[k]={{N,16616,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n // ...\n  for (const OffsetOfComponent &OC : Components) {\n   if (OC.isBrackets) {\n     // Offset of an array sub-fieldTODO: Should we allow vector elements?\n     if (!CurrentType->isDependentType()) {\n       // ...\n       if (!AT)\n         return ExprError(Diag(OC.LocEnd, diag::err_offsetof_array_type) << CurrentType);"}}
[l]={
["clang/test/Preprocessor/has_include.c"]={"clang/test/Preprocessor/has_include.c:140:19: error: invalid token at start of a preprocessor expression"}
}
},
},
["err_pp_file_not_found"]={
["err_offsetof_bitfield"]={
[d]="err_pp_file_not_found",
[j]="err_offsetof_bitfield",
[e]="\'%0\' file not found",
[b]="cannot compute offset of bit-field %0",
[f]="\'A\' file not found",
[c]="cannot compute offset of bit-field A",
[g]=rc,
[e]=d,
[h]="\'(.*?)\' file not found",
[f]="cannot compute offset of bit\\-field (.*?)",
[b]=a,
[g]=a,
[c]=p,
[i]=q,
[j]={q,1236199783,r,s},
[h]={"10982ea3f9e1",1272494166,"Diagnose __builtin_offsetof expressions that refer to bit-fields","Diagnose __builtin_offsetof expressions that refer to bit-fields\n\nllvm-svn: 102548"},
[i]={{z,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;"},{H,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;"}},
[k]={{N,16690,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  // ...\n  for (const OffsetOfComponent &OC : Components) {\n    // ...\n    // C99 7.17p3:\n    //  (If the specified member is a bit-field, the behavior is undefined.)\n   //\n   // We diagnose this as an error.\n    if (MemberDecl->isBitField()) {\n      Diag(OC.LocEnd, diag::err_offsetof_bitfield) << MemberDecl->getDeclName() << SourceRange(BuiltinLoc, RParenLoc);"}},
[l]={
[l]={
["clang/test/SemaCXX/template-specialization-fatal.cpp"]={"clang/test/SemaCXX/template-specialization-fatal.cpp:5:10: fatal error: \'not_found.h\' file not found"}
["clang/test/SemaCXX/offsetof.cpp"]={"clang/test/SemaCXX/offsetof.cpp:38:54: error: cannot compute offset of bit-field \'j\'"}
}
}
},
},
["err_pp_file_not_found_angled_include_not_fatal"]={
["err_offsetof_field_of_virtual_base"]={
[d]={{nil,u,"err_pp_file_not_found_angled_include_not_fatal"}},
[j]="err_offsetof_field_of_virtual_base",
[e]={{nil,x,"\'%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"}},
[b]="invalid application of \'offsetof\' to a field of a virtual base",
[f]={{nil,x,{"\'A\' file not found with <angled> ",{"include","import"},"; use \"quotes\" instead"}},{u,u,"\'A\' file not found with <angled> include; use \"quotes\" instead"}},
[c]="invalid application of \'offsetof\' to a field of a virtual base",
[g]=k,
[e]=d,
[h]="\'(.*?)\' file not found with \\<angled\\> (?:include|import); use \"quotes\" instead",
[f]="invalid application of \'offsetof\' to a field of a virtual base",
[b]=a,
[g]=a,
[c]={{nil,u,p}},
[i]=q,
[j]={"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"},
[h]={"ff17f8367311",1381818503,"Sema: Consider it an error to apply __builtin_offsetof to a member in a virtual base","Sema: Consider it an error to apply __builtin_offsetof to a member in a virtual base\n\nicc 13 and g++ 4.9 both reject this while we would crash.\n\nFixes PR17578.\n\nllvm-svn: 192674"},
[i]={{z,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() + \"\\\"\");"}},
[k]={{N,16766,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  // ...\n  for (const OffsetOfComponent &OC : Components) {\n    // ...\n    if (IsDerivedFrom(OC.LocStart, CurrentType, Context.getTypeDeclType(Parent), Paths)) {\n      if (Paths.getDetectedVirtual()) {\n        Diag(OC.LocEnd, diag::err_offsetof_field_of_virtual_base) << MemberDecl->getDeclName() << SourceRange(BuiltinLoc, RParenLoc);"}},
[l]={
[l]={
["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"}
["clang/test/SemaCXX/offsetof.cpp"]={"clang/test/SemaCXX/offsetof.cpp:82:50: error: invalid application of \'offsetof\' to a field of a virtual base"}
}
}
},
},
["err_pp_file_not_found_typo_not_fatal"]={
["err_offsetof_incomplete_type"]={
[d]={{nil,u,"err_pp_file_not_found_typo_not_fatal"}},
[j]="err_offsetof_incomplete_type",
[e]={{nil,u,"\'%0\' file not found, did you mean \'%1\'?"}},
[b]="offsetof of incomplete type %0",
[f]={{nil,u,"\'A\' file not found, did you mean \'B\'?"}},
[c]="offsetof of incomplete type A",
[g]=k,
[e]=d,
[h]="\'(.*?)\' file not found, did you mean \'(.*?)\'\\?",
[f]="offsetof of incomplete type (.*?)",
[b]=a,
[g]=a,
[c]={{nil,u,p}},
[i]=q,
[j]={"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"},
[h]={"9eff4e60ae4c",1257303823,"Diagnose __builtin_offsetof on incomplete types. Fixes","Diagnose __builtin_offsetof on incomplete typesFixes\nrdar://problem/7222956\n\nllvm-svn: 85999"},
[i]={{z,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;"}},
[k]={{N,16600,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  // ...\n  if (!Dependent && RequireCompleteType(BuiltinLoc, ArgTy, diag::err_offsetof_incomplete_type, TypeRange))"},{N,16642,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  // ...\n  for (const OffsetOfComponent &OC : Components) {\n    // ...\n    if (RequireCompleteType(OC.LocStart, CurrentType, diag::err_offsetof_incomplete_type))"}},
[l]={
[l]={
["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\'?"}
["clang/test/Sema/offsetof.c"]={"clang/test/Sema/offsetof.c:57:11: error: offsetof of incomplete type \'struct incomplete\'"}
}
}
},
},
["err_pp_identifier_arg_not_identifier"]={
["err_offsetof_record_type"]={
[d]="err_pp_identifier_arg_not_identifier",
[j]="err_offsetof_record_type",
[e]="cannot convert %0 token to an identifier",
[b]="offsetof requires struct, union, or class type, %0 invalid",
[f]="cannot convert A token to an identifier",
[c]="offsetof requires struct, union, or class type, A invalid",
[g]=k,
[e]=d,
[h]="cannot convert (.*?) token to an identifier",
[f]="offsetof requires struct, union, or class type, (.*?) invalid",
[b]=a,
[g]=a,
[c]=p,
[i]=q,
[j]={"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"},
[h]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files.","Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004"},
[i]={{ab,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();"}},
[k]={{N,16587,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  // ...\n  // We must have at least one component that refers to the type, and the first\n  // one is known to be a field designatorVerify that the ArgTy represents\n  // a struct/union/class.\n  if (!Dependent && !ArgTy->isRecordType())\n   return ExprError(Diag(BuiltinLoc, diag::err_offsetof_record_type) << ArgTy << TypeRange);"},{N,16656,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  // ...\n  for (const OffsetOfComponent &OC : Components) {\n    // ...\n    if (!RC)\n     return ExprError(Diag(OC.LocEnd, diag::err_offsetof_record_type) << CurrentType);"}},
[l]={
[l]={
["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"}
["clang/test/Sema/offsetof.c"]={"clang/test/Sema/offsetof.c:24:7: error: offsetof requires struct, union, or class type, \'int\' invalid"}
}
}
},
},
["err_pp_illegal_floating_literal"]={
["err_omp_adjust_arg_multiple_clauses"]={
[d]="err_pp_illegal_floating_literal",
[j]={{nil,s,"err_omp_adjust_arg_multiple_clauses"}},
[e]="floating point literal in preprocessor expression",
[b]={{nil,s,"\'adjust_arg\' argument %0 used in multiple clauses"}},
[f]="floating point literal in preprocessor expression",
[c]={{nil,s,"\'adjust_arg\' argument A used in multiple clauses"}},
[g]=k,
[e]=d,
[h]="floating point literal in preprocessor expression",
[f]="\'adjust_arg\' argument (.*?) used in multiple clauses",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,s,n}},
[j]={q,1236199783,r,s},
[h]={"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"},
[i]={{Z,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);"}}
[k]={{m,7699,"void Sema::ActOnOpenMPDeclareVariantDirective(FunctionDecl *FD, Expr *VariantRef, OMPTraitInfo &TI, ArrayRef<Expr *> AdjustArgsNothing, ArrayRef<Expr *> AdjustArgsNeedDevicePtr, ArrayRef<OMPInteropInfo> AppendArgs, SourceLocation AdjustArgsLoc, SourceLocation AppendArgsLoc, SourceRange SR) {\n  // ...\n  for (Expr *E : AllAdjustArgs) {\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         // It\'s a parameter of the function, check duplicates.\n          if (!AdjustVars.insert(CanonPVD).second) {\n           Diag(DRE->getLocation(), diag::err_omp_adjust_arg_multiple_clauses) << PVD;"}},
},
["err_pp_import_directive_ms"]={
[d]="err_pp_import_directive_ms",
[e]="#import of type library is an unsupported Microsoft feature",
[f]="#import of type library is an unsupported Microsoft feature",
[g]=k,
[h]="\\#import of type library is an unsupported Microsoft feature",
[b]=a,
[c]=p,
[j]={"0467f55d6283",1332040237,"Turns #import in MS Mode into an error.","Turns #import in MS Mode into an error.\n\nllvm-svn: 153009"},
[i]={{z,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/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"}
[zb]={"clang/test/OpenMP/declare_variant_clauses_messages.cpp:115:32: error: \'adjust_arg\' argument \'AAA\' used in multiple clauses","clang/test/OpenMP/declare_variant_clauses_messages.cpp:110:69: error: \'adjust_arg\' argument \'AAA\' used in multiple clauses"}
}
}
},
},
["err_pp_include_in_arc_cf_code_audited"]={
["err_omp_aligned_expected_array_or_ptr"]={
[d]="err_pp_include_in_arc_cf_code_audited",
[j]="err_omp_aligned_expected_array_or_ptr",
[e]={{nil,x,"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\'"}},
[b]="argument of aligned clause should be array%select{ or pointer|, pointer, reference to array or reference to pointer}1, not %0",
[f]={{nil,x,{"cannot ",{"#include files","import headers"}," inside \'#pragma clang arc_cf_code_audited\'"}},{u,nil,"cannot #include files inside \'#pragma clang arc_cf_code_audited\'"}},
[c]={{nil,nil,{"argument of aligned clause should be array",{" or pointer",", pointer, reference to array or reference to pointer"},", not A"}}},
[g]=k,
[e]=d,
[h]="cannot (?:\\#include files|import headers) inside \'\\#pragma clang arc_cf_code_audited\'",
[f]="argument of aligned clause should be array(?: or pointer|, pointer, reference to array or reference to pointer), not (.*?)",
[b]=a,
[g]=a,
[c]=p,
[i]=n,
[j]={Yb,1317359532,Xb,Wb},
[h]={"f0d76e7dc3e5",1401374185,"Parsing/Sema for OMPAlignedClause.","Parsing/Sema for OMPAlignedClause.\n\nllvm-svn: 209816"},
[i]={{z,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;"}},
[k]={{m,6920,"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         // ...\n         if (!Ty || (!Ty->isArrayType() && !Ty->isPointerType())) {\n            Diag(E->getExprLoc(), diag::err_omp_aligned_expected_array_or_ptr) << QTy << getLangOpts().CPlusPlus << E->getSourceRange();"},{m,20284,"OMPClause *Sema::ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList, Expr *Alignment, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n   if (!Ty || (!Ty->isArrayType() && !Ty->isPointerType())) {\n     Diag(ELoc, diag::err_omp_aligned_expected_array_or_ptr) << QType << getLangOpts().CPlusPlus << ERange;"}},
[l]={
[l]={
[sc]={"clang/test/Sema/pragma-arc-cf-code-audited.c:13:1: error: cannot #include files inside \'#pragma clang arc_cf_code_audited\'"}
["clang/test/OpenMP/target_simd_aligned_messages.cpp"]={"clang/test/OpenMP/target_simd_aligned_messages.cpp:34:35: error: argument of aligned clause should be array, pointer, reference to array or reference to pointer, not \'B\'","clang/test/OpenMP/target_simd_aligned_messages.cpp:137:35: error: argument of aligned clause should be array, pointer, reference to array or reference to pointer, not \'S3\'","clang/test/OpenMP/target_simd_aligned_messages.cpp:140:35: error: argument of aligned clause should be array, pointer, reference to array or reference to pointer, not \'int\'","clang/test/OpenMP/target_simd_aligned_messages.cpp:182:36: error: argument of aligned clause should be array, pointer, reference to array or reference to pointer, not \'int\'","clang/test/OpenMP/target_simd_aligned_messages.cpp:187:36: error: argument of aligned clause should be array, pointer, reference to array or reference to pointer, not \'int\'","clang/test/OpenMP/target_simd_aligned_messages.cpp:193:36: error: argument of aligned clause should be array, pointer, reference to array or reference to pointer, not \'S1\'","clang/test/OpenMP/target_simd_aligned_messages.cpp:193:39: error: argument of aligned clause should be array, pointer, reference to array or reference to pointer, not \'S2\'","clang/test/OpenMP/target_simd_aligned_messages.cpp:198:35: error: argument of aligned clause should be array, pointer, reference to array or reference to pointer, not \'S3\'","clang/test/OpenMP/target_simd_aligned_messages.cpp:63:35: error: argument of aligned clause should be array, pointer, reference to array or reference to pointer, not \'int\'"}
}
}
},
},
["err_pp_include_in_assume_nonnull"]={
["err_omp_allocator_not_in_uses_allocators"]={
[d]="err_pp_include_in_assume_nonnull",
[j]={{nil,o,"err_omp_allocator_not_in_uses_allocators"}},
[e]={{nil,x,"cannot %select{#include files|import headers}0 inside \'#pragma clang assume_nonnull\'"},{u,nil,"cannot #include files inside \'#pragma clang assume_nonnull\'"}},
[b]={{nil,o,"allocator must be specified in the \'uses_allocators\' clause"}},
[f]={{nil,x,{"cannot ",{"#include files","import headers"}," inside \'#pragma clang assume_nonnull\'"}},{u,nil,"cannot #include files inside \'#pragma clang assume_nonnull\'"}},
[c]={{nil,o,"allocator must be specified in the \'uses_allocators\' clause"}},
[g]=k,
[e]=d,
[h]="cannot (?:\\#include files|import headers) inside \'\\#pragma clang assume_nonnull\'",
[f]="allocator must be specified in the \'uses_allocators\' clause",
[b]=a,
[g]=a,
[c]=mc,
[i]={{nil,o,n}},
[j]={nc,1434738357,oc,pc},
[h]={I,1576908663,H,F},
[i]={{z,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;"}},
[k]={{m,5498,"static void checkAllocateClauses(Sema &S, DSAStackTy *Stack, ArrayRef<OMPClause *> Clauses) {\n // ...\n for (OMPClause *C : AllocateRange) {\n   // ...\n   if (S.getLangOpts().OpenMP >= 50 && !Stack->hasRequiresDeclWithClause<OMPDynamicAllocatorsClause>() && isOpenMPTargetExecutionDirective(Stack->getCurrentDirective()) && AC->getAllocator()) {\n     // ...\n     if (Checker.Visit(Allocator))\n       S.Diag(Allocator->getExprLoc(), diag::err_omp_allocator_not_in_uses_allocators) << Allocator->getSourceRange();"}},
[l]={
[l]={
["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\'"}
["clang/test/OpenMP/target_firstprivate_messages.cpp"]={"clang/test/OpenMP/target_firstprivate_messages.cpp:132:48: error: allocator must be specified in the \'uses_allocators\' clause"}
}
}
},
},
["err_pp_include_too_deep"]={
["err_omp_allocator_used_in_clauses"]={
[d]="err_pp_include_too_deep",
[j]={{nil,o,"err_omp_allocator_used_in_clauses"}},
[e]="#include nested too deeply",
[b]={{nil,o,"allocators used in \'uses_allocators\' clause cannot appear in other data-sharing or data-mapping attribute clauses"}},
[f]="#include nested too deeply",
[c]={{nil,o,"allocators used in \'uses_allocators\' clause cannot appear in other data-sharing or data-mapping attribute clauses"}},
[g]=k,
[e]=d,
[h]="\\#include nested too deeply",
[f]="allocators used in \'uses_allocators\' clause cannot appear in other data\\-sharing or data\\-mapping attribute clauses",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,o,n}},
[j]={q,1236199783,r,s},
[h]={I,1576908663,H,F},
[i]={{z,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);"}}
[k]={{m,2957,"void Sema::EndOpenMPDSABlock(Stmt *CurDirective) {\n // OpenMP [2.14.3.5, Restrictions, C/C++, p.1]\n // A variable of class type (or array thereof) that appears in a lastprivate\n  //  clause requires an accessible, unambiguous default constructor for the\n  //  class type, unless the list item is also specified in a firstprivate\n  //  clause.\n  if (const auto *D = dyn_cast_or_null<OMPExecutableDirective>(CurDirective)) {\n    for (OMPClause *C : D->clauses()) {\n      // ...\n      if (auto *Clause = dyn_cast<OMPUsesAllocatorsClause>(C)) {\n        for (unsigned I = 0, E = Clause->getNumberOfAllocators(); I < E; ++I) {\n         // ...\n         if (DVar.RefExpr || DSAStack->checkMappableExprComponentListsForDecl(VD, /*CurrentRegionOnly=*/true, [VD, &MapExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef MapExprComponents, OpenMPClauseKind C) {\n           // ...\n           Diag(D.Allocator->getExprLoc(), diag::err_omp_allocator_used_in_clauses) << D.Allocator->getSourceRange();"}},
},
["err_pp_including_mainfile_in_preamble"]={
[d]={{nil,x,"err_pp_including_mainfile_in_preamble"}},
[e]={{nil,x,"main file cannot be included recursively when building a preamble"}},
[f]={{nil,x,"main file cannot be included recursively when building a preamble"}},
[g]=k,
[h]="main file cannot be included recursively when building a preamble",
[b]=a,
[c]={{nil,x,p}},
[j]={"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"},
[i]={{z,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);"}}
},
["err_pp_invalid_directive"]={
[d]="err_pp_invalid_directive",
[e]={{nil,C,"invalid preprocessing directive%select{|, did you mean \'#%1\'?}0"},{F,nil,"invalid preprocessing directive"}},
[f]={{nil,C,{"invalid preprocessing directive",{a,", did you mean \'#B\'?"}}},{F,nil,"invalid preprocessing directive"}},
[g]=k,
[h]="invalid preprocessing directive(?:|, did you mean \'\\#(.*?)\'\\?)",
[b]=a,
[c]=p,
[j]={q,1236199783,r,s},
[i]={{z,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/Preprocessor/disabled-cond-diags2.c"]={"clang/test/Preprocessor/disabled-cond-diags2.c:14:2: error: invalid preprocessing directive"}
["clang/test/OpenMP/target_uses_allocators_messages.cpp"]={"clang/test/OpenMP/target_uses_allocators_messages.cpp:49:36: error: allocators used in \'uses_allocators\' clause cannot appear in other data-sharing or data-mapping attribute clauses","clang/test/OpenMP/target_uses_allocators_messages.cpp:51:58: error: allocators used in \'uses_allocators\' clause cannot appear in other data-sharing or data-mapping attribute clauses"}
}
}
},
},
["err_pp_invalid_poison"]={
["err_omp_ambiguous_conversion"]={
[d]="err_pp_invalid_poison",
[j]="err_omp_ambiguous_conversion",
[e]="can only poison identifier tokens",
[b]="ambiguous conversion from type %0 to an integral or unscoped enumeration type",
[f]="can only poison identifier tokens",
[c]="ambiguous conversion from type A to an integral or unscoped enumeration type",
[g]=k,
[e]=d,
[h]="can only poison identifier tokens",
[f]="ambiguous conversion from type (.*?) to an integral or unscoped enumeration type",
[b]=a,
[g]=a,
[c]=p,
[i]=n,
[j]={q,1236199783,r,s},
[h]={"568a833f68de",1394086519,"[OPENMP] Clause \'num_threads\'","[OPENMP] Clause \'num_threads\'\n\nllvm-svn: 203087"},
[i]={{H,461,"/// HandlePragmaPoison - Handle \\#pragma GCC poison.  PoisonTok 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);"}}
[k]={{m,16411,"ExprResult Sema::PerformOpenMPImplicitIntegerConversion(SourceLocation Loc, Expr *Op) {\n  // ...\n  class IntConvertDiagnoser : public ICEConvertDiagnoser {\n    // ...\n    SemaDiagnosticBuilder diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_omp_ambiguous_conversion) << T; }"}}
},
},
["err_pp_invalid_tok_in_arg_list"]={
["err_omp_append_args_with_varargs"]={
[d]="err_pp_invalid_tok_in_arg_list",
[j]={{nil,s,"err_omp_append_args_with_varargs"}},
[e]="invalid token in macro parameter list",
[b]={{nil,s,"\'append_args\' is not allowed with varargs functions"}},
[f]="invalid token in macro parameter list",
[c]={{nil,s,"\'append_args\' is not allowed with varargs functions"}},
[g]=k,
[e]=d,
[h]="invalid token in macro parameter list",
[f]="\'append_args\' is not allowed with varargs functions",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,s,n}},
[j]={q,1236199783,r,s},
[h]={ib,1616787805,lb,jb},
[i]={{z,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);"}}
[k]={{m,7462,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  if (NumAppendArgs) {\n   // ...\n    if (PTy->isVariadic()) {\n      Diag(FD->getLocation(), diag::err_omp_append_args_with_varargs) << SR;"}},
},
["err_pp_invalid_udl"]={
[d]="err_pp_invalid_udl",
[e]="%select{character|integer}0 literal with user-defined suffix cannot be used in preprocessor constant expression",
[f]={{nil,nil,{{"character","integer"}," literal with user-defined suffix cannot be used in preprocessor constant expression"}}},
[g]=k,
[h]="(?:character|integer) literal with user\\-defined suffix cannot be used in preprocessor constant expression",
[b]=a,
[c]=p,
[j]={"39570d00201c",1331196332,"Add support for cooked forms of user-defined-integer-literal and","Add support for cooked forms of user-defined-integer-literal and\nuser-defined-floating-literal. Support for raw forms of these literals\nto follow.\n\nllvm-svn: 152302"},
[i]={{Z,315,"/// 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    // Complain about, and drop, any ud-suffix.\n    if (Literal.hasUDSuffix())\n      PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*integer*/ 1;"},{Z,380,"/// 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::char_constant:        // \'x\'\n  case tok::wide_char_constant:    // L\'x\'\n  case tok::utf8_char_constant:    // u8\'x\'\n  case tok::utf16_char_constant:  // u\'x\'\n  case tok::utf32_char_constant: { // U\'x\'\n    // Complain about, and drop, any ud-suffix.\n    if (PeekTok.hasUDSuffix())\n      PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*character*/ 0;"}},
[l]={
[l]={
["clang/test/Parser/cxx11-user-defined-literals.cpp"]={"clang/test/Parser/cxx11-user-defined-literals.cpp:30:5: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:30:13: error: character literal with user-defined suffix cannot be used in preprocessor constant expression","clang/test/Parser/cxx11-user-defined-literals.cpp:36:5: error: integer literal with user-defined suffix cannot be used in preprocessor constant expression"}
[zb]={"clang/test/OpenMP/declare_variant_clauses_messages.cpp:100:6: error: \'append_args\' is not allowed with varargs functions"}
}
}
},
},
["err_pp_line_digit_sequence"]={
["err_omp_argument_type_isdeviceptr"]={
[d]="err_pp_line_digit_sequence",
[j]="err_omp_argument_type_isdeviceptr",
[e]="%select{#line|GNU line marker}0 directive requires a simple digit sequence",
[b]="expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'",
[f]={{nil,nil,{{"#line","GNU line marker"}," directive requires a simple digit sequence"}}},
[c]="expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'",
[g]=k,
[e]=d,
[h]="(?:\\#line|GNU line marker) directive requires a simple digit sequence",
[f]="expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'",
[b]=a,
[g]=a,
[c]=p,
[i]=n,
[j]={"d66f172ab1b6",1240079715,"more fun with line markers: the digit string is required to be interpreted","more fun with line markers: the digit string is required to be interpreted\nas decimal, even if it starts with 0.  Also, since things like 0x1 are\ncompletely illegal, don\'t even bother using numericliteralparser for them.\n\nllvm-svn: 69454"},
[h]={"70594e928259",1468430209,"[OpenMP] Initial implementation of parse+sema for OpenMP clause \'is_device_ptr\' of target","[OpenMP] Initial implementation of parse+sema for OpenMP clause \'is_device_ptr\' of target\n\nhttp://reviews.llvm.org/D22070\n\nllvm-svn: 275282"},
[i]={{z,1375,"/// GetLineValue - Convert a numeric token into an unsigned value, emitting\n/// Diagnostic DiagID if it is invalid, and returning the value in Val.\nstatic bool GetLineValue(Token &DigitTok, unsigned &Val, unsigned DiagID, Preprocessor &PP, bool IsGNULineDirective = false) {\n  // ...\n  for (unsigned i = 0; i != ActualLength; ++i) {\n    // ...\n    if (!isDigit(DigitTokBegin[i])) {\n      PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i), diag::err_pp_line_digit_sequence) << IsGNULineDirective;"}},
[k]={{m,23497,"OMPClause *Sema::ActOnOpenMPIsDevicePtrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    // item should be a pointer or array or reference to pointer or array\n    if (!Type.getNonReferenceType()->isPointerType() && !Type.getNonReferenceType()->isArrayType()) {\n      Diag(ELoc, diag::err_omp_argument_type_isdeviceptr) << 0 << RefExpr->getSourceRange();"}},
[l]={
[l]={
[jc]={"foo:49:5: error: GNU line marker directive requires a simple digit sequence","foo.c:4:8: error: #line directive requires a simple digit sequence","foo.c:5:9: error: #line directive requires a simple digit sequence"}
["clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp"]={"clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:35:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:38:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:41:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:56:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:65:41: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:65:43: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:68:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:198:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:201:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:247:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:250:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:253:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:268:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:271:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:280:41: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:280:43: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:283:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:177:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:180:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:183:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:210:41: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:210:43: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'","clang/test/OpenMP/target_simd_is_device_ptr_messages.cpp:213:39: error: expected pointer, array, reference to pointer, or reference to array in \'is_device_ptr clause\'"}
}
}
},
},
["err_pp_line_invalid_filename"]={
["err_omp_array_section_use"]={
[d]="err_pp_line_invalid_filename",
[j]="err_omp_array_section_use",
[e]="invalid filename for #line directive",
[b]="OpenMP array section is not allowed here",
[f]="invalid filename for #line directive",
[c]="OpenMP array section is not allowed here",
[g]=k,
[e]=d,
[h]="invalid filename for \\#line directive",
[f]="OpenMP array section is not allowed here",
[b]=a,
[g]=a,
[c]=p,
[i]=n,
[j]={q,1236199783,r,s},
[h]={"1a3320e4639c",1440512644,"[OPENMP 4.0] Initial support for array sections.","[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"},
[i]={{z,1436,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///   # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // ...\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod))\n  // ...\n  else if (StrTok.isNot(tok::string_literal)) {\n    Diag(StrTok, diag::err_pp_line_invalid_filename);"}},
[k]={{N,21639,"/// 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  // Expressions of unknown type.\n  case BuiltinType::OMPArraySection:\n    Diag(E->getBeginLoc(), diag::err_omp_array_section_use);"}},
[l]={
[l]={
[jc]={"clang/test/Preprocessor/line-directive.c:42:10: error: invalid filename for #line directive"}
["clang/test/OpenMP/taskwait_depend_messages.cpp"]={"clang/test/OpenMP/taskwait_depend_messages.cpp:56:39: error: OpenMP array section is not allowed here"}
}
}
},
},
["err_pp_line_requires_integer"]={
["err_omp_array_shaping_use"]={
[d]="err_pp_line_requires_integer",
[j]={{nil,o,"err_omp_array_shaping_use"}},
[e]="#line directive requires a positive integer argument",
[b]={{nil,o,"OpenMP array shaping operation is not allowed here"}},
[f]="#line directive requires a positive integer argument",
[c]={{nil,o,"OpenMP array shaping operation is not allowed here"}},
[g]=k,
[e]=d,
[h]="\\#line directive requires a positive integer argument",
[f]="OpenMP array shaping operation is not allowed here",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,o,n}},
[j]={q,1236199783,r,s},
[h]={I,1576908663,H,F},
[i]={{z,1411,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // ...\n  if (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer, *this))"}},
[k]={{N,21642,"/// 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  // Expressions of unknown type.\n  case BuiltinType::OMPArrayShaping:\n    return ExprError(Diag(E->getBeginLoc(), diag::err_omp_array_shaping_use));"}}
[l]={
[jc]={"clang/test/Preprocessor/line-directive.c:14:7: error: #line directive requires a positive integer argument"}
}
},
},
["err_pp_linemarker_invalid_filename"]={
["err_omp_at_least_one_motion_clause_required"]={
[d]="err_pp_linemarker_invalid_filename",
[j]="err_omp_at_least_one_motion_clause_required",
[e]="invalid filename for line marker directive",
[b]="expected at least one \'to\' clause or \'from\' clause specified to \'#pragma omp target update\'",
[f]="invalid filename for line marker directive",
[c]="expected at least one \'to\' clause or \'from\' clause specified to \'#pragma omp target update\'",
[g]=k,
[e]=d,
[h]="invalid filename for line marker directive",
[f]="expected at least one \'to\' clause or \'from\' clause specified to \'\\#pragma omp target update\'",
[b]=a,
[g]=a,
[c]=p,
[i]=n,
[j]={q,1236199783,r,s},
[h]={"686c70c3dc95",1464283850,"[OpenMP] Parsing and sema support for target update directive","[OpenMP] Parsing and sema support for target update directive\n\nSummary:\nThis patch is to add parsing and sema support for `target update` directive. Support for the `to` and `from` clauses will be added by a different patchThis patch also adds support for other clauses that are already implemented upstream and apply to `target update`, e.g. `device` and `if`.\n\nThis patch is based on the original post by Kelvin Li.\n\nReviewers: hfinkel, carlo.bertolli, kkwli0, arpith-jacob, ABataev\n\nSubscribers: caomhin, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D15944\n\nllvm-svn: 270878"},
[i]={{z,1452,"/// Handle a \\#line directive: C99 6.10.4.\n///\n/// The two acceptable forms are:\n/// \\verbatim\n///  # line digit-sequence\n///  # line digit-sequence \"s-char-sequence\"\n/// \\endverbatim\nvoid Preprocessor::HandleLineDirective() {\n  // ...\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n if (StrTok.is(tok::eod))\n  // ...\n  else if (StrTok.isNot(tok::string_literal)) {\n // ...\n  } else if (StrTok.hasUDSuffix()) {\n  // ...\n  } else {\n    // ...\n   if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{z,1587,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n///    # 42\n///    # 42 \"file\" (\'1\' | \'2\')?\n///    # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n  // ...\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n // string followed by eod.\n  if (StrTok.is(tok::eod)) {\n  // ...\n } else if (StrTok.isNot(tok::string_literal)) {\n    Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"},{z,1603,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n///    # 42\n///    # 42 \"file\" (\'1\' | \'2\')?\n///    # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n  // ...\n  // If the StrTok is \"eod\", then it wasn\'t present.  Otherwise, it must be a\n  // string followed by eod.\n  if (StrTok.is(tok::eod)) {\n  // ...\n  } else if (StrTok.isNot(tok::string_literal)) {\n  // ...\n  } else if (StrTok.hasUDSuffix()) {\n  // ...\n  } else {\n    // ...\n    if (Literal.Pascal) {\n      Diag(StrTok, diag::err_pp_linemarker_invalid_filename);"}},
[k]={{m,13322,"StmtResult Sema::ActOnOpenMPTargetUpdateDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc, Stmt *AStmt) {\n  // ...\n  if (!hasClauses(Clauses, OMPC_to, OMPC_from)) {\n    Diag(StartLoc, diag::err_omp_at_least_one_motion_clause_required);"}},
[l]={
[l]={
[jc]={"foo:44:6: error: invalid filename for line marker directive","foo:45:6: error: invalid filename for line marker directive"}
["clang/test/OpenMP/target_update_nowait_messages.cpp"]={"clang/test/OpenMP/target_update_nowait_messages.cpp:11:3: error: expected at least one \'to\' clause or \'from\' clause specified to \'#pragma omp target update\'"}
}
}
},
},
["err_pp_linemarker_invalid_flag"]={
["err_omp_atomic_capture_not_compound_statement"]={
[d]="err_pp_linemarker_invalid_flag",
[j]="err_omp_atomic_capture_not_compound_statement",
[e]="invalid flag line marker directive",
[b]={{nil,A,"the statement for \'atomic capture\' must be a compound statement of form \'{v = x; x binop= expr;}\', \'{x binop= expr; v = x;}\', \'{v = x; x = x binop expr;}\', \'{v = x; x = expr binop x;}\', \'{x = x binop expr; v = x;}\', \'{x = expr binop x; v = x;}\' or \'{v = x; x = expr;}\', \'{v = x; x++;}\', \'{v = x; ++x;}\', \'{++x; v = x;}\', \'{x++; v = x;}\', \'{v = x; x--;}\', \'{v = x; --x;}\', \'{--x; v = x;}\', \'{x--; v = x;}\' where x is an lvalue expression with scalar type"},{mb,nil,"the statement for \'atomic capture\' must be a compound statement of form \'{v = x; x binop= expr;}\', \'{x binop= expr; v = x;}\', \'{v = x; x = x binop expr;}\', \'{v = x; x = expr binop x;}\', \'{x = x binop expr; v = x;}\', \'{x = expr binop x; v = x;}\' or \'{v = x; x = expr;}\', \'{v = x; x++;}\', \'{v = x; ++x;}\', \'{++x; v = x;}\', \'{x++; v = x;}\', \'{v = x; x--;}\', \'{v = x; --x;}\', \'{--x; v = x;}\', \'{x--; v = x;}\' where x is an l-value expression with scalar type"}},
[f]="invalid flag line marker directive",
[c]={{nil,A,"the statement for \'atomic capture\' must be a compound statement of form \'{v = x; x binop= expr;}\', \'{x binop= expr; v = x;}\', \'{v = x; x = x binop expr;}\', \'{v = x; x = expr binop x;}\', \'{x = x binop expr; v = x;}\', \'{x = expr binop x; v = x;}\' or \'{v = x; x = expr;}\', \'{v = x; x++;}\', \'{v = x; ++x;}\', \'{++x; v = x;}\', \'{x++; v = x;}\', \'{v = x; x--;}\', \'{v = x; --x;}\', \'{--x; v = x;}\', \'{x--; v = x;}\' where x is an lvalue expression with scalar type"},{mb,nil,"the statement for \'atomic capture\' must be a compound statement of form \'{v = x; x binop= expr;}\', \'{x binop= expr; v = x;}\', \'{v = x; x = x binop expr;}\', \'{v = x; x = expr binop x;}\', \'{x = x binop expr; v = x;}\', \'{x = expr binop x; v = x;}\' or \'{v = x; x = expr;}\', \'{v = x; x++;}\', \'{v = x; ++x;}\', \'{++x; v = x;}\', \'{x++; v = x;}\', \'{v = x; x--;}\', \'{v = x; --x;}\', \'{--x; v = x;}\', \'{x--; v = x;}\' where x is an l-value expression with scalar type"}},
[g]=k,
[e]=d,
[h]="invalid flag line marker directive",
[f]="the statement for \'atomic capture\' must be a compound statement of form \'\\{v \\= x; x binop\\= expr;\\}\', \'\\{x binop\\= expr; v \\= x;\\}\', \'\\{v \\= x; x \\= x binop expr;\\}\', \'\\{v \\= x; x \\= expr binop x;\\}\', \'\\{x \\= x binop expr; v \\= x;\\}\', \'\\{x \\= expr binop x; v \\= x;\\}\' or \'\\{v \\= x; x \\= expr;\\}\', \'\\{v \\= x; x\\+\\+;\\}\', \'\\{v \\= x; \\+\\+x;\\}\', \'\\{\\+\\+x; v \\= x;\\}\', \'\\{x\\+\\+; v \\= x;\\}\', \'\\{v \\= x; x\\-\\-;\\}\', \'\\{v \\= x; \\-\\-x;\\}\', \'\\{\\-\\-x; v \\= x;\\}\', \'\\{x\\-\\-; v \\= x;\\}\' where x is an lvalue expression with scalar type",
[b]=a,
[g]=a,
[c]=p,
[i]=n,
[j]={q,1236199783,r,s},
[h]={"459dec0ca2a7",1406184417,"[OPENMP] Initial parsing and sema analysis for clause \'capture\' in \'atomic\' directive.","[OPENMP] Initial parsing and sema analysis for clause \'capture\' in \'atomic\' directive.\n\nllvm-svn: 213842"},
[i]={{z,1488,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{z,1496,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (FlagVal == 1) {\n    // ...\n   if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{z,1522,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (FlagVal == 1) {\n  // ...\n  } else if (FlagVal == 2) {\n    // ...\n   if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{z,1528,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  // We must have 3 if there are still flags.\n  if (FlagVal != 3) {\n   PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{z,1537,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP))"},{z,1542,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  // We must have 4 if there is yet another flag.\n  if (FlagVal != 4) {\n   PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"},{z,1553,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n // ...\n PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag);"}},
[k]={{m,12954,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // OpenMP [2.12.6, atomic Construct]\n // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n // occurrences of x must designate the same storage location.\n // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n // binop x. This requirement is satisfied if the operators in expr have\n // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  // ...\n  } else if (AtomicKind == OMPC_write) {\n  // ...\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n // ...\n } else if (AtomicKind == OMPC_capture) {\n   // ...\n   if (ErrorFound != NoError) {\n      Diag(ErrorLoc, diag::err_omp_atomic_capture_not_compound_statement) << ErrorRange;"}},
[l]={
[l]={
[jc]={"foo:46:14: error: invalid flag line marker directive","foo:47:12: error: invalid flag line marker directive","foo:48:14: error: invalid flag line marker directive"}
[nb]={"clang/test/OpenMP/atomic_messages.c:214:3: error: the statement for \'atomic capture\' must be a compound statement of form \'{v = x; x binop= expr;}\', \'{x binop= expr; v = x;}\', \'{v = x; x = x binop expr;}\', \'{v = x; x = expr binop x;}\', \'{x = x binop expr; v = x;}\', \'{x = expr binop x; v = x;}\' or \'{v = x; x = expr;}\', \'{v = x; x++;}\', \'{v = x; ++x;}\', \'{++x; v = x;}\', \'{x++; v = x;}\', \'{v = x; x--;}\', \'{v = x; --x;}\', \'{--x; v = x;}\', \'{x--; v = x;}\' where x is an lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:246:3: error: the statement for \'atomic capture\' must be a compound statement of form \'{v = x; x binop= expr;}\', \'{x binop= expr; v = x;}\', \'{v = x; x = x binop expr;}\', \'{v = x; x = expr binop x;}\', \'{x = x binop expr; v = x;}\', \'{x = expr binop x; v = x;}\' or \'{v = x; x = expr;}\', \'{v = x; x++;}\', \'{v = x; ++x;}\', \'{++x; v = x;}\', \'{x++; v = x;}\', \'{v = x; x--;}\', \'{v = x; --x;}\', \'{--x; v = x;}\', \'{x--; v = x;}\' where x is an lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:250:3: error: the statement for \'atomic capture\' must be a compound statement of form \'{v = x; x binop= expr;}\', \'{x binop= expr; v = x;}\', \'{v = x; x = x binop expr;}\', \'{v = x; x = expr binop x;}\', \'{x = x binop expr; v = x;}\', \'{x = expr binop x; v = x;}\' or \'{v = x; x = expr;}\', \'{v = x; x++;}\', \'{v = x; ++x;}\', \'{++x; v = x;}\', \'{x++; v = x;}\', \'{v = x; x--;}\', \'{v = x; --x;}\', \'{--x; v = x;}\', \'{x--; v = x;}\' where x is an lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:254:6: error: the statement for \'atomic capture\' must be a compound statement of form \'{v = x; x binop= expr;}\', \'{x binop= expr; v = x;}\', \'{v = x; x = x binop expr;}\', \'{v = x; x = expr binop x;}\', \'{x = x binop expr; v = x;}\', \'{x = expr binop x; v = x;}\' or \'{v = x; x = expr;}\', \'{v = x; x++;}\', \'{v = x; ++x;}\', \'{++x; v = x;}\', \'{x++; v = x;}\', \'{v = x; x--;}\', \'{v = x; --x;}\', \'{--x; v = x;}\', \'{x--; v = x;}\' where x is an lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:258:6: error: the statement for \'atomic capture\' must be a compound statement of form \'{v = x; x binop= expr;}\', \'{x binop= expr; v = x;}\', \'{v = x; x = x binop expr;}\', \'{v = x; x = expr binop x;}\', \'{x = x binop expr; v = x;}\', \'{x = expr binop x; v = x;}\' or \'{v = x; x = expr;}\', \'{v = x; x++;}\', \'{v = x; ++x;}\', \'{++x; v = x;}\', \'{x++; v = x;}\', \'{v = x; x--;}\', \'{v = x; --x;}\', \'{--x; v = x;}\', \'{x--; v = x;}\' where x is an lvalue expression with scalar type"}
}
}
},
},
["err_pp_linemarker_invalid_pop"]={
["err_omp_atomic_capture_not_expression_statement"]={
[d]="err_pp_linemarker_invalid_pop",
[j]="err_omp_atomic_capture_not_expression_statement",
[e]="invalid line marker flag \'2\': cannot pop empty include stack",
[b]={{nil,A,"the statement for \'atomic capture\' must be an expression statement of form \'v = ++x;\', \'v = --x;\', \'v = x++;\', \'v = x--;\', \'v = x binop= expr;\', \'v = x = x binop expr\' or \'v = x = expr binop x\', where x and v are both lvalue expressions with scalar type"},{mb,nil,"the statement for \'atomic capture\' must be an expression statement of form \'v = ++x;\', \'v = --x;\', \'v = x++;\', \'v = x--;\', \'v = x binop= expr;\', \'v = x = x binop expr\' or \'v = x = expr binop x\', where x and v are both l-value expressions with scalar type"}},
[f]="invalid line marker flag \'2\': cannot pop empty include stack",
[c]={{nil,A,"the statement for \'atomic capture\' must be an expression statement of form \'v = ++x;\', \'v = --x;\', \'v = x++;\', \'v = x--;\', \'v = x binop= expr;\', \'v = x = x binop expr\' or \'v = x = expr binop x\', where x and v are both lvalue expressions with scalar type"},{mb,nil,"the statement for \'atomic capture\' must be an expression statement of form \'v = ++x;\', \'v = --x;\', \'v = x++;\', \'v = x--;\', \'v = x binop= expr;\', \'v = x = x binop expr\' or \'v = x = expr binop x\', where x and v are both l-value expressions with scalar type"}},
[g]=k,
[e]=d,
[h]="invalid line marker flag \'2\'\\: cannot pop empty include stack",
[f]="the statement for \'atomic capture\' must be an expression statement of form \'v \\= \\+\\+x;\', \'v \\= \\-\\-x;\', \'v \\= x\\+\\+;\', \'v \\= x\\-\\-;\', \'v \\= x binop\\= expr;\', \'v \\= x \\= x binop expr\' or \'v \\= x \\= expr binop x\', where x and v are both lvalue expressions with scalar type",
[b]=a,
[g]=a,
[c]=p,
[i]=n,
[j]={q,1236199783,r,s},
[h]={"459dec0ca2a7",1406184417,"[OPENMP] Initial parsing and sema analysis for clause \'capture\' in \'atomic\' directive.","[OPENMP] Initial parsing and sema analysis for clause \'capture\' in \'atomic\' directive.\n\nllvm-svn: 213842"},
[i]={{z,1515,"/// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line\n/// marker directive.\nstatic bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, SrcMgr::CharacteristicKind &FileKind, Preprocessor &PP) {\n  // ...\n  if (FlagVal == 1) {\n  // ...\n  } else if (FlagVal == 2) {\n    // ...\n    if (IncLoc.isInvalid() || SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) {\n      PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop);"}},
[k]={{m,12773,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  // ...\n  } else if (AtomicKind == OMPC_write) {\n  // ...\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  // ...\n  } else if (AtomicKind == OMPC_capture) {\n    // ...\n    if (const auto *AtomicBody = dyn_cast<Expr>(Body)) {\n      // ...\n      if (AtomicBinOp && AtomicBinOp->getOpcode() == BO_Assign) {\n        // ...\n        if (Checker.checkStatement(Body, diag::err_omp_atomic_capture_not_expression_statement, diag::note_omp_atomic_update))"},{m,12791,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  // ...\n  } else if (AtomicKind == OMPC_write) {\n  // ...\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  // ...\n  } else if (AtomicKind == OMPC_capture) {\n    // ...\n    if (const auto *AtomicBody = dyn_cast<Expr>(Body)) {\n      // ...\n      if (ErrorFound != NoError) {\n        Diag(ErrorLoc, diag::err_omp_atomic_capture_not_expression_statement) << ErrorRange;"}},
[l]={
[l]={
["clang/test/Preprocessor/line-directive-system-headers.c"]={"foo:44:12: error: invalid line marker flag \'2\': cannot pop empty include stack","foo:44:12: error: invalid line marker flag \'2\': cannot pop empty include stack"}
[nb]={"clang/test/OpenMP/atomic_messages.c:218:3: error: the statement for \'atomic capture\' must be an expression statement of form \'v = ++x;\', \'v = --x;\', \'v = x++;\', \'v = x--;\', \'v = x binop= expr;\', \'v = x = x binop expr\' or \'v = x = expr binop x\', where x and v are both lvalue expressions with scalar type","clang/test/OpenMP/atomic_messages.c:222:7: error: the statement for \'atomic capture\' must be an expression statement of form \'v = ++x;\', \'v = --x;\', \'v = x++;\', \'v = x--;\', \'v = x binop= expr;\', \'v = x = x binop expr\' or \'v = x = expr binop x\', where x and v are both lvalue expressions with scalar type","clang/test/OpenMP/atomic_messages.c:226:9: error: the statement for \'atomic capture\' must be an expression statement of form \'v = ++x;\', \'v = --x;\', \'v = x++;\', \'v = x--;\', \'v = x binop= expr;\', \'v = x = x binop expr\' or \'v = x = expr binop x\', where x and v are both lvalue expressions with scalar type","clang/test/OpenMP/atomic_messages.c:230:13: error: the statement for \'atomic capture\' must be an expression statement of form \'v = ++x;\', \'v = --x;\', \'v = x++;\', \'v = x--;\', \'v = x binop= expr;\', \'v = x = x binop expr\' or \'v = x = expr binop x\', where x and v are both lvalue expressions with scalar type","clang/test/OpenMP/atomic_messages.c:234:16: error: the statement for \'atomic capture\' must be an expression statement of form \'v = ++x;\', \'v = --x;\', \'v = x++;\', \'v = x--;\', \'v = x binop= expr;\', \'v = x = x binop expr\' or \'v = x = expr binop x\', where x and v are both lvalue expressions with scalar type","clang/test/OpenMP/atomic_messages.c:238:9: error: the statement for \'atomic capture\' must be an expression statement of form \'v = ++x;\', \'v = --x;\', \'v = x++;\', \'v = x--;\', \'v = x binop= expr;\', \'v = x = x binop expr\' or \'v = x = expr binop x\', where x and v are both lvalue expressions with scalar type","clang/test/OpenMP/atomic_messages.c:242:9: error: the statement for \'atomic capture\' must be an expression statement of form \'v = ++x;\', \'v = --x;\', \'v = x++;\', \'v = x--;\', \'v = x binop= expr;\', \'v = x = x binop expr\' or \'v = x = expr binop x\', where x and v are both lvalue expressions with scalar type","clang/test/OpenMP/atomic_messages.c:264:20: error: the statement for \'atomic capture\' must be an expression statement of form \'v = ++x;\', \'v = --x;\', \'v = x++;\', \'v = x--;\', \'v = x binop= expr;\', \'v = x = x binop expr\' or \'v = x = expr binop x\', where x and v are both lvalue expressions with scalar type","clang/test/OpenMP/atomic_messages.c:268:13: error: the statement for \'atomic capture\' must be an expression statement of form \'v = ++x;\', \'v = --x;\', \'v = x++;\', \'v = x--;\', \'v = x binop= expr;\', \'v = x = x binop expr\' or \'v = x = expr binop x\', where x and v are both lvalue expressions with scalar type","clang/test/OpenMP/atomic_messages.c:272:13: error: the statement for \'atomic capture\' must be an expression statement of form \'v = ++x;\', \'v = --x;\', \'v = x++;\', \'v = x--;\', \'v = x binop= expr;\', \'v = x = x binop expr\' or \'v = x = expr binop x\', where x and v are both lvalue expressions with scalar type"}
}
}
},
},
["err_pp_linemarker_requires_integer"]={
["err_omp_atomic_compare"]={
[d]="err_pp_linemarker_requires_integer",
[j]={{nil,E,"err_omp_atomic_compare"}},
[e]="line marker directive requires a positive integer argument",
[b]={{nil,E,"the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'."}},
[f]="line marker directive requires a positive integer argument",
[c]={{nil,E,"the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'."}},
[g]=k,
[e]=d,
[h]="line marker directive requires a positive integer argument",
[f]="the statement for \'atomic compare\' must be a compound statement of form \'\\{x \\= expr ordop x \\? expr \\: x;\\}\', \'\\{x \\= x ordop expr\\? expr \\: x;\\}\', \'\\{x \\= x \\=\\= e \\? d \\: x;\\}\', \'\\{x \\= e \\=\\= x \\? d \\: x;\\}\', or \'if\\(expr ordop x\\) \\{x \\= expr;\\}\', \'if\\(x ordop expr\\) \\{x \\= expr;\\}\', \'if\\(x \\=\\= e\\) \\{x \\= d;\\}\', \'if\\(e \\=\\= x\\) \\{x \\= d;\\}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'\\<\' or \'\\>\'\\.",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,E,n}},
[j]={q,1236199783,r,s},
[h]={ib,1616787805,lb,jb},
[i]={{z,1569,"/// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is\n/// one of the following forms:\n///\n///    # 42\n///    # 42 \"file\" (\'1\' | \'2\')?\n///    # 42 \"file\" (\'1\' | \'2\')? \'3\' \'4\'?\n///\nvoid Preprocessor::HandleDigitDirective(Token &DigitTok) {\n  // ...\n  if (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer, *this, true))"}}
[k]={{m,12986,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  // ...\n  } else if (AtomicKind == OMPC_write) {\n  // ...\n  } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n  // ...\n  } else if (AtomicKind == OMPC_capture) {\n  // ...\n  } else if (AtomicKind == OMPC_compare) {\n    if (IsCompareCapture) {\n    // ...\n    } else {\n      // ...\n      if (!Checker.checkStmt(Body, ErrorInfo)) {\n       Diag(ErrorInfo.ErrorLoc, diag::err_omp_atomic_compare) << ErrorInfo.ErrorRange;"}},
},
["err_pp_macro_not_identifier"]={
[d]="err_pp_macro_not_identifier",
[e]="macro name must be an identifier",
[f]="macro name must be an identifier",
[g]=k,
[h]="macro name must be an identifier",
[b]=a,
[c]=p,
[j]={q,1236199783,r,s},
[i]={{z,329,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // ...\n  if (!II)\n   return Diag(MacroNameTok, diag::err_pp_macro_not_identifier);"}},
[l]={
[l]={
["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:9:8: error: macro name must be an identifier","clang/test/Preprocessor/ifdef-recover.c:31:10: error: macro name must be an identifier"}
[nb]={"clang/test/OpenMP/atomic_messages.c:411:3: error: the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:415:3: error: the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:422:7: error: the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:426:5: error: the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:430:9: error: the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:434:9: error: the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:438:11: error: the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:442:11: error: the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:446:21: error: the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:451:9: error: the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:458:11: error: the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:465:11: error: the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:471:3: error: the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:483:7: error: the statement for \'atomic compare\' must be a compound statement of form \'{x = expr ordop x ? expr : x;}\', \'{x = x ordop expr? expr : x;}\', \'{x = x == e ? d : x;}\', \'{x = e == x ? d : x;}\', or \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', \'if(e == x) {x = d;}\' where \'x\' is an lvalue expression with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'."}
}
}
},
},
["err_pp_malformed_ident"]={
["err_omp_atomic_compare_capture"]={
[d]="err_pp_malformed_ident",
[j]={{nil,E,"err_omp_atomic_compare_capture"}},
[e]="invalid #ident directive",
[b]={{nil,E,"the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'."}},
[f]="invalid #ident directive",
[c]={{nil,E,"the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'."}},
[g]=k,
[e]=d,
[h]="invalid \\#ident directive",
[f]="the statement for \'atomic compare capture\' must be a compound statement of form \'\\{v \\= x; cond\\-up\\-stmt\\}\', \'\'\\{cond\\-up\\-stmt v \\= x;\\}\', \'\\{if\\(x \\=\\= e\\) \\{x \\= d;\\} else \\{v \\= x;\\}\\}\', \'\\{r \\= x \\=\\= e; if\\(r\\) \\{x \\= d;\\}\\}\', or \'\\{r \\= x \\=\\= e; if\\(r\\) \\{x \\= d;\\} else \\{v \\= x;\\}\\}\', where \'cond\\-update\\-stmt\' can have one of the following forms\\: \'if\\(expr ordop x\\) \\{x \\= expr;\\}\', \'if\\(x ordop expr\\) \\{x \\= expr;\\}\', \'if\\(x \\=\\= e\\) \\{x \\= d;\\}\', or \'if\\(e \\=\\= x\\) \\{x \\= d;\\}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'\\<\' or \'\\>\'\\.",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,E,n}},
[j]={q,1236199783,r,s},
[h]={ib,1616787805,lb,jb},
[i]={{z,1674,"/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.\n///\nvoid Preprocessor::HandleIdentSCCSDirective(Token &Tok) {\n  // ...\n  // If the token kind isn\'t a string, it\'s a malformed directive.\if (StrTok.isNot(tok::string_literal) && StrTok.isNot(tok::wide_string_literal)) {\n    Diag(StrTok, diag::err_pp_malformed_ident);"}}
[k]={{m,12966,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n // * Neither of v and expr (as applicable) may access the storage location\n // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n // designated by v.\n // * expr is an expression with scalar type.\n // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n // * binop, binop=, ++, and -- are not overloaded operators.\n // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n // * The expression expr binop x must be numerically equivalent to (expr)\n // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  // ...\n  } else if (AtomicKind == OMPC_write) {\n // ...\n } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n // ...\n } else if (AtomicKind == OMPC_capture) {\n // ...\n } else if (AtomicKind == OMPC_compare) {\n    if (IsCompareCapture) {\n     // ...\n     if (!Checker.checkStmt(Body, ErrorInfo)) {\n       Diag(ErrorInfo.ErrorLoc, diag::err_omp_atomic_compare_capture) << ErrorInfo.ErrorRange;"}},
},
["err_pp_missing_lparen_in_vaopt_use"]={
[d]={{nil,B,"err_pp_missing_lparen_in_vaopt_use"}},
[e]={{nil,B,"missing \'(\' following __VA_OPT__"}},
[f]={{nil,B,"missing \'(\' following __VA_OPT__"}},
[g]=k,
[h]="missing \'\\(\' following __VA_OPT__",
[b]=a,
[c]={{nil,B,p}},
[j]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)\n\nThis patch implements an extension to the preprocessor:\n\n__VA_OPT__(contents) --> which expands into its contents if variadic arguments are supplied to the parent macro, or behaves as an empty token if none.\n\n  - Currently this feature is only enabled for C++2a (this could be enabled, with some careful tweaks, for other dialects with the appropriate extension or compatibility warnings)\n\n  - The patch was reviewed here: https://reviews.llvm.org/D35782 and asides from the above (and moving some of the definition and expansion recognition logic into the corresponding state machines), I believe I incorporated all of Richard\'s suggestions.\n\nA few technicalities (most of which were clarified through private correspondence between rsmith, hubert and thomas) are worth mentioning.  Given:\n\n   #define F(a,...) a #__VA_OPT__(a ## a) a ## __VA_OPT__(__VA_ARGS__)\n\n   - The call F(,) Does not supply any tokens for the variadic arguments and hence VA_OPT behaves as a placeholder.\n   - When expanding VA_OPT (for e.g. F(,1) token pasting occurs eagerly within its contents if the contents need to be stringified.\n   - A hash or a hashhash prior to VA_OPT does not inhibit expansion of arguments if they are the first token within VA_OPT.\n   - When a variadic argument is supplied, argument substitution occurs within the contents as does stringification - and these resulting tokens are inserted back into the macro expansions token stream just prior to the entire stream being rescanned and concatenated.\n\nSee wg21.link/P0306 for further details on the feature.\n\n\nAcknowledgment: This patch would have been poorer if not for Richard Smith\'s usual thoughtful analysis and feedback.\nllvm-svn: 315840"},
[i]={{z,2916,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  // ...\n  } else {\n   // ...\n   while (Tok.isNot(tok::eod)) {\n     // ...\n     if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n       // ...\n       if (VAOCtx.isVAOptToken(Tok)) {\n         // ...\n         if (Tok.isNot(tok::l_paren)) {\n           Diag(Tok, diag::err_pp_missing_lparen_in_vaopt_use);"}},
[l]={
[l]={
["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:6:29: error: missing \'(\' following __VA_OPT__"}
[nb]={"clang/test/OpenMP/atomic_messages.c:497:15: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:501:15: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:509:5: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:515:7: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:520:7: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:526:9: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:532:9: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:538:3: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:546:10: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:553:10: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:563:5: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:571:7: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:579:9: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:584:3: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:588:3: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:592:5: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:596:23: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:600:17: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:604:28: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:608:24: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:614:12: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:622:11: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:626:11: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:630:40: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:638:12: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:646:42: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:650:44: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:654:46: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:658:7: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:662:30: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:666:9: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:670:32: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:674:12: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'.","clang/test/OpenMP/atomic_messages.c:679:5: error: the statement for \'atomic compare capture\' must be a compound statement of form \'{v = x; cond-up-stmt}\', \'\'{cond-up-stmt v = x;}\', \'{if(x == e) {x = d;} else {v = x;}}\', \'{r = x == e; if(r) {x = d;}}\', or \'{r = x == e; if(r) {x = d;} else {v = x;}}\', where \'cond-update-stmt\' can have one of the following forms: \'if(expr ordop x) {x = expr;}\', \'if(x ordop expr) {x = expr;}\', \'if(x == e) {x = d;}\', or \'if(e == x) {x = d;}\' where \'x\', \'r\', and \'v\' are lvalue expressions with scalar type, \'expr\', \'e\', and \'d\' are expressions with scalar type, and \'ordop\' is one of \'<\' or \'>\'."}
}
}
},
},
["err_pp_missing_macro_name"]={
["err_omp_atomic_incompatible_mem_order_clause"]={
[d]="err_pp_missing_macro_name",
[j]={{nil,o,"err_omp_atomic_incompatible_mem_order_clause"}},
[e]="macro name missing",
[b]={{nil,o,"directive \'#pragma omp atomic%select{ %0|}1\' cannot be used with \'%2\' clause"}},
[f]="macro name missing",
[c]={{nil,o,{"directive \'#pragma omp atomic",{" A",a},"\' cannot be used with \'C\' clause"}}},
[g]=k,
[e]=d,
[h]="macro name missing",
[f]="directive \'\\#pragma omp atomic(?: (.*?)|)\' cannot be used with \'(.*?)\' clause",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,o,n}},
[j]={q,1236199783,r,s},
[h]={"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"},
[i]={{z,325,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // Missing macro name?\n  if (MacroNameTok.is(tok::eod))\n    return Diag(MacroNameTok, diag::err_pp_missing_macro_name);"}},
[k]={{m,12555,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // OpenMP 5.0, 2.17.7 atomic Construct, Restrictions\n  // If atomic-clause is read then memory-order-clause must not be acq_rel or\n  // release.\n  // If atomic-clause is write then memory-order-clause must not be acq_rel or\n  // acquire.\n  // If atomic-clause is update or not present then memory-order-clause must not\n  // be acq_rel or acquire.\n  if ((AtomicKind == OMPC_read && (MemOrderKind == OMPC_acq_rel || MemOrderKind == OMPC_release)) || ((AtomicKind == OMPC_write || AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) && (MemOrderKind == OMPC_acq_rel || MemOrderKind == OMPC_acquire))) {\n    // ...\n    Diag(Loc, diag::err_omp_atomic_incompatible_mem_order_clause) << getOpenMPClauseName(AtomicKind) << (AtomicKind == OMPC_unknown ? 1 : 0) << getOpenMPClauseName(MemOrderKind);"}},
[l]={
[l]={
["clang/test/Preprocessor/ifdef-recover.c"]={"clang/test/Preprocessor/ifdef-recover.c:5:7: error: macro name missing","clang/test/Preprocessor/ifdef-recover.c:13:12: error: macro name missing","clang/test/Preprocessor/ifdef-recover.c:25:9: error: macro name missing"}
["clang/test/OpenMP/atomic_messages.cpp"]={"clang/test/OpenMP/atomic_messages.cpp:734:1: error: directive \'#pragma omp atomic\' cannot be used with \'acq_rel\' clause","clang/test/OpenMP/atomic_messages.cpp:739:20: error: directive \'#pragma omp atomic read\' cannot be used with \'acq_rel\' clause","clang/test/OpenMP/atomic_messages.cpp:743:20: error: directive \'#pragma omp atomic update\' cannot be used with \'acq_rel\' clause","clang/test/OpenMP/atomic_messages.cpp:755:28: error: directive \'#pragma omp atomic write\' cannot be used with \'acq_rel\' clause","clang/test/OpenMP/atomic_messages.cpp:764:20: error: directive \'#pragma omp atomic update\' cannot be used with \'acq_rel\' clause","clang/test/OpenMP/atomic_messages.cpp:776:1: error: directive \'#pragma omp atomic\' cannot be used with \'acquire\' clause","clang/test/OpenMP/atomic_messages.cpp:781:1: error: directive \'#pragma omp atomic\' cannot be used with \'acquire\' clause","clang/test/OpenMP/atomic_messages.cpp:785:20: error: directive \'#pragma omp atomic update\' cannot be used with \'acquire\' clause","clang/test/OpenMP/atomic_messages.cpp:797:20: error: directive \'#pragma omp atomic write\' cannot be used with \'acquire\' clause","clang/test/OpenMP/atomic_messages.cpp:806:20: error: directive \'#pragma omp atomic update\' cannot be used with \'acquire\' clause","clang/test/OpenMP/atomic_messages.cpp:839:20: error: directive \'#pragma omp atomic read\' cannot be used with \'release\' clause","clang/test/OpenMP/atomic_messages.cpp:739:20: error: directive \'#pragma omp atomic read\' cannot be used with \'acq_rel\' clause","clang/test/OpenMP/atomic_messages.cpp:781:1: error: directive \'#pragma omp atomic\' cannot be used with \'acquire\' clause"}
}
}
},
},
["err_pp_missing_rparen_in_macro_def"]={
["err_omp_atomic_not_expression_statement"]={
[d]="err_pp_missing_rparen_in_macro_def",
[j]="err_omp_atomic_not_expression_statement",
[e]="missing \')\' in macro parameter list",
[b]={{nil,A,"the statement for \'atomic\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an lvalue expression with scalar type"},{mb,nil,"the statement for \'atomic\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an l-value expression with scalar type"}},
[f]="missing \')\' in macro parameter list",
[c]={{nil,A,"the statement for \'atomic\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an lvalue expression with scalar type"},{mb,nil,"the statement for \'atomic\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an l-value expression with scalar type"}},
[g]=k,
[e]=d,
[h]="missing \'\\)\' in macro parameter list",
[f]="the statement for \'atomic\' must be an expression statement of form \'\\+\\+x;\', \'\\-\\-x;\', \'x\\+\\+;\', \'x\\-\\-;\', \'x binop\\= expr;\', \'x \\= x binop expr\' or \'x \\= expr binop x\', where x is an lvalue expression with scalar type",
[b]=a,
[g]=a,
[c]=p,
[i]=n,
[j]={q,1236199783,r,s},
[h]={"1d160b1945c2",1426249651,"[OPENMP] Additional sema analysis for \'omp atomic[ update]\'.","[OPENMP] Additional sema analysis for \'omp atomic[ update]\'.\nAdds additional semantic analysis + generation of helper expressions for proper codegen.\n\nllvm-svn: 232164"},
[i]={{z,2690,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    case tok::ellipsis: // #define X(... -> C99 varargs\n      // ...\n      if (Tok.isNot(tok::r_paren)) {\n        Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{z,2699,"/// 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::eod: // #define X(\n      Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"},{z,2740,"/// ReadMacroParameterList - The ( starting a parameter list of a macro\n/// definition has just been read.  Lex the rest of the parameters and the\n/// closing ), updating MI with what we learn.  Return true if an error occurs\n/// parsing the param list.\nbool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    default:\n      // ...\n      case tok::ellipsis: // #define X(A... -> GCC extension\n        // ...\n        if (Tok.isNot(tok::r_paren)) {\n          Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);"}}
[k]={{m,12738,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\n // OpenMP [2.12.6, atomic Construct]\n // In the next expressions:\n // * x and v (as applicable) are both l-value expressions with scalar type.\n // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n // designated by x.\n // * Neither of x and expr (as applicable) may access the storage location\n // designated by v.\n  // * expr is an expression with scalar type.\n // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n // precedence greater than binop, or by using parentheses around expr or\n // subexpressions of expr.\n // * The expression expr binop x must be numerically equivalent to (expr)\n // binop x. This requirement is satisfied if the operators in expr have\n // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n // that x is evaluated is unspecified.\n if (AtomicKind == OMPC_read) {\n // ...\n } else if (AtomicKind == OMPC_write) {\n // ...\n } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n   // ...\n   if (Checker.checkStatement(Body, (AtomicKind == OMPC_update) ? diag::err_omp_atomic_update_not_expression_statement : diag::err_omp_atomic_not_expression_statement, diag::note_omp_atomic_update))"}},
},
["err_pp_module_begin_no_module_map"]={
[d]={{nil,n,"err_pp_module_begin_no_module_map"}},
[e]={{nil,n,"no module map available for module %0"}},
[f]={{nil,n,"no module map available for module A"}},
[g]=k,
[h]="no module map available for module (.*?)",
[b]=a,
[c]={{nil,n,p}},
[j]={Fb,1493857794,Gb,Hb},
[i]={{H,1758,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n   // ...\n   if (!M) {\n     PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_no_module_map) << Current;"}}
},
["err_pp_module_begin_no_submodule"]={
[d]={{nil,n,"err_pp_module_begin_no_submodule"}},
[e]={{nil,n,"submodule %0.%1 not declared in module map"}},
[f]={{nil,n,"submodule A.B not declared in module map"}},
[g]=k,
[h]="submodule (.*?)\\.(.*?) not declared in module map",
[b]=a,
[c]={{nil,n,p}},
[j]={Fb,1493857794,Gb,Hb},
[i]={{H,1764,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n   // ...\n   for (unsigned I = 1; I != ModuleName.size(); ++I) {\n     // ...\n     if (!NewM) {\n       PP.Diag(ModuleName[I].second, diag::err_pp_module_begin_no_submodule) << M->getFullModuleName() << ModuleName[I].first;"}}
},
["err_pp_module_begin_without_module_end"]={
[d]={{nil,n,"err_pp_module_begin_without_module_end"}},
[e]={{nil,n,"no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}},
[f]={{nil,n,"no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}},
[g]=k,
[h]="no matching \'\\#pragma clang module end\' for this \'\\#pragma clang module begin\'",
[b]=a,
[c]={{nil,n,p}},
[j]={Fb,1493857794,Gb,Hb},
[i]={{Db,353,"/// 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 if ((LeavingSubmodule || IncludeMacroStack.empty()) && !BuildingSubmoduleStack.empty() && BuildingSubmoduleStack.back().IsPragma) {\n    Diag(BuildingSubmoduleStack.back().ImportLoc, diag::err_pp_module_begin_without_module_end);"}},
[l]={
[l]={
["clang/test/Preprocessor/pragma_module.c"]={"clang/test/Preprocessor/pragma_module.c:52:22: error: no matching \'#pragma clang module end\' for this \'#pragma clang module begin\'"}
[nb]={"clang/test/OpenMP/atomic_messages.c:21:3: error: the statement for \'atomic\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:29:3: error: the statement for \'atomic\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:128:3: error: the statement for \'atomic\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:132:7: error: the statement for \'atomic\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:148:9: error: the statement for \'atomic\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:152:9: error: the statement for \'atomic\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an lvalue expression with scalar type"}
}
}
},
},
["err_pp_module_begin_wrong_module"]={
["err_omp_atomic_read_not_expression_statement"]={
[d]={{nil,n,"err_pp_module_begin_wrong_module"}},
[j]="err_omp_atomic_read_not_expression_statement",
[e]={{nil,n,"must specify \'-fmodule-name=%0\' to enter %select{|submodule of }1this module%select{ (current module is %3)|}2"}},
[b]="the statement for \'atomic read\' must be an expression statement of form \'v = x;\', where v and x are both lvalue expressions with scalar type",
[f]={{nil,n,{"must specify \'-fmodule-name=A\' to enter ",{a,"submodule of "},"this module",{" (current module is D)",a}}}},
[c]="the statement for \'atomic read\' must be an expression statement of form \'v = x;\', where v and x are both lvalue expressions with scalar type",
[g]=k,
[e]=d,
[h]="must specify \'\\-fmodule\\-name\\=(.*?)\' to enter (?:|submodule of )this module(?: \\(current module is (.*?)\\)|)",
[f]="the statement for \'atomic read\' must be an expression statement of form \'v \\= x;\', where v and x are both lvalue expressions with scalar type",
[b]=a,
[g]=a,
[c]={{nil,n,p}},
[i]=n,
[j]={Fb,1493857794,Gb,Hb},
[h]={"f98b00c33e83",1406082441,"[OPENMP] Initial parsing and sema analysis for \'read\' clause in \'atomic\' directive.","[OPENMP] Initial parsing and sema analysis for \'read\' clause in \'atomic\' directive.\n\nllvm-svn: 213717"},
[i]={{H,1746,"/// Handle the clang \\#pragma module begin extension. The syntax is:\n/// \\code\n///  #pragma clang module begin some.module.name\n///  ...\n///  #pragma clang module end\n/// \\endcode\nstruct PragmaModuleBeginHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n   // ...\n   if (ModuleName.front().first->getName() != Current) {\n     PP.Diag(ModuleName.front().second, diag::err_pp_module_begin_wrong_module) << ModuleName.front().first << (ModuleName.size() > 1) << Current.empty() << Current;"}}
[k]={{m,12654,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\n // OpenMP [2.12.6, atomic Construct]\n // In the next expressions:\n // * x and v (as applicable) are both l-value expressions with scalar type.\n // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n // designated by x.\n // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n // * expr is an expression with scalar type.\n // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n // precedence greater than binop, or by using parentheses around expr or\n // subexpressions of expr.\n // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n    // ...\n    if (ErrorFound != NoError) {\n      Diag(ErrorLoc, diag::err_omp_atomic_read_not_expression_statement) << ErrorRange;"}},
},
["err_pp_module_build_missing_end"]={
[d]={{nil,n,"err_pp_module_build_missing_end"}},
[e]={{nil,n,"no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"}},
[f]={{nil,n,"no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"}},
[g]=k,
[h]="no matching \'\\#pragma clang module endbuild\' for this \'\\#pragma clang module build\'",
[b]=a,
[c]={{nil,n,p}},
[j]={"5d2ed489870c",1497036152,"Add #pragma clang module build/endbuild pragmas for performing a module build","Add #pragma clang module build/endbuild pragmas for performing a module build\nas part of a compilation.\n\nThis is intended for two purposes:\n\n1) Writing self-contained test cases for modules: we can now write a single\nsource file test that builds some number of module files on the side and\nimports them.\n\n2) Debugging / test case reduction. A single-source testcase is much more\namenable to reduction, compared to a VFS tarball or .pcm files.\n\nllvm-svn: 305101"},
[i]={{H,841,"void Preprocessor::HandlePragmaModuleBuild(Token &Tok) {\n  // ...\n  while (true) {\n    // ...\n    if (Tok.is(tok::eof)) {\n      Diag(Loc, diag::err_pp_module_build_missing_end);"}},
[l]={
[l]={
["clang/test/Modules/preprocess-build.cpp"]={"clang/test/Modules/preprocess-build.cpp:35:22: error: no matching \'#pragma clang module endbuild\' for this \'#pragma clang module build\'"}
[nb]={"clang/test/OpenMP/atomic_messages.c:48:3: error: the statement for \'atomic read\' must be an expression statement of form \'v = x;\', where v and x are both lvalue expressions with scalar type","clang/test/OpenMP/atomic_messages.c:52:3: error: the statement for \'atomic read\' must be an expression statement of form \'v = x;\', where v and x are both lvalue expressions with scalar type","clang/test/OpenMP/atomic_messages.c:56:5: error: the statement for \'atomic read\' must be an expression statement of form \'v = x;\', where v and x are both lvalue expressions with scalar type","clang/test/OpenMP/atomic_messages.c:60:5: error: the statement for \'atomic read\' must be an expression statement of form \'v = x;\', where v and x are both lvalue expressions with scalar type","clang/test/OpenMP/atomic_messages.c:76:5: error: the statement for \'atomic read\' must be an expression statement of form \'v = x;\', where v and x are both lvalue expressions with scalar type"}
}
}
},
},
["err_pp_module_end_without_module_begin"]={
["err_omp_atomic_several_clauses"]={
[d]={{nil,n,"err_pp_module_end_without_module_begin"}},
[j]="err_omp_atomic_several_clauses",
[e]={{nil,n,"no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"}},
[b]={{nil,s,"directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause"},{r,nil,"directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\' or \'capture\' clause"}},
[f]={{nil,n,"no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"}},
[c]={{nil,s,"directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause"},{r,nil,"directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\' or \'capture\' clause"}},
[g]=k,
[e]=d,
[h]="no matching \'\\#pragma clang module begin\' for this \'\\#pragma clang module end\'",
[f]="directive \'\\#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause",
[b]=a,
[g]=a,
[c]={{nil,n,p}},
[i]=n,
[j]={Fb,1493857794,Gb,Hb},
[h]={"dea4761c06f9",1406101619,"[OPENMP] Initial parsing an sema analysis for \'write\' clause of \'atomic\' directive.","[OPENMP] Initial parsing an sema analysis for \'write\' clause of \'atomic\' directive.\n\nllvm-svn: 213728"},
[i]={{H,1802,"/// Handle the clang \\#pragma module end extension.\nstruct PragmaModuleEndHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (M)\n   // ...\n   else\n     PP.Diag(Loc, diag::err_pp_module_end_without_module_begin);"}},
[k]={{m,12494,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  for (const OMPClause *C : Clauses) {\n    // ...\n    case OMPC_capture:\n    case OMPC_compare: {\n      if (AtomicKind != OMPC_unknown && MutexClauseEncountered) {\n        Diag(C->getBeginLoc(), diag::err_omp_atomic_several_clauses) << SourceRange(C->getBeginLoc(), C->getEndLoc());"},{m,12502,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  for (const OMPClause *C : Clauses) {\n    // ...\n    case OMPC_capture:\n    case OMPC_compare: {\n      if (AtomicKind != OMPC_unknown && MutexClauseEncountered) {\n     // ...\n     } else {\n        // ...\n       if (!EncounteredAtomicKinds.insert(C->getClauseKind()).second) {\n          Diag(C->getBeginLoc(), diag::err_omp_atomic_several_clauses) << SourceRange(C->getBeginLoc(), C->getEndLoc());"}},
[l]={
[l]={
["clang/test/Modules/preprocess-unavailable.cpp"]={"clang/test/Modules/preprocess-unavailable.cpp:12:22: error: no matching \'#pragma clang module begin\' for this \'#pragma clang module end\'"}
["clang/test/OpenMP/atomic_messages.cpp"]={"clang/test/OpenMP/atomic_messages.cpp:903:25: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:907:26: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:911:27: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:915:28: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:920:26: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:924:25: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:934:25: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:938:26: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:942:26: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:946:26: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:951:26: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:955:25: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:903:25: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:907:26: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:911:27: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:915:28: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:920:26: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause","clang/test/OpenMP/atomic_messages.cpp:924:25: error: directive \'#pragma omp atomic\' cannot contain more than one \'read\', \'write\', \'update\', \'capture\', or \'compare\' clause"}
}
}
},
},
["err_pp_nested_paren"]={
["err_omp_atomic_update_not_expression_statement"]={
[d]="err_pp_nested_paren",
[j]="err_omp_atomic_update_not_expression_statement",
[e]="nested parentheses not permitted in %0",
[b]={{nil,A,"the statement for \'atomic update\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an lvalue expression with scalar type"},{mb,nil,"the statement for \'atomic update\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an l-value expression with scalar type"}},
[f]="nested parentheses not permitted in A",
[c]={{nil,A,"the statement for \'atomic update\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an lvalue expression with scalar type"},{mb,nil,"the statement for \'atomic update\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an l-value expression with scalar type"}},
[g]=k,
[e]=d,
[h]="nested parentheses not permitted in (.*?)",
[f]="the statement for \'atomic update\' must be an expression statement of form \'\\+\\+x;\', \'\\-\\-x;\', \'x\\+\\+;\', \'x\\-\\-;\', \'x binop\\= expr;\', \'x \\= x binop expr\' or \'x \\= expr binop x\', where x is an lvalue expression with scalar type",
[b]=a,
[g]=a,
[c]=p,
[i]=n,
[j]={"50b6ceff1f06",1459845407,"Consolidate and improve the handling of built-in feature-like macros","Consolidate and improve the handling of built-in feature-like macros\n\nSummary:\nThe parsing logic has been separated out from the macro implementation logic, leading to a number of improvements:\n\n* Gracefully handle unexpected/invalid tokens, too few, too many and nested parameters\n* Provide consistent behaviour between all built-in feature-like macros\n* Simplify the implementation of macro logic\n* Fix __is_identifier to correctly return \'0\' for non-identifiers\n\nReviewers: doug.gregor, rsmith\n\nSubscribers: rsmith, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D17149\n\nllvm-svn: 265381"},
[h]={"67a4f22f12b0",1406111133,"[OPENMP] Initial parsing and sema analysis for \'update\' clause of \'atomic\' directive.","[OPENMP] Initial parsing and sema analysis for \'update\' clause of \'atomic\' directive.\n\nllvm-svn: 213735"},
[i]={{ab,1337,"/// 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::l_paren:\n     // ...\n     if (!SuppressDiagnostic) {\n       PP.Diag(Tok.getLocation(), diag::err_pp_nested_paren) << II;"}},
[k]={{m,12737,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\n // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n // * x and v (as applicable) are both l-value expressions with scalar type.\n // * During the execution of an atomic region, multiple syntactic\n // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n // designated by x.\n // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n // * expr is an expression with scalar type.\n // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n // ...\n } else if (AtomicKind == OMPC_write) {\n // ...\n } else if (AtomicKind == OMPC_update || AtomicKind == OMPC_unknown) {\n   // ...\n    if (Checker.checkStatement(Body, (AtomicKind == OMPC_update) ? diag::err_omp_atomic_update_not_expression_statement : diag::err_omp_atomic_not_expression_statement, diag::note_omp_atomic_update))"}},
[l]={
[l]={
["clang/test/Preprocessor/feature_tests.c"]={"clang/test/Preprocessor/feature_tests.c:122:21: error: nested parentheses not permitted in \'__is_identifier\'"}
[nb]={"clang/test/OpenMP/atomic_messages.c:124:3: error: the statement for \'atomic update\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:136:9: error: the statement for \'atomic update\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:140:9: error: the statement for \'atomic update\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:144:16: error: the statement for \'atomic update\' must be an expression statement of form \'++x;\', \'--x;\', \'x++;\', \'x--;\', \'x binop= expr;\', \'x = x binop expr\' or \'x = expr binop x\', where x is an lvalue expression with scalar type"}
}
}
},
},
["err_pp_operator_used_as_macro_name"]={
["err_omp_atomic_write_not_expression_statement"]={
[d]="err_pp_operator_used_as_macro_name",
[j]="err_omp_atomic_write_not_expression_statement",
[e]="C++ operator %0 (aka %1) used as a macro name",
[b]="the statement for \'atomic write\' must be an expression statement of form \'x = expr;\', where x is a lvalue expression with scalar type",
[f]="C++ operator A (aka B) used as a macro name",
[c]="the statement for \'atomic write\' must be an expression statement of form \'x = expr;\', where x is a lvalue expression with scalar type",
[g]=k,
[e]=d,
[h]="C\\+\\+ operator (.*?) \\(aka (.*?)\\) used as a macro name",
[f]="the statement for \'atomic write\' must be an expression statement of form \'x \\= expr;\', where x is a lvalue expression with scalar type",
[b]=a,
[g]=a,
[c]=p,
[i]=n,
[j]={q,1236199783,r,s},
[h]={"dea4761c06f9",1406101619,"[OPENMP] Initial parsing an sema analysis for \'write\' clause of \'atomic\' directive.","[OPENMP] Initial parsing an sema analysis for \'write\' clause of \'atomic\' directive.\n\nllvm-svn: 213728"},
[i]={{z,336,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // ...\n  if (II->isCPlusPlusOperatorKeyword()) {\n    // ...\n    Diag(MacroNameTok, getLangOpts().MicrosoftExt ? diag::ext_pp_operator_used_as_macro_name : diag::err_pp_operator_used_as_macro_name) << II << MacroNameTok.getKind();"}},
[k]={{m,12716,"StmtResult Sema::ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // OpenMP [2.12.6, atomic Construct]\n  // In the next expressions:\n  // * x and v (as applicable) are both l-value expressions with scalar type.\n  // * During the execution of an atomic region, multiple syntactic\n  // occurrences of x must designate the same storage location.\n  // * Neither of v and expr (as applicable) may access the storage location\n  // designated by x.\n  // * Neither of x and expr (as applicable) may access the storage location\n  // designated by v.\n  // * expr is an expression with scalar type.\n  // * binop is one of +, *, -, /, &, ^, |, <<, or >>.\n  // * binop, binop=, ++, and -- are not overloaded operators.\n  // * The expression x binop expr must be numerically equivalent to x binop\n  // (expr). This requirement is satisfied if the operators in expr have\n  // precedence greater than binop, or by using parentheses around expr or\n  // subexpressions of expr.\n  // * The expression expr binop x must be numerically equivalent to (expr)\n  // binop x. This requirement is satisfied if the operators in expr have\n  // precedence equal to or greater than binop, or by using parentheses around\n  // expr or subexpressions of expr.\n  // * For forms that allow multiple occurrences of x, the number of times\n  // that x is evaluated is unspecified.\n  if (AtomicKind == OMPC_read) {\n  // ...\n  } else if (AtomicKind == OMPC_write) {\n    // ...\n    if (ErrorFound != NoError) {\n      Diag(ErrorLoc, diag::err_omp_atomic_write_not_expression_statement) << ErrorRange;"}},
[l]={
[l]={
["clang/test/Preprocessor/cxx_oper_keyword.cpp"]={"clang/test/Preprocessor/cxx_oper_keyword.cpp:16:9: error: C++ operator \'and\' (aka \'&&\') used as a macro name","clang/test/Preprocessor/cxx_oper_keyword.cpp:21:13: error: C++ operator \'xor\' (aka \'^\') used as a macro name","clang/test/Preprocessor/cxx_oper_keyword.cpp:29:8: error: C++ operator \'and\' (aka \'&&\') used as a macro name"}
[nb]={"clang/test/OpenMP/atomic_messages.c:87:3: error: the statement for \'atomic write\' must be an expression statement of form \'x = expr;\', where x is a lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:91:3: error: the statement for \'atomic write\' must be an expression statement of form \'x = expr;\', where x is a lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:95:5: error: the statement for \'atomic write\' must be an expression statement of form \'x = expr;\', where x is a lvalue expression with scalar type","clang/test/OpenMP/atomic_messages.c:113:5: error: the statement for \'atomic write\' must be an expression statement of form \'x = expr;\', where x is a lvalue expression with scalar type"}
}
}
},
},
["err_pp_pragma_hdrstop_not_seen"]={
["err_omp_begin_declare_target_unexpected_implicit_to_clause"]={
[d]={{nil,u,"err_pp_pragma_hdrstop_not_seen"}},
[j]={{nil,r,"err_omp_begin_declare_target_unexpected_implicit_to_clause"}},
[e]={{nil,u,"#pragma hdrstop not seen while attempting to use precompiled header"}},
[b]={{nil,r,"unexpected \'(\', only \'to\', \'link\' or \'device_type\' clauses expected for \'begin declare target\' directive"}},
[f]={{nil,u,"#pragma hdrstop not seen while attempting to use precompiled header"}},
[c]={{nil,r,"unexpected \'(\', only \'to\', \'link\' or \'device_type\' clauses expected for \'begin declare target\' directive"}},
[g]=rc,
[e]=d,
[h]="\\#pragma hdrstop not seen while attempting to use precompiled header",
[f]="unexpected \'\\(\', only \'to\', \'link\' or \'device_type\' clauses expected for \'begin declare target\' directive",
[b]=a,
[g]=a,
[c]={{nil,u,p}},
[i]={{nil,r,u}},
[j]={"58df1affedc0",1536685844,"[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop","[clang-cl, PCH] Support for /Yc and /Yu without filename and #pragma hdrstop\n\nWith clang-cl, when the user specifies /Yc or /Yu without a filename\nthe compiler uses a #pragma hdrstop in the main source file to\ndetermine the end of the PCH. If a header is specified with /Yc or\n/Yu #pragma hdrstop has no effect.\n\nThe optional #pragma hdrstop filename argument is not yet supported.\n\nDifferential Revision: https://reviews.llvm.org/D51391\n\nllvm-svn: 341963"},
[h]={qb,1612659633,sb,tb},
[i]={{"clang/lib/Lex/Preprocessor.cpp",675,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n  // ...\n  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\n    // ...\n    else if (!PPOpts->PCHWithHdrStopCreate)\n      Diag(SourceLocation(), diag::err_pp_pragma_hdrstop_not_seen);"}}
[k]={{t,1931,"void Parser::ParseOMPDeclareTargetClauses(Sema::DeclareTargetContextInfo &DTCI) {\n  // ...\n  while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n    // ...\n    if (Tok.is(tok::l_paren)) {\n      Diag(Tok, diag::err_omp_begin_declare_target_unexpected_implicit_to_clause);"}}
},
},
["err_pp_pragma_unsafe_buffer_usage_syntax"]={
["err_omp_bit_fields_forbidden_in_clause"]={
[d]="err_pp_pragma_unsafe_buffer_usage_syntax",
[j]="err_omp_bit_fields_forbidden_in_clause",
[e]="Expected \'begin\' or \'end\'",
[b]="bit fields cannot be used to specify storage in a \'%0\' clause",
[f]="Expected \'begin\' or \'end\'",
[c]="bit fields cannot be used to specify storage in a \'A\' clause",
[g]=k,
[e]=d,
[h]="Expected \'begin\' or \'end\'",
[f]="bit fields cannot be used to specify storage in a \'(.*?)\' clause",
[b]=a,
[g]=a,
[c]=p,
[i]=n,
[j]={gb,1625925174,ib,jb},
[h]={"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"},
[i]={{H,1257,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n   // ...\n   if (Tok.isNot(tok::identifier)) {\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"},{H,1271,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    // ...\n    if (II->isStr(\"begin\")) {\n    // ...\n    } else if (II->isStr(\"end\")) {\n   // ...\n   } else\n      PP.Diag(Tok, diag::err_pp_pragma_unsafe_buffer_usage_syntax);"}},
[k]={{m,21172,"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.3]\n    //  A bit-field cannot appear in a map clause.\n    //\n    if (FD->isBitField()) {\n     if (!NoDiagnose) {\n       SemaRef.Diag(ELoc, diag::err_omp_bit_fields_forbidden_in_clause) << ME->getSourceRange() << getOpenMPClauseName(CKind);"}},
[l]={
[l]={
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:21:35: error: Expected \'begin\' or \'end\'","clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:22:35: error: Expected \'begin\' or \'end\'"}
["clang/test/OpenMP/target_update_from_messages.cpp"]={"clang/test/OpenMP/target_update_from_messages.cpp:134:38: error: bit fields cannot be used to specify storage in a \'from\' clause","clang/test/OpenMP/target_update_from_messages.cpp:190:38: error: bit fields cannot be used to specify storage in a \'from\' clause"}
}
}
},
},
["err_pp_remainder_by_zero"]={
["err_omp_cannot_update_with_internal_linkage"]={
[d]="err_pp_remainder_by_zero",
[j]={{nil,E,"err_omp_cannot_update_with_internal_linkage"}},
[e]="remainder by zero in preprocessor expression",
[b]={{nil,E,"the host cannot update a declare target variable that is not externally visible."}},
[f]="remainder by zero in preprocessor expression",
[c]={{nil,E,"the host cannot update a declare target variable that is not externally visible."}},
[g]=k,
[e]=d,
[h]="remainder by zero in preprocessor expression",
[f]="the host cannot update a declare target variable that is not externally visible\\.",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,E,n}},
[j]={q,1236199783,r,s},
[h]={"f60dc3caa673",1620118562,"[C++20][Modules] Adjust handling of exports of namespaces and using-decls.","[C++20][Modules] Adjust handling of exports of namespaces and using-decls.\n\nThis adjusts the handling for:\n\nexport module M;\n\nexport namespace {};\n\nexport namespace N {};\nexport using namespace N;\n\nIn the first case, we were allowing empty anonymous namespaces\nas part of an extension allowing empty top-level entities, but that seems\ninappropriate in this case, since the linkage would be internal for the\nanonymous namespace. We now report an error for this.\n\nThe second case was producing a warning diagnostic that this was\naccepted as an extension - however the C++20 standard does allow this\nas well-formed.\n\nIn the third case we keep the current practice that this is accepted with a\nwarning (as an extension). The C++20 standard says it\'s an error.\n\nWe also ensure that using decls are only applied to items with external linkage.\n\nThis adjusts error messages for exports involving redeclarations in modules to\nbe more specific about the reason that the decl has been rejected.\n\nDifferential Revision: https://reviews.llvm.org/D122119"},
[i]={{Z,709,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  // ...\n  while (true) {\n    // ...\n    case tok::percent:\n      if (RHS.Val != 0)\n      // ...\n      else if (ValueLive) {\n        PP.Diag(OpLoc, diag::err_pp_remainder_by_zero) << LHS.getRange() << RHS.getRange();"}}
[k]={{m,13327,"StmtResult Sema::ActOnOpenMPTargetUpdateDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc, Stmt *AStmt) {\n // ...\n if (!isClauseMappable(Clauses)) {\n   Diag(StartLoc, diag::err_omp_cannot_update_with_internal_linkage);"}},
},
["err_pp_stringize_not_parameter"]={
[d]="err_pp_stringize_not_parameter",
[e]="\'%select{#|#@}0\' is not followed by a macro parameter",
[f]={{nil,nil,{"\'",{"#","#@"},"\' is not followed by a macro parameter"}}},
[g]=k,
[h]="\'(?:\\#|\\#@)\' is not followed by a macro parameter",
[b]=a,
[c]=p,
[j]={q,1236199783,r,s},
[i]={{z,2999,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n // ...\} else {\n   // ...\n    while (Tok.isNot(tok::eod)) {\n     // ...\n     // Check for a valid macro arg identifier or __VA_OPT__.\n      if (!VAOCtx.isVAOptToken(Tok) && (Tok.getIdentifierInfo() == nullptr || MI->getParameterNum(Tok.getIdentifierInfo()) == -1)) {\n       // If this is assembler-with-cpp mode, we accept random gibberish after\n        // the \'#\' because \'#\' is often a comment character. However, change\n       // the kind of the token to tok::unknown so that the preprocessor isn\'t\n        // confused.\n        if (getLangOpts().AsmPreprocessor && Tok.isNot(tok::eod)) {\n       // ...\n       } else {\n         Diag(Tok, diag::err_pp_stringize_not_parameter) << LastTok.is(tok::hashat);"}},
[l]={
[l]={
["clang/test/Preprocessor/stringize_skipped.c"]={"clang/test/Preprocessor/stringize_skipped.c:5:20: error: \'#\' is not followed by a macro parameter"}
["clang/test/OpenMP/target_update_messages.cpp"]={"clang/test/OpenMP/target_update_messages.cpp:21:1: error: the host cannot update a declare target variable that is not externally visible.","clang/test/OpenMP/target_update_messages.cpp:28:1: error: the host cannot update a declare target variable that is not externally visible."}
}
}
},
},
["err_pp_through_header_not_found"]={
["err_omp_clause_floating_type_arg"]={
[d]={{nil,K,"err_pp_through_header_not_found"}},
[j]="err_omp_clause_floating_type_arg",
[e]={{nil,K,"\'%0\' required for precompiled header not found"}},
[b]="arguments of OpenMP clause \'reduction\' with bitwise operators cannot be of floating type",
[f]={{nil,K,"\'A\' required for precompiled header not found"}},
[c]="arguments of OpenMP clause \'reduction\' with bitwise operators cannot be of floating type",
[g]=rc,
[e]=d,
[h]="\'(.*?)\' required for precompiled header not found",
[f]="arguments of OpenMP clause \'(.*?)\' with bitwise operators cannot be of floating type",
[b]=a,
[g]=a,
[c]={{nil,K,p}},
[i]=n,
[j]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers\n\nImplement support for MS-style PCH through headers.\n\nThis enables support for /Yc and /Yu where the through header is either\non the command line or included in the source. It replaces the current\nsupport the requires the header also be specified with /FI.\n\nThis change adds a -cc1 option -pch-through-header that is used to either\nstart or stop compilation during PCH create or use.\n\nWhen creating a PCH, the compilation ends after compilation of the through\nheader.\n\nWhen using a PCH, tokens are skipped until after the through header is seen.\n\nPatch By: mikerice\nDifferential Revision: https://reviews.llvm.org/D46652\n\nllvm-svn: 336379"},
[h]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause","[OPENMP] Initial support of \'reduction\' clause\n\nllvm-svn: 211007"},
[i]={{"clang/lib/Lex/Preprocessor.cpp",587,"/// EnterMainSourceFile - Enter the specified FileID as the main source file,\n/// which implicitly adds the builtin defines etc.\nvoid Preprocessor::EnterMainSourceFile() {\n  // ...\n  if (!PPOpts->PCHThroughHeader.empty()) {\n    // ...\n    if (!File) {\n      Diag(SourceLocation(), diag::err_pp_through_header_not_found) << PPOpts->PCHThroughHeader;"}}
[k]={{m,19460,"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.14.3.6, reduction clause, Restrictions]\n    // The type of a list item that appears in a reduction clause must be valid\n    // for the reduction-identifier. For a max or min reduction in C, the type\n    // of the list item must be an allowed arithmetic data type: char, int,\n    // float, double, or _Bool, possibly modified with long, short, signed, or\n   // unsigned. For a max or min reduction in C++, the type of the list item\n   // must be an allowed arithmetic data type: char, wchar_t, int, float,\n   // double, or bool, possibly modified with long, short, signed, or unsigned.\n   if (DeclareReductionRef.isUnset()) {\n     // ...\n     if ((BOK == BO_OrAssign || BOK == BO_AndAssign || BOK == BO_XorAssign) && !S.getLangOpts().CPlusPlus && Type->isFloatingType()) {\n       S.Diag(ELoc, diag::err_omp_clause_floating_type_arg) << getOpenMPClauseName(ClauseKind);"}}
},
["err_pp_through_header_not_seen"]={
[d]={{nil,K,"err_pp_through_header_not_seen"}},
[e]={{nil,K,"#include of \'%0\' not seen while attempting to %select{create|use}1 precompiled header"}},
[f]={{nil,K,{"#include of \'A\' not seen while attempting to ",{"create","use"}," precompiled header"}}},
[g]=rc,
[h]="\\#include of \'(.*?)\' not seen while attempting to (?:create|use) precompiled header",
[b]=a,
[c]={{nil,K,p}},
[j]={"76675de15cfc",1530811333,"[clang-cl, PCH] Implement support for MS-style PCH through headers","[clang-cl, PCH] Implement support for MS-style PCH through headers\n\nImplement support for MS-style PCH through headers.\n\nThis enables support for /Yc and /Yu where the through header is either\non the command line or included in the source. It replaces the current\nsupport the requires the header also be specified with /FI.\n\nThis change adds a -cc1 option -pch-through-header that is used to either\nstart or stop compilation during PCH create or use.\n\nWhen creating a PCH, the compilation ends after compilation of the through\nheader.\n\nWhen using a PCH, tokens are skipped until after the through header is seen.\n\nPatch By: mikerice\nDifferential Revision: https://reviews.llvm.org/D46652\n\nllvm-svn: 336379"},
[i]={{Db,566,"/// 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 if (creatingPCHWithThroughHeader() && !LeavingPCHThroughHeader) {\n    // ...\n    Diag(CurLexer->getFileLoc(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 0;"},{"clang/lib/Lex/Preprocessor.cpp",672,"/// Skip tokens until after the #include of the through header or\n/// until after a #pragma hdrstop is seen. Tokens in the predefines file\n/// and the main file may be skipped. If the end of the predefines file\n/// is reached, skipping continues into the main file. If the end of the\n/// main file is reached, it\'s a fatal error.\nvoid Preprocessor::SkipTokensWhileUsingPCH() {\n // ...\n  if (ReachedMainFileEOF) {\n    if (UsingPCHThroughHeader)\n      Diag(SourceLocation(), diag::err_pp_through_header_not_seen) << PPOpts->PCHThroughHeader << 1;"}}
},
},
["err_pp_unclosed_pragma_unsafe_buffer_usage"]={
["err_omp_clause_not_arithmetic_type_arg"]={
[d]="err_pp_unclosed_pragma_unsafe_buffer_usage",
[j]="err_omp_clause_not_arithmetic_type_arg",
[e]="\'#pragma unsafe_buffer_usage\' was not ended",
[b]="arguments of OpenMP clause \'reduction\' for \'min\' or \'max\' must be of %select{scalar|arithmetic}0 type",
[f]="\'#pragma unsafe_buffer_usage\' was not ended",
[c]={{nil,P,{"arguments of OpenMP clause \'A\' for \'min\' or \'max\' must be of ",{"scalar","arithmetic"}," type"}},{nil,nil,{"arguments of OpenMP clause \'reduction\' for \'min\' or \'max\' must be of ",{"scalar","arithmetic"}," type"}}},
[g]=k,
[e]=d,
[h]="\'\\#pragma unsafe_buffer_usage\' was not ended",
[f]="arguments of OpenMP clause \'(.*?)\' for \'min\' or \'max\' must be of (?:scalar|arithmetic) type",
[b]=a,
[g]=a,
[c]=p,
[i]=n,
[j]={gb,1625925174,ib,jb},
[h]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause","[OPENMP] Initial support of \'reduction\' clause\n\nllvm-svn: 211007"},
[i]={{Db,344,"/// 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 if (IncludeMacroStack.empty() && isPPInSafeBufferOptOutRegion(UnclosedSafeBufferOptOutLoc)) {\n   // ...\n    Diag(UnclosedSafeBufferOptOutLoc, diag::err_pp_unclosed_pragma_unsafe_buffer_usage);"}},
[k]={{m,19447,"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.14.3.6, reduction clause, Restrictions]\n    // The type of a list item that appears in a reduction clause must be valid\n   // for the reduction-identifier. For a max or min reduction in C, the type\n    // of the list item must be an allowed arithmetic data type: char, int,\n    // float, double, or _Bool, possibly modified with long, short, signed, or\n   // unsigned. For a max or min reduction in C++, the type of the list item\n    // must be an allowed arithmetic data type: char, wchar_t, int, float,\n   // double, or bool, possibly modified with long, short, signed, or unsigned.\n    if (DeclareReductionRef.isUnset()) {\n     if ((BOK == BO_GT || BOK == BO_LT) && !(Type->isScalarType() || (S.getLangOpts().CPlusPlus && Type->isArithmeticType()))) {\n       S.Diag(ELoc, diag::err_omp_clause_not_arithmetic_type_arg) << getOpenMPClauseName(ClauseKind) << S.getLangOpts().CPlusPlus;"}},
[l]={
[l]={
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:33:35: error: \'#pragma unsafe_buffer_usage\' was not ended"}
["clang/test/OpenMP/taskloop_reduction_messages_attr.cpp"]={"clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:248:48: error: arguments of OpenMP clause \'reduction\' for \'min\' or \'max\' must be of arithmetic type","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:248:51: error: arguments of OpenMP clause \'reduction\' for \'min\' or \'max\' must be of arithmetic type","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:146:48: error: arguments of OpenMP clause \'reduction\' for \'min\' or \'max\' must be of arithmetic type","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:146:51: error: arguments of OpenMP clause \'reduction\' for \'min\' or \'max\' must be of arithmetic type","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:146:48: error: arguments of OpenMP clause \'reduction\' for \'min\' or \'max\' must be of arithmetic type","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:146:51: error: arguments of OpenMP clause \'reduction\' for \'min\' or \'max\' must be of arithmetic type"}
}
}
},
},
["err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage"]={
["err_omp_clause_requires_dispatch_construct"]={
[d]="err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage",
[j]={{nil,s,"err_omp_clause_requires_dispatch_construct"}},
[e]="not currently inside \'#pragma unsafe_buffer_usage\'",
[b]={{nil,s,"\'%0\' clause requires \'dispatch\' context selector"}},
[f]="not currently inside \'#pragma unsafe_buffer_usage\'",
[c]={{nil,s,"\'A\' clause requires \'dispatch\' context selector"}},
[g]=k,
[e]=d,
[h]="not currently inside \'\\#pragma unsafe_buffer_usage\'",
[f]="\'(.*?)\' clause requires \'dispatch\' context selector",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,s,n}},
[j]={gb,1625925174,ib,jb},
[h]={"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"},
[i]={{H,1269,"struct PragmaUnsafeBufferUsageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override {\n    // ...\n    if (II->isStr(\"begin\")) {\n    // ...\n    } else if (II->isStr(\"end\")) {\n      if (PP.enterOrExitSafeBufferOptOutRegion(false, Loc))\n        PP.Diag(Loc, diag::err_pp_unmatched_end_begin_pragma_unsafe_buffer_usage);"}},
[k]={{m,7675,"void Sema::ActOnOpenMPDeclareVariantDirective(FunctionDecl *FD, Expr *VariantRef, OMPTraitInfo &TI, ArrayRef<Expr *> AdjustArgsNothing, ArrayRef<Expr *> AdjustArgsNeedDevicePtr, ArrayRef<OMPInteropInfo> AppendArgs, SourceLocation AdjustArgsLoc, SourceLocation AppendArgsLoc, SourceRange SR) {\n  // ...\n  if (!AllAdjustArgs.empty() || !AppendArgs.empty()) {\n    // ...\n    if (!llvm::is_contained(VMI.ConstructTraits, llvm::omp::TraitProperty::construct_dispatch_dispatch)) {\n      if (!AllAdjustArgs.empty())\n        Diag(AdjustArgsLoc, diag::err_omp_clause_requires_dispatch_construct) << getOpenMPClauseName(OMPC_adjust_args);"},{m,7678,"void Sema::ActOnOpenMPDeclareVariantDirective(FunctionDecl *FD, Expr *VariantRef, OMPTraitInfo &TI, ArrayRef<Expr *> AdjustArgsNothing, ArrayRef<Expr *> AdjustArgsNeedDevicePtr, ArrayRef<OMPInteropInfo> AppendArgs, SourceLocation AdjustArgsLoc, SourceLocation AppendArgsLoc, SourceRange SR) {\n  // ...\n  if (!AllAdjustArgs.empty() || !AppendArgs.empty()) {\n    // ...\n    if (!llvm::is_contained(VMI.ConstructTraits, llvm::omp::TraitProperty::construct_dispatch_dispatch)) {\n      // ...\n      if (!AppendArgs.empty())\n        Diag(AppendArgsLoc, diag::err_omp_clause_requires_dispatch_construct) << getOpenMPClauseName(OMPC_append_args);"}},
[l]={
[l]={
["clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp"]={"clang/test/SemaCXX/warn-unsafe-buffer-usage-pragma-misuse.cpp:13:35: error: not currently inside \'#pragma unsafe_buffer_usage\'"}
[zb]={"clang/test/OpenMP/declare_variant_clauses_messages.cpp:156:47: error: \'append_args\' clause requires \'dispatch\' context selector","clang/test/OpenMP/declare_variant_clauses_messages.cpp:152:21: error: \'append_args\' clause requires \'dispatch\' context selector","clang/test/OpenMP/declare_variant_clauses_messages.cpp:133:4: error: \'adjust_args\' clause requires \'dispatch\' context selector","clang/test/OpenMP/declare_variant_clauses_messages.cpp:129:4: error: \'adjust_args\' clause requires \'dispatch\' context selector"}
}
}
},
},
["err_pp_unmatched_end_of_arc_cf_code_audited"]={
["err_omp_clauses_mutually_exclusive"]={
[d]="err_pp_unmatched_end_of_arc_cf_code_audited",
[j]={{nil,o,"err_omp_clauses_mutually_exclusive"}},
[e]="not currently inside \'#pragma clang arc_cf_code_audited\'",
[b]={{nil,o,"\'%0\' and \'%1\' clause are mutually exclusive and may not appear on the same directive"}},
[f]="not currently inside \'#pragma clang arc_cf_code_audited\'",
[c]={{nil,o,"\'A\' and \'B\' clause are mutually exclusive and may not appear on the same directive"}},
[g]=k,
[e]=d,
[h]="not currently inside \'\\#pragma clang arc_cf_code_audited\'",
[f]="\'(.*?)\' and \'(.*?)\' clause are mutually exclusive and may not appear on the same directive",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,o,n}},
[j]={Yb,1317359532,Xb,Wb},
[h]={I,1576908663,H,F},
[i]={{H,1906,"/// 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   // ...\n   } else {\n      // Complain about attempts to leave an audit that doesn\'t exist.\n      if (!BeginLoc.isValid()) {\n        PP.Diag(Loc, diag::err_pp_unmatched_end_of_arc_cf_code_audited);"}},
[k]={{m,11098,"/// Find and diagnose mutually exclusive clause kinds.\nstatic bool checkMutuallyExclusiveClauses(Sema &S, ArrayRef<OMPClause *> Clauses, ArrayRef<OpenMPClauseKind> MutuallyExclusiveClauses) {\n  // ...\n  for (const OMPClause *C : Clauses) {\n    if (llvm::is_contained(MutuallyExclusiveClauses, C->getClauseKind())) {\n     if (!PrevClause) {\n     // ...\n     } else if (PrevClause->getClauseKind() != C->getClauseKind()) {\n        S.Diag(C->getBeginLoc(), diag::err_omp_clauses_mutually_exclusive) << getOpenMPClauseName(C->getClauseKind()) << getOpenMPClauseName(PrevClause->getClauseKind());"}},
[l]={
[l]={
[sc]={"clang/test/Sema/pragma-arc-cf-code-audited.c:8:15: error: not currently inside \'#pragma clang arc_cf_code_audited\'"}
[Gb]={"clang/test/OpenMP/unroll_messages.cpp:75:30: error: \'full\' and \'partial\' clause are mutually exclusive and may not appear on the same directive","clang/test/OpenMP/unroll_messages.cpp:79:27: error: \'partial\' and \'full\' clause are mutually exclusive and may not appear on the same directive"}
}
}
},
},
["err_pp_unmatched_end_of_assume_nonnull"]={
["err_omp_const_list_item"]={
[d]="err_pp_unmatched_end_of_assume_nonnull",
[j]={{nil,y,"err_omp_const_list_item"}},
[e]="not currently inside \'#pragma clang assume_nonnull\'",
[b]={{nil,y,"const-qualified list item cannot be %0"}},
[f]="not currently inside \'#pragma clang assume_nonnull\'",
[c]={{nil,y,"const-qualified list item cannot be A"}},
[g]=k,
[e]=d,
[h]="not currently inside \'\\#pragma clang assume_nonnull\'",
[f]="const\\-qualified list item cannot be (.*?)",
[b]=a,
[g]=a,
[c]=mc,
[i]={{nil,y,n}},
[j]={nc,1434738357,oc,pc},
[h]={"d2649292ef26",1546639916,"[OpenMP] Refactor const restriction for reductions","[OpenMP] Refactor const restriction for reductions\n\nAs discussed in D56113, this patch refactors the implementation of the\nconst restriction for reductions to reuse a function introduced by\nD56113.  A side effect is that diagnostics sometimes now say\n\"variable\" instead of \"list item\" when a list item is a variable.\n\nReviewed By: ABataev\n\nDifferential Revision: https://reviews.llvm.org/D56298\n\nllvm-svn: 350440"},
[i]={{H,1964,"/// 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   // ...\n   } else {\n      // Complain about attempts to leave an audit that doesn\'t exist.\n      if (!BeginLoc.isValid()) {\n       PP.Diag(Loc, diag::err_pp_unmatched_end_of_assume_nonnull);"}}
[k]={{m,1711,"static bool rejectConstNotMutableType(Sema &SemaRef, const ValueDecl *D, QualType Type, OpenMPClauseKind CKind, SourceLocation ELoc, bool AcceptIfMutable = true, bool ListItemNotVar = false) {\n // ...\n if (isConstNotMutableType(SemaRef, Type, AcceptIfMutable, &IsClassType)) {\n   unsigned Diag = ListItemNotVar ? diag::err_omp_const_list_item : IsClassType ? diag::err_omp_const_not_mutable_variable : diag::err_omp_const_variable;"}}
},
},
["err_pp_unterminated_conditional"]={
["err_omp_const_not_mutable_variable"]={
[d]="err_pp_unterminated_conditional",
[j]={{nil,y,"err_omp_const_not_mutable_variable"}},
[e]="unterminated conditional directive",
[b]={{nil,y,"const-qualified variable without mutable fields cannot be %0"}},
[f]="unterminated conditional directive",
[c]={{nil,y,"const-qualified variable without mutable fields cannot be A"}},
[g]=k,
[e]=d,
[h]="unterminated conditional directive",
[f]="const\\-qualified variable without mutable fields cannot be (.*?)",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,y,n}},
[j]={q,1236199783,r,s},
[h]={"e6234d142911",1546639891,"[OpenMP] Replace predetermined shared for const variable","[OpenMP] Replace predetermined shared for const variable\n\nThe following appears in OpenMP 3.1 sec. 2.9.1.1 as a predetermined\ndata-sharing attribute:\n\n> Variables with const-qualified type having no mutable member are\n> shared.\n\nIt does not appear in OpenmP 4.0, 4.5, or 5.0.  This patch removes the\nimplementation of that attribute when the requested OpenMP version is\ngreater than 3.1.\n\nOne effect of that removal is that `default(none)` affects const\nvariables without mutable members.\n\nAlso, without this patch, if a const variable without mutable members\nwas explicitly lastprivate or private, it was an error because it was\npredetermined shared.  Now, clang instead complains that it\'s const\nwithout mutable fields, which is a more intelligible diagnostic. That\nshould be fine for all of the above versions because they all have\nsomething like the following, which is quoted from OpenMP 5.0\nsec. 2.19.3:\n\n> A variable that is privatized must not have a const-qualified type\n> unless it is of class type with a mutable member. This restriction does\n> not apply to the firstprivate clause.\n\nreduction and linear clauses already have separate checks for const\nvariables.  Future patches will merge the implementations.\n\nReviewed By: ABataev\n\nDifferential Revision: https://reviews.llvm.org/D56113\n\nllvm-svn: 350439"},
[i]={{"clang/lib/Lex/Lexer.cpp",3037,"/// LexEndOfFile - CurPtr points to the end of this file. Handle this\n/// condition, reporting diagnostics and handling other edge cases as required.\n/// This returns true if Result contains a token, false if PP.Lex should be\n/// called again.\nbool Lexer::LexEndOfFile(Token &Result, const char *CurPtr) {\n  // ...\n  // If we are in a #if directive, emit an error.\n  while (!ConditionalStack.empty()) {\n    if (PP->getCodeCompletionFileLoc() != FileLoc)\n      PP->Diag(ConditionalStack.back().IfLoc, diag::err_pp_unterminated_conditional);"}},
[k]={{m,1712,"static bool rejectConstNotMutableType(Sema &SemaRef, const ValueDecl *D, QualType Type, OpenMPClauseKind CKind, SourceLocation ELoc, bool AcceptIfMutable = true, bool ListItemNotVar = false) {\n  // ...\n  if (isConstNotMutableType(SemaRef, Type, AcceptIfMutable, &IsClassType)) {\n    unsigned Diag = ListItemNotVar ? diag::err_omp_const_list_item : IsClassType ? diag::err_omp_const_not_mutable_variable : diag::err_omp_const_variable;"}},
[l]={
[l]={
["clang/test/Lexer/eof-number.c"]={"clang/test/Lexer/eof-number.c:9:2: error: unterminated conditional directive"}
["clang/test/OpenMP/target_teams_private_messages.cpp"]={"clang/test/OpenMP/target_teams_private_messages.cpp:88:41: error: const-qualified variable without mutable fields cannot be private","clang/test/OpenMP/target_teams_private_messages.cpp:94:34: error: const-qualified variable without mutable fields cannot be private"}
}
}
},
},
["err_pp_used_poisoned_id"]={
["err_omp_const_variable"]={
[d]="err_pp_used_poisoned_id",
[j]="err_omp_const_variable",
[e]="attempt to use a poisoned identifier",
[b]="const-qualified variable cannot be %0",
[f]="attempt to use a poisoned identifier",
[c]="const-qualified variable cannot be A",
[g]=k,
[e]=d,
[h]="attempt to use a poisoned identifier",
[f]="const\\-qualified variable cannot be (.*?)",
[b]=a,
[g]=a,
[c]=p,
[i]=n,
[j]={q,1236199783,r,s},
[h]={"8dba66412b0a",1398172182,"[OPENMP] parsing \'linear\' clause (for directive \'omp simd\')","[OPENMP] parsing \'linear\' clause (for directive \'omp simd\')\n\nDifferential Revision: http://reviews.llvm.org/D3272\n\nllvm-svn: 206891"},
[i]={{"clang/lib/Lex/Preprocessor.cpp",768,"void Preprocessor::HandlePoisonedIdentifier(Token &Identifier) {\n  // ...\n  if (it == PoisonReasons.end())\n    Diag(Identifier, diag::err_pp_used_poisoned_id);"}},
[k]={{m,1713,"static bool rejectConstNotMutableType(Sema &SemaRef, const ValueDecl *D, QualType Type, OpenMPClauseKind CKind, SourceLocation ELoc, bool AcceptIfMutable = true, bool ListItemNotVar = false) {\n  // ...\n  if (isConstNotMutableType(SemaRef, Type, AcceptIfMutable, &IsClassType)) {\n    unsigned Diag = ListItemNotVar ? diag::err_omp_const_list_item : IsClassType ? diag::err_omp_const_not_mutable_variable : diag::err_omp_const_variable;"}},
[l]={
[l]={
["clang/test/Preprocessor/pragma_poison.c"]={"clang/test/Preprocessor/pragma_poison.c:4:1: error: attempt to use a poisoned identifier","clang/test/Preprocessor/pragma_poison.c:9:3: error: attempt to use a poisoned identifier"}
["clang/test/OpenMP/target_teams_private_messages.cpp"]={"clang/test/OpenMP/target_teams_private_messages.cpp:88:44: error: const-qualified variable cannot be private","clang/test/OpenMP/target_teams_private_messages.cpp:88:47: error: const-qualified variable cannot be private","clang/test/OpenMP/target_teams_private_messages.cpp:96:34: error: const-qualified variable cannot be private"}
}
}
},
},
["err_pp_vaopt_nested_use"]={
["err_omp_critical_with_hint"]={
[d]={{nil,B,"err_pp_vaopt_nested_use"}},
[j]="err_omp_critical_with_hint",
[e]={{nil,B,"__VA_OPT__ cannot be nested within its own replacement tokens"}},
[b]="constructs with the same name must have a \'hint\' clause with the same value",
[f]={{nil,B,"__VA_OPT__ cannot be nested within its own replacement tokens"}},
[c]="constructs with the same name must have a \'hint\' clause with the same value",
[g]=k,
[e]=d,
[h]="__VA_OPT__ cannot be nested within its own replacement tokens",
[f]="constructs with the same name must have a \'hint\' clause with the same value",
[b]=a,
[g]=a,
[c]={{nil,B,p}},
[i]=n,
[j]={"1826842865f1",1508030786,"[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)","[c++2a] Implement P0306 __VA_OPT__ (Comma omission and comma deletion)\n\nThis patch implements an extension to the preprocessor:\n\n__VA_OPT__(contents) --> which expands into its contents if variadic arguments are supplied to the parent macro, or behaves as an empty token if none.\n\n  - Currently this feature is only enabled for C++2a (this could be enabled, with some careful tweaks, for other dialects with the appropriate extension or compatibility warnings)\n\n  - The patch was reviewed here: https://reviews.llvm.org/D35782 and asides from the above (and moving some of the definition and expansion recognition logic into the corresponding state machines), I believe I incorporated all of Richard\'s suggestions.\n\nA few technicalities (most of which were clarified through private correspondence between rsmith, hubert and thomas) are worth mentioning.  Given:\n\n    #define F(a,...) a #__VA_OPT__(a ## a)  a ## __VA_OPT__(__VA_ARGS__)\n\n    - The call F(,) Does not supply any tokens for the variadic arguments and hence VA_OPT behaves as a placeholder.\n    - When expanding VA_OPT (for e.g. F(,1) token pasting occurs eagerly within its contents if the contents need to be stringified.\n    - A hash or a hashhash prior to VA_OPT does not inhibit expansion of arguments if they are the first token within VA_OPT.\n    - When a variadic argument is supplied, argument substitution occurs within the contents as does stringification - and these resulting tokens are inserted back into the macro expansions token stream just prior to the entire stream being rescanned and concatenated.\n\nSee wg21.link/P0306 for further details on the feature.\n\n\nAcknowledgment: This patch would have been poorer if not for Richard Smith\'s usual thoughtful analysis and feedback.\nllvm-svn: 315840"},
[h]={"28c75417b2c4",1450167564,"[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive.","[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive.\nOpenMP 4.5 adds \'hint\' clause to critical directive. Patch adds parsing/semantic analysis for this clause.\n\nllvm-svn: 255625"},
[i]={{z,2910,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // ...\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  // ...\n  } else {\n    // ...\n    while (Tok.isNot(tok::eod)) {\n     // ...\n      if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) {\n        // ...\n        if (VAOCtx.isVAOptToken(Tok)) {\n          // If we\'re already within a VAOPT, emit an error.\n          if (VAOCtx.isInVAOpt()) {\n           Diag(Tok, diag::err_pp_vaopt_nested_use);"}},
[k]={{m,10888,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  if (Pair.first && DirName.getName() && !DependentHint) {\n   if (llvm::APSInt::compareValues(Hint, Pair.second) != 0) {\n     Diag(StartLoc, diag::err_omp_critical_with_hint);"}},
[l]={
[l]={
["clang/test/Preprocessor/macro_vaopt_check.cpp"]={"clang/test/Preprocessor/macro_vaopt_check.cpp:25:28: error: __VA_OPT__ cannot be nested within its own replacement tokens"}
["clang/test/OpenMP/critical_messages.cpp"]={"clang/test/OpenMP/critical_messages.cpp:70:3: error: constructs with the same name must have a \'hint\' clause with the same value"}
}
}
},
},
["err_pp_visibility_non_macro"]={
["err_omp_decl_in_declare_simd_variant"]={
[d]="err_pp_visibility_non_macro",
[j]={{nil,p,"err_omp_decl_in_declare_simd_variant"}},
[e]="no macro named %0",
[b]={{nil,p,"function declaration is expected after \'declare %select{simd|variant}0\' directive"}},
[f]="no macro named A",
[c]={{nil,p,{"function declaration is expected after \'declare ",{"simd","variant"},"\' directive"}}},
[g]=k,
[e]=d,
[h]="no macro named (.*?)",
[f]="function declaration is expected after \'declare (?:simd|variant)\' directive",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,p,u}},
[j]={"ebf004990163",1318865549,"For modules, all macros that aren\'t include guards are implicitly","For modules, all macros that aren\'t include guards are implicitly\npublic. Add a __private_macro__ directive to hide a macro, similar to\nthe __module_private__ declaration specifier.\n\nllvm-svn: 142188"},
[h]={"d158cf64d64b",1568405897,"[OPENMP5.0]Add basic support for declare variant directive.","[OPENMP5.0]Add basic support for declare variant directive.\n\nAdded basic support for declare variant directive and its match clause\nwith user context selector.\n\nllvm-svn: 371892"},
[i]={{z,1715,"/// Handle a #public directive.\nvoid Preprocessor::HandleMacroPublicDirective(Token &Tok) {\n // ...\n // If the macro is not defined, this is an error.\n if (!MD) {\n   Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{z,1742,"/// Handle a #private directive.\nvoid Preprocessor::HandleMacroPrivateDirective() {\n // ...\n // If the macro is not defined, this is an error.\n if (!MD) {\n   Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II;"},{H,2026,"/// This handles parsing pragmas that take a macro name and optional message\nstatic IdentifierInfo *HandleMacroAnnotationPragma(Preprocessor &PP, Token &Tok, const char *Pragma, std::string &MessageString) {\n // ...\n if (!II->hasMacroDefinition()) {\n   PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"},{H,2114,"/// \"\\#pragma clang final(...)\"\n///\n/// The syntax is\n/// \\code\n///   #pragma clang final(MACRO_NAME)\n/// \\endcode\nstruct PragmaFinalHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (!II->hasMacroDefinition()) {\n      PP.Diag(Tok, diag::err_pp_visibility_non_macro) << II;"}},
[k]={{t,2320,"/// 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_declare_variant:\n  case OMPD_declare_simd: {\n    // ...\n    if (!Ptr) {\n      Diag(Loc, diag::err_omp_decl_in_declare_simd_variant) << (DKind == OMPD_declare_simd ? 0 : 1);"}},
[l]={
[l]={
["clang/test/Lexer/deprecate-macro.c"]={"clang/test/Lexer/deprecate-macro.c:10:26: error: no macro named \'foo\'","clang/test/Lexer/deprecate-macro.c:52:26: error: no macro named \'main\'"}
[Fb]={"clang/test/OpenMP/declare_simd_messages.cpp:18:1: error: function declaration is expected after \'declare simd\' directive","clang/test/OpenMP/declare_simd_messages.cpp:24:1: error: function declaration is expected after \'declare simd\' directive","clang/test/OpenMP/declare_simd_messages.cpp:23:1: error: function declaration is expected after \'declare simd\' directive","clang/test/OpenMP/declare_simd_messages.cpp:31:1: error: function declaration is expected after \'declare simd\' directive","clang/test/OpenMP/declare_simd_messages.cpp:30:1: error: function declaration is expected after \'declare simd\' directive","clang/test/OpenMP/declare_simd_messages.cpp:37:3: error: function declaration is expected after \'declare simd\' directive","clang/test/OpenMP/declare_simd_messages.cpp:214:1: error: function declaration is expected after \'declare simd\' directive","clang/test/OpenMP/declare_simd_messages.cpp:236:3: error: function declaration is expected after \'declare simd\' directive","clang/test/OpenMP/declare_simd_messages.cpp:241:1: error: function declaration is expected after \'declare simd\' directive","clang/test/OpenMP/declare_simd_messages.cpp:239:1: error: function declaration is expected after \'declare simd\' directive"}
}
}
},
},
["err_ppc_builtin_requires_abi"]={
["err_omp_declare_mapper_redefinition"]={
[d]={{nil,F,"err_ppc_builtin_requires_abi"}},
[j]={{nil,v,"err_omp_declare_mapper_redefinition"}},
[e]={{nil,F,"this builtin requires ABI -mabi=%0"}},
[b]={{nil,v,"redefinition of user-defined mapper for type %0 with name %1"}},
[f]={{nil,F,"this builtin requires ABI -mabi=A"}},
[c]={{nil,v,"redefinition of user-defined mapper for type A with name B"}},
[g]=k,
[e]=d,
[h]="this builtin requires ABI \\-mabi\\=(.*?)",
[f]="redefinition of user\\-defined mapper for type (.*?) with name (.*?)",
[b]=a,
[g]=a,
[c]={{nil,F,m}},
[i]={{nil,v,n}},
[j]={"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"},
[h]={Jb,1549052704,Kb,Hb},
[i]={{I,4281,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case PPC::BI__builtin_pack_longdouble:\n    if (&TI.getLongDoubleFormat() != &llvm::APFloat::PPCDoubleDouble())\n      return Diag(TheCall->getBeginLoc(), diag::err_ppc_builtin_requires_abi) << \"ibmlongdouble\";"}}
[k]={{m,22543,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareMapperDirective(Scope *S, DeclContext *DC, DeclarationName Name, QualType MapperType, SourceLocation StartLoc, DeclarationName VN, AccessSpecifier AS, Expr *MapperVarRef, ArrayRef<OMPClause *> Clauses, Decl *PrevDeclInScope) {\n  // ...\n  if (I != PreviousRedeclTypes.end()) {\n   Diag(StartLoc, diag::err_omp_declare_mapper_redefinition) << MapperType << Name;"}},
},
["err_ppc_invalid_test_data_class_type"]={
[d]={{nil,F,"err_ppc_invalid_test_data_class_type"}},
[e]={{nil,tb,"expected a \'float\', \'double\' or \'__float128\' for the first argument"},{C,F,"expected a \'float\' or \'double\' for the first argument"}},
[f]={{nil,tb,"expected a \'float\', \'double\' or \'__float128\' for the first argument"},{C,F,"expected a \'float\' or \'double\' for the first argument"}},
[g]=k,
[h]="expected a \'float\', \'double\' or \'__float128\' for the first argument",
[b]=a,
[c]={{nil,F,m}},
[j]={"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"},
[i]={{I,4361,"bool Sema::CheckPPCBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case PPC::BI__builtin_ppc_test_data_class: {\n    // ...\n    if (ArgType != QualType(Context.FloatTy) && ArgType != QualType(Context.DoubleTy) && ArgType != QualType(Context.Float128Ty))\n     return Diag(TheCall->getBeginLoc(), diag::err_ppc_invalid_test_data_class_type);"}},
[l]={
[l]={
["clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c"]={"clang/test/CodeGen/PowerPC/builtins-ppc-xlcompat-pwr9-error.c:47:10: error: expected a \'float\', \'double\' or \'__float128\' for the first argument"}
[vb]={"clang/test/OpenMP/declare_mapper_messages.cpp:33:28: error: redefinition of user-defined mapper for type \'vec\' with name \'default\'","clang/test/OpenMP/declare_mapper_messages.cpp:44:32: error: redefinition of user-defined mapper for type \'vec\' with name \'id\'","clang/test/OpenMP/declare_mapper_messages.cpp:56:32: error: redefinition of user-defined mapper for type \'vec\' with name \'id\'","clang/test/OpenMP/declare_mapper_messages.cpp:120:32: error: redefinition of user-defined mapper for type \'vec\' with name \'id\'"}
}
}
},
},
["err_ppc_invalid_use_mma_type"]={
["err_omp_declare_mapper_wrong_var"]={
[d]={{nil,A,"err_ppc_invalid_use_mma_type"}},
[j]={{nil,v,"err_omp_declare_mapper_wrong_var"}},
[e]={{nil,A,"invalid use of PPC MMA type"}},
[b]={{nil,v,"only variable %0 is allowed in map clauses of this \'omp declare mapper\' directive"}},
[f]={{nil,A,"invalid use of PPC MMA type"}},
[c]={{nil,v,"only variable A is allowed in map clauses of this \'omp declare mapper\' directive"}},
[g]=k,
[e]=d,
[h]="invalid use of PPC MMA type",
[f]="only variable (.*?) is allowed in map clauses of this \'omp declare mapper\' directive",
[b]=a,
[g]=a,
[c]={{nil,A,m}},
[i]={{nil,v,n}},
[j]={Vb,1590001902,Ub,Zb},
[h]={Jb,1549052704,Kb,Hb},
[i]={{I,4410,"#include \"clang/Basic/PPCTypes.def\"\n  ) {\n    Diag(TypeLoc, diag::err_ppc_invalid_use_mma_type);"}},
[k]={{N,359,"/// 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  // [OpenMP 5.0], 2.19.7.3. declare mapper Directive, Restrictions\n  //  List-items in map clauses on this construct may only refer to the declared\n  //  variable var and entities that could be referenced by a procedure defined\n  // at the same location.\n  // [OpenMP 5.2] Also allow iterator declared variables.\n  if (LangOpts.OpenMP && isa<VarDecl>(D) && !isOpenMPDeclareMapperVarDeclAllowed(cast<VarDecl>(D))) {\n    Diag(Loc, diag::err_omp_declare_mapper_wrong_var) << getOpenMPDeclareMapperVarName();"}},
[l]={
[l]={
["clang/test/Sema/ppc-pair-mma-types.c"]={"clang/test/Sema/ppc-pair-mma-types.c:17:31: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:22:37: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:27:28: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:33:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:35:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:38:12: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:40:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:44:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:45:21: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:48:6: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:55:17: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:112:31: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:117:37: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:122:28: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:128:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:130:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:133:12: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:135:3: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:139:15: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:140:21: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:143:6: error: invalid use of PPC MMA type","clang/test/Sema/ppc-pair-mma-types.c:149:17: error: invalid use of PPC MMA type"}
[vb]={"clang/test/OpenMP/declare_mapper_messages.cpp:31:51: error: only variable \'v\' is allowed in map clauses of this \'omp declare mapper\' directive"}
}
}
},
},
["err_pragma_alloc_text_c_linkage"]={
["err_omp_declare_reduction_redefinition"]={
[d]={{nil,C,"err_pragma_alloc_text_c_linkage"}},
[j]="err_omp_declare_reduction_redefinition",
[e]={{nil,C,"\'#pragma alloc_text\' is applicable only to functions with C linkage"}},
[b]="redefinition of user-defined reduction for type %0",
[f]={{nil,C,"\'#pragma alloc_text\' is applicable only to functions with C linkage"}},
[c]="redefinition of user-defined reduction for type A",
[g]=k,
[e]=d,
[h]="\'\\#pragma alloc_text\' is applicable only to functions with C linkage",
[f]="redefinition of user\\-defined reduction for type (.*?)",
[b]=a,
[g]=a,
[c]={{nil,C,m}},
[i]=n,
[j]={"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"},
[h]={"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"},
[i]={{J,816,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  // ...\n  for (auto &Function : Functions) {\n    // ...\n    if (getLangOpts().CPlusPlus && !FD->isInExternCContext()) {\n      Diag(Loc, diag::err_pragma_alloc_text_c_linkage);"}},
[k]={{m,22292,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPDeclareReductionDirectiveStart(Scope *S, DeclContext *DC, DeclarationName Name, ArrayRef<std::pair<QualType, SourceLocation>> ReductionTypes, AccessSpecifier AS, Decl *PrevDeclInScope) {\n  // ...\n  for (const auto &TyData : ReductionTypes) {\n    // ...\n    if (I != PreviousRedeclTypes.end()) {\n      Diag(TyData.second, diag::err_omp_declare_reduction_redefinition) << TyData.first;"}},
[l]={
[l]={
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:10:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage","clang/test/Sema/pragma-ms-alloc-text.cpp:35:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage","clang/test/Sema/pragma-ms-alloc-text.cpp:55:23: error: \'#pragma alloc_text\' is applicable only to functions with C linkage"}
["clang/test/OpenMP/declare_reduction_messages.c"]={"clang/test/OpenMP/declare_reduction_messages.c:30:50: error: redefinition of user-defined reduction for type \'long\'","clang/test/OpenMP/declare_reduction_messages.c:41:38: error: redefinition of user-defined reduction for type \'long\'","clang/test/OpenMP/declare_reduction_messages.c:60:37: error: redefinition of user-defined reduction for type \'int\'"}
}
}
},
},
["err_pragma_alloc_text_not_function"]={
["err_omp_declare_simd_inbranch_notinbranch"]={
[d]={{nil,C,"err_pragma_alloc_text_not_function"}},
[j]="err_omp_declare_simd_inbranch_notinbranch",
[e]={{nil,C,"\'#pragma alloc_text\' is applicable only to functions"}},
[b]="unexpected \'%0\' clause, \'%1\' is specified already",
[f]={{nil,C,"\'#pragma alloc_text\' is applicable only to functions"}},
[c]="unexpected \'A\' clause, \'B\' is specified already",
[g]=k,
[e]=d,
[h]="\'\\#pragma alloc_text\' is applicable only to functions",
[f]="unexpected \'(.*?)\' clause, \'(.*?)\' is specified already",
[b]=a,
[g]=a,
[c]={{nil,C,m}},
[i]=u,
[j]={gb,1625925174,ib,jb},
[h]={"20dfd778264a",1459764735,"[OPENMP 4.0] Support for \'inbranch|noinbranch\' clauses in \'declare","[OPENMP 4.0] Support for \'inbranch|noinbranch\' clauses in \'declare\nsimd\'.\n\nAdded parsing/semantic analysis for \'inbranch|notinbranch\' clauses of\n\'#pragma omp declare simd\' construct.\n\nllvm-svn: 265287"},
[i]={{J,811,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  // ...\n  for (auto &Function : Functions) {\n    // ...\n    if (!FD) {\n     Diag(Loc, diag::err_pragma_alloc_text_not_function);"}},
[k]={{t,729,"/// Parses clauses for \'declare simd\' directive.\n///    clause:\n///      \'inbranch\' | \'notinbranch\'\n///      \'simdlen\' \'(\' <expr> \')\'\n///      { \'uniform\' \'(\' <argument_list> \')\' }\n///      { \'aligned \'(\' <argument_list> [ \':\' <alignment> ] \')\' }\n///      { \'linear \'(\' <argument_list> [ \':\' <step> ] \')\' }\nstatic bool parseDeclareSimdClauses(Parser &P, OMPDeclareSimdDeclAttr::BranchStateTy &BS, ExprResult &SimdLen, SmallVectorImpl<Expr *> &Uniforms, SmallVectorImpl<Expr *> &Aligneds, SmallVectorImpl<Expr *> &Alignments, SmallVectorImpl<Expr *> &Linears, SmallVectorImpl<unsigned> &LinModifiers, SmallVectorImpl<Expr *> &Steps) {\n  // ...\n  while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n    // ...\n    // Parse \'inranch|notinbranch\' clauses.\n    if (OMPDeclareSimdDeclAttr::ConvertStrToBranchStateTy(ClauseName, Out)) {\n      if (BS != OMPDeclareSimdDeclAttr::BS_Undefined && BS != Out) {\n       P.Diag(Tok, diag::err_omp_declare_simd_inbranch_notinbranch) << ClauseName << OMPDeclareSimdDeclAttr::ConvertBranchStateTyToStr(BS) << BSRange;"}},
[l]={
[l]={
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:59:23: error: \'#pragma alloc_text\' is applicable only to functions"}
[Fb]={"clang/test/OpenMP/declare_simd_messages.cpp:64:50: error: unexpected \'inbranch\' clause, \'notinbranch\' is specified already","clang/test/OpenMP/declare_simd_messages.cpp:63:44: error: unexpected \'notinbranch\' clause, \'inbranch\' is specified already"}
}
}
},
},
["err_pragma_attr_attr_no_push"]={
["err_omp_declare_target_indirect_device_type"]={
[d]={{nil,u,"err_pragma_attr_attr_no_push"}},
[j]={{nil,s,"err_omp_declare_target_indirect_device_type"}},
[e]={{nil,u,"\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"}},
[b]={{nil,s,"only \'device_type(any)\' clause is allowed with indirect clause"}},
[f]={{nil,u,"\'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"}},
[c]={{nil,s,"only \'device_type(any)\' clause is allowed with indirect clause"}},
[g]=k,
[e]=d,
[h]="\'\\#pragma clang attribute\' attribute with no matching \'\\#pragma clang attribute push\'",
[f]="only \'device_type\\(any\\)\' clause is allowed with indirect clause",
[b]=a,
[g]=a,
[c]={{nil,u,m}},
[i]={{nil,s,u}},
[j]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute\n\nThis commit enables pushing an empty #pragma clang attribute push, then adding\nmultiple attributes to it, then popping them all with #pragma clang attribute\npop, just like #pragma clang diagnostic. We still support the current way of\nadding these, #pragma clang attribute push(__attribute__((...))), by treating it\nlike a combined push/attribute. This is needed to create macros like:\n\nDO_SOMETHING_BEGIN(attr1, attr2, attr3)\n// ...\nDO_SOMETHING_END\n\nrdar://45496947\n\nDifferential revision: https://reviews.llvm.org/D53621\n\nllvm-svn: 345486"},
[h]={qb,1612659633,sb,tb},
[i]={{J,1066,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attr_attr_no_push);"}},
[k]={{t,1948,"void Parser::ParseOMPDeclareTargetClauses(Sema::DeclareTargetContextInfo &DTCI) {\n  // ...\n  if (DTCI.Indirect && DTCI.DT != OMPDeclareTargetDeclAttr::DT_Any)\n    Diag(DeviceTypeLoc, diag::err_omp_declare_target_indirect_device_type);"}},
[l]={
[l]={
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:62:15: error: \'#pragma clang attribute\' attribute with no matching \'#pragma clang attribute push\'"}
[U]={"clang/test/OpenMP/declare_target_messages.cpp:63:34: error: only \'device_type(any)\' clause is allowed with indirect clause"}
}
}
},
},
["err_pragma_attribute_duplicate_subject"]={
["err_omp_declare_target_missing_enter_or_link_clause"]={
[d]={{nil,n,"err_pragma_attribute_duplicate_subject"}},
[j]={{nil,w,"err_omp_declare_target_missing_enter_or_link_clause"}},
[e]={{nil,n,"duplicate attribute subject matcher \'%0\'"}},
[b]={{nil,w,"expected at least one %select{\'enter\' or \'link\'|\'enter\', \'link\' or \'indirect\'}0 clause"}},
[f]={{nil,n,"duplicate attribute subject matcher \'A\'"}},
[c]={{nil,w,{"expected at least one ",{"\'enter\' or \'link\'","\'enter\', \'link\' or \'indirect\'"}," clause"}}},
[g]=k,
[e]=d,
[h]="duplicate attribute subject matcher \'(.*?)\'",
[f]="expected at least one (?:\'enter\' or \'link\'|\'enter\', \'link\' or \'indirect\') clause",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]={{nil,w,u}},
[j]={R,1492508507,U,T},
[h]={Ab,1668641028,T,T},
[i]={{v,1624,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (isAbstractAttrMatcherRule(PrimaryRule)) {\n    // ...\n    } else if (Parens.consumeOpen()) {\n     if (!SubjectMatchRules.insert(std::make_pair(PrimaryRule, SourceRange(RuleLoc, RuleLoc))).second)\n        Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << Name << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleLoc));"},{v,1679,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (!SubjectMatchRules.insert(std::make_pair(SubRule, SourceRange(RuleLoc, RuleEndLoc))).second) {\n      Diag(RuleLoc, diag::err_pragma_attribute_duplicate_subject) << attr::getSubjectMatchRuleSpelling(SubRule) << FixItHint::CreateRemoval(SourceRange(RuleLoc, Tok.is(tok::comma) ? Tok.getLocation() : RuleEndLoc));"}},
[k]={{t,1955,"void Parser::ParseOMPDeclareTargetClauses(Sema::DeclareTargetContextInfo &DTCI) {\n  // ...\n  // For declare target require at least \'to\' or \'link\' to be present.\n if (DTCI.Kind == OMPD_declare_target && RequiresToOrLinkOrIndirectClause && !HasToOrLinkOrIndirectClause)\n    Diag(DTCI.Loc, getLangOpts().OpenMP >= 52 ? diag::err_omp_declare_target_missing_enter_or_link_clause : diag::err_omp_declare_target_missing_to_or_link_clause) << (getLangOpts().OpenMP >= 51 ? 1 : 0);"}},
[l]={
[l]={
[Y]={"clang/test/Parser/pragma-attribute.cpp:93:91: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:94:91: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:94:101: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:95:97: error: duplicate attribute subject matcher \'function\'","clang/test/Parser/pragma-attribute.cpp:96:87: error: duplicate attribute subject matcher \'enum\'","clang/test/Parser/pragma-attribute.cpp:98:102: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:99:112: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:99:133: error: duplicate attribute subject matcher \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:100:113: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'","clang/test/Parser/pragma-attribute.cpp:101:113: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'","clang/test/Parser/pragma-attribute.cpp:101:151: error: duplicate attribute subject matcher \'variable(unless(is_parameter))\'"}
[U]={"clang/test/OpenMP/declare_target_messages.cpp:28:21: error: expected at least one \'enter\', \'link\' or \'indirect\' clause","clang/test/OpenMP/declare_target_messages.cpp:30:21: error: expected at least one \'enter\', \'link\' or \'indirect\' clause","clang/test/OpenMP/declare_target_messages.cpp:34:21: error: expected at least one \'enter\', \'link\' or \'indirect\' clause","clang/test/OpenMP/declare_target_messages.cpp:37:21: error: expected at least one \'enter\', \'link\' or \'indirect\' clause","clang/test/OpenMP/declare_target_messages.cpp:202:21: error: expected at least one \'enter\', \'link\' or \'indirect\' clause","clang/test/OpenMP/declare_target_messages.cpp:206:21: error: expected at least one \'enter\', \'link\' or \'indirect\' clause","clang/test/OpenMP/declare_target_messages.cpp:208:21: error: expected at least one \'enter\', \'link\' or \'indirect\' clause","clang/test/OpenMP/declare_target_messages.cpp:211:21: error: expected at least one \'enter\', \'link\' or \'indirect\' clause","clang/test/OpenMP/declare_target_messages.cpp:213:21: error: expected at least one \'enter\', \'link\' or \'indirect\' clause","clang/test/OpenMP/declare_target_messages.cpp:215:21: error: expected at least one \'enter\', \'link\' or \'indirect\' clause","clang/test/OpenMP/declare_target_messages.cpp:217:21: error: expected at least one \'enter\', \'link\' or \'indirect\' clause","clang/test/OpenMP/declare_target_messages.cpp:232:21: error: expected at least one \'enter\', \'link\' or \'indirect\' clause","clang/test/OpenMP/declare_target_messages.cpp:233:21: error: expected at least one \'enter\', \'link\' or \'indirect\' clause","clang/test/OpenMP/declare_target_messages.cpp:234:21: error: expected at least one \'enter\', \'link\' or \'indirect\' clause"}
}
}
},
},
["err_pragma_attribute_expected_attribute"]={
["err_omp_declare_target_missing_to_or_link_clause"]={
[d]={{nil,n,"err_pragma_attribute_expected_attribute"}},
[j]={{nil,r,"err_omp_declare_target_missing_to_or_link_clause"}},
[e]={{nil,n,"expected an attribute after \'(\'"}},
[b]={{nil,s,"expected at least one %select{\'to\' or \'link\'|\'to\', \'link\' or \'indirect\'}0 clause"},{r,r,"expected at least one \'to\' or \'link\' clause"}},
[f]={{nil,n,"expected an attribute after \'(\'"}},
[c]={{nil,s,{"expected at least one ",{"\'to\' or \'link\'","\'to\', \'link\' or \'indirect\'"}," clause"}},{r,r,"expected at least one \'to\' or \'link\' clause"}},
[g]=k,
[e]=d,
[h]="expected an attribute after \'\\(\'",
[f]="expected at least one (?:\'to\' or \'link\'|\'to\', \'link\' or \'indirect\') clause",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]={{nil,r,u}},
[j]={R,1492508507,U,T},
[h]={qb,1612659633,sb,tb},
[i]={{v,3931,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n/// #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n/// #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n  // Parse the actual attribute.\n  if ((Info->Action == PragmaAttributeInfo::Push && Tok.isNot(tok::eod)) || Info->Action == PragmaAttributeInfo::Attribute) {\n    // ...\n    if (AttributeTokens.empty()) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_attribute);"}},
[k]={{t,1956,"void Parser::ParseOMPDeclareTargetClauses(Sema::DeclareTargetContextInfo &DTCI) {\n  // ...\n  // For declare target require at least \'to\' or \'link\' to be present.\n  if (DTCI.Kind == OMPD_declare_target && RequiresToOrLinkOrIndirectClause && !HasToOrLinkOrIndirectClause)\n   Diag(DTCI.Loc, getLangOpts().OpenMP >= 52 ? diag::err_omp_declare_target_missing_enter_or_link_clause : diag::err_omp_declare_target_missing_to_or_link_clause) << (getLangOpts().OpenMP >= 51 ? 1 : 0);"}},
[l]={
[l]={
[Y]={"clang/test/Parser/pragma-attribute.cpp:109:85: error: expected an attribute after \'(\'","clang/test/Parser/pragma-attribute.cpp:111:31: error: expected an attribute after \'(\'"}
[U]={"clang/test/OpenMP/declare_target_messages.cpp:28:21: error: expected at least one \'to\' or \'link\' clause"}
}
}
},
},
["err_pragma_attribute_expected_attribute_name"]={
["err_omp_declare_target_multiple"]={
[d]={{nil,n,"err_pragma_attribute_expected_attribute_name"}},
[j]="err_omp_declare_target_multiple",
[e]={{nil,n,"expected identifier that represents an attribute name"}},
[b]="%0 appears multiple times in clauses on the same declare target directive",
[f]={{nil,n,"expected identifier that represents an attribute name"}},
[c]="A appears multiple times in clauses on the same declare target directive",
[g]=k,
[e]=d,
[h]="expected identifier that represents an attribute name",
[f]="(.*?) appears multiple times in clauses on the same declare target directive",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]={{nil,r,u},{A,nil,n}},
[j]={R,1492508507,U,T},
[h]={"d69b505e3c67",1462805953,"[OpenMP] Parse+Sema for \'#pragma omp declare target\' syntax version 4.5","[OpenMP] Parse+Sema for \'#pragma omp declare target\' syntax version 4.5\n\nSupport OpenMP version 4.5 syntax for #pragma omp declare target.\n\nSyntax:\n  #pragma omp declare target (extended-list) new-line\nor\n  #pragma omp declare target clause[ [,] clause ... ] new-line\n\nWhere clause is one of the following:\n  to(extended-list)\n  link(list)\n\nDifferential Revision: http://reviews.llvm.org/D20011\n\nllvm-svn: 268925"},
[i]={{v,1847,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n // ...\n } else if (Tok.is(tok::kw___attribute)) {\n   // ...\n   // Parse the comma-separated list of attributes.\n    do {\n      if (Tok.isNot(tok::identifier)) {\n       Diag(Tok, diag::err_pragma_attribute_expected_attribute_name);"}},
[k]={{t,1921,"void Parser::ParseOMPDeclareTargetClauses(Sema::DeclareTargetContextInfo &DTCI) {\n  // ...\n  while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n   // ...\n   if (DTCI.Kind == OMPD_declare_target || HasIdentifier) {\n      auto &&Callback = [this, MT, &DTCI](CXXScopeSpec &SS, DeclarationNameInfo NameInfo) {\n       // ...\n       if (!FirstMapping)\n         Diag(NameInfo.getLoc(), diag::err_omp_declare_target_multiple) << NameInfo.getName();"}},
[l]={
[l]={
[Y]={"clang/test/Parser/pragma-attribute.cpp:121:46: error: expected identifier that represents an attribute name","clang/test/Parser/pragma-attribute.cpp:171:45: error: expected identifier that represents an attribute name","clang/test/Parser/pragma-attribute.cpp:217:65: error: expected identifier that represents an attribute name"}
[U]={"clang/test/OpenMP/declare_target_messages.cpp:201:32: error: \'x\' appears multiple times in clauses on the same declare target directive","clang/test/OpenMP/declare_target_messages.cpp:202:37: error: \'x\' appears multiple times in clauses on the same declare target directive"}
}
}
},
},
["err_pragma_attribute_expected_attribute_syntax"]={
["err_omp_declare_target_to_and_link"]={
[d]={{nil,n,"err_pragma_attribute_expected_attribute_syntax"}},
[j]="err_omp_declare_target_to_and_link",
[e]={{nil,n,"expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"}},
[b]="%0 must not appear in both clauses \'to\' and \'link\'",
[f]={{nil,n,"expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"}},
[c]="A must not appear in both clauses \'to\' and \'link\'",
[g]=k,
[e]=d,
[h]="expected an attribute that is specified using the GNU, C\\+\\+11 or \'__declspec\' syntax",
[f]="(.*?) must not appear in both clauses \'to\' and \'link\'",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]=n,
[j]={R,1492508507,U,T},
[h]={"d69b505e3c67",1462805953,"[OpenMP] Parse+Sema for \'#pragma omp declare target\' syntax version 4.5","[OpenMP] Parse+Sema for \'#pragma omp declare target\' syntax version 4.5\n\nSupport OpenMP version 4.5 syntax for #pragma omp declare target.\n\nSyntax:\n  #pragma omp declare target (extended-list) new-line\nor\n  #pragma omp declare target clause[ [,] clause ... ] new-line\n\nWhere clause is one of the following:\n  to(extended-list)\n  link(list)\n\nDifferential Revision: http://reviews.llvm.org/D20011\n\nllvm-svn: 268925"},
[i]={{v,1872,"void Parser::HandlePragmaAttribute() {\n  // ...\n if ((Tok.is(tok::l_square) && NextToken().is(tok::l_square)) || Tok.isRegularKeywordAttribute()) {\n // ...\n } else if (Tok.is(tok::kw___attribute)) {\n  // ...\n  } else if (Tok.is(tok::kw___declspec)) {\n  // ...\n  } else {\n    Diag(Tok, diag::err_pragma_attribute_expected_attribute_syntax);"}},
[k]={{m,23083,"void Sema::ActOnOpenMPDeclareTargetName(NamedDecl *ND, SourceLocation Loc, OMPDeclareTargetDeclAttr::MapTypeTy MT, DeclareTargetContextInfo &DTCI) {\n  // ...\n  if (ActiveAttr && (*ActiveAttr)->getMapType() != MT && (*ActiveAttr)->getLevel() == Level) {\n    Diag(Loc, diag::err_omp_declare_target_to_and_link) << ND;"}},
[l]={
[l]={
[Y]={"clang/test/Parser/pragma-attribute.cpp:176:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:177:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:178:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax","clang/test/Parser/pragma-attribute.cpp:180:31: error: expected an attribute that is specified using the GNU, C++11 or \'__declspec\' syntax"}
[U]={"clang/test/OpenMP/declare_target_messages.cpp:203:33: error: \'x\' must not appear in both clauses \'to\' and \'link\'"}
}
}
},
},
["err_pragma_attribute_expected_period"]={
["err_omp_declare_target_unexpected_clause"]={
[d]={{nil,u,"err_pragma_attribute_expected_period"}},
[j]="err_omp_declare_target_unexpected_clause",
[e]={{nil,u,"expected \'.\' after pragma attribute namespace %0"}},
[b]={{nil,s,"unexpected \'%0\' clause, only %select{\'device_type\'|\'to\' or \'link\'|\'to\', \'link\' or \'device_type\'|\'device_type\', \'indirect\'|\'to\', \'link\', \'device_type\' or \'indirect\'}1 clauses expected"},{r,r,"unexpected \'%0\' clause, only %select{\'device_type\'|\'to\' or \'link\'|\'to\', \'link\' or \'device_type\'}1 clauses expected"},{A,p,"unexpected \'%0\' clause, only %select{\'to\' or \'link\'|\'to\', \'link\' or \'device_type\'}1 clauses expected"},{v,nil,"unexpected \'%0\' clause, only \'to\' or \'link\' clauses expected"}},
[f]={{nil,u,"expected \'.\' after pragma attribute namespace A"}},
[c]={{nil,s,{"unexpected \'A\' clause, only ",{"\'device_type\'","\'to\' or \'link\'","\'to\', \'link\' or \'device_type\'","\'device_type\', \'indirect\'","\'to\', \'link\', \'device_type\' or \'indirect\'"}," clauses expected"}},{r,r,{"unexpected \'A\' clause, only ",{"\'device_type\'","\'to\' or \'link\'","\'to\', \'link\' or \'device_type\'"}," clauses expected"}},{A,p,{"unexpected \'A\' clause, only ",{"\'to\' or \'link\'","\'to\', \'link\' or \'device_type\'"}," clauses expected"}},{v,nil,"unexpected \'A\' clause, only \'to\' or \'link\' clauses expected"}},
[g]=k,
[e]=d,
[h]="expected \'\\.\' after pragma attribute namespace (.*?)",
[f]="unexpected \'(.*?)\' clause, only (?:\'device_type\'|\'to\' or \'link\'|\'to\', \'link\' or \'device_type\'|\'device_type\', \'indirect\'|\'to\', \'link\', \'device_type\' or \'indirect\') clauses expected",
[b]=a,
[g]=a,
[c]={{nil,u,y}},
[i]=u,
[j]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute\n\nNamespaces are introduced by adding an \"identifier.\" before a\npush/pop directive. Pop directives with namespaces can only pop a\nattribute group that was pushed with the same namespace. Push and pop\ndirectives that don\'t opt into namespaces have the same semantics.\n\nThis is necessary to prevent a pitfall of using multiple #pragma\nclang attribute directives spread out in a large file, particularly\nwhen macros are involved. It isn\'t easy to see which pop corripsonds\nto which push, so its easy to inadvertently pop the wrong group.\n\nDifferential revision: https://reviews.llvm.org/D55628\n\nllvm-svn: 349845"},
[h]={"d69b505e3c67",1462805953,"[OpenMP] Parse+Sema for \'#pragma omp declare target\' syntax version 4.5","[OpenMP] Parse+Sema for \'#pragma omp declare target\' syntax version 4.5\n\nSupport OpenMP version 4.5 syntax for #pragma omp declare target.\n\nSyntax:\n  #pragma omp declare target (extended-list) new-line\nor\n  #pragma omp declare target clause[ [,] clause ... ] new-line\n\nWhere clause is one of the following:\n  to(extended-list)\n link(list)\n\nDifferential Revision: http://reviews.llvm.org/D20011\n\nllvm-svn: 268925"},
[i]={{v,3866,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n/// #pragma clang attribute namespace.push (attribute, subject-set)\n/// #pragma clang attribute namespace.push\n/// #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Parse the optional namespace followed by a period.\n  if (Tok.is(tok::identifier)) {\n    // ...\n    if (!II->isStr(\"push\") && !II->isStr(\"pop\")) {\n      // ...\n      if (!Tok.is(tok::period)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_period) << II;"}},
[k]={{t,1857,"void Parser::ParseOMPDeclareTargetClauses(Sema::DeclareTargetContextInfo &DTCI) {\n // ...\n while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n   // ...\n   if (HasIdentifier) {\n     // ...\n     if (!IsDeviceTypeClause && !IsIndirectClause && DTCI.Kind == OMPD_begin_declare_target) {\n        Diag(Tok, diag::err_omp_declare_target_unexpected_clause) << ClauseName << (getLangOpts().OpenMP >= 51 ? 3 : 0);"},{t,1864,"void Parser::ParseOMPDeclareTargetClauses(Sema::DeclareTargetContextInfo &DTCI) {\n  // ...\n  while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n    // ...\n    if (HasIdentifier) {\n      // ...\n      if (!IsDeviceTypeClause && !IsToEnterOrLinkClause && !IsIndirectClause) {\n        Diag(Tok, getLangOpts().OpenMP >= 52 ? diag::err_omp_declare_target_unexpected_clause_52 : diag::err_omp_declare_target_unexpected_clause) << ClauseName << (getLangOpts().OpenMP >= 51 ? 4 : getLangOpts().OpenMP >= 50 ? 2 : 1);"}},
[l]={
[l]={
[Y]={"clang/test/Parser/pragma-attribute.cpp:105:110: error: expected \'.\' after pragma attribute namespace \'pushpop\'"}
[U]={"clang/test/OpenMP/declare_target_messages.cpp:28:28: error: unexpected \'map\' clause, only \'to\', \'link\' or \'device_type\' clauses expected","clang/test/OpenMP/declare_target_messages.cpp:72:39: error: unexpected \'allocate\' clause, only \'to\', \'link\' or \'device_type\' clauses expected"}
}
}
},
},
["err_pragma_attribute_expected_push_pop_paren"]={
["err_omp_declare_target_unexpected_clause_52"]={
[d]={{nil,u,"err_pragma_attribute_expected_push_pop_paren"}},
[j]={{nil,w,"err_omp_declare_target_unexpected_clause_52"}},
[e]={{nil,u,"expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"}},
[b]={{nil,w,"unexpected \'%0\' clause, only %select{\'device_type\'|\'enter\' or \'link\'|\'enter\', \'link\' or \'device_type\'|\'device_type\', \'indirect\'|\'enter\', \'link\', \'device_type\' or \'indirect\'}1 clauses expected"}},
[f]={{nil,u,"expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"}},
[c]={{nil,w,{"unexpected \'A\' clause, only ",{"\'device_type\'","\'enter\' or \'link\'","\'enter\', \'link\' or \'device_type\'","\'device_type\', \'indirect\'","\'enter\', \'link\', \'device_type\' or \'indirect\'"}," clauses expected"}}},
[g]=k,
[e]=d,
[h]="expected \'push\', \'pop\', or \'\\(\' after \'\\#pragma clang attribute\'",
[f]="unexpected \'(.*?)\' clause, only (?:\'device_type\'|\'enter\' or \'link\'|\'enter\', \'link\' or \'device_type\'|\'device_type\', \'indirect\'|\'enter\', \'link\', \'device_type\' or \'indirect\') clauses expected",
[b]=a,
[g]=a,
[c]={{nil,u,y}},
[i]={{nil,w,u}},
[j]={"a7cc6b360fe9",1540780161,"Support for groups of attributes in #pragma clang attribute","Support for groups of attributes in #pragma clang attribute\n\nThis commit enables pushing an empty #pragma clang attribute push, then adding\nmultiple attributes to it, then popping them all with #pragma clang attribute\npop, just like #pragma clang diagnostic. We still support the current way of\nadding these, #pragma clang attribute push(__attribute__((...))), by treating it\nlike a combined push/attribute. This is needed to create macros like:\n\nDO_SOMETHING_BEGIN(attr1, attr2, attr3)\n// ...\nDO_SOMETHING_END\n\nrdar://45496947\n\nDifferential revision: https://reviews.llvm.org/D53621\n\nllvm-svn: 345486"},
[h]={Ab,1668641028,T,T},
[i]={{v,3876,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n  if (!Tok.isOneOf(tok::identifier, tok::l_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_expected_push_pop_paren);"}},
[k]={{t,1863,"void Parser::ParseOMPDeclareTargetClauses(Sema::DeclareTargetContextInfo &DTCI) {\n // ...\n  while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n   // ...\n   if (HasIdentifier) {\n     // ...\n     if (!IsDeviceTypeClause && !IsToEnterOrLinkClause && !IsIndirectClause) {\n       Diag(Tok, getLangOpts().OpenMP >= 52 ? diag::err_omp_declare_target_unexpected_clause_52 : diag::err_omp_declare_target_unexpected_clause) << ClauseName << (getLangOpts().OpenMP >= 51 ? 4 : getLangOpts().OpenMP >= 50 ? 2 : 1);"}},
[l]={
[l]={
[Y]={"clang/test/Parser/pragma-attribute.cpp:103:109: error: expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'","clang/test/Parser/pragma-attribute.cpp:104:25: error: expected \'push\', \'pop\', or \'(\' after \'#pragma clang attribute\'"}
[U]={"clang/test/OpenMP/declare_target_messages.cpp:28:28: error: unexpected \'map\' clause, only \'enter\', \'link\', \'device_type\' or \'indirect\' clauses expected","clang/test/OpenMP/declare_target_messages.cpp:72:39: error: unexpected \'allocate\' clause, only \'enter\', \'link\', \'device_type\' or \'indirect\' clauses expected"}
}
}
},
},
["err_pragma_attribute_expected_subject_identifier"]={
["err_omp_declare_target_unexpected_enter_clause"]={
[d]={{nil,n,"err_pragma_attribute_expected_subject_identifier"}},
[j]={{nil,w,"err_omp_declare_target_unexpected_enter_clause"}},
[e]={{nil,n,"expected an identifier that corresponds to an attribute subject rule"}},
[b]={{nil,w,"unexpected \'enter\' clause, use \'to\' instead"}},
[f]={{nil,n,"expected an identifier that corresponds to an attribute subject rule"}},
[c]={{nil,w,"unexpected \'enter\' clause, use \'to\' instead"}},
[g]=k,
[e]=d,
[h]="expected an identifier that corresponds to an attribute subject rule",
[f]="unexpected \'enter\' clause, use \'to\' instead",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]={{nil,w,u}},
[j]={R,1492508507,U,T},
[h]={Ab,1668641028,T,T},
[i]={{v,1602,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (Name.empty()) {\n     Diag(Tok, diag::err_pragma_attribute_expected_subject_identifier);"}},
[k]={{t,1851,"void Parser::ParseOMPDeclareTargetClauses(Sema::DeclareTargetContextInfo &DTCI) {\n  // ...\n  while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n    // ...\n    if (HasIdentifier) {\n      // ...\n      if (getLangOpts().OpenMP <= 51 && ClauseName == \"enter\") {\n       Diag(Tok, diag::err_omp_declare_target_unexpected_enter_clause);"}}
[l]={
[Y]={"clang/test/Parser/pragma-attribute.cpp:44:76: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:47:90: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:50:76: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:52:81: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:53:80: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:54:91: error: expected an identifier that corresponds to an attribute subject rule","clang/test/Parser/pragma-attribute.cpp:208:71: error: expected an identifier that corresponds to an attribute subject rule"}
}
},
},
["err_pragma_attribute_expected_subject_sub_identifier"]={
["err_omp_declare_target_unexpected_to_clause"]={
[d]={{nil,n,"err_pragma_attribute_expected_subject_sub_identifier"}},
[j]={{nil,w,"err_omp_declare_target_unexpected_to_clause"}},
[e]={{nil,n,"expected an identifier that corresponds to an attribute subject matcher sub-rule; \'%0\' matcher %select{does not support sub-rules|supports the following sub-rules: %2|}1"}},
[b]={{nil,w,"unexpected \'to\' clause, use \'enter\' instead"}},
[f]={{nil,n,{"expected an identifier that corresponds to an attribute subject matcher sub-rule; \'A\' matcher ",{"does not support sub-rules","supports the following sub-rules: C",a}}}},
[c]={{nil,w,"unexpected \'to\' clause, use \'enter\' instead"}},
[g]=k,
[e]=d,
[h]="expected an identifier that corresponds to an attribute subject matcher sub\\-rule; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?)|)",
[f]="unexpected \'to\' clause, use \'enter\' instead",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]={{nil,w,u}},
[j]={R,1492508507,U,T},
[h]={Ab,1668641028,T,T},
[i]={{v,1565,"static void diagnoseExpectedAttributeSubjectSubRule(Parser &PRef, attr::SubjectMatchRule PrimaryRule, StringRef PrimaryRuleName, SourceLocation SubRuleLoc) {\n auto Diagnostic = PRef.Diag(SubRuleLoc, diag::err_pragma_attribute_expected_subject_sub_identifier) << PrimaryRuleName;"}},
[k]={{t,1847,"void Parser::ParseOMPDeclareTargetClauses(Sema::DeclareTargetContextInfo &DTCI) {\n  // ...\n  while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n    // ...\n    if (HasIdentifier) {\n     // ...\n      // Starting with OpenMP 5.2 the `to` clause has been replaced by the\n      // `enter` clause.\n      if (getLangOpts().OpenMP >= 52 && ClauseName == \"to\") {\n        Diag(Tok, diag::err_omp_declare_target_unexpected_to_clause);"}},
[l]={
[l]={
[Y]={"clang/test/Parser/pragma-attribute.cpp:66:89: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:73:99: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:74:101: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'namespace\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:87:99: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:88:96: error: expected an identifier that corresponds to an attribute subject matcher sub-rule; \'enum\' matcher does not support sub-rules"}
[U]={"clang/test/OpenMP/declare_target_messages.cpp:30:28: error: unexpected \'to\' clause, use \'enter\' instead","clang/test/OpenMP/declare_target_messages.cpp:34:28: error: unexpected \'to\' clause, use \'enter\' instead","clang/test/OpenMP/declare_target_messages.cpp:37:28: error: unexpected \'to\' clause, use \'enter\' instead","clang/test/OpenMP/declare_target_messages.cpp:202:28: error: unexpected \'to\' clause, use \'enter\' instead","clang/test/OpenMP/declare_target_messages.cpp:206:28: error: unexpected \'to\' clause, use \'enter\' instead","clang/test/OpenMP/declare_target_messages.cpp:208:28: error: unexpected \'to\' clause, use \'enter\' instead","clang/test/OpenMP/declare_target_messages.cpp:211:28: error: unexpected \'to\' clause, use \'enter\' instead","clang/test/OpenMP/declare_target_messages.cpp:213:28: error: unexpected \'to\' clause, use \'enter\' instead","clang/test/OpenMP/declare_target_messages.cpp:215:28: error: unexpected \'to\' clause, use \'enter\' instead","clang/test/OpenMP/declare_target_messages.cpp:217:28: error: unexpected \'to\' clause, use \'enter\' instead","clang/test/OpenMP/declare_target_messages.cpp:232:28: error: unexpected \'to\' clause, use \'enter\' instead","clang/test/OpenMP/declare_target_messages.cpp:233:28: error: unexpected \'to\' clause, use \'enter\' instead","clang/test/OpenMP/declare_target_messages.cpp:234:28: error: unexpected \'to\' clause, use \'enter\' instead"}
}
}
},
},
["err_pragma_attribute_extra_tokens_after_attribute"]={
["err_omp_declare_target_wrong_clause_after_implicit_enter"]={
[d]={{nil,n,"err_pragma_attribute_extra_tokens_after_attribute"}},
[j]={{nil,w,"err_omp_declare_target_wrong_clause_after_implicit_enter"}},
[e]={{nil,n,"extra tokens after attribute in a \'#pragma clang attribute push\'"}},
[b]={{nil,w,"unexpected clause after an implicit \'enter\' clause"}},
[f]={{nil,n,"extra tokens after attribute in a \'#pragma clang attribute push\'"}},
[c]={{nil,w,"unexpected clause after an implicit \'enter\' clause"}},
[g]=k,
[e]=d,
[h]="extra tokens after attribute in a \'\\#pragma clang attribute push\'",
[f]="unexpected clause after an implicit \'enter\' clause",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]={{nil,w,u}},
[j]={R,1492508507,U,T},
[h]={Ab,1668641028,T,T},
[i]={{v,1957,"void Parser::HandlePragmaAttribute() {\n  // ...\n  // Tokens following an ill-formed attribute will remain in the token stream\n // and must be removed.\n if (Tok.isNot(tok::eof)) {\n   Diag(Tok, diag::err_pragma_attribute_extra_tokens_after_attribute);"}},
[k]={{t,1937,"void Parser::ParseOMPDeclareTargetClauses(Sema::DeclareTargetContextInfo &DTCI) {\n  // ...\n  while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n   // ...\n   if (!HasIdentifier && Tok.isNot(tok::annot_pragma_openmp_end)) {\n     Diag(Tok, getLangOpts().OpenMP >= 52 ? diag::err_omp_declare_target_wrong_clause_after_implicit_enter : diag::err_omp_declare_target_wrong_clause_after_implicit_to);"}}
[l]={
[Y]={"clang/test/Parser/pragma-attribute.cpp:124:76: error: extra tokens after attribute in a \'#pragma clang attribute push\'"}
}
},
},
["err_pragma_attribute_invalid_argument"]={
["err_omp_declare_target_wrong_clause_after_implicit_to"]={
[d]={{nil,n,"err_pragma_attribute_invalid_argument"}},
[j]={{nil,w,"err_omp_declare_target_wrong_clause_after_implicit_to"}},
[e]={{nil,n,"unexpected argument \'%0\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'"}},
[b]={{nil,w,"unexpected clause after an implicit \'to\' clause"}},
[f]={{nil,n,"unexpected argument \'A\' to \'#pragma clang attribute\'; expected \'push\' or \'pop\'"}},
[c]={{nil,w,"unexpected clause after an implicit \'to\' clause"}},
[g]=k,
[e]=d,
[h]="unexpected argument \'(.*?)\' to \'\\#pragma clang attribute\'; expected \'push\' or \'pop\'",
[f]="unexpected clause after an implicit \'to\' clause",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]={{nil,w,u}},
[j]={R,1492508507,U,T},
[h]={Ab,1668641028,T,T},
[i]={{v,3897,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n///  #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n  // ...\n  } else {\n    // ...\n    if (II->isStr(\"push\"))\n    // ...\n    else if (II->isStr(\"pop\"))\n    // ...\n    else {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_invalid_argument) << PP.getSpelling(Tok);"}}
[k]={{t,1938,"void Parser::ParseOMPDeclareTargetClauses(Sema::DeclareTargetContextInfo &DTCI) {\n  // ...\n  while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n    // ...\n    if (!HasIdentifier && Tok.isNot(tok::annot_pragma_openmp_end)) {\n      Diag(Tok, getLangOpts().OpenMP >= 52 ? diag::err_omp_declare_target_wrong_clause_after_implicit_enter : diag::err_omp_declare_target_wrong_clause_after_implicit_to);"}}
},
},
["err_pragma_attribute_invalid_matchers"]={
["err_omp_declare_variant_diff"]={
[d]={{nil,n,"err_pragma_attribute_invalid_matchers"}},
[j]={{nil,p,"err_omp_declare_variant_diff"}},
[e]={{nil,n,"attribute %0 can\'t be applied to %1"}},
[b]={{nil,p,"function with \'#pragma omp declare variant\' has a different %select{calling convention|return type|constexpr specification|inline specification|storage class|linkage}0"}},
[f]={{nil,n,"attribute A can\'t be applied to B"}},
[c]={{nil,p,{"function with \'#pragma omp declare variant\' has a different ",{"calling convention","return type","constexpr specification","inline specification","storage class","linkage"}}}},
[g]=k,
[e]=d,
[h]="attribute (.*?) can\'t be applied to (.*?)",
[f]="function with \'\\#pragma omp declare variant\' has a different (?:calling convention|return type|constexpr specification|inline specification|storage class|linkage)",
[b]=a,
[g]=a,
[c]={{nil,n,m}},
[i]={{nil,p,n}},
[j]={R,1492508507,U,T},
[h]={"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"},
[i]={{J,1048,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  if (!Rules.empty()) {\n    auto Diagnostic = Diag(PragmaLoc, diag::err_pragma_attribute_invalid_matchers) << Attribute;"}},
[k]={{m,7644,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  if (areMultiversionVariantFunctionsCompatible(FD, NewFD, PartialDiagnostic::NullDiagnostic(), PartialDiagnosticAt(SourceLocation(), PartialDiagnostic::NullDiagnostic()), PartialDiagnosticAt(VariantRef->getExprLoc(), PDiag(diag::err_omp_declare_variant_doesnt_support)), PartialDiagnosticAt(VariantRef->getExprLoc(), PDiag(diag::err_omp_declare_variant_diff) << FD->getLocation()),"}},
[l]={
[l]={
[Y]={"clang/test/Parser/pragma-attribute.cpp:126:15: error: attribute \'objc_bridge_related\' can\'t be applied to \'function\'","clang/test/Parser/pragma-attribute.cpp:185:15: error: attribute \'uninitialized\' can\'t be applied to \'function\'","clang/test/Parser/pragma-attribute.cpp:187:15: error: attribute \'uninitialized\' can\'t be applied to \'variable\'","clang/test/Parser/pragma-attribute.cpp:189:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_thread_local)\'","clang/test/Parser/pragma-attribute.cpp:191:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_global)\'","clang/test/Parser/pragma-attribute.cpp:193:15: error: attribute \'uninitialized\' can\'t be applied to \'variable(is_parameter)\', and \'variable(unless(is_parameter))\'"}
["clang/test/OpenMP/declare_variant_messages.cpp"]={"clang/test/OpenMP/declare_variant_messages.cpp:224:29: error: function with \'#pragma omp declare variant\' has a different storage class","clang/test/OpenMP/declare_variant_messages.cpp:229:29: error: function with \'#pragma omp declare variant\' has a different storage class","clang/test/OpenMP/declare_variant_messages.cpp:234:29: error: function with \'#pragma omp declare variant\' has a different inline specification","clang/test/OpenMP/declare_variant_messages.cpp:239:29: error: function with \'#pragma omp declare variant\' has a different inline specification"}
}
}
},
},
["err_pragma_attribute_invalid_subject_set_specifier"]={
["err_omp_declare_variant_doesnt_support"]={
[d]={{nil,n,"err_pragma_attribute_invalid_subject_set_specifier"}},
[j]={{nil,p,"err_omp_declare_variant_doesnt_support"}},
[e]={{nil,n,"expected attribute subject set specifier \'apply_to\'"}},
[b]={{nil,p,"\'#pragma omp declare variant\' does not support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function}0"}},
[f]={{nil,n,"expected attribute subject set specifier \'apply_to\'"}},
[c]={{nil,p,{"\'#pragma omp declare variant\' does not support ",{"function templates","virtual functions","deduced return types","constructors","destructors","deleted functions","defaulted functions","constexpr functions","consteval function"}}}},
[g]=k,
[e]=d,
[h]="expected attribute subject set specifier \'apply_to\'",
[f]="\'\\#pragma omp declare variant\' does not support (?:function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions|consteval function)",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]={{nil,p,n}},
[j]={R,1492508507,U,T},
[h]={"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"},
[i]={{v,1922,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"},{v,1930,"void Parser::HandlePragmaAttribute() {\n  // ...\n  if (!II->isStr(\"apply_to\")) {\n    createExpectedAttributeSubjectRulesTokenDiagnostic(diag::err_pragma_attribute_invalid_subject_set_specifier, Attrs, MissingAttributeSubjectRulesRecoveryPoint::ApplyTo, *this);"}},
[k]={{m,7599,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  if (const auto *CXXFD = dyn_cast<CXXMethodDecl>(FD)) {\n    if (CXXFD->isVirtual()) {\n      Diag(FD->getLocation(), diag::err_omp_declare_variant_doesnt_support) << VirtFuncs;"},{m,7605,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  if (const auto *CXXFD = dyn_cast<CXXMethodDecl>(FD)) {\n    // ...\n    if (isa<CXXConstructorDecl>(FD)) {\n      Diag(FD->getLocation(), diag::err_omp_declare_variant_doesnt_support) << Constructors;"},{m,7611,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  if (const auto *CXXFD = dyn_cast<CXXMethodDecl>(FD)) {\n    // ...\n    if (isa<CXXDestructorDecl>(FD)) {\n      Diag(FD->getLocation(), diag::err_omp_declare_variant_doesnt_support) << Destructors;"},{m,7618,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  if (FD->isDeleted()) {\n    Diag(FD->getLocation(), diag::err_omp_declare_variant_doesnt_support) << DeletedFuncs;"},{m,7624,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  if (FD->isDefaulted()) {\n    Diag(FD->getLocation(), diag::err_omp_declare_variant_doesnt_support) << DefaultedFuncs;"},{m,7630,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  if (FD->isConstexpr()) {\n    Diag(FD->getLocation(), diag::err_omp_declare_variant_doesnt_support) << (NewFD->isConsteval() ? ConstevalFuncs : ConstexprFuncs);"},{m,7642,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  if (areMultiversionVariantFunctionsCompatible(FD, NewFD, PartialDiagnostic::NullDiagnostic(), PartialDiagnosticAt(SourceLocation(), PartialDiagnostic::NullDiagnostic()), PartialDiagnosticAt(VariantRef->getExprLoc(), PDiag(diag::err_omp_declare_variant_doesnt_support)), PartialDiagnosticAt(VariantRef->getExprLoc(), PDiag(diag::err_omp_declare_variant_diff) << FD->getLocation()),"}},
[l]={
[l]={
[Y]={"clang/test/Parser/pragma-attribute.cpp:27:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:28:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:29:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:30:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:31:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:32:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:33:64: error: expected attribute subject set specifier \'apply_to\'","clang/test/Parser/pragma-attribute.cpp:34:64: error: expected attribute subject set specifier \'apply_to\'"}
[zb]={"clang/test/OpenMP/declare_variant_clauses_messages.cpp:59:16: error: \'#pragma omp declare variant\' does not support virtual functions","clang/test/OpenMP/declare_variant_clauses_messages.cpp:72:16: error: \'#pragma omp declare variant\' does not support virtual functions"}
}
}
},
},
["err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"]={
["err_omp_declare_variant_duplicate_nested_trait"]={
[d]={{nil,n,"err_pragma_attribute_matcher_negated_subrule_contradicts_subrule"}},
[j]={{nil,A,"err_omp_declare_variant_duplicate_nested_trait"}},
[e]={{nil,n,"negated attribute subject matcher sub-rule \'%0\' contradicts sub-rule \'%1\'"}},
[b]={{nil,A,"nested OpenMP context selector contains duplicated trait \'%0\' in selector \'%1\' and set \'%2\' with different score"}},
[f]={{nil,n,"negated attribute subject matcher sub-rule \'A\' contradicts sub-rule \'B\'"}},
[c]={{nil,A,"nested OpenMP context selector contains duplicated trait \'A\' in selector \'B\' and set \'C\' with different score"}},
[g]=k,
[e]=d,
[h]="negated attribute subject matcher sub\\-rule \'(.*?)\' contradicts sub\\-rule \'(.*?)\'",
[f]="nested OpenMP context selector contains duplicated trait \'(.*?)\' in selector \'(.*?)\' and set \'(.*?)\' with different score",
[b]=a,
[g]=a,
[c]={{nil,n,m}},
[i]={{nil,A,u}},
[j]={R,1492508507,U,T},
[h]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)","[OpenMP] Support nested OpenMP context selectors (declare variant)\n\nDue to `omp begin/end declare variant`, OpenMP context selectors can be\nnested. This patch adds initial support for this so we can use it for\ntarget math variants. We should improve the detection of \"equivalent\"\nscores and user conditions, we should also revisit the data structures\nof the OMPTraitInfo object, however, both are not pressing issues right\nnow.\n\nReviewed By: JonChesterfield\n\nDifferential Revision: https://reviews.llvm.org/D85877"},
[i]={{J,1036,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n  // Figure out which subject matching rules are valid.\n  if (StrictSubjectMatchRuleSet.empty()) {\n    // ...\n    for (const auto &Rule : Rules) {\n      // ...\n      if (It != RulesToFirstSpecifiedNegatedSubRule.end() && It->second != Rule) {\n       // ...\n       Diag(It->second.second.getBegin(), diag::err_pragma_attribute_matcher_negated_subrule_contradicts_subrule) << attr::getSubjectMatchRuleSpelling(attr::SubjectMatchRule(It->second.first)) << attr::getSubjectMatchRuleSpelling(MatchRule) << Rule.second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, It->second.second));"}},
[k]={{t,1607,"bool Parser::parseOMPDeclareVariantMatchClause(SourceLocation Loc, OMPTraitInfo &TI, OMPTraitInfo *ParentTI) {\n  // ...\n  // Merge the parent/outer trait info into the one we just parsed and diagnose\n  // problems.\n  // TODO: Keep some source location in the TI to provide better diagnostics.\n  // TODO: Perform some kind of equivalence check on the condition and score\n  //      expressions.\n  for (const OMPTraitSet &ParentSet : ParentTI->Sets) {\n    // ...\n    for (OMPTraitSet &Set : TI.Sets) {\n      // ...\n      for (const OMPTraitSelector &ParentSelector : ParentSet.Selectors) {\n        // ...\n        for (OMPTraitSelector &Selector : Set.Selectors) {\n          // ...\n          for (const OMPTraitProperty &ParentProperty : ParentSelector.Properties) {\n           // ...\n           for (OMPTraitProperty &Property : Selector.Properties) {\n              // ...\n              if (Selector.Kind == llvm::omp::TraitSelector::user_condition) {\n              // ...\n              } else if (Selector.ScoreOrCondition != ParentSelector.ScoreOrCondition) {\n                Diag(Loc, diag::err_omp_declare_variant_duplicate_nested_trait) << getOpenMPContextTraitPropertyName(ParentProperty.Kind, ParentProperty.RawString) << getOpenMPContextTraitSelectorName(ParentSelector.Kind) << getOpenMPContextTraitSetName(ParentSet.Kind);"}},
[l]={
[l]={
["clang/test/Sema/pragma-attribute-strict-subjects.c"]={"clang/test/Sema/pragma-attribute-strict-subjects.c:25:130: error: negated attribute subject matcher sub-rule \'variable(unless(is_parameter))\' contradicts sub-rule \'variable(is_parameter)\'","clang/test/Sema/pragma-attribute-strict-subjects.c:30:106: error: negated attribute subject matcher sub-rule \'variable(unless(is_parameter))\' contradicts sub-rule \'variable(is_global)\'"}
[ub]={"clang/test/OpenMP/declare_variant_messages.c:207:1: error: nested OpenMP context selector contains duplicated trait \'llvm\' in selector \'vendor\' and set \'implementation\' with different score"}
}
}
},
},
["err_pragma_attribute_matcher_subrule_contradicts_rule"]={
["err_omp_declare_variant_incompat_attributes"]={
[d]={{nil,n,"err_pragma_attribute_matcher_subrule_contradicts_rule"}},
[j]={{nil,p,"err_omp_declare_variant_incompat_attributes"}},
[e]={{nil,n,"redundant attribute subject matcher sub-rule \'%0\'; \'%1\' already matches those declarations"}},
[b]={{nil,p,"\'#pragma omp declare variant\' is not compatible with any target-specific attributes"}},
[f]={{nil,n,"redundant attribute subject matcher sub-rule \'A\'; \'B\' already matches those declarations"}},
[c]={{nil,p,"\'#pragma omp declare variant\' is not compatible with any target-specific attributes"}},
[g]=k,
[e]=d,
[h]="redundant attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' already matches those declarations",
[f]="\'\\#pragma omp declare variant\' is not compatible with any target\\-specific attributes",
[b]=a,
[g]=a,
[c]={{nil,n,m}},
[i]={{nil,p,n}},
[j]={R,1492508507,U,T},
[h]={"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"},
[i]={{J,953,"void Sema::ActOnPragmaAttributeAttribute(ParsedAttr &Attribute, SourceLocation PragmaLoc, attr::ParsedSubjectMatchRuleSet Rules) {\n  // ...\n // Figure out which subject matching rules are valid.\n if (StrictSubjectMatchRuleSet.empty()) {\n   // ...\n    for (const auto &Rule : Rules) {\n     // ...\n     if (It != Rules.end()) {\n       // ...\n        Diag(Rule.second.getBegin(), diag::err_pragma_attribute_matcher_subrule_contradicts_rule) << attr::getSubjectMatchRuleSpelling(MatchRule) << attr::getSubjectMatchRuleSpelling(*ParentRule) << It->second << FixItHint::CreateRemoval(replacementRangeForListElement(*this, Rule.second));"}},
[k]={{m,7382,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n // ...\n // OpenMP is not compatible with multiversion function attributes.\n  if (HasMultiVersionAttributes(FD)) {\n   Diag(FD->getLocation(), diag::err_omp_declare_variant_incompat_attributes) << SR;"}},
[l]={
[l]={
["clang/test/Sema/pragma-attribute-strict-subjects.c"]={"clang/test/Sema/pragma-attribute-strict-subjects.c:9:153: error: redundant attribute subject matcher sub-rule \'variable(is_global)\'; \'variable\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:9:108: error: redundant attribute subject matcher sub-rule \'variable(is_parameter)\'; \'variable\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:15:99: error: redundant attribute subject matcher sub-rule \'function(is_member)\'; \'function\' already matches those declarations","clang/test/Sema/pragma-attribute-strict-subjects.c:20:109: error: redundant attribute subject matcher sub-rule \'variable(unless(is_parameter))\'; \'variable\' already matches those declarations"}
[ub]={"clang/test/OpenMP/declare_variant_messages.c:150:45: error: \'#pragma omp declare variant\' is not compatible with any target-specific attributes","clang/test/OpenMP/declare_variant_messages.c:153:45: error: \'#pragma omp declare variant\' is not compatible with any target-specific attributes","clang/test/OpenMP/declare_variant_messages.c:157:37: error: \'#pragma omp declare variant\' is not compatible with any target-specific attributes","clang/test/OpenMP/declare_variant_messages.c:161:37: error: \'#pragma omp declare variant\' is not compatible with any target-specific attributes","clang/test/OpenMP/declare_variant_messages.c:165:41: error: \'#pragma omp declare variant\' is not compatible with any target-specific attributes","clang/test/OpenMP/declare_variant_messages.c:168:52: error: \'#pragma omp declare variant\' is not compatible with any target-specific attributes"}
}
}
},
},
["err_pragma_attribute_namespace_on_attribute"]={
["err_omp_declare_variant_incompat_types"]={
[d]={{nil,u,"err_pragma_attribute_namespace_on_attribute"}},
[j]={{nil,p,"err_omp_declare_variant_incompat_types"}},
[e]={{nil,u,"namespace can only apply to \'push\' or \'pop\' directives"}},
[b]={{nil,s,"variant in \'#pragma omp declare variant\' with type %0 is incompatible with type %1%select{| with appended arguments}2"},{r,p,"variant in \'#pragma omp declare variant\' with type %0 is incompatible with type %1"}},
[f]={{nil,u,"namespace can only apply to \'push\' or \'pop\' directives"}},
[c]={{nil,s,{"variant in \'#pragma omp declare variant\' with type A is incompatible with type B",{a," with appended arguments"}}},{r,p,"variant in \'#pragma omp declare variant\' with type A is incompatible with type B"}},
[g]=k,
[e]=d,
[h]="namespace can only apply to \'push\' or \'pop\' directives",
[f]="variant in \'\\#pragma omp declare variant\' with type (.*?) is incompatible with type (.*?)(?:| with appended arguments)",
[b]=a,
[g]=a,
[c]={{nil,u,y}},
[i]={{nil,p,n}},
[j]={"0876cae0d749",1545345124,"Add support for namespaces on #pragma clang attribute","Add support for namespaces on #pragma clang attribute\n\nNamespaces are introduced by adding an \"identifier.\" before a\npush/pop directive. Pop directives with namespaces can only pop a\nattribute group that was pushed with the same namespace. Push and pop\ndirectives that don\'t opt into namespaces have the same semantics.\n\nThis is necessary to prevent a pitfall of using multiple #pragma\nclang attribute directives spread out in a large file, particularly\nwhen macros are involved. It isn\'t easy to see which pop corripsonds\nto which push, so its easy to inadvertently pop the wrong group.\n\nDifferential revision: https://reviews.llvm.org/D55628\n\nllvm-svn: 349845"},
[h]={"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"},
[i]={{v,3884,"/// Handle the #pragma clang attribute directive.\n///\n/// The syntax is:\n/// \\code\n///  #pragma clang attribute push (attribute, subject-set)\n///  #pragma clang attribute push\n/// #pragma clang attribute (attribute, subject-set)\n///  #pragma clang attribute pop\n/// \\endcode\n///\n/// There are also \'namespace\' variants of push and pop directives. The bare\n/// \'#pragma clang attribute (attribute, subject-set)\' version doesn\'t require a\n/// namespace, since it always applies attributes to the most recently pushed\n/// group, regardless of namespace.\n/// \\code\n///  #pragma clang attribute namespace.push (attribute, subject-set)\n///  #pragma clang attribute namespace.push\n///  #pragma clang attribute namespace.pop\n/// \\endcode\n///\n/// The subject-set clause defines the set of declarations which receive the\n/// attribute. Its exact syntax is described in the LanguageExtensions document\n/// in Clang\'s documentation.\n///\n/// This directive instructs the compiler to begin/finish applying the specified\n/// attribute to the set of attribute-specific declarations in the active range\n/// of the pragma.\nvoid PragmaAttributeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  // Determine what action this pragma clang attribute represents.\n  if (Tok.is(tok::l_paren)) {\n    if (Info->Namespace) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_attribute_namespace_on_attribute);"}},
[k]={{m,7509,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n // ...\n  if (LangOpts.CPlusPlus) {\n   // ...\n   if (VarianPtrType.getUnqualifiedType() != FnPtrType.getUnqualifiedType()) {\n     // ...\n     if (ICS.isFailure()) {\n       Diag(VariantRef->getExprLoc(), diag::err_omp_declare_variant_incompat_types) << VariantRef->getType() << ((Method && !Method->isStatic()) ? FnPtrType : FD->getType()) << (NumAppendArgs ? 1 : 0) << VariantRef->getSourceRange();"},{m,7564,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  // Check if function types are compatible in C.\n  if (!LangOpts.CPlusPlus) {\n    // ...\n    if (NewType.isNull()) {\n      Diag(VariantRef->getExprLoc(), diag::err_omp_declare_variant_incompat_types) << NewFD->getType() << FD->getType() << (NumAppendArgs ? 1 : 0) << VariantRef->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/pragma-attribute-namespace.c"]={"clang/test/Sema/pragma-attribute-namespace.c:25:31: error: namespace can only apply to \'push\' or \'pop\' directives"}
[ub]={"clang/test/OpenMP/declare_variant_messages.c:139:29: error: variant in \'#pragma omp declare variant\' with type \'int (void)\' is incompatible with type \'int (void) __attribute__((vectorcall))\'","clang/test/OpenMP/declare_variant_messages.c:144:29: error: variant in \'#pragma omp declare variant\' with type \'int (void)\' is incompatible with type \'void (void)\'"}
}
}
},
},
["err_pragma_attribute_no_pop_eof"]={
["err_omp_declare_variant_nested_user_condition"]={
[d]={{nil,n,"err_pragma_attribute_no_pop_eof"}},
[j]={{nil,A,"err_omp_declare_variant_nested_user_condition"}},
[e]={{nil,n,"unterminated \'#pragma clang attribute push\' at end of file"}},
[b]={{nil,A,"nested user conditions in OpenMP context selector not supported (yet)"}},
[f]={{nil,n,"unterminated \'#pragma clang attribute push\' at end of file"}},
[c]={{nil,A,"nested user conditions in OpenMP context selector not supported (yet)"}},
[g]=k,
[e]=d,
[h]="unterminated \'\\#pragma clang attribute push\' at end of file",
[f]="nested user conditions in OpenMP context selector not supported \\(yet\\)",
[b]=a,
[g]=a,
[c]={{nil,n,m}},
[i]={{nil,A,u}},
[j]={R,1492508507,U,T},
[h]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)","[OpenMP] Support nested OpenMP context selectors (declare variant)\n\nDue to `omp begin/end declare variant`, OpenMP context selectors can be\nnested. This patch adds initial support for this so we can use it for\ntarget math variants. We should improve the detection of \"equivalent\"\nscores and user conditions, we should also revisit the data structures\nof the OMPTraitInfo object, however, both are not pressing issues right\nnow.\n\nReviewed By: JonChesterfield\n\nDifferential Revision: https://reviews.llvm.org/D85877"},
[i]={{J,1149,"void Sema::DiagnoseUnterminatedPragmaAttribute() {\n  // ...\n  Diag(PragmaAttributeStack.back().Loc, diag::err_pragma_attribute_no_pop_eof);"}},
[k]={{t,1604,"bool Parser::parseOMPDeclareVariantMatchClause(SourceLocation Loc, OMPTraitInfo &TI, OMPTraitInfo *ParentTI) {\n  // ...\n  // Merge the parent/outer trait info into the one we just parsed and diagnose\n  // problems.\n  // TODO: Keep some source location in the TI to provide better diagnostics.\n  // TODO: Perform some kind of equivalence check on the condition and score\n  //      expressions.\n  for (const OMPTraitSet &ParentSet : ParentTI->Sets) {\n    // ...\n    for (OMPTraitSet &Set : TI.Sets) {\n      // ...\n      for (const OMPTraitSelector &ParentSelector : ParentSet.Selectors) {\n        // ...\n        for (OMPTraitSelector &Selector : Set.Selectors) {\n          // ...\n          for (const OMPTraitProperty &ParentProperty : ParentSelector.Properties) {\n            // ...\n            for (OMPTraitProperty &Property : Selector.Properties) {\n              // ...\n              if (Selector.Kind == llvm::omp::TraitSelector::user_condition) {\n                Diag(Loc, diag::err_omp_declare_variant_nested_user_condition);"}},
[l]={
[l]={
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:68:15: error: unterminated \'#pragma clang attribute push\' at end of file"}
[ub]={"clang/test/OpenMP/declare_variant_messages.c:214:1: error: nested user conditions in OpenMP context selector not supported (yet)"}
}
}
},
},
["err_pragma_attribute_stack_mismatch"]={
["err_omp_declare_variant_prototype_required"]={
[d]={{nil,n,"err_pragma_attribute_stack_mismatch"}},
[j]={{nil,s,"err_omp_declare_variant_prototype_required"}},
[e]={{nil,u,"\'#pragma clang attribute %select{%1.|}0pop\' with no matching \'#pragma clang attribute %select{%1.|}0push\'"},{"7.1",n,"\'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"}},
[b]={{nil,s,"function with \'#pragma omp declare variant\' must have a prototype when \'append_args\' is used"}},
[f]={{nil,u,{"\'#pragma clang attribute ",{"B.",a},"pop\' with no matching \'#pragma clang attribute ",{"B.",a},"push\'"}},{"7.1",n,"\'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"}},
[c]={{nil,s,"function with \'#pragma omp declare variant\' must have a prototype when \'append_args\' is used"}},
[g]=k,
[e]=d,
[h]="\'\\#pragma clang attribute (?:(.*?)\\.|)pop\' with no matching \'\\#pragma clang attribute (?:(.*?)\\.|)push\'",
[f]="function with \'\\#pragma omp declare variant\' must have a prototype when \'append_args\' is used",
[b]=a,
[g]=a,
[c]={{nil,n,m}},
[i]={{nil,s,n}},
[j]={R,1492508507,U,T},
[h]={ib,1616787805,lb,jb},
[i]={{J,1081,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  if (PragmaAttributeStack.empty()) {\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"},{J,1095,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  // ...\n  if (Namespace)\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 0 << Namespace->getName();"},{J,1131,"void Sema::ActOnPragmaAttributePop(SourceLocation PragmaLoc, const IdentifierInfo *Namespace) {\n  // ...\n if (Namespace)\n // ...\n  else\n    Diag(PragmaLoc, diag::err_pragma_attribute_stack_mismatch) << 1;"}},
[k]={{m,7443,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  if (NumAppendArgs) {\n    // ...\n   if (!PTy) {\n     Diag(FD->getLocation(), diag::err_omp_declare_variant_prototype_required) << SR;"}},
[l]={
[l]={
["clang/test/Sema/pragma-attribute.c"]={"clang/test/Sema/pragma-attribute.c:3:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:47:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:60:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'","clang/test/Sema/pragma-attribute.c:66:15: error: \'#pragma clang attribute pop\' with no matching \'#pragma clang attribute push\'"}
[zb]={"clang/test/OpenMP/declare_variant_clauses_messages.cpp:208:6: error: function with \'#pragma omp declare variant\' must have a prototype when \'append_args\' is used","clang/test/OpenMP/declare_variant_clauses_messages.cpp:214:13: error: function with \'#pragma omp declare variant\' must have a prototype when \'append_args\' is used"}
}
}
},
},
["err_pragma_attribute_unknown_subject_rule"]={
["err_omp_declare_variant_same_base_function"]={
[d]={{nil,n,"err_pragma_attribute_unknown_subject_rule"}},
[j]={{nil,E,"err_omp_declare_variant_same_base_function"}},
[e]={{nil,n,"unknown attribute subject rule \'%0\'"}},
[b]={{nil,E,"variant in \'#pragma omp declare variant\' is the same as the base function"}},
[f]={{nil,n,"unknown attribute subject rule \'A\'"}},
[c]={{nil,E,"variant in \'#pragma omp declare variant\' is the same as the base function"}},
[g]=k,
[e]=d,
[h]="unknown attribute subject rule \'(.*?)\'",
[f]="variant in \'\\#pragma omp declare variant\' is the same as the base function",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]={{nil,E,n}},
[j]={R,1492508507,U,T},
[h]={ib,1616787805,lb,jb},
[i]={{v,1609,"bool Parser::ParsePragmaAttributeSubjectMatchRuleSet(attr::ParsedSubjectMatchRuleSet &SubjectMatchRules, SourceLocation &AnyLoc, SourceLocation &LastMatchRuleEndLoc) {\n  // ...\n  do {\n    // ...\n    if (!Rule.first) {\n     Diag(Tok, diag::err_pragma_attribute_unknown_subject_rule) << Name;"}},
[k]={{m,7553,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  if (FD->getCanonicalDecl() == NewFD->getCanonicalDecl()) {\n   Diag(VariantRef->getExprLoc(), diag::err_omp_declare_variant_same_base_function) << VariantRef->getSourceRange();"}},
[l]={
[l]={
[Y]={"clang/test/Parser/pragma-attribute.cpp:56:81: error: unknown attribute subject rule \'diag\'","clang/test/Parser/pragma-attribute.cpp:57:81: error: unknown attribute subject rule \'a\'","clang/test/Parser/pragma-attribute.cpp:58:91: error: unknown attribute subject rule \'for\'","clang/test/Parser/pragma-attribute.cpp:59:81: error: unknown attribute subject rule \'function42\'"}
[ub]={"clang/test/OpenMP/declare_variant_messages.c:118:30: error: variant in \'#pragma omp declare variant\' is the same as the base function"}
}
}
},
},
["err_pragma_attribute_unknown_subject_sub_rule"]={
["err_omp_declare_variant_user_condition_not_constant"]={
[d]={{nil,n,"err_pragma_attribute_unknown_subject_sub_rule"}},
[j]={{nil,o,"err_omp_declare_variant_user_condition_not_constant"}},
[e]={{nil,n,"%select{invalid use of|unknown}2 attribute subject matcher sub-rule \'%0\'; \'%1\' matcher %select{does not support sub-rules|supports the following sub-rules: %3}2"}},
[b]={{nil,o,"the user condition in the OpenMP context selector needs to be constant; %0 is not"}},
[f]={{nil,n,{{"invalid use of","unknown"}," attribute subject matcher sub-rule \'A\'; \'B\' matcher ",{"does not support sub-rules","supports the following sub-rules: D"}}}},
[c]={{nil,o,"the user condition in the OpenMP context selector needs to be constant; A is not"}},
[g]=k,
[e]=d,
[h]="(?:invalid use of|unknown) attribute subject matcher sub\\-rule \'(.*?)\'; \'(.*?)\' matcher (?:does not support sub\\-rules|supports the following sub\\-rules\\: (.*?))",
[f]="the user condition in the OpenMP context selector needs to be constant; (.*?) is not",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]={{nil,o,n}},
[j]={R,1492508507,U,T},
[h]={"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"},
[i]={{v,1578,"static void diagnoseUnknownAttributeSubjectSubRule(Parser &PRef, attr::SubjectMatchRule PrimaryRule, StringRef PrimaryRuleName, StringRef SubRuleName, SourceLocation SubRuleLoc) {\n  auto Diagnostic = PRef.Diag(SubRuleLoc, diag::err_pragma_attribute_unknown_subject_sub_rule) << SubRuleName << PrimaryRuleName;"}},
[k]={{m,7431,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  // Deal with non-constant score and user condition expressions.\n  auto HandleNonConstantScoresAndConditions = [this](Expr *&E, bool IsScore) -> bool {\n    // ...\n    if (IsScore) {\n    // ...\n    } else {\n      // ...\n      Diag(E->getExprLoc(), diag::err_omp_declare_variant_user_condition_not_constant) << E;"}},
[l]={
[l]={
[Y]={"clang/test/Parser/pragma-attribute.cpp:67:89: error: unknown attribute subject matcher sub-rule \'is\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:72:99: error: unknown attribute subject matcher sub-rule \'is\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:77:81: error: invalid use of attribute subject matcher sub-rule \'is_parameter\'; \'enum\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:78:85: error: invalid use of attribute subject matcher sub-rule \'is_parameter\'; \'enum\' matcher does not support sub-rules","clang/test/Parser/pragma-attribute.cpp:82:99: error: unknown attribute subject matcher sub-rule \'unless(is)\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:90:99: error: unknown attribute subject matcher sub-rule \'unless(is_global)\'; \'variable\' matcher supports the following sub-rules: \'is_thread_local\', \'is_global\', \'is_local\', \'is_parameter\', \'unless(is_parameter)\'","clang/test/Parser/pragma-attribute.cpp:91:86: error: invalid use of attribute subject matcher sub-rule \'unless(is_parameter)\'; \'enum\' matcher does not support sub-rules"}
[ub]={"clang/test/OpenMP/declare_variant_messages.c:57:58: error: the user condition in the OpenMP context selector needs to be constant; foo() is not","clang/test/OpenMP/declare_variant_messages.c:56:58: error: the user condition in the OpenMP context selector needs to be constant; foo is not"}
}
}
},
},
["err_pragma_attribute_unsupported_attribute"]={
["err_omp_declare_variant_wrong_clause"]={
[d]={{nil,n,"err_pragma_attribute_unsupported_attribute"}},
[j]={{nil,p,"err_omp_declare_variant_wrong_clause"}},
[e]={{nil,n,"attribute %0 is not supported by \'#pragma clang attribute\'"}},
[b]={{nil,s,"expected %select{\'match\'|\'match\', \'adjust_args\', or \'append_args\'}0 clause on \'omp declare variant\' directive"},{r,p,"expected \'%0\' clause on \'omp declare variant\' directive"}},
[f]={{nil,n,"attribute A is not supported by \'#pragma clang attribute\'"}},
[c]={{nil,s,{"expected ",{"\'match\'","\'match\', \'adjust_args\', or \'append_args\'"}," clause on \'omp declare variant\' directive"}},{r,p,"expected \'A\' clause on \'omp declare variant\' directive"}},
[g]=k,
[e]=d,
[h]="attribute (.*?) is not supported by \'\\#pragma clang attribute\'",
[f]="expected (?:\'match\'|\'match\', \'adjust_args\', or \'append_args\') clause on \'omp declare variant\' directive",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]={{nil,p,u}},
[j]={R,1492508507,U,T},
[h]={"d158cf64d64b",1568405897,"[OPENMP5.0]Add basic support for declare variant directive.","[OPENMP5.0]Add basic support for declare variant directive.\n\nAdded basic support for declare variant directive and its match clause\nwith user context selector.\n\nllvm-svn: 371892"},
[i]={{v,1903,"void Parser::HandlePragmaAttribute() {\n  // ...\n  for (const ParsedAttr &Attribute : Attrs) {\n    if (!Attribute.isSupportedByPragmaAttribute()) {\n     Diag(PragmaLoc, diag::err_pragma_attribute_unsupported_attribute) << Attribute;"}},
[k]={{t,1426,"/// Parse clauses for \'#pragma omp declare variant ( variant-func-id ) clause\'.\nvoid Parser::ParseOMPDeclareVariantClauses(Parser::DeclGroupPtrTy Ptr, CachedTokens &Toks, SourceLocation Loc) {\n  // ...\n  // At least one clause is required.\n  if (Tok.is(tok::annot_pragma_openmp_end)) {\n    Diag(Tok.getLocation(), diag::err_omp_declare_variant_wrong_clause) << (getLangOpts().OpenMP < 51 ? 0 : 1);"},{t,1437,"/// Parse clauses for \'#pragma omp declare variant ( variant-func-id ) clause\'.\nvoid Parser::ParseOMPDeclareVariantClauses(Parser::DeclGroupPtrTy Ptr, CachedTokens &Toks, SourceLocation Loc) {\n  // ...\n  while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n    // ...\n    if (!isAllowedClauseForDirective(OMPD_declare_variant, CKind, getLangOpts().OpenMP)) {\n      Diag(Tok.getLocation(), diag::err_omp_declare_variant_wrong_clause) << (getLangOpts().OpenMP < 51 ? 0 : 1);"},{t,1550,"bool Parser::parseOMPDeclareVariantMatchClause(SourceLocation Loc, OMPTraitInfo &TI, OMPTraitInfo *ParentTI) {\n  // ...\n  if (CKind != OMPC_match) {\n   Diag(Tok.getLocation(), diag::err_omp_declare_variant_wrong_clause) << (getLangOpts().OpenMP < 51 ? 0 : 1);"}},
[l]={
[l]={
["clang/test/Parser/pragma-attribute-declspec.cpp"]={"clang/test/Parser/pragma-attribute-declspec.cpp:12:15: error: attribute \'align\' is not supported by \'#pragma clang attribute\'"}
[ub]={"clang/test/OpenMP/declare_variant_messages.c:29:51: error: expected \'match\' clause on \'omp declare variant\' directive","clang/test/OpenMP/declare_variant_messages.c:24:47: error: expected \'match\' clause on \'omp declare variant\' directive","clang/test/OpenMP/declare_variant_messages.c:17:34: error: expected \'match\' clause on \'omp declare variant\' directive","clang/test/OpenMP/declare_variant_messages.c:16:219: error: expected \'match\' clause on \'omp declare variant\' directive","clang/test/OpenMP/declare_variant_messages.c:15:219: error: expected \'match\' clause on \'omp declare variant\' directive","clang/test/OpenMP/declare_variant_messages.c:14:237: error: expected \'match\' clause on \'omp declare variant\' directive","clang/test/OpenMP/declare_variant_messages.c:13:286: error: expected \'match\' clause on \'omp declare variant\' directive","clang/test/OpenMP/declare_variant_messages.c:64:59: error: expected \'match\' clause on \'omp declare variant\' directive","clang/test/OpenMP/declare_variant_messages.c:63:63: error: expected \'match\' clause on \'omp declare variant\' directive","clang/test/OpenMP/declare_variant_messages.c:62:63: error: expected \'match\' clause on \'omp declare variant\' directive"}
}
}
},
},
["err_pragma_cannot_end_force_cuda_host_device"]={
["err_omp_defaultmap_no_attr_for_variable"]={
[d]="err_pragma_cannot_end_force_cuda_host_device",
[j]={{nil,p,"err_omp_defaultmap_no_attr_for_variable"}},
[e]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[b]={{nil,p,"variable %0 must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause"}},
[f]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[c]={{nil,p,"variable A must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause"}},
[g]=k,
[e]=d,
[h]="force_cuda_host_device end pragma without matching force_cuda_host_device begin",
[f]="variable (.*?) must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause",
[b]=a,
[g]=a,
[c]=y,
[i]={{nil,p,n}},
[j]={"67a78a6cc021",1475964958,"[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas.","[CUDA] Add #pragma clang force_cuda_host_device_{begin,end} pragmas.\n\nSummary:\nThese cause us to consider all functions in-between to be __host__\n__device__.\n\nYou can nest these pragmas; you just can\'t have more \'end\'s than\n\'begin\'s.\n\nReviewers: rsmith\n\nSubscribers: tra, jhen, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D24975\n\nllvm-svn: 283677"},
[h]={xb,1573050950,Cb,yb},
[i]={{v,3815,"void PragmaForceCUDAHostDeviceHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Info->isStr(\"begin\"))\n  // ...\n  else if (!Actions.PopForceCUDAHostDevice())\n    PP.Diag(FirstTok.getLocation(), diag::err_pragma_cannot_end_force_cuda_host_device);"}}
[k]={{m,6799,"StmtResult Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  for (const auto &P : VarsWithInheritedDSA) {\n    // ...\n    if (DSAStack->getDefaultDSA() == DSA_none || DSAStack->getDefaultDSA() == DSA_private || DSAStack->getDefaultDSA() == DSA_firstprivate) {\n    // ...\n    } else if (getLangOpts().OpenMP >= 50) {\n      Diag(P.second->getExprLoc(), diag::err_omp_defaultmap_no_attr_for_variable) << P.first << P.second->getSourceRange();"}},
},
["err_pragma_clang_section_expected_equal"]={
[d]={{nil,n,"err_pragma_clang_section_expected_equal"}},
[e]={{nil,o,"expected \'=\' following \'#pragma clang section %select{invalid|bss|data|rodata|text|relro}0\'"},{x,n,"expected \'=\' following \'#pragma clang section %select{invalid|bss|data|rodata|text}0\'"}},
[f]={{nil,o,{"expected \'=\' following \'#pragma clang section ",{nb,"bss","data","rodata","text","relro"},"\'"}},{x,n,{"expected \'=\' following \'#pragma clang section ",{nb,"bss","data","rodata","text"},"\'"}}},
[g]=k,
[h]="expected \'\\=\' following \'\\#pragma clang section (?:invalid|bss|data|rodata|text|relro)\'",
[b]=a,
[c]={{nil,n,y}},
[j]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section\n\nThis patch provides a means to specify section-names for global variables, \nfunctions and static variables, using #pragma directives. \nThis feature is only defined to work sensibly for ELF targets.\nOne can specify section names as:\n#pragma clang section bss=\"myBSS\" data=\"myData\" rodata=\"myRodata\" text=\"myText\"\nOne can \"unspecify\" a section name with empty string e.g.\n#pragma clang section bss=\"\" data=\"\" text=\"\" rodata=\"\"\n\nReviewers: Roger Ferrer, Jonathan Roelofs, Reid Kleckner\nDifferential Revision: https://reviews.llvm.org/D33412\n\nllvm-svn: 304705"},
[i]={{v,2230,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  while (Tok.isNot(tok::eod)) {\n    // ...\n    if (Tok.isNot(tok::equal)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_clang_section_expected_equal) << SecKind;"}},
[l]={
[l]={
["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:13:27: error: expected \'=\' following \'#pragma clang section bss\'","clang/test/Sema/pragma-clang-section.c:14:28: error: expected \'=\' following \'#pragma clang section data\'","clang/test/Sema/pragma-clang-section.c:15:30: error: expected \'=\' following \'#pragma clang section rodata\'","clang/test/Sema/pragma-clang-section.c:16:28: error: expected \'=\' following \'#pragma clang section text\'","clang/test/Sema/pragma-clang-section.c:17:29: error: expected \'=\' following \'#pragma clang section relro\'"}
["clang/test/OpenMP/target_defaultmap_messages.cpp"]={"clang/test/OpenMP/target_defaultmap_messages.cpp:121:3: error: variable \'g\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:123:11: error: variable \'g\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:125:3: error: variable \'argc\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:127:15: error: variable \'arr\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:129:3: error: variable \'bar\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:131:3: error: variable \'baz\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:134:3: error: variable \'vla\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:138:3: error: variable \'baz\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:61:3: error: variable \'g\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:63:11: error: variable \'g\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:65:3: error: variable \'argc\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:67:15: error: variable \'arr\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:69:15: error: variable \'arr\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:71:3: error: variable \'bar\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:73:3: error: variable \'baz\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:76:3: error: variable \'vla\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause","clang/test/OpenMP/target_defaultmap_messages.cpp:80:3: error: variable \'baz\' must have explicitly specified data sharing attributes, data mapping attributes, or in an is_device_ptr clause"}
}
}
},
},
["err_pragma_comment_malformed"]={
["err_omp_depend_clause_thread_simd"]={
[d]="err_pragma_comment_malformed",
[j]="err_omp_depend_clause_thread_simd",
[e]="pragma comment requires parenthesized identifier and optional string",
[b]="\'%0\' clauses cannot be mixed with \'%1\' clause",
[f]="pragma comment requires parenthesized identifier and optional string",
[c]="\'A\' clauses cannot be mixed with \'B\' clause",
[g]=k,
[e]=d,
[h]="pragma comment requires parenthesized identifier and optional string",
[f]="\'(.*?)\' clauses cannot be mixed with \'(.*?)\' clause",
[b]=a,
[g]=a,
[c]=y,
[i]=n,
[j]={q,1236199783,r,s},
[h]={"eb4823503331",1450415156,"[OPENMP 4.5] Parsing/sema analysis for \'depend(source)\' clause in \'ordered\' directive.","[OPENMP 4.5] Parsing/sema analysis for \'depend(source)\' clause in \'ordered\' directive.\nOpenMP 4.5 adds \'depend(source)\' clause for \'ordered\' directive to support cross-iteration dependence. Patch adds parsing and semantic analysis for this construct.\n\nllvm-svn: 255986"},
[i]={{v,3089,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::l_paren)) {\n    PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{v,3096,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n   PP.Diag(CommentLoc, diag::err_pragma_comment_malformed);"},{v,3137,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc. See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n  if (Tok.isNot(tok::r_paren)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"},{v,3143,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_malformed);"}},
[k]={{m,11368,"StmtResult Sema::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  if (!ErrorFound && !SC && isOpenMPSimdDirective(DSAStack->getParentDirective())) {\n // ...\n  } else if ((DependFound || DoacrossFound) && (TC || SC)) {\n   // ...\n    Diag(Loc, diag::err_omp_depend_clause_thread_simd) << getOpenMPClauseName(DependFound ? OMPC_depend : OMPC_doacross) << getOpenMPClauseName(TC ? TC->getClauseKind() : SC->getClauseKind());"}},
[l]={
[l]={
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:9:31: error: pragma comment requires parenthesized identifier and optional string","clang/test/Preprocessor/pragma_microsoft.c:24:22: error: pragma comment requires parenthesized identifier and optional string"}
[Bb]={"clang/test/OpenMP/ordered_messages.cpp:203:21: error: \'depend\' clauses cannot be mixed with \'threads\' clause","clang/test/OpenMP/ordered_messages.cpp:204:26: error: \'depend\' clauses cannot be mixed with \'simd\' clause","clang/test/OpenMP/ordered_messages.cpp:382:21: error: \'depend\' clauses cannot be mixed with \'threads\' clause","clang/test/OpenMP/ordered_messages.cpp:383:26: error: \'depend\' clauses cannot be mixed with \'simd\' clause"}
}
}
},
},
["err_pragma_comment_unknown_kind"]={
["err_omp_depend_modifier_not_iterator"]={
[d]="err_pragma_comment_unknown_kind",
[j]={{nil,o,"err_omp_depend_modifier_not_iterator"}},
[e]="unknown kind of pragma comment",
[b]={{nil,o,"expected iterator specification as depend modifier"}},
[f]="unknown kind of pragma comment",
[c]={{nil,o,"expected iterator specification as depend modifier"}},
[g]=k,
[e]=d,
[h]="unknown kind of pragma comment",
[f]="expected iterator specification as depend modifier",
[b]=a,
[g]=a,
[c]=y,
[i]={{nil,o,n}},
[j]={q,1236199783,r,s},
[h]={I,1576908663,H,F},
[i]={{v,3111,"/// Handle the microsoft \\#pragma comment extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma comment(linker, \"foo\")\n/// \\endcode\n/// \'linker\' is one of five identifiers: compiler, exestr, lib, linker, user.\n/// \"foo\" is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters etc.  See MSDN for more details.\nvoid PragmaCommentHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PCK_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_comment_unknown_kind);"}},
[k]={{m,20771,"OMPClause *Sema::ActOnOpenMPDependClause(const OMPDependClause::DependDataTy &Data, Expr *DepModifier, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  if (DepModifier && !DepModifier->getType()->isSpecificBuiltinType(BuiltinType::OMPIterator))\n    Diag(DepModifier->getExprLoc(), diag::err_omp_depend_modifier_not_iterator);"}}
[l]={
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:17:17: error: unknown kind of pragma comment"}
}
},
},
["err_pragma_detect_mismatch_malformed"]={
["err_omp_depend_sink_expected_loop_iteration"]={
[d]="err_pragma_detect_mismatch_malformed",
[j]="err_omp_depend_sink_expected_loop_iteration",
[e]="pragma detect_mismatch is malformed; it requires two comma-separated string literals",
[b]="expected %0 loop iteration variable",
[f]="pragma detect_mismatch is malformed; it requires two comma-separated string literals",
[c]="expected A loop iteration variable",
[g]=k,
[e]=d,
[h]="pragma detect_mismatch is malformed; it requires two comma\\-separated string literals",
[f]="expected(?:| (.*?)) loop iteration variable",
[b]=a,
[g]=a,
[c]=y,
[i]=n,
[j]={"5d041beb4e86",1370311634,"Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker co...","Adding support for MSVC #pragma detect_mismatch functionality by emitting a FAILIFMISMATCH linker command into the object file.\n\nllvm-svn: 183178"},
[h]={"ef4c5584d59d",1450786907,"[OPENMP 4.5] Parsing/sema for \'depend(sink:vec)\' clause in \'ordered\' directive.","[OPENMP 4.5] Parsing/sema for \'depend(sink:vec)\' clause in \'ordered\' directive.\nOpenMP 4.5 adds \'depend(sink:vec)\' in \'ordered\' directive for doacross loop synchronization. Patch adds parsing and semantic analysis for this clause.\n\nllvm-svn: 256238"},
[i]={{v,3047,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings. The values are embedded in\n/// the object file and passed along to the linker. If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted. See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.isNot(tok::comma)) {\n   PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"},{v,3062,"/// Handle the Microsoft \\#pragma detect_mismatch extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma detect_mismatch(\"name\", \"value\")\n/// \\endcode\n/// Where \'name\' and \'value\' are quoted strings. The values are embedded in\n/// the object file and passed along to the linker. If the linker detects a\n/// mismatch in the object file\'s values for the given name, a LNK2038 error\n/// is emitted. See MSDN for more details.\nvoid PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_detect_mismatch_malformed);"}},
[k]={{m,20700,"static DoacrossDataInfoTy ProcessOpenMPDoacrossClauseCommon(Sema &SemaRef, bool IsSource, ArrayRef<Expr *> VarList, DSAStackTy *Stack, SourceLocation EndLoc) {\n // ...\n for (Expr *RefExpr : VarList) {\n   // ...\n   if (!IsSource) {\n     // ...\n     if (!SemaRef.CurContext->isDependentContext() && Stack->getParentOrderedRegionParam().first && DepCounter != Stack->isParentLoopControlVariable(D).first) {\n       // ...\n       if (VD)\n         SemaRef.Diag(ELoc, diag::err_omp_depend_sink_expected_loop_iteration) << 1 << VD;"},{m,20703,"static DoacrossDataInfoTy ProcessOpenMPDoacrossClauseCommon(Sema &SemaRef, bool IsSource, ArrayRef<Expr *> VarList, DSAStackTy *Stack, SourceLocation EndLoc) {\n // ...\n for (Expr *RefExpr : VarList) {\n   // ...\n   if (!IsSource) {\n     // ...\n     if (!SemaRef.CurContext->isDependentContext() && Stack->getParentOrderedRegionParam().first && DepCounter != Stack->isParentLoopControlVariable(D).first) {\n       // ...\n       if (VD)\n       // ...\n        else\n          SemaRef.Diag(ELoc, diag::err_omp_depend_sink_expected_loop_iteration) << 0;"},{m,20715,"static DoacrossDataInfoTy ProcessOpenMPDoacrossClauseCommon(Sema &SemaRef, bool IsSource, ArrayRef<Expr *> VarList, DSAStackTy *Stack, SourceLocation EndLoc) {\n  // ...\n  if (!SemaRef.CurContext->isDependentContext() && !IsSource && TotalDepCount > VarList.size() && Stack->getParentOrderedRegionParam().first && Stack->getParentLoopControlVariable(VarList.size() + 1)) {\n    SemaRef.Diag(EndLoc, diag::err_omp_depend_sink_expected_loop_iteration) << 1 << Stack->getParentLoopControlVariable(VarList.size() + 1);"}},
[l]={
[l]={
["clang/test/Preprocessor/pragma_microsoft.c"]={"clang/test/Preprocessor/pragma_microsoft.c:34:31: error: pragma detect_mismatch is malformed; it requires two comma-separated string literals"}
[Bb]={"clang/test/OpenMP/ordered_messages.cpp:371:271: error: expected \'i\' loop iteration variable","clang/test/OpenMP/ordered_messages.cpp:372:200: error: expected \'i\' loop iteration variable","clang/test/OpenMP/ordered_messages.cpp:373:163: error: expected \'j\' loop iteration variable","clang/test/OpenMP/ordered_messages.cpp:374:36: error: expected \'j\' loop iteration variable","clang/test/OpenMP/ordered_messages.cpp:387:35: error: expected \'i\' loop iteration variable","clang/test/OpenMP/ordered_messages.cpp:387:38: error: expected \'j\' loop iteration variable","clang/test/OpenMP/ordered_messages.cpp:411:38: error: expected loop iteration variable","clang/test/OpenMP/ordered_messages.cpp:192:271: error: expected \'i\' loop iteration variable","clang/test/OpenMP/ordered_messages.cpp:193:200: error: expected \'i\' loop iteration variable","clang/test/OpenMP/ordered_messages.cpp:194:163: error: expected \'j\' loop iteration variable","clang/test/OpenMP/ordered_messages.cpp:195:36: error: expected \'j\' loop iteration variable","clang/test/OpenMP/ordered_messages.cpp:208:35: error: expected \'i\' loop iteration variable","clang/test/OpenMP/ordered_messages.cpp:208:38: error: expected \'j\' loop iteration variable"}
}
}
},
},
["err_pragma_expected_clang_section_name"]={
["err_omp_depend_sink_expected_plus_minus"]={
[d]={{nil,n,"err_pragma_expected_clang_section_name"}},
[j]="err_omp_depend_sink_expected_plus_minus",
[e]={{nil,o,"expected one of [bss|data|rodata|text|relro] section kind in \'#pragma %0\'"},{x,n,"expected one of [bss|data|rodata|text] section kind in \'#pragma %0\'"}},
[b]="expected \'+\' or \'-\' operation",
[f]={{nil,o,"expected one of [bss|data|rodata|text|relro] section kind in \'#pragma A\'"},{x,n,"expected one of [bss|data|rodata|text] section kind in \'#pragma A\'"}},
[c]="expected \'+\' or \'-\' operation",
[g]=k,
[e]=d,
[h]="expected one of \\[bss\\|data\\|rodata\\|text\\|relro\\] section kind in \'\\#pragma (.*?)\'",
[f]="expected \'\\+\' or \'\\-\' operation",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]=n,
[j]={"2a67c9ee39c3",1496657517,"Add support for #pragma clang section","Add support for #pragma clang section\n\nThis patch provides a means to specify section-names for global variables, \nfunctions and static variables, using #pragma directives. \nThis feature is only defined to work sensibly for ELF targets.\nOne can specify section names as:\n#pragma clang section bss=\"myBSS\" data=\"myData\" rodata=\"myRodata\" text=\"myText\"\nOne can \"unspecify\" a section name with empty string e.g.\n#pragma clang section bss=\"\" data=\"\" text=\"\" rodata=\"\"\n\nReviewers: Roger Ferrer, Jonathan Roelofs, Reid Kleckner\nDifferential Revision: https://reviews.llvm.org/D33412\n\nllvm-svn: 304705"},
[h]={"ef4c5584d59d",1450786907,"[OPENMP 4.5] Parsing/sema for \'depend(sink:vec)\' clause in \'ordered\' directive.","[OPENMP 4.5] Parsing/sema for \'depend(sink:vec)\' clause in \'ordered\' directive.\nOpenMP 4.5 adds \'depend(sink:vec)\' in \'ordered\' directive for doacross loop synchronization. Patch adds parsing and semantic analysis for this clause.\n\nllvm-svn: 256238"},
[i]={{v,2207,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  while (Tok.isNot(tok::eod)) {\n    if (Tok.isNot(tok::identifier)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"},{v,2223,"// #pragma clang section bss=\"abc\" data=\"\" rodata=\"def\" text=\"\" relro=\"\"\nvoid PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  while (Tok.isNot(tok::eod)) {\n    // ...\n    if (SecType->isStr(\"bss\"))\n   // ...\n   else if (SecType->isStr(\"data\"))\n    // ...\n    else if (SecType->isStr(\"rodata\"))\n    // ...\n    else if (SecType->isStr(\"relro\"))\n    // ...\n    else if (SecType->isStr(\"text\"))\n    // ...\n    else {\n     PP.Diag(Tok.getLocation(), diag::err_pragma_expected_clang_section_name) << \"clang section\";"}},
[k]={{m,20685,"static DoacrossDataInfoTy ProcessOpenMPDoacrossClauseCommon(Sema &SemaRef, bool IsSource, ArrayRef<Expr *> VarList, DSAStackTy *Stack, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (!IsSource) {\n     // ...\n     if (OOK != OO_Plus && OOK != OO_Minus && (RHS || OOK != OO_None)) {\n       SemaRef.Diag(OOLoc, diag::err_omp_depend_sink_expected_plus_minus);"}},
[l]={
[l]={
["clang/test/Sema/pragma-clang-section.c"]={"clang/test/Sema/pragma-clang-section.c:6:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:7:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:8:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:9:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:11:23: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'","clang/test/Sema/pragma-clang-section.c:18:56: error: expected one of [bss|data|rodata|text|relro] section kind in \'#pragma clang section\'"}
[Bb]={"clang/test/OpenMP/ordered_messages.cpp:389:45: error: expected \'+\' or \'-\' operation","clang/test/OpenMP/ordered_messages.cpp:393:36: error: expected \'+\' or \'-\' operation","clang/test/OpenMP/ordered_messages.cpp:210:45: error: expected \'+\' or \'-\' operation","clang/test/OpenMP/ordered_messages.cpp:214:36: error: expected \'+\' or \'-\' operation"}
}
}
},
},
["err_pragma_expected_file_scope"]={
["err_omp_depend_sink_source_with_modifier"]={
[d]={{nil,C,"err_pragma_expected_file_scope"}},
[j]={{nil,o,"err_omp_depend_sink_source_with_modifier"}},
[e]={{nil,C,"\'#pragma %0\' can only appear at file scope"}},
[b]={{nil,o,"depend modifier cannot be used with \'sink\' or \'source\' depend type"}},
[f]={{nil,C,"\'#pragma A\' can only appear at file scope"}},
[c]={{nil,o,"depend modifier cannot be used with \'sink\' or \'source\' depend type"}},
[g]=k,
[e]=d,
[h]="\'\\#pragma (.*?)\' can only appear at file scope",
[f]="depend modifier cannot be used with \'sink\' or \'source\' depend type",
[b]=a,
[g]=a,
[c]={{nil,C,m}},
[i]={{nil,o,n}},
[j]={"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"},
[h]={I,1576908663,H,F},
[i]={{J,793,"void Sema::ActOnPragmaMSAllocText(SourceLocation PragmaLocation, StringRef Section, const SmallVector<std::tuple<IdentifierInfo *, SourceLocation>> &Functions) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(PragmaLocation, diag::err_pragma_expected_file_scope) << \"alloc_text\";"},{J,1159,"void Sema::ActOnPragmaMSOptimize(SourceLocation Loc, bool IsOn) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"optimize\";"},{J,1260,"void Sema::ActOnPragmaMSFunction(SourceLocation Loc, const llvm::SmallVectorImpl<StringRef> &NoBuiltins) {\n  if (!CurContext->getRedeclContext()->isFileContext()) {\n    Diag(Loc, diag::err_pragma_expected_file_scope) << \"function\";"}},
[k]={{m,20766,"OMPClause *Sema::ActOnOpenMPDependClause(const OMPDependClause::DependDataTy &Data, Expr *DepModifier, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  if (DepModifier && (DepKind == OMPC_DEPEND_source || DepKind == OMPC_DEPEND_sink)) {\n    Diag(DepModifier->getExprLoc(), diag::err_omp_depend_sink_source_with_modifier);"}}
[l]={
["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:27:19: error: \'#pragma alloc_text\' can only appear at file scope"}
}
},
},
["err_pragma_expected_integer"]={
["err_omp_depend_sink_unexpected_expr"]={
[d]={{nil,t,"err_pragma_expected_integer"}},
[j]="err_omp_depend_sink_unexpected_expr",
[e]={{nil,t,"expected an integer argument in \'#pragma %0\'"}},
[b]="unexpected expression: number of expressions is larger than the number of associated loops",
[f]={{nil,t,"expected an integer argument in \'#pragma A\'"}},
[c]="unexpected expression: number of expressions is larger than the number of associated loops",
[g]=k,
[e]=d,
[h]="expected an integer argument in \'\\#pragma (.*?)\'",
[f]="unexpected expression\\: number of expressions is larger than the number of associated loops",
[b]=a,
[g]=a,
[c]={{nil,t,y}},
[i]=n,
[j]={lb,1570627358,kb,db},
[h]={"ef4c5584d59d",1450786907,"[OPENMP 4.5] Parsing/sema for \'depend(sink:vec)\' clause in \'ordered\' directive.","[OPENMP 4.5] Parsing/sema for \'depend(sink:vec)\' clause in \'ordered\' directive.\nOpenMP 4.5 adds \'depend(sink:vec)\' in \'ordered\' directive for doacross loop synchronization. Patch adds parsing and semantic analysis for this clause.\n\nllvm-svn: 256238"},
[i]={{v,3983,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_here\";"},{v,4015,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::numeric_constant) || !PP.parseSimpleIntegerLiteral(Tok, MaxTokens)) {\n   PP.Diag(Tok.getLocation(), diag::err_pragma_expected_integer) << \"clang max_tokens_total\";"}},
[k]={{m,20632,"static DoacrossDataInfoTy ProcessOpenMPDoacrossClauseCommon(Sema &SemaRef, bool IsSource, ArrayRef<Expr *> VarList, DSAStackTy *Stack, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (!IsSource) {\n      if (Stack->getParentOrderedRegionParam().first && DepCounter >= TotalDepCount) {\n       SemaRef.Diag(ELoc, diag::err_omp_depend_sink_unexpected_expr);"}},
[l]={
[l]={
["clang/test/Parser/max-tokens.cpp"]={"clang/test/Parser/max-tokens.cpp:8:31: error: expected an integer argument in \'#pragma clang max_tokens_here\'","clang/test/Parser/max-tokens.cpp:15:32: error: expected an integer argument in \'#pragma clang max_tokens_total\'"}
[Bb]={"clang/test/OpenMP/ordered_messages.cpp:209:41: error: unexpected expression: number of expressions is larger than the number of associated loops","clang/test/OpenMP/ordered_messages.cpp:388:41: error: unexpected expression: number of expressions is larger than the number of associated loops"}
}
}
},
},
["err_pragma_fc_except_requires_precise"]={
["err_omp_depend_zero_length_array_section_not_allowed"]={
[d]={{nil,t,"err_pragma_fc_except_requires_precise"}},
[j]={{nil,p,"err_omp_depend_zero_length_array_section_not_allowed"}},
[e]={{nil,t,"\'#pragma float_control(except, on)\' is illegal when precise is disabled"}},
[b]={{nil,p,"zero-length array section is not allowed in \'depend\' clause"}},
[f]={{nil,t,"\'#pragma float_control(except, on)\' is illegal when precise is disabled"}},
[c]={{nil,p,"zero-length array section is not allowed in \'depend\' clause"}},
[g]=k,
[e]=d,
[h]="\'\\#pragma float_control\\(except, on\\)\' is illegal when precise is disabled",
[f]="zero\\-length array section is not allowed in \'depend\' clause",
[b]=a,
[g]=a,
[c]={{nil,t,m}},
[i]={{nil,p,n}},
[j]={pb,1576908663,sb,ub},
[h]={"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"},
[i]={{J,579,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n // ...\n case PFC_Except:\n   if (!isPreciseFPEnabled())\n     Diag(Loc, diag::err_pragma_fc_except_requires_precise);"}}
[k]={{m,20838,"OMPClause *Sema::ActOnOpenMPDependClause(const OMPDependClause::DependDataTy &Data, Expr *DepModifier, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  if (DepKind == OMPC_DEPEND_sink || DepKind == OMPC_DEPEND_source) {\n  // ...\n  } else {\n    for (Expr *RefExpr : VarList) {\n      // ...\n     if (DepKind != OMPC_DEPEND_sink && DepKind != OMPC_DEPEND_source) {\n        // ...\n        if (DepKind == OMPC_DEPEND_depobj) {\n        // ...\n        } else {\n          // ...\n          if (OASE) {\n            // ...\n            if (Length && !Length->isValueDependent() && Length->EvaluateAsInt(Result, Context) && Result.Val.getInt().isZero()) {\n             Diag(ELoc, diag::err_omp_depend_zero_length_array_section_not_allowed) << SimpleExpr->getSourceRange();"}},
},
["err_pragma_fc_noprecise_requires_noexcept"]={
[d]={{nil,t,"err_pragma_fc_noprecise_requires_noexcept"}},
[e]={{nil,t,"\'#pragma float_control(precise, off)\' is illegal when except is enabled"}},
[f]={{nil,t,"\'#pragma float_control(precise, off)\' is illegal when except is enabled"}},
[g]=k,
[h]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when except is enabled",
[b]=a,
[c]={{nil,t,m}},
[j]={pb,1576908663,sb,ub},
[i]={{J,570,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  case PFC_NoPrecise:\n   if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n     Diag(Loc, diag::err_pragma_fc_noprecise_requires_noexcept);"}},
[l]={
[l]={
["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:62:9: error: \'#pragma float_control(precise, off)\' is illegal when except is enabled","clang/test/Parser/fp-floatcontrol-syntax.cpp:68:9: error: \'#pragma float_control(precise, off)\' is illegal when except is enabled"}
["clang/test/OpenMP/taskwait_depend_messages.cpp"]={"clang/test/OpenMP/taskwait_depend_messages.cpp:52:37: error: zero-length array section is not allowed in \'depend\' clause"}
}
}
},
},
["err_pragma_fc_noprecise_requires_nofenv"]={
["err_omp_depobj_expected"]={
[d]={{nil,t,"err_pragma_fc_noprecise_requires_nofenv"}},
[j]={{nil,o,"err_omp_depobj_expected"}},
[e]={{nil,t,"\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled"}},
[b]={{nil,o,"expected depobj expression"}},
[f]={{nil,t,"\'#pragma float_control(precise, off)\' is illegal when fenv_access is enabled"}},
[c]={{nil,o,"expected depobj expression"}},
[g]=k,
[e]=d,
[h]="\'\\#pragma float_control\\(precise, off\\)\' is illegal when fenv_access is enabled",
[f]="expected depobj expression",
[b]=a,
[g]=a,
[c]={{nil,t,m}},
[i]={{nil,o,n}},
[j]={pb,1576908663,sb,ub},
[h]={I,1576908663,H,F},
[i]={{J,572,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  case PFC_NoPrecise:\n    if (CurFPFeatures.getExceptionMode() == LangOptions::FPE_Strict)\n    // ...\n    else if (CurFPFeatures.getAllowFEnvAccess())\n      Diag(Loc, diag::err_pragma_fc_noprecise_requires_nofenv);"}}
[k]={{m,11253,"StmtResult Sema::ActOnOpenMPDepobjDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Clauses.empty()) {\n    Diag(StartLoc, diag::err_omp_depobj_expected);"},{m,11256,"StmtResult Sema::ActOnOpenMPDepobjDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  if (Clauses.empty()) {\n  // ...\n  } else if (Clauses[0]->getClauseKind() != OMPC_depobj) {\n    Diag(Clauses[0]->getBeginLoc(), diag::err_omp_depobj_expected);"}},
},
["err_pragma_fc_pp_scope"]={
[d]={{nil,t,"err_pragma_fc_pp_scope"}},
[e]={{nil,F,"\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"},{V,t,"\'#pragma float_control push/pop\' can only appear at file scope or namespace scope"}},
[f]={{nil,F,"\'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"},{V,t,"\'#pragma float_control push/pop\' can only appear at file scope or namespace scope"}},
[g]=k,
[h]="\'\\#pragma float_control push\\/pop\' can only appear at file or namespace scope or within a language linkage specification",
[b]=a,
[c]={{nil,t,m}},
[j]={pb,1576908663,sb,ub},
[i]={{J,558,"void Sema::ActOnPragmaFloatControl(SourceLocation Loc, PragmaMsStackAction Action, PragmaFloatControlKind Value) {\n  // ...\n  if ((Action == PSK_Push_Set || Action == PSK_Push || Action == PSK_Pop) && !CurContext->getRedeclContext()->isFileContext()) {\n    // ...\n    Diag(Loc, diag::err_pragma_fc_pp_scope);"}},
[l]={
[l]={
["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:33:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:34:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:35:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification","clang/test/Parser/fp-floatcontrol-syntax.cpp:36:9: error: \'#pragma float_control push/pop\' can only appear at file or namespace scope or within a language linkage specification"}
["clang/test/OpenMP/depobj_messages.cpp"]={"clang/test/OpenMP/depobj_messages.cpp:29:1: error: expected depobj expression","clang/test/OpenMP/depobj_messages.cpp:79:1: error: expected depobj expression","clang/test/OpenMP/depobj_messages.cpp:80:1: error: expected depobj expression","clang/test/OpenMP/depobj_messages.cpp:81:1: error: expected depobj expression","clang/test/OpenMP/depobj_messages.cpp:85:1: error: expected depobj expression","clang/test/OpenMP/depobj_messages.cpp:144:1: error: expected depobj expression","clang/test/OpenMP/depobj_messages.cpp:145:1: error: expected depobj expression","clang/test/OpenMP/depobj_messages.cpp:146:1: error: expected depobj expression","clang/test/OpenMP/depobj_messages.cpp:150:1: error: expected depobj expression","clang/test/OpenMP/depobj_messages.cpp:171:1: error: expected depobj expression","clang/test/OpenMP/depobj_messages.cpp:172:1: error: expected depobj expression","clang/test/OpenMP/depobj_messages.cpp:173:20: error: expected depobj expression"}
}
}
},
},
["err_pragma_fenv_requires_precise"]={
["err_omp_depobj_single_clause_expected"]={
[d]={{nil,t,"err_pragma_fenv_requires_precise"}},
[j]={{nil,o,"err_omp_depobj_single_clause_expected"}},
[e]={{nil,t,"\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled"}},
[b]={{nil,o,"exactly one of \'depend\', \'destroy\', or \'update\' clauses is expected"}},
[f]={{nil,t,"\'#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled"}},
[c]={{nil,o,"exactly one of \'depend\', \'destroy\', or \'update\' clauses is expected"}},
[g]=k,
[e]=d,
[h]="\'\\#pragma STDC FENV_ACCESS ON\' is illegal when precise is disabled",
[f]="exactly one of \'depend\', \'destroy\', or \'update\' clauses is expected",
[b]=a,
[g]=a,
[c]={{nil,t,m}},
[i]={{nil,o,n}},
[j]={pb,1576908663,sb,ub},
[h]={I,1576908663,H,F},
[i]={{J,1360,"void Sema::ActOnPragmaFEnvAccess(SourceLocation Loc, bool IsEnabled) {\n  // ...\n  if (IsEnabled) {\n    // Verify Microsoft restriction:\n    // You can\'t enable fenv_access unless precise semantics are enabled.\n    // Precise semantics can be enabled either by the float_control\n    // pragma, or by using the /fp:precise or /fp:strict compiler options\n    if (!isPreciseFPEnabled())\n      Diag(Loc, diag::err_pragma_fenv_requires_precise);"}}
[k]={{m,11262,"StmtResult Sema::ActOnOpenMPDepobjDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // Only depobj expression and another single clause is allowed.\n  if (Clauses.size() > 2) {\n    Diag(Clauses[2]->getBeginLoc(), diag::err_omp_depobj_single_clause_expected);"},{m,11265,"StmtResult Sema::ActOnOpenMPDepobjDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // Only depobj expression and another single clause is allowed.\n if (Clauses.size() > 2) {\n  // ...\n  } else if (Clauses.size() < 1) {\n    Diag(Clauses[0]->getEndLoc(), diag::err_omp_depobj_single_clause_expected);"}},
},
["err_pragma_file_or_compound_scope"]={
[d]={{nil,t,"err_pragma_file_or_compound_scope"}},
[e]={{nil,t,"\'#pragma %0\' can only appear at file scope or at the start of a compound statement"}},
[f]={{nil,t,"\'#pragma A\' can only appear at file scope or at the start of a compound statement"}},
[g]=k,
[h]="\'\\#pragma (.*?)\' can only appear at file scope or at the start of a compound statement",
[b]=a,
[c]={{nil,t,y}},
[j]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control\n\nReviewers: rjmccall, erichkeane, sepavloff\n\nDifferential Revision: https://reviews.llvm.org/D72841"},
[i]={{tc,422,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fp_contract:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"fp_contract\";"},{tc,429,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fp:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"clang fp\";"},{tc,437,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fenv_access:\n  case tok::annot_pragma_fenv_access_ms:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << (Kind == tok::annot_pragma_fenv_access ? \"STDC FENV_ACCESS\" : \"fenv_access\");"},{tc,446,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_fenv_round:\n    // ...\n   Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"STDC FENV_ROUND\";"},{tc,453,"#include \"clang/Basic/TransformTypeTraits.def\"\n  // ...\n  case tok::annot_pragma_float_control:\n    // ...\n    Diag(Tok, diag::err_pragma_file_or_compound_scope) << \"float_control\";"}},
[l]={
[l]={
["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:6:14: error: \'#pragma fp_contract\' can only appear at file scope or at the start of a compound statement","clang/test/Parser/pragma-fp-contract.c:31:15: error: \'#pragma clang fp\' can only appear at file scope or at the start of a compound statement"}
["clang/test/OpenMP/depobj_messages.cpp"]={"clang/test/OpenMP/depobj_messages.cpp:163:40: error: exactly one of \'depend\', \'destroy\', or \'update\' clauses is expected","clang/test/OpenMP/depobj_messages.cpp:167:40: error: exactly one of \'depend\', \'destroy\', or \'update\' clauses is expected"}
}
}
},
},
["err_pragma_float_control_malformed"]={
["err_omp_device_ancestor_without_requires_reverse_offload"]={
[d]={{nil,t,"err_pragma_float_control_malformed"}},
[j]={{nil,E,"err_omp_device_ancestor_without_requires_reverse_offload"}},
[e]={{nil,t,"pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}},
[b]={{nil,E,"Device clause with ancestor device-modifier used without specifying \'requires reverse_offload\'"}},
[f]={{nil,t,"pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}},
[c]={{nil,E,"Device clause with ancestor device-modifier used without specifying \'requires reverse_offload\'"}},
[g]=k,
[e]=d,
[h]="pragma float_control is malformed; use \'float_control\\(\\{push\\|pop\\}\\)\' or \'float_control\\(\\{precise\\|except\\}, \\{on\\|off\\} \\[,push\\]\\)\'",
[f]="Device clause with ancestor device\\-modifier used without specifying \'requires reverse_offload\'",
[b]=a,
[g]=a,
[c]={{nil,t,y}},
[i]={{nil,E,n}},
[j]={"4f1e9a17e9d2",1587997559,"Add support for #pragma float_control","Add support for #pragma float_control\n\nReviewers: rjmccall, erichkeane, sepavloff\n\nDifferential Revision: https://reviews.llvm.org/D72841"},
[h]={ib,1616787805,lb,jb},
[i]={{v,2919,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2934,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2938,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n    if (Tok.isNot(tok::r_paren)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2948,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2953,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (!Tok.isAnyIdentifier()) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2968,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (PushOnOff == \"on\")\n      // ...\n      else if (PushOnOff == \"off\") {\n      // ...\n      } else if (PushOnOff == \"push\") {\n      // ...\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2975,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (!Tok.isAnyIdentifier()) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2982,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (ExpectedPush == \"push\") {\n        // ...\n        } else {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"},{v,2988,"/// Handle the \\#pragma float_control extension.\n///\n/// The syntax is:\n/// \\code\n///  #pragma float_control(keyword[, setting] [,push])\n/// \\endcode\n/// Where \'keyword\' and \'setting\' are identifiers.\n// \'keyword\' can be: precise, except, push, pop\n// \'setting\' can be: on, off\n/// The optional arguments \'setting\' and \'push\' are supported only\n/// when the keyword is \'precise\' or \'except\'.\nvoid PragmaFloatControlHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Kind == PFC_Unknown) {\n  // ...\n  } else if (Kind == PFC_Push || Kind == PFC_Pop) {\n  // ...\n  } else {\n    if (Tok.is(tok::r_paren))\n    // ...\n    else if (Tok.isNot(tok::comma)) {\n    // ...\n    } else {\n      // ...\n      if (Tok.isNot(tok::r_paren)) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_float_control_malformed);"}},
[k]={{m,20942,"OMPClause *Sema::ActOnOpenMPDeviceClause(OpenMPDeviceClauseModifier Modifier, Expr *Device, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ModifierLoc, SourceLocation EndLoc) {\n  // ...\n  // OpenMP 5.0 [2.12.5, Restrictions]\n  // In case of ancestor device-modifier, a requires directive with\n  // the reverse_offload clause must be specified.\n  if (Modifier == OMPC_DEVICE_ancestor) {\n    if (!DSAStack->hasRequiresDeclWithClause<OMPReverseOffloadClause>()) {\n      targetDiag(StartLoc, diag::err_omp_device_ancestor_without_requires_reverse_offload);"}},
[l]={
[l]={
["clang/test/Parser/fp-floatcontrol-syntax.cpp"]={"clang/test/Parser/fp-floatcontrol-syntax.cpp:37:39: error: pragma float_control is malformed; use \'float_control({push|pop})\' or \'float_control({precise|except}, {on|off} [,push])\'"}
["clang/test/OpenMP/target_device_ancestor_messages.cpp"]={"clang/test/OpenMP/target_device_ancestor_messages.cpp:5:20: error: Device clause with ancestor device-modifier used without specifying \'requires reverse_offload\'"}
}
}
},
},
["err_pragma_fp_invalid_argument"]={
["err_omp_device_type_mismatch"]={
[d]={{nil,n,"err_pragma_fp_invalid_argument"}},
[j]={{nil,p,"err_omp_device_type_mismatch"}},
[e]={{nil,C,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected %select{\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'|\'source\', \'double\' or \'extended\'}2"},{F,A,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected %select{\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'}2"},{Cb,t,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; %select{expected \'fast\' or \'on\' or \'off\'|expected \'on\' or \'off\'}2"},{o,n,"unexpected argument \'%0\' to \'#pragma clang fp %1\'; expected \'on\', \'fast\' or \'off\'"}},
[b]={{nil,p,"\'device_type(%0)\' does not match previously specified \'device_type(%1)\' for the same declaration"}},
[f]={{nil,C,{"unexpected argument \'A\' to \'#pragma clang fp B\'; expected ",{"\'fast\' or \'on\' or \'off\'","\'on\' or \'off\'","\'ignore\', \'maytrap\' or \'strict\'","\'source\', \'double\' or \'extended\'"}}},{F,A,{"unexpected argument \'A\' to \'#pragma clang fp B\'; expected ",{"\'fast\' or \'on\' or \'off\'","\'on\' or \'off\'","\'ignore\', \'maytrap\' or \'strict\'"}}},{Cb,t,{"unexpected argument \'A\' to \'#pragma clang fp B\'; ",{"expected \'fast\' or \'on\' or \'off\'","expected \'on\' or \'off\'"}}},{o,n,"unexpected argument \'A\' to \'#pragma clang fp B\'; expected \'on\', \'fast\' or \'off\'"}},
[c]={{nil,p,"\'device_type(A)\' does not match previously specified \'device_type(B)\' for the same declaration"}},
[g]=k,
[e]=d,
[h]="unexpected argument \'(.*?)\' to \'\\#pragma clang fp (.*?)\'; expected (?:\'fast\' or \'on\' or \'off\'|\'on\' or \'off\'|\'ignore\', \'maytrap\' or \'strict\'|\'source\', \'double\' or \'extended\')",
[f]="\'device_type\\((.*?)\\)\' does not match previously specified \'device_type\\((.*?)\\)\' for the same declaration",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]={{nil,p,n}},
[j]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp\n\nThis adds the new pragma and the first variant, contract(on/off/fast).\n\nThe pragma has the same block scope rules as STDC FP_CONTRACT, i.e. it can be\nplaced at the beginning of a compound statement or at file scope.\n\nSimilarly to STDC FP_CONTRACT there is no need to use attributes.  First an\nannotate token is inserted with the parsed details of the pragma.  Then the\nannotate token is parsed in the proper contexts and the Sema is updated with\nthe corresponding FPOptions using the shared ActOn function with STDC\nFP_CONTRACT.\n\nAfter this the FPOptions from the Sema is propagated into the AST expression\nnodes.  There is no change here.\n\nI was going to add a \'default\' option besides \'on/off/fast\' similar to STDC\nFP_CONTRACT but then decided against it. I think that we\'d have to make option\nuppercase then to avoid using \'default\' the keyword.  Also because of the\nscoped activation of pragma I am not sure there is really a need a for this.\n\nDifferential Revision: https://reviews.llvm.org/D31276\n\nllvm-svn: 299470"},
[h]={"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"},
[i]={{v,3248,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    // Don\'t diagnose if we have an eval_metod pragma with \"double\" kind.\n    if (Tok.isNot(tok::identifier) && !isEvalMethodDouble) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << static_cast<int>(*FlagKind);"},{v,3264,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n      // ...\n      if (!AnnotValue->ContractValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{v,3276,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n      // ...\n      if (!AnnotValue->ReassociateValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{v,3289,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n      // ...\n      if (!AnnotValue->ExceptionsValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"},{v,3302,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (FlagKind == TokFPAnnotValue::Contract) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Reassociate) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::Exceptions) {\n    // ...\n    } else if (FlagKind == TokFPAnnotValue::EvalMethod) {\n      // ...\n      if (!AnnotValue->EvalMethodValue) {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_argument) << PP.getSpelling(Tok) << OptionInfo->getName() << *FlagKind;"}},
[k]={{m,23075,"void Sema::ActOnOpenMPDeclareTargetName(NamedDecl *ND, SourceLocation Loc, OMPDeclareTargetDeclAttr::MapTypeTy MT, DeclareTargetContextInfo &DTCI) {\n  // ...\n  if (ActiveAttr && (*ActiveAttr)->getDevType() != DTCI.DT && (*ActiveAttr)->getLevel() == Level) {\n    Diag(Loc, diag::err_omp_device_type_mismatch) << OMPDeclareTargetDeclAttr::ConvertDevTypeTyToStr(DTCI.DT) << OMPDeclareTargetDeclAttr::ConvertDevTypeTyToStr((*ActiveAttr)->getDevType());"}},
[l]={
[l]={
["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:38:30: error: unexpected argument \'fast\' to \'#pragma clang fp reassociate\'; expected \'on\' or \'off\'"}
[U]={"clang/test/OpenMP/declare_target_messages.cpp:233:31: error: \'device_type(host)\' does not match previously specified \'device_type(any)\' for the same declaration","clang/test/OpenMP/declare_target_messages.cpp:234:31: error: \'device_type(nohost)\' does not match previously specified \'device_type(any)\' for the same declaration"}
}
}
},
},
["err_pragma_fp_invalid_option"]={
["err_omp_directive_before_requires"]={
[d]={{nil,n,"err_pragma_fp_invalid_option"}},
[j]={{nil,o,"err_omp_directive_before_requires"}},
[e]={{nil,A,"%select{invalid|missing}0 option%select{ %1|}0; expected \'contract\', \'reassociate\' or \'exceptions\'"},{Cb,t,"%select{invalid|missing}0 option%select{ %1|}0; expected \'contract\' or \'reassociate\'"},{o,n,"%select{invalid|missing}0 option%select{ %1|}0; expected contract"}},
[b]={{nil,o,"\'%0\' region encountered before requires directive with \'%1\' clause"}},
[f]={{nil,A,{{nb,Lb},Ob,{wb,a},"; expected \'contract\', \'reassociate\' or \'exceptions\'"}},{Cb,t,{{nb,Lb},Ob,{wb,a},"; expected \'contract\' or \'reassociate\'"}},{o,n,{{nb,Lb},Ob,{wb,a},"; expected contract"}}},
[c]={{nil,o,"\'A\' region encountered before requires directive with \'B\' clause"}},
[g]=k,
[e]=d,
[h]="(?:invalid|missing) option(?: (.*?)|); expected \'contract\', \'reassociate\' or \'exceptions\'",
[f]="\'(.*?)\' region encountered before requires directive with \'(.*?)\' clause",
[b]=a,
[g]=a,
[c]={{nil,n,y}},
[i]={{nil,o,n}},
[j]={"60d3264d5fbe",1491340716,"Add #pragma clang fp","Add #pragma clang fp\n\nThis adds the new pragma and the first variant, contract(on/off/fast).\n\nThe pragma has the same block scope rules as STDC FP_CONTRACT, i.e. it can be\nplaced at the beginning of a compound statement or at file scope.\n\nSimilarly to STDC FP_CONTRACT there is no need to use attributes. First an\nannotate token is inserted with the parsed details of the pragma. Then the\nannotate token is parsed in the proper contexts and the Sema is updated with\nthe corresponding FPOptions using the shared ActOn function with STDC\nFP_CONTRACT.\n\nAfter this the FPOptions from the Sema is propagated into the AST expression\nnodes.  There is no change here.\n\nI was going to add a \'default\' option besides \'on/off/fast\' similar to STDC\nFP_CONTRACT but then decided against it. I think that we\'d have to make option\nuppercase then to avoid using \'default\' the keyword. Also because of the\nscoped activation of pragma I am not sure there is really a need a for this.\n\nDifferential Revision: https://reviews.llvm.org/D31276\n\nllvm-svn: 299470"},
[h]={"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"},
[i]={{v,3213,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/true << \"\";"},{v,3231,"void PragmaFPHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n   if (!FlagKind) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_fp_invalid_option) << /*MissingOption=*/false << OptionInfo;"}},
[k]={{m,3542,"OMPRequiresDecl *Sema::CheckOMPRequiresDecl(SourceLocation Loc, ArrayRef<OMPClause *> ClauseList) {\n  // ...\n  if (!TargetLocations.empty() || !AtomicLoc.isInvalid()) {\n    for (const OMPClause *CNew : ClauseList) {\n      // Check if any of the requires clauses affect target regions.\n      if (isa<OMPUnifiedSharedMemoryClause>(CNew) || isa<OMPUnifiedAddressClause>(CNew) || isa<OMPReverseOffloadClause>(CNew) || isa<OMPDynamicAllocatorsClause>(CNew)) {\n        Diag(Loc, diag::err_omp_directive_before_requires) << \"target\" << getOpenMPClauseName(CNew->getClauseKind());"},{m,3550,"OMPRequiresDecl *Sema::CheckOMPRequiresDecl(SourceLocation Loc, ArrayRef<OMPClause *> ClauseList) {\n  // ...\n  if (!TargetLocations.empty() || !AtomicLoc.isInvalid()) {\n    for (const OMPClause *CNew : ClauseList) {\n      // Check if any of the requires clauses affect target regions.\n     if (isa<OMPUnifiedSharedMemoryClause>(CNew) || isa<OMPUnifiedAddressClause>(CNew) || isa<OMPReverseOffloadClause>(CNew) || isa<OMPDynamicAllocatorsClause>(CNew)) {\n      // ...\n      } else if (!AtomicLoc.isInvalid() && isa<OMPAtomicDefaultMemOrderClause>(CNew)) {\n        Diag(Loc, diag::err_omp_directive_before_requires) << \"atomic\" << getOpenMPClauseName(CNew->getClauseKind());"}},
[l]={
[l]={
["clang/test/Parser/pragma-fp.cpp"]={"clang/test/Parser/pragma-fp.cpp:5:17: error: missing option; expected \'contract\', \'reassociate\' or \'exceptions\'","clang/test/Parser/pragma-fp.cpp:12:18: error: invalid option \'blah\'; expected \'contract\', \'reassociate\' or \'exceptions\'"}
["clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp"]={"clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp:9:13: error: \'atomic\' region encountered before requires directive with \'atomic_default_mem_order\' clause","clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp:10:13: error: \'atomic\' region encountered before requires directive with \'atomic_default_mem_order\' clause","clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp:11:13: error: \'atomic\' region encountered before requires directive with \'atomic_default_mem_order\' clause"}
}
}
},
},
["err_pragma_invalid_keyword"]={
["err_omp_dispatch_statement_call"]={
[d]="err_pragma_invalid_keyword",
[j]={{nil,r,"err_omp_dispatch_statement_call"}},
[e]="invalid argument; expected \'enable\'%select{|, \'full\'}0%select{|, \'assume_safety\'}1 or \'disable\'",
[b]={{nil,r,"statement after \'#pragma omp dispatch\' must be a direct call to a target function or an assignment to one"}},
[f]={{nil,nil,{"invalid argument; expected \'enable\'",{a,", \'full\'"},{a,", \'assume_safety\'"}," or \'disable\'"}}},
[c]={{nil,r,"statement after \'#pragma omp dispatch\' must be a direct call to a target function or an assignment to one"}},
[g]=k,
[e]=d,
[h]="invalid argument; expected \'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\'",
[f]="statement after \'\\#pragma omp dispatch\' must be a direct call to a target function or an assignment to one",
[b]=a,
[g]=a,
[c]=y,
[i]={{nil,r,n}},
[j]={"cab7ca3e2a64",1406753673,"Add a state variable to the loop hint attribute.","Add a state variable to the loop hint attribute.\n\nThis patch is necessary to support constant expressions which replaces the integer value in the loop hint attribute with an expression. The integer value was also storing the pragma’s state for options like vectorize(enable/disable) and the pragma unroll and nounroll directive. The state variable is introduced to hold the state of those options/pragmas. This moves the validation of the state (keywords) from SemaStmtAttr handler to the loop hint annotation token handler.\n\nReviewed by Aaron Ballman\n\nllvm-svn: 214333"},
[h]={hb,1590001902,gb,kb},
[i]={{v,1415,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // ...\n  // Validate the argument.\n  if (StateOption) {\n    // ...\n    if (!Valid) {\n      if (OptionPipelineDisabled) {\n     // ...\n     } else {\n       Diag(Toks[0].getLocation(), diag::err_pragma_invalid_keyword) << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}},
[k]={{m,10518,"StmtResult Sema::ActOnOpenMPDispatchDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  if (!CurContext->isDependentContext()) {\n    // ...\n    if (!E) {\n      Diag(S->getBeginLoc(), diag::err_omp_dispatch_statement_call);"},{m,10535,"StmtResult Sema::ActOnOpenMPDispatchDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  if (!CurContext->isDependentContext()) {\n   // ...\n   if (!TargetCall) {\n     Diag(E->getBeginLoc(), diag::err_omp_dispatch_statement_call);"}},
[l]={
[l]={
["clang/test/Parser/pragma-loop-safety.cpp"]={"clang/test/Parser/pragma-loop-safety.cpp:18:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:19:105: error: invalid argument; expected \'enable\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:21:121: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:22:122: error: invalid argument; expected \'enable\', \'assume_safety\' or \'disable\'","clang/test/Parser/pragma-loop-safety.cpp:23:109: error: invalid argument; expected \'enable\', \'full\' or \'disable\'"}
["clang/test/OpenMP/dispatch_messages.cpp"]={"clang/test/OpenMP/dispatch_messages.cpp:78:3: error: statement after \'#pragma omp dispatch\' must be a direct call to a target function or an assignment to one","clang/test/OpenMP/dispatch_messages.cpp:82:3: error: statement after \'#pragma omp dispatch\' must be a direct call to a target function or an assignment to one","clang/test/OpenMP/dispatch_messages.cpp:88:3: error: statement after \'#pragma omp dispatch\' must be a direct call to a target function or an assignment to one","clang/test/OpenMP/dispatch_messages.cpp:92:3: error: statement after \'#pragma omp dispatch\' must be a direct call to a target function or an assignment to one","clang/test/OpenMP/dispatch_messages.cpp:99:3: error: statement after \'#pragma omp dispatch\' must be a direct call to a target function or an assignment to one","clang/test/OpenMP/dispatch_messages.cpp:103:3: error: statement after \'#pragma omp dispatch\' must be a direct call to a target function or an assignment to one","clang/test/OpenMP/dispatch_messages.cpp:107:3: error: statement after \'#pragma omp dispatch\' must be a direct call to a target function or an assignment to one","clang/test/OpenMP/dispatch_messages.cpp:111:3: error: statement after \'#pragma omp dispatch\' must be a direct call to a target function or an assignment to one","clang/test/OpenMP/dispatch_messages.cpp:115:3: error: statement after \'#pragma omp dispatch\' must be a direct call to a target function or an assignment to one"}
}
}
},
},
["err_pragma_loop_compatibility"]={
["err_omp_duplicate_map_type_modifier"]={
[d]="err_pragma_loop_compatibility",
[j]={{nil,y,"err_omp_duplicate_map_type_modifier"}},
[e]="%select{incompatible|duplicate}0 directives \'%1\' and \'%2\'",
[b]={{nil,y,"same map type modifier has been specified more than once"}},
[f]={{nil,nil,{{"incompatible","duplicate"}," directives \'B\' and \'C\'"}}},
[c]={{nil,y,"same map type modifier has been specified more than once"}},
[g]=k,
[e]=d,
[h]="(?:incompatible|duplicate) directives \'(.*?)\' and \'(.*?)\'",
[f]="same map type modifier has been specified more than once",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,y,n}},
[j]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"},
[h]={"ef57943e3fba",1545171521,"[OPENMP] parsing and sema support for \'close\' map-type-modifier","[OPENMP] parsing and sema support for \'close\' map-type-modifier\n\nA map clause with the close map-type-modifier is a hint to \nprefer that the variables are mapped using a copy into faster \nmemory.\n\nPatch by Ahsan Saghir (saghir)\n\nDifferential Revision: https://reviews.llvm.org/D55719\n\nllvm-svn: 349551"},
[i]={{"clang/lib/Sema/SemaStmtAttr.cpp",431,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n  // ...\n  for (const auto *I : Attrs) {\n    // ...\n    if (PrevAttr)\n      // ...\n      S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/true << PrevAttr->getDiagnosticName(Policy) << LH->getDiagnosticName(Policy);"},{"clang/lib/Sema/SemaStmtAttr.cpp",442,"static void CheckForIncompatibleAttributes(Sema &S, const SmallVectorImpl<const Attr *> &Attrs) {\n  // ...\n  for (const auto *I : Attrs) {\n    // ...\n    if (CategoryState.StateAttr && CategoryState.NumericAttr && (Category == Unroll || Category == UnrollAndJam || CategoryState.StateAttr->getState() == LoopHintAttr::Disable)) {\n      // ...\n      S.Diag(OptionLoc, diag::err_pragma_loop_compatibility) << /*Duplicate=*/false << CategoryState.StateAttr->getDiagnosticName(Policy) << CategoryState.NumericAttr->getDiagnosticName(Policy);"}},
[k]={{m,22174,"OMPClause *Sema::ActOnOpenMPMapClause(Expr *IteratorModifier, ArrayRef<OpenMPMapModifierKind> MapTypeModifiers, ArrayRef<SourceLocation> MapTypeModifiersLoc, CXXScopeSpec &MapperIdScopeSpec, DeclarationNameInfo &MapperId, OpenMPMapClauseKind MapType, bool IsMapTypeImplicit, SourceLocation MapLoc, SourceLocation ColonLoc, ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs, bool NoDiagnose, ArrayRef<Expr *> UnresolvedMappers) {\n  // ...\n  for (unsigned I = 0, E = MapTypeModifiers.size(); I < E; ++I) {\n    if (MapTypeModifiers[I] != OMPC_MAP_MODIFIER_unknown && llvm::is_contained(Modifiers, MapTypeModifiers[I])) {\n      Diag(MapTypeModifiersLoc[I], diag::err_omp_duplicate_map_type_modifier);"}},
[l]={
[l]={
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:27:15: error: incompatible directives \'pipeline(disable)\' and \'pipeline_initiation_interval(4)\'"}
["clang/test/OpenMP/target_map_messages.cpp"]={"clang/test/OpenMP/target_map_messages.cpp:192:35: error: same map type modifier has been specified more than once","clang/test/OpenMP/target_map_messages.cpp:194:43: error: same map type modifier has been specified more than once","clang/test/OpenMP/target_map_messages.cpp:194:51: error: same map type modifier has been specified more than once","clang/test/OpenMP/target_map_messages.cpp:198:37: error: same map type modifier has been specified more than once","clang/test/OpenMP/target_map_messages.cpp:205:39: error: same map type modifier has been specified more than once","clang/test/OpenMP/target_map_messages.cpp:216:63: error: same map type modifier has been specified more than once","clang/test/OpenMP/target_map_messages.cpp:216:71: error: same map type modifier has been specified more than once","clang/test/OpenMP/target_map_messages.cpp:216:78: error: same map type modifier has been specified more than once","clang/test/OpenMP/target_map_messages.cpp:216:87: error: same map type modifier has been specified more than once"}
}
}
},
},
["err_pragma_loop_invalid_argument_type"]={
["err_omp_duplicate_motion_modifier"]={
[d]="err_pragma_loop_invalid_argument_type",
[j]={{nil,A,"err_omp_duplicate_motion_modifier"}},
[e]="invalid argument of type %0; expected an integer type",
[b]={{nil,A,"same motion modifier has been specified more than once"}},
[f]="invalid argument of type A; expected an integer type",
[c]={{nil,A,"same motion modifier has been specified more than once"}},
[g]=k,
[e]=d,
[h]="invalid argument of type (.*?); expected an integer type",
[f]="same motion modifier has been specified more than once",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,A,n}},
[j]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints.\n\nPreviously loop hints such as #pragma loop vectorize_width(#) required a constant. This patch allows a constant expression to be used as well. Such as a non-type template parameter or an expression (2 * c + 1).\n\nReviewed by Richard Smith\n\nllvm-svn: 219589"},
[h]={"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"},
[i]={{O,3826,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n  // ...\n  if (!QT->isIntegerType() || QT->isBooleanType() || QT->isCharType()) {\n   Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_type) << QT;"}},
[k]={{m,23280,"OMPClause *Sema::ActOnOpenMPToClause(ArrayRef<OpenMPMotionModifierKind> MotionModifiers, ArrayRef<SourceLocation> MotionModifiersLoc, CXXScopeSpec &MapperIdScopeSpec, DeclarationNameInfo &MapperId, SourceLocation ColonLoc, ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs, ArrayRef<Expr *> UnresolvedMappers) {\n  // ...\n  for (unsigned I = 0, E = MotionModifiers.size(); I < E; ++I) {\n    if (MotionModifiers[I] != OMPC_MOTION_MODIFIER_unknown && llvm::is_contained(Modifiers, MotionModifiers[I])) {\n     Diag(MotionModifiersLoc[I], diag::err_omp_duplicate_motion_modifier);"},{m,23317,"OMPClause *Sema::ActOnOpenMPFromClause(ArrayRef<OpenMPMotionModifierKind> MotionModifiers, ArrayRef<SourceLocation> MotionModifiersLoc, CXXScopeSpec &MapperIdScopeSpec, DeclarationNameInfo &MapperId, SourceLocation ColonLoc, ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs, ArrayRef<Expr *> UnresolvedMappers) {\n  // ...\n  for (unsigned I = 0, E = MotionModifiers.size(); I < E; ++I) {\n    if (MotionModifiers[I] != OMPC_MOTION_MODIFIER_unknown && llvm::is_contained(Modifiers, MotionModifiers[I])) {\n      Diag(MotionModifiersLoc[I], diag::err_omp_duplicate_motion_modifier);"}}
[l]={
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:12:134: error: invalid argument of type \'double\'; expected an integer type"}
}
},
},
["err_pragma_loop_invalid_argument_value"]={
["err_omp_expected_access_to_data_field"]={
[d]="err_pragma_loop_invalid_argument_value",
[j]="err_omp_expected_access_to_data_field",
[e]="%select{invalid value \'%0\'; must be positive|value \'%0\' is too large}1",
[b]="expected access to data field",
[f]={{nil,nil,{{"invalid value \'A\'; must be positive","value \'A\' is too large"}}}},
[c]="expected access to data field",
[g]=k,
[e]=d,
[h]="(?:invalid value \'(.*?)\'; must be positive|value \'(.*?)\' is too large)",
[f]="expected access to data field",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"c724a83e2054",1413146767,"Allow constant expressions in pragma loop hints.","Allow constant expressions in pragma loop hints.\n\nPreviously loop hints such as #pragma loop vectorize_width(#) required a constant. This patch allows a constant expression to be used as well. Such as a non-type template parameter or an expression (2 * c + 1).\n\nReviewed by Richard Smith\n\nllvm-svn: 219589"},
[h]={"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"},
[i]={{O,3838,"bool Sema::CheckLoopHintExpr(Expr *E, SourceLocation Loc) {\n // ...\n if (!ValueIsPositive || ValueAPS.getActiveBits() > 31) {\n   Diag(E->getExprLoc(), diag::err_pragma_loop_invalid_argument_value) << toString(ValueAPS, 10) << ValueIsPositive;"}},
[k]={{m,21156,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  // ...\n  bool VisitMemberExpr(MemberExpr *ME) {\n   // ...\n   if (!isa<FieldDecl>(ME->getMemberDecl())) {\n      if (!NoDiagnose) {\n       SemaRef.Diag(ELoc, diag::err_omp_expected_access_to_data_field) << ME->getSourceRange();"}}
[l]={
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:13:110: error: invalid value \'0\'; must be positive","clang/test/Sema/pragma-pipeline.cpp:14:111: error: invalid value \'-1\'; must be positive"}
}
},
},
["err_pragma_loop_invalid_option"]={
["err_omp_expected_addressable_lvalue_or_array_item"]={
[d]="err_pragma_loop_invalid_option",
[j]={{nil,L,"err_omp_expected_addressable_lvalue_or_array_item"}},
[e]={{nil,o,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"},{x,u,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, or distribute"},{"7.1",nil,"%select{invalid|missing}0 option%select{ %1|}0; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, or distribute"}},
[b]={{nil,o,"expected addressable lvalue expression, array element%select{ or array section|, array section or array shaping expression}0%select{| of non \'omp_depend_t\' type}1"},{p,L,"expected addressable lvalue expression, array element or array section"}},
[f]={{nil,o,{{nb,Lb},Ob,{wb,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"}},{x,u,{{nb,Lb},Ob,{wb,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, or distribute"}},{"7.1",nil,{{nb,Lb},Ob,{wb,a},"; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, or distribute"}}},
[c]={{nil,o,{"expected addressable lvalue expression, array element",{" or array section",", array section or array shaping expression"},{a," of non \'omp_depend_t\' type"}}},{p,L,"expected addressable lvalue expression, array element or array section"}},
[g]=k,
[e]=d,
[h]="(?:invalid|missing) option(?: (.*?)|); expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute",
[f]="expected addressable lvalue expression, array element(?: or array section|, array section or array shaping expression)(?:| of non \'omp_depend_t\' type)",
[b]=a,
[g]=a,
[c]=y,
[i]={{nil,L,n}},
[j]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"},
[h]={"463a9fea1ec2",1501182930,"[OPENMP] Allow all lvalues in \'depend\' clause.","[OPENMP] Allow all lvalues in \'depend\' clause.\n\nAccording to upcoming OpenMP 5.0 all addressable lvalue expressions are\nallowed in deoend clause.\n\nllvm-svn: 309309"},
[i]={{v,3515,"/// Handle the \\#pragma clang loop directive.\n///  #pragma clang \'loop\' loop-hints\n///\n///  loop-hints:\n///    loop-hint loop-hints[opt]\n///\n///  loop-hint:\n///    \'vectorize\' \'(\' loop-hint-keyword \')\'\n///    \'interleave\' \'(\' loop-hint-keyword \')\'\n///    \'unroll\' \'(\' unroll-hint-keyword \')\'\n///    \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n///    \'vectorize_width\' \'(\' loop-hint-value \')\'\n///    \'interleave_count\' \'(\' loop-hint-value \')\'\n///    \'unroll_count\' \'(\' loop-hint-value \')\'\n///    \'pipeline\' \'(\' disable \')\'\n///    \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n/// loop-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'assume_safety\'\n///\n/// unroll-hint-keyword:\n///   \'enable\'\n///    \'disable\'\n///    \'full\'\n///\n///  loop-hint-value:\n///    constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known.  Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time.  Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n   PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/true << \"\";"},{v,3537,"/// Handle the \\#pragma clang loop directive.\n/// #pragma clang \'loop\' loop-hints\n///\n/// loop-hints:\n///    loop-hint loop-hints[opt]\n///\n/// loop-hint:\n///   \'vectorize\' \'(\' loop-hint-keyword \')\'\n///    \'interleave\' \'(\' loop-hint-keyword \')\'\n///    \'unroll\' \'(\' unroll-hint-keyword \')\'\n///    \'vectorize_predicate\' \'(\' loop-hint-keyword \')\'\n///    \'vectorize_width\' \'(\' loop-hint-value \')\'\n///    \'interleave_count\' \'(\' loop-hint-value \')\'\n///    \'unroll_count\' \'(\' loop-hint-value \')\'\n///    \'pipeline\' \'(\' disable \')\'\n///    \'pipeline_initiation_interval\' \'(\' loop-hint-value \')\'\n///\n/// loop-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///   \'assume_safety\'\n///\n///  unroll-hint-keyword:\n///    \'enable\'\n///    \'disable\'\n///    \'full\'\n///\n///  loop-hint-value:\n///    constant-expression\n///\n/// Specifying vectorize(enable) or vectorize_width(_value_) instructs llvm to\n/// try vectorizing the instructions of the loop it precedes. Specifying\n/// interleave(enable) or interleave_count(_value_) instructs llvm to try\n/// interleaving multiple iterations of the loop it precedes. The width of the\n/// vector instructions is specified by vectorize_width() and the number of\n/// interleaved loop iterations is specified by interleave_count(). Specifying a\n/// value of 1 effectively disables vectorization/interleaving, even if it is\n/// possible and profitable, and 0 is invalid. The loop vectorizer currently\n/// only works on inner loops.\n///\n/// The unroll and unroll_count directives control the concatenation\n/// unroller. Specifying unroll(enable) instructs llvm to unroll the loop\n/// completely if the trip count is known at compile time and unroll partially\n/// if the trip count is not known.  Specifying unroll(full) is similar to\n/// unroll(enable) but will unroll the loop only if the trip count is known at\n/// compile time.  Specifying unroll(disable) disables unrolling for the\n/// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the\n/// loop the number of times indicated by the value.\nvoid PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (!OptionValid) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_option) << /*MissingOption=*/false << OptionInfo;"}},
[k]={{m,20854,"OMPClause *Sema::ActOnOpenMPDependClause(const OMPDependClause::DependDataTy &Data, Expr *DepModifier, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n if (DepKind == OMPC_DEPEND_sink || DepKind == OMPC_DEPEND_source) {\n  // ...\n  } else {\n    for (Expr *RefExpr : VarList) {\n     // ...\n     if (DepKind != OMPC_DEPEND_sink && DepKind != OMPC_DEPEND_source) {\n       // ...\n       if (DepKind == OMPC_DEPEND_depobj) {\n       // ...\n       } else {\n         // ...\n         // OpenMP 5.0, 2.17.11 depend Clause, Restrictions, C/C++\n         // List items used in depend clauses with the in, out, inout,\n         // inoutset, or mutexinoutset dependence types cannot be\n         // expressions of the omp_depend_t type.\n         if (!RefExpr->isValueDependent() && !RefExpr->isTypeDependent() && !RefExpr->isInstantiationDependent() && !RefExpr->containsUnexpandedParameterPack() && (!RefExpr->IgnoreParenImpCasts()->isLValue() || (OMPDependTFound && DSAStack->getOMPDependT().getTypePtr() == ExprTy.getTypePtr()))) {\n           Diag(ELoc, diag::err_omp_expected_addressable_lvalue_or_array_item) << (LangOpts.OpenMP >= 50 ? 1 : 0) << (LangOpts.OpenMP >= 50 ? 1 : 0) << RefExpr->getSourceRange();"},{m,20867,"OMPClause *Sema::ActOnOpenMPDependClause(const OMPDependClause::DependDataTy &Data, Expr *DepModifier, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  if (DepKind == OMPC_DEPEND_sink || DepKind == OMPC_DEPEND_source) {\n // ...\n  } else {\n    for (Expr *RefExpr : VarList) {\n     // ...\n      if (DepKind != OMPC_DEPEND_sink && DepKind != OMPC_DEPEND_source) {\n       // ...\n        if (DepKind == OMPC_DEPEND_depobj) {\n       // ...\n        } else {\n         // ...\n          if (ASE && !ASE->getBase()->isTypeDependent() && !ASE->getBase()->getType().getNonReferenceType()->isPointerType() && !ASE->getBase()->getType().getNonReferenceType()->isArrayType()) {\n           Diag(ELoc, diag::err_omp_expected_addressable_lvalue_or_array_item) << (LangOpts.OpenMP >= 50 ? 1 : 0) << (LangOpts.OpenMP >= 50 ? 1 : 0) << RefExpr->getSourceRange();"},{m,20881,"OMPClause *Sema::ActOnOpenMPDependClause(const OMPDependClause::DependDataTy &Data, Expr *DepModifier, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n  if (DepKind == OMPC_DEPEND_sink || DepKind == OMPC_DEPEND_source) {\n // ...\n } else {\n    for (Expr *RefExpr : VarList) {\n     // ...\n     if (DepKind != OMPC_DEPEND_sink && DepKind != OMPC_DEPEND_source) {\n       // ...\n       if (DepKind == OMPC_DEPEND_depobj) {\n       // ...\n       } else {\n         // ...\n         if (!Res.isUsable() && !isa<OMPArraySectionExpr>(SimpleExpr) && !isa<OMPArrayShapingExpr>(SimpleExpr)) {\n           Diag(ELoc, diag::err_omp_expected_addressable_lvalue_or_array_item) << (LangOpts.OpenMP >= 50 ? 1 : 0) << (LangOpts.OpenMP >= 50 ? 1 : 0) << RefExpr->getSourceRange();"},{m,23995,"OMPClause *Sema::ActOnOpenMPAffinityClause(SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, Expr *Modifier, ArrayRef<Expr *> Locators) {\n // ...\n for (Expr *RefExpr : Locators) {\n   // ...\n   if (!SimpleExpr->isLValue()) {\n     Diag(ELoc, diag::err_omp_expected_addressable_lvalue_or_array_item) << 1 << 0 << RefExpr->getSourceRange();"},{m,24007,"OMPClause *Sema::ActOnOpenMPAffinityClause(SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, Expr *Modifier, ArrayRef<Expr *> Locators) {\n  // ...\n  for (Expr *RefExpr : Locators) {\n    // ...\n    if (!Res.isUsable() && !isa<OMPArraySectionExpr>(SimpleExpr) && !isa<OMPArrayShapingExpr>(SimpleExpr)) {\n      Diag(ELoc, diag::err_omp_expected_addressable_lvalue_or_array_item) << 1 << 0 << RefExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:70:242: error: invalid option \'unroll_and_jam\'; expected vectorize, vectorize_width, interleave, interleave_count, unroll, unroll_count, pipeline, pipeline_initiation_interval, vectorize_predicate, or distribute"}
["clang/test/OpenMP/taskwait_depend_messages.cpp"]={"clang/test/OpenMP/taskwait_depend_messages.cpp:36:40: error: expected addressable lvalue expression, array element, array section or array shaping expression of non \'omp_depend_t\' type","clang/test/OpenMP/taskwait_depend_messages.cpp:40:37: error: expected addressable lvalue expression, array element, array section or array shaping expression of non \'omp_depend_t\' type","clang/test/OpenMP/taskwait_depend_messages.cpp:44:36: error: expected addressable lvalue expression, array element, array section or array shaping expression of non \'omp_depend_t\' type"}
}
}
},
},
["err_pragma_loop_invalid_vectorize_option"]={
["err_omp_expected_array_alloctraits"]={
[d]={{nil,A,"err_pragma_loop_invalid_vectorize_option"}},
[j]={{nil,o,"err_omp_expected_array_alloctraits"}},
[e]={{nil,A,"vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')"}},
[b]={{nil,o,"expected constant sized array of \'omp_alloctrait_t\' elements, not %0"}},
[f]={{nil,A,"vectorize_width loop hint malformed; use vectorize_width(X, fixed) or vectorize_width(X, scalable) where X is an integer, or vectorize_width(\'fixed\' or \'scalable\')"}},
[c]={{nil,o,"expected constant sized array of \'omp_alloctrait_t\' elements, not A"}},
[g]=k,
[e]=d,
[h]="vectorize_width loop hint malformed; use vectorize_width\\(X, fixed\\) or vectorize_width\\(X, scalable\\) where X is an integer, or vectorize_width\\(\'fixed\' or \'scalable\'\\)",
[f]="expected constant sized array of \'omp_alloctrait_t\' elements, not (.*?)",
[b]=a,
[g]=a,
[c]={{nil,A,y}},
[i]={{nil,o,n}},
[j]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors","[SVE] Add support to vectorize_width loop pragma for scalable vectors\n\nThis patch adds support for two new variants of the vectorize_width\npragma:\n\n1. vectorize_width(X[, fixed|scalable]) where an optional second\nparameter is passed to the vectorize_width pragma, which indicates if\nthe user wishes to use fixed width or scalable vectorization. For\nexample the user can now write something like:\n\n  #pragma clang loop vectorize_width(4, fixed)\nor\n  #pragma clang loop vectorize_width(4, scalable)\n\nIn the absence of a second parameter it is assumed the user wants\nfixed width vectorization, in order to maintain compatibility with\nexisting code.\n2. vectorize_width(fixed|scalable) where the width is left unspecified,\nbut the user hints what type of vectorization they prefer, either\nfixed width or scalable.\n\nI have implemented this by making use of the LLVM loop hint attribute:\n\n  llvm.loop.vectorize.scalable.enable\n\nTests were added to\n\n  clang/test/CodeGenCXX/pragma-loop.cpp\n\nfor both the \'fixed\' and \'scalable\' optional parameter.\n\nSee this thread for context: http://lists.llvm.org/pipermail/cfe-dev/2020-November/067262.html\n\nDifferential Revision: https://reviews.llvm.org/D89031"},
[h]={I,1576908663,H,F},
[i]={{v,1466,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n  // ...\n  // Validate the argument.\n  if (StateOption) {\n // ...\n } else if (OptionInfo && OptionInfo->getName() == \"vectorize_width\") {\n   // ...\n    // Look for vectorize_width(fixed|scalable)\n    if (IsScalableStr == \"scalable\" || IsScalableStr == \"fixed\") {\n   // ...\n   } else {\n      // ...\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (IsScalableStr != \"scalable\" && IsScalableStr != \"fixed\") {\n          Diag(Tok.getLocation(), diag::err_pragma_loop_invalid_vectorize_option);"}}
[k]={{m,23957,"OMPClause *Sema::ActOnOpenMPUsesAllocatorClause(SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc, ArrayRef<UsesAllocatorsData> Data) {\n  // ...\n  for (const UsesAllocatorsData &D : Data) {\n   // ...\n   if (D.AllocatorTraits) {\n     if (D.AllocatorTraits->isTypeDependent()) {\n     // ...\n     } else {\n        // ...\n        if (TraitTy.isNull() || !(Context.hasSameUnqualifiedType(TraitTy, DSAStack->getOMPAlloctraitT()) || Context.typesAreCompatible(TraitTy, DSAStack->getOMPAlloctraitT(),\n         // ...\n         Diag(D.AllocatorTraits->getExprLoc(), diag::err_omp_expected_array_alloctraits) << AllocatorTraitsExpr->getType();"}},
},
["err_pragma_loop_missing_argument"]={
[d]="err_pragma_loop_missing_argument",
[e]="missing argument; expected %select{an integer value|\'enable\'%select{|, \'full\'}1%select{|, \'assume_safety\'}2 or \'disable\'}0",
[f]={{nil,nil,{"missing argument; expected ",{"an integer value",{"\'enable\'",{a,", \'full\'"},{a,", \'assume_safety\'"}," or \'disable\'"}}}}},
[g]=k,
[h]="missing argument; expected (?:an integer value|\'enable\'(?:|, \'full\')(?:|, \'assume_safety\') or \'disable\')",
[b]=a,
[c]=y,
[j]={"f637790102ea",1403202615,"Fix PR20069: bad loop pragma arguments crash FE","Fix PR20069: bad loop pragma arguments crash FE\n\nThis patch fixes a crash when handling malformed arguments to loop pragmas such\nas: \"#pragma clang loop vectorize(()\".  Essentially any argument which is not an\nidentifier or constant resulted in a crash.  This patch also changes a couple of\nthe error messages which weren\'t quite correct. New behavior with this patch vs\nold behavior:\n\n#pragma clang loop vectorize(1)\nOLD: error: missing keyword; expected \'enable\' or \'disable\'\nNEW: error: invalid argument; expected \'enable\' or \'disable\'\n\n#pragma clang loop vectorize()\nOLD: error: expected \')\'\nNEW: error: missing argument to loop pragma \'vectorize\'\n\n#pragma clang loop vectorize_width(bad)\nOLD: error: missing value; expected a positive integer value\nNEW: error: invalid argument; expected a positive integer value\n\n#pragma clang loop vectorize(bad)\nOLD: invalid keyword \'bad\'; expected \'enable\' or \'disable\'\nNEW: error: invalid argument; expected \'enable\' or \'disable\'\n\nhttp://reviews.llvm.org/D4197\n\nPatch by Mark Heffernan\n\nllvm-svn: 211292"},
[i]={{v,1391,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // ...\n // Verify loop hint has an argument.\n  if (Toks[0].is(tok::eof)) {\n    // ...\n    Diag(Toks[0].getLocation(), diag::err_pragma_loop_missing_argument) << /*StateArgument=*/StateOption << /*FullKeyword=*/(OptionUnroll || OptionUnrollAndJam) << /*AssumeSafetyKeyword=*/AssumeSafetyArg;"}},
[l]={
[l]={
["clang/test/Parser/pragma-unroll-and-jam.cpp"]={"clang/test/Parser/pragma-unroll-and-jam.cpp:31:94: error: missing argument; expected an integer value"}
["clang/test/OpenMP/target_uses_allocators_messages.cpp"]={"clang/test/OpenMP/target_uses_allocators_messages.cpp:45:45: error: expected constant sized array of \'omp_alloctrait_t\' elements, not \'int\'","clang/test/OpenMP/target_uses_allocators_messages.cpp:47:45: error: expected constant sized array of \'omp_alloctrait_t\' elements, not \'omp_alloctrait_t *\'"}
}
}
},
},
["err_pragma_loop_precedes_nonloop"]={
["err_omp_expected_base_var_name"]={
[d]="err_pragma_loop_precedes_nonloop",
[j]="err_omp_expected_base_var_name",
[e]="expected a for, while, or do-while loop to follow \'%0\'",
[b]="expected variable name as a base of the array %select{subscript|section}0",
[f]="expected a for, while, or do-while loop to follow \'A\'",
[c]={{nil,nil,{"expected variable name as a base of the array ",{"subscript","section"}}}},
[g]=k,
[e]=d,
[h]="expected a for, while, or do\\-while loop to follow \'(.*?)\'",
[f]="expected variable name as a base of the array (?:subscript|section)",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"b06b15aa28d0",1402058424,"Adding a new #pragma for the vectorize and interleave optimization hints.","Adding a new #pragma for the vectorize and interleave optimization hints.\n\nPatch thanks to Tyler Nowicki!\n\nllvm-svn: 210330"},
[h]={"f24e7b1f609c",1444295453,"[OPENMP 4.1] Codegen for array sections/subscripts in \'reduction\' clause.","[OPENMP 4.1] Codegen for array sections/subscripts in \'reduction\' clause.\nOpenMP 4.1 adds support for array sections/subscripts in \'reduction\' clause. Patch adds codegen for this feature.\n\nllvm-svn: 249672"},
[i]={{"clang/lib/Sema/SemaStmtAttr.cpp",91,"static Attr *handleLoopHintAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange) {\n  // ...\n  // This could be handled automatically by adding a Subjects definition in\n  // Attr.td, but that would make the diagnostic behavior worse in this case\n  // because the user spells this attribute as a pragma.\n if (!isa<DoStmt, ForStmt, CXXForRangeStmt, WhileStmt>(St)) {\n    // ...\n    S.Diag(St->getBeginLoc(), diag::err_pragma_loop_precedes_nonloop) << Pragma;"}},
[k]={{m,5374,"static std::pair<ValueDecl *, bool> getPrivateItem(Sema &S, Expr *&RefExpr, SourceLocation &ELoc, SourceRange &ERange, bool AllowArraySection, StringRef DiagType) {\n  // ...\n  if ((!DE || !isa<VarDecl>(DE->getDecl())) && (S.getCurrentThisType().isNull() || !ME || !isa<CXXThisExpr>(ME->getBase()->IgnoreParenImpCasts()) || !isa<FieldDecl>(ME->getMemberDecl()))) {\n    if (IsArrayExpr != NoArrayExpr) {\n      S.Diag(ELoc, diag::err_omp_expected_base_var_name) << IsArrayExpr << ERange;"},{m,21219,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  // ...\n  bool VisitArraySubscriptExpr(ArraySubscriptExpr *AE) {\n    // ...\n    if (!E->getType()->isAnyPointerType() && !E->getType()->isArrayType()) {\n     if (!NoDiagnose) {\n        SemaRef.Diag(ELoc, diag::err_omp_expected_base_var_name) << 0 << AE->getSourceRange();"},{m,21270,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  // ...\n  bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n    // ...\n    if (!IsPointer && !CurType->isArrayType()) {\n      SemaRef.Diag(ELoc, diag::err_omp_expected_base_var_name) << 0 << OASE->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/pragma-pipeline.cpp"]={"clang/test/Sema/pragma-pipeline.cpp:22:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'","clang/test/Sema/pragma-pipeline.cpp:24:97: error: expected a for, while, or do-while loop to follow \'#pragma clang loop\'"}
["clang/test/OpenMP/for_reduction_messages.cpp"]={"clang/test/OpenMP/for_reduction_messages.cpp:245:38: error: expected variable name as a base of the array subscript","clang/test/OpenMP/for_reduction_messages.cpp:410:40: error: expected variable name as a base of the array subscript"}
}
}
},
},
["err_pragma_message_malformed"]={
["err_omp_expected_clause"]={
[d]="err_pragma_message_malformed",
[j]={{nil,y,"err_omp_expected_clause"}},
[e]="pragma %select{message|warning|error}0 requires parenthesized string",
[b]={{nil,y,"expected at least one clause on \'#pragma omp %0\' directive"}},
[f]={{nil,nil,{"pragma ",{"message","warning","error"}," requires parenthesized string"}}},
[c]={{nil,y,"expected at least one clause on \'#pragma omp A\' directive"}},
[g]=k,
[e]=d,
[h]="pragma (?:message|warning|error) requires parenthesized string",
[f]="expected at least one clause on \'\\#pragma omp (.*?)\' directive",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,y,u}},
[j]={"30c924b3e874",1277572299,"Implement support for #pragma message, patch by Michael Spencer!","Implement support for #pragma message, patch by Michael Spencer!\n\nllvm-svn: 106950"},
[h]={"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"},
[i]={{H,1653,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///   #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///   #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n // ...\n void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n   // ...\n   default:\n     PP.Diag(MessageLoc, diag::err_pragma_message_malformed) << Kind;"},{H,1664,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension.  The syntax is:\n/// \\code\n///   #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///   #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (ExpectClosingParen) {\n      if (Tok.isNot(tok::r_paren)) {\n       PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"},{H,1671,"/// PragmaMessageHandler - Handle the microsoft and gcc \\#pragma message\n/// extension. The syntax is:\n/// \\code\n///   #pragma message(string)\n/// \\endcode\n/// OR, in GCC mode:\n/// \\code\n///   #pragma message string\n/// \\endcode\n/// string is a string, which is fully macro expanded, and permits string\n/// concatenation, embedded escape characters, etc... See MSDN for more details.\n/// Also handles \\#pragma GCC warning and \\#pragma GCC error which take the same\n/// form as \\#pragma message.\nstruct PragmaMessageHandler : public PragmaHandler {\n  // ...\n  void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override {\n    // ...\n    if (Tok.isNot(tok::eod)) {\n      PP.Diag(Tok.getLocation(), diag::err_pragma_message_malformed) << Kind;"}},
[k]={{t,620,"/// Parses \'omp declare mapper\' directive.\n///\n///       declare-mapper-directive:\n///         annot_pragma_openmp \'declare\' \'mapper\' \'(\' [<mapper-identifier> \':\']\n///         <type> <var> \')\' [<clause>[[,] <clause>] ... ]\n///        annot_pragma_openmp_end\n/// <mapper-identifier> and <var> are base language identifiers.\n///\nParser::DeclGroupPtrTy Parser::ParseOpenMPDeclareMapperDirective(AccessSpecifier AS) {\n // ...\n  if (Clauses.empty()) {\n    Diag(Tok, diag::err_omp_expected_clause) << getOpenMPDirectiveName(OMPD_declare_mapper);"},{t,2146,"/// 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_requires: {\n    // ...\n    if (Tok.is(tok::annot_pragma_openmp_end)) {\n     Diag(Tok, diag::err_omp_expected_clause) << getOpenMPDirectiveName(OMPD_requires);"},{t,2173,"/// 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_requires: {\n    // ...\n    // Consume final annot_pragma_openmp_end\n    if (Clauses.empty()) {\n      Diag(Tok, diag::err_omp_expected_clause) << getOpenMPDirectiveName(OMPD_requires);"}},
[l]={
[l]={
["clang/test/Lexer/pragma-message.c"]={"clang/test/Lexer/pragma-message.c:30:9: error: pragma message requires parenthesized string","clang/test/Lexer/pragma-message.c:31:90: error: pragma warning requires parenthesized string"}
["clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp"]={"clang/test/OpenMP/requires_default_atomic_mem_order_messages.cpp:12:248: error: expected at least one clause on \'#pragma omp requires\' directive"}
}
}
},
},
["err_pragma_misplaced_in_decl"]={
["err_omp_expected_clause_argument"]={
[d]={{nil,o,"err_pragma_misplaced_in_decl"}},
[j]="err_omp_expected_clause_argument",
[e]={{nil,o,"this pragma cannot appear in %0 declaration"}},
[b]="expected \'%0\' clause with an argument on \'#pragma omp %1\' construct",
[f]={{nil,o,"this pragma cannot appear in A declaration"}},
[c]="expected \'A\' clause with an argument on \'#pragma omp B\' construct",
[g]=k,
[e]=d,
[h]="this pragma cannot appear in (.*?) declaration",
[f]="expected \'(.*?)\' clause with an argument on \'\\#pragma omp (.*?)\' construct",
[b]=a,
[g]=a,
[c]={{nil,o,y}},
[i]=u,
[j]={"037861b23092",1564913331,"[Parser] Emit descriptive diagnostic for misplaced pragma","[Parser] Emit descriptive diagnostic for misplaced pragma\n\nIf a class or struct or union declaration contains a pragma that\nis not valid in this context, compiler issues generic error like\n\"expected member name or \';\' after declaration specifiers\". With this\nchange the error tells that this pragma cannot appear in this declaration.\n\nDifferential Revision: https://reviews.llvm.org/D64932\n\nllvm-svn: 367779"},
[h]={"e716b0204a5a",1675799568,"[OpenMP 5.2] Deprecate \'destroy\' clause without argument for \'depobj\' construct","[OpenMP 5.2] Deprecate \'destroy\' clause without argument for \'depobj\' construct\n\nDeprecate and diagnose uses of the \'destroy\' clauses without an argument\nin \'omp depobj\' directives.\n\nDifferential Revision: https://reviews.llvm.org/D143021"},
[i]={{yb,4671,"/// ParseStructUnionBody\n///      struct-contents:\n///        struct-declaration-list\n/// [EXT]  empty\n/// [GNU]  \"struct-declaration-list\" without terminating \';\'\n///      struct-declaration-list:\n///        struct-declaration\n///        struct-declaration-list struct-declaration\n/// [OBC]  \'@\' \'defs\' \'(\' class-name \')\'\n///\nvoid Parser::ParseStructUnionBody(SourceLocation RecordLoc, DeclSpec::TST TagType, RecordDecl *TagDecl) {\n  // ...\n  // While we still have something to read, read the declarations in the struct.\n  while (!tryParseMisplacedModuleImport() && Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof)) {\n    // ...\n    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"},{lc,3421,"Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas(AccessSpecifier &AS, ParsedAttributes &AccessAttrs, DeclSpec::TST TagType, Decl *TagDecl) {\n  // ...\n  default:\n    if (tok::isPragmaAnnotation(Tok.getKind())) {\n      Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl) << DeclSpec::getSpecifierName(TagType, Actions.getASTContext().getPrintingPolicy());"}},
[k]={{m,17738,"OMPClause *Sema::ActOnOpenMPDestroyClause(Expr *InteropVar, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation VarLoc, SourceLocation EndLoc) {\n  if (!InteropVar && LangOpts.OpenMP >= 52 && DSAStack->getCurrentDirective() == OMPD_depobj) {\n    Diag(StartLoc, diag::err_omp_expected_clause_argument) << getOpenMPClauseName(OMPC_destroy) << getOpenMPDirectiveName(OMPD_depobj);"}},
[l]={
[l]={
["clang/test/Parser/pragma-fp-contract.c"]={"clang/test/Parser/pragma-fp-contract.c:16:14: error: this pragma cannot appear in struct declaration","clang/test/Parser/pragma-fp-contract.c:24:14: error: this pragma cannot appear in union declaration"}
["clang/test/OpenMP/depobj_messages.cpp"]={"clang/test/OpenMP/depobj_messages.cpp:34:23: error: expected \'destroy\' clause with an argument on \'#pragma omp depobj\' construct","clang/test/OpenMP/depobj_messages.cpp:159:23: error: expected \'destroy\' clause with an argument on \'#pragma omp depobj\' construct","clang/test/OpenMP/depobj_messages.cpp:159:31: error: expected \'destroy\' clause with an argument on \'#pragma omp depobj\' construct","clang/test/OpenMP/depobj_messages.cpp:161:40: error: expected \'destroy\' clause with an argument on \'#pragma omp depobj\' construct","clang/test/OpenMP/depobj_messages.cpp:162:23: error: expected \'destroy\' clause with an argument on \'#pragma omp depobj\' construct","clang/test/OpenMP/depobj_messages.cpp:164:37: error: expected \'destroy\' clause with an argument on \'#pragma omp depobj\' construct","clang/test/OpenMP/depobj_messages.cpp:172:20: error: expected \'destroy\' clause with an argument on \'#pragma omp depobj\' construct"}
}
}
},
},
["err_pragma_missing_argument"]={
["err_omp_expected_colon"]={
[d]="err_pragma_missing_argument",
[j]={{nil,s,"err_omp_expected_colon"}},
[e]="missing argument to \'#pragma %0\'%select{|; expected %2}1",
[b]={{nil,s,"missing \':\' in %0"}},
[f]={{nil,nil,{"missing argument to \'#pragma A\'",{a,"; expected C"}}}},
[c]={{nil,s,"missing \':\' in A"}},
[g]=k,
[e]=d,
[h]="missing argument to \'\\#pragma (.*?)\'(?:|; expected (.*?))",
[f]="missing \'\\:\' in (.*?)",
[b]=a,
[g]=a,
[c]=y,
[i]={{nil,s,u}},
[j]={"bd26f5ea4d9c",1405966114,"Add support for \'#pragma unroll\'.","Add support for \'#pragma unroll\'.\n\nllvm-svn: 213574"},
[h]={qb,1612659633,sb,tb},
[i]={{v,3162,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n if (Tok.is(tok::eod)) {\n   PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang optimize\" << /*Expected=*/true << \"\'on\' or \'off\'\";"},{v,3974,"// Handle \'#pragma clang max_tokens 12345\'.\nvoid PragmaMaxTokensHereHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Tok.is(tok::eod)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_here\" << /*Expected=*/true << \"integer\";"},{v,4006,"// Handle \'#pragma clang max_tokens_total 12345\'.\nvoid PragmaMaxTokensTotalHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n // ...\n if (Tok.is(tok::eod)) {\n   PP.Diag(Tok.getLocation(), diag::err_pragma_missing_argument) << \"clang max_tokens_total\" << /*Expected=*/true << \"integer\";"}},
[k]={{t,2567,"/// 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_metadirective: {\n    // ...\n    while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n      // ...\n      if (CKind == OMPC_when) {\n       // ...\n       // Parse \':\'\n        if (Tok.is(tok::colon))\n        // ...\n        else {\n         Diag(Tok, diag::err_omp_expected_colon) << \"when clause\";"}},
[l]={
[l]={
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:14:114: error: missing argument to \'#pragma clang optimize\'; expected \'on\' or \'off\'"}
["clang/test/OpenMP/metadirective_messages.cpp"]={"clang/test/OpenMP/metadirective_messages.cpp:12:51: error: missing \':\' in when clause"}
}
}
},
},
["err_pragma_optimize_extra_argument"]={
["err_omp_expected_context_selector"]={
[d]="err_pragma_optimize_extra_argument",
[j]={{nil,s,"err_omp_expected_context_selector"}},
[e]="unexpected extra argument \'%0\' to \'#pragma clang optimize\'",
[b]={{nil,s,"expected valid context selector in %0"}},
[f]="unexpected extra argument \'A\' to \'#pragma clang optimize\'",
[c]={{nil,s,"expected valid context selector in A"}},
[g]=k,
[e]=d,
[h]="unexpected extra argument \'(.*?)\' to \'\\#pragma clang optimize\'",
[f]="expected valid context selector in (.*?)",
[b]=a,
[g]=a,
[c]=y,
[i]={{nil,s,u}},
[j]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.","Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.\n\nThis patch implements support for selectively disabling optimizations on a\nrange of function definitions through a pragma. The implementation is that\nall function definitions in the range are decorated with attribute\n\'optnone\'.\n\n   #pragma clang optimize off\n   // All function definitions in here are decorated with \'optnone\'.\n   #pragma clang optimize on\n   // Compilation resumes as normal.\n\nllvm-svn: 209510"},
[h]={qb,1612659633,sb,tb},
[i]={{v,3184,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (Tok.isNot(tok::eod)) {\n   PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_extra_argument) << PP.getSpelling(Tok);"}},
[k]={{t,2558,"/// 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_metadirective: {\n    // ...\n    while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n     // ...\n      if (CKind == OMPC_when) {\n        // ...\n        if (TI.Sets.size() == 0) {\n          Diag(Tok, diag::err_omp_expected_context_selector) << \"when clause\";"}},
[l]={
[l]={
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:8:27: error: unexpected extra argument \'top\' to \'#pragma clang optimize\'"}
["clang/test/OpenMP/metadirective_messages.cpp"]={"clang/test/OpenMP/metadirective_messages.cpp:8:32: error: expected valid context selector in when clause","clang/test/OpenMP/metadirective_messages.cpp:10:40: error: expected valid context selector in when clause"}
}
}
},
},
["err_pragma_optimize_invalid_argument"]={
["err_omp_expected_equal_in_iterator"]={
[d]="err_pragma_optimize_invalid_argument",
[j]={{nil,o,"err_omp_expected_equal_in_iterator"}},
[e]="unexpected argument \'%0\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'",
[b]={{nil,o,"expected \'=\' in iterator specifier"}},
[f]="unexpected argument \'A\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'",
[c]={{nil,o,"expected \'=\' in iterator specifier"}},
[g]=k,
[e]=d,
[h]="unexpected argument \'(.*?)\' to \'\\#pragma clang optimize\'; expected \'on\' or \'off\'",
[f]="expected \'\\=\' in iterator specifier",
[b]=a,
[g]=a,
[c]=y,
[i]={{nil,o,u}},
[j]={"13a0a38fe087",1400847205,"Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.","Implemented support for \"pragma clang optimize on/off\", based on attribute \'optnone\'.\n\nThis patch implements support for selectively disabling optimizations on a\nrange of function definitions through a pragma. The implementation is that\nall function definitions in the range are decorated with attribute\n\'optnone\'.\n\n    #pragma clang optimize off\n    // All function definitions in here are decorated with \'optnone\'.\n    #pragma clang optimize on\n    // Compilation resumes as normal.\n\nllvm-svn: 209510"},
[h]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator.","[OPENMP50]Add initial support for OpenMP 5.0 iterator.\n\nAdded basic parsing/semantic analysis/(de)serialization support for\niterator expression introduced in OpenMP 5.0."},
[i]={{v,3167,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n  // ...\n  if (Tok.isNot(tok::identifier)) {\n    PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"},{v,3177,"// #pragma clang optimize off\n// #pragma clang optimize on\nvoid PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) {\n // ...\n if (II->isStr(\"on\")) {\n // ...\n } else if (!II->isStr(\"off\")) {\n   PP.Diag(Tok.getLocation(), diag::err_pragma_optimize_invalid_argument) << PP.getSpelling(Tok);"}},
[k]={{t,4230,"/// Parses simple expression in parens for single-expression clauses of OpenMP\n/// constructs.\nExprResult Parser::ParseOpenMPIteratorsExpr() {\n  // ...\n  while (Tok.isNot(tok::r_paren) && Tok.isNot(tok::annot_pragma_openmp_end)) {\n   // ...\n   if (Tok.is(tok::equal))\n   // ...\n   else\n     Diag(Tok, diag::err_omp_expected_equal_in_iterator);"}},
[l]={
[l]={
["clang/test/Parser/pragma-optimize-diagnostics.cpp"]={"clang/test/Parser/pragma-optimize-diagnostics.cpp:11:24: error: unexpected argument \'something_wrong\' to \'#pragma clang optimize\'; expected \'on\' or \'off\'"}
[Eb]={"clang/test/OpenMP/task_affinity_messages.cpp:65:51: error: expected \'=\' in iterator specifier"}
}
}
},
},
["err_pragma_options_align_mac68k_target_unsupported"]={
["err_omp_expected_identifier_for_critical"]={
[d]="err_pragma_options_align_mac68k_target_unsupported",
[j]="err_omp_expected_identifier_for_critical",
[e]="mac68k alignment pragma is not supported on this target",
[b]="expected identifier specifying the name of the \'omp critical\' directive",
[f]="mac68k alignment pragma is not supported on this target",
[c]="expected identifier specifying the name of the \'omp critical\' directive",
[g]=k,
[e]=d,
[h]="mac68k alignment pragma is not supported on this target",
[f]="expected identifier specifying the name of the \'omp critical\' directive",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={"bd60652ace14",1274920516,"Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin.","Sema: Reject \'#pragma options align=mac68k\' everywhere except i386-apple-darwin.\n\nllvm-svn: 104789"},
[h]={"d9ed09f7a5f1",1405935725,"[OPENMP] Parsing/Sema of the OpenMP directive \'critical\'.","[OPENMP] Parsing/Sema of the OpenMP directive \'critical\'.\n\nllvm-svn: 213510"},
[i]={{J,246,"void Sema::ActOnPragmaOptionsAlign(PragmaOptionsAlignKind Kind, SourceLocation PragmaLoc) {\n  // ...\n  case POAK_Mac68k:\n    // Check if the target supports this.\n    if (!this->Context.getTargetInfo().hasAlignMac68kSupport()) {\n     Diag(PragmaLoc, diag::err_pragma_options_align_mac68k_target_unsupported);"}},
[k]={{t,2859,"/// 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    // Parse directive name of the \'critical\' directive if any.\n    if (DKind == OMPD_critical) {\n      // ...\n      if (!T.consumeOpen()) {\n        if (Tok.isAnyIdentifier()) {\n       // ...\n        } else {\n          Diag(Tok, diag::err_omp_expected_identifier_for_critical);"}},
[l]={
[l]={
["clang/test/Sema/pragma-align-mac68k-unsupported.c"]={"clang/test/Sema/pragma-align-mac68k-unsupported.c:4:75: error: mac68k alignment pragma is not supported on this target"}
["clang/test/OpenMP/critical_messages.cpp"]={"clang/test/OpenMP/critical_messages.cpp:19:135: error: expected identifier specifying the name of the \'omp critical\' directive","clang/test/OpenMP/critical_messages.cpp:20:26: error: expected identifier specifying the name of the \'omp critical\' directive","clang/test/OpenMP/critical_messages.cpp:86:135: error: expected identifier specifying the name of the \'omp critical\' directive","clang/test/OpenMP/critical_messages.cpp:87:26: error: expected identifier specifying the name of the \'omp critical\' directive"}
}
}
},
},
["err_pragma_pack_identifer_not_supported"]={
["err_omp_expected_int_param"]={
[d]={{nil,A,"err_pragma_pack_identifer_not_supported"}},
[j]="err_omp_expected_int_param",
[e]={{nil,A,"specifying an identifier within `#pragma pack` is not supported on this target"}},
[b]="expected a reference to an integer-typed parameter",
[f]={{nil,A,"specifying an identifier within `#pragma pack` is not supported on this target"}},
[c]="expected a reference to an integer-typed parameter",
[g]=k,
[e]=d,
[h]="specifying an identifier within `\\#pragma pack` is not supported on this target",
[f]="expected a reference to an integer\\-typed parameter",
[b]=a,
[g]=a,
[c]={{nil,A,m}},
[i]=n,
[j]={Vb,1590001902,Ub,Zb},
[h]={"ecba70f194b5",1460458931,"[OPENMP 4.0] Support for \'linear\' clause in \'declare simd\' directive.","[OPENMP 4.0] Support for \'linear\' clause in \'declare simd\' directive.\n\nThe linear clause declares one or more list items to be private to a SIMD lane and to have a linear relationship with respect to the iteration space of a loop.\n\'linear\' \'(\' <linear-list> [ \':\' <linear-step> ] \')\'\nWhen a linear-step expression is specified in a linear clause it must be\neither a constant integer expression or an integer-typed parameter that is specified in a uniform clause on the directive.\nThe special this pointer can be used as if was one of the arguments to the function in any of the linear, aligned, or uniform clauses.\n\nllvm-svn: 266056"},
[i]={{J,328,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n  // ...\n  // XL pragma pack does not support identifier syntax.\n if (IsXLPragma && !SlotLabel.empty()) {\n   Diag(PragmaLoc, diag::err_pragma_pack_identifer_not_supported);"}},
[k]={{m,7049,"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 (Expr *E : Steps) {\n    // ...\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(Step))\n     if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n       // ...\n        if (UniformedArgs.count(CanonPVD) == 0) {\n        // ...\n        } else if (E->isValueDependent() || E->isTypeDependent() || E->isInstantiationDependent() || E->containsUnexpandedParameterPack() || CanonPVD->getType()->hasIntegerRepresentation()) {\n        // ...\n        } else {\n          Diag(Step->getExprLoc(), diag::err_omp_expected_int_param) << Step->getSourceRange();"}}
[l]={
["clang/test/Sema/aix-pragma-pack-and-align.c"]={"clang/test/Sema/aix-pragma-pack-and-align.c:194:9: error: specifying an identifier within `#pragma pack` is not supported on this target"}
}
},
},
["err_pragma_pack_invalid_alignment"]={
["err_omp_expected_interop_type"]={
[d]={{nil,A,"err_pragma_pack_invalid_alignment"}},
[j]={{nil,r,"err_omp_expected_interop_type"}},
[e]={{nil,A,"expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}},
[b]={{nil,r,"expected interop type: \'target\' and/or \'targetsync\'"}},
[f]={{nil,A,"expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}},
[c]={{nil,r,"expected interop type: \'target\' and/or \'targetsync\'"}},
[g]=k,
[e]=d,
[h]="expected \\#pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'",
[f]="expected interop type\\: \'target\' and\\/or \'targetsync\'",
[b]=a,
[g]=a,
[c]={{nil,A,m}},
[i]={{nil,r,u}},
[j]={Vb,1590001902,Ub,Zb},
[h]={qb,1612659633,sb,tb},
[i]={{J,353,"void Sema::ActOnPragmaPack(SourceLocation PragmaLoc, PragmaMsStackAction Action, StringRef SlotLabel, Expr *alignment) {\n  // ...\n  if (Alignment) {\n    // ...\n    if (IsXLPragma && *Val == 0) {\n      // ...\n      Diag(PragmaLoc, diag::err_pragma_pack_invalid_alignment);"}},
[k]={{t,3599,"/// Parses a comma-separated list of interop-types and a prefer_type list.\n///\nbool Parser::ParseOMPInteropInfo(OMPInteropInfo &InteropInfo, OpenMPClauseKind Kind) {\n  // ...\n  while (Tok.is(tok::identifier)) {\n    // ...\n    if (Tok.getIdentifierInfo()->isStr(\"target\")) {\n    // ...\n    } else if (Tok.getIdentifierInfo()->isStr(\"targetsync\")) {\n    // ...\n    } else if (Tok.getIdentifierInfo()->isStr(\"prefer_type\") && PreferTypeAllowed) {\n    // ...\n    } else {\n      // ...\n      Diag(Tok, diag::err_omp_expected_interop_type);"},{t,3608,"/// Parses a comma-separated list of interop-types and a prefer_type list.\n///\nbool Parser::ParseOMPInteropInfo(OMPInteropInfo &InteropInfo, OpenMPClauseKind Kind) {\n  // ...\n  if (!HasError && !IsTarget && !IsTargetSync) {\n    Diag(Tok, diag::err_omp_expected_interop_type);"}},
[l]={
[l]={
["clang/test/Sema/aix-pragma-pack-and-align.c"]={"clang/test/Sema/aix-pragma-pack-and-align.c:147:9: error: expected #pragma pack parameter to be \'1\', \'2\', \'4\', \'8\', or \'16\'"}
[wb]={"clang/test/OpenMP/interop_messages.cpp:13:35: error: expected interop type: \'target\' and/or \'targetsync\'","clang/test/OpenMP/interop_messages.cpp:26:28: error: expected interop type: \'target\' and/or \'targetsync\'"}
}
}
},
},
["err_pragma_pipeline_invalid_keyword"]={
["err_omp_expected_named_var_member_or_array_expression"]={
[d]={{nil,u,"err_pragma_pipeline_invalid_keyword"}},
[j]="err_omp_expected_named_var_member_or_array_expression",
[e]={{nil,u,"invalid argument; expected \'disable\'"}},
[b]="expected expression containing only member accesses and/or array sections based on named variables",
[f]={{nil,u,"invalid argument; expected \'disable\'"}},
[c]="expected expression containing only member accesses and/or array sections based on named variables",
[g]=k,
[e]=d,
[h]="invalid argument; expected \'disable\'",
[f]="expected expression containing only member accesses and\\/or array sections based on named variables",
[b]=a,
[g]=a,
[c]={{nil,u,y}},
[i]=n,
[j]={"9bdf515c744f",1546622400,"Add two new pragmas for controlling software pipelining optimizations.","Add two new pragmas for controlling software pipelining optimizations.\n\nThis patch adds #pragma clang loop pipeline and #pragma clang loop pipeline_initiation_interval for debugging or reducing compile time purposes. It is possible to disable SWP for concrete loops to save compilation time or to find bugs by not doing SWP to certain loops. It is possible to set value of initiation interval to concrete number to save compilation time by not doing extra pipeliner passes or to check created schedule for specific initiation interval.\n\nPatch by Alexey Lapshin.\n\nllvm-svn: 350414"},
[h]={"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"},
[i]={{v,1413,"bool Parser::HandlePragmaLoopHint(LoopHint &Hint) {\n // ...\n  // Validate the argument.\n  if (StateOption) {\n    // ...\n    if (!Valid) {\n      if (OptionPipelineDisabled) {\n        Diag(Toks[0].getLocation(), diag::err_pragma_pipeline_invalid_keyword);"}},
[k]={{m,21121,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  // ...\n  void emitErrorMsg() {\n    // If nothing else worked, this is not a valid map clause expression.\n    if (SemaRef.getLangOpts().OpenMP < 50) {\n      SemaRef.Diag(ELoc, diag::err_omp_expected_named_var_member_or_array_expression) << ERange;"},{m,21911,"// 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 (!RE->isLValue()) {\n      if (SemaRef.getLangOpts().OpenMP < 50) {\n        SemaRef.Diag(ELoc, diag::err_omp_expected_named_var_member_or_array_expression) << RE->getSourceRange();"}},
[l]={
[l]={
["clang/test/Parser/pragma-pipeline.cpp"]={"clang/test/Parser/pragma-pipeline.cpp:20:91: error: invalid argument; expected \'disable\'","clang/test/Parser/pragma-pipeline.cpp:21:91: error: invalid argument; expected \'disable\'"}
["clang/test/OpenMP/target_update_from_messages.cpp"]={"clang/test/OpenMP/target_update_from_messages.cpp:70:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:72:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:73:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:74:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:75:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:76:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:172:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:184:35: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:192:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:193:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:194:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:195:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:196:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:197:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:198:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:199:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:200:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:110:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:115:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:128:35: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:110:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:115:32: error: expected expression containing only member accesses and/or array sections based on named variables","clang/test/OpenMP/target_update_from_messages.cpp:128:35: error: expected expression containing only member accesses and/or array sections based on named variables"}
}
}
},
},
["err_pragma_pointers_to_members_unknown_kind"]={
["err_omp_expected_omp_depend_t_lvalue"]={
[d]="err_pragma_pointers_to_members_unknown_kind",
[j]={{nil,o,"err_omp_expected_omp_depend_t_lvalue"}},
[e]="unexpected %0, expected to see one of %select{|\'best_case\', \'full_generality\', }1\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[b]={{nil,o,"expected lvalue expression%select{ of \'omp_depend_t\' type, not %1|}0"}},
[f]={{nil,nil,{"unexpected A, expected to see one of ",{a,"\'best_case\', \'full_generality\', "},"\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'"}}},
[c]={{nil,o,{"expected lvalue expression",{" of \'omp_depend_t\' type, not B",a}}}},
[g]=k,
[e]=d,
[h]="unexpected (.*?), expected to see one of (?:|\'best_case\', \'full_generality\', )\'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'",
[f]="expected lvalue expression(?: of \'omp_depend_t\' type, not (.*?)|)",
[b]=a,
[g]=a,
[c]=y,
[i]={{nil,o,n}},
[j]={"4bb0980d9628",1392061815,"MS ABI: Add support for #pragma pointers_to_members","MS ABI: Add support for #pragma pointers_to_members\n\nIntroduce a notion of a \'current representation method\' for\npointers-to-members.\n\nWhen starting out, this is set to \'best case\' (representation method is\nchosen by examining the class, selecting the smallest representation\nthat would work given the class definition or lack thereof).\n\nThis pragma allows the translation unit to dictate exactly what\nrepresentation to use, similar to how the inheritance model keywords\noperate.\n\nN.B. PCH support is forthcoming.\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D2723\n\nllvm-svn: 201105"},
[h]={I,1576908663,H,F},
[i]={{v,2705,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Arg->isStr(\"best_case\")) {\n  // ...\n  } else {\n    if (Arg->isStr(\"full_generality\")) {\n      if (Tok.is(tok::comma)) {\n        // ...\n        if (!Arg) {\n          PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Tok.getKind() << /*OnlyInheritanceModels*/ 0;"},{v,2734,"/// Handle \'#pragma pointers_to_members\'\n// The grammar for this pragma is as follows:\n//\n// <inheritance model> ::= (\'single\' | \'multiple\' | \'virtual\') \'_inheritance\'\n//\n// #pragma pointers_to_members \'(\' \'best_case\' \')\'\n// #pragma pointers_to_members \'(\' \'full_generality\' [\',\' inheritance-model] \')\'\n// #pragma pointers_to_members \'(\' inheritance-model \')\'\nvoid PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) {\n  // ...\n  if (Arg->isStr(\"best_case\")) {\n  // ...\n  } else {\n    // ...\n    if (Arg) {\n      if (Arg->isStr(\"single_inheritance\")) {\n     // ...\n     } else if (Arg->isStr(\"multiple_inheritance\")) {\n     // ...\n     } else if (Arg->isStr(\"virtual_inheritance\")) {\n     // ...\n      } else {\n        PP.Diag(Tok.getLocation(), diag::err_pragma_pointers_to_members_unknown_kind) << Arg << /*HasPointerDeclaration*/ 1;"}},
[k]={{m,20580,"OMPClause *Sema::ActOnOpenMPDepobjClause(Expr *Depobj, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n // OpenMP 5.0, 2.17.10.1 depobj Construct\n  // depobj is an lvalue expression of type omp_depend_t.\n if (!Depobj->isTypeDependent() && !Depobj->isValueDependent() && !Depobj->isInstantiationDependent() && !Depobj->containsUnexpandedParameterPack() &&\n    // ...\n   Diag(Depobj->getExprLoc(), diag::err_omp_expected_omp_depend_t_lvalue) << 0 << Depobj->getType() << Depobj->getSourceRange();"},{m,20585,"OMPClause *Sema::ActOnOpenMPDepobjClause(Expr *Depobj, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n if (!Depobj->isLValue()) {\n   Diag(Depobj->getExprLoc(), diag::err_omp_expected_omp_depend_t_lvalue) << 1 << Depobj->getSourceRange();"},{m,20809,"OMPClause *Sema::ActOnOpenMPDependClause(const OMPDependClause::DependDataTy &Data, Expr *DepModifier, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  if (DepKind == OMPC_DEPEND_sink || DepKind == OMPC_DEPEND_source) {\n  // ...\n  } else {\n    for (Expr *RefExpr : VarList) {\n      // ...\n      if (DepKind != OMPC_DEPEND_sink && DepKind != OMPC_DEPEND_source) {\n        // ...\n        if (DepKind == OMPC_DEPEND_depobj) {\n          // OpenMP 5.0, 2.17.11 depend Clause, Restrictions, C/C++\n         // List items used in depend clauses with the depobj dependence type\n         // must be expressions of the omp_depend_t type.\n         if (!RefExpr->isValueDependent() && !RefExpr->isTypeDependent() && !RefExpr->isInstantiationDependent() && !RefExpr->containsUnexpandedParameterPack() && (OMPDependTFound && !Context.hasSameUnqualifiedType(DSAStack->getOMPDependT(), RefExpr->getType()))) {\n           Diag(ELoc, diag::err_omp_expected_omp_depend_t_lvalue) << 0 << RefExpr->getType() << RefExpr->getSourceRange();"},{m,20814,"OMPClause *Sema::ActOnOpenMPDependClause(const OMPDependClause::DependDataTy &Data, Expr *DepModifier, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  if (DepKind == OMPC_DEPEND_sink || DepKind == OMPC_DEPEND_source) {\n  // ...\n  } else {\n    for (Expr *RefExpr : VarList) {\n      // ...\n      if (DepKind != OMPC_DEPEND_sink && DepKind != OMPC_DEPEND_source) {\n       // ...\n       if (DepKind == OMPC_DEPEND_depobj) {\n         // ...\n         if (!RefExpr->isLValue()) {\n           Diag(ELoc, diag::err_omp_expected_omp_depend_t_lvalue) << 1 << RefExpr->getType() << RefExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/member-pointer-ms.cpp"]={"clang/test/SemaCXX/member-pointer-ms.cpp:292:35: error: unexpected \'single\', expected to see one of \'best_case\', \'full_generality\', \'single_inheritance\', \'multiple_inheritance\', or \'virtual_inheritance\'"}
["clang/test/OpenMP/depobj_messages.cpp"]={"clang/test/OpenMP/depobj_messages.cpp:21:20: error: expected lvalue expression","clang/test/OpenMP/depobj_messages.cpp:147:20: error: expected lvalue expression of \'omp_depend_t\' type, not \'int\'","clang/test/OpenMP/depobj_messages.cpp:148:20: error: expected lvalue expression of \'omp_depend_t\' type, not \'int\'","clang/test/OpenMP/depobj_messages.cpp:149:20: error: expected lvalue expression of \'omp_depend_t\' type, not \'int\'","clang/test/OpenMP/depobj_messages.cpp:151:20: error: expected lvalue expression of \'omp_depend_t\' type, not \'int\'","clang/test/OpenMP/depobj_messages.cpp:82:20: error: expected lvalue expression of \'omp_depend_t\' type, not \'int\'","clang/test/OpenMP/depobj_messages.cpp:83:20: error: expected lvalue expression of \'omp_depend_t\' type, not \'int\'","clang/test/OpenMP/depobj_messages.cpp:84:20: error: expected lvalue expression of \'omp_depend_t\' type, not \'int\'","clang/test/OpenMP/depobj_messages.cpp:86:20: error: expected lvalue expression of \'omp_depend_t\' type, not \'int\'"}
}
}
},
},
["err_pragma_pop_visibility_mismatch"]={
["err_omp_expected_predefined_allocator"]={
[d]="err_pragma_pop_visibility_mismatch",
[j]={{nil,v,"err_omp_expected_predefined_allocator"}},
[e]="#pragma visibility pop with no matching #pragma visibility push",
[b]={{nil,v,"expected one of the predefined allocators for the variables with the static storage: \'omp_default_mem_alloc\', \'omp_large_cap_mem_alloc\', \'omp_const_mem_alloc\', \'omp_high_bw_mem_alloc\', \'omp_low_lat_mem_alloc\', \'omp_cgroup_mem_alloc\', \'omp_pteam_mem_alloc\' or \'omp_thread_mem_alloc\'"}},
[f]="#pragma visibility pop with no matching #pragma visibility push",
[c]={{nil,v,"expected one of the predefined allocators for the variables with the static storage: \'omp_default_mem_alloc\', \'omp_large_cap_mem_alloc\', \'omp_const_mem_alloc\', \'omp_high_bw_mem_alloc\', \'omp_low_lat_mem_alloc\', \'omp_cgroup_mem_alloc\', \'omp_pteam_mem_alloc\' or \'omp_thread_mem_alloc\'"}},
[g]=k,
[e]=d,
[h]="\\#pragma visibility pop with no matching \\#pragma visibility push",
[f]="expected one of the predefined allocators for the variables with the static storage\\: \'omp_default_mem_alloc\', \'omp_large_cap_mem_alloc\', \'omp_const_mem_alloc\', \'omp_high_bw_mem_alloc\', \'omp_low_lat_mem_alloc\', \'omp_cgroup_mem_alloc\', \'omp_pteam_mem_alloc\' or \'omp_thread_mem_alloc\'",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,v,n}},
[j]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".\n\nllvm-svn: 149559"},
[h]={"d2fc965f1b0c",1553020751,"[OPENMP]Check that global vars require predefined allocator.","[OPENMP]Check that global vars require predefined allocator.\n\nAccording to OpenMP, 2.11.3 allocate Directive, Restrictions, C / C++,\nif a list item has a static storage type, the allocator expression in\n  the allocator clause must be a constant expression that evaluates to\n  one of the predefined memory allocator values. Added check for this\n  restriction.\n\nllvm-svn: 356496"},
[i]={{J,1370,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n  if (!VisContext) {\n    Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"},{J,1381,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n // ...\n if (StartsWithPragma && IsNamespaceEnd) {\n // ...\n  } else if (!StartsWithPragma && !IsNamespaceEnd) {\n   Diag(EndLoc, diag::err_pragma_pop_visibility_mismatch);"}},
[k]={{m,3429,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPAllocateDirective(SourceLocation Loc, ArrayRef<Expr *> VarList, ArrayRef<OMPClause *> Clauses, DeclContext *Owner) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    // OpenMP, 2.11.3 allocate Directive, Restrictions, C / C++\n    // If a list item has a static storage type, the allocator expression in the\n    // allocator clause must be a constant expression that evaluates to one of\n   // the predefined memory allocator values.\n   if (Allocator && VD->hasGlobalStorage()) {\n     if (AllocatorKind == OMPAllocateDeclAttr::OMPUserDefinedMemAlloc) {\n       Diag(Allocator->getExprLoc(), diag::err_omp_expected_predefined_allocator) << Allocator->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:4:13: error: #pragma visibility pop with no matching #pragma visibility push","clang/test/SemaCXX/pragma-visibility.cpp:12:13: error: #pragma visibility pop with no matching #pragma visibility push"}
["clang/test/OpenMP/allocate_allocator_messages.cpp"]={"clang/test/OpenMP/allocate_allocator_messages.cpp:38:35: error: expected one of the predefined allocators for the variables with the static storage: \'omp_default_mem_alloc\', \'omp_large_cap_mem_alloc\', \'omp_const_mem_alloc\', \'omp_high_bw_mem_alloc\', \'omp_low_lat_mem_alloc\', \'omp_cgroup_mem_alloc\', \'omp_pteam_mem_alloc\' or \'omp_thread_mem_alloc\'","clang/test/OpenMP/allocate_allocator_messages.cpp:41:35: error: expected one of the predefined allocators for the variables with the static storage: \'omp_default_mem_alloc\', \'omp_large_cap_mem_alloc\', \'omp_const_mem_alloc\', \'omp_high_bw_mem_alloc\', \'omp_low_lat_mem_alloc\', \'omp_cgroup_mem_alloc\', \'omp_pteam_mem_alloc\' or \'omp_thread_mem_alloc\'"}
}
}
},
},
["err_pragma_push_pop_macro_malformed"]={
["err_omp_expected_private_copy_for_allocate"]={
[d]="err_pragma_push_pop_macro_malformed",
[j]={{nil,v,"err_omp_expected_private_copy_for_allocate"}},
[e]="pragma %0 requires a parenthesized string",
[b]={{nil,v,"the referenced item is not found in any private clause on the same directive"}},
[f]="pragma A requires a parenthesized string",
[c]={{nil,v,"the referenced item is not found in any private clause on the same directive"}},
[g]=k,
[e]=d,
[h]="pragma (.*?) requires a parenthesized string",
[f]="the referenced item is not found in any private clause on the same directive",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,v,n}},
[j]={"c0a585d63c6c",1282060545,"Implement #pragma push_macro, patch by Francois Pichet!","Implement #pragma push_macro, patch by Francois Pichet!\n\nllvm-svn: 111234"},
[h]={"e106f25f056b",1554128731,"[OPENMP] Check that allocated variables are used in private clauses.","[OPENMP] Check that allocated variables are used in private clauses.\n\nAccording to OpenMP 5.0 standard, 2.11.4 allocate Clause, Restrictions,\nFor any list item that is specified in the allocate clause on a\ndirective, a data-sharing attribute clause that may create a private\ncopy of that list item must be specified on the same directive. Patch\nadds the checks for this restriction.\n\nllvm-svn: 357390"},
[i]={{H,580,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::l_paren)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{H,588,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n  // ...\n  if (Tok.isNot(tok::string_literal)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"},{H,604,"/// ParsePragmaPushOrPopMacro - Handle parsing of pragma push_macro/pop_macro.\n/// Return the IdentifierInfo* associated with the macro to push or pop.\nIdentifierInfo *Preprocessor::ParsePragmaPushOrPopMacro(Token &Tok) {\n // ...\n if (Tok.isNot(tok::r_paren)) {\n    Diag(PragmaTok.getLocation(), diag::err_pragma_push_pop_macro_malformed) << getSpelling(PragmaTok);"}}
[k]={{m,5523,"static void checkAllocateClauses(Sema &S, DSAStackTy *Stack, ArrayRef<OMPClause *> Clauses) {\n  // ...\n  for (OMPClause *C : AllocateRange) {\n    // ...\n    for (Expr *E : AC->varlists()) {\n     // ...\n     if (!isOpenMPPrivate(Data.CKind)) {\n       S.Diag(E->getExprLoc(), diag::err_omp_expected_private_copy_for_allocate);"}},
},
["err_pragma_push_visibility_mismatch"]={
[d]="err_pragma_push_visibility_mismatch",
[e]="#pragma visibility push with no matching #pragma visibility pop",
[f]="#pragma visibility push with no matching #pragma visibility pop",
[g]=k,
[h]="\\#pragma visibility push with no matching \\#pragma visibility pop",
[b]=a,
[c]=m,
[j]={"6d65d7b63d1c",1328138699,"Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".","Reject mismatched \"#pragma GCC visibility push\" and \"#pragma GCC visibility pop\".\n\nllvm-svn: 149559"},
[i]={{J,1371,"void Sema::PopPragmaVisibility(bool IsNamespaceEnd, SourceLocation EndLoc) {\n // ...\n  if (StartsWithPragma && IsNamespaceEnd) {\n    Diag(Back->second, diag::err_pragma_push_visibility_mismatch);"}},
[l]={
[l]={
["clang/test/SemaCXX/pragma-visibility.cpp"]={"clang/test/SemaCXX/pragma-visibility.cpp:9:13: error: #pragma visibility push with no matching #pragma visibility pop"}
["clang/test/OpenMP/allocate_messages.cpp"]={"clang/test/OpenMP/allocate_messages.cpp:149:31: error: the referenced item is not found in any private clause on the same directive"}
}
}
},
},
["err_pragma_section_invalid_for_target"]={
["err_omp_expected_punc"]={
[d]={{nil,V,"err_pragma_section_invalid_for_target"}},
[j]="err_omp_expected_punc",
[e]={{nil,V,"argument to #pragma section is not valid for this target: %0"}},
[b]="expected \',\' or \')\' in \'%0\' %select{clause|directive}1",
[f]={{nil,V,"argument to #pragma section is not valid for this target: A"}},
[c]={{nil,nil,{"expected \',\' or \')\' in \'A\' ",{"clause","directive"}}}},
[g]=k,
[e]=d,
[h]="argument to \\#pragma section is not valid for this target\\: (.*?)",
[f]="expected \',\' or \'\\)\' in \'(.*?)\' (?:clause|directive)",
[b]=a,
[g]=a,
[c]={{nil,V,m}},
[i]=u,
[j]={Vb,1590001902,Ub,Zb},
[h]={"5ec3eb11fcb8",1374203623,"OpenMP: basic support for #pragma omp parallel","OpenMP: basic support for #pragma omp parallel\n\nllvm-svn: 186647"},
[i]={{J,309,"void Sema::ActOnPragmaClangSection(SourceLocation PragmaLoc, PragmaClangSectionAction Action, PragmaClangSectionKind SecKind, StringRef SecName) {\n  // ...\n  if (llvm::Error E = isValidSectionSpecifier(SecName)) {\n    Diag(PragmaLoc, diag::err_pragma_section_invalid_for_target) << toString(std::move(E));"}},
[k]={{t,2580,"/// 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_metadirective: {\n    // ...\n    while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n      // ...\n      while (Tok.isNot(tok::r_paren) || paren != 0) {\n        // ...\n        if (Tok.is(tok::annot_pragma_openmp_end)) {\n          Diag(Tok, diag::err_omp_expected_punc) << getOpenMPClauseName(CKind) << 0;"},{t,3141,"OMPClause *Parser::ParseOpenMPUsesAllocatorClause(OpenMPDirectiveKind DKind) {\n  // ...\n  do {\n    // ...\n    if (Tok.isNot(tok::comma) && Tok.isNot(tok::r_paren))\n      Diag(Tok, diag::err_omp_expected_punc) << \"uses_allocators\" << 0;"},{t,4675,"/// Parses clauses with list.\nbool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind, OpenMPClauseKind Kind, SmallVectorImpl<Expr *> &Vars, Sema::OpenMPVarListDataTy &Data) {\n  // ...\n  while (IsComma || (Tok.isNot(tok::r_paren) && Tok.isNot(tok::colon) && Tok.isNot(tok::annot_pragma_openmp_end))) {\n    // ...\n    if (IsComma)\n    // ...\n    else if (Tok.isNot(tok::r_paren) && Tok.isNot(tok::annot_pragma_openmp_end) && (!MayHaveTail || Tok.isNot(tok::colon)))\n      Diag(Tok, diag::err_omp_expected_punc) << ((Kind == OMPC_flush) ? getOpenMPDirectiveName(OMPD_flush) : getOpenMPClauseName(Kind)) << (Kind == OMPC_flush);"}},
[l]={
[l]={
["clang/test/Sema/pragma-clang-section-macho.c"]={"clang/test/Sema/pragma-clang-section-macho.c:5:54: error: argument to #pragma section is not valid for this target: mach-o section specifier requires a segment and section separated by a comma","clang/test/Sema/pragma-clang-section-macho.c:6:54: error: argument to #pragma section is not valid for this target: mach-o section specifier requires a section whose length is between 1 and 16 characters"}
["clang/test/OpenMP/target_uses_allocators_messages.cpp"]={"clang/test/OpenMP/target_uses_allocators_messages.cpp:29:195: error: expected \',\' or \')\' in \'uses_allocators\' clause","clang/test/OpenMP/target_uses_allocators_messages.cpp:33:41: error: expected \',\' or \')\' in \'uses_allocators\' clause"}
}
}
},
},
["err_preserve_enum_value_invalid"]={
["err_omp_expected_punc_after_interop_mod"]={
[d]={{nil,A,"err_preserve_enum_value_invalid"}},
[j]={{nil,r,"err_omp_expected_punc_after_interop_mod"}},
[e]={{nil,A,"__builtin_preserve_enum_value argument %0 invalid"}},
[b]={{nil,r,"expected \',\' after interop modifier"}},
[f]={{nil,A,"__builtin_preserve_enum_value argument A invalid"}},
[c]={{nil,r,"expected \',\' after interop modifier"}},
[g]=k,
[e]=d,
[h]="__builtin_preserve_enum_value argument (.*?) invalid",
[f]="expected \',\' after interop modifier",
[b]=a,
[g]=a,
[c]={{nil,A,S}},
[i]={{nil,r,u}},
[j]={Jb,1582847864,Ib,Ab},
[h]={qb,1612659633,sb,tb}
[i]={{I,3540,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n  // ...\n  } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n  // ...\n  } else if (BuiltinID == BPF::BI__builtin_preserve_enum_value) {\n    if (!isValidBPFPreserveEnumValueArg(Arg)) {\n      // ...\n      kind = diag::err_preserve_enum_value_invalid;"}},
[l]={
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:95:40: error: __builtin_preserve_enum_value argument 1 invalid","clang/test/Sema/builtins-bpf.c:99:40: error: __builtin_preserve_enum_value argument 1 invalid"}
}
},
},
["err_preserve_enum_value_not_const"]={
["err_omp_expected_punc_after_iterator"]={
[d]={{nil,A,"err_preserve_enum_value_not_const"}},
[j]={{nil,o,"err_omp_expected_punc_after_iterator"}},
[e]={{nil,A,"__builtin_preserve_enum_value argument %0 not a constant"}},
[b]={{nil,o,"expected \',\' or \')\' after iterator specifier"}},
[f]={{nil,A,"__builtin_preserve_enum_value argument A not a constant"}},
[c]={{nil,o,"expected \',\' or \')\' after iterator specifier"}},
[g]=k,
[e]=d,
[h]="__builtin_preserve_enum_value argument (.*?) not a constant",
[f]="expected \',\' or \'\\)\' after iterator specifier",
[b]=a,
[g]=a,
[c]={{nil,A,S}},
[i]={{nil,o,u}},
[j]={Jb,1582847864,Ib,Ab},
[h]={"f08df464ae89",1582039343,"[OPENMP50]Add initial support for OpenMP 5.0 iterator.","[OPENMP50]Add initial support for OpenMP 5.0 iterator.\n\nAdded basic parsing/semantic analysis/(de)serialization support for\niterator expression introduced in OpenMP 5.0."},
[i]={{I,3518,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n    // ...\n    else\n      kind = diag::err_preserve_enum_value_not_const;"}}
[k]={{t,4271,"/// Parses simple expression in parens for single-expression clauses of OpenMP\n/// constructs.\nExprResult Parser::ParseOpenMPIteratorsExpr() {\n  // ...\n  while (Tok.isNot(tok::r_paren) && Tok.isNot(tok::annot_pragma_openmp_end)) {\n    // ...\n    // Parse \',\' or \')\'\n   if (Tok.isNot(tok::comma) && Tok.isNot(tok::r_paren))\n      Diag(Tok, diag::err_omp_expected_punc_after_iterator);"}},
},
["err_preserve_field_info_not_const"]={
[d]={{nil,o,"err_preserve_field_info_not_const"}},
[e]={{nil,o,"__builtin_preserve_field_info argument %0 not a constant"}},
[f]={{nil,o,"__builtin_preserve_field_info argument A not a constant"}},
[g]=k,
[h]="__builtin_preserve_field_info argument (.*?) not a constant",
[b]=a,
[c]={{nil,o,S}},
[j]={"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"},
[i]={{I,3512,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n      kind = diag::err_preserve_field_info_not_const;"}},
[l]={
[l]={
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:64:48: error: __builtin_preserve_field_info argument 2 not a constant","clang/test/Sema/builtins-bpf.c:68:48: error: __builtin_preserve_field_info argument 2 not a constant"}
[Eb]={"clang/test/OpenMP/task_affinity_messages.cpp:65:389: error: expected \',\' or \')\' after iterator specifier","clang/test/OpenMP/task_affinity_messages.cpp:66:336: error: expected \',\' or \')\' after iterator specifier"}
}
}
},
},
["err_preserve_field_info_not_field"]={
["err_omp_expected_reduction_identifier"]={
[d]={{nil,o,"err_preserve_field_info_not_field"}},
[j]="err_omp_expected_reduction_identifier",
[e]={{nil,o,"__builtin_preserve_field_info argument %0 not a field access"}},
[b]="expected identifier or one of the following operators: \'+\', \'-\', \'*\', \'&\', \'|\', \'^\', \'&&\', or \'||\'",
[f]={{nil,o,"__builtin_preserve_field_info argument A not a field access"}},
[c]="expected identifier or one of the following operators: \'+\', \'-\', \'*\', \'&\', \'|\', \'^\', \'&&\', or \'||\'",
[g]=k,
[e]=d,
[h]="__builtin_preserve_field_info argument (.*?) not a field access",
[f]="expected identifier or one of the following operators\\: \'\\+\', \'\\-\', \'\\*\', \'&\', \'\\|\', \'\\^\', \'&&\', or \'\\|\\|\'",
[b]=a,
[g]=a,
[c]={{nil,o,S}},
[i]=u,
[j]={"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"},
[h]={"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"},
[i]={{I,3530,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n    if (!isValidBPFPreserveFieldInfoArg(Arg)) {\n      // ...\n      kind = diag::err_preserve_field_info_not_field;"}},
[k]={{t,267,"static DeclarationName parseOpenMPReductionId(Parser &P) {\n  // ...\n  default:\n    P.Diag(Tok.getLocation(), diag::err_omp_expected_reduction_identifier);"}},
[l]={
[l]={
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:28:40: error: __builtin_preserve_field_info argument 1 not a field access","clang/test/Sema/builtins-bpf.c:32:40: error: __builtin_preserve_field_info argument 1 not a field access"}
["clang/test/OpenMP/declare_reduction_messages.c"]={"clang/test/OpenMP/declare_reduction_messages.c:9:196: error: expected identifier or one of the following operators: \'+\', \'-\', \'*\', \'&\', \'|\', \'^\', \'&&\', or \'||\'","clang/test/OpenMP/declare_reduction_messages.c:10:31: error: expected identifier or one of the following operators: \'+\', \'-\', \'*\', \'&\', \'|\', \'^\', \'&&\', or \'||\'","clang/test/OpenMP/declare_reduction_messages.c:11:31: error: expected identifier or one of the following operators: \'+\', \'-\', \'*\', \'&\', \'|\', \'^\', \'&&\', or \'||\'","clang/test/OpenMP/declare_reduction_messages.c:13:31: error: expected identifier or one of the following operators: \'+\', \'-\', \'*\', \'&\', \'|\', \'^\', \'&&\', or \'||\'","clang/test/OpenMP/declare_reduction_messages.c:14:31: error: expected identifier or one of the following operators: \'+\', \'-\', \'*\', \'&\', \'|\', \'^\', \'&&\', or \'||\'"}
}
}
},
},
["err_preserve_type_info_invalid"]={
["err_omp_expected_uniform_param"]={
[d]={{nil,A,"err_preserve_type_info_invalid"}},
[j]="err_omp_expected_uniform_param",
[e]={{nil,A,"__builtin_preserve_type_info argument %0 invalid"}},
[b]="expected a reference to a parameter specified in a \'uniform\' clause",
[f]={{nil,A,"__builtin_preserve_type_info argument A invalid"}},
[c]="expected a reference to a parameter specified in a \'uniform\' clause",
[g]=k,
[e]=d,
[h]="__builtin_preserve_type_info argument (.*?) invalid",
[f]="expected a reference to a parameter specified in a \'uniform\' clause",
[b]=a,
[g]=a,
[c]={{nil,A,S}},
[i]=n,
[j]={Jb,1582847864,Ib,Ab},
[h]={"ecba70f194b5",1460458931,"[OPENMP 4.0] Support for \'linear\' clause in \'declare simd\' directive.","[OPENMP 4.0] Support for \'linear\' clause in \'declare simd\' directive.\n\nThe linear clause declares one or more list items to be private to a SIMD lane and to have a linear relationship with respect to the iteration space of a loop.\n\'linear\' \'(\' <linear-list> [ \':\' <linear-step> ] \')\'\nWhen a linear-step expression is specified in a linear clause it must be\neither a constant integer expression or an integer-typed parameter that is specified in a uniform clause on the directive.\nThe special this pointer can be used as if was one of the arguments to the function in any of the linear, aligned, or uniform clauses.\n\nllvm-svn: 266056"},
[i]={{I,3535,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (BuiltinID == BPF::BI__builtin_preserve_field_info) {\n // ...\n } else if (BuiltinID == BPF::BI__builtin_preserve_type_info) {\n   if (!isValidBPFPreserveTypeInfoArg(Arg)) {\n     // ...\n     kind = diag::err_preserve_type_info_invalid;"}},
[k]={{m,7041,"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 (Expr *E : Steps) {\n   // ...\n   if (const auto *DRE = dyn_cast<DeclRefExpr>(Step))\n     if (const auto *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n       // ...\n       if (UniformedArgs.count(CanonPVD) == 0) {\n          Diag(Step->getExprLoc(), diag::err_omp_expected_uniform_param) << Step->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/builtins-bpf.c"]={"clang/test/Sema/builtins-bpf.c:103:39: error: __builtin_preserve_type_info argument 1 invalid"}
[Fb]={"clang/test/OpenMP/declare_simd_messages.cpp:194:36: error: expected a reference to a parameter specified in a \'uniform\' clause","clang/test/OpenMP/declare_simd_messages.cpp:223:91: error: expected a reference to a parameter specified in a \'uniform\' clause"}
}
}
},
},
["err_preserve_type_info_not_const"]={
["err_omp_expected_var_arg"]={
[d]={{nil,A,"err_preserve_type_info_not_const"}},
[j]="err_omp_expected_var_arg",
[e]={{nil,A,"__builtin_preserve_type_info argument %0 not a constant"}},
[b]="%0 is not a global variable, static local variable or static data member",
[f]={{nil,A,"__builtin_preserve_type_info argument A not a constant"}},
[c]="A is not a global variable, static local variable or static data member",
[g]=k,
[e]=d,
[h]="__builtin_preserve_type_info argument (.*?) not a constant",
[f]="(.*?) is not a global variable, static local variable or static data member",
[b]=a,
[g]=a,
[c]={{nil,A,S}},
[i]=n,
[j]={Jb,1582847864,Ib,Ab},
[h]={"f9b1510576b2",1376700376,"Refactor all diagnosing of TypoCorrections through a common function, in","Refactor all diagnosing of TypoCorrections through a common function, in\npreparation for teaching this function how to diagnose a correction that\nincludes importing a module.\n\nllvm-svn: 188602"},
[i]={{I,3516,"bool Sema::CheckBPFBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  if (!Value) {\n    if (BuiltinID == BPF::BI__builtin_preserve_field_info)\n    // ...\n   else if (BuiltinID == BPF::BI__builtin_btf_type_id)\n    // ...\n    else if (BuiltinID == BPF::BI__builtin_preserve_type_info)\n      kind = diag::err_preserve_type_info_not_const;"}}
[k]={{m,3054,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // ...\n  if (!Lookup.isSingleResult()) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(Id, LookupOrdinaryName, CurScope, nullptr, CCC, CTK_ErrorRecovery)) {\n   // ...\n   } else {\n      Diag(Id.getLoc(), Lookup.empty() ? diag::err_undeclared_var_use : diag::err_omp_expected_var_arg) << Id.getName();"},{m,3059,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // ...\n  if (!Lookup.isSingleResult()) {\n // ...\n } else if (!(VD = Lookup.getAsSingle<VarDecl>())) {\n   Diag(Id.getLoc(), diag::err_omp_expected_var_arg) << Id.getName();"}},
},
["err_private_ivar_access"]={
[d]="err_private_ivar_access",
[e]="instance variable %0 is private",
[f]="instance variable A is private",
[g]=k,
[h]="instance variable (.*?) is private",
[b]=a,
[c]=m,
[j]={eb,1480718311,cb,fb},
[i]={{O,2971,"/// The parser has read a name in, and Sema has detected that we\'re currently\n/// inside an ObjC method. Perform some additional checks and determine if we\n/// should form a reference to an ivar.\n///\n/// Ideally, most of this would be done by lookup, but there\'s\n/// actually quite a lot of extra work involved.\nDeclResult Sema::LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S, IdentifierInfo *II) {\n  // ...\n  if (LookForIvars) {\n    // ...\n    if (IFace && (IV = IFace->lookupInstanceVariable(II, ClassDeclared))) {\n     // ...\n     // Diagnose the use of an ivar outside of the declaring class.\n      if (IV->getAccessControl() == ObjCIvarDecl::Private && !declaresSameEntity(ClassDeclared, IFace) && !getLangOpts().DebuggerSupport)\n        Diag(Loc, diag::err_private_ivar_access) << IV->getDeclName();"},{hb,1445,"/// 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->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n      // ...\n      if (!S.getLangOpts().DebuggerSupport) {\n        if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n         if (!declaresSameEntity(ClassDeclared, IDecl) || !declaresSameEntity(ClassOfMethodDecl, ClassDeclared))\n            S.Diag(MemberLoc, diag::err_private_ivar_access) << IV->getDeclName();"}},
[l]={
[l]={
["clang/test/SemaObjC/synthesized-ivar.m"]={"clang/test/SemaObjC/synthesized-ivar.m:16:26: error: instance variable \'IP\' is private","clang/test/SemaObjC/synthesized-ivar.m:48:4: error: instance variable \'_PROP_INMAIN\' is private","clang/test/SemaObjC/synthesized-ivar.m:49:4: error: instance variable \'_PROP_INCLASSEXT\' is private","clang/test/SemaObjC/synthesized-ivar.m:50:11: error: instance variable \'private_ivar\' is private"}
["clang/test/OpenMP/threadprivate_messages.cpp"]={"clang/test/OpenMP/threadprivate_messages.cpp:50:27: error: \'foo\' is not a global variable, static local variable or static data member","clang/test/OpenMP/threadprivate_messages.cpp:68:31: error: \'a\' is not a global variable, static local variable or static data member"}
}
}
},
},
["err_private_module_fragment_expected_semi"]={
["err_omp_expected_var_arg_suggest"]={
[d]={{nil,x,"err_private_module_fragment_expected_semi"}},
[j]="err_omp_expected_var_arg_suggest",
[e]={{nil,x,"expected \';\' after private module fragment declaration"}},
[b]="%0 is not a global variable, static local variable or static data member; did you mean %1",
[f]={{nil,x,"expected \';\' after private module fragment declaration"}},
[c]="A is not a global variable, static local variable or static data member; did you mean B",
[g]=k,
[e]=d,
[h]="expected \';\' after private module fragment declaration",
[f]="(.*?) is not a global variable, static local variable or static data member; did you mean (.*?)",
[b]=a,
[g]=a,
[c]={{nil,x,ac}},
[i]=n,
[j]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,\nand the global and private module fragment.\n\nFor now, the private module fragment introducer is ignored, but use of\nthe global module fragment introducer should be properly enforced.\n\nllvm-svn: 358353"},
[h]={"a769e07232d2",1363934075,"OpenMP threadprivate directive parsing and semantic analysis","OpenMP threadprivate directive parsing and semantic analysis\n\nllvm-svn: 177705"},
[i]={{"clang/lib/Parse/Parser.cpp",2438,"/// Parse a declaration beginning with the \'module\' keyword or C++20\n/// context-sensitive keyword (optionally preceded by \'export\').\n///\n///  module-declaration:   [C++20]\n///    \'export\'[opt] \'module\' module-name attribute-specifier-seq[opt] \';\'\n///\n///  global-module-fragment: [C++2a]\n///    \'module\' \';\' top-level-declaration-seq[opt]\n///  module-declaration:      [C++2a]\n///    \'export\'[opt] \'module\' module-name module-partition[opt]\n///            attribute-specifier-seq[opt] \';\'\n///  private-module-fragment: [C++2a]\n///    \'module\' \':\' \'private\' \';\' top-level-declaration-seq[opt]\nParser::DeclGroupPtrTy Parser::ParseModuleDecl(Sema::ModuleImportState &ImportState) {\n  // ...\n  // Parse a private-module-fragment, if present.\n  if (getLangOpts().CPlusPlusModules && Tok.is(tok::colon) && NextToken().is(tok::kw_private)) {\n    // ...\n    ExpectAndConsumeSemi(diag::err_private_module_fragment_expected_semi);"}}
[k]={{m,3049,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // ...\n  if (!Lookup.isSingleResult()) {\n    // ...\n    if (TypoCorrection Corrected = CorrectTypo(Id, LookupOrdinaryName, CurScope, nullptr, CCC, CTK_ErrorRecovery)) {\n      diagnoseTypo(Corrected, PDiag(Lookup.empty() ? diag::err_undeclared_var_use_suggest : diag::err_omp_expected_var_arg_suggest) << Id.getName());"}}
},
},
["err_private_module_fragment_not_module"]={
["err_omp_expected_var_name_member_expr"]={
[d]={{nil,x,"err_private_module_fragment_not_module"}},
[j]="err_omp_expected_var_name_member_expr",
[e]={{nil,x,"private module fragment declaration with no preceding module declaration"}},
[b]="expected variable name%select{| or data member of current class}0",
[f]={{nil,x,"private module fragment declaration with no preceding module declaration"}},
[c]={{nil,nil,{"expected variable name",{a," or data member of current class"}}}},
[g]=k,
[e]=d,
[h]="private module fragment declaration with no preceding module declaration",
[f]="expected variable name(?:| or data member of current class)",
[b]=a,
[g]=a,
[c]={{nil,x,ac}},
[i]=n,
[j]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"},
[h]={"48c0bfb99f12",1453280874,"[OPENMP 4.5] Allow to use non-static data members in non-static member functions in \'private\' clause...","[OPENMP 4.5] Allow to use non-static data members in non-static member functions in \'private\' clause.\nOpenMP 4.5 allows to use non-static members of current class in non-static member functions in \'private\' clause. Patch adds initial support for privatizing data members.\n\nllvm-svn: 258299"},
[i]={{"clang/lib/Sema/SemaModule.cpp",437,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  // ...\n  case Module::ModuleMapModule:\n  case Module::ExplicitGlobalModuleFragment:\n  case Module::ImplicitGlobalModuleFragment:\n  case Module::ModulePartitionImplementation:\n  case Module::ModulePartitionInterface:\n case Module::ModuleHeaderUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module);"}},
[k]={{m,5386,"static std::pair<ValueDecl *, bool> getPrivateItem(Sema &S, Expr *&RefExpr, SourceLocation &ELoc, SourceRange &ERange, bool AllowArraySection, StringRef DiagType) {\n  // ...\n  if ((!DE || !isa<VarDecl>(DE->getDecl())) && (S.getCurrentThisType().isNull() || !ME || !isa<CXXThisExpr>(ME->getBase()->IgnoreParenImpCasts()) || !isa<FieldDecl>(ME->getMemberDecl()))) {\n    if (IsArrayExpr != NoArrayExpr) {\n    // ...\n    } else if (!DiagType.empty()) {\n    // ...\n    } else {\n      S.Diag(ELoc, AllowArraySection ? diag::err_omp_expected_var_name_member_expr_or_array_item : diag::err_omp_expected_var_name_member_expr) << (S.getCurrentThisType().isNull() ? 0 : 1) << ERange;"},{m,20357,"OMPClause *Sema::ActOnOpenMPCopyinClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n   // ...\n    if (!DE || !isa<VarDecl>(DE->getDecl())) {\n      Diag(ELoc, diag::err_omp_expected_var_name_member_expr) << 0 << RefExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:43:9: error: private module fragment declaration with no preceding module declaration"}
["clang/test/OpenMP/sections_misc_messages.c"]={"clang/test/OpenMP/sections_misc_messages.c:184:30: error: expected variable name","clang/test/OpenMP/sections_misc_messages.c:244:34: error: expected variable name","clang/test/OpenMP/sections_misc_messages.c:304:35: error: expected variable name"}
}
}
},
},
["err_private_module_fragment_not_module_interface"]={
["err_omp_expected_var_name_member_expr_or_array_item"]={
[d]={{nil,x,"err_private_module_fragment_not_module_interface"}},
[j]="err_omp_expected_var_name_member_expr_or_array_item",
[e]={{nil,x,"private module fragment in module implementation unit"}},
[b]="expected variable name%select{|, data member of current class}0, array element or array section",
[f]={{nil,x,"private module fragment in module implementation unit"}},
[c]={{nil,nil,{"expected variable name",{a,", data member of current class"},", array element or array section"}}},
[g]=k,
[e]=d,
[h]="private module fragment in module implementation unit",
[f]="expected variable name(?:|, data member of current class), array element or array section",
[b]=a,
[g]=a,
[c]={{nil,x,ac}},
[i]=n,
[j]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"},
[h]={"48c0bfb99f12",1453280874,"[OPENMP 4.5] Allow to use non-static data members in non-static member functions in \'private\' clause...","[OPENMP 4.5] Allow to use non-static data members in non-static member functions in \'private\' clause.\nOpenMP 4.5 allows to use non-static members of current class in non-static member functions in \'private\' clause. Patch adds initial support for privatizing data members.\n\nllvm-svn: 258299"},
[i]={{"clang/lib/Sema/SemaModule.cpp",446,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  // ...\n  case Module::ModuleImplementationUnit:\n    Diag(PrivateLoc, diag::err_private_module_fragment_not_module_interface);"}},
[k]={{m,5385,"static std::pair<ValueDecl *, bool> getPrivateItem(Sema &S, Expr *&RefExpr, SourceLocation &ELoc, SourceRange &ERange, bool AllowArraySection, StringRef DiagType) {\n  // ...\n  if ((!DE || !isa<VarDecl>(DE->getDecl())) && (S.getCurrentThisType().isNull() || !ME || !isa<CXXThisExpr>(ME->getBase()->IgnoreParenImpCasts()) || !isa<FieldDecl>(ME->getMemberDecl()))) {\n    if (IsArrayExpr != NoArrayExpr) {\n    // ...\n    } else if (!DiagType.empty()) {\n    // ...\n    } else {\n      S.Diag(ELoc, AllowArraySection ? diag::err_omp_expected_var_name_member_expr_or_array_item : diag::err_omp_expected_var_name_member_expr) << (S.getCurrentThisType().isNull() ? 0 : 1) << ERange;"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p2.cpp"]={"clang/test/CXX/basic/basic.link/p2.cpp:16:9: error: private module fragment in module implementation unit"}
["clang/test/OpenMP/parallel_reduction_messages.c"]={"clang/test/OpenMP/parallel_reduction_messages.c:19:48: error: expected variable name, array element or array section"}
}
}
},
},
["err_private_module_fragment_redefined"]={
["err_omp_expected_var_name_member_expr_with_type"]={
[d]={{nil,x,"err_private_module_fragment_redefined"}},
[j]={{nil,w,"err_omp_expected_var_name_member_expr_with_type"}},
[e]={{nil,x,"private module fragment redefined"}},
[b]={{nil,w,"expected variable%select{| or static data member|, static data member, or non-static data member of current class}0 of type \'%1\'"}},
[f]={{nil,x,"private module fragment redefined"}},
[c]={{nil,w,{"expected variable",{a," or static data member",", static data member, or non-static data member of current class"}," of type \'B\'"}}},
[g]=k,
[e]=d,
[h]="private module fragment redefined",
[f]="expected variable(?:| or static data member|, static data member, or non\\-static data member of current class) of type \'(.*?)\'",
[b]=a,
[g]=a,
[c]={{nil,x,ac}},
[i]={{nil,w,n}},
[j]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments.\n\nllvm-svn: 358713"},
[h]={"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"},
[i]={{"clang/lib/Sema/SemaModule.cpp",441,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  // ...\n  case Module::PrivateModuleFragment:\n    Diag(PrivateLoc, diag::err_private_module_fragment_redefined);"}},
[k]={{m,5380,"static std::pair<ValueDecl *, bool> getPrivateItem(Sema &S, Expr *&RefExpr, SourceLocation &ELoc, SourceRange &ERange, bool AllowArraySection, StringRef DiagType) {\n  // ...\n  if ((!DE || !isa<VarDecl>(DE->getDecl())) && (S.getCurrentThisType().isNull() || !ME || !isa<CXXThisExpr>(ME->getBase()->IgnoreParenImpCasts()) || !isa<FieldDecl>(ME->getMemberDecl()))) {\n    if (IsArrayExpr != NoArrayExpr) {\n    // ...\n    } else if (!DiagType.empty()) {\n      // ...\n      S.Diag(ELoc, diag::err_omp_expected_var_name_member_expr_with_type) << DiagSelect << DiagType << ERange;"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:54:9: error: private module fragment redefined"}
[wb]={"clang/test/OpenMP/interop_messages.cpp:60:36: error: expected variable or static data member of type \'omp_interop_t\'","clang/test/OpenMP/interop_messages.cpp:63:28: error: expected variable or static data member of type \'omp_interop_t\'","clang/test/OpenMP/interop_messages.cpp:66:32: error: expected variable or static data member of type \'omp_interop_t\'","clang/test/OpenMP/interop_messages.cpp:136:37: error: expected variable or static data member of type \'omp_interop_t\'","clang/test/OpenMP/interop_messages.cpp:159:59: error: expected variable, static data member, or non-static data member of current class of type \'omp_interop_t\'","clang/test/OpenMP/interop_messages.cpp:162:59: error: expected variable, static data member, or non-static data member of current class of type \'omp_interop_t\'","clang/test/OpenMP/interop_messages.cpp:169:37: error: expected variable or static data member of type \'omp_interop_t\'","clang/test/OpenMP/interop_messages.cpp:172:36: error: expected variable or static data member of type \'omp_interop_t\'"}
}
}
},
},
["err_probability_not_constant_float"]={
["err_omp_explicit_conversion"]={
[d]={{nil,t,"err_probability_not_constant_float"}},
[j]="err_omp_explicit_conversion",
[e]={{nil,t,"probability argument to __builtin_expect_with_probability must be constant floating-point expression"}},
[b]="expression requires explicit conversion from %0 to %1",
[f]={{nil,t,"probability argument to __builtin_expect_with_probability must be constant floating-point expression"}},
[c]="expression requires explicit conversion from A to B",
[g]=k,
[e]=d,
[h]="probability argument to __builtin_expect_with_probability must be constant floating\\-point expression",
[f]="expression requires explicit conversion from (.*?) to (.*?)",
[b]=a,
[g]=a,
[c]={{nil,t,S}},
[i]=n,
[j]={Jb,1582847864,Ib,Ab},
[h]={"568a833f68de",1394086519,"[OPENMP] Clause \'num_threads\'","[OPENMP] Clause \'num_threads\'\n\nllvm-svn: 203087"},
[i]={{I,2441,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_expect_with_probability: {\n    // ...\n    if ((!ProbArg->EvaluateAsConstantExpr(Eval, Context)) || !Eval.Val.isFloat()) {\n      Diag(ProbArg->getBeginLoc(), diag::err_probability_not_constant_float) << ProbArg->getSourceRange();"}},
[k]={{m,16402,"ExprResult Sema::PerformOpenMPImplicitIntegerConversion(SourceLocation Loc, Expr *Op) {\n  // ...\n  class IntConvertDiagnoser : public ICEConvertDiagnoser {\n    // ...\n    SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_omp_explicit_conversion) << T << ConvTy; }"}}
[l]={
["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:8:55: error: probability argument to __builtin_expect_with_probability must be constant floating-point expression"}
}
},
},
["err_probability_out_of_range"]={
["err_omp_firstprivate_incomplete_type"]={
[d]={{nil,t,"err_probability_out_of_range"}},
[j]="err_omp_firstprivate_incomplete_type",
[e]={{nil,t,"probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}},
[b]="a firstprivate variable with incomplete type %0",
[f]={{nil,t,"probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}},
[c]="a firstprivate variable with incomplete type A",
[g]=k,
[e]=d,
[h]="probability argument to __builtin_expect_with_probability is outside the range \\[0\\.0, 1\\.0\\]",
[f]="a firstprivate variable with incomplete type (.*?)",
[b]=a,
[g]=a,
[c]={{nil,t,S}},
[i]=n,
[j]={Jb,1582847864,Ib,Ab},
[h]={"d5af8e472d60",1380605554,"[OpenMP] Added parsing and semantic analysis for firstprivate clause","[OpenMP] Added parsing and semantic analysis for firstprivate clause\n\nllvm-svn: 191730"},
[i]={{I,2453,"#include \"clang/Basic/Builtins.def\"\n  // ...\n  case Builtin::BI__builtin_expect_with_probability: {\n    // ...\n    if (!(Probability >= llvm::APFloat(0.0) && Probability <= llvm::APFloat(1.0))) {\n      Diag(ProbArg->getBeginLoc(), diag::err_probability_out_of_range) << ProbArg->getSourceRange();"}},
[k]={{m,18230,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (RequireCompleteType(ELoc, Type, diag::err_omp_firstprivate_incomplete_type))"}},
[l]={
[l]={
["clang/test/Sema/builtin-expect-with-probability-avr.cpp"]={"clang/test/Sema/builtin-expect-with-probability-avr.cpp:6:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:7:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:10:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:11:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:13:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]","clang/test/Sema/builtin-expect-with-probability-avr.cpp:14:55: error: probability argument to __builtin_expect_with_probability is outside the range [0.0, 1.0]"}
["clang/test/OpenMP/parallel_sections_firstprivate_messages.cpp"]={"clang/test/OpenMP/parallel_sections_firstprivate_messages.cpp:113:47: error: a firstprivate variable with incomplete type \'S1\'","clang/test/OpenMP/parallel_sections_firstprivate_messages.cpp:219:44: error: a firstprivate variable with incomplete type \'S1\'"}
}
}
},
},
["err_property_accessor_type"]={
["err_omp_flush_order_clause_and_list"]={
[d]="err_property_accessor_type",
[j]={{nil,o,"err_omp_flush_order_clause_and_list"}},
[e]="type of property %0 (%1) does not match type of accessor %2 (%3)",
[b]={{nil,o,"\'flush\' directive with memory order clause \'%0\' cannot have the list"}},
[f]="type of property A (B) does not match type of accessor C (D)",
[c]={{nil,o,"\'flush\' directive with memory order clause \'A\' cannot have the list"}},
[g]=k,
[e]=d,
[h]="type of property (.*?) \\((.*?)\\) does not match type of accessor (.*?) \\((.*?)\\)",
[f]="\'flush\' directive with memory order clause \'(.*?)\' cannot have the list",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,o,n}},
[j]={eb,1480718311,cb,fb},
[h]={"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"},
[i]={{xb,1727,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n // ...\n if (!compat) {\n   // ...\n   if ((propertyObjCPtr = PropertyRValueType->getAs<ObjCObjectPointerType>()) && (getterObjCPtr = GetterType->getAs<ObjCObjectPointerType>()))\n   // ...\n   else if (CheckAssignmentConstraints(Loc, GetterType, PropertyRValueType) != Compatible) {\n     Diag(Loc, diag::err_property_accessor_type) << property->getDeclName() << PropertyRValueType << GetterMethod->getSelector() << GetterType;"}},
[k]={{m,11240,"StmtResult Sema::ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n // ...\n if (FC && OrderClause) {\n   Diag(FC->getLParenLoc(), diag::err_omp_flush_order_clause_and_list) << getOpenMPClauseName(OrderClause->getClauseKind());"}},
[l]={
[l]={
["clang/test/SemaObjC/property-impl-misuse.m"]={"clang/test/SemaObjC/property-impl-misuse.m:40:15: error: type of property \'P\' (\'int\') does not match type of accessor \'P\' (\'void\')","clang/test/SemaObjC/property-impl-misuse.m:46:15: error: type of property \'P2\' (\'int\') does not match type of accessor \'P2\' (\'double *\')"}
["clang/test/OpenMP/flush_messages.cpp"]={"clang/test/OpenMP/flush_messages.cpp:146:13: error: \'flush\' directive with memory order clause \'acq_rel\' cannot have the list"}
}
}
},
},
["err_property_found_suggest"]={
["err_omp_function_expected"]={
[d]="err_property_found_suggest",
[j]="err_omp_function_expected",
[e]="property %0 found on object of type %1; did you mean to access it with the \".\" operator?",
[b]={{nil,p,"\'#pragma omp declare %select{simd|variant}0\' can only be applied to functions"},{v,nil,"\'#pragma omp declare simd\' can only be applied to functions"}},
[f]="property A found on object of type B; did you mean to access it with the \".\" operator?",
[c]={{nil,p,{"\'#pragma omp declare ",{"simd","variant"},"\' can only be applied to functions"}},{v,nil,"\'#pragma omp declare simd\' can only be applied to functions"}},
[g]=k,
[e]=d,
[h]="property (.*?) found on object of type (.*?); did you mean to access it with the \"\\.\" operator\\?",
[f]="\'\\#pragma omp declare (?:simd|variant)\' can only be applied to functions",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"c297cd883641",1309219252,"Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.","Provide fix-it for \'.\' <-> \'->\' for Objective-C ivar/property access.\n// rdar://7811841\n\nllvm-svn: 133970"},
[h]={"587e1de4ea2a",1459334635,"[OPENMP 4.0] Initial support for \'#pragma omp declare simd\' directive.","[OPENMP 4.0] Initial support for \'#pragma omp declare simd\' directive.\n\nInitial parsing/sema/serialization/deserialization support for \'#pragma\nomp declare simd\' directive.\nThe \'declare simd\' construct can be applied to a function to enable the\ncreation of one or more versions that can process multiple arguments\nusing SIMD instructions from a single invocation from a SIMD loop.\nIf the function has any declarations, then the declare simd construct\nfor any declaration that has one must be equivalent to the one specified\n for the definition. Otherwise, the result is unspecified.\nThis pragma can be applied many times to the same declaration.\nInternally this pragma is represented as an attribute. But we need special processing for this pragma because it must be used before function declaration, this directive is applied to.\nDifferential Revision: http://reviews.llvm.org/D10599\n\nllvm-svn: 264853"},
[i]={{hb,1398,"/// 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     } else {\n       if (IsArrow && IDecl->FindPropertyDeclaration(Member, ObjCPropertyQueryKind::OBJC_PR_query_instance)) {\n         S.Diag(MemberLoc, diag::err_property_found_suggest) << Member << BaseExpr.get()->getType() << FixItHint::CreateReplacement(OpLoc, \".\");"}},
[k]={{m,6849,"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 (!FD) {\n    Diag(ADecl->getLocation(), diag::err_omp_function_expected) << SimdId;"},{m,7370,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n // ...\n  if (!FD) {\n    Diag(ADecl->getLocation(), diag::err_omp_function_expected) << VariantId << SR;"},{m,7401,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n // ...\n // The VariantRef must point to function.\n if (!VariantRef) {\n   Diag(SR.getBegin(), diag::err_omp_function_expected) << VariantId;"},{m,7491,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  if (LangOpts.CPlusPlus) {\n    // ...\n    if (Method && !Method->isStatic()) {\n      // ...\n      if (!ER.isUsable()) {\n        Diag(VariantRef->getExprLoc(), diag::err_omp_function_expected) << VariantId << VariantRef->getSourceRange();"},{m,7532,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n // ...\n if (!ER.isUsable() || !ER.get()->IgnoreParenImpCasts()->getType()->isFunctionType()) {\n   Diag(VariantRef->getExprLoc(), diag::err_omp_function_expected) << VariantId << VariantRef->getSourceRange();"},{m,7540,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n // ...\n  if (!DRE) {\n    Diag(VariantRef->getExprLoc(), diag::err_omp_function_expected) << VariantId << VariantRef->getSourceRange();"},{m,7546,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  if (!NewFD) {\n    Diag(VariantRef->getExprLoc(), diag::err_omp_function_expected) << VariantId << VariantRef->getSourceRange();"}},
[l]={
[l]={
["clang/test/FixIt/fixit-objc.m"]={"clang/test/FixIt/fixit-objc.m:54:37: error: property \'y\' found on object of type \'Radar7861841 *\'; did you mean to access it with the \".\" operator?"}
[Fb]={"clang/test/OpenMP/declare_simd_messages.cpp:10:5: error: \'#pragma omp declare simd\' can only be applied to functions","clang/test/OpenMP/declare_simd_messages.cpp:13:1: error: \'#pragma omp declare simd\' can only be applied to functions"}
}
}
},
},
["err_property_function_in_objc_container"]={
["err_omp_function_in_link_clause"]={
[d]="err_property_function_in_objc_container",
[j]={{nil,L,"err_omp_function_in_link_clause"}},
[e]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container",
[b]={{nil,L,"function name is not allowed in \'link\' clause"}},
[f]="use of Objective-C property in function nested in Objective-C container not supported, move function outside its container",
[c]={{nil,L,"function name is not allowed in \'link\' clause"}},
[g]=k,
[e]=d,
[h]="use of Objective\\-C property in function nested in Objective\\-C container not supported, move function outside its container",
[f]="function name is not allowed in \'link\' clause",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,L,n}},
[j]={"555132824a9e",1401300730,"Objective-C. Diagnose use of properties in functions nested in, ","Objective-C. Diagnose use of properties in functions nested in, \nnow deprecated, ObjC containers instead of crashing. \n// rdar://16859666\n\nllvm-svn: 209758"},
[h]={"1ce87c705167",1513109292,"[OpenMP] Diagnose function name on the link clause","[OpenMP] Diagnose function name on the link clause\n\nThis patch is to add diagnose when a function name is\nspecified on the link clause. According to the  OpenMP\nspec, only the list items that exclude the function \nname are allowed on the link clause.\n\nDifferential Revision: https://reviews.llvm.org/D40968\n\nllvm-svn: 320521"},
[i]={{"clang/lib/Sema/SemaPseudoObject.cpp",699,"void ObjCPropertyOpBuilder::DiagnoseUnsupportedPropertyUse() {\n  if (S.getCurLexicalContext()->isObjCContainer() && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCCategoryImpl && S.getCurLexicalContext()->getDeclKind() != Decl::ObjCImplementation) {\n    if (ObjCPropertyDecl *prop = RefExpr->getExplicitProperty()) {\n      S.Diag(RefExpr->getLocation(), diag::err_property_function_in_objc_container);"}},
[k]={{m,23170,"void Sema::checkDeclIsAllowedInOpenMPTarget(Expr *E, Decl *D, SourceLocation IdLoc) {\n  // ...\n  if (auto *FD = dyn_cast<FunctionDecl>(D)) {\n    // ...\n    if (IdLoc.isValid() && Res && *Res == OMPDeclareTargetDeclAttr::MT_Link) {\n      Diag(IdLoc, diag::err_omp_function_in_link_clause);"}},
[l]={
[l]={
["clang/test/SemaObjC/deprecate_function_containers.m"]={"clang/test/SemaObjC/deprecate_function_containers.m:34:37: error: use of Objective-C property in function nested in Objective-C container not supported, move function outside its container"}
[U]={"clang/test/OpenMP/declare_target_messages.cpp:72:33: error: function name is not allowed in \'link\' clause"}
}
}
},
},
["err_property_implemented"]={
["err_omp_global_var_arg"]={
[d]="err_property_implemented",
[j]="err_omp_global_var_arg",
[e]="property %0 is already implemented",
[b]="arguments of \'#pragma omp %0\' must have %select{global storage|static storage duration}1",
[f]="property A is already implemented",
[c]={{nil,nil,{"arguments of \'#pragma omp A\' must have ",{"global storage","static storage duration"}}}},
[g]=k,
[e]=d,
[h]="property (.*?) is already implemented",
[f]="arguments of \'\\#pragma omp (.*?)\' must have (?:global storage|static storage duration)",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={eb,1480718311,cb,fb},
[h]={"a769e07232d2",1363934075,"OpenMP threadprivate directive parsing and semantic analysis","OpenMP threadprivate directive parsing and semantic analysis\n\nllvm-svn: 177705"},
[i]={{xb,1569,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if (IC) {\n    // ...\n    if (ObjCPropertyImplDecl *PPIDecl = IC->FindPropertyImplDecl(PropertyId, QueryKind)) {\n      Diag(PropertyLoc, diag::err_property_implemented) << PropertyId;"},{xb,1608,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // ...\n  if (IC) {\n  // ...\n  } else {\n    // ...\n    if (ObjCPropertyImplDecl *PPIDecl = CatImplClass->FindPropertyImplDecl(PropertyId, QueryKind)) {\n     Diag(PropertyDiagLoc, diag::err_property_implemented) << PropertyId;"}},
[k]={{m,3068,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // ...\n  // OpenMP [2.9.2, Syntax, C/C++]\n //   Variables must be file-scope, namespace-scope, or static block-scope.\n  if (Kind == OMPD_threadprivate && !VD->hasGlobalStorage()) {\n   Diag(Id.getLoc(), diag::err_omp_global_var_arg) << getOpenMPDirectiveName(Kind) << !VD->isStaticLocal();"}},
[l]={
[l]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: property \'prop_id\' is already implemented"}
["clang/test/OpenMP/threadprivate_messages.cpp"]={"clang/test/OpenMP/threadprivate_messages.cpp:132:27: error: arguments of \'#pragma omp threadprivate\' must have static storage duration","clang/test/OpenMP/threadprivate_messages.cpp:132:32: error: arguments of \'#pragma omp threadprivate\' must have static storage duration"}
}
}
},
},
["err_property_is_variably_modified"]={
["err_omp_hint_clause_no_name"]={
[d]="err_property_is_variably_modified",
[j]="err_omp_hint_clause_no_name",
[e]="property %0 has a variably modified type",
[b]="the name of the construct must be specified in presence of \'hint\' clause",
[f]="property A has a variably modified type",
[c]="the name of the construct must be specified in presence of \'hint\' clause",
[g]=k,
[e]=d,
[h]="property (.*?) has a variably modified type",
[f]="the name of the construct must be specified in presence of \'hint\' clause",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"5e77d76c953d",1366097310,"Basic support for Microsoft property declarations and","Basic support for Microsoft property declarations and\nreferences thereto.\n\nPatch by Tong Shen!\n\nllvm-svn: 179585"},
[h]={"28c75417b2c4",1450167564,"[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive.","[OPENMP 4.5] Parsing/sema for \'hint\' clause of \'critical\' directive.\nOpenMP 4.5 adds \'hint\' clause to critical directive. Patch adds parsing/semantic analysis for this clause.\n\nllvm-svn: 255625"},
[i]={{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",1305,"Decl *TemplateDeclInstantiator::VisitMSPropertyDecl(MSPropertyDecl *D) {\n  // ...\n  if (DI->getType()->isVariablyModifiedType()) {\n    SemaRef.Diag(D->getLocation(), diag::err_property_is_variably_modified) << D;"}}
[k]={{m,10870,"StmtResult Sema::ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  for (const OMPClause *C : Clauses) {\n    if (C->getClauseKind() == OMPC_hint) {\n      if (!DirName.getName()) {\n        Diag(C->getBeginLoc(), diag::err_omp_hint_clause_no_name);"}},
},
["err_property_ivar_type"]={
[d]="err_property_ivar_type",
[e]="type of property %0 (%1) does not match type of instance variable %2 (%3)",
[f]="type of property A (B) does not match type of instance variable C (D)",
[g]=k,
[h]="type of property (.*?) \\((.*?)\\) does not match type of instance variable (.*?) \\((.*?)\\)",
[b]=a,
[c]=m,
[j]={eb,1480718311,cb,fb},
[i]={{xb,1376,"/// 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     if (!compat) {\n        Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"},{xb,1391,"/// 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      if (!compat) {\n      // ...\n      } else {\n        // ...\n        if (lhsType != rhsType && lhsType->isArithmeticType()) {\n          Diag(PropertyDiagLoc, diag::err_property_ivar_type) << property->getDeclName() << PropType << Ivar->getDeclName() << IvarType;"}},
[l]={
[l]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:21:13: error: type of property \'prop_id\' (\'id\') does not match type of instance variable \'IVAR\' (\'int\')"}
["clang/test/OpenMP/critical_messages.cpp"]={"clang/test/OpenMP/critical_messages.cpp:72:24: error: the name of the construct must be specified in presence of \'hint\' clause","clang/test/OpenMP/critical_messages.cpp:141:24: error: the name of the construct must be specified in presence of \'hint\' clause"}
}
}
},
},
["err_property_method_unavailable"]={
["err_omp_immediate_directive"]={
[d]="err_property_method_unavailable",
[j]="err_omp_immediate_directive",
[e]="property access is using %0 method which is unavailable",
[b]="\'#pragma omp %0\' %select{|with \'%2\' clause }1cannot be an immediate substatement",
[f]="property access is using A method which is unavailable",
[c]={{nil,nil,{"\'#pragma omp A\' ",{a,"with \'C\' clause "},"cannot be an immediate substatement"}}},
[g]=k,
[e]=d,
[h]="property access is using (.*?) method which is unavailable",
[f]="\'\\#pragma omp (.*?)\' (?:|with \'(.*?)\' clause )cannot be an immediate substatement",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={"89ea9610b306",1402939541,"Objective-C. Diagnose when property access is using declared","Objective-C. Diagnose when property access is using declared\nproperty accessor methods which have become deprecated\nor available. // rdar://15951801\n\nllvm-svn: 211039"},
[h]={"68446b72530b",1405669639,"[OPENMP] Initial parsing and sema analysis of \'taskyield\' directive.","[OPENMP] Initial parsing and sema analysis of \'taskyield\' directive.\n\nllvm-svn: 213355"},
[i]={{"clang/lib/Sema/SemaAvailability.cpp",448,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // ...\n  case AR_Unavailable:\n    diag = !ObjCPropertyAccess ? diag::err_unavailable : diag::err_property_method_unavailable;"}},
[k]={{t,2523,"/// 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_nothing:\n    if ((StmtCtx & ParsedStmtContext::AllowStandaloneOpenMPDirectives) == ParsedStmtContext())\n      Diag(Tok, diag::err_omp_immediate_directive) << getOpenMPDirectiveName(DKind) << 0;"},{t,2675,"/// 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_threadprivate: {\n    // FIXME: Should this be permitted in C++?\n    if ((StmtCtx & ParsedStmtContext::AllowDeclarationsInC) == ParsedStmtContext()) {\n     Diag(Tok, diag::err_omp_immediate_directive) << getOpenMPDirectiveName(DKind) << 0;"},{t,2694,"/// 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_allocate: {\n    // FIXME: Should this be permitted in C++?\n    if ((StmtCtx & ParsedStmtContext::AllowDeclarationsInC) == ParsedStmtContext()) {\n      Diag(Tok, diag::err_omp_immediate_directive) << getOpenMPDirectiveName(DKind) << 0;"},{t,2774,"/// 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_flush:\n  case OMPD_depobj:\n  case OMPD_scan:\n  case OMPD_taskyield:\n  case OMPD_error:\n  case OMPD_barrier:\n  case OMPD_taskwait:\n  case OMPD_cancellation_point:\n  case OMPD_cancel:\n  case OMPD_target_enter_data:\n  case OMPD_target_exit_data:\n  case OMPD_target_update:\n  case OMPD_interop:\n    if ((StmtCtx & ParsedStmtContext::AllowStandaloneOpenMPDirectives) == ParsedStmtContext()) {\n      Diag(Tok, diag::err_omp_immediate_directive) << getOpenMPDirectiveName(DKind) << 0;"},{t,2935,"/// 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_ordered) {\n      // If the depend or doacross clause is specified, the ordered construct\n      // is a stand-alone directive.\n      for (auto CK : {OMPC_depend, OMPC_doacross}) {\n        if (FirstClauses[unsigned(CK)].getInt()) {\n          if ((StmtCtx & ParsedStmtContext::AllowStandaloneOpenMPDirectives) == ParsedStmtContext()) {\n            Diag(Loc, diag::err_omp_immediate_directive) << getOpenMPDirectiveName(DKind) << 1 << getOpenMPClauseName(CK);"}},
[l]={
[l]={
["clang/test/SemaObjC/property-deprecated-warning.m"]={"clang/test/SemaObjC/property-deprecated-warning.m:168:14: error: property access is using \'x\' method which is unavailable"}
["clang/test/OpenMP/cancel_messages.cpp"]={"clang/test/OpenMP/cancel_messages.cpp:24:13: error: \'#pragma omp cancel\' cannot be an immediate substatement","clang/test/OpenMP/cancel_messages.cpp:51:13: error: \'#pragma omp cancel\' cannot be an immediate substatement","clang/test/OpenMP/cancel_messages.cpp:56:13: error: \'#pragma omp cancel\' cannot be an immediate substatement","clang/test/OpenMP/cancel_messages.cpp:63:13: error: \'#pragma omp cancel\' cannot be an immediate substatement","clang/test/OpenMP/cancel_messages.cpp:66:13: error: \'#pragma omp cancel\' cannot be an immediate substatement","clang/test/OpenMP/cancel_messages.cpp:81:13: error: \'#pragma omp cancel\' cannot be an immediate substatement"}
}
}
},
},
["err_property_not_as_forward_class"]={
["err_omp_implied_type_not_found"]={
[d]="err_property_not_as_forward_class",
[j]={{nil,o,"err_omp_implied_type_not_found"}},
[e]="property %0 refers to an incomplete Objective-C class %1 (with no @interface available)",
[b]={{nil,o,"\'%0\' type not found; include <omp.h>"}},
[f]="property A refers to an incomplete Objective-C class B (with no @interface available)",
[c]={{nil,o,"\'A\' type not found; include <omp.h>"}},
[g]=k,
[e]=d,
[h]="property (.*?) refers to an incomplete Objective\\-C class (.*?) \\(with no @interface available\\)",
[f]="\'(.*?)\' type not found; include \\<omp\\.h\\>",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,o,n}},
[j]={"05d389f407d0",1297905974,"Improve diagnostics when property names an object type of","Improve diagnostics when property names an object type of\na forward class. // rdar://8851803\n\nllvm-svn: 125699"},
[h]={I,1576908663,H,F},
[i]={{qb,2138,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interfaceThis is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  if (ObjCIvarDecl *Ivar = IFace->lookupInstanceVariable(Member, ClassDeclared)) {\n   // ...\n   if (const ObjCObjectPointerType *OBJPT = T->getAsObjCInterfacePointerType()) {\n     if (RequireCompleteType(MemberLoc, OBJPT->getPointeeType(), diag::err_property_not_as_forward_class, MemberName, BaseExpr))"}},
[k]={{m,16579,"/// Tries to find omp_allocator_handle_t type.\nstatic bool findOMPAllocatorHandleT(Sema &S, SourceLocation Loc, DSAStackTy *Stack) {\// ...\n if (!PT.getAsOpaquePtr() || PT.get().isNull()) {\n    S.Diag(Loc, diag::err_omp_implied_type_not_found) << \"omp_allocator_handle_t\";"},{m,16617,"/// Tries to find omp_allocator_handle_t type.\nstatic bool findOMPAllocatorHandleT(Sema &S, SourceLocation Loc, DSAStackTy *Stack) {\n // ...\n if (ErrorFound) {\n    S.Diag(Loc, diag::err_omp_implied_type_not_found) << \"omp_allocator_handle_t\";"},{m,17671,"static bool isValidInteropVariable(Sema &SemaRef, Expr *InteropVarExpr, SourceLocation VarLoc, OpenMPClauseKind Kind) {\n  // ...\n  if (HasError) {\n    SemaRef.Diag(VarLoc, diag::err_omp_implied_type_not_found) << \"omp_interop_t\";"},{m,20557,"/// Tries to find omp_depend_t. type.\nstatic bool findOMPDependT(Sema &S, SourceLocation Loc, DSAStackTy *Stack, bool Diagnose = true) {\n  // ...\n  if (!PT.getAsOpaquePtr() || PT.get().isNull()) {\n    if (Diagnose)\n      S.Diag(Loc, diag::err_omp_implied_type_not_found) << \"omp_depend_t\";"},{m,22779,"/// Tries to find omp_event_handle_t type.\nstatic bool findOMPEventHandleT(Sema &S, SourceLocation Loc, DSAStackTy *Stack) {\n // ...\n if (!PT.getAsOpaquePtr() || PT.get().isNull()) {\n   S.Diag(Loc, diag::err_omp_implied_type_not_found) << \"omp_event_handle_t\";"},{m,23838,"/// Tries to find omp_alloctrait_t type.\nstatic bool findOMPAlloctraitT(Sema &S, SourceLocation Loc, DSAStackTy *Stack) {\n  // ...\n  if (!PT.getAsOpaquePtr() || PT.get().isNull()) {\n    S.Diag(Loc, diag::err_omp_implied_type_not_found) << \"omp_alloctrait_t\";"}},
[l]={
[l]={
["clang/test/SemaObjC/property-missing.m"]={"clang/test/SemaObjC/property-missing.m:32:11: error: property \'someOtherObject\' refers to an incomplete Objective-C class \'SomeOtherClass\' (with no @interface available)"}
["clang/test/OpenMP/allocate_allocator_messages.cpp"]={"clang/test/OpenMP/allocate_allocator_messages.cpp:13:37: error: \'omp_allocator_handle_t\' type not found; include <omp.h>","clang/test/OpenMP/allocate_allocator_messages.cpp:14:37: error: \'omp_allocator_handle_t\' type not found; include <omp.h>","clang/test/OpenMP/allocate_allocator_messages.cpp:15:37: error: \'omp_allocator_handle_t\' type not found; include <omp.h>","clang/test/OpenMP/allocate_allocator_messages.cpp:16:37: error: \'omp_allocator_handle_t\' type not found; include <omp.h>"}
}
}
},
},
["err_property_not_found"]={
["err_omp_inclusive_exclusive_not_reduction"]={
[d]="err_property_not_found",
[j]={{nil,o,"err_omp_inclusive_exclusive_not_reduction"}},
[e]="property %0 not found on object of type %1",
[b]={{nil,o,"the list item must appear in \'reduction\' clause with the \'inscan\' modifier of the parent directive"}},
[f]="property A not found on object of type B",
[c]={{nil,o,"the list item must appear in \'reduction\' clause with the \'inscan\' modifier of the parent directive"}},
[g]=k,
[e]=d,
[h]="property (.*?) not found on object of type (.*?)",
[f]="the list item must appear in \'reduction\' clause with the \'inscan\' modifier of the parent directive",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,o,n}},
[j]={M,1237025389,L,N},
[h]={I,1576908663,H,F},
[i]={{hb,1549,"/// 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  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // ...\n    // id, with and without qualifiers.\n    if (OT->isObjCId()) {\n      // ...\n      return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{hb,1604,"/// 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  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    // ...\n    // \'Class\', unqualified only.\n    if (OT->isObjCClass()) {\n      // ...\n     return ExprError(S.Diag(MemberLoc, diag::err_property_not_found) << MemberName << BaseType);"},{qb,2149,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n // ...\n  Diag(MemberLoc, diag::err_property_not_found) << MemberName << QualType(OPT, 0);"},{qb,2257,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n // ...\n  return ExprError(Diag(propertyNameLoc, diag::err_property_not_found) << &propertyName << Context.getObjCInterfaceType(IFace));"}},
[k]={{m,23773,"OMPClause *Sema::ActOnOpenMPInclusiveClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n // ...\n  for (Expr *RefExpr : VarList) {\n   // ...\n   // OpenMP 5.0, 2.9.6, scan Directive, Restrictions.\n   // A list item that appears in the inclusive or exclusive clause must appear\n    // in a reduction clause with the inscan modifier on the enclosing\n    // worksharing-loop, worksharing-loop SIMD, or simd construct.\n    if (DVar.CKind != OMPC_reduction || DVar.Modifier != OMPC_REDUCTION_inscan)\n      Diag(ELoc, diag::err_omp_inclusive_exclusive_not_reduction) << RefExpr->getSourceRange();"},{m,23816,"OMPClause *Sema::ActOnOpenMPExclusiveClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    // OpenMP 5.0, 2.9.6, scan Directive, Restrictions.\n    // A list item that appears in the inclusive or exclusive clause must appear\n   // in a reduction clause with the inscan modifier on the enclosing\n   // worksharing-loop, worksharing-loop SIMD, or simd construct.\n   if (ParentDirective == OMPD_unknown || DVar.CKind != OMPC_reduction || DVar.Modifier != OMPC_REDUCTION_inscan) {\n     Diag(ELoc, diag::err_omp_inclusive_exclusive_not_reduction) << RefExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjC/conditional-expr-4.m"]={"clang/test/SemaObjC/conditional-expr-4.m:78:25: error: property \'x\' not found on object of type \'id\'"}
["clang/test/OpenMP/scan_messages.cpp"]={"clang/test/OpenMP/scan_messages.cpp:116:28: error: the list item must appear in \'reduction\' clause with the \'inscan\' modifier of the parent directive","clang/test/OpenMP/scan_messages.cpp:123:28: error: the list item must appear in \'reduction\' clause with the \'inscan\' modifier of the parent directive","clang/test/OpenMP/scan_messages.cpp:142:28: error: the list item must appear in \'reduction\' clause with the \'inscan\' modifier of the parent directive","clang/test/OpenMP/scan_messages.cpp:145:28: error: the list item must appear in \'reduction\' clause with the \'inscan\' modifier of the parent directive","clang/test/OpenMP/scan_messages.cpp:163:28: error: the list item must appear in \'reduction\' clause with the \'inscan\' modifier of the parent directive"}
}
}
},
},
["err_property_not_found_forward_class"]={
["err_omp_incomplete_type"]={
[d]="err_property_not_found_forward_class",
[j]="err_omp_incomplete_type",
[e]="property %0 cannot be found in forward class object %1",
[b]="expression has incomplete class type %0",
[f]="property A cannot be found in forward class object B",
[c]="expression has incomplete class type A",
[g]=k,
[e]=d,
[h]="property (.*?) cannot be found in forward class object (.*?)",
[f]="expression has incomplete class type (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up","Improve diagnostics when property being looked up\nin a forward @class object. // rdar://8774513\n\nllvm-svn: 121933"},
[h]={"a769e07232d2",1363934075,"OpenMP threadprivate directive parsing and semantic analysis","OpenMP threadprivate directive parsing and semantic analysis\n\nllvm-svn: 177705"},
[i]={{qb,1995,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  if (RequireCompleteType(MemberLoc, OPT->getPointeeType(), diag::err_property_not_found_forward_class, MemberName, BaseRange))"}},
[k]={{m,16397,"ExprResult Sema::PerformOpenMPImplicitIntegerConversion(SourceLocation Loc, Expr *Op) {\n  // ...\n  class IntConvertDiagnoser : public ICEConvertDiagnoser {\n    // ...\n    SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_omp_incomplete_type) << T; }"}}
[l]={
["clang/test/SemaObjC/property-9.m"]={"clang/test/SemaObjC/property-9.m:106:21: error: property \'path\' cannot be found in forward class object \'MDAInstance\'"}
}
},
},
["err_property_not_found_suggest"]={
["err_omp_inscan_reduction_expected"]={
[d]="err_property_not_found_suggest",
[j]={{nil,o,"err_omp_inscan_reduction_expected"}},
[e]="property %0 not found on object of type %1; did you mean %2?",
[b]={{nil,o,"expected \'reduction\' clause with the \'inscan\' modifier"}},
[f]="property A not found on object of type B; did you mean C?",
[c]={{nil,o,"expected \'reduction\' clause with the \'inscan\' modifier"}},
[g]=k,
[e]=d,
[h]="property (.*?) not found on object of type (.*?); did you mean (.*?)\\?",
[f]="expected \'reduction\' clause with the \'inscan\' modifier",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,o,n}},
[j]={"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"},
[h]={I,1576908663,H,F},
[i]={{qb,2124,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  // ...\n  if (TypoCorrection Corrected = CorrectTypo(DeclarationNameInfo(MemberName, MemberLoc), LookupOrdinaryName, nullptr, nullptr, CCC, CTK_ErrorRecovery, IFace, false, OPT)) {\n   // ...\n   if (TypoResult.isIdentifier() && TypoResult.getAsIdentifierInfo() == Member) {\n    // ...\n    } else {\n      diagnoseTypo(Corrected, PDiag(diag::err_property_not_found_suggest) << MemberName << QualType(OPT, 0));"}},
[k]={{m,2820,"/// 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     if (RC->getModifier() != OMPC_REDUCTION_inscan) {\n        S.Diag(RC->getModifier() == OMPC_REDUCTION_unknown ? RC->getBeginLoc() : RC->getModifierLoc(), diag::err_omp_inscan_reduction_expected);"}},
[l]={
[l]={
["clang/test/FixIt/typo.m"]={"clang/test/FixIt/typo.m:54:8: error: property \'hisprop\' not found on object of type \'B *\'; did you mean \'his_prop\'?","clang/test/FixIt/typo.m:55:8: error: property \'herprop\' not found on object of type \'B *\'; did you mean \'her_prop\'?","clang/test/FixIt/typo.m:56:8: error: property \'s_prop\' not found on object of type \'B *\'; did you mean \'sprop\'?","clang/test/FixIt/typo.m:81:5: error: property \'valu\' not found on object of type \'Collide *\'; did you mean \'value\'?"}
["clang/test/OpenMP/parallel_for_reduction_messages.cpp"]={"clang/test/OpenMP/parallel_for_reduction_messages.cpp:362:51: error: expected \'reduction\' clause with the \'inscan\' modifier","clang/test/OpenMP/parallel_for_reduction_messages.cpp:362:78: error: expected \'reduction\' clause with the \'inscan\' modifier"}
}
}
},
},
["err_property_setter_ambiguous_use"]={
["err_omp_instantiation_not_supported"]={
[d]="err_property_setter_ambiguous_use",
[j]={{nil,s,"err_omp_instantiation_not_supported"}},
[e]="synthesized properties %0 and %1 both claim setter %2 - use of this setter will cause unexpected behavior",
[b]={{nil,s,"instantiation of \'%0\' not supported yet"}},
[f]="synthesized properties A and B both claim setter C - use of this setter will cause unexpected behavior",
[c]={{nil,s,"instantiation of \'A\' not supported yet"}},
[g]=k,
[e]=d,
[h]="synthesized properties (.*?) and (.*?) both claim setter (.*?) \\- use of this setter will cause unexpected behavior",
[f]="instantiation of \'(.*?)\' not supported yet",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,s,n}},
[j]={eb,1480718311,cb,fb},
[h]={"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"}
[i]={{"clang/lib/Sema/SemaPseudoObject.cpp",675,"/// Try to find the most accurate setter declaration for the property\n/// reference.\n///\n/// \\return true if a setter was found, in which case Setter\nbool ObjCPropertyOpBuilder::findSetter(bool warn) {\n // ...\n // Do a normal method lookup first.\n  if (ObjCMethodDecl *setter = LookupMethodInReceiverType(S, SetterSelector, RefExpr)) {\n    if (setter->isPropertyAccessor() && warn)\n      if (const ObjCInterfaceDecl *IFace = dyn_cast<ObjCInterfaceDecl>(setter->getDeclContext())) {\n        // ...\n        if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember, prop->getQueryKind()))\n         if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) {\n            S.Diag(RefExpr->getExprLoc(), diag::err_property_setter_ambiguous_use) << prop << prop1 << setter->getSelector();"}},
[l]={
["clang/test/SemaObjC/property-user-setter.m"]={"clang/test/SemaObjC/property-user-setter.m:130:3: error: synthesized properties \'t\' and \'T\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:131:3: error: synthesized properties \'T\' and \'t\' both claim setter \'setT:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:132:3: error: synthesized properties \'Pxyz\' and \'pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior","clang/test/SemaObjC/property-user-setter.m:133:3: error: synthesized properties \'pxyz\' and \'Pxyz\' both claim setter \'setPxyz:\' - use of this setter will cause unexpected behavior"}
}
},
},
["err_property_type"]={
["err_omp_interop_bad_depend_clause"]={
[d]="err_property_type",
[j]={{nil,r,"err_omp_interop_bad_depend_clause"}},
[e]="property cannot have array or function type %0",
[b]={{nil,r,"\'depend\' clause requires the \'targetsync\' interop type"}},
[f]="property cannot have array or function type A",
[c]={{nil,r,"\'depend\' clause requires the \'targetsync\' interop type"}},
[g]=k,
[e]=d,
[h]="property cannot have array or function type (.*?)",
[f]="\'depend\' clause requires the \'targetsync\' interop type",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,r,n}},
[j]={q,1236199783,r,s},
[h]={hb,1590001902,gb,kb},
[i]={{xb,638,"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->isArrayType() || T->isFunctionType()) {\n    Diag(AtLoc, diag::err_property_type) << T;"}},
[k]={{m,17599,"StmtResult Sema::ActOnOpenMPInteropDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  if (DependClause && HasInitClause && !IsTargetSync) {\n    Diag(DependClause->getBeginLoc(), diag::err_omp_interop_bad_depend_clause);"}},
[l]={
[l]={
["clang/test/SemaObjC/rdr-6211479-array-property.m"]={"clang/test/SemaObjC/rdr-6211479-array-property.m:7:1: error: property cannot have array or function type \'T\' (aka \'int[2]\')"}
[wb]={"clang/test/OpenMP/interop_messages.cpp:90:47: error: \'depend\' clause requires the \'targetsync\' interop type"}
}
}
},
},
["err_protected_ivar_access"]={
["err_omp_interop_prefer_type"]={
[d]="err_protected_ivar_access",
[j]={{nil,r,"err_omp_interop_prefer_type"}},
[e]="instance variable %0 is protected",
[b]={{nil,r,"prefer_list item must be a string literal or constant integral expression"}},
[f]="instance variable A is protected",
[c]={{nil,r,"prefer_list item must be a string literal or constant integral expression"}},
[g]=k,
[e]=d,
[h]="instance variable (.*?) is protected",
[f]="prefer_list item must be a string literal or constant integral expression",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,r,n}},
[j]={eb,1480718311,cb,fb},
[h]={hb,1590001902,gb,kb},
[i]={{hb,1449,"/// 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->getAccessControl() != ObjCIvarDecl::Public && IV->getAccessControl() != ObjCIvarDecl::Package) {\n      // ...\n      if (!S.getLangOpts().DebuggerSupport) {\n       if (IV->getAccessControl() == ObjCIvarDecl::Private) {\n        // ...\n       } else if (!IDecl->isSuperClassOf(ClassOfMethodDecl))\n          // ...\n          S.Diag(MemberLoc, diag::err_protected_ivar_access) << IV->getDeclName();"}},
[k]={{m,17711,"OMPClause *Sema::ActOnOpenMPInitClause(Expr *InteropVar, OMPInteropInfo &InteropInfo, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation VarLoc, SourceLocation EndLoc) {\n  // ...\n  // Check prefer_type valuesThese foreign-runtime-id values are either\n // string literals or constant integral expressions.\n for (const Expr *E : InteropInfo.PreferTypes) {\n   // ...\n   Diag(E->getExprLoc(), diag::err_omp_interop_prefer_type);"}},
[l]={
[l]={
["clang/test/SemaObjC/ivar-access-tests.m"]={"clang/test/SemaObjC/ivar-access-tests.m:65:17: error: instance variable \'protected\' is protected","clang/test/SemaObjC/ivar-access-tests.m:68:17: error: instance variable \'protected\' is protected","clang/test/SemaObjC/ivar-access-tests.m:77:15: error: instance variable \'protected\' is protected"}
[wb]={"clang/test/OpenMP/interop_messages.cpp:76:40: error: prefer_list item must be a string literal or constant integral expression","clang/test/OpenMP/interop_messages.cpp:80:40: error: prefer_list item must be a string literal or constant integral expression"}
}
}
},
},
["err_protocol_has_circular_dependency"]={
["err_omp_interop_type_not_found"]={
[d]="err_protocol_has_circular_dependency",
[j]={{nil,s,"err_omp_interop_type_not_found"}},
[e]="protocol has circular dependency",
[b]={{nil,s,"\'omp_interop_t\' must be defined when \'append_args\' clause is used; include <omp.h>"}},
[f]="protocol has circular dependency",
[c]={{nil,s,"\'omp_interop_t\' must be defined when \'append_args\' clause is used; include <omp.h>"}},
[g]=k,
[e]=d,
[h]="protocol has circular dependency",
[f]="\'omp_interop_t\' must be defined when \'append_args\' clause is used; include \\<omp\\.h\\>",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,s,n}},
[j]={M,1237025389,L,N},
[h]={ib,1616787805,lb,jb},
[i]={{bb,1205,"bool Sema::CheckForwardProtocolDeclarationForCircularDependency(IdentifierInfo *PName, SourceLocation &Ploc, SourceLocation PrevLoc, const ObjCList<ObjCProtocolDecl> &PList) {\n  // ...\n  for (ObjCList<ObjCProtocolDecl>::iterator I = PList.begin(), E = PList.end(); I != E; ++I) {\n    if (ObjCProtocolDecl *PDecl = LookupProtocol((*I)->getIdentifier(), Ploc)) {\n      if (PDecl->getIdentifier() == PName) {\n        Diag(Ploc, diag::err_protocol_has_circular_dependency);"}},
[k]={{m,7457,"std::optional<std::pair<FunctionDecl *, Expr *>> Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, Expr *VariantRef, OMPTraitInfo &TI, unsigned NumAppendArgs, SourceRange SR) {\n  // ...\n  if (NumAppendArgs) {\n    // ...\n    if (!TD) {\n      Diag(SR.getBegin(), diag::err_omp_interop_type_not_found) << SR;"}},
[l]={
[l]={
["clang/test/SemaObjC/protocols.m"]={"clang/test/SemaObjC/protocols.m:61:11: error: protocol has circular dependency"}
[zb]={"clang/test/OpenMP/declare_variant_clauses_messages.cpp:12:1: error: \'omp_interop_t\' must be defined when \'append_args\' clause is used; include <omp.h>"}
}
}
},
},
["err_protocol_property_mismatch"]={
["err_omp_interop_var_multiple_actions"]={
[d]={{nil,n,"err_protocol_property_mismatch"}},
[j]={{nil,r,"err_omp_interop_var_multiple_actions"}},
[e]={{nil,n,"property %select{of type %1|with attribute \'%1\'|without attribute \'%1\'|with getter %1|with setter %1}0 was selected for synthesis"}},
[b]={{nil,r,"interop variable %0 used in multiple action clauses"}},
[f]={{nil,n,{"property ",{"of type B","with attribute \'B\'","without attribute \'B\'","with getter B","with setter B"}," was selected for synthesis"}}},
[c]={{nil,r,"interop variable A used in multiple action clauses"}},
[g]=k,
[e]=d,
[h]="property (?:of type (.*?)|with attribute \'(.*?)\'|without attribute \'(.*?)\'|with getter (.*?)|with setter (.*?)) was selected for synthesis",
[f]="interop variable (.*?) used in multiple action clauses",
[b]=a,
[g]=a,
[c]={{nil,n,m}},
[i]={{nil,r,n}},
[j]={"50b2dd336e39",1499943982,"[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous","[ObjC] Pick a \'readwrite\' property when synthesizing ambiguous\nproperty and check for incompatible attributes\n\nThis commit changes the way ambiguous property synthesis (i.e. when synthesizing\na property that\'s declared in multiple protocols) is performed. Previously,\nClang synthesized the first property that was found. This lead to problems when\nthe property was synthesized in a class that conformed to two protocols that\ndeclared that property and a second protocols had a \'readwrite\' declaration -\nthe setter was not synthesized so the class didn\'t really conform to the second\nprotocol and user\'s code would crash at runtime when they would try to set the\nproperty.\n\nThis commit ensures that a first readwrite property is selected. This is a\nsemantic change that changes users code in this manner:\n\n```\n@protocol P @property(readonly) int p; @end\n@protocol P2 @property(readwrite) id p; @end\n@interface I <P2> @end\n@implementation I\n@syntesize p; // Users previously got a warning here, and Clang synthesized\n              // readonly \'int p\' here. Now Clang synthesizes readwrite \'id\' p..\n@end\n```\n\nTo ensure that this change is safe, the warning about incompatible types is\npromoted to an error when this kind of readonly/readwrite ambiguity is detected\nin the @implementation. This will ensure that previous code that had this subtle\nbug and ignored the warning now will fail to compile with an error, and users\nshould not get suprises at runtime once they resolve the error.\n\nThe commit also extends the ambiguity checker, and now it can detect conflicts\namong the different property attributes. An error diagnostic is used for\nconflicting attributes, to ensure that the user won\'t get \"suprises\" at runtime.\n\nProtocolPropertyMap is removed in favour of a a set + vector because the map\'s\norder of iteration is non-deterministic, so it couldn\'t be used to select the\nreadwrite property.\n\nrdar://31579994\n\nDifferential Revision: https://reviews.llvm.org/D35268\n\nllvm-svn: 307903"},
[h]={hb,1590001902,gb,kb},
[i]={{xb,969,"/// SelectPropertyForSynthesisFromProtocols - Finds the most appropriate\n/// property declaration that should be synthesised in all of the inherited\n/// protocols. It also diagnoses properties declared in inherited protocols with\n/// mismatched types or attributes, since any of them can be candidate for\n/// synthesis.\nstatic ObjCPropertyDecl *SelectPropertyForSynthesisFromProtocols(Sema &S, SourceLocation AtLoc, ObjCInterfaceDecl *ClassDecl, ObjCPropertyDecl *Property) {\n  // ...\n  // Diagnose incompability.\n  {\n    // ...\n    auto Diag = S.Diag(Property->getLocation(), Property != OriginalProperty || HasIncompatibleAttributes ? diag::err_protocol_property_mismatch : diag::warn_protocol_property_mismatch);"}},
[k]={{m,17626,"StmtResult Sema::ActOnOpenMPInteropDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  for (OMPClause *C : Clauses) {\n    // ...\n    if (DeclResult.first) {\n      if (!InteropVars.insert(DeclResult.first).second) {\n        Diag(ELoc, diag::err_omp_interop_var_multiple_actions) << DeclResult.first;"}},
[l]={
[l]={
["clang/test/SemaObjC/arc-property-decl-attrs.m"]={"clang/test/SemaObjC/arc-property-decl-attrs.m:130:43: error: property with attribute \'copy\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:143:25: error: property without attribute \'retain (or strong)\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:156:42: error: property without attribute \'atomic\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:169:31: error: property with getter \'prop\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:185:46: error: property with setter \'setp:\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:198:42: error: property of type \'int\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:220:45: error: property of type \'id\' was selected for synthesis","clang/test/SemaObjC/arc-property-decl-attrs.m:264:40: error: property with attribute \'retain (or strong)\' was selected for synthesis"}
[wb]={"clang/test/OpenMP/interop_messages.cpp:93:59: error: interop variable \'InteropVar\' used in multiple action clauses","clang/test/OpenMP/interop_messages.cpp:96:43: error: interop variable \'InteropVar\' used in multiple action clauses","clang/test/OpenMP/interop_messages.cpp:99:51: error: interop variable \'InteropVar\' used in multiple action clauses","clang/test/OpenMP/interop_messages.cpp:102:51: error: interop variable \'InteropVar\' used in multiple action clauses","clang/test/OpenMP/interop_messages.cpp:105:55: error: interop variable \'InteropVar\' used in multiple action clauses","clang/test/OpenMP/interop_messages.cpp:108:47: error: interop variable \'InteropVar\' used in multiple action clauses","clang/test/OpenMP/interop_messages.cpp:141:59: error: interop variable \'InteropVar\' used in multiple action clauses","clang/test/OpenMP/interop_messages.cpp:144:43: error: interop variable \'InteropVar\' used in multiple action clauses","clang/test/OpenMP/interop_messages.cpp:147:51: error: interop variable \'InteropVar\' used in multiple action clauses","clang/test/OpenMP/interop_messages.cpp:150:51: error: interop variable \'InteropVar\' used in multiple action clauses","clang/test/OpenMP/interop_messages.cpp:153:55: error: interop variable \'InteropVar\' used in multiple action clauses","clang/test/OpenMP/interop_messages.cpp:156:47: error: interop variable \'InteropVar\' used in multiple action clauses"}
}
}
},
},
["err_pseudo_dtor_base_not_scalar"]={
["err_omp_interop_variable_expected"]={
[d]="err_pseudo_dtor_base_not_scalar",
[j]={{nil,r,"err_omp_interop_variable_expected"}},
[e]="object expression of non-scalar type %0 cannot be used in a pseudo-destructor expression",
[b]={{nil,r,"expected%select{| non-const}0 variable of type \'omp_interop_t\'"}},
[f]="object expression of non-scalar type A cannot be used in a pseudo-destructor expression",
[c]={{nil,r,{"expected",{a," non-const"}," variable of type \'omp_interop_t\'"}}},
[g]=k,
[e]=d,
[h]="object expression of non\\-scalar type (.*?) cannot be used in a pseudo\\-destructor expression",
[f]="expected(?:| non\\-const) variable of type \'omp_interop_t\'",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,r,n}},
[j]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n  p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"},
[h]={hb,1590001902,gb,kb},
[i]={{Q,7770,"ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, const CXXScopeSpec &SS, TypeSourceInfo *ScopeTypeInfo, SourceLocation CCLoc, SourceLocation TildeLoc, PseudoDestructorTypeStorage Destructed) {\n  // ...\n  if (!ObjectType->isDependentType() && !ObjectType->isScalarType() && !ObjectType->isVectorType()) {\n   if (getLangOpts().MSVCCompat && ObjectType->isVoidType())\n    // ...\n    else {\n      Diag(OpLoc, diag::err_pseudo_dtor_base_not_scalar) << ObjectType << Base->getSourceRange();"}},
[k]={{m,17686,"static bool isValidInteropVariable(Sema &SemaRef, Expr *InteropVarExpr, SourceLocation VarLoc, OpenMPClauseKind Kind) {\n  // ...\n  // OpenMP 5.1 [2.15.1, interop Construct, Restrictions]\n  // The interop-var passed to init or destroy must be non-const.\n if ((Kind == OMPC_init || Kind == OMPC_destroy) && isConstNotMutableType(SemaRef, InteropVarExpr->getType())) {\n    SemaRef.Diag(VarLoc, diag::err_omp_interop_variable_expected) << /*non-const*/ 1;"}},
[l]={
[l]={
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:34:6: error: object expression of non-scalar type \'void\' cannot be used in a pseudo-destructor expression","clang/test/SemaCXX/pseudo-destructors.cpp:195:19: error: object expression of non-scalar type \'void ()\' cannot be used in a pseudo-destructor expression"}
[wb]={"clang/test/OpenMP/interop_messages.cpp:197:50: error: expected variable of type \'omp_interop_t\'","clang/test/OpenMP/interop_messages.cpp:200:52: error: expected variable of type \'omp_interop_t\'"}
}
}
},
},
["err_pseudo_dtor_call_with_args"]={
["err_omp_interop_variable_wrong_type"]={
[d]="err_pseudo_dtor_call_with_args",
[j]={{nil,r,"err_omp_interop_variable_wrong_type"}},
[e]="call to pseudo-destructor cannot have any arguments",
[b]={{nil,r,"interop variable must be of type \'omp_interop_t\'"}},
[f]="call to pseudo-destructor cannot have any arguments",
[c]={{nil,r,"interop variable must be of type \'omp_interop_t\'"}},
[g]=k,
[e]=d,
[h]="call to pseudo\\-destructor cannot have any arguments",
[f]="interop variable must be of type \'omp_interop_t\'",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,r,n}},
[j]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n  p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"},
[h]={hb,1590001902,gb,kb},
[i]={{O,7307,"/// BuildCallExpr - Handle a call to Fn with the specified array of arguments.\n/// This provides the location of the left/right parens and a list of comma\n/// locations.\nExprResult Sema::BuildCallExpr(Scope *Scope, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig, bool IsExecConfig, bool AllowRecovery) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // If this is a pseudo-destructor expression, build the call immediately.\n    if (isa<CXXPseudoDestructorExpr>(Fn)) {\n      if (!ArgExprs.empty()) {\n       // ...\n        Diag(Fn->getBeginLoc(), diag::err_pseudo_dtor_call_with_args) << FixItHint::CreateRemoval(SourceRange(ArgExprs.front()->getBeginLoc(), ArgExprs.back()->getEndLoc()));"}},
[k]={{m,17678,"static bool isValidInteropVariable(Sema &SemaRef, Expr *InteropVarExpr, SourceLocation VarLoc, OpenMPClauseKind Kind) {\n  // ...\n  if (!SemaRef.Context.hasSameType(InteropType, VarType)) {\n   SemaRef.Diag(VarLoc, diag::err_omp_interop_variable_wrong_type);"}},
[l]={
[l]={
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:40:3: error: call to pseudo-destructor cannot have any arguments"}
[wb]={"clang/test/OpenMP/interop_messages.cpp:39:59: error: interop variable must be of type \'omp_interop_t\'","clang/test/OpenMP/interop_messages.cpp:43:27: error: interop variable must be of type \'omp_interop_t\'","clang/test/OpenMP/interop_messages.cpp:46:31: error: interop variable must be of type \'omp_interop_t\'","clang/test/OpenMP/interop_messages.cpp:49:59: error: interop variable must be of type \'omp_interop_t\'","clang/test/OpenMP/interop_messages.cpp:53:27: error: interop variable must be of type \'omp_interop_t\'","clang/test/OpenMP/interop_messages.cpp:56:31: error: interop variable must be of type \'omp_interop_t\'"}
}
}
},
},
["err_pseudo_dtor_destructor_non_type"]={
["err_omp_invalid_dsa"]={
[d]="err_pseudo_dtor_destructor_non_type",
[j]={{nil,o,"err_omp_invalid_dsa"}},
[e]="%0 does not refer to a type name in pseudo-destructor expression; expected the name of type %1",
[b]={{nil,o,"data-sharing attribute \'%0\' in \'%1\' clause requires OpenMP version %2 or above"}},
[f]="A does not refer to a type name in pseudo-destructor expression; expected the name of type B",
[c]={{nil,o,"data-sharing attribute \'A\' in \'B\' clause requires OpenMP version C or above"}},
[g]=k,
[e]=d,
[h]="(.*?) does not refer to a type name in pseudo\\-destructor expression; expected the name of type (.*?)",
[f]="data\\-sharing attribute \'(.*?)\' in \'(.*?)\' clause requires OpenMP version (.*?) or above",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,o,u}},
[j]={"0d5b0a1e5edb",1267046952,"ActOnPseudoDestructorExpr now performs all semantic analysis for","ActOnPseudoDestructorExpr now performs all semantic analysis for\npseudo-destructor expressions, and builds the CXXPseudoDestructorExpr\nnode directly. Currently, this only affects pseudo-destructor\nexpressions when they are parsed, but not after template\ninstantiation. That\'s coming next...\n\nImprove parsing of pseudo-destructor-names. When parsing the\nnested-name-specifier and we hit the sequence of tokens X :: ~, query\nthe actual module to determine whether X is a type-name (in which case\nthe X :: is part of the pseudo-destructor-name but not the\nnested-name-specifier) or not (in which case the X :: is part of the\nnested-name-specifier). \n\nllvm-svn: 97058"},
[h]={"ee05167cc42b",1594102083,"[OpenMP] Allow traits for the OpenMP context selector `isa`","[OpenMP] Allow traits for the OpenMP context selector `isa`\n\nIt was unclear what `isa` was supposed to mean so we did not provide any\ntraits for this context selector. With this patch we will allow *any*\nstring or identifier. We use the target attribute and target info to\ndetermine if the trait matches. In other words, we will check if the\nprovided value is a target feature that is available (at the call site).\n\nFixes PR46338\n\nReviewed By: ABataev\n\nDifferential Revision: https://reviews.llvm.org/D83281"},
[i]={{Q,7920,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n // ...\n if (SecondTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n   // ...\n    if (!T && ((SS.isSet() && !computeDeclContext(SS, false)) || (!SS.isSet() && ObjectType->isDependentType()))) {\n   // ...\n    } else if (!T) {\n     Diag(SecondTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << SecondTypeName.Identifier << ObjectType;"},{Q,7972,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, UnqualifiedId &FirstTypeName, SourceLocation CCLoc, SourceLocation TildeLoc, UnqualifiedId &SecondTypeName) {\n  // ...\n  if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_TemplateId || FirstTypeName.Identifier) {\n    if (FirstTypeName.getKind() == UnqualifiedIdKind::IK_Identifier) {\n      // ...\n      if (!T) {\n       Diag(FirstTypeName.StartLocation, diag::err_pseudo_dtor_destructor_non_type) << FirstTypeName.Identifier << ObjectType;"}},
[k]={{t,3719,"/// Parsing of simple OpenMP clauses like \'default\' or \'proc_bind\'.\n///\n///    default-clause:\n///        \'default\' \'(\' \'none\' | \'shared\' | \'private\' | \'firstprivate\' \')\'\n///\n///    proc_bind-clause:\n///        \'proc_bind\' \'(\' \'master\' | \'close\' | \'spread\' \')\'\n///\n///   bind-clause:\n///        \'bind\' \'(\' \'teams\' | \'parallel\' | \'thread\' \')\'\n///\n///   update-clause:\n///        \'update\' \'(\' \'in\' | \'out\' | \'inout\' | \'mutexinoutset\' |\n///        \'inoutset\' \')\'\n///\nOMPClause *Parser::ParseOpenMPSimpleClause(OpenMPClauseKind Kind, bool ParseOnly) {\n  // ...\n  if (getLangOpts().OpenMP < 51 && Kind == OMPC_default && (static_cast<DefaultKind>(Val->Type) == OMP_DEFAULT_private || static_cast<DefaultKind>(Val->Type) == OMP_DEFAULT_firstprivate)) {\n   Diag(Val->LOpen, diag::err_omp_invalid_dsa) << getOpenMPClauseName(static_cast<DefaultKind>(Val->Type) == OMP_DEFAULT_private ? OMPC_private : OMPC_firstprivate) << getOpenMPClauseName(OMPC_default) << \"5.1\";"}},
[l]={
[l]={
["clang/test/Frontend/crash-diagnostic-renderer.cpp"]={"clang/test/Frontend/crash-diagnostic-renderer.cpp:13:23: error: \'b\' does not refer to a type name in pseudo-destructor expression; expected the name of type \'volatile long\'"}
["clang/test/OpenMP/target_teams_distribute_default_messages.cpp"]={"clang/test/OpenMP/target_teams_distribute_default_messages.cpp:34:37: error: data-sharing attribute \'firstprivate\' in \'default\' clause requires OpenMP version 5.1 or above","clang/test/OpenMP/target_teams_distribute_default_messages.cpp:39:37: error: data-sharing attribute \'private\' in \'default\' clause requires OpenMP version 5.1 or above"}
}
}
},
},
["err_pseudo_dtor_type_mismatch"]={
["err_omp_invalid_map_this_expr"]={
[d]="err_pseudo_dtor_type_mismatch",
[j]={{nil,y,"err_omp_invalid_map_this_expr"}},
[e]="the type of object expression %diff{($) does not match the type being destroyed ($)|does not match the type being destroyed}0,1 in pseudo-destructor expression",
[b]={{nil,y,"invalid \'this\' expression on \'map\' clause"}},
[f]={{nil,nil,{"the type of object expression ",{"(A) does not match the type being destroyed (B)","does not match the type being destroyed"}," in pseudo-destructor expression"}}},
[c]={{nil,y,"invalid \'this\' expression on \'map\' clause"}},
[g]=k,
[e]=d,
[h]="the type of object expression (?:\\((.*?)\\) does not match the type being destroyed \\((.*?)\\)|does not match the type being destroyed) in pseudo\\-destructor expression",
[f]="invalid \'this\' expression on \'map\' clause",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,y,n}},
[j]={"ad8a336b4037",1252085800,"Implement AST, semantics, and CodeGen for C++ pseudo-destructor","Implement AST, semantics, and CodeGen for C++ pseudo-destructor\nexpressions, e.g.,\n\n  p->~T()\n\nwhen p is a pointer to a scalar type. \n\nWe don\'t currently diagnose errors when pseudo-destructor expressions\nare used in any way other than by forming a call.\n\nllvm-svn: 81009"},
[h]={"e13b1e3299c1",1546457328,"[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: ...","[OpenMP] Added support for explicit mapping of classes using \'this\' pointer. Differential revision: https://reviews.llvm.org/D55982\n\nllvm-svn: 350252"},
[i]={{Q,7805,"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        // ...\n        } else {\n          Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch) << ObjectType << DestructedType << Base->getSourceRange() << DestructedTypeInfo->getTypeLoc().getSourceRange();"},{Q,7849,"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 //   [...] Furthermore, the two type-names in a pseudo-destructor-name of the\n //  form\n  //\n  //    ::[opt] nested-name-specifier[opt] type-name :: ~ type-name\n  //\n  //  shall designate the same scalar type.\n  if (ScopeTypeInfo) {\n   // ...\n   if (!ScopeType->isDependentType() && !ObjectType->isDependentType() && !Context.hasSameUnqualifiedType(ScopeType, ObjectType)) {\n      Diag(ScopeTypeInfo->getTypeLoc().getSourceRange().getBegin(), diag::err_pseudo_dtor_type_mismatch) << ObjectType << ScopeType << Base->getSourceRange() << ScopeTypeInfo->getTypeLoc().getSourceRange();"}},
[k]={{m,21238,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  // ...\n  bool VisitArraySubscriptExpr(ArraySubscriptExpr *AE) {\n   // ...\n   if (const auto *TE = dyn_cast<CXXThisExpr>(E->IgnoreParenCasts())) {\n     // ...\n     if (!AE->getIdx()->isValueDependent() && AE->getIdx()->EvaluateAsInt(Result, SemaRef.getASTContext()) && !Result.Val.getInt().isZero()) {\n       SemaRef.Diag(AE->getIdx()->getExprLoc(), diag::err_omp_invalid_map_this_expr);"},{m,21317,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n // ...\n  bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n   // ...\n    if (const auto *TE = dyn_cast<CXXThisExpr>(E)) {\n     // ...\n     if (!OASE->getLength()->isValueDependent() && OASE->getLength()->EvaluateAsInt(ResultR, SemaRef.getASTContext()) && !ResultR.Val.getInt().isOne()) {\n        SemaRef.Diag(OASE->getLength()->getExprLoc(), diag::err_omp_invalid_map_this_expr);"},{m,21326,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n  // ...\n  bool VisitOMPArraySectionExpr(OMPArraySectionExpr *OASE) {\n   // ...\n   if (const auto *TE = dyn_cast<CXXThisExpr>(E)) {\n     // ...\n     if (OASE->getLowerBound() && !OASE->getLowerBound()->isValueDependent() && OASE->getLowerBound()->EvaluateAsInt(ResultL, SemaRef.getASTContext()) && !ResultL.Val.getInt().isZero()) {\n        SemaRef.Diag(OASE->getLowerBound()->getExprLoc(), diag::err_omp_invalid_map_this_expr);"}},
[l]={
[l]={
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:32:7: error: the type of object expression (\'int\') does not match the type being destroyed (\'Bar\' (aka \'Foo\')) in pseudo-destructor expression","clang/test/SemaCXX/pseudo-destructors.cpp:51:16: error: the type of object expression (\'int\') does not match the type being destroyed (\'Double\' (aka \'double\')) in pseudo-destructor expression"}
["clang/test/OpenMP/target_messages.cpp"]={"clang/test/OpenMP/target_messages.cpp:51:34: error: invalid \'this\' expression on \'map\' clause","clang/test/OpenMP/target_messages.cpp:53:33: error: invalid \'this\' expression on \'map\' clause","clang/test/OpenMP/target_messages.cpp:55:33: error: invalid \'this\' expression on \'map\' clause"}
}
}
},
},
["err_pure_friend"]={
["err_omp_invalid_map_type_for_directive"]={
[d]="err_pure_friend",
[j]="err_omp_invalid_map_type_for_directive",
[e]="friend declaration cannot have a pure-specifier",
[b]="%select{map type \'%1\' is not allowed|map type must be specified}0 for \'#pragma omp %2\'",
[f]="friend declaration cannot have a pure-specifier",
[c]={{nil,nil,{{"map type \'B\' is not allowed","map type must be specified"}," for \'#pragma omp C\'"}}},
[g]=k,
[e]=d,
[h]="friend declaration cannot have a pure\\-specifier",
[f]="(?:map type \'(.*?)\' is not allowed|map type must be specified) for \'\\#pragma omp (.*?)\'",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"9ba0fec83e7f",1435627736,"Rework parsing of pure-specifiers. Perform the grammar matching and","Rework parsing of pure-specifiers. Perform the grammar matching and\ndisambiguation in the parser rather than trying to do it in Sema.\n\nllvm-svn: 241032"},
[h]={"df67fc468eb3",1453230956,"[OpenMP] Parsing + sema for \"target enter data\" directive.","[OpenMP] Parsing + sema for \"target enter data\" directive.\n\nPatch by Arpith Jacob. Thanks!\n\nllvm-svn: 258165"},
[i]={{w,18148,"void Sema::ActOnPureSpecifier(Decl *D, SourceLocation ZeroLoc) {\n  if (D->getFriendObjectKind())\n    Diag(D->getLocation(), diag::err_pure_friend);"}},
[k]={{m,22048,"// 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      if (DKind == OMPD_target_enter_data && !(MapType == OMPC_MAP_to || MapType == OMPC_MAP_alloc || SemaRef.getLangOpts().OpenMP >= 52)) {\n        SemaRef.Diag(StartLoc, diag::err_omp_invalid_map_type_for_directive) << (IsMapTypeImplicit ? 1 : 0) << getOpenMPSimpleClauseTypeName(OMPC_map, MapType) << getOpenMPDirectiveName(DKind);"},{m,22063,"// 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      // target exit_data\n      // OpenMP [2.10.3, Restrictions, p. 102]\n      // A map-type must be specified in all map clauses and must be either\n      // from, release, or delete. Starting with OpenMP 5.2 the default map\n      // type is `from` if no map type is present.\n      if (DKind == OMPD_target_exit_data && !(MapType == OMPC_MAP_from || MapType == OMPC_MAP_release || MapType == OMPC_MAP_delete || SemaRef.getLangOpts().OpenMP >= 52)) {\n        SemaRef.Diag(StartLoc, diag::err_omp_invalid_map_type_for_directive) << (IsMapTypeImplicit ? 1 : 0) << getOpenMPSimpleClauseTypeName(OMPC_map, MapType) << getOpenMPDirectiveName(DKind);"},{m,22093,"// 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      // target, target data\n      // OpenMP 5.0 [2.12.2, Restrictions, p. 163]\n      // OpenMP 5.0 [2.12.5, Restrictions, p. 174]\n      // A map-type in a map clause must be to, from, tofrom or alloc\n      if ((DKind == OMPD_target_data || isOpenMPTargetExecutionDirective(DKind)) && !(MapType == OMPC_MAP_to || MapType == OMPC_MAP_from || MapType == OMPC_MAP_tofrom || MapType == OMPC_MAP_alloc)) {\n        SemaRef.Diag(StartLoc, diag::err_omp_invalid_map_type_for_directive) << (IsMapTypeImplicit ? 1 : 0) << getOpenMPSimpleClauseTypeName(OMPC_map, MapType) << getOpenMPDirectiveName(DKind);"}},
[l]={
[l]={
["clang/test/SemaCXX/virtuals.cpp"]={"clang/test/SemaCXX/virtuals.cpp:70:28: error: friend declaration cannot have a pure-specifier","clang/test/SemaCXX/virtuals.cpp:73:19: error: friend declaration cannot have a pure-specifier"}
["clang/test/OpenMP/target_data_messages.c"]={"clang/test/OpenMP/target_data_messages.c:40:27: error: map type \'delete\' is not allowed for \'#pragma omp target data\'","clang/test/OpenMP/target_data_messages.c:44:27: error: map type \'release\' is not allowed for \'#pragma omp target data\'"}
}
}
},
},
["err_qualified_catch_declarator"]={
["err_omp_invalid_map_type_modifier_for_directive"]={
[d]="err_qualified_catch_declarator",
[j]={{nil,s,"err_omp_invalid_map_type_modifier_for_directive"}},
[e]="exception declarator cannot be qualified",
[b]={{nil,s,"map type modifier \'%0\' is not allowed for \'#pragma omp %1\'"}},
[f]="exception declarator cannot be qualified",
[c]={{nil,s,"map type modifier \'A\' is not allowed for \'#pragma omp B\'"}},
[g]=k,
[e]=d,
[h]="exception declarator cannot be qualified",
[f]="map type modifier \'(.*?)\' is not allowed for \'\\#pragma omp (.*?)\'",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,s,n}},
[j]={M,1237025389,L,N},
[h]={"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"},
[i]={{w,16772,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (D.getCXXScopeSpec().isSet() && !Invalid) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_catch_declarator) << D.getCXXScopeSpec().getRange();"}}
[k]={{m,22078,"// 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     // The \'ompx_hold\' modifier is specifically intended to be used on a\n     // \'target\' or \'target data\' directive to prevent data from being unmapped\n     // during the associated statement. It is not permitted on a \'target\n     // enter data\' or \'target exit data\' directive, which have no associated\n      // statement.\n      if ((DKind == OMPD_target_enter_data || DKind == OMPD_target_exit_data) && HasHoldModifier) {\n        SemaRef.Diag(StartLoc, diag::err_omp_invalid_map_type_modifier_for_directive) << getOpenMPSimpleClauseTypeName(OMPC_map, OMPC_MAP_MODIFIER_ompx_hold) << getOpenMPDirectiveName(DKind);"}},
},
["err_qualified_friend_def"]={
[d]="err_qualified_friend_def",
[e]="friend function definition cannot be qualified with \'%0\'",
[f]="friend function definition cannot be qualified with \'A\'",
[g]=k,
[h]="friend function definition cannot be qualified with \'(.*?)\'",
[b]=a,
[c]=m,
[j]={"16e65616d64b",1318209119,"Implement the restrictions in C++ [class.friend]p6, which disallow","Implement the restrictions in C++ [class.friend]p6, which disallow\ndefining a friend function with a qualified name or in a local\nclass. Fixes PR9853. \n\nllvm-svn: 141524"},
[i]={{w,17657,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n // ...\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n // ...\n  } else if (SS.isInvalid() || !SS.isSet()) {\n // ...\n } else if (!SS.getScopeRep()->isDependent()) {\n   // ...\n   if (D.isFunctionDefinition()) {\n     // ...\n      SemaDiagnosticBuilder DB = Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def);"},{w,17676,"NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParams) {\n  // ...\n  if ((SS.isInvalid() || !SS.isSet()) && (FunctionContainingLocalClass = cast<CXXRecordDecl>(CurContext)->isLocalClass())) {\n // ...\n } else if (SS.isInvalid() || !SS.isSet()) {\n // ...\n } else if (!SS.getScopeRep()->isDependent()) {\n // ...\n  } else {\n   if (D.isFunctionDefinition()) {\n      // ...\n      Diag(SS.getRange().getBegin(), diag::err_qualified_friend_def) << SS.getScopeRep();"}},
[l]={
[l]={
["clang/test/CXX/class.access/class.friend/p6.cpp"]={"clang/test/CXX/class.access/class.friend/p6.cpp:10:15: error: friend function definition cannot be qualified with \'::\'","clang/test/CXX/class.access/class.friend/p6.cpp:11:15: error: friend function definition cannot be qualified with \'X::\'","clang/test/CXX/class.access/class.friend/p6.cpp:15:15: error: friend function definition cannot be qualified with \'T::\'"}
["clang/test/OpenMP/target_exit_data_map_messages.c"]={"clang/test/OpenMP/target_exit_data_map_messages.c:29:32: error: map type modifier \'ompx_hold\' is not allowed for \'#pragma omp target exit data\'","clang/test/OpenMP/target_exit_data_map_messages.c:32:32: error: map type modifier \'ompx_hold\' is not allowed for \'#pragma omp target exit data\'","clang/test/OpenMP/target_exit_data_map_messages.c:35:32: error: map type modifier \'ompx_hold\' is not allowed for \'#pragma omp target exit data\'"}
}
}
},
},
["err_qualified_friend_no_match"]={
["err_omp_invalid_mapper"]={
[d]={{nil,u,"err_qualified_friend_no_match"}},
[j]={{nil,v,"err_omp_invalid_mapper"}},
[e]={{nil,u,"friend declaration of %0 does not match any declaration in %1"}},
[b]={{nil,v,"cannot find a valid user-defined mapper for type %0 with name %1"}},
[f]={{nil,u,"friend declaration of A does not match any declaration in B"}},
[c]={{nil,v,"cannot find a valid user-defined mapper for type A with name B"}},
[g]=k,
[e]=d,
[h]="friend declaration of (.*?) does not match any declaration in (.*?)",
[f]="cannot find a valid user\\-defined mapper for type (.*?) with name (.*?)",
[b]=a,
[g]=a,
[c]={{nil,u,m}},
[i]={{nil,v,n}},
[j]={"8ce732b46f55",1546840846,"DR674, PR38883, PR40238: Qualified friend lookup should look for a","DR674, PR38883, PR40238: Qualified friend lookup should look for a\ntemplate specialization if there is no matching non-template function.\n\nThis exposed a couple of related bugs:\n - we would sometimes substitute into a friend template instead of a\n  suitable non-friend declaration; this would now crash because we\'d\n  decide the specialization of the friend is a redeclaration of itself\n - ADL failed to properly handle the case where an invisible local\n  extern declaration redeclares an invisible friend\n\nBoth are fixed herein: in particular, we now never make invisible\nfriends or local extern declarations visible to name lookup unless\nthey are the only declaration of the entity. (We already mostly did\nthis for local extern declarations.)\n\nllvm-svn: 350505"},
[h]={"4304e9d14399",1550594300,"[OpenMP 5.0] Parsing/sema support for map clause with mapper modifier.","[OpenMP 5.0] Parsing/sema support for map clause with mapper modifier.\n\nThis patch implements the parsing and sema support for OpenMP map\nclauses with potential user-defined mapper attached. User defined mapper\nis a new feature in OpenMP 5.0. A map clause can have an explicit or\nimplicit associated mapper, which instructs the compiler to generate\nextra data mapping. An example is shown below:\n\n   struct S { int len; int *d; };\n    #pragma omp declare mapper(id: struct S s) map(s, s.d[0:s.len])\n   struct S ss;\n   #pragma omp target map(mapper(id) tofrom: ss) // use the mapper with name \'id\' to map ss\n\nContributed-by: Lingda Li <lildmh@gmail.com>\n\nDifferential Revision: https://reviews.llvm.org/D58074\n\nllvm-svn: 354347"},
[i]={{D,8957,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\// ...\n unsigned DiagMsg = IsLocalFriend ? diag::err_no_matching_local_friend : NewFD->getFriendObjectKind() ? diag::err_qualified_friend_no_match : diag::err_member_decl_does_not_match;"},{W,9482,"/// Perform semantic analysis for the given function template\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit function template specialization. On successful completion,\n/// the function declaration \\p FD will become a function template\n/// specialization.\n///\n/// \\param FD the function declaration, which will be updated to become a\n/// function template specialization.\n///\n/// \\param ExplicitTemplateArgs the explicitly-provided template arguments,\n/// if any. Note that this may be valid info even when 0 arguments are\n/// explicitly provided as in, e.g., \\c void sort<>(char*, char*);\n/// as it anyway contains info on the angle brackets locations.\n///\n/// \\param Previous the set of declarations that may be specialized by\n/// this function specialization.\n///\n/// \\param QualifiedFriend whether this is a lookup for a qualified friend\n/// declaration with no explicit template argument list that might be\n/// befriending a function template specialization.\nbool Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, LookupResult &Previous, bool QualifiedFriend) {\n  // ...\n  // For a qualified friend declaration (with no explicit marker to indicate\n  // that a template specialization was intended), note all (template and\n  // non-template) candidates.\n  if (QualifiedFriend && Candidates.empty()) {\n    Diag(FD->getLocation(), diag::err_qualified_friend_no_match) << FD->getDeclName() << FDLookupContext;"}}
[k]={{m,21799,"// Look up the user-defined mapper given the mapper name and mapped type, and\n// build a reference to it.\nstatic ExprResult buildUserDefinedMapperRef(Sema &SemaRef, Scope *S, CXXScopeSpec &MapperIdScopeSpec, const DeclarationNameInfo &MapperId, QualType Type, Expr *UnresolvedMapper) {\n  // ...\n  // Report error if a mapper is specified, but cannot be found.\n  if (MapperIdScopeSpec.isSet() || MapperId.getAsString() != \"default\") {\n   SemaRef.Diag(Loc, diag::err_omp_invalid_mapper) << Type << MapperId.getName();"}},
},
["err_qualified_function_typeid"]={
[d]={{nil,o,"err_qualified_function_typeid"}},
[e]={{nil,o,"type operand %0 of \'typeid\' cannot have \'%1\' qualifier"}},
[f]={{nil,o,"type operand A of \'typeid\' cannot have \'B\' qualifier"}},
[g]=k,
[h]="type operand (.*?) of \'typeid\' cannot have \'(.*?)\' qualifier",
[b]=a,
[c]={{nil,o,m}},
[j]={"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"},
[i]={{ob,2145,"bool Sema::CheckQualifiedFunctionForTypeId(QualType T, SourceLocation Loc) {\n // ...\n  Diag(Loc, diag::err_qualified_function_typeid) << T << getFunctionQualifiersAsString(FPT);"}},
[l]={
[l]={
["clang/test/SemaTemplate/instantiate-expr-4.cpp"]={"clang/test/SemaTemplate/instantiate-expr-4.cpp:198:12: error: type operand \'void () const\' of \'typeid\' cannot have \'const\' qualifier","clang/test/SemaTemplate/instantiate-expr-4.cpp:198:12: error: type operand \'void () &\' of \'typeid\' cannot have \'&\' qualifier"}
[vb]={"clang/test/OpenMP/declare_mapper_messages.cpp:75:31: error: cannot find a valid user-defined mapper for type \'vec\' with name \'ab\'","clang/test/OpenMP/declare_mapper_messages.cpp:83:35: error: cannot find a valid user-defined mapper for type \'vec\' with name \'aa\'","clang/test/OpenMP/declare_mapper_messages.cpp:85:35: error: cannot find a valid user-defined mapper for type \'vec\' with name \'aa\'","clang/test/OpenMP/declare_mapper_messages.cpp:99:41: error: cannot find a valid user-defined mapper for type \'vec\' with name \'aa\'","clang/test/OpenMP/declare_mapper_messages.cpp:100:37: error: cannot find a valid user-defined mapper for type \'vec\' with name \'ab\'","clang/test/OpenMP/declare_mapper_messages.cpp:101:37: error: cannot find a valid user-defined mapper for type \'vec\' with name \'ab\'","clang/test/OpenMP/declare_mapper_messages.cpp:113:43: error: cannot find a valid user-defined mapper for type \'vec\' with name \'aa\'","clang/test/OpenMP/declare_mapper_messages.cpp:114:39: error: cannot find a valid user-defined mapper for type \'vec\' with name \'ab\'","clang/test/OpenMP/declare_mapper_messages.cpp:115:39: error: cannot find a valid user-defined mapper for type \'vec\' with name \'ab\'"}
}
}
},
},
["err_qualified_member_nonclass"]={
["err_omp_invalid_scope"]={
[d]="err_qualified_member_nonclass",
[j]={{nil,y,"err_omp_invalid_scope"}},
[e]="qualified member access refers to a member in %0",
[b]={{nil,y,"\'#pragma omp %0\' directive must appear only in file scope"}},
[f]="qualified member access refers to a member in A",
[c]={{nil,y,"\'#pragma omp A\' directive must appear only in file scope"}},
[g]=k,
[e]=d,
[h]="qualified member access refers to a member in (.*?)",
[f]="\'\\#pragma omp (.*?)\' directive must appear only in file scope",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,y,n}},
[j]={"0b3d95ae64a5",1255819074,"Fix a crash with qualified member access into a non-type, from Sean Hunt!","Fix a crash with qualified member access into a non-type, from Sean Hunt!\n\nllvm-svn: 84370"},
[h]={"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"},
[i]={{hb,683,"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 (!isa<TypeDecl>(DC)) {\n     SemaRef.Diag(R.getNameLoc(), diag::err_qualified_member_nonclass) << DC << SS.getRange();"}},
[k]={{m,3459,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPRequiresDirective(SourceLocation Loc, ArrayRef<OMPClause *> ClauseList) {\n  // ...\n  if (!CurContext->isFileContext()) {\n   Diag(Loc, diag::err_omp_invalid_scope) << \"requires\";"}},
[l]={
[l]={
["clang/test/SemaCXX/member-expr.cpp"]={"clang/test/SemaCXX/member-expr.cpp:43:9: error: qualified member access refers to a member in the global namespace","clang/test/SemaCXX/member-expr.cpp:44:10: error: qualified member access refers to a member in namespace \'C\'"}
["clang/test/OpenMP/requires_messages.cpp"]={"clang/test/OpenMP/requires_messages.cpp:69:15: error: \'#pragma omp requires\' directive must appear only in file scope"}
}
}
},
},
["err_qualified_member_of_unrelated"]={
["err_omp_invalid_target_decl"]={
[d]="err_qualified_member_of_unrelated",
[j]="err_omp_invalid_target_decl",
[e]="%q0 is not a member of class %1",
[b]="%0 used in declare target directive is not a variable or a function name",
[f]="A is not a member of class B",
[c]="A used in declare target directive is not a variable or a function name",
[g]=k,
[e]=d,
[h]="(.*?) is not a member of class (.*?)",
[f]="(.*?) used in declare target directive is not a variable or a function name",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"1e67dd6b2f6a",1272332618,"Improve the diagnostic you get when making a qualified member access","Improve the diagnostic you get when making a qualified member access\nwith a qualifier referencing a different type.\n\nllvm-svn: 102409"},
[h]={"d69b505e3c67",1462805953,"[OpenMP] Parse+Sema for \'#pragma omp declare target\' syntax version 4.5","[OpenMP] Parse+Sema for \'#pragma omp declare target\' syntax version 4.5\n\nSupport OpenMP version 4.5 syntax for #pragma omp declare target.\n\nSyntax:\n  #pragma omp declare target (extended-list) new-line\nor\n  #pragma omp declare target clause[ [,] clause ... ] new-line\n\nWhere clause is one of the following:\n  to(extended-list)\n  link(list)\n\nDifferential Revision: http://reviews.llvm.org/D20011\n\nllvm-svn: 268925"},
[i]={{hb,540,"/// We know that the given qualified member reference points only to\n/// declarations which do not belong to the static type of the base\n/// expression.  Diagnose the problem.\nstatic void DiagnoseQualifiedMemberReference(Sema &SemaRef, Expr *BaseExpr, QualType BaseType, const CXXScopeSpec &SS, NamedDecl *rep, const DeclarationNameInfo &nameInfo) {\n  // ...\n  SemaRef.Diag(nameInfo.getLoc(), diag::err_qualified_member_of_unrelated) << SS.getRange() << rep << BaseType;"}},
[k]={{m,23044,"NamedDecl *Sema::lookupOpenMPDeclareTargetName(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id) {\n  // ...\n  if (!isa<VarDecl>(ND) && !isa<FunctionDecl>(ND) && !isa<FunctionTemplateDecl>(ND)) {\n    Diag(Id.getLoc(), diag::err_omp_invalid_target_decl) << Id.getName();"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.general/p8-0x.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.general/p8-0x.cpp:33:34: error: \'PR10127::outer::middle::mfunc\' is not a member of class \'decltype(outer::middle::inner())\' (aka \'PR10127::outer::middle::inner\')"}
[U]={"clang/test/OpenMP/declare_target_messages.cpp:199:33: error: \'S\' used in declare target directive is not a variable or a function name"}
}
}
},
},
["err_qualified_objc_access"]={
["err_omp_invariant_dependency"]={
[d]="err_qualified_objc_access",
[j]={{nil,r,"err_omp_invariant_dependency"}},
[e]="%select{property|instance variable}0 access cannot be qualified with \'%1\'",
[b]={{nil,r,"expected loop invariant expression"}},
[f]={{nil,nil,{{"property","instance variable"}," access cannot be qualified with \'B\'"}}},
[c]={{nil,r,"expected loop invariant expression"}},
[g]=k,
[e]=d,
[h]="(?:property|instance variable) access cannot be qualified with \'(.*?)\'",
[f]="expected loop invariant expression",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,r,n}},
[j]={"12340e5b1868",1318202569,"Diagnose attempts to qualify the name of an instance variable or","Diagnose attempts to qualify the name of an instance variable or\nproperty in an Objective-C++ member access expression. Fixes PR9759.\n\nllvm-svn: 141522"},
[h]={hb,1590001902,gb,kb},
[i]={{hb,1331,"/// 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    if (!SS.isEmpty() && !SS.isInvalid()) {\n      S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 1 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"},{hb,1494,"/// 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  if (!IsArrow && (OPT = BaseType->getAs<ObjCObjectPointerType>())) {\n    if (!SS.isEmpty() && !SS.isInvalid()) {\n      S.Diag(SS.getRange().getBegin(), diag::err_qualified_objc_access) << 0 << SS.getScopeRep() << FixItHint::CreateRemoval(SS.getRange());"}},
[k]={{m,8078,"/// 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    if (Data.first && !SupportsNonRectangular) {\n      SemaRef.Diag(E->getExprLoc(), diag::err_omp_invariant_dependency);"}},
[l]={
[l]={
["clang/test/SemaObjCXX/propert-dot-error.mm"]={"clang/test/SemaObjCXX/propert-dot-error.mm:65:5: error: property access cannot be qualified with \'Forward::\'","clang/test/SemaObjCXX/propert-dot-error.mm:66:6: error: instance variable access cannot be qualified with \'Forward::\'"}
["clang/test/OpenMP/tile_messages.cpp"]={"clang/test/OpenMP/tile_messages.cpp:95:18: error: expected loop invariant expression","clang/test/OpenMP/tile_messages.cpp:101:25: error: expected loop invariant expression","clang/test/OpenMP/tile_messages.cpp:107:25: error: expected loop invariant expression"}
}
}
},
},
["err_qualified_objc_catch_parm"]={
["err_omp_invariant_or_linear_dependency"]={
[d]="err_qualified_objc_catch_parm",
[j]={{nil,v,"err_omp_invariant_or_linear_dependency"}},
[e]="@catch parameter declarator cannot be qualified",
[b]={{nil,v,"expected loop invariant expression or \'<invariant1> * %0 + <invariant2>\' kind of expression"}},
[f]="@catch parameter declarator cannot be qualified",
[c]={{nil,v,"expected loop invariant expression or \'<invariant1> * A + <invariant2>\' kind of expression"}},
[g]=k,
[e]=d,
[h]="@catch parameter declarator cannot be qualified",
[f]="expected loop invariant expression or \'\\<invariant1\\> \\* (.*?) \\+ \\<invariant2\\>\' kind of expression",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,v,n}},
[j]={"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"},
[h]={"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"},
[i]={{bb,5226,"Decl *Sema::ActOnObjCExceptionDecl(Scope *S, Declarator &D) {\n  // ...\n  // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n    Diag(D.getIdentifierLoc(), diag::err_qualified_objc_catch_parm) << D.getCXXScopeSpec().getRange();"}}
[k]={{m,8091,"/// 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   if (Data.first && (DepDecl || (PrevDepDecl && getCanonicalDecl(VD) != getCanonicalDecl(PrevDepDecl)))) {\n     // ...\n      SemaRef.Diag(E->getExprLoc(), diag::err_omp_invariant_or_linear_dependency) << OS.str();"}},
},
["err_qualified_param_declarator"]={
[d]="err_qualified_param_declarator",
[e]="parameter declarator cannot be qualified",
[f]="parameter declarator cannot be qualified",
[g]=k,
[h]="parameter declarator cannot be qualified",
[b]=a,
[c]=m,
[j]={M,1237025389,L,N},
[i]={{D,14694,"/// Common checks for a parameter-declaration that should apply to both function\n/// parameters and non-type template parameters.\nvoid Sema::CheckFunctionOrTemplateParamDeclarator(Scope *S, Declarator &D) {\n  // ...\n  // Parameter declarators cannot be qualified (C++ [dcl.meaning]p1).\n if (D.getCXXScopeSpec().isSet()) {\n   Diag(D.getIdentifierLoc(), diag::err_qualified_param_declarator) << D.getCXXScopeSpec().getRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:73:17: error: parameter declarator cannot be qualified"}
["clang/test/OpenMP/for_loop_messages.cpp"]={"clang/test/OpenMP/for_loop_messages.cpp:301:41: error: expected loop invariant expression or \'<invariant1> * ii + <invariant2>\' kind of expression","clang/test/OpenMP/for_loop_messages.cpp:308:38: error: expected loop invariant expression or \'<invariant1> * ii + <invariant2>\' kind of expression","clang/test/OpenMP/for_loop_messages.cpp:652:43: error: expected loop invariant expression or \'<invariant1> * TC::ii + <invariant2>\' kind of expression","clang/test/OpenMP/for_loop_messages.cpp:662:43: error: expected loop invariant expression or \'<invariant1> * TC::ii + <invariant2>\' kind of expression","clang/test/OpenMP/for_loop_messages.cpp:663:38: error: expected loop invariant expression or \'<invariant1> * TC::ii + <invariant2>\' kind of expression","clang/test/OpenMP/for_loop_messages.cpp:652:43: error: expected loop invariant expression or \'<invariant1> * ii + <invariant2>\' kind of expression","clang/test/OpenMP/for_loop_messages.cpp:662:43: error: expected loop invariant expression or \'<invariant1> * ii + <invariant2>\' kind of expression","clang/test/OpenMP/for_loop_messages.cpp:663:38: error: expected loop invariant expression or \'<invariant1> * ii + <invariant2>\' kind of expression","clang/test/OpenMP/for_loop_messages.cpp:652:43: error: expected loop invariant expression or \'<invariant1> * ii + <invariant2>\' kind of expression","clang/test/OpenMP/for_loop_messages.cpp:662:43: error: expected loop invariant expression or \'<invariant1> * ii + <invariant2>\' kind of expression","clang/test/OpenMP/for_loop_messages.cpp:663:38: error: expected loop invariant expression or \'<invariant1> * ii + <invariant2>\' kind of expression"}
}
}
},
},
["err_qualified_typedef_declarator"]={
["err_omp_iterator_not_integral_or_pointer"]={
[d]="err_qualified_typedef_declarator",
[j]={{nil,o,"err_omp_iterator_not_integral_or_pointer"}},
[e]="typedef declarator cannot be qualified",
[b]={{nil,o,"expected integral or pointer type as the iterator-type, not %0"}},
[f]="typedef declarator cannot be qualified",
[c]={{nil,o,"expected integral or pointer type as the iterator-type, not A"}},
[g]=k,
[e]=d,
[h]="typedef declarator cannot be qualified",
[f]="expected integral or pointer type as the iterator\\-type, not (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,o,n}},
[j]={M,1237025389,L,N},
[h]={I,1576908663,H,F},
[i]={{D,6661,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n  // Typedef declarators cannot be qualified (C++ [dcl.meaning]p1).\n  if (D.getCXXScopeSpec().isSet()) {\n   Diag(D.getIdentifierLoc(), diag::err_qualified_typedef_declarator) << D.getCXXScopeSpec().getRange();"}},
[k]={{N,5538,"ExprResult Sema::ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc, SourceLocation LLoc, SourceLocation RLoc, ArrayRef<OMPIteratorData> Data) {\n  // ...\n  for (const OMPIteratorData &D : Data) {\n    // ...\n    if (!IsDeclTyDependent) {\n      if (!DeclTy->isIntegralType(Context) && !DeclTy->isAnyPointerType()) {\n       // ...\n        Diag(StartLoc, diag::err_omp_iterator_not_integral_or_pointer) << DeclTy;"},{N,5564,"ExprResult Sema::ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc, SourceLocation LLoc, SourceLocation RLoc, ArrayRef<OMPIteratorData> Data) {\n  // ...\n  for (const OMPIteratorData &D : Data) {\n    // ...\n    if (!IsDeclTyDependent) {\n      // ...\n      if (DeclTy.isConstant(Context)) {\n        // ...\n        Diag(StartLoc, diag::err_omp_iterator_not_integral_or_pointer) << DeclTy;"}},
[l]={
[l]={
["clang/test/SemaCXX/nested-name-spec.cpp"]={"clang/test/SemaCXX/nested-name-spec.cpp:101:18: error: typedef declarator cannot be qualified"}
[Eb]={"clang/test/OpenMP/task_affinity_messages.cpp:67:38: error: expected integral or pointer type as the iterator-type, not \'vector\'"}
}
}
},
},
["err_range_on_array_parameter"]={
["err_omp_iterator_step_constant_zero"]={
[d]="err_range_on_array_parameter",
[j]={{nil,o,"err_omp_iterator_step_constant_zero"}},
[e]="cannot build range expression with array function parameter %0 since parameter with array type %1 is treated as pointer type %2",
[b]={{nil,o,"iterator step expression %0 evaluates to 0"}},
[f]="cannot build range expression with array function parameter A since parameter with array type B is treated as pointer type C",
[c]={{nil,o,"iterator step expression A evaluates to 0"}},
[g]=k,
[e]=d,
[h]="cannot build range expression with array function parameter (.*?) since parameter with array type (.*?) is treated as pointer type (.*?)",
[f]="iterator step expression (.*?) evaluates to 0",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,o,n}},
[j]={"0825469126d7",1381529764,"Improve the error message for attempting to build a for range loop using a","Improve the error message for attempting to build a for range loop using a\nfunction parameter that has array type.  Such a parameter will be treated as\na pointer type instead, resulting in a missing begin function error is a\nsuggestion to dereference the pointer.  This provides a different,\nmore informative diagnostic as well as point to the parameter declaration.\n\nllvm-svn: 192512"},
[h]={I,1576908663,H,F},
[i]={{Kb,2926,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  // ...\n  if (RangeVarType->isDependentType()) {\n  // ...\n  } else if (!BeginDeclStmt.get()) {\n    // ...\n    if (const ArrayType *UnqAT = RangeType->getAsArrayTypeUnsafe()) {\n   // ...\n    } else {\n      // ...\n      if (Kind == BFRK_Build && RangeStatus == FRS_NoViableFunction && BEFFailure == BEF_begin) {\n        // If the range is being built from an array parameter, emit a\n       // a diagnostic that it is being treated as a pointer.\n       if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Range)) {\n          if (ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n            // ...\n            if (PointerTy->isPointerType() && ArrayTy->isArrayType()) {\n             Diag(Range->getBeginLoc(), diag::err_range_on_array_parameter) << RangeLoc << PVD << ArrayTy << PointerTy;"}},
[k]={{N,5866,"ExprResult Sema::ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc, SourceLocation LLoc, SourceLocation RLoc, ArrayRef<OMPIteratorData> Data) {\n  // ...\n  for (const OMPIteratorData &D : Data) {\n    // ...\n    if (!IsDeclTyDependent && Step && !Step->isTypeDependent()) {\n     // ...\n      // OpenMP 5.0, 2.1.6 Iterators, Restrictions\n      // If the step expression of a range-specification equals zero, the\n     // behavior is unspecified.\n     if (Result && Result->isZero()) {\n       Diag(Step->getExprLoc(), diag::err_omp_iterator_step_constant_zero) << Step << Step->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/for-range-examples.cpp"]={"clang/test/SemaCXX/for-range-examples.cpp:198:19: error: cannot build range expression with array function parameter \'arr\' since parameter with array type \'int[]\' is treated as pointer type \'int *\'","clang/test/SemaCXX/for-range-examples.cpp:209:19: error: cannot build range expression with array function parameter \'arr\' since parameter with array type \'vector[]\' is treated as pointer type \'vector *\'"}
[Eb]={"clang/test/OpenMP/task_affinity_messages.cpp:68:71: error: iterator step expression 0 evaluates to 0"}
}
}
},
},
["err_raw_delim_too_long"]={
["err_omp_iterator_step_not_integral"]={
[d]="err_raw_delim_too_long",
[j]={{nil,o,"err_omp_iterator_step_not_integral"}},
[e]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string",
[b]={{nil,o,"iterator step expression %0 is not the integral expression"}},
[f]="raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string",
[c]={{nil,o,"iterator step expression A is not the integral expression"}},
[g]=k,
[e]=d,
[h]="raw string delimiter longer than 16 characters; use PREFIX\\( \\)PREFIX to delimit raw string",
[f]="iterator step expression (.*?) is not the integral expression",
[b]=a,
[g]=a,
[c]=p,
[i]={{nil,o,n}},
[j]={"54edccafc5e3",1313035575,"Add support for C++0x raw string literals.","Add support for C++0x raw string literals.\n\nllvm-svn: 137298"},
[h]={I,1576908663,H,F},
[i]={{"clang/lib/Lex/Lexer.cpp",2158,"/// LexRawStringLiteral - Lex the remainder of a raw string literal, after\n/// having lexed R\", LR\", u8R\", uR\", or UR\".\nbool Lexer::LexRawStringLiteral(Token &Result, const char *CurPtr, tok::TokenKind Kind) {\n  // ...\n  // If the last character was not a \'(\', then we didn\'t lex a valid delimiter.\n if (CurPtr[PrefixLen] != \'(\') {\n   if (!isLexingRawMode()) {\n      // ...\n      if (PrefixLen == 16) {\n        Diag(PrefixEnd, diag::err_raw_delim_too_long);"}},
[k]={{N,5601,"ExprResult Sema::ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc, SourceLocation LLoc, SourceLocation RLoc, ArrayRef<OMPIteratorData> Data) {\n  // ...\n  for (const OMPIteratorData &D : Data) {\n    // ...\n   if (!IsDeclTyDependent && Step && !Step->isTypeDependent()) {\n     if (!Step->getType()->isIntegralType(Context)) {\n        Diag(Step->getExprLoc(), diag::err_omp_iterator_step_not_integral) << Step << Step->getSourceRange();"}}
[l]={
["clang/test/Lexer/cxx0x_raw_string_delim_length.cpp"]={"clang/test/Lexer/cxx0x_raw_string_delim_length.cpp:7:38: error: raw string delimiter longer than 16 characters; use PREFIX( )PREFIX to delimit raw string"}
}
},
},
["err_readonly_message_assignment"]={
["err_omp_iterator_use"]={
[d]="err_readonly_message_assignment",
[j]={{nil,o,"err_omp_iterator_use"}},
[e]="assigning to \'readonly\' return result of an Objective-C message not allowed",
[b]={{nil,o,"OpenMP iterator is not allowed here"}},
[f]="assigning to \'readonly\' return result of an Objective-C message not allowed",
[c]={{nil,o,"OpenMP iterator is not allowed here"}},
[g]=k,
[e]=d,
[h]="assigning to \'readonly\' return result of an Objective\\-C message not allowed",
[f]="OpenMP iterator is not allowed here",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,o,n}},
[j]={eb,1480718311,cb,fb},
[h]={I,1576908663,H,F},
[i]={{O,14373,"/// 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_InvalidMessageExpression:\n    DiagID = diag::err_readonly_message_assignment;"}},
[k]={{N,1,"/// Check for operands with placeholder types and complain if found.\n/// Returns ExprError() if there was an error and no recovery was possible.\nExprResult Sema::CheckPlaceholderExpr(Expr *E) {\n  // ...\n  case BuiltinType::OMPIterator:\n    return ExprError(Diag(E->getBeginLoc(), diag::err_omp_iterator_use));"}}
[l]={
["clang/test/SemaObjC/assign-rvalue-message.m"]={"clang/test/SemaObjC/assign-rvalue-message.m:23:18: error: assigning to \'readonly\' return result of an Objective-C message not allowed"}
}
},
},
["err_realimag_invalid_type"]={
["err_omp_lambda_capture_in_declare_target_not_to"]={
[d]="err_realimag_invalid_type",
[j]={{nil,p,"err_omp_lambda_capture_in_declare_target_not_to"}},
[e]="invalid type %0 to %1 operator",
[b]={{nil,p,"variable captured in declare target region must appear in a to clause"}},
[f]="invalid type A to B operator",
[c]={{nil,p,"variable captured in declare target region must appear in a to clause"}},
[g]=k,
[e]=d,
[h]="invalid type (.*?) to (.*?) operator",
[f]="variable captured in declare target region must appear in a to clause",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,p,n}},
[j]={M,1237025389,L,N},
[h]={"c4299553f05e",1566323413,"Fix name of the error message, NFC.","Fix name of the error message, NFC.\n\nllvm-svn: 369418"},
[i]={{O,4914,"static QualType CheckRealImagOperand(Sema &S, ExprResult &V, SourceLocation Loc, bool IsReal) {\n  // ...\n  S.Diag(Loc, diag::err_realimag_invalid_type) << V.get()->getType() << (IsReal ? \"__real\" : \"__imag\");"}},
[k]={{m,23125,"static void checkDeclInTargetContext(SourceLocation SL, SourceRange SR, Sema &SemaRef, Decl *D) {\n  // ...\n  if (SemaRef.LangOpts.OpenMP >= 50 && (SemaRef.getCurLambda(/*IgnoreNonLambdaCapturingScope=*/true) || SemaRef.getCurBlock() || SemaRef.getCurCapturedRegion()) && VD->hasGlobalStorage()) {\n    if (!MapTy || (*MapTy != OMPDeclareTargetDeclAttr::MT_To && *MapTy != OMPDeclareTargetDeclAttr::MT_Enter)) {\n      // ...\n      SemaRef.Diag(VD->getLocation(), diag::err_omp_lambda_capture_in_declare_target_not_to);"}},
[l]={
[l]={
["clang/test/SemaCXX/unary-real-imag.cpp"]={"clang/test/SemaCXX/unary-real-imag.cpp:4:9: error: invalid type \'A\' to __real operator","clang/test/SemaCXX/unary-real-imag.cpp:5:9: error: invalid type \'A\' to __imag operator"}
[U]={"clang/test/OpenMP/declare_target_messages.cpp:19:11: error: variable captured in declare target region must appear in a to clause"}
}
}
},
},
["err_record_with_pointers_kernel_param"]={
["err_omp_lastprivate_conditional_non_scalar"]={
[d]="err_record_with_pointers_kernel_param",
[j]={{nil,p,"err_omp_lastprivate_conditional_non_scalar"}},
[e]="%select{struct|union}0 kernel parameters may not contain pointers",
[b]={{nil,p,"expected list item of scalar type in \'lastprivate\' clause with \'conditional\' modifier"}},
[f]={{nil,nil,{{"struct","union"}," kernel parameters may not contain pointers"}}},
[c]={{nil,p,"expected list item of scalar type in \'lastprivate\' clause with \'conditional\' modifier"}},
[g]=k,
[e]=d,
[h]="(?:struct|union) kernel parameters may not contain pointers",
[f]="expected list item of scalar type in \'lastprivate\' clause with \'conditional\' modifier",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,p,n}},
[j]={"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"},
[h]={"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"},
[i]={{D,9578,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  // ...\n  do {\n    // ...\n    for (const auto *FD : RD->fields()) {\n     // ...\n     // OpenCL v1.2 s6.9.p:\n     // Arguments to kernel functions that are declared to be a struct or union\n      // do not allow OpenCL objects to be passed as elements of the struct or\n      // union. This restriction was lifted in OpenCL v2.0 with the introduction\n     // of SVM.\n     if (ParamType == PtrKernelParam || ParamType == PtrPtrKernelParam || ParamType == InvalidAddrSpacePtrKernelParam) {\n       S.Diag(Param->getLocation(), diag::err_record_with_pointers_kernel_param) << PT->isUnionType() << PT;"}},
[k]={{m,18543,"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   // OpenMP 5.0 [2.19.4.5 lastprivate Clause, Restrictions]\n   // A list item that appears in a lastprivate clause with the conditional\n   // modifier must be a scalar variable.\n   if (LPKind == OMPC_LASTPRIVATE_conditional && !Type->isScalarType()) {\n     Diag(ELoc, diag::err_omp_lastprivate_conditional_non_scalar);"}},
[l]={
[l]={
["clang/test/SemaOpenCL/invalid-kernel-parameters.cl"]={"clang/test/SemaOpenCL/invalid-kernel-parameters.cl:98:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:105:39: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:119:43: error: union kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:130:56: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:147:78: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:85: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:207:106: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:213:44: error: struct kernel parameters may not contain pointers","clang/test/SemaOpenCL/invalid-kernel-parameters.cl:219:50: error: struct kernel parameters may not contain pointers"}
["clang/test/OpenMP/sections_lastprivate_messages.cpp"]={"clang/test/OpenMP/sections_lastprivate_messages.cpp:112:52: error: expected list item of scalar type in \'lastprivate\' clause with \'conditional\' modifier"}
}
}
},
},
["err_recursive_default_argument"]={
["err_omp_lastprivate_incomplete_type"]={
[d]="err_recursive_default_argument",
[j]="err_omp_lastprivate_incomplete_type",
[e]="recursive evaluation of default argument",
[b]="a lastprivate variable with incomplete type %0",
[f]="recursive evaluation of default argument",
[c]="a lastprivate variable with incomplete type A",
[g]=k,
[e]=d,
[h]="recursive evaluation of default argument",
[f]="a lastprivate variable with incomplete type (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"b82a9401dfb7",1465872956,"Detect recursive default argument definition","Detect recursive default argument definition\n\nIf definition of default function argument uses itself, clang crashed,\nbecause corresponding function parameter is not associated with the default\nargument yet. With this fix clang emits appropriate error message.\n\nThis change fixes PR28105.\n\nDifferential Revision: http://reviews.llvm.org/D21301\n\nllvm-svn: 272623"},
[h]={"1bb328cca568",1401887199,"[OPENMP] Parsing/Sema for OMPLasprivateClause.","[OPENMP] Parsing/Sema for OMPLasprivateClause.\nParsing this clause, allowing it on directive ‘omp simd’ and semantic checks.\n\nllvm-svn: 210184"},
[i]={{O,6027,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n  if (Param->hasUnparsedDefaultArg()) {\n    // ...\n   // If we\'ve already cleared out the location for the default argument,\n    // that means we\'re parsing it right now.\n    if (!UnparsedDefaultArgLocs.count(Param)) {\n      Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",2966,"/// Substitute the given template arguments into the default argument.\nbool Sema::SubstDefaultArgument(SourceLocation Loc, ParmVarDecl *Param, const MultiLevelTemplateArgumentList &TemplateArgs, bool ForCallExpr) {\n // ...\n if (Inst.isAlreadyInstantiating()) {\n    Diag(Param->getBeginLoc(), diag::err_recursive_default_argument) << FD;"}},
[k]={{m,18524,"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 (RequireCompleteType(ELoc, Type, diag::err_omp_lastprivate_incomplete_type))"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/dcl.init.ref/p5-cxx03-extra-copy.cpp:46:17: error: recursive evaluation of default argument"}
["clang/test/OpenMP/sections_lastprivate_messages.cpp"]={"clang/test/OpenMP/sections_lastprivate_messages.cpp:127:34: error: a lastprivate variable with incomplete type \'S1\'","clang/test/OpenMP/sections_lastprivate_messages.cpp:233:34: error: a lastprivate variable with incomplete type \'S1\'"}
}
}
},
},
["err_recursive_superclass"]={
["err_omp_lastprivate_loop_var_non_loop_iteration"]={
[d]="err_recursive_superclass",
[j]={{nil,s,"err_omp_lastprivate_loop_var_non_loop_iteration"}},
[e]="trying to recursively use %0 as superclass of %1",
[b]={{nil,E,"only loop iteration variables are allowed in \'lastprivate\' clause in \'omp %0\' directives"},{s,s,"only loop iteration variables are allowed in \'lastprivate\' clause in \'omp loop\' directives"}},
[f]="trying to recursively use A as superclass of B",
[c]={{nil,E,"only loop iteration variables are allowed in \'lastprivate\' clause in \'omp A\' directives"},{s,s,"only loop iteration variables are allowed in \'lastprivate\' clause in \'omp loop\' directives"}},
[g]=k,
[e]=d,
[h]="trying to recursively use (.*?) as superclass of (.*?)",
[f]="only loop iteration variables are allowed in \'lastprivate\' clause in \'omp (.*?)\' directives",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,s,n}},
[j]={"5582f231f2b2",1247177306,"don\'t crash if class is using itself as its super class.","don\'t crash if class is using itself as its super class.\n\nllvm-svn: 75178"},
[h]={ib,1616787805,lb,jb},
[i]={{bb,570,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n  // ...\n  if (declaresSameEntity(PrevDecl, IDecl)) {\n   Diag(SuperLoc, diag::err_recursive_superclass) << SuperName << ClassName << SourceRange(AtInterfaceLoc, ClassLoc);"}},
[k]={{m,10561,"static bool checkGenericLoopLastprivate(Sema &S, ArrayRef<OMPClause *> Clauses, OpenMPDirectiveKind K, DSAStackTy *Stack) {\n  // ...\n  for (OMPClause *C : Clauses) {\n    if (auto *LPC = dyn_cast<OMPLastprivateClause>(C)) {\n      for (Expr *RefExpr : LPC->varlists()) {\n        // ...\n        if (ValueDecl *D = Res.first) {\n          // ...\n          if (!Info.first) {\n           S.Diag(ELoc, diag::err_omp_lastprivate_loop_var_non_loop_iteration) << getOpenMPDirectiveName(K);"}},
[l]={
[l]={
["clang/test/SemaObjC/undef-superclass-1.m"]={"clang/test/SemaObjC/undef-superclass-1.m:29:29: error: trying to recursively use \'RecursiveClass\' as superclass of \'RecursiveClass\'"}
["clang/test/OpenMP/target_teams_generic_loop_messages.cpp"]={"clang/test/OpenMP/target_teams_generic_loop_messages.cpp:104:45: error: only loop iteration variables are allowed in \'lastprivate\' clause in \'omp target teams loop\' directives","clang/test/OpenMP/target_teams_generic_loop_messages.cpp:110:45: error: only loop iteration variables are allowed in \'lastprivate\' clause in \'omp target teams loop\' directives","clang/test/OpenMP/target_teams_generic_loop_messages.cpp:143:45: error: only loop iteration variables are allowed in \'lastprivate\' clause in \'omp target teams loop\' directives"}
}
}
},
},
["err_redeclaration_different_type"]={
["err_omp_linear_distribute_var_non_loop_iteration"]={
[d]="err_redeclaration_different_type",
[j]={{nil,L,"err_omp_linear_distribute_var_non_loop_iteration"}},
[e]="redeclaration of %0 with a different type%diff{: $ vs $|}1,2",
[b]={{nil,L,"only loop iteration variables are allowed in \'linear\' clause in distribute directives"}},
[f]={{nil,nil,{"redeclaration of A with a different type",{": B vs C",a}}}},
[c]={{nil,L,"only loop iteration variables are allowed in \'linear\' clause in distribute directives"}},
[g]=k,
[e]=d,
[h]="redeclaration of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
[f]="only loop iteration variables are allowed in \'linear\' clause in distribute directives",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,L,n}},
[j]={"38a50c0a1620",1436904529,"[Sema] Emit a better diagnostic when variable redeclarations disagree","[Sema] Emit a better diagnostic when variable redeclarations disagree\n\nWe referred to all declaration in definitions in our diagnostic messages\nwhich is can be inaccurate. Instead, classify the declaration and emit\nan appropriate diagnostic for the new declaration and an appropriate\nnote pointing to the old one.\n\nThis fixes PR24116.\n\nllvm-svn: 242190"},
[h]={"2b86f21ce580",1511991108,"[OPENMP] Allow only loop control variables in distribute simd","[OPENMP] Allow only loop control variables in distribute simd\ndirectives.\n\nAccording to the OpenMP standard, only loop control variables can be\nused in linear clauses of distribute-based simd directives.\n\nllvm-svn: 319362"},
[i]={{D,4383,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n  // ...\n  S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}},
[k]={{m,20192,"static bool FinishOpenMPLinearClause(OMPLinearClause &Clause, DeclRefExpr *IV, Expr *NumIterations, Sema &SemaRef, Scope *S, DSAStackTy *Stack) {\n  // ...\n  for (Expr *RefExpr : Clause.varlists()) {\n    // ...\n    // OpenMP [2.15.11, distribute simd Construct]\n    // A list item may not appear in a linear clause, unless it is the loop\n    // iteration variable.\n    if (isOpenMPDistributeDirective(Stack->getCurrentDirective()) && isOpenMPSimdDirective(Stack->getCurrentDirective()) && !Info.first) {\n      SemaRef.Diag(ELoc, diag::err_omp_linear_distribute_var_non_loop_iteration);"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:162:14: error: redeclaration of \'n_var\' with a different type: \'double\' vs \'int\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:214:24: error: redeclaration of \'arr\' with a different type: \'int[3]\' vs \'int[2]\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:149:14: error: redeclaration of \'arrX\' with a different type: \'int[4]\' vs \'int[3]\'"}
["clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp"]={"clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:35:49: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:41:49: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:47:49: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:53:49: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:59:49: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:65:49: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:71:49: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:71:51: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:71:56: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:77:49: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:88:49: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:88:55: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:278:50: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:284:50: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:295:50: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:174:50: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:180:50: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:191:50: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:212:49: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:212:52: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives","clang/test/OpenMP/distribute_parallel_for_simd_linear_messages.cpp:223:49: error: only loop iteration variables are allowed in \'linear\' clause in distribute directives"}
}
}
},
},
["err_redeclaration_non_exported"]={
["err_omp_linear_expected_int_or_ptr"]={
[d]={{nil,F,"err_redeclaration_non_exported"}},
[j]="err_omp_linear_expected_int_or_ptr",
[e]={{nil,C,"cannot export redeclaration %0 here since the previous declaration %select{is not exported|has internal linkage|has module linkage}1"},{F,F,"cannot export redeclaration %0 here since the previous declaration is not exported"}},
[b]="argument of a linear clause should be of integral or pointer type, not %0",
[f]={{nil,C,{"cannot export redeclaration A here since the previous declaration ",{"is not exported","has internal linkage","has module linkage"}}},{F,F,"cannot export redeclaration A here since the previous declaration is not exported"}},
[c]="argument of a linear clause should be of integral or pointer type, not A",
[g]=k,
[e]=d,
[h]="cannot export redeclaration (.*?) here since the previous declaration (?:is not exported|has internal linkage|has module linkage)",
[f]="argument of a linear clause should be of integral or pointer type, not (.*?)",
[b]=a,
[g]=a,
[c]={{nil,F,m}},
[i]=n,
[j]={"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"},
[h]={"8dba66412b0a",1398172182,"[OPENMP] parsing \'linear\' clause (for directive \'omp simd\')","[OPENMP] parsing \'linear\' clause (for directive \'omp simd\')\n\nDifferential Revision: http://reviews.llvm.org/D3272\n\nllvm-svn: 206891"},
[i]={{D,1735,"// [module.interface]p6:\n// A redeclaration of an entity X is implicitly exported if X was introduced by\n// an exported declaration; otherwise it shall not be exported.\nbool Sema::CheckRedeclarationExported(NamedDecl *New, NamedDecl *Old) {\n  // ...\n  Diag(New->getLocation(), diag::err_redeclaration_non_exported) << New << S;"}},
[k]={{m,20007,"bool Sema::CheckOpenMPLinearDecl(const ValueDecl *D, SourceLocation ELoc, OpenMPLinearClauseKind LinKind, QualType Type, bool IsDeclareSimd) {\n  // ...\n  if (!Ty || (LinKind != OMPC_LINEAR_ref && !Ty->isDependentType() && !Ty->isIntegralType(Context) && !Ty->isPointerType())) {\n    Diag(ELoc, diag::err_omp_linear_expected_int_or_ptr) << Type;"}},
[l]={
[l]={
["clang/test/CXX/module/module.interface/p6.cpp"]={"clang/test/CXX/module/module.interface/p6.cpp:12:15: error: cannot export redeclaration \'S\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:20:15: error: cannot export redeclaration \'X\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:23:15: error: cannot export redeclaration \'Z\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:32:15: error: cannot export redeclaration \'B\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:33:15: error: cannot export redeclaration \'C\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:40:8: error: cannot export redeclaration \'TemplS\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:46:8: error: cannot export redeclaration \'TemplS2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:49:13: error: cannot export redeclaration \'baz\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:54:13: error: cannot export redeclaration \'bar\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:66:16: error: cannot export redeclaration \'f1\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:72:6: error: cannot export redeclaration \'TemplFunc\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:79:6: error: cannot export redeclaration \'TemplFunc2\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:85:9: error: cannot export redeclaration \'TemplFunc3\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:88:12: error: cannot export redeclaration \'var\' here since the previous declaration has module linkage","clang/test/CXX/module/module.interface/p6.cpp:93:3: error: cannot export redeclaration \'TemplVar\' here since the previous declaration has module linkage"}
["clang/test/OpenMP/for_simd_linear_messages.cpp"]={"clang/test/OpenMP/for_simd_linear_messages.cpp:135:35: error: argument of a linear clause should be of integral or pointer type, not \'S2\'","clang/test/OpenMP/for_simd_linear_messages.cpp:200:34: error: argument of a linear clause should be of integral or pointer type, not \'S2\'","clang/test/OpenMP/for_simd_linear_messages.cpp:206:31: error: argument of a linear clause should be of integral or pointer type, not \'S4\'","clang/test/OpenMP/for_simd_linear_messages.cpp:206:34: error: argument of a linear clause should be of integral or pointer type, not \'S5\'","clang/test/OpenMP/for_simd_linear_messages.cpp:62:29: error: argument of a linear clause should be of integral or pointer type, not \'double\'"}
}
}
},
},
["err_redefinition"]={
["err_omp_linear_incomplete_type"]={
[d]="err_redefinition",
[j]="err_omp_linear_incomplete_type",
[e]="redefinition of %0",
[b]="a linear variable with incomplete type %0",
[f]="redefinition of A",
[c]="a linear variable with incomplete type A",
[g]=k,
[e]=d,
[h]="redefinition of (.*?)",
[f]="a linear variable with incomplete type (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={M,1237025389,L,N},
[h]={"8dba66412b0a",1398172182,"[OPENMP] parsing \'linear\' clause (for directive \'omp simd\')","[OPENMP] parsing \'linear\' clause (for directive \'omp simd\')\n\nDifferential Revision: http://reviews.llvm.org/D3272\n\nllvm-svn: 206891"},
[i]={{D,2719,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'.  Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{D,3042,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  // ...\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    // ...\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      // ...\n      } else {\n        // ...\n        unsigned Diag = cast<VarDecl>(Def)->isThisDeclarationADefinition() == VarDecl::TentativeDefinition ? diag::err_alias_after_tentative : diag::err_redefinition;"},{D,3044,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  // ...\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    // ...\n    if (isa<AliasAttr>(NewAttribute) || isa<IFuncAttr>(NewAttribute)) {\n      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(New)) {\n      // ...\n      } else {\n        // ...\n        if (Diag == diag::err_redefinition)"},{D,4683,"/// 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  // FIXME: The test for external storage here seems wrong? We still\n  // need to check for mismatches.\n  if (!New->hasExternalStorage() && !New->isFileVarDecl() &&\n    // ...\n    Diag(New->getLocation(), diag::err_redefinition) << New->getDeclName();"},{D,4837,"/// We\'ve just determined that \\p Old and \\p New both appear to be definitions\n/// of the same variable. Either diagnose or fix the problem.\nbool Sema::checkVarDeclRedefinition(VarDecl *Old, VarDecl *New) {\n  if (!hasVisibleDefinition(Old) && (New->getFormalLinkage() == InternalLinkage || New->isInline() || isa<VarTemplateSpecializationDecl>(New) || New->getDescribedVarTemplate() || New->getNumTemplateParameterLists() || New->getDeclContext()->isDependentContext())) {\n  // ...\n  } else {\n    Diag(New->getLocation(), diag::err_redefinition) << New;"},{D,15170,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  // ...\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n  // ...\n  else\n    Diag(FD->getLocation(), diag::err_redefinition) << FD;"},{D,17369,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // ...\n  if (!Previous.empty()) {\n    // ...\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n      // If this is a use of a previous tag, or if the tag is already declared\n      // in the same scope (so that the definition/declaration completes or\n      // rementions the tag), reuse the decl.\n      if (TUK == TUK_Reference || TUK == TUK_Friend || isDeclInScope(DirectPrevDecl, SearchDC, S, SS.isNotEmpty() || isMemberSpecialization)) {\n        // ...\n        if (!Invalid) {\n          // ...\n          // Diagnose attempts to redefine a tag.\n         if (TUK == TUK_Definition) {\n            if (NamedDecl *Def = PrevTagDecl->getDefinition()) {\n              // ...\n              if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n              // ...\n              } else if (!IsExplicitSpecializationAfterInstantiation) {\n                // A redeclaration in function prototype scope in C isn\'t\n                // visible elsewhere, so merely issue a warning.\n                if (!getLangOpts().CPlusPlus && S->containedInPrototypeScope())\n                // ...\n                else\n                  Diag(NameLoc, diag::err_redefinition) << Name;"},{D,19504,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  // ...\n  if (PrevDecl) {\n    // ...\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n      if (isa<EnumConstantDecl>(PrevDecl))\n      // ...\n      else\n        Diag(IdLoc, diag::err_redefinition) << Id;"},{w,909,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  // Build the BindingDecls.\n  for (auto &B : D.getDecompositionDeclarator().bindings()) {\n    // ...\n    if (!Previous.empty()) {\n      // ...\n      Diag(B.NameLoc, diag::err_redefinition) << B.Name;"},{w,12947,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  // ...\n  // C++03 [namespace.udecl]p8:\n  // C++0x [namespace.udecl]p10:\n  //  A using-declaration is a declaration and can therefore be used\n  //  repeatedly where (and only where) multiple declarations are\n  //  allowed.\n  //\n  // That\'s in non-member contexts.\n  if (!CurContext->getRedeclContext()->isRecord()) {\n    // A dependent qualifier outside a class can only ever resolve to an\n    // enumeration type. Therefore it conflicts with any other non-type\n    // declaration in the same scope.\n    // FIXME: How should we check for dependent type-type conflicts at block\n    // scope?\n    if (Qual->isDependent() && !HasTypenameKeyword) {\n      for (auto *D : Prev) {\n        if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n          // ...\n          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{w,13443,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  // ...\n  if (PrevR.isSingleResult()) {\n    // ...\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    // ...\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{w,16762,"/// ActOnExceptionDeclarator - Parsed the exception-declarator in a C++ catch\n/// handler.\nDecl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) {\n  // ...\n  if (NamedDecl *PrevDecl = LookupSingleName(S, II, D.getIdentifierLoc(), LookupOrdinaryName, ForVisibleRedeclaration)) {\n    // ...\n    if (isDeclInScope(PrevDecl, CurContext, S)) {\n      Diag(D.getIdentifierLoc(), diag::err_redefinition) << D.getIdentifier();"},{O,5565,"ExprResult Sema::ActOnOMPIteratorExpr(Scope *S, SourceLocation IteratorKwLoc, SourceLocation LLoc, SourceLocation RLoc, ArrayRef<OMPIteratorData> Data) {\n  // ...\n  for (const OMPIteratorData &D : Data) {\n    // ...\n    if (S) {\n      // ...\n      if (!Previous.empty()) {\n        // ...\n        Diag(D.DeclIdentLoc, diag::err_redefinition) << VD->getDeclName();"},{W,2028,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (PrevClassTemplate) {\n    // ...\n    // Check for redefinition of this class template.\n    if (TUK == TUK_Definition) {\n      if (TagDecl *Def = PrevRecordDecl->getDefinition()) {\n        // ...\n        if (SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n        // ...\n        } else {\n          Diag(NameLoc, diag::err_redefinition) << Name;"},{W,8904,"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  // Check that this isn\'t a redefinition of this specialization.\n  if (TUK == TUK_Definition) {\n    // ...\n    if (Def && SkipBody && !hasVisibleDefinition(Def, &Hidden)) {\n    // ...\n    } else if (Def) {\n      // ...\n      Diag(TemplateNameLoc, diag::err_redefinition) << Specialization << Range;"},{W,9077,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  // ...\n  if (hasReachableDefinition(OldConcept) && IsRedefinitionInModule(NewDecl, OldConcept)) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition) << NewDecl->getDeclName();"},{"clang/lib/Sema/SemaTemplateInstantiateDecl.cpp",3838,"Decl *TemplateDeclInstantiator::VisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl *D) {\n  // ...\n  // If PrevDecl was a definition and D is also a definition, diagnose.\n  // This happens in cases like:\n  //\n  //  template<typename T, typename U>\n  //  struct Outer {\n  //    template<typename X> struct Inner;\n  //    template<> struct Inner<T> {};\n  //    template<> struct Inner<U> {};\n  //  };\n  //\n  //  Outer<int, int> outer; // error: the explicit specializations of Inner\n  //                          // have the same signature.\n  if (PrevDecl && PrevDecl->getDefinition() && D->isThisDeclarationADefinition()) {\n    SemaRef.Diag(D->getLocation(), diag::err_redefinition) << PrevDecl;"}},
[k]={{m,19983,"bool Sema::CheckOpenMPLinearDecl(const ValueDecl *D, SourceLocation ELoc, OpenMPLinearClauseKind LinKind, QualType Type, bool IsDeclareSimd) {\n  // ...\n  if (RequireCompleteType(ELoc, Type, diag::err_omp_linear_incomplete_type))"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:6:9: error: redefinition of \'binding_a\'"}
["clang/test/OpenMP/for_simd_linear_messages.cpp"]={"clang/test/OpenMP/for_simd_linear_messages.cpp:135:32: error: a linear variable with incomplete type \'S1\'","clang/test/OpenMP/for_simd_linear_messages.cpp:200:31: error: a linear variable with incomplete type \'S1\'"}
}
}
},
},
["err_redefinition_different_concept"]={
["err_omp_linear_ordered"]={
[d]={{nil,C,"err_redefinition_different_concept"}},
[j]="err_omp_linear_ordered",
[e]={{nil,C,"redefinition of concept %0 with different template parameters or requirements"}},
[b]="\'linear\' clause cannot be specified along with \'ordered\' clause with a parameter",
[f]={{nil,C,"redefinition of concept A with different template parameters or requirements"}},
[c]="\'linear\' clause cannot be specified along with \'ordered\' clause with a parameter",
[g]=k,
[e]=d,
[h]="redefinition of concept (.*?) with different template parameters or requirements",
[f]="\'linear\' clause cannot be specified along with \'ordered\' clause with a parameter",
[b]=a,
[g]=a,
[c]={{nil,C,m}},
[i]=n,
[j]={gb,1625925174,ib,jb},
[h]={"993d28073c1b",1451283788,"[OPENMP 4.5] Do not allow \'linear\' clause along with \'ordered(expr)\' clause.","[OPENMP 4.5] Do not allow \'linear\' clause along with \'ordered(expr)\' clause.\nAccording to OpenMP 4.5 \"A linear clause or an ordered clause with a parameter can be specified on a loop directive but not both.\"\"\n\nllvm-svn: 256485"},
[i]={{W,9069,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  // ...\n  if (!IsSame) {\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_concept) << NewDecl->getDeclName();"}}
[k]={{m,4872,"StmtResult Sema::ActOnOpenMPRegionEnd(StmtResult S, ArrayRef<OMPClause *> Clauses) {\n  // ...\n  if (!LCs.empty() && OC && OC->getNumForLoops()) {\n    for (const OMPLinearClause *C : LCs) {\n      Diag(C->getBeginLoc(), diag::err_omp_linear_ordered) << SourceRange(OC->getBeginLoc(), OC->getEndLoc());"}},
},
["err_redefinition_different_kind"]={
[d]="err_redefinition_different_kind",
[e]="redefinition of %0 as different kind of symbol",
[f]="redefinition of A as different kind of symbol",
[g]=k,
[h]="redefinition of (.*?) as different kind of symbol",
[b]=a,
[c]=m,
[j]={M,1237025389,L,N},
[i]={{D,2624,"/// MergeTypedefNameDecl - We just parsed a typedef \'New\' which has the\n/// same name and scope as a previous declaration \'Old\'.  Figure out\n/// how to resolve this situation, merging decls or emitting\n/// diagnostics as appropriate. If there was an error, set New to be invalid.\n///\nvoid Sema::MergeTypedefNameDecl(Scope *S, TypedefNameDecl *New, LookupResult &OldDecls) {\n  // ...\n  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{D,3661,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (!Old) {\n    if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(OldD)) {\n    // ...\n    } else {\n      Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{D,4557,"/// MergeVarDecl - We just parsed a variable \'New\' which has the same name\n/// and scope as a previous declaration \'Old\'.  Figure out how to resolve this\n/// situation, merging decls or emitting diagnostics as appropriate.\n///\n/// Tentative definition rules (C99 6.9.2p2) are checked by\n/// FinalizeDeclaratorGroup. Unfortunately, we can\'t analyze tentative\n/// definitions here, since the initializer hasn\'t been attached.\n///\nvoid Sema::MergeVarDecl(VarDecl *New, LookupResult &Previous) {\n  // ...\n  if (!Old) {\n    Diag(New->getLocation(), diag::err_redefinition_different_kind) << New->getDeclName();"},{D,17460,"/// 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      } else {\n        // ...\n        Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{w,11434,"/// ActOnStartNamespaceDef - This is called at the start of a namespace\n/// definition.\nDecl *Sema::ActOnStartNamespaceDef(Scope *NamespcScope, SourceLocation InlineLoc, SourceLocation NamespaceLoc, SourceLocation IdentLoc, IdentifierInfo *II, SourceLocation LBrace, const ParsedAttributesView &AttrList, UsingDirectiveDecl *&UD, bool IsNested) {\n  // ...\n  if (II) {\n    // ...\n    if (PrevNS) {\n    // ...\n    } else if (PrevDecl) {\n      // ...\n      Diag(Loc, diag::err_redefinition_different_kind) << II;"},{w,12948,"/// Checks that the given using declaration is not an invalid\n/// redeclaration.  Note that this is checking only for the using decl\n/// itself, not for any ill-formedness among the UsingShadowDecls.\nbool Sema::CheckUsingDeclRedeclaration(SourceLocation UsingLoc, bool HasTypenameKeyword, const CXXScopeSpec &SS, SourceLocation NameLoc, const LookupResult &Prev) {\n  // ...\n  // C++03 [namespace.udecl]p8:\n  // C++0x [namespace.udecl]p10:\n  //  A using-declaration is a declaration and can therefore be used\n  //  repeatedly where (and only where) multiple declarations are\n  //  allowed.\n  //\n  // That\'s in non-member contexts.\n  if (!CurContext->getRedeclContext()->isRecord()) {\n    // A dependent qualifier outside a class can only ever resolve to an\n    // enumeration type. Therefore it conflicts with any other non-type\n    // declaration in the same scope.\n    // FIXME: How should we check for dependent type-type conflicts at block\n    // scope?\n    if (Qual->isDependent() && !HasTypenameKeyword) {\n      for (auto *D : Prev) {\n        if (!isa<TypeDecl>(D) && !isa<UsingDecl>(D) && !isa<UsingPackDecl>(D)) {\n          // ...\n          Diag(NameLoc, OldCouldBeEnumerator ? diag::err_redefinition : diag::err_redefinition_different_kind) << Prev.getLookupName();"},{w,13317,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  // ...\n  if (TemplateParamLists.size()) {\n    // ...\n    if (!Previous.empty()) {\n      // ...\n      if (!OldDecl && !Invalid) {\n        Diag(UsingLoc, diag::err_redefinition_different_kind) << Name.Identifier;"},{w,13444,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  // ...\n  if (PrevR.isSingleResult()) {\n    // ...\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n    // ...\n    } else if (isVisible(PrevDecl)) {\n      unsigned DiagID = isa<NamespaceDecl>(PrevDecl->getUnderlyingDecl()) ? diag::err_redefinition : diag::err_redefinition_different_kind;"},{bb,610,"void Sema::ActOnSuperClassOfClassInterface(Scope *S, SourceLocation AtInterfaceLoc, ObjCInterfaceDecl *IDecl, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange) {\n  // ...\n  if (declaresSameEntity(PrevDecl, IDecl)) {\n  // ...\n  } else {\n    // ...\n    if (PrevDecl && !SuperClassDecl) {\n      // ...\n      // This handles the following case:\n      //\n      // typedef int SuperClass;\n      // @interface MyClass : SuperClass {} @end\n      //\n      if (!SuperClassDecl) {\n        Diag(SuperLoc, diag::err_redefinition_different_kind) << SuperName;"},{bb,991,"ObjCInterfaceDecl *Sema::ActOnStartClassInterface(Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *SuperName, SourceLocation SuperLoc, ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList, SkipBodyInfo *SkipBody) {\n  // ...\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{bb,1993,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n    Diag(ClassLoc, diag::err_redefinition_different_kind) << ClassName;"},{bb,2026,"ObjCImplementationDecl *Sema::ActOnStartClassImplementation(SourceLocation AtClassImplLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, IdentifierInfo *SuperClassname, SourceLocation SuperClassLoc, const ParsedAttributesView &Attrs) {\n  // ...\n  if (SuperClassname) {\n    // ...\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      Diag(SuperClassLoc, diag::err_redefinition_different_kind) << SuperClassname;"},{bb,3082,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  // ...\n  for (unsigned i = 0; i != NumElts; ++i) {\n    // ...\n    if (PrevDecl && !isa<ObjCInterfaceDecl>(PrevDecl)) {\n      // ...\n      if (!TDD || !TDD->getUnderlyingType()->isObjCObjectType()) {\n        Diag(AtClassLoc, diag::err_redefinition_different_kind) << IdentList[i];"},{W,2042,"DeclResult Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams, AccessSpecifier AS, SourceLocation ModulePrivateLoc, SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists, TemplateParameterList **OuterTemplateParamLists, SkipBodyInfo *SkipBody) {\n  // ...\n  if (PrevClassTemplate) {\n  // ...\n  } else if (PrevDecl) {\n    // ...\n    Diag(NameLoc, diag::err_redefinition_different_kind) << Name;"},{W,9060,"void Sema::CheckConceptRedefinition(ConceptDecl *NewDecl, LookupResult &Previous, bool &AddToScope) {\n  // ...\n  if (!OldConcept) {\n    // ...\n    Diag(NewDecl->getLocation(), diag::err_redefinition_different_kind) << NewDecl->getDeclName();"}},
[l]={
[l]={
["clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp"]={"clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:8:10: error: redefinition of \'binding_b\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:11:28: error: redefinition of \'vartemplate_a\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:13:10: error: redefinition of \'vartemplate_b\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:16:24: error: redefinition of \'aliastemplate_a\' as different kind of symbol","clang/test/CXX/basic/basic.scope/basic.scope.declarative/p4.cpp:18:10: error: redefinition of \'aliastemplate_b\' as different kind of symbol"}
["clang/test/OpenMP/for_linear_messages.cpp"]={"clang/test/OpenMP/for_linear_messages.cpp:159:19: error: \'linear\' clause cannot be specified along with \'ordered\' clause with a parameter","clang/test/OpenMP/for_linear_messages.cpp:223:19: error: \'linear\' clause cannot be specified along with \'ordered\' clause with a parameter"}
}
}
},
},
["err_redefinition_different_namespace_alias"]={
["err_omp_local_var_in_threadprivate_init"]={
[d]="err_redefinition_different_namespace_alias",
[j]="err_omp_local_var_in_threadprivate_init",
[e]="redefinition of %0 as an alias for a different namespace",
[b]="variable with local storage in initial value of threadprivate variable",
[f]="redefinition of A as an alias for a different namespace",
[c]="variable with local storage in initial value of threadprivate variable",
[g]=k,
[e]=d,
[h]="redefinition of (.*?) as an alias for a different namespace",
[f]="variable with local storage in initial value of threadprivate variable",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"f463436d9c02",1409785882,"[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes","[modules] Make NamespaceAliasDecl redeclarable, as it should be. This fixes\nmerging of namespace aliases across modules and improves source fidelity.\nIncidentally also fixes PR20816.\n\nllvm-svn: 217103"},
[h]={"18b92eeacb23",1401262825,"[OPENMP] Additional checking for local vars in initial values for threadprivate vars","[OPENMP] Additional checking for local vars in initial values for threadprivate vars\n\nllvm-svn: 209716"},
[i]={{w,13435,"Decl *Sema::ActOnNamespaceAliasDef(Scope *S, SourceLocation NamespaceLoc, SourceLocation AliasLoc, IdentifierInfo *Alias, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  // ...\n  if (PrevR.isSingleResult()) {\n    // ...\n    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(PrevDecl)) {\n      // We already have an alias with the same name that points to the same\n      // namespace; check that it matches.\n      if (AD->getNamespace()->Equals(getNamespaceDecl(ND))) {\n      // ...\n      } else if (isVisible(PrevDecl)) {\n        Diag(AliasLoc, diag::err_redefinition_different_namespace_alias) << Alias;"}},
[k]={{m,3177,"class LocalVarRefChecker final : public ConstStmtVisitor<LocalVarRefChecker, bool> {\n  // ...\n  bool VisitDeclRefExpr(const DeclRefExpr *E) {\n    if (const auto *VD = dyn_cast<VarDecl>(E->getDecl())) {\n      if (VD->hasLocalStorage()) {\n        SemaRef.Diag(E->getBeginLoc(), diag::err_omp_local_var_in_threadprivate_init) << E->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/namespace-alias.cpp"]={"clang/test/SemaCXX/namespace-alias.cpp:43:13: error: redefinition of \'B\' as an alias for a different namespace"}
["clang/test/OpenMP/threadprivate_messages.cpp"]={"clang/test/OpenMP/threadprivate_messages.cpp:125:31: error: variable with local storage in initial value of threadprivate variable"}
}
}
},
},
["err_redefinition_different_type"]={
["err_omp_loop_cannot_use_stmt"]={
[d]="err_redefinition_different_type",
[j]="err_omp_loop_cannot_use_stmt",
[e]="redefinition of %0 with a different type%diff{: $ vs $|}1,2",
[b]="\'%0\' statement cannot be used in OpenMP for loop",
[f]={{nil,nil,{"redefinition of A with a different type",{": B vs C",a}}}},
[c]="\'A\' statement cannot be used in OpenMP for loop",
[g]=k,
[e]=d,
[h]="redefinition of (.*?) with a different type(?:\\: (.*?) vs (.*?)|)",
[f]="\'(.*?)\' statement cannot be used in OpenMP for loop",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={M,1237025389,L,N},
[h]={pb,1401790607,rb,ob},
[i]={{D,4382,"static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl *Old) {\n  // ...\n  S.Diag(New->getLocation(), New->isThisDeclarationADefinition() ? diag::err_redefinition_different_type : diag::err_redeclaration_different_type) << New->getDeclName() << New->getType() << Old->getType();"}},
[k]={{fb,3352,"StmtResult Sema::ActOnBreakStmt(SourceLocation BreakLoc, Scope *CurScope) {\n  // ...\n  if (S->isOpenMPLoopScope())\n    return StmtError(Diag(BreakLoc, diag::err_omp_loop_cannot_use_stmt) << \"break\");"}},
[l]={
[l]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:173:9: error: redefinition of \'o_var\' with a different type: \'float\' vs \'int\'"}
["clang/test/OpenMP/parallel_for_simd_messages.cpp"]={"clang/test/OpenMP/parallel_for_simd_messages.cpp:61:9: error: \'break\' statement cannot be used in OpenMP for loop"}
}
}
},
},
["err_redefinition_different_typedef"]={
["err_omp_loop_diff_cxx"]={
[d]="err_redefinition_different_typedef",
[j]="err_omp_loop_diff_cxx",
[e]="%select{typedef|type alias|type alias template}0 redefinition with different types%diff{ ($ vs $)|}1,2",
[b]="could not calculate number of iterations calling \'operator-\' with upper and lower loop bounds",
[f]={{nil,nil,{{"typedef","type alias","type alias template"}," redefinition with different types",{" (B vs C)",a}}}},
[c]="could not calculate number of iterations calling \'operator-\' with upper and lower loop bounds",
[g]=k,
[e]=d,
[h]="(?:typedef|type alias|type alias template) redefinition with different types(?: \\((.*?) vs (.*?)\\)|)",
[f]="could not calculate number of iterations calling \'operator\\-\' with upper and lower loop bounds",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={M,1237025389,L,N},
[h]={"a5f070aec038",1412143436,"[OPENMP] Loop collapsing and codegen for \'omp simd\' directive.","[OPENMP] Loop collapsing and codegen for \'omp simd\' directive.\n\nThis patch implements collapsing of the loops (in particular, in\npresense of clause \'collapse\'). It calculates number of iterations N\nand expressions nesessary to calculate the nested loops counters\nvalues based on new iteration variable (that goes from 0 to N-1)\nin Sema. It also adds Codegen for \'omp simd\', which uses\n(and tests) this feature.\n\nDifferential Revision: http://reviews.llvm.org/D5184\n\nllvm-svn: 218743"},
[i]={{D,2559,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  // ...\n  if (OldType != NewType && !OldType->isDependentType() && !NewType->isDependentType() && !Context.hasSameType(OldType, NewType)) {\n   // ...\n   Diag(New->getLocation(), diag::err_redefinition_different_typedef) << Kind << NewType << OldType;"},{w,13343,"Decl *Sema::ActOnAliasDeclaration(Scope *S, AccessSpecifier AS, MultiTemplateParamsArg TemplateParamLists, SourceLocation UsingLoc, UnqualifiedId &Name, const ParsedAttributesView &AttrList, TypeResult Type, Decl *DeclFromDeclSpec) {\n  // ...\n  if (TemplateParamLists.size()) {\n   // ...\n   if (!Previous.empty()) {\n     // ...\n     if (!Invalid && OldDecl && !OldDecl->isInvalidDecl()) {\n       // ...\n       if (!Invalid && !Context.hasSameType(OldTD->getUnderlyingType(), NewTD->getUnderlyingType())) {\n         // ...\n         Diag(NewTD->getLocation(), diag::err_redefinition_different_typedef) << 2 << NewTD->getUnderlyingType() << OldTD->getUnderlyingType();"}},
[k]={{m,8584,"/// Calculate number of iterations, transforming to unsigned, if number of\n/// iterations may be larger than the original type.\nstatic Expr *calculateNumIters(Sema &SemaRef, Scope *S, SourceLocation DefaultLoc, Expr *Lower, Expr *Upper, Expr *Step, QualType LCTy, bool TestIsStrictOp, bool RoundToStep, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) {\n  // ...\n  // If need to reorganize, then calculate the form as Upper - (Lower - Step [+\n // 1]).\n if (NeedToReorganize) {\n // ...\n } else {\n   // ...\n   if (!Diff.isUsable() && LCTy->getAsCXXRecordDecl()) {\n     // ...\n     SemaRef.Diag(Upper->getBeginLoc(), diag::err_omp_loop_diff_cxx) << Upper->getSourceRange() << Lower->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/libstdcxx_common_type_hack.cpp"]={"clang/test/SemaCXX/libstdcxx_common_type_hack.cpp:31:7: error: type alias redefinition with different types (\'decltype(true ? std::declval<int>() : std::declval<int>())\' (aka \'int &&\') vs \'int\')"}
["clang/test/OpenMP/parallel_for_simd_loop_messages.cpp"]={"clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:413:32: error: could not calculate number of iterations calling \'operator-\' with upper and lower loop bounds","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:469:30: error: could not calculate number of iterations calling \'operator-\' with upper and lower loop bounds","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:481:21: error: could not calculate number of iterations calling \'operator-\' with upper and lower loop bounds"}
}
}
},
},
["err_redefinition_extern_inline"]={
["err_omp_loop_incr_not_compatible"]={
[d]="err_redefinition_extern_inline",
[j]="err_omp_loop_incr_not_compatible",
[e]="redefinition of a \'extern inline\' function %0 is not supported in %select{C99 mode|C++}1",
[b]="increment expression must cause %0 to %select{decrease|increase}1 on each iteration of OpenMP for loop",
[f]={{nil,nil,{"redefinition of a \'extern inline\' function A is not supported in ",{"C99 mode","C++"}}}},
[c]={{nil,nil,{"increment expression must cause A to ",{"decrease","increase"}," on each iteration of OpenMP for loop"}}},
[g]=k,
[e]=d,
[h]="redefinition of a \'extern inline\' function (.*?) is not supported in (?:C99 mode|C\\+\\+)",
[f]="increment expression must cause (.*?) to (?:decrease|increase) on each iteration of OpenMP for loop",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"a7d6e3d0f526",1283874661,"Provide a specific diagnostic when trying to redefine an \"extern","Provide a specific diagnostic when trying to redefine an \"extern\ninline\" function outside of GNU89 mode. Fixes\n<rdar://problem/6880464>.\n\nllvm-svn: 113204"},
[h]={pb,1401790607,rb,ob},
[i]={{D,15167,"void Sema::CheckForFunctionRedefinition(FunctionDecl *FD, const FunctionDecl *EffectiveDefinition, SkipBodyInfo *SkipBody) {\n  // ...\n  if (getLangOpts().GNUMode && Definition->isInlineSpecified() && Definition->getStorageClass() == SC_Extern)\n   Diag(FD->getLocation(), diag::err_redefinition_extern_inline) << FD << getLangOpts().CPlusPlus;"}},
[k]={{m,8023,"bool OpenMPIterationSpaceChecker::setStep(Expr *NewStep, bool Subtract) {\n  // ...\n  if (!NewStep->isValueDependent()) {\n    // ...\n    if (UB && (IsConstZero || (*TestIsLessOp ? (IsConstNeg || (IsUnsigned && Subtract)) : (IsConstPos || (IsUnsigned && !Subtract))))) {\n     SemaRef.Diag(NewStep->getExprLoc(), diag::err_omp_loop_incr_not_compatible) << LCDecl << *TestIsLessOp << NewStep->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/redefinition.c"]={"clang/test/Sema/redefinition.c:14:5: error: redefinition of a \'extern inline\' function \'g\' is not supported in C99 mode"}
["clang/test/OpenMP/parallel_for_simd_loop_messages.cpp"]={"clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:199:35: error: increment expression must cause \'ii\' to increase on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:205:35: error: increment expression must cause \'ii\' to increase on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:211:33: error: increment expression must cause \'ii\' to increase on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:217:33: error: increment expression must cause \'ii\' to increase on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:223:32: error: increment expression must cause \'ii\' to decrease on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:229:35: error: increment expression must cause \'ii\' to increase on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:235:34: error: increment expression must cause \'ii\' to decrease on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:241:34: error: increment expression must cause \'ii\' to increase on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:295:32: error: increment expression must cause \'i\' to increase on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:437:46: error: increment expression must cause \'I\' to decrease on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:449:42: error: increment expression must cause \'I\' to decrease on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:474:37: error: increment expression must cause \'I\' to decrease on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:530:32: error: increment expression must cause \'I\' to decrease on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:493:41: error: increment expression must cause \'I\' to increase on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:499:39: error: increment expression must cause \'I\' to increase on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:517:40: error: increment expression must cause \'I\' to decrease on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:523:37: error: increment expression must cause \'I\' to decrease on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:517:40: error: increment expression must cause \'I\' to decrease on each iteration of OpenMP for loop","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:523:37: error: increment expression must cause \'I\' to decrease on each iteration of OpenMP for loop"}
}
}
},
},
["err_redefinition_of_enumerator"]={
["err_omp_loop_not_canonical_cond"]={
[d]="err_redefinition_of_enumerator",
[j]="err_omp_loop_not_canonical_cond",
[e]="redefinition of enumerator %0",
[b]={{nil,p,"condition of OpenMP for loop must be a relational comparison (\'<\', \'<=\', \'>\', %select{or \'>=\'|\'>=\', or \'!=\'}0) of loop variable %1"},{v,nil,"condition of OpenMP for loop must be a relational comparison (\'<\', \'<=\', \'>\', or \'>=\') of loop variable %0"}},
[f]="redefinition of enumerator A",
[c]={{nil,p,{"condition of OpenMP for loop must be a relational comparison (\'<\', \'<=\', \'>\', ",{"or \'>=\'","\'>=\', or \'!=\'"},") of loop variable B"}},{v,nil,"condition of OpenMP for loop must be a relational comparison (\'<\', \'<=\', \'>\', or \'>=\') of loop variable A"}},
[g]=k,
[e]=d,
[h]="redefinition of enumerator (.*?)",
[f]="condition of OpenMP for loop must be a relational comparison \\(\'\\<\', \'\\<\\=\', \'\\>\', (?:or \'\\>\\=\'|\'\\>\\=\', or \'\\!\\=\')\\) of loop variable (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={M,1237025389,L,N},
[h]={pb,1401790607,rb,ob},
[i]={{D,19502,"Decl *Sema::ActOnEnumConstant(Scope *S, Decl *theEnumDecl, Decl *lastEnumConst, SourceLocation IdLoc, IdentifierInfo *Id, const ParsedAttributesView &Attrs, SourceLocation EqualLoc, Expr *Val) {\n  // ...\n  if (PrevDecl) {\n    // ...\n    if (!isa<TagDecl>(PrevDecl) && isDeclInScope(PrevDecl, CurContext, S)) {\n     if (isa<EnumConstantDecl>(PrevDecl))\n       Diag(IdLoc, diag::err_redefinition_of_enumerator) << Id;"}},
[k]={{m,8270,"bool OpenMPIterationSpaceChecker::checkAndSetCond(Expr *S) {\n  // ...\n  if (!S) {\n    SemaRef.Diag(DefaultLoc, diag::err_omp_loop_not_canonical_cond) << (IneqCondIsCanonical ? 1 : 0) << LCDecl;"},{m,8316,"bool OpenMPIterationSpaceChecker::checkAndSetCond(Expr *S) {\n // ...\n SemaRef.Diag(CondLoc, diag::err_omp_loop_not_canonical_cond) << (IneqCondIsCanonical ? 1 : 0) << S->getSourceRange() << LCDecl;"}},
[l]={
[l]={
["clang/test/Sema/enum.c"]={"clang/test/Sema/enum.c:159:5: error: redefinition of enumerator \'PR15071_One\'"}
[Gb]={"clang/test/OpenMP/unroll_messages.cpp:18:19: error: condition of OpenMP for loop must be a relational comparison (\'<\', \'<=\', \'>\', \'>=\', or \'!=\') of loop variable \'i\'"}
}
}
},
},
["err_redefinition_of_label"]={
["err_omp_loop_not_canonical_incr"]={
[d]="err_redefinition_of_label",
[j]="err_omp_loop_not_canonical_incr",
[e]="redefinition of label %0",
[b]="increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable %0",
[f]="redefinition of label A",
[c]="increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable A",
[g]=k,
[e]=d,
[h]="redefinition of label (.*?)",
[f]="increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={M,1237025389,L,N},
[h]={pb,1401790607,rb,ob},
[i]={{Kb,559,"StmtResult Sema::ActOnLabelStmt(SourceLocation IdentLoc, LabelDecl *TheDecl, SourceLocation ColonLoc, Stmt *SubStmt) {\n  // If the label was multiply defined, reject it now.\n  if (TheDecl->getStmt()) {\n   Diag(IdentLoc, diag::err_redefinition_of_label) << TheDecl->getDeclName();"}},
[k]={{m,8347,"bool OpenMPIterationSpaceChecker::checkAndSetIncRHS(Expr *RHS) {\n  // ...\n  SemaRef.Diag(RHS->getBeginLoc(), diag::err_omp_loop_not_canonical_incr) << RHS->getSourceRange() << LCDecl;"},{m,8367,"bool OpenMPIterationSpaceChecker::checkAndSetInc(Expr *S) {\n  // Check incr-expr for canonical loop form and return true if it\n  // does not conform.\n  // OpenMP [2.6] Canonical loop form. Test-expr may be one of the following:\n  //  ++var\n  //  var++\n  //  --var\n  //  var--\n  //  var += incr\n  //  var -= incr\n  //  var = var + incr\n  //  var = incr + var\n  //  var = var - incr\n  //\n  if (!S) {\n    SemaRef.Diag(DefaultLoc, diag::err_omp_loop_not_canonical_incr) << LCDecl;"},{m,8425,"bool OpenMPIterationSpaceChecker::checkAndSetInc(Expr *S) {\n // ...\n  SemaRef.Diag(S->getBeginLoc(), diag::err_omp_loop_not_canonical_incr) << S->getSourceRange() << LCDecl;"}},
[l]={
[l]={
["clang/test/Parser/goto.c"]={"clang/test/Parser/goto.c:26:3: error: redefinition of label \'l\'"}
["clang/test/OpenMP/parallel_for_simd_loop_messages.cpp"]={"clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:105:28: error: increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable \'i\'","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:140:25: error: increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable \'ii\'","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:145:25: error: increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable \'ii\'","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:166:25: error: increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable \'ii\'","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:172:23: error: increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable \'ii\'","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:177:3: error: increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable \'ii\'","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:183:25: error: increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable \'ii\'","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:188:25: error: increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable \'ii\'","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:193:30: error: increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable \'ii\'","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:444:42: error: increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable \'I\'","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:453:42: error: increment clause of OpenMP for loop must perform simple addition or subtraction on loop variable \'I\'"}
}
}
},
},
["err_redefinition_variably_modified_typedef"]={
["err_omp_loop_not_canonical_init"]={
[d]="err_redefinition_variably_modified_typedef",
[j]="err_omp_loop_not_canonical_init",
[e]="redefinition of %select{typedef|type alias}0 for variably-modified type %1",
[b]="initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\')",
[f]={{nil,nil,{"redefinition of ",{"typedef","type alias"}," for variably-modified type B"}}},
[c]="initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\')",
[g]=k,
[e]=d,
[h]="redefinition of (?:typedef|type alias) for variably\\-modified type (.*?)",
[f]="initialization clause of OpenMP for loop is not in canonical form \\(\'var \\= init\' or \'T var \\= init\'\\)",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"aab36986ab66",1326321228,"Improve the diagnostic when trying to redefine a typedef with a","Improve the diagnostic when trying to redefine a typedef with a\nvariably-modified type.\n\nllvm-svn: 147973"},
[h]={pb,1401790607,rb,ob},
[i]={{D,2546,"bool Sema::isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New) {\n  // ...\n  if (NewType->isVariablyModifiedType()) {\n   // ...\n    Diag(New->getLocation(), diag::err_redefinition_variably_modified_typedef) << Kind << NewType;"}},
[k]={{m,8165,"bool OpenMPIterationSpaceChecker::checkAndSetInit(Stmt *S, bool EmitDiags) {\n  // Check init-expr for canonical loop form and save loop counter\n  // variable - #Var and its initialization value - #LB.\n  // OpenMP [2.6] Canonical loop form. init-expr may be one of the following:\n  //  var = lb\n  //  integer-type var = lb\n  //  random-access-iterator-type var = lb\n  //  pointer-type var = lb\n  //\n  if (!S) {\n    if (EmitDiags) {\n      SemaRef.Diag(DefaultLoc, diag::err_omp_loop_not_canonical_init);"},{m,8233,"bool OpenMPIterationSpaceChecker::checkAndSetInit(Stmt *S, bool EmitDiags) {\n // ...\n  if (EmitDiags) {\n    SemaRef.Diag(S->getBeginLoc(), diag::err_omp_loop_not_canonical_init) << S->getSourceRange();"}},
[l]={
[l]={
["clang/test/Sema/c11-typedef-redef.c"]={"clang/test/Sema/c11-typedef-redef.c:13:15: error: redefinition of typedef for variably-modified type \'int[N]\'","clang/test/Sema/c11-typedef-redef.c:17:16: error: redefinition of typedef for variably-modified type \'vla2\' (aka \'int[N]\')"}
["clang/test/OpenMP/parallel_for_simd_loop_messages.cpp"]={"clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:64:8: error: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\')","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:68:8: error: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\')","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:73:8: error: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\')","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:78:3: error: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\')","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:84:8: error: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\')","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:89:8: error: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\')","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:386:8: error: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\')","clang/test/OpenMP/parallel_for_simd_loop_messages.cpp:417:8: error: initialization clause of OpenMP for loop is not in canonical form (\'var = init\' or \'T var = init\')"}
}
}
},
},
["err_ref_array_type"]={
["err_omp_loop_var_dsa"]={
[d]="err_ref_array_type",
[j]="err_omp_loop_var_dsa",
[e]="cannot refer to declaration with an array type inside block",
[b]="loop iteration variable in the associated loop of \'omp %1\' directive may not be %0, predetermined as %2",
[f]="cannot refer to declaration with an array type inside block",
[c]="loop iteration variable in the associated loop of \'omp B\' directive may not be A, predetermined as C",
[g]=k,
[e]=d,
[h]="cannot refer to declaration with an array type inside block",
[f]="loop iteration variable in the associated loop of \'omp (.*?)\' directive may not be (.*?), predetermined as (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"8971a8653847",1262661036,"Disallow captured arrays in blocks as well.  Radar 7438948.","Disallow captured arrays in blocks as well.  Radar 7438948.\n\nllvm-svn: 92677"},
[h]={pb,1401790607,rb,ob},
[i]={{O,19231,"// Returns true if the capture by block was successful.\nstatic bool captureInBlock(BlockScopeInfo *BSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool Nested, Sema &S, bool Invalid) {\n  // ...\n  // Blocks are not allowed to capture arrays, excepting OpenCL.\n // OpenCL v2.0 s1.12.5 (revision 40): arrays are captured by reference\n // (decayed to pointers).\n if (!Invalid && !S.getLangOpts().OpenCL && CaptureType->isArrayType()) {\n    if (BuildAndDiagnose) {\n     S.Diag(Loc, diag::err_ref_array_type);"}},
[k]={{m,9146,"void Sema::ActOnOpenMPLoopInitialization(SourceLocation ForLoc, Stmt *Init) {\n  // ...\n  if (AssociatedLoops > 0 && isOpenMPLoopDirective(DSAStack->getCurrentDirective())) {\n    // ...\n   if (!ISC.checkAndSetInit(Init, /*EmitDiags=*/false)) {\n      if (ValueDecl *D = ISC.getLoopDecl()) {\n       // ...\n       if (((isOpenMPSimdDirective(DKind) && DVar.CKind != OMPC_unknown && DVar.CKind != PredeterminedCKind && DVar.RefExpr && (LangOpts.OpenMP <= 45 || (DVar.CKind != OMPC_lastprivate && DVar.CKind != OMPC_private))) || ((isOpenMPWorksharingDirective(DKind) || DKind == OMPD_taskloop || DKind == OMPD_master_taskloop || DKind == OMPD_masked_taskloop || DKind == OMPD_parallel_master_taskloop || DKind == OMPD_parallel_masked_taskloop || isOpenMPDistributeDirective(DKind)) && !isOpenMPSimdDirective(DKind) && DVar.CKind != OMPC_unknown && DVar.CKind != OMPC_private && DVar.CKind != OMPC_lastprivate)) && (DVar.CKind != OMPC_private || DVar.RefExpr)) {\n         Diag(Init->getBeginLoc(), diag::err_omp_loop_var_dsa) << getOpenMPClauseName(DVar.CKind) << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(PredeterminedCKind);"}},
[l]={
[l]={
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:220:11: error: cannot refer to declaration with an array type inside block","clang/test/Sema/block-misc.c:221:11: error: cannot refer to declaration with an array type inside block"}
["clang/test/OpenMP/target_teams_distribute_firstprivate_messages.cpp"]={"clang/test/OpenMP/target_teams_distribute_firstprivate_messages.cpp:144:8: error: loop iteration variable in the associated loop of \'omp target teams distribute\' directive may not be firstprivate, predetermined as private"}
}
}
},
},
["err_ref_bad_target"]={
["err_omp_loop_variable_type"]={
[d]="err_ref_bad_target",
[j]="err_omp_loop_variable_type",
[e]={{nil,A,"reference to %select{__device__|__global__|__host__|__host__ __device__}0 %select{function|variable}1 %2 in %select{__device__|__global__|__host__|__host__ __device__}3 function"},{Cb,nil,"reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in %select{__device__|__global__|__host__|__host__ __device__}2 function"}},
[b]="variable must be of integer or %select{pointer|random access iterator}0 type",
[f]={{nil,A,{"reference to ",{kc,ic,hc,gc}," ",{"function","variable"}," C in ",{kc,ic,hc,gc}," function"}},{Cb,nil,{"reference to ",{kc,ic,hc,gc}," function B in ",{kc,ic,hc,gc}," function"}}},
[c]={{nil,nil,{"variable must be of integer or ",{"pointer","random access iterator"}," type"}}},
[g]=k,
[e]=d,
[h]="reference to (?:__device__|__global__|__host__|__host__ __device__) (?:function|variable) (.*?) in (?:__device__|__global__|__host__|__host__ __device__) function",
[f]="variable must be of integer or (?:pointer|random access iterator) type",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"7277fe8aed6e",1317599380,"CUDA: diagnose invalid calls across targets","CUDA: diagnose invalid calls across targets\n\nllvm-svn: 140978"},
[h]={pb,1401790607,rb,ob},
[i]={{"clang/lib/Sema/SemaCUDA.cpp",835,"bool Sema::CheckCUDACall(SourceLocation Loc, FunctionDecl *Callee) {\n  // ...\n  SemaDiagnosticBuilder(DiagKind, Loc, diag::err_ref_bad_target, Caller, *this) << IdentifyCUDATarget(Callee) << /*function*/ 0 << Callee << IdentifyCUDATarget(Caller);"},{O,19015,"/// Directly mark a variable odr-used. Given a choice, prefer to use\n/// MarkVariableReferenced since it does additional checks and then\n/// calls MarkVarDeclODRUsed.\n/// If the variable must be captured:\n///  - if FunctionScopeIndexToStopAt is null, capture it in the CurContext\n///  - else capture it in the DeclContext that maps to the\n///    *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.\nstatic void MarkVarDeclODRUsed(ValueDecl *V, SourceLocation Loc, Sema &SemaRef, const unsigned *const FunctionScopeIndexToStopAt = nullptr) {\n  // ...\n  if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n    // ...\n    if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n      // Diagnose ODR-use of host global variables in device functions.\n      // Reference of device global variables in host functions is allowed\n      // through shadow variables therefore it is not diagnosed.\n      if (SemaRef.LangOpts.CUDAIsDevice) {\n       SemaRef.targetDiag(Loc, diag::err_ref_bad_target) << /*host*/ 2 << /*variable*/ 1 << Var << UserTarget;"}},
[k]={{m,9253,"/// Called on a for stmt to check and extract its iteration space\n/// for further processing (such as collapsing).\nstatic bool checkOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, Sema &SemaRef, DSAStackTy &DSA, unsigned CurrentNestedLoopCount, unsigned NestedLoopCount, unsigned TotalNestedLoopCount, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, llvm::MutableArrayRef<LoopIterationSpace> ResultIterSpaces, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) {\n  // ...\n  // Check loop variable\'s type.\n  if (ValueDecl *LCDecl = ISC.getLoopDecl()) {\n    // ...\n    if (!VarType->isDependentType() && !VarType->isIntegerType() && !VarType->isPointerType() && !(SemaRef.getLangOpts().CPlusPlus && VarType->isOverloadableType())) {\n     SemaRef.Diag(Init->getBeginLoc(), diag::err_omp_loop_variable_type) << SemaRef.getLangOpts().CPlusPlus;"}},
[l]={
[l]={
["clang/test/Parser/cuda-force-host-device-templates.cu"]={"clang/test/Parser/cuda-force-host-device-templates.cu:18:11: error: reference to __host__ function \'foo<int>\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:19:12: error: reference to __host__ function \'foo\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:38:11: error: reference to __host__ function \'bar<int>\' in __host__ __device__ function","clang/test/Parser/cuda-force-host-device-templates.cu:39:12: error: reference to __host__ function \'bar\' in __host__ __device__ function"}
["clang/test/OpenMP/target_teams_distribute_misc_messages.c"]={"clang/test/OpenMP/target_teams_distribute_misc_messages.c:308:8: error: variable must be of integer or pointer type","clang/test/OpenMP/target_teams_distribute_misc_messages.c:313:8: error: variable must be of integer or pointer type"}
}
}
},
},
["err_ref_bad_target_global_initializer"]={
["err_omp_map_modifier_not_iterator"]={
[d]="err_ref_bad_target_global_initializer",
[j]={{nil,w,"err_omp_map_modifier_not_iterator"}},
[e]="reference to %select{__device__|__global__|__host__|__host__ __device__}0 function %1 in global initializer",
[b]={{nil,w,"expected iterator specification as map modifier"}},
[f]={{nil,nil,{"reference to ",{kc,ic,hc,gc}," function B in global initializer"}}},
[c]={{nil,w,"expected iterator specification as map modifier"}},
[g]=k,
[e]=d,
[h]="reference to (?:__device__|__global__|__host__|__host__ __device__) function (.*?) in global initializer",
[f]="expected iterator specification as map modifier",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,w,n}},
[j]={"c989c3e78475",1470791361,"[CUDA] Reject calls to __device__ functions from host variable global initializers.","[CUDA] Reject calls to __device__ functions from host variable global initializers.\n\nReviewers: tra\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D23335\n\nllvm-svn: 278196"},
[h]={"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"},
[i]={{"clang/lib/Sema/SemaCUDA.cpp",639,"void Sema::checkAllowedCUDAInitializer(VarDecl *VD) {\n  // ...\n  if (IsDeviceOrConstantVar || IsSharedVar) {\n  // ...\n  } else {\n    // ...\n    if (InitFn) {\n      // ...\n      if (InitFnTarget != CFT_Host && InitFnTarget != CFT_HostDevice) {\n        Diag(VD->getLocation(), diag::err_ref_bad_target_global_initializer) << InitFnTarget << InitFn;"}},
[k]={{m,22167,"OMPClause *Sema::ActOnOpenMPMapClause(Expr *IteratorModifier, ArrayRef<OpenMPMapModifierKind> MapTypeModifiers, ArrayRef<SourceLocation> MapTypeModifiersLoc, CXXScopeSpec &MapperIdScopeSpec, DeclarationNameInfo &MapperId, OpenMPMapClauseKind MapType, bool IsMapTypeImplicit, SourceLocation MapLoc, SourceLocation ColonLoc, ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs, bool NoDiagnose, ArrayRef<Expr *> UnresolvedMappers) {\n  // ...\n  if (IteratorModifier && !IteratorModifier->getType()->isSpecificBuiltinType(BuiltinType::OMPIterator))\n    Diag(IteratorModifier->getExprLoc(), diag::err_omp_map_modifier_not_iterator);"}}
[l]={
["clang/test/SemaCUDA/global-initializers-host.cu"]={"clang/test/SemaCUDA/global-initializers-host.cu:13:3: error: reference to __device__ function \'S\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:26:3: error: reference to __device__ function \'U\' in global initializer","clang/test/SemaCUDA/global-initializers-host.cu:31:5: error: reference to __device__ function \'device_fn\' in global initializer"}
}
},
["err_ref_flexarray_type"]={
[d]="err_ref_flexarray_type",
[e]="cannot refer to declaration of structure variable with flexible array member inside block",
[f]="cannot refer to declaration of structure variable with flexible array member inside block",
[g]=k,
[h]="cannot refer to declaration of structure variable with flexible array member inside block",
[b]=a,
[c]=m,
[j]={"a716a345276c",1357687071,"objectiveC blocks: It is impractical to capture ","objectiveC blocks: It is impractical to capture \nstruct variables with flexiable array members in\nblocks (and lambdas). Issue error instead of\ncrashing in IRGen. // rdar://12655829\n\nllvm-svn: 171912"},
[i]={{O,19177,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  // ...\n // Prohibit structs with flexible array members too.\n  // We cannot capture what is in the tail end of the struct.\n  if (const RecordType *VTTy = Var->getType()->getAs<RecordType>()) {\n    if (VTTy->getDecl()->hasFlexibleArrayMember()) {\n      if (Diagnose) {\n        if (IsBlock)\n          S.Diag(Loc, diag::err_ref_flexarray_type);"}},
[l]={
["clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm"]={"clang/test/SemaObjCXX/capturing-flexible-array-in-block.mm:6:12: error: cannot refer to declaration of structure variable with flexible array member inside block"}
}
},
["err_ref_init_ambiguous"]={
[d]="err_ref_init_ambiguous",
[e]="reference initialization of type %0 with initializer of type %1 is ambiguous",
[f]="reference initialization of type A with initializer of type B is ambiguous",
[g]=k,
[h]="reference initialization of type (.*?) with initializer of type (.*?) is ambiguous",
[b]=a,
[c]=m,
[j]={"31481d8b22a9",1255481563,"Handle ambiguity of reference initialization.","Handle ambiguity of reference initialization.\nRemoves a FIXME.\n\nllvm-svn: 84068"},
[i]={{P,9651,"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);"}},
[l]={
["clang/test/SemaCXX/ref-init-ambiguous.cpp"]={"clang/test/SemaCXX/ref-init-ambiguous.cpp:17:13: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous","clang/test/SemaCXX/ref-init-ambiguous.cpp:23:9: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous","clang/test/SemaCXX/ref-init-ambiguous.cpp:25:12: error: reference initialization of type \'const E2 &\' with initializer of type \'C\' is ambiguous"}
}
},
["err_ref_non_value"]={
[d]="err_ref_non_value",
[e]="%0 does not refer to a value",
[f]="A does not refer to a value",
[g]=k,
[h]="(.*?) does not refer to a value",
[b]=a,
[c]=m,
[j]={"e7488b904ca9",1259686698,"Don\'t automatically assume that an id-expression refers to a","Don\'t automatically assume that an id-expression refers to a\nValueDecl, because that isn\'t always the case in ill-formed\ncode. Diagnose a common mistake (forgetting to provide a template\nargument list for a class template, PR5655) and dyn_cast so that we\nhandle the general problem of referring to a non-value declaration\ngracefully.\n\nllvm-svn: 90239"},
[i]={{O,3387,"/// Complete semantic analysis for a reference to the given declaration.\nExprResult Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D, NamedDecl *FoundD, const TemplateArgumentListInfo *TemplateArgs, bool AcceptInvalidDecl) {\n  // ...\n  // Make sure that we\'re referring to a value.\n  if (!isa<ValueDecl, UnresolvedUsingIfExistsDecl>(D)) {\n    Diag(Loc, diag::err_ref_non_value) << D << SS.getRange();"}},
[l]={
["clang/test/SemaHLSL/cb_error.hlsl"]={"clang/test/SemaHLSL/cb_error.hlsl:10:17: error: \'a\' does not refer to a value"}
}
},
["err_ref_qualifier_comparison_operator"]={
[d]="err_ref_qualifier_comparison_operator",
[e]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[f]="ref-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[g]=k,
[h]="ref\\-qualifier \'&&\' is not allowed on a defaulted comparison operator",
[b]=a,
[c]=m,
[j]={gb,1625925174,ib,jb},
[i]={{w,8708,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (IsMethod) {\n    // ...\n    if (MD->getRefQualifier() == RQ_RValue) {\n      Diag(MD->getLocation(), diag::err_ref_qualifier_comparison_operator);"}},
[l]={
["clang/test/CXX/class/class.compare/class.compare.default/p1.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:18:8: error: ref-qualifier \'&&\' is not allowed on a defaulted comparison operator","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:202:10: error: ref-qualifier \'&&\' is not allowed on a defaulted comparison operator"}
}
},
["err_ref_qualifier_constructor"]={
[d]="err_ref_qualifier_constructor",
[e]="ref-qualifier \'%select{&&|&}0\' is not allowed on a constructor",
[f]={{nil,nil,{"ref-qualifier \'",{"&&","&"},"\' is not allowed on a constructor"}}},
[g]=k,
[h]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a constructor",
[b]=a,
[c]=m,
[j]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: \n\n  - Add ref-qualifiers to the type system; they are part of the\n  canonical type. Print & profile ref-qualifiers\n  - Translate the ref-qualifier from the Declarator chunk for\n    functions to the function type. \n  - Diagnose mis-uses of ref-qualifiers w.r.t. static member\n  functions, free functions, constructors, destructors, etc.\n  - Add serialization and deserialization of ref-qualifiers.\n\nllvm-svn: 124281"},
[i]={{w,10747,"/// CheckConstructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formedness of the constructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the invalid bit to true.  In any case, the type\n/// will be updated to reflect a well-formed type for the constructor and\n/// returned.\nQualType Sema::CheckConstructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  // ...\n  if (FTI.hasRefQualifier()) {\n    Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_constructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}},
[l]={
["clang/test/CXX/special/class.ctor/p4-0x.cpp"]={"clang/test/CXX/special/class.ctor/p4-0x.cpp:5:7: error: ref-qualifier \'&\' is not allowed on a constructor","clang/test/CXX/special/class.ctor/p4-0x.cpp:6:10: error: ref-qualifier \'&&\' is not allowed on a constructor"}
}
},
},
["err_ref_qualifier_destructor"]={
["err_omp_map_shared_storage"]={
[d]="err_ref_qualifier_destructor",
[j]="err_omp_map_shared_storage",
[e]="ref-qualifier \'%select{&&|&}0\' is not allowed on a destructor",
[b]="variable already marked as mapped in current construct",
[f]={{nil,nil,{"ref-qualifier \'",{"&&","&"},"\' is not allowed on a destructor"}}},
[c]="variable already marked as mapped in current construct",
[g]=k,
[e]=d,
[h]="ref\\-qualifier \'(?:&&|&)\' is not allowed on a destructor",
[f]="variable already marked as mapped in current construct",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"db9d66424425",1296018118,"Rvalue references for *this: ","Rvalue references for *this: \n\n - Add ref-qualifiers to the type system; they are part of the\n  canonical type. Print & profile ref-qualifiers\n  - Translate the ref-qualifier from the Declarator chunk for\n    functions to the function type. \n - Diagnose mis-uses of ref-qualifiers w.r.t. static member\n  functions, free functions, constructors, destructors, etc.\n  - Add serialization and deserialization of ref-qualifiers.\n\nllvm-svn: 124281"},
[h]={"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"},
[i]={{w,10924,"/// CheckDestructorDeclarator - Called by ActOnDeclarator to check\n/// the well-formednes of the destructor declarator @p D with type @p\n/// R. If there are any errors in the declarator, this routine will\n/// emit diagnostics and set the declarator to invalid. Even if this happens,\n/// will be updated to reflect a well-formed type for the destructor and\n/// returned.\nQualType Sema::CheckDestructorDeclarator(Declarator &D, QualType R, StorageClass &SC) {\n  // ...\n  if (FTI.hasRefQualifier()) {\n   Diag(FTI.getRefQualifierLoc(), diag::err_ref_qualifier_destructor) << FTI.RefQualifierIsLValueRef << FixItHint::CreateRemoval(FTI.getRefQualifierLoc());"}},
[k]={{m,21557,"// 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, p.4]\n   // List items of map clauses in the same construct must not share\n    //  original storage.\n    //\n    // If the expressions are exactly the same or one is a subset of the\n    // other, it means they are sharing storage.\n   if (CI == CE && SI == SE) {\n      if (CurrentRegionOnly) {\n        if (CKind == OMPC_map) {\n          SemaRef.Diag(ELoc, diag::err_omp_map_shared_storage) << ERange;"},{m,21644,"// 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, p.4]\n   // List items of map clauses in the same construct must not share\n   // original storage.\n   //\n    // An expression is a subset of the other.\n    if (CurrentRegionOnly && (CI == CE || SI == SE)) {\n      if (CKind == OMPC_map) {\n       // ...\n        SemaRef.Diag(ELoc, diag::err_omp_map_shared_storage) << ERange;"},{m,23523,"OMPClause *Sema::ActOnOpenMPIsDevicePtrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (DSAStack->checkMappableExprComponentListsForDecl(D, /*CurrentRegionOnly=*/true, [&ConflictExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef R, OpenMPClauseKind) -> bool {\n     // ...\n      Diag(ELoc, diag::err_omp_map_shared_storage) << RefExpr->getSourceRange();"},{m,23598,"OMPClause *Sema::ActOnOpenMPHasDeviceAddrClause(ArrayRef<Expr *> VarList, const OMPVarListLocTy &Locs) {\n  // ...\n  for (Expr *RefExpr : VarList) {\n    // ...\n    if (DSAStack->checkMappableExprComponentListsForDecl(D, /*CurrentRegionOnly=*/true, [&ConflictExpr](OMPClauseMappableExprCommon::MappableExprComponentListRef R, OpenMPClauseKind) -> bool {\n      // ...\n      Diag(ELoc, diag::err_omp_map_shared_storage) << RefExpr->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/special/class.dtor/p2-0x.cpp"]={"clang/test/CXX/special/class.dtor/p2-0x.cpp:5:8: error: ref-qualifier \'&\' is not allowed on a destructor","clang/test/CXX/special/class.dtor/p2-0x.cpp:9:8: error: ref-qualifier \'&&\' is not allowed on a destructor"}
["clang/test/OpenMP/target_has_device_addr_messages.cpp"]={"clang/test/OpenMP/target_has_device_addr_messages.cpp:187:44: error: variable already marked as mapped in current construct","clang/test/OpenMP/target_has_device_addr_messages.cpp:189:44: error: variable already marked as mapped in current construct","clang/test/OpenMP/target_has_device_addr_messages.cpp:191:47: error: variable already marked as mapped in current construct","clang/test/OpenMP/target_has_device_addr_messages.cpp:256:44: error: variable already marked as mapped in current construct","clang/test/OpenMP/target_has_device_addr_messages.cpp:258:44: error: variable already marked as mapped in current construct","clang/test/OpenMP/target_has_device_addr_messages.cpp:260:47: error: variable already marked as mapped in current construct"}
}
}
},
},
["err_ref_qualifier_overload"]={
["err_omp_map_type_missing"]={
[d]="err_ref_qualifier_overload",
[j]="err_omp_map_type_missing",
[e]="cannot overload a member function %select{without a ref-qualifier|with ref-qualifier \'&\'|with ref-qualifier \'&&\'}0 with a member function %select{without a ref-qualifier|with ref-qualifier \'&\'|with ref-qualifier \'&&\'}1",
[b]="missing map type",
[f]={{nil,nil,{"cannot overload a member function ",{"without a ref-qualifier","with ref-qualifier \'&\'","with ref-qualifier \'&&\'"}," with a member function ",{"without a ref-qualifier","with ref-qualifier \'&\'","with ref-qualifier \'&&\'"}}}},
[c]="missing map type",
[g]=k,
[e]=d,
[h]="cannot overload a member function (?:without a ref\\-qualifier|with ref\\-qualifier \'&\'|with ref\\-qualifier \'&&\') with a member function (?:without a ref\\-qualifier|with ref\\-qualifier \'&\'|with ref\\-qualifier \'&&\')",
[f]="missing map type",
[b]=a,
[g]=a,
[c]=m,
[i]=u,
[j]={"c83f9865a0da",1296076837,"Implement the restriction that a function with a ref-qualifier cannot","Implement the restriction that a function with a ref-qualifier cannot\noverload a function without a ref-qualifier (C++0x\n[over.load]p2). This, apparently, completes the implementation of\nrvalue references for *this.\n\nllvm-svn: 124321"},
[h]={"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"},
[i]={{E,1356,"bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old, bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs, bool ConsiderRequiresClauses) {\n  // ...\n if (OldMethod && NewMethod && !OldMethod->isStatic() && !NewMethod->isStatic()) {\n    if (OldMethod->getRefQualifier() != NewMethod->getRefQualifier()) {\n     if (!UseMemberUsingDeclRules && (OldMethod->getRefQualifier() == RQ_None || NewMethod->getRefQualifier() == RQ_None)) {\n       // ...\n       Diag(NewMethod->getLocation(), diag::err_ref_qualifier_overload) << NewMethod->getRefQualifier() << OldMethod->getRefQualifier();"}},
[k]={{t,4180,"/// 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 (Tok.is(tok::colon)) {\n    P.Diag(Tok, diag::err_omp_map_type_missing);"}},
[l]={
[l]={
["clang/test/CXX/over/over.load/p2-0x.cpp"]={"clang/test/CXX/over/over.load/p2-0x.cpp:15:8: error: cannot overload a member function without a ref-qualifier with a member function with ref-qualifier \'&\'","clang/test/CXX/over/over.load/p2-0x.cpp:21:29: error: cannot overload a member function without a ref-qualifier with a member function with ref-qualifier \'&\'","clang/test/CXX/over/over.load/p2-0x.cpp:24:8: error: cannot overload a member function with ref-qualifier \'&&\' with a member function without a ref-qualifier"}
[vb]={"clang/test/OpenMP/declare_mapper_messages.cpp:75:35: error: missing map type","clang/test/OpenMP/declare_mapper_messages.cpp:81:35: error: missing map type"}
}
}
},
},
["err_ref_vm_type"]={
["err_omp_map_type_modifier_missing"]={
[d]="err_ref_vm_type",
[j]={{nil,y,"err_omp_map_type_modifier_missing"}},
[e]="cannot refer to declaration with a variably modified type inside block",
[b]={{nil,y,"missing map type modifier"}},
[f]="cannot refer to declaration with a variably modified type inside block",
[c]={{nil,y,"missing map type modifier"}},
[g]=k,
[e]=d,
[h]="cannot refer to declaration with a variably modified type inside block",
[f]="missing map type modifier",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,y,u}},
[j]={"7dafa0d04810",1262660195,"Disallow capturing vlas inside blocks.","Disallow capturing vlas inside blocks.\n\nllvm-svn: 92676"},
[h]={"ef57943e3fba",1545171521,"[OPENMP] parsing and sema support for \'close\' map-type-modifier","[OPENMP] parsing and sema support for \'close\' map-type-modifier\n\nA map clause with the close map-type-modifier is a hint to \nprefer that the variables are mapped using a copy into faster \nmemory.\n\nPatch by Ahsan Saghir (saghir)\n\nDifferential Revision: https://reviews.llvm.org/D55719\n\nllvm-svn: 349551"},
[i]={{O,19165,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  // ...\n // Prohibit variably-modified types in blocks; they\'re difficult to deal with.\n if (Var->getType()->isVariablyModifiedType() && IsBlock) {\n    if (Diagnose) {\n     S.Diag(Loc, diag::err_ref_vm_type);"}},
[k]={{t,4141,"/// 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      // For the case of unknown map-type-modifier or a map-type.\n      // Map-type is followed by a colon; the function returns when it\n      // encounters a token followed by a colon.\n      if (Tok.is(tok::comma)) {\n       Diag(Tok, diag::err_omp_map_type_modifier_missing);"}},
[l]={
[l]={
["clang/test/Sema/block-misc.c"]={"clang/test/Sema/block-misc.c:209:11: error: cannot refer to declaration with a variably modified type inside block","clang/test/Sema/block-misc.c:210:12: error: cannot refer to declaration with a variably modified type inside block"}
["clang/test/OpenMP/target_map_messages.cpp"]={"clang/test/OpenMP/target_map_messages.cpp:218:29: error: missing map type modifier","clang/test/OpenMP/target_map_messages.cpp:220:29: error: missing map type modifier","clang/test/OpenMP/target_map_messages.cpp:220:31: error: missing map type modifier","clang/test/OpenMP/target_map_messages.cpp:222:29: error: missing map type modifier","clang/test/OpenMP/target_map_messages.cpp:222:31: error: missing map type modifier","clang/test/OpenMP/target_map_messages.cpp:233:29: error: missing map type modifier"}
}
}
},
},
["err_refactor_code_outside_of_function"]={
["err_omp_mapper_expected_declarator"]={
[d]={{nil,B,"err_refactor_code_outside_of_function"}},
[j]={{nil,v,"err_omp_mapper_expected_declarator"}},
[e]={{nil,B,"the selected code is not a part of a function\'s / method\'s body"}},
[b]={{nil,v,"expected declarator on \'omp declare mapper\' directive"}},
[f]={{nil,B,"the selected code is not a part of a function\'s / method\'s body"}},
[c]={{nil,v,"expected declarator on \'omp declare mapper\' directive"}},
[g]=k,
[e]=d,
[h]="the selected code is not a part of a function\'s \\/ method\'s body",
[f]="expected declarator on \'omp declare mapper\' directive",
[b]=a,
[g]=a,
[c]={{nil,B,Bb}},
[i]={{nil,v,u}},
[j]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n  This means that you can\'t extract a global variable initialize into a function\n  right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"},
[h]={Jb,1549052704,Kb,Hb},
[i]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",79,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  // We would like to extract code out of functions/methods/blocks.\n  // Prohibit extraction from things like global variable / field\n  // initializers and other top-level expressions.\n  if (!Code.isInFunctionLikeBodyOfCode())\n    return Context.createDiagnosticError(diag::err_refactor_code_outside_of_function);"}}
[k]={{t,651,"TypeResult Parser::parseOpenMPDeclareMapperVarDecl(SourceRange &Range, DeclarationName &Name, AccessSpecifier AS) {\n  // ...\n  if (DeclaratorInfo.getIdentifier() == nullptr) {\n    Diag(Tok.getLocation(), diag::err_omp_mapper_expected_declarator);"}},
},
["err_refactor_extract_prohibited_expression"]={
[d]={{nil,B,"err_refactor_extract_prohibited_expression"}},
[e]={{nil,B,"the selected expression can\'t be extracted"}},
[f]={{nil,B,"the selected expression can\'t be extracted"}},
[g]=k,
[h]="the selected expression can\'t be extracted",
[b]=a,
[c]={{nil,B,Bb}},
[j]={"1e416fe23df4",1509495655,"[refactor][extract] prohibit extraction of ObjC property setters","[refactor][extract] prohibit extraction of ObjC property setters\n\nllvm-svn: 317056"},
[i]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",91,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  // ...\n  if (Code.size() == 1) {\n    // ...\n    // Property setters can\'t be extracted.\n    if (const auto *PRE = dyn_cast<ObjCPropertyRefExpr>(Code[0])) {\n      if (!PRE->isMessagingGetter())\n        return Context.createDiagnosticError(diag::err_refactor_extract_prohibited_expression);"}}
},
["err_refactor_extract_simple_expression"]={
[d]={{nil,B,"err_refactor_extract_simple_expression"}},
[e]={{nil,B,"the selected expression is too simple to extract"}},
[f]={{nil,B,"the selected expression is too simple to extract"}},
[g]=k,
[h]="the selected expression is too simple to extract",
[b]=a,
[c]={{nil,B,Bb}},
[j]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n  This means that you can\'t extract a global variable initialize into a function\n  right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"},
[i]={{"clang/lib/Tooling/Refactoring/Extract/Extract.cpp",85,"Expected<ExtractFunction> ExtractFunction::initiate(RefactoringRuleContext &Context, CodeRangeASTSelection Code, std::optional<std::string> DeclName) {\n  // ...\n  if (Code.size() == 1) {\n    // Avoid extraction of simple literals and references.\n    if (isSimpleExpression(dyn_cast<Expr>(Code[0])))\n      return Context.createDiagnosticError(diag::err_refactor_extract_simple_expression);"}}
},
["err_refactor_no_selection"]={
[d]={{nil,B,"err_refactor_no_selection"}},
[e]={{nil,B,"refactoring action can\'t be initiated without a selection"}},
[f]={{nil,B,"refactoring action can\'t be initiated without a selection"}},
[g]=k,
[h]="refactoring action can\'t be initiated without a selection",
[b]=a,
[c]={{nil,B,Bb}},
[j]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics\n\nThis commit allows the refactoring library to use its own set of\nrefactoring-specific diagnostics to reports things like initiation errors.\n\nDifferential Revision: https://reviews.llvm.org/D38772\n\nllvm-svn: 315924"},
[i]={{"clang/unittests/Tooling/RefactoringActionRulesTest.cpp",145,"TEST_F(RefactoringActionRulesTest, MyFirstRefactoringRule) {\n  // ...\n  // When one of the requirements is not satisfied, invoke should return a\n  // valid error.\n  {\n    // ...\n    EXPECT_EQ(DiagID, diag::err_refactor_no_selection);"}}
},
["err_refactor_selection_invalid_ast"]={
[d]={{nil,B,"err_refactor_selection_invalid_ast"}},
[e]={{nil,B,"the provided selection does not overlap with the AST nodes of interest"}},
[f]={{nil,B,"the provided selection does not overlap with the AST nodes of interest"}},
[g]=k,
[h]="the provided selection does not overlap with the AST nodes of interest",
[b]=a,
[c]={{nil,B,Bb}},
[j]={"7fe441b20d2d",1508865525,"[refactor] Initial outline of implementation of \"extract function\" refactoring","[refactor] Initial outline of implementation of \"extract function\" refactoring\n\nThis commit adds an initial, skeleton outline of the \"extract function\"\nrefactoring. The extracted function doesn\'t capture variables / rewrite code\nyet, it just basically does a simple copy-paste.\nThe following initiation rules are specified:\n\n- extraction can only be done for executable code in a function/method/block.\n  This means that you can\'t extract a global variable initialize into a function\n  right now.\n- simple literals and references are not extractable.\n\nThis commit also adds support for full source ranges to clang-refactor\'s test\nmode.\n\nDifferential Revision: https://reviews.llvm.org/D38982\n\nllvm-svn: 316465"},
[i]={{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",29,"Expected<SelectedASTNode> ASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n  // ...\n  if (!Selection)\n    return Context.createDiagnosticError(Range->getBegin(), diag::err_refactor_selection_invalid_ast);"},{"clang/lib/Tooling/Refactoring/ASTSelectionRequirements.cpp",48,"Expected<CodeRangeASTSelection> CodeRangeASTSelectionRequirement::evaluate(RefactoringRuleContext &Context) const {\n  // ...\n  if (!CodeRange)\n    return Context.createDiagnosticError(Context.getSelectionRange().getBegin(), diag::err_refactor_selection_invalid_ast);"}}
},
["err_refactor_selection_no_symbol"]={
[d]={{nil,B,"err_refactor_selection_no_symbol"}},
[e]={{nil,B,"there is no symbol at the given location"}},
[f]={{nil,B,"there is no symbol at the given location"}},
[g]=k,
[h]="there is no symbol at the given location",
[b]=a,
[c]={{nil,B,Bb}},
[j]={"f5ca27cc3785",1508178506,"[refactor] allow the use of refactoring diagnostics","[refactor] allow the use of refactoring diagnostics\n\nThis commit allows the refactoring library to use its own set of\nrefactoring-specific diagnostics to reports things like initiation errors.\n\nDifferential Revision: https://reviews.llvm.org/D38772\n\nllvm-svn: 315924"},
[i]={{"clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp",73,"Expected<RenameOccurrences> RenameOccurrences::initiate(RefactoringRuleContext &Context, SourceRange SelectionRange, std::string NewName) {\n  // ...\n  if (!ND)\n    return Context.createDiagnosticError(SelectionRange.getBegin(), diag::err_refactor_selection_no_symbol);"}}
},
["err_reference_bind_drops_quals"]={
[d]="err_reference_bind_drops_quals",
[e]={{nil,o,"binding reference %diff{of type $ to value of type $|to value}0,1 %select{drops %3 qualifier%plural{1:|2:|4:|:s}4|changes address space|not permitted due to incompatible qualifiers}2"},{x,x,"binding reference %diff{of type $ to value of type $|to value}0,1 %select{drops %3 qualifier%plural{1:|2:|4:|:s}4|changes address space}2"},{u,nil,"binding value %diff{of type $ to reference to type $|to reference}0,1 drops %select{<<ERROR>>|\'const\'|\'restrict\'|\'const\' and \'restrict\'|\'volatile\'|\'const\' and \'volatile\'|\'restrict\' and \'volatile\'|\'const\', \'restrict\', and \'volatile\'}2 qualifier%plural{1:|2:|4:|:s}2"}},
[f]={{nil,o,{"binding reference ",{"of type A to value of type B","to value"}," ",{{"drops D qualifier",{a,a,a,"s"}},"changes address space","not permitted due to incompatible qualifiers"}}},{x,x,{"binding reference ",{"of type A to value of type B","to value"}," ",{{"drops D qualifier",{a,a,a,"s"}},"changes address space"}}},{u,nil,{"binding value ",{"of type A to reference to type B","to reference"}," drops ",{"\'const\'","\'restrict\'","\'const\' and \'restrict\'","\'volatile\'","\'const\' and \'volatile\'","\'restrict\' and \'volatile\'","\'const\', \'restrict\', and \'volatile\'"}," qualifier",{a,a,a,"s"}}}},
[g]=k,
[h]="binding reference (?:of type (.*?) to value of type (.*?)|to value) (?:drops (.*?) qualifier(?:|||s)|changes address space|not permitted due to incompatible qualifiers)",
[b]=a,
[c]=m,
[j]={"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"},
[i]={{P,9756,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitDropsQualifiers: {\n    // ...\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 1 /*addr space*/"},{P,9760,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitDropsQualifiers: {\n    // ...\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    // ...\n    else if (DroppedQualifiers.hasQualifiers())\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 0 /*cv quals*/"},{P,9767,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitDropsQualifiers: {\n    // ...\n    if (!NonRefType.getQualifiers().isAddressSpaceSupersetOf(SourceType.getQualifiers()))\n    // ...\n    else if (DroppedQualifiers.hasQualifiers())\n    // ...\n    else\n      // ...\n      S.Diag(Kind.getLocation(), diag::err_reference_bind_drops_quals) << NonRefType << SourceType << 2 /*incompatible quals*/"}},
[l]={
[l]={
["clang/test/SemaCXX/builtins-arm.cpp"]={"clang/test/SemaCXX/builtins-arm.cpp:5:27: error: binding reference of type \'__builtin_va_list\' to value of type \'const __builtin_va_list\' drops \'const\' qualifier"}
[vb]={"clang/test/OpenMP/declare_mapper_messages.cpp:20:183: error: expected declarator on \'omp declare mapper\' directive","clang/test/OpenMP/declare_mapper_messages.cpp:21:28: error: expected declarator on \'omp declare mapper\' directive","clang/test/OpenMP/declare_mapper_messages.cpp:22:189: error: expected declarator on \'omp declare mapper\' directive","clang/test/OpenMP/declare_mapper_messages.cpp:23:148: error: expected declarator on \'omp declare mapper\' directive"}
}
}
},
},
["err_reference_bind_failed"]={
["err_omp_mapper_illegal_identifier"]={
[d]="err_reference_bind_failed",
[j]={{nil,v,"err_omp_mapper_illegal_identifier"}},
[e]={{nil,x,"reference %diff{to %select{type|incomplete type}1 $ could not bind to an %select{rvalue|lvalue}2 of type $|could not bind to %select{rvalue|lvalue}2 of incompatible type}0,3"},{u,nil,"reference %diff{to type $ could not bind to an %select{rvalue|lvalue}1 of type $|could not bind to %select{rvalue|lvalue}1 of incompatible type}0,2"}},
[b]={{nil,v,"illegal OpenMP user-defined mapper identifier"}},
[f]={{nil,x,{"reference ",{{"to ",{"type","incomplete type"}," A could not bind to an ",{cc,bc}," of type D"},{"could not bind to ",{cc,bc}," of incompatible type"}}}},{u,nil,{"reference ",{{"to type A could not bind to an ",{cc,bc}," of type C"},{"could not bind to ",{cc,bc}," of incompatible type"}}}}},
[c]={{nil,v,"illegal OpenMP user-defined mapper identifier"}},
[g]=k,
[e]=d,
[h]="reference (?:to (?:type|incomplete type) (.*?) could not bind to an (?:rvalue|lvalue) of type (.*?)|could not bind to (?:rvalue|lvalue) of incompatible type)",
[f]="illegal OpenMP user\\-defined mapper identifier",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,v,u}},
[j]={"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"},
[h]={Jb,1549052704,Kb,Hb},
[i]={{P,9774,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceInitFailed:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_failed) << DestType.getNonReferenceType() << DestType.getNonReferenceType()->isIncompleteType() << OnlyArg->isLValue() << OnlyArg->getType() << Args[0]->getSourceRange();"}},
[k]={{t,550,"/// Parses \'omp declare mapper\' directive.\n///\n///      declare-mapper-directive:\n///        annot_pragma_openmp \'declare\' \'mapper\' \'(\' [<mapper-identifier> \':\']\n///        <type> <var> \')\' [<clause>[[,] <clause>] ... ]\n///        annot_pragma_openmp_end\n/// <mapper-identifier> and <var> are base language identifiers.\n///\nParser::DeclGroupPtrTy Parser::ParseOpenMPDeclareMapperDirective(AccessSpecifier AS) {\n  // ...\n if (PP.LookAhead(0).is(tok::colon)) {\n   if (Tok.isNot(tok::identifier) && Tok.isNot(tok::kw_default)) {\n      Diag(Tok.getLocation(), diag::err_omp_mapper_illegal_identifier);"},{t,4103,"/// Parse the mapper modifier in map, to, and from clauses.\nbool Parser::parseMapperModifier(Sema::OpenMPVarListDataTy &Data) {\n  // ...\n  if (Tok.isNot(tok::identifier) && Tok.isNot(tok::kw_default)) {\n    Diag(Tok.getLocation(), diag::err_omp_mapper_illegal_identifier);"}},
[l]={
[l]={
["clang/test/CXX/expr/p13.cpp"]={"clang/test/CXX/expr/p13.cpp:28:12: error: reference to type \'const A\' (aka \'void (*const)() noexcept\') could not bind to an rvalue of type \'void (*)()\'"}
[vb]={"clang/test/OpenMP/declare_mapper_messages.cpp:30:28: error: illegal OpenMP user-defined mapper identifier","clang/test/OpenMP/declare_mapper_messages.cpp:77:35: error: illegal OpenMP user-defined mapper identifier","clang/test/OpenMP/declare_mapper_messages.cpp:79:35: error: illegal OpenMP user-defined mapper identifier","clang/test/OpenMP/declare_mapper_messages.cpp:93:37: error: illegal OpenMP user-defined mapper identifier","clang/test/OpenMP/declare_mapper_messages.cpp:95:37: error: illegal OpenMP user-defined mapper identifier","clang/test/OpenMP/declare_mapper_messages.cpp:97:42: error: illegal OpenMP user-defined mapper identifier","clang/test/OpenMP/declare_mapper_messages.cpp:98:42: error: illegal OpenMP user-defined mapper identifier","clang/test/OpenMP/declare_mapper_messages.cpp:107:39: error: illegal OpenMP user-defined mapper identifier","clang/test/OpenMP/declare_mapper_messages.cpp:109:39: error: illegal OpenMP user-defined mapper identifier","clang/test/OpenMP/declare_mapper_messages.cpp:111:44: error: illegal OpenMP user-defined mapper identifier","clang/test/OpenMP/declare_mapper_messages.cpp:112:44: error: illegal OpenMP user-defined mapper identifier"}
}
}
},
},
["err_reference_bind_init_list"]={
["err_omp_mapper_wrong_type"]={
[d]="err_reference_bind_init_list",
[j]={{nil,v,"err_omp_mapper_wrong_type"}},
[e]="reference to type %0 cannot bind to an initializer list",
[b]={{nil,v,"mapper type must be of struct, union or class type"}},
[f]="reference to type A cannot bind to an initializer list",
[c]={{nil,v,"mapper type must be of struct, union or class type"}},
[g]=k,
[e]=d,
[h]="reference to type (.*?) cannot bind to an initializer list",
[f]="mapper type must be of struct, union or class type",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,v,n}},
[j]={"51e77d5ab0a0",1260467815,"Move initialization via initializer list over to InitializationSequences.","Move initialization via initializer list over to InitializationSequences.\n\nllvm-svn: 91050"},
[h]={Jb,1549052704,Kb,Hb},
[i]={{P,9828,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceBindingToInitList:\n   S.Diag(Kind.getLocation(), diag::err_reference_bind_init_list) << DestType.getNonReferenceType() << Args[0]->getSourceRange();"}},
[k]={{m,21759,"// Look up the user-defined mapper given the mapper name and mapped type, and\n// build a reference to it.\nstatic ExprResult buildUserDefinedMapperRef(Sema &SemaRef, Scope *S, CXXScopeSpec &MapperIdScopeSpec, const DeclarationNameInfo &MapperId, QualType Type, Expr *UnresolvedMapper) {\n  // ...\n  // [OpenMP 5.0], 2.19.7.3 declare mapper Directive, Restrictions\n  //  The type must be of struct, union or class type in C and C++\n if (!Type->isStructureOrClassType() && !Type->isUnionType() && (MapperIdScopeSpec.isSet() || MapperId.getAsString() != \"default\")) {\n    SemaRef.Diag(Loc, diag::err_omp_mapper_wrong_type);"},{m,22480,"QualType Sema::ActOnOpenMPDeclareMapperType(SourceLocation TyLoc, TypeResult ParsedType) {\n  // ...\n  // [OpenMP 5.0], 2.19.7.3 declare mapper Directive, Restrictions\n  //  The type must be of struct, union or class type in C and C++\n  if (!MapperType->isStructureOrClassType() && !MapperType->isUnionType()) {\n    Diag(TyLoc, diag::err_omp_mapper_wrong_type);"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx0x-initializer-references.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-references.cpp:141:16: error: reference to type \'const int\' cannot bind to an initializer list"}
[vb]={"clang/test/OpenMP/declare_mapper_messages.cpp:34:28: error: mapper type must be of struct, union or class type"}
}
}
},
},
["err_reference_bind_temporary_addrspace"]={
["err_omp_more_one_clause"]={
[d]={{nil,x,"err_reference_bind_temporary_addrspace"}},
[j]="err_omp_more_one_clause",
[e]={{nil,x,"reference of type %0 cannot bind to a temporary object because of address space mismatch"}},
[b]="directive \'#pragma omp %0\' cannot contain more than one \'%1\' clause%select{| with \'%3\' name modifier| with \'source\' dependence}2",
[f]={{nil,x,"reference of type A cannot bind to a temporary object because of address space mismatch"}},
[c]={{nil,nil,{"directive \'#pragma omp A\' cannot contain more than one \'B\' clause",{a," with \'D\' name modifier"," with \'source\' dependence"}}}},
[g]=k,
[e]=d,
[h]="reference of type (.*?) cannot bind to a temporary object because of address space mismatch",
[f]="directive \'\\#pragma omp (.*?)\' cannot contain more than one \'(.*?)\' clause(?:| with \'(.*?)\' name modifier| with \'source\' dependence)",
[b]=a,
[g]=a,
[c]={{nil,x,m}},
[i]=C,
[j]={"5145b1e4421a",1559743414,"[Sema] Prevent binding incompatible addr space ref to temporaries","[Sema] Prevent binding incompatible addr space ref to temporaries\n\nReferences to arbitrary address spaces can\'t always be bound to\ntemporaries. This change extends the reference binding logic to\ncheck that the address space of a temporary can be implicitly\nconverted to the address space in a reference when temporary\nmaterialization is performed.\n\nDifferential Revision: https://reviews.llvm.org/D61318\n\nllvm-svn: 362604"},
[h]={"5ec3eb11fcb8",1374203623,"OpenMP: basic support for #pragma omp parallel","OpenMP: basic support for #pragma omp parallel\n\nllvm-svn: 186647"},
[i]={{P,9744,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_ReferenceAddrspaceMismatchTemporary:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_temporary_addrspace) << DestType << Args[0]->getSourceRange();"}},
[k]={{t,739,"/// Parses clauses for \'declare simd\' directive.\n///    clause:\n///      \'inbranch\' | \'notinbranch\'\n///      \'simdlen\' \'(\' <expr> \')\'\n///      { \'uniform\' \'(\' <argument_list> \')\' }\n///      { \'aligned \'(\' <argument_list> [ \':\' <alignment> ] \')\' }\n///      { \'linear \'(\' <argument_list> [ \':\' <step> ] \')\' }\nstatic bool parseDeclareSimdClauses(Parser &P, OMPDeclareSimdDeclAttr::BranchStateTy &BS, ExprResult &SimdLen, SmallVectorImpl<Expr *> &Uniforms, SmallVectorImpl<Expr *> &Aligneds, SmallVectorImpl<Expr *> &Alignments, SmallVectorImpl<Expr *> &Linears, SmallVectorImpl<unsigned> &LinModifiers, SmallVectorImpl<Expr *> &Steps) {\n  // ...\n  while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n    // ...\n    // Parse \'inranch|notinbranch\' clauses.\n    if (OMPDeclareSimdDeclAttr::ConvertStrToBranchStateTy(ClauseName, Out)) {\n    // ...\n    } else if (ClauseName.equals(\"simdlen\")) {\n      if (SimdLen.isUsable()) {\n        P.Diag(Tok, diag::err_omp_more_one_clause) << getOpenMPDirectiveName(OMPD_declare_simd) << ClauseName << 0;"},{t,1462,"/// Parse clauses for \'#pragma omp declare variant ( variant-func-id ) clause\'.\nvoid Parser::ParseOMPDeclareVariantClauses(Parser::DeclGroupPtrTy Ptr, CachedTokens &Toks, SourceLocation Loc) {\n  // ...\n  while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n    // ...\n    if (!IsError) {\n      // ...\n      case OMPC_append_args:\n        if (!AppendArgs.empty()) {\n          Diag(AppendArgsLoc, diag::err_omp_more_one_clause) << getOpenMPDirectiveName(OMPD_declare_variant) << getOpenMPClauseName(CKind) << 0;"},{t,1834,"void Parser::ParseOMPDeclareTargetClauses(Sema::DeclareTargetContextInfo &DTCI) {\n  // ...\n  while (Tok.isNot(tok::annot_pragma_openmp_end)) {\n    // ...\n    if (HasIdentifier) {\n      // ...\n      if (DTCI.Indirect && IsIndirectClause) {\n        Diag(Tok, diag::err_omp_more_one_clause) << getOpenMPDirectiveName(OMPD_declare_target) << getOpenMPClauseName(OMPC_indirect) << 0;"},{t,3237,"/// 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_final:\n  case OMPC_num_threads:\n  case OMPC_safelen:\n  case OMPC_simdlen:\n  case OMPC_collapse:\n  case OMPC_ordered:\n  case OMPC_num_teams:\n  case OMPC_thread_limit:\n  case OMPC_priority:\n  case OMPC_grainsize:\n  case OMPC_num_tasks:\n  case OMPC_hint:\n  case OMPC_allocator:\n  case OMPC_depobj:\n  case OMPC_detach:\n  case OMPC_novariants:\n  case OMPC_nocontext:\n  case OMPC_filter:\n  case OMPC_partial:\n  case OMPC_align:\n  case OMPC_message:\n  case OMPC_ompx_dyn_cgroup_mem:\n    // OpenMP [2.5, Restrictions]\n    //  At most one num_threads clause can appear on the directive.\n    // OpenMP [2.8.1, simd construct, Restrictions]\n    //  Only one safelen  clause can appear on a simd directive.\n    //  Only one simdlen  clause can appear on a simd directive.\n    //  Only one collapse clause can appear on a simd directive.\n    // OpenMP [2.11.1, task Construct, Restrictions]\n    //  At most one if clause can appear on the directive.\n    //  At most one final clause can appear on the directive.\n    // OpenMP [teams Construct, Restrictions]\n    //  At most one num_teams clause can appear on the directive.\n    //  At most one thread_limit clause can appear on the directive.\n    // OpenMP [2.9.1, task Construct, Restrictions]\n    // At most one priority clause can appear on the directive.\n    // OpenMP [2.9.2, taskloop Construct, Restrictions]\n    // At most one grainsize clause can appear on the directive.\n    // OpenMP [2.9.2, taskloop Construct, Restrictions]\n    // At most one num_tasks clause can appear on the directive.\n    // OpenMP [2.11.3, allocate Directive, Restrictions]\n   // At most one allocator clause can appear on the directive.\n    // OpenMP 5.0, 2.10.1 task Construct, Restrictions.\n    // At most one detach clause can appear on the directive.\n    // OpenMP 5.1, 2.3.6 dispatch Construct, Restrictions.\n    // At most one novariants clause can appear on a dispatch directive.\n    // At most one nocontext clause can appear on a dispatch directive.\n    // OpenMP [5.1, error directive, Restrictions]\n    // At most one message clause can appear on the directive\n    if (!FirstClause) {\n      Diag(Tok, diag::err_omp_more_one_clause) << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0;"},{t,3270,"/// 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_default:\n  case OMPC_proc_bind:\n  case OMPC_atomic_default_mem_order:\n  case OMPC_at:\n  case OMPC_severity:\n  case OMPC_bind:\n    // OpenMP [2.14.3.1, Restrictions]\n    //  Only a single default clause may be specified on a parallel, task or\n    //  teams directive.\n    // OpenMP [2.5, parallel Construct, Restrictions]\n    //  At most one proc_bind clause can appear on the directive.\n    // OpenMP [5.0, Requires directive, Restrictions]\n    //  At most one atomic_default_mem_order clause can appear\n    //  on the directive\n    // OpenMP [5.1, error directive, Restrictions]\n    //  At most one at clause can appear on the directive\n    //  At most one severity clause can appear on the directive\n    // OpenMP 5.1, 2.11.7 loop Construct, Restrictions.\n    // At most one bind clause can appear on a loop directive.\n    if (!FirstClause) {\n      Diag(Tok, diag::err_omp_more_one_clause) << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0;"},{t,3292,"/// 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_device:\n  case OMPC_schedule:\n  case OMPC_dist_schedule:\n  case OMPC_defaultmap:\n  case OMPC_order:\n    // OpenMP [2.7.1, Restrictions, p. 3]\n    //  Only one schedule clause can appear on a loop directive.\n    // OpenMP 4.5 [2.10.4, Restrictions, p. 106]\n    //  At most one defaultmap clause can appear on the directive.\n    // OpenMP 5.0 [2.12.5, target construct, Restrictions]\n    //  At most one device clause can appear on the directive.\n    // OpenMP 5.1 [2.11.3, order clause, Restrictions]\n    //  At most one order clause may appear on a construct.\n    if ((getLangOpts().OpenMP < 50 || CKind != OMPC_defaultmap) && (CKind != OMPC_order || getLangOpts().OpenMP >= 51) && !FirstClause) {\n      Diag(Tok, diag::err_omp_more_one_clause) << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0;"},{t,3327,"/// 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_nowait:\n  case OMPC_untied:\n  case OMPC_mergeable:\n  case OMPC_read:\n  case OMPC_write:\n  case OMPC_capture:\n  case OMPC_compare:\n  case OMPC_seq_cst:\n  case OMPC_acq_rel:\n  case OMPC_acquire:\n  case OMPC_release:\n  case OMPC_relaxed:\n  case OMPC_threads:\n  case OMPC_simd:\n  case OMPC_nogroup:\n  case OMPC_unified_address:\n  case OMPC_unified_shared_memory:\n  case OMPC_reverse_offload:\n  case OMPC_dynamic_allocators:\n  case OMPC_full:\n    // OpenMP [2.7.1, Restrictions, p. 9]\n    //  Only one ordered clause can appear on a loop directive.\n    // OpenMP [2.7.1, Restrictions, C/C++, p. 4]\n    //  Only one nowait clause can appear on a for directive.\n    // OpenMP [5.0, Requires directive, Restrictions]\n    //   Each of the requires clauses can appear at most once on the directive.\n    if (!FirstClause) {\n      Diag(Tok, diag::err_omp_more_one_clause) << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0;"},{t,3336,"/// 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_update:\n    if (!FirstClause) {\n      Diag(Tok, diag::err_omp_more_one_clause) << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0;"},{t,3378,"/// 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_sizes:\n    if (!FirstClause) {\n      Diag(Tok, diag::err_omp_more_one_clause) << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0;"},{t,3391,"/// 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_destroy:\n    if (DKind != OMPD_interop) {\n      if (!FirstClause) {\n        Diag(Tok, diag::err_omp_more_one_clause) << getOpenMPDirectiveName(DKind) << getOpenMPClauseName(CKind) << 0;"},{m,5266,"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      if (FoundNameModifiers[CurNM]) {\n        S.Diag(C->getBeginLoc(), diag::err_omp_more_one_clause) << getOpenMPDirectiveName(Kind) << getOpenMPClauseName(OMPC_if) << (CurNM != OMPD_unknown) << getOpenMPDirectiveName(CurNM);"},{m,11324,"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        if ((DC && DependSourceClause) || (DOC && DoacrossSourceClause)) {\n          Diag(C->getBeginLoc(), diag::err_omp_more_one_clause) << getOpenMPDirectiveName(OMPD_ordered) << getOpenMPClauseName(DC ? OMPC_depend : OMPC_doacross) << 2;"}},
[l]={
[l]={
["clang/test/SemaOpenCLCXX/address-space-references.clcpp"]={"clang/test/SemaOpenCLCXX/address-space-references.clcpp:4:10: error: reference of type \'const __global int &\' cannot bind to a temporary object because of address space mismatch"}
[Gb]={"clang/test/OpenMP/unroll_messages.cpp:63:30: error: directive \'#pragma omp unroll\' cannot contain more than one \'partial\' clause","clang/test/OpenMP/unroll_messages.cpp:67:33: error: directive \'#pragma omp unroll\' cannot contain more than one \'partial\' clause","clang/test/OpenMP/unroll_messages.cpp:71:27: error: directive \'#pragma omp unroll\' cannot contain more than one \'full\' clause"}
}
}
},
},
["err_reference_bind_to_bitfield"]={
["err_omp_multiple_array_items_in_map_clause"]={
[d]="err_reference_bind_to_bitfield",
[j]="err_omp_multiple_array_items_in_map_clause",
[e]="%select{non-const|volatile}0 reference cannot bind to bit-field%select{| %1}2",
[b]="multiple array elements associated with the same variable are not allowed in map clauses of the same construct",
[f]={{nil,nil,{{"non-const","volatile"}," reference cannot bind to bit-field",{a,wb}}}},
[c]="multiple array elements associated with the same variable are not allowed in map clauses of the same construct",
[g]=k,
[e]=d,
[h]="(?:non\\-const|volatile) reference cannot bind to bit\\-field(?:| (.*?))",
[f]="multiple array elements associated with the same variable are not allowed in map clauses of the same construct",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"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"},
[h]={"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"},
[i]={{P,9716,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToBitfield: {\n    // ...\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_bitfield) << DestType.isVolatileQualified() << (BitField ? BitField->getDeclName() : DeclarationName()) << (BitField != nullptr) << Args[0]->getSourceRange();"}},
[k]={{m,21508,"// 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    for (; CI != CE && SI != SE; ++CI, ++SI) {\n      // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.3]\n      //  At most one list item can be an array item derived from a given\n      //  variable in map clauses of the same construct.\n      if (CurrentRegionOnly && (isa<ArraySubscriptExpr>(CI->getAssociatedExpression()) || isa<OMPArraySectionExpr>(CI->getAssociatedExpression()) || isa<OMPArrayShapingExpr>(CI->getAssociatedExpression())) && (isa<ArraySubscriptExpr>(SI->getAssociatedExpression()) || isa<OMPArraySectionExpr>(SI->getAssociatedExpression()) || isa<OMPArrayShapingExpr>(SI->getAssociatedExpression()))) {\n        SemaRef.Diag(CI->getAssociatedExpression()->getExprLoc(), diag::err_omp_multiple_array_items_in_map_clause) << CI->getAssociatedExpression()->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaObjCXX/references.mm"]={"clang/test/SemaObjCXX/references.mm:74:13: error: non-const reference cannot bind to bit-field \'bf\'"}
["clang/test/OpenMP/target_teams_map_messages.cpp"]={"clang/test/OpenMP/target_teams_map_messages.cpp:241:45: error: multiple array elements associated with the same variable are not allowed in map clauses of the same construct"}
}
}
},
},
["err_reference_bind_to_matrix_element"]={
["err_omp_negative_expression_in_clause"]={
[d]={{nil,t,"err_reference_bind_to_matrix_element"}},
[j]="err_omp_negative_expression_in_clause",
[e]={{nil,t,"%select{non-const|volatile}0 reference cannot bind to matrix element"}},
[b]="argument to \'%0\' clause must be a %select{non-negative|strictly positive}1 integer value",
[f]={{nil,t,{{"non-const","volatile"}," reference cannot bind to matrix element"}}},
[c]={{nil,nil,{"argument to \'A\' clause must be a ",{"non-negative","strictly positive"}," integer value"}}},
[g]=k,
[e]=d,
[h]="(?:non\\-const|volatile) reference cannot bind to matrix element",
[f]="argument to \'(.*?)\' clause must be a (?:non\\-negative|strictly positive) integer value",
[b]=a,
[g]=a,
[c]={{nil,t,m}},
[i]=n,
[j]={pb,1576908663,sb,ub},
[h]={"568a833f68de",1394086519,"[OPENMP] Clause \'num_threads\'","[OPENMP] Clause \'num_threads\'\n\nllvm-svn: 203087"},
[i]={{P,9733,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToMatrixElement:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_matrix_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}},
[k]={{m,16447,"static bool isNonNegativeIntegerValue(Expr *&ValExpr, Sema &SemaRef, OpenMPClauseKind CKind, bool StrictlyPositive, bool BuildCapture = false, OpenMPDirectiveKind DKind = OMPD_unknown, OpenMPDirectiveKind *CaptureRegion = nullptr, Stmt **HelperValStmt = nullptr) {\n  if (!ValExpr->isTypeDependent() && !ValExpr->isValueDependent() && !ValExpr->isInstantiationDependent()) {\n    // ...\n    // The expression must evaluate to a non-negative integer value.\n    if (std::optional<llvm::APSInt> Result = ValExpr->getIntegerConstantExpr(SemaRef.Context)) {\n      if (Result->isSigned() && !((!StrictlyPositive && Result->isNonNegative()) || (StrictlyPositive && Result->isStrictlyPositive()))) {\n        SemaRef.Diag(Loc, diag::err_omp_negative_expression_in_clause) << getOpenMPClauseName(CKind) << (StrictlyPositive ? 1 : 0) << ValExpr->getSourceRange();"},{m,16526,"ExprResult Sema::VerifyPositiveIntegerConstantInClause(Expr *E, OpenMPClauseKind CKind, bool StrictlyPositive, bool SuppressExprDiags) {\n  // ...\n  if ((StrictlyPositive && !Result.isStrictlyPositive()) || (!StrictlyPositive && !Result.isNonNegative())) {\n    Diag(E->getExprLoc(), diag::err_omp_negative_expression_in_clause) << getOpenMPClauseName(CKind) << (StrictlyPositive ? 1 : 0) << E->getSourceRange();"},{m,17293,"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 (ChunkSize) {\n    if (!ChunkSize->isValueDependent() && !ChunkSize->isTypeDependent() && !ChunkSize->isInstantiationDependent() && !ChunkSize->containsUnexpandedParameterPack()) {\n      // ...\n      // OpenMP [2.7.1, Restrictions]\n      //  chunk_size must be a loop invariant integer expression with a positive\n      //  value.\n      if (std::optional<llvm::APSInt> Result = ValExpr->getIntegerConstantExpr(Context)) {\n        if (Result->isSigned() && !Result->isStrictlyPositive()) {\n          Diag(ChunkSizeLoc, diag::err_omp_negative_expression_in_clause) << \"schedule\" << 1 << ChunkSize->getSourceRange();"},{m,22866,"OMPClause *Sema::ActOnOpenMPDistScheduleClause(OpenMPDistScheduleClauseKind Kind, Expr *ChunkSize, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation KindLoc, SourceLocation CommaLoc, SourceLocation EndLoc) {\n  // ...\n  if (ChunkSize) {\n    if (!ChunkSize->isValueDependent() && !ChunkSize->isTypeDependent() && !ChunkSize->isInstantiationDependent() && !ChunkSize->containsUnexpandedParameterPack()) {\n      // ...\n      // OpenMP [2.7.1, Restrictions]\n      //  chunk_size must be a loop invariant integer expression with a positive\n      //  value.\n      if (std::optional<llvm::APSInt> Result = ValExpr->getIntegerConstantExpr(Context)) {\n        if (Result->isSigned() && !Result->isStrictlyPositive()) {\n          Diag(ChunkSizeLoc, diag::err_omp_negative_expression_in_clause) << \"dist_schedule\" << ChunkSize->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/matrix-type-operators.cpp"]={"clang/test/SemaCXX/matrix-type-operators.cpp:236:10: error: non-const reference cannot bind to matrix element"}
[Gb]={"clang/test/OpenMP/unroll_messages.cpp:59:30: error: argument to \'partial\' clause must be a strictly positive integer value","clang/test/OpenMP/unroll_messages.cpp:119:30: error: argument to \'partial\' clause must be a strictly positive integer value"}
}
}
},
},
["err_reference_bind_to_vector_element"]={
["err_omp_no_clause_for_directive"]={
[d]="err_reference_bind_to_vector_element",
[j]={{nil,P,"err_omp_no_clause_for_directive"}},
[e]="%select{non-const|volatile}0 reference cannot bind to vector element",
[b]={{nil,P,"expected at least one %0 clause for \'#pragma omp %1\'"}},
[f]={{nil,nil,{{"non-const","volatile"}," reference cannot bind to vector element"}}},
[c]={{nil,P,"expected at least one A clause for \'#pragma omp B\'"}},
[g]=k,
[e]=d,
[h]="(?:non\\-const|volatile) reference cannot bind to vector element",
[f]="expected at least one (.*?) clause for \'\\#pragma omp (.*?)\'",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,P,n}},
[j]={"8abde4b447db",1264958329,"Diagnose binding a non-const reference to a vector element.","Diagnose binding a non-const reference to a vector element.\n\nllvm-svn: 94963"},
[h]={"95b64a982694",1496160004,"[OPENMP] Allow \'use_device_ptr\' clause in \'target data\' alone.","[OPENMP] Allow \'use_device_ptr\' clause in \'target data\' alone.\n\nAccording to OpenMP 5.0 at least one \'map\' or \'use_device_ptr\' clause\nmust be specified for \'target data\' construct. Patch adds support for\nthis feature.\n\nllvm-svn: 304216"},
[i]={{P,9727,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_NonConstLValueReferenceBindingToVectorElement:\n    S.Diag(Kind.getLocation(), diag::err_reference_bind_to_vector_element) << DestType.isVolatileQualified() << Args[0]->getSourceRange();"}},
[k]={{m,3475,"void Sema::ActOnOpenMPAssumesDirective(SourceLocation Loc, OpenMPDirectiveKind DKind, ArrayRef<std::string> Assumptions, bool SkippedClauses) {\n  if (!SkippedClauses && Assumptions.empty())\n    Diag(Loc, diag::err_omp_no_clause_for_directive) << llvm::omp::getAllAssumeClauseOptions() << llvm::omp::getOpenMPDirectiveName(DKind);"},{m,13211,"StmtResult Sema::ActOnOpenMPTargetDataDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // OpenMP [2.12.2, target data Construct, Restrictions]\n  // At least one map, use_device_addr or use_device_ptr clause must appear on\n  // the directive.\n  if (!hasClauses(Clauses, OMPC_map, OMPC_use_device_ptr) && (LangOpts.OpenMP < 50 || !hasClauses(Clauses, OMPC_use_device_addr))) {\n    // ...\n    Diag(StartLoc, diag::err_omp_no_clause_for_directive) << Expected << getOpenMPDirectiveName(OMPD_target_data);"},{m,13250,"StmtResult Sema::ActOnOpenMPTargetEnterDataDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc, Stmt *AStmt) {\n  // ...\n  // OpenMP [2.10.2, Restrictions, p. 99]\n  // At least one map clause must appear on the directive.\n  if (!hasClauses(Clauses, OMPC_map)) {\n    Diag(StartLoc, diag::err_omp_no_clause_for_directive) << \"\'map\'\" << getOpenMPDirectiveName(OMPD_target_enter_data);"},{m,13287,"StmtResult Sema::ActOnOpenMPTargetExitDataDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc, Stmt *AStmt) {\n  // ...\n  // OpenMP [2.10.3, Restrictions, p. 102]\n  // At least one map clause must appear on the directive.\n  if (!hasClauses(Clauses, OMPC_map)) {\n    Diag(StartLoc, diag::err_omp_no_clause_for_directive) << \"\'map\'\" << getOpenMPDirectiveName(OMPD_target_exit_data);"},{m,17571,"StmtResult Sema::ActOnOpenMPInteropDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // OpenMP 5.1 [2.15.1, interop Construct, Restrictions]\n  // At least one action-clause must appear on a directive.\n  if (!hasClauses(Clauses, OMPC_init, OMPC_use, OMPC_destroy, OMPC_nowait)) {\n    // ...\n    Diag(StartLoc, diag::err_omp_no_clause_for_directive) << Expected << getOpenMPDirectiveName(OMPD_interop);"}},
[l]={
[l]={
["clang/test/SemaCXX/references.cpp"]={"clang/test/SemaCXX/references.cpp:149:8: error: non-const reference cannot bind to vector element","clang/test/SemaCXX/references.cpp:153:8: error: non-const reference cannot bind to vector element"}
["clang/test/OpenMP/target_exit_data_nowait_messages.cpp"]={"clang/test/OpenMP/target_exit_data_nowait_messages.cpp:11:3: error: expected at least one \'map\' clause for \'#pragma omp target exit data\'"}
}
}
},
},
["err_reference_capture_with_reference_default"]={
["err_omp_no_dsa_for_variable"]={
[d]="err_reference_capture_with_reference_default",
[j]="err_omp_no_dsa_for_variable",
[e]="\'&\' cannot precede a capture when the capture default is \'&\'",
[b]="variable %0 must have explicitly specified data sharing attributes",
[f]="\'&\' cannot precede a capture when the capture default is \'&\'",
[c]="variable A must have explicitly specified data sharing attributes",
[g]=k,
[e]=d,
[h]="\'&\' cannot precede a capture when the capture default is \'&\'",
[f]="variable (.*?) must have explicitly specified data sharing attributes",
[b]=a,
[g]=a,
[c]="Lambda Issue",
[i]=n,
[j]={"44803326d4e8",1325898497,"Lambdas: semantic analysis of explicit captures.","Lambdas: semantic analysis of explicit captures.\n\nThis patch (and some of my other commits related to lambdas) is heavily based off of John Freeman\'s work-in-progress patches.\n\nllvm-svn: 147706"},
[h]={"d4183dabd7a9",1378212952,"OpenMP: Data-sharing attributes analysis and clause \'shared\'","OpenMP: Data-sharing attributes analysis and clause \'shared\'\n\nllvm-svn: 189795"},
[i]={{"clang/lib/Sema/SemaLambda.cpp",1117,"void Sema::ActOnLambdaExpressionAfterIntroducer(LambdaIntroducer &Intro, Scope *CurrentScope) {\n  // ...\n  for (auto C = Intro.Captures.begin(), E = Intro.Captures.end(); C != E; PrevCaptureLoc = C->Loc, ++C) {\n    // ...\n    if (C->Init.isUsable()) {\n    // ...\n    } else {\n      // ...\n      // C++11 [expr.prim.lambda]p8:\n      //  If a lambda-capture includes a capture-default that is &, the\n      //  identifiers in the lambda-capture shall not be preceded by &.\n      //  If a lambda-capture includes a capture-default that is =, [...]\n      //  each identifier it contains shall be preceded by &.\n      if (C->Kind == LCK_ByRef && Intro.Default == LCD_ByRef) {\n       Diag(C->Loc, diag::err_reference_capture_with_reference_default) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"}},
[k]={{m,6794,"StmtResult Sema::ActOnOpenMPExecutableDirective(OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName, OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  for (const auto &P : VarsWithInheritedDSA) {\n    // ...\n    if (DSAStack->getDefaultDSA() == DSA_none || DSAStack->getDefaultDSA() == DSA_private || DSAStack->getDefaultDSA() == DSA_firstprivate) {\n     Diag(P.second->getExprLoc(), diag::err_omp_no_dsa_for_variable) << P.first << P.second->getSourceRange();"}},
[l]={
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:13:16: error: \'&\' cannot precede a capture when the capture default is \'&\'","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:25:14: error: \'&\' cannot precede a capture when the capture default is \'&\'"}
["clang/test/OpenMP/parallel_messages.cpp"]={"clang/test/OpenMP/parallel_messages.cpp:66:7: error: variable \'argc\' must have explicitly specified data sharing attributes","clang/test/OpenMP/parallel_messages.cpp:67:7: error: variable \'a\' must have explicitly specified data sharing attributes"}
}
}
},
},
["err_reference_has_multiple_inits"]={
["err_omp_no_more_if_clause"]={
[d]="err_reference_has_multiple_inits",
[j]="err_omp_no_more_if_clause",
[e]="reference cannot be initialized with multiple values",
[b]="no more \'if\' clause is allowed",
[f]="reference cannot be initialized with multiple values",
[c]="no more \'if\' clause is allowed",
[g]=k,
[e]=d,
[h]="reference cannot be initialized with multiple values",
[f]="no more \'if\' clause is allowed",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"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"},
[h]={"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"},
[i]={{P,9569,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_TooManyInitsForReference:\n    // FIXME: Customize for the initialized entity?\n   if (Args.empty()) {\n    // ...\n    } else // FIXME: diagnostic below could be better!\n      S.Diag(Kind.getLocation(), diag::err_reference_has_multiple_inits) << SourceRange(Args.front()->getBeginLoc(), Args.back()->getEndLoc());"}}
[k]={{m,5294,"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      S.Diag(FoundNameModifiers[OMPD_unknown]->getBeginLoc(), diag::err_omp_no_more_if_clause);"}},
},
["err_reference_pipe_type"]={
[d]="err_reference_pipe_type",
[e]="pipes packet types cannot be of reference type",
[f]="pipes packet types cannot be of reference type",
[g]=k,
[h]="pipes packet types cannot be of reference type",
[b]=a,
[c]=m,
[j]={"9c14e282112c",1452343997,"[OpenCL] Pipe type support","[OpenCL] Pipe type support\n\nSummary:\nSupport for OpenCL 2.0 pipe type.\nThis is a bug-fix version for bader\'s patch reviews.llvm.org/D14441\n\n\nReviewers: pekka.jaaskelainen, Anastasia\n\nSubscribers: bader, Anastasia, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D15603\n\nllvm-svn: 257254"},
[i]={{D,10746,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  for (const ParmVarDecl *Param : NewFD->parameters()) {\n    // ...\n    // OpenCL 2.0 pipe restrictions forbids pipe packet types to be non-value\n    // types.\n    if (getLangOpts().getOpenCLCompatibleVersion() >= 200) {\n      if (const PipeType *PipeTy = PT->getAs<PipeType>()) {\n        // ...\n        if (ElemTy->isReferenceType() || ElemTy->isPointerType()) {\n          Diag(Param->getTypeSpecStartLoc(), diag::err_reference_pipe_type);"}},
[l]={
[l]={
["clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl"]={"clang/test/SemaOpenCL/invalid-pipes-cl2.0.cl:22:17: error: pipes packet types cannot be of reference type"}
["clang/test/OpenMP/target_data_if_messages.cpp"]={"clang/test/OpenMP/target_data_if_messages.cpp:38:61: error: no more \'if\' clause is allowed"}
}
}
},
},
["err_reference_to_function_with_unsatisfied_constraints"]={
["err_omp_non_lvalue_in_map_or_motion_clauses"]={
[d]={{nil,o,"err_reference_to_function_with_unsatisfied_constraints"}},
[j]={{nil,o,"err_omp_non_lvalue_in_map_or_motion_clauses"}},
[e]={{nil,o,"invalid reference to function %0: constraints not satisfied"}},
[b]={{nil,o,"expected addressable lvalue in \'%0\' clause"}},
[f]={{nil,o,"invalid reference to function A: constraints not satisfied"}},
[c]={{nil,o,"expected addressable lvalue in \'A\' clause"}},
[g]=k,
[e]=d,
[h]="invalid reference to function (.*?)\\: constraints not satisfied",
[f]="expected addressable lvalue in \'(.*?)\' clause",
[b]=a,
[g]=a,
[c]={{nil,o,m}},
[i]={{nil,o,n}},
[j]={"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"},
[h]={I,1576908663,H,F},
[i]={{O,297,"/// 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 (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {\n    // ...\n    // [expr.prim.id]p4\n    //  A program that refers explicitly or implicitly to a function with a\n    //  trailing requires-clause whose constraint-expression is not satisfied,\n   //  other than to declare it, is ill-formed. [...]\n    //\n    // See if this is a function with constraints that need to be satisfied.\n    // Check this before deducing the return type, as it might instantiate the\n    // definition.\n    if (!SkipTrailingRequiresClause && FD->getTrailingRequiresClause()) {\n      // ...\n      if (!Satisfaction.IsSatisfied) {\n        Diag(Loc, diag::err_reference_to_function_with_unsatisfied_constraints) << D;"}},
[k]={{m,21124,"class MapBaseChecker final : public StmtVisitor<MapBaseChecker, bool> {\n // ...\n void emitErrorMsg() {\n    // If nothing else worked, this is not a valid map clause expression.\n   if (SemaRef.getLangOpts().OpenMP < 50) {\n   // ...\n    } else {\n     SemaRef.Diag(ELoc, diag::err_omp_non_lvalue_in_map_or_motion_clauses) << getOpenMPClauseName(CKind) << ERange;"},{m,21914,"// 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 (!RE->isLValue()) {\n     if (SemaRef.getLangOpts().OpenMP < 50) {\n      // ...\n      } else {\n        SemaRef.Diag(ELoc, diag::err_omp_non_lvalue_in_map_or_motion_clauses) << getOpenMPClauseName(CKind) << RE->getSourceRange();"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp"]={"clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:10:11: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:11:29: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:12:31: error: invalid reference to function \'f\': constraints not satisfied","clang/test/SemaCXX/cxx20-check-fptr-constraints.cpp:13:20: error: invalid reference to function \'f\': constraints not satisfied"}
["clang/test/OpenMP/target_update_from_messages.cpp"]={"clang/test/OpenMP/target_update_from_messages.cpp:172:32: error: expected addressable lvalue in \'from\' clause","clang/test/OpenMP/target_update_from_messages.cpp:110:32: error: expected addressable lvalue in \'from\' clause","clang/test/OpenMP/target_update_from_messages.cpp:115:32: error: expected addressable lvalue in \'from\' clause","clang/test/OpenMP/target_update_from_messages.cpp:110:32: error: expected addressable lvalue in \'from\' clause","clang/test/OpenMP/target_update_from_messages.cpp:115:32: error: expected addressable lvalue in \'from\' clause"}
}
}
},
},
["err_reference_to_local_in_enclosing_context"]={
["err_omp_non_pointer_type_array_shaping_base"]={
[d]="err_reference_to_local_in_enclosing_context",
[j]={{nil,o,"err_omp_non_pointer_type_array_shaping_base"}},
[e]="reference to local %select{variable|binding}1 %0 declared in enclosing %select{%3|block literal|lambda expression|context}2",
[b]={{nil,o,"expected expression with a pointer to a complete type as a base of an array shaping operation"}},
[f]={{nil,nil,{"reference to local ",{"variable","binding"}," A declared in enclosing ",{"D","block literal","lambda expression","context"}}}},
[c]={{nil,o,"expected expression with a pointer to a complete type as a base of an array shaping operation"}},
[g]=k,
[e]=d,
[h]="reference to local (?:variable|binding) (.*?) declared in enclosing (?:(.*?)|block literal|lambda expression|context)",
[f]="expected expression with a pointer to a complete type as a base of an array shaping operation",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,o,n}},
[j]={"1879f1069b60",1471228463,"Disable lambda-capture of decomposition declaration bindings for now, until CWG","Disable lambda-capture of decomposition declaration bindings for now, until CWG\nagrees on how they\'re supposed to work.\n\nllvm-svn: 278648"},
[h]={I,1576908663,H,F},
[i]={{O,19081,"void diagnoseUncapturableValueReferenceOrBinding(Sema &S, SourceLocation loc, ValueDecl *var) {\n  // ...\n  S.Diag(loc, diag::err_reference_to_local_in_enclosing_context) << var << ValueKind << ContextKind << VarDC;"}},
[k]={{N,5475,"ExprResult Sema::ActOnOMPArrayShapingExpr(Expr *Base, SourceLocation LParenLoc, SourceLocation RParenLoc, ArrayRef<Expr *> Dims, ArrayRef<SourceRange> Brackets) {\n  // ...\n  if (!BaseTy->isPointerType() || (!Base->isTypeDependent() && BaseTy->getPointeeType()->isIncompleteType()))\n    return ExprError(Diag(Base->getExprLoc(), diag::err_omp_non_pointer_type_array_shaping_base) << Base->getSourceRange());"}},
[l]={
[l]={
["clang/test/CXX/class/class.local/p1.cpp"]={"clang/test/CXX/class/class.local/p1.cpp:11:22: error: reference to local variable \'x\' declared in enclosing function \'f\'"}
[Eb]={"clang/test/OpenMP/task_affinity_messages.cpp:59:34: error: expected expression with a pointer to a complete type as a base of an array shaping operation","clang/test/OpenMP/task_affinity_messages.cpp:60:34: error: expected expression with a pointer to a complete type as a base of an array shaping operation"}
}
}
},
},
["err_reference_to_void"]={
["err_omp_nonpredefined_allocator_without_traits"]={
[d]="err_reference_to_void",
[j]={{nil,o,"err_omp_nonpredefined_allocator_without_traits"}},
[e]="cannot form a reference to \'void\'",
[b]={{nil,o,"non-predefined allocator must have traits specified"}},
[f]="cannot form a reference to \'void\'",
[c]={{nil,o,"non-predefined allocator must have traits specified"}},
[g]=k,
[e]=d,
[h]="cannot form a reference to \'void\'",
[f]="non\\-predefined allocator must have traits specified",
[b]=a,
[g]=a,
[c]=m,
[i]={{nil,o,n}},
[j]={M,1237025389,L,N},
[h]={I,1576908663,H,F},
[i]={{ob,2270,"/// 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 // C++ [dcl.ref]p1:\n //   A declarator that specifies the type \"reference to cv void\"\n //   is ill-formed.\n if (T->isVoidType()) {\n   Diag(Loc, diag::err_reference_to_void);"}},
[k]={{m,23923,"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     // Non-predefined allocators appearing in a uses_allocators clause must\n     // have traits specified.\n     if (!IsPredefinedAllocator && !D.AllocatorTraits) {\n       Diag(D.Allocator->getExprLoc(), diag::err_omp_nonpredefined_allocator_without_traits);"}},
[l]={
[l]={
["clang/test/SemaTemplate/metafun-apply.cpp"]={"clang/test/SemaTemplate/metafun-apply.cpp:13:14: error: cannot form a reference to \'void\'"}
["clang/test/OpenMP/target_uses_allocators_messages.cpp"]={"clang/test/OpenMP/target_uses_allocators_messages.cpp:39:36: error: non-predefined allocator must have traits specified","clang/test/OpenMP/target_uses_allocators_messages.cpp:41:36: error: non-predefined allocator must have traits specified","clang/test/OpenMP/target_uses_allocators_messages.cpp:43:36: error: non-predefined allocator must have traits specified"}
}
}
},
},
["err_reference_var_requires_init"]={
["err_omp_not_for"]={
[d]="err_reference_var_requires_init",
[j]="err_omp_not_for",
[e]="declaration of reference variable %0 requires an initializer",
[b]="%select{statement after \'#pragma omp %1\' must be a for loop|expected %2 for loops after \'#pragma omp %1\'%select{|, but found only %4}3}0",
[f]="declaration of reference variable A requires an initializer",
[c]={{nil,nil,{{"statement after \'#pragma omp B\' must be a for loop",{"expected C for loops after \'#pragma omp B\'",{a,", but found only E"}}}}}},
[g]=k,
[e]=d,
[h]="declaration of reference variable (.*?) requires an initializer",
[f]="(?:statement after \'\\#pragma omp (.*?)\' must be a for loop|expected (.*?) for loops after \'\\#pragma omp (.*?)\'(?:|, but found only (.*?)))",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={q,1236199783,r,s},
[h]={"1b59ab568333",1393489752,"[OPENMP] First changes for Parsing and Sema for \'omp simd\' directive support","[OPENMP] First changes for Parsing and Sema for \'omp simd\' directive support\n\nllvm-svn: 202360"},
[i]={{D,13842,"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 reference type.\n   if (Type->isReferenceType()) {\n     Diag(Var->getLocation(), diag::err_reference_var_requires_init) << Var << SourceRange(Var->getLocation(), Var->getLocation());"}},
[k]={{m,9205,"/// Called on a for stmt to check and extract its iteration space\n/// for further processing (such as collapsing).\nstatic bool checkOpenMPIterationSpace(OpenMPDirectiveKind DKind, Stmt *S, Sema &SemaRef, DSAStackTy &DSA, unsigned CurrentNestedLoopCount, unsigned NestedLoopCount, unsigned TotalNestedLoopCount, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, llvm::MutableArrayRef<LoopIterationSpace> ResultIterSpaces, llvm::MapVector<const Expr *, DeclRefExpr *> &Captures) {\n // ...\n // Ranged for is supported only in OpenMP 5.0.\n if (!For && (SemaRef.LangOpts.OpenMP <= 45 || !CXXFor)) {\n   SemaRef.Diag(S->getBeginLoc(), diag::err_omp_not_for) << (CollapseLoopCountExpr != nullptr || OrderedLoopCountExpr != nullptr) << getOpenMPDirectiveName(DKind) << TotalNestedLoopCount << (CurrentNestedLoopCount > 0) << CurrentNestedLoopCount;"}},
[l]={
[l]={
["clang/test/SemaTemplate/instantiate-member-template.cpp"]={"clang/test/SemaTemplate/instantiate-member-template.cpp:72:21: error: declaration of reference variable \'value\' requires an initializer"}
[Gb]={"clang/test/OpenMP/unroll_messages.cpp:6:3: error: statement after \'#pragma omp unroll\' must be a for loop","clang/test/OpenMP/unroll_messages.cpp:10:5: error: statement after \'#pragma omp unroll\' must be a for loop","clang/test/OpenMP/unroll_messages.cpp:88:3: error: statement after \'#pragma omp for\' must be a for loop","clang/test/OpenMP/unroll_messages.cpp:93:3: error: statement after \'#pragma omp for\' must be a for loop","clang/test/OpenMP/unroll_messages.cpp:98:3: error: statement after \'#pragma omp unroll\' must be a for loop","clang/test/OpenMP/unroll_messages.cpp:103:3: error: statement after \'#pragma omp tile\' must be a for loop","clang/test/OpenMP/unroll_messages.cpp:110:5: error: expected 2 for loops after \'#pragma omp for\', but found only 1"}
}
}
},
},
["err_reference_without_init"]={
["err_omp_not_integral"]={
[d]="err_reference_without_init",
[j]="err_omp_not_integral",
[e]="reference to type %0 requires an initializer",
[b]="expression must have integral or unscoped enumeration type, not %0",
[f]="reference to type A requires an initializer",
[c]="expression must have integral or unscoped enumeration type, not A",
[g]=k,
[e]=d,
[h]="reference to type (.*?) requires an initializer",
[f]="expression must have integral or unscoped enumeration type, not (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"7ae2d7758f3f",1264929171,"Rework base and member initialization in constructors, with several","Rework base and member initialization in constructors, with several\n(necessarily simultaneous) changes:\n\n  - CXXBaseOrMemberInitializer now contains only a single initializer\n    rather than a set of initialiation arguments + a constructor. The\n    single initializer covers all aspects of initialization, including\n    constructor calls as necessary but also cleanup of temporaries\n    created by the initializer (which we never handled\n    before!).\n\n  - Rework + simplify code generation for CXXBaseOrMemberInitializers,\n    since we can now just emit the initializer as an initializer.\n\n  - Switched base and member initialization over to the new\n    initialization code (InitializationSequence), so that it\n\n  - Improved diagnostics for the new initialization code when\n    initializing bases and members, to match the diagnostics produced\n    by the previous (special-purpose) code.\n\n  - Simplify the representation of type-checked constructor initializers in\n    templates; instead of keeping the fully-type-checked AST, which is\n    rather hard to undo at template instantiation time, throw away the\n    type-checked AST and store the raw expressions in the AST. This\n    simplifies instantiation, but loses a little but of information in\n    the AST.\n\n  - When type-checking implicit base or member initializers within a\n    dependent context, don\'t add the generated initializers into the\n    AST, because they\'ll look like they were explicit.\n\n  - Record in CXXConstructExpr when the constructor call is to\n  initialize a base class, so that CodeGen does not have to infer it\n  from context. This ensures that we call the right kind of\n  constructor.\n\nThere are also a few \"opportunity\" fixes here that were needed to not\nregress, for example:\n\n  - Diagnose default-initialization of a const-qualified class that\n    does not have a user-declared default constructor. We had this\n    diagnostic specifically for bases and members, but missed it for\n    variables. That\'s fixed now.\n\n  - When defining the implicit constructors, destructor, and\n    copy-assignment operator, set the CurContext to that constructor\n    when we\'re defining the body.\n\nllvm-svn: 94952"},
[h]={"568a833f68de",1394086519,"[OPENMP] Clause \'num_threads\'","[OPENMP] Clause \'num_threads\'\n\nllvm-svn: 203087"},
[i]={{P,9431,"/// Somewhere within T there is an uninitialized reference subobject.\n/// Dig it out and diagnose it.\nstatic bool DiagnoseUninitializedReference(Sema &S, SourceLocation Loc, QualType T) {\n  if (T->isReferenceType()) {\n    S.Diag(Loc, diag::err_reference_without_init) << T.getNonReferenceType();"}},
[k]={{m,16393,"ExprResult Sema::PerformOpenMPImplicitIntegerConversion(SourceLocation Loc, Expr *Op) {\n  // ...\n  class IntConvertDiagnoser : public ICEConvertDiagnoser {\n   // ...\n    SemaDiagnosticBuilder diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_omp_not_integral) << T; }"}},
[l]={
[l]={
["clang/test/SemaObjCXX/property-synthesis-error.mm"]={"clang/test/SemaObjCXX/property-synthesis-error.mm:94:47: error: reference to type \'int\' requires an initializer"}
["clang/test/OpenMP/teams_num_teams_messages.cpp"]={"clang/test/OpenMP/teams_num_teams_messages.cpp:58:29: error: expression must have integral or unscoped enumeration type, not \'double\'","clang/test/OpenMP/teams_num_teams_messages.cpp:87:30: error: expression must have integral or unscoped enumeration type, not \'char *\'","clang/test/OpenMP/teams_num_teams_messages.cpp:111:30: error: expression must have integral or unscoped enumeration type, not \'double\'","clang/test/OpenMP/teams_num_teams_messages.cpp:40:29: error: expression must have integral or unscoped enumeration type, not \'char *\'","clang/test/OpenMP/teams_num_teams_messages.cpp:58:29: error: expression must have integral or unscoped enumeration type, not \'double\'"}
}
}
},
},
["err_regparm_mismatch"]={
["err_omp_not_resolved_reduction_identifier"]={
[d]="err_regparm_mismatch",
[j]="err_omp_not_resolved_reduction_identifier",
[e]="function declared with regparm(%0) attribute was previously declared %plural{0:without the regparm|:with the regparm(%1)}1 attribute",
[b]="unable to resolve declare reduction construct for type %0",
[f]={{nil,nil,{"function declared with regparm(A) attribute was previously declared ",{"without the regparm","with the regparm(B)"}," attribute"}}},
[c]="unable to resolve declare reduction construct for type A",
[g]=k,
[e]=d,
[h]="function declared with regparm\\((.*?)\\) attribute was previously declared (?:without the regparm|with the regparm\\((.*?)\\)) attribute",
[f]="unable to resolve declare reduction construct for type (.*?)",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"77e274fbc67d",1276896625,"Merge the \"regparm\" attribute from a previous declaration of a","Merge the \"regparm\" attribute from a previous declaration of a\nfunction to redeclarations of that function. Fixes PR7025.\n\nllvm-svn: 106317"},
[h]={"a839dddf9232",1458209986,"[OPENMP 4.0] Use \'declare reduction\' constructs in \'reduction\' clauses.","[OPENMP 4.0] Use \'declare reduction\' constructs in \'reduction\' clauses.\n\nOpenMP 4.0 allows to define custom reduction operations using \'#pragma\nomp declare reduction\' construct. Patch allows to use this custom\ndefined reduction operations in \'reduction\' clauses.\n\nllvm-svn: 263701"},
[i]={{D,3831,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'. Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  // Merge regparm attribute.\n  if (OldTypeInfo.getHasRegParm() != NewTypeInfo.getHasRegParm() || OldTypeInfo.getRegParm() != NewTypeInfo.getRegParm()) {\n    if (NewTypeInfo.getHasRegParm()) {\n      Diag(New->getLocation(), diag::err_regparm_mismatch) << NewType->getRegParmType() << OldType->getRegParmType();"}},
[k]={{m,18982,"static ExprResult buildDeclareReductionRef(Sema &SemaRef, SourceLocation Loc, SourceRange Range, Scope *S, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, QualType Ty, CXXCastPath &BasePath, Expr *UnresolvedReduction) {\n  // ...\n  if (ReductionIdScopeSpec.isSet()) {\n    SemaRef.Diag(Loc, diag::err_omp_not_resolved_reduction_identifier) << Ty << Range;"}},
[l]={
[l]={
["clang/test/Sema/attr-regparm.c"]={"clang/test/Sema/attr-regparm.c:11:34: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute","clang/test/Sema/attr-regparm.c:14:26: error: function declared with regparm(2) attribute was previously declared with the regparm(3) attribute"}
["clang/test/OpenMP/declare_reduction_messages.cpp"]={"clang/test/OpenMP/declare_reduction_messages.cpp:151:65: error: unable to resolve declare reduction construct for type \'A\'"}
}
}
},
},
["err_relocatable_without_isysroot"]={
["err_omp_nowait_clause_without_depend"]={
[d]="err_relocatable_without_isysroot",
[j]={{nil,w,"err_omp_nowait_clause_without_depend"}},
[e]="must specify system root with -isysroot when building a relocatable PCH file",
[b]={{nil,w,"directive \'#pragma omp taskwait\' cannot use \'nowait\' clause without \'depend\' clause"}},
[f]="must specify system root with -isysroot when building a relocatable PCH file",
[c]={{nil,w,"directive \'#pragma omp taskwait\' cannot use \'nowait\' clause without \'depend\' clause"}},
[g]=k,
[e]=d,
[h]="must specify system root with \\-isysroot when building a relocatable PCH file",
[f]="directive \'\\#pragma omp taskwait\' cannot use \'nowait\' clause without \'depend\' clause",
[b]=a,
[g]=a,
[c]=S,
[i]={{nil,w,n}},
[j]={"ea68af43e80d",1282067738,"Fix a typo in a diag name.","Fix a typo in a diag name.\n\nllvm-svn: 111257"},
[h]={"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"},
[i]={{"clang/lib/Frontend/FrontendActions.cpp",156,"bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI, std::string &Sysroot) {\n  // ...\n  if (CI.getFrontendOpts().RelocatablePCH && Sysroot.empty()) {\n    CI.getDiagnostics().Report(diag::err_relocatable_without_isysroot);"}}
[k]={{m,11187,"StmtResult Sema::ActOnOpenMPTaskwaitDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  if (NowaitC && !HasDependC) {\n    Diag(StartLoc, diag::err_omp_nowait_clause_without_depend);"}}
},
},
["err_repeat_attribute"]={
["err_omp_once_referenced"]={
[d]="err_repeat_attribute",
[j]="err_omp_once_referenced",
[e]="%0 attribute cannot be repeated",
[b]="variable can appear only once in OpenMP \'%0\' clause",
[f]="A attribute cannot be repeated",
[c]="variable can appear only once in OpenMP \'A\' clause",
[g]=k,
[e]=d,
[h]="(.*?) attribute cannot be repeated",
[f]="variable can appear only once in OpenMP \'(.*?)\' clause",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"54a025488774",1259122827,"Parse C++ member check attributes - base_check, hiding, and override.","Parse C++ member check attributes - base_check, hiding, and override.\nThe attributes are currently ignored.\n\nllvm-svn: 89837"},
[h]={"c5e025831ba7",1402902515,"[OPENMP] Initial support of \'reduction\' clause","[OPENMP] Initial support of \'reduction\' clause\n\nllvm-svn: 211007"},
[i]={{dc,2287,"// PS3 PPU-specific.\nstatic void handleVecReturnAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (VecReturnAttr *A = D->getAttr<VecReturnAttr>()) {\n   S.Diag(AL.getLoc(), diag::err_repeat_attribute) << A;"}},
[k]={{m,19365,"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_reduction) {\n       S.Diag(ELoc, diag::err_omp_once_referenced) << getOpenMPClauseName(ClauseKind);"}},
[l]={
[l]={
["clang/test/SemaCXX/cxx-altivec.cpp"]={"clang/test/SemaCXX/cxx-altivec.cpp:5:45: error: \'vecreturn\' attribute cannot be repeated"}
["clang/test/OpenMP/taskloop_reduction_messages_attr.cpp"]={"clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:287:61: error: variable can appear only once in OpenMP \'reduction\' clause","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:182:61: error: variable can appear only once in OpenMP \'reduction\' clause","clang/test/OpenMP/taskloop_reduction_messages_attr.cpp:182:61: error: variable can appear only once in OpenMP \'reduction\' clause"}
}
}
},
},
["err_require_constant_init_failed"]={
["err_omp_once_referenced_in_target_update"]={
[d]="err_require_constant_init_failed",
[j]="err_omp_once_referenced_in_target_update",
[e]="variable does not have a constant initializer",
[b]="variable can appear only once in OpenMP \'target update\' construct",
[f]="variable does not have a constant initializer",
[c]="variable can appear only once in OpenMP \'target update\' construct",
[g]=k,
[e]=d,
[h]="variable does not have a constant initializer",
[f]="variable can appear only once in OpenMP \'target update\' construct",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization.","Implement __attribute__((require_constant_initialization)) for safe static initialization.\n\nSummary:\nThis attribute specifies expectations about the initialization of static and\nthread local variables. Specifically that the variable has a\n[constant initializer](http://en.cppreference.com/w/cpp/language/constant_initialization)\naccording to the rules of [basic.start.static]. Failure to meet this expectation\nwill result in an error.\n\nStatic objects with constant initializers avoid hard-to-find bugs caused by\nthe indeterminate order of dynamic initialization. They can also be safely\nused by other static constructors across translation units.\n\nThis attribute acts as a compile time assertion that the requirements\nfor constant initialization have been met. Since these requirements change\nbetween dialects and have subtle pitfalls it\'s important to fail fast instead\nof silently falling back on dynamic initialization.\n\n```c++\n  // -std=c++14\n  #define SAFE_STATIC __attribute__((require_constant_initialization)) static\n  struct T {\n    constexpr T(int) {}\n    ~T();\n  };\n SAFE_STATIC T x = {42}; // OK.\n SAFE_STATIC T y = 42; // error: variable does not have a constant initializer\n // copy initialization is not a constant expression on a non-literal type.\n```\nThis attribute can only be applied to objects with static or thread-local storage\nduration.\n\nReviewers: majnemer, rsmith, aaron.ballman\n\nSubscribers: jroelofs, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D23385\n\nllvm-svn: 280516"},
[h]={"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"},
[i]={{D,14227,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // ...\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    // ...\n    if (HasConstInit) {\n    // ...\n    } else if (var->isConstexpr()) {\n   // ...\n   } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n     // ...\n     Diag(var->getLocation(), diag::err_require_constant_init_failed) << Init->getSourceRange();"}},
[k]={{m,21560,"// 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, p.4]\n   // List items of map clauses in the same construct must not share\n   // original storage.\n   //\n   // If the expressions are exactly the same or one is a subset of the\n   // other, it means they are sharing storage.\n   if (CI == CE && SI == SE) {\n      if (CurrentRegionOnly) {\n       if (CKind == OMPC_map) {\n        // ...\n       } else {\n          // ...\n         SemaRef.Diag(ELoc, diag::err_omp_once_referenced_in_target_update) << ERange;"},{m,21647,"// 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, p.4]\n    //  List items of map clauses in the same construct must not share\n    // original storage.\n    //\n    // An expression is a subset of the other.\n    if (CurrentRegionOnly && (CI == CE || SI == SE)) {\n     if (CKind == OMPC_map) {\n      // ...\n     } else {\n       // ...\n       SemaRef.Diag(ELoc, diag::err_omp_once_referenced_in_target_update) << ERange;"}},
[l]={
[l]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp:6:23: error: variable does not have a constant initializer"}
["clang/test/OpenMP/target_update_from_messages.cpp"]={"clang/test/OpenMP/target_update_from_messages.cpp:177:39: error: variable can appear only once in OpenMP \'target update\' construct","clang/test/OpenMP/target_update_from_messages.cpp:178:41: error: variable can appear only once in OpenMP \'target update\' construct","clang/test/OpenMP/target_update_from_messages.cpp:121:39: error: variable can appear only once in OpenMP \'target update\' construct","clang/test/OpenMP/target_update_from_messages.cpp:122:41: error: variable can appear only once in OpenMP \'target update\' construct","clang/test/OpenMP/target_update_from_messages.cpp:121:39: error: variable can appear only once in OpenMP \'target update\' construct","clang/test/OpenMP/target_update_from_messages.cpp:122:41: error: variable can appear only once in OpenMP \'target update\' construct"}
}
}
},
},
["err_requires_clause_inside_parens"]={
["err_omp_one_defaultmap_each_category"]={
[d]={{nil,o,"err_requires_clause_inside_parens"}},
[j]={{nil,p,"err_omp_one_defaultmap_each_category"}},
[e]={{nil,o,"trailing requires clause should be placed outside parentheses"}},
[b]={{nil,p,"at most one defaultmap clause for each variable-category can appear on the directive"}},
[f]={{nil,o,"trailing requires clause should be placed outside parentheses"}},
[c]={{nil,p,"at most one defaultmap clause for each variable-category can appear on the directive"}},
[g]=k,
[e]=d,
[h]="trailing requires clause should be placed outside parentheses",
[f]="at most one defaultmap clause for each variable\\-category can appear on the directive",
[b]=a,
[g]=a,
[c]={{nil,o,y}},
[i]={{nil,p,n}},
[j]={lb,1570627358,kb,db},
[h]={xb,1573050950,Cb,yb},
[i]={{yb,6714,"PastIdentifier:\n  // ...\n  while (true) {\n   if (Tok.is(tok::l_paren)) {\n   // ...\n   } else if (Tok.is(tok::l_square)) {\n    // ...\n    } else if (Tok.isRegularKeywordAttribute()) {\n    // ...\n    } else if (Tok.is(tok::kw_requires) && D.hasGroupingParens()) {\n      // ...\n      Diag(Tok, diag::err_requires_clause_inside_parens);"}},
[k]={{m,22956,"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    // OpenMP [5.0, 2.12.5, Restrictions, p. 174]\n    //  At most one defaultmap clause for each category can appear on the\n    // directive.\n    if (DSAStack->checkDefaultmapCategory(Kind)) {\n      Diag(StartLoc, diag::err_omp_one_defaultmap_each_category);"}},
[l]={
[l]={
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:18:21: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:43:12: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:44:12: error: trailing requires clause should be placed outside parentheses","clang/test/CXX/dcl/dcl.decl/p3.cpp:49:30: error: trailing requires clause should be placed outside parentheses"}
["clang/test/OpenMP/target_defaultmap_messages.cpp"]={"clang/test/OpenMP/target_defaultmap_messages.cpp:49:48: error: at most one defaultmap clause for each variable-category can appear on the directive","clang/test/OpenMP/target_defaultmap_messages.cpp:56:48: error: at most one defaultmap clause for each variable-category can appear on the directive","clang/test/OpenMP/target_defaultmap_messages.cpp:58:71: error: at most one defaultmap clause for each variable-category can appear on the directive","clang/test/OpenMP/target_defaultmap_messages.cpp:112:47: error: at most one defaultmap clause for each variable-category can appear on the directive","clang/test/OpenMP/target_defaultmap_messages.cpp:116:48: error: at most one defaultmap clause for each variable-category can appear on the directive","clang/test/OpenMP/target_defaultmap_messages.cpp:118:70: error: at most one defaultmap clause for each variable-category can appear on the directive"}
}
}
},
},
["err_requires_clause_must_appear_after_trailing_return"]={
["err_omp_ordered_directive_with_param"]={
[d]={{nil,o,"err_requires_clause_must_appear_after_trailing_return"}},
[j]="err_omp_ordered_directive_with_param",
[e]={{nil,o,"trailing return type must appear before trailing requires clause"}},
[b]="\'ordered\' directive %select{without any clauses|with \'threads\' clause}0 cannot be closely nested inside ordered region with specified parameter",
[f]={{nil,o,"trailing return type must appear before trailing requires clause"}},
[c]={{nil,nil,{"\'ordered\' directive ",{"without any clauses","with \'threads\' clause"}," cannot be closely nested inside ordered region with specified parameter"}}},
[g]=k,
[e]=d,
[h]="trailing return type must appear before trailing requires clause",
[f]="\'ordered\' directive (?:without any clauses|with \'threads\' clause) cannot be closely nested inside ordered region with specified parameter",
[b]=a,
[g]=a,
[c]={{nil,o,y}},
[i]=n,
[j]={lb,1570627358,kb,db},
[h]={"346265e3bcee",1443177432,"[OPENMP 4.1] Add \'threads\' clause for \'#pragma omp ordered\'.","[OPENMP 4.1] Add \'threads\' clause for \'#pragma omp ordered\'.\nOpenMP 4.1 extends format of \'#pragma omp ordered\'. It adds 3 additional clauses: \'threads\', \'simd\' and \'depend\'.\nIf no clause is specified, the ordered construct behaves as if the threads clause had been specified. If the threads clause is specified, the threads in the team executing the loop region execute ordered regions sequentially in the order of the loop iterations.\nThe loop region to which an ordered region without any clause or with a threads clause binds must have an ordered clause without the parameter specified on the corresponding loop directive.\n\nllvm-svn: 248569"},
[i]={{lc,4142,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n  // ...\n  // Did the user swap the trailing return type and requires clause?\n  if (D.isFunctionDeclarator() && Tok.is(tok::arrow) && D.getDeclSpec().getTypeSpecType() == TST_auto) {\n   // ...\n    if (!TrailingReturnType.isInvalid()) {\n      Diag(ArrowLoc, diag::err_requires_clause_must_appear_after_trailing_return) << Range;"}},
[k]={{m,11382,"StmtResult Sema::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  if (!ErrorFound && !SC && isOpenMPSimdDirective(DSAStack->getParentDirective())) {\n  // ...\n  } else if ((DependFound || DoacrossFound) && (TC || SC)) {\n  // ...\n  } else if ((DependFound || DoacrossFound) && !DSAStack->getParentOrderedRegionParam().first) {\n // ...\n  } else if (TC || Clauses.empty()) {\n    if (const Expr *Param = DSAStack->getParentOrderedRegionParam().first) {\n      // ...\n      Diag(ErrLoc, diag::err_omp_ordered_directive_with_param) << (TC != nullptr);"}},
[l]={
[l]={
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:15:40: error: trailing return type must appear before trailing requires clause","clang/test/CXX/dcl/dcl.decl/p3.cpp:37:30: error: trailing return type must appear before trailing requires clause"}
[Bb]={"clang/test/OpenMP/ordered_messages.cpp:56:5: error: \'ordered\' directive without any clauses cannot be closely nested inside ordered region with specified parameter","clang/test/OpenMP/ordered_messages.cpp:63:25: error: \'ordered\' directive with \'threads\' clause cannot be closely nested inside ordered region with specified parameter","clang/test/OpenMP/ordered_messages.cpp:189:1: error: \'ordered\' directive without any clauses cannot be closely nested inside ordered region with specified parameter","clang/test/OpenMP/ordered_messages.cpp:190:1: error: \'ordered\' directive without any clauses cannot be closely nested inside ordered region with specified parameter","clang/test/OpenMP/ordered_messages.cpp:206:1: error: \'ordered\' directive without any clauses cannot be closely nested inside ordered region with specified parameter","clang/test/OpenMP/ordered_messages.cpp:263:5: error: \'ordered\' directive without any clauses cannot be closely nested inside ordered region with specified parameter","clang/test/OpenMP/ordered_messages.cpp:270:25: error: \'ordered\' directive with \'threads\' clause cannot be closely nested inside ordered region with specified parameter","clang/test/OpenMP/ordered_messages.cpp:368:1: error: \'ordered\' directive without any clauses cannot be closely nested inside ordered region with specified parameter","clang/test/OpenMP/ordered_messages.cpp:369:1: error: \'ordered\' directive without any clauses cannot be closely nested inside ordered region with specified parameter","clang/test/OpenMP/ordered_messages.cpp:385:1: error: \'ordered\' directive without any clauses cannot be closely nested inside ordered region with specified parameter"}
}
}
},
},
["err_requires_clause_on_declarator_not_declaring_a_function"]={
["err_omp_ordered_directive_without_param"]={
[d]={{nil,o,"err_requires_clause_on_declarator_not_declaring_a_function"}},
[j]="err_omp_ordered_directive_without_param",
[e]={{nil,o,"trailing requires clause can only be used when declaring a function"}},
[b]="\'ordered\' directive with \'%0\' clause cannot be closely nested inside ordered region without specified parameter",
[f]={{nil,o,"trailing requires clause can only be used when declaring a function"}},
[c]="\'ordered\' directive with \'A\' clause cannot be closely nested inside ordered region without specified parameter",
[g]=k,
[e]=d,
[h]="trailing requires clause can only be used when declaring a function",
[f]="\'ordered\' directive with \'(.*?)\' clause cannot be closely nested inside ordered region without specified parameter",
[b]=a,
[g]=a,
[c]={{nil,o,y}},
[i]=n,
[j]={lb,1570627358,kb,db},
[h]={"eb4823503331",1450415156,"[OPENMP 4.5] Parsing/sema analysis for \'depend(source)\' clause in \'ordered\' directive.","[OPENMP 4.5] Parsing/sema analysis for \'depend(source)\' clause in \'ordered\' directive.\nOpenMP 4.5 adds \'depend(source)\' clause for \'ordered\' directive to support cross-iteration dependence. Patch adds parsing and semantic analysis for this construct.\n\nllvm-svn: 255986"},
[i]={{yb,7375,"/// 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 (Tok.is(tok::kw_requires)) {\n     // ...\n     Diag(Tok, diag::err_requires_clause_on_declarator_not_declaring_a_function);"},{lc,4122,"/// Parse a requires-clause as part of a function declaration.\nvoid Parser::ParseTrailingRequiresClause(Declarator &D) {\n // ...\n  if (!D.isDeclarationOfFunction()) {\n    Diag(RequiresKWLoc, diag::err_requires_clause_on_declarator_not_declaring_a_function);"}},
[k]={{m,11376,"StmtResult Sema::ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  if (!ErrorFound && !SC && isOpenMPSimdDirective(DSAStack->getParentDirective())) {\n // ...\n } else if ((DependFound || DoacrossFound) && (TC || SC)) {\n // ...\n } else if ((DependFound || DoacrossFound) && !DSAStack->getParentOrderedRegionParam().first) {\n   // ...\n    Diag(Loc, diag::err_omp_ordered_directive_without_param) << getOpenMPClauseName(DependFound ? OMPC_depend : OMPC_doacross);"}},
[l]={
[l]={
["clang/test/CXX/dcl/dcl.decl/p3.cpp"]={"clang/test/CXX/dcl/dcl.decl/p3.cpp:46:14: error: trailing requires clause can only be used when declaring a function","clang/test/CXX/dcl/dcl.decl/p3.cpp:47:25: error: trailing requires clause can only be used when declaring a function","clang/test/CXX/dcl/dcl.decl/p3.cpp:48:30: error: trailing requires clause can only be used when declaring a function"}
[Bb]={"clang/test/OpenMP/ordered_messages.cpp:147:25: error: \'ordered\' directive with \'depend\' clause cannot be closely nested inside ordered region without specified parameter","clang/test/OpenMP/ordered_messages.cpp:148:25: error: \'ordered\' directive with \'depend\' clause cannot be closely nested inside ordered region without specified parameter","clang/test/OpenMP/ordered_messages.cpp:223:21: error: \'ordered\' directive with \'depend\' clause cannot be closely nested inside ordered region without specified parameter","clang/test/OpenMP/ordered_messages.cpp:224:21: error: \'ordered\' directive with \'depend\' clause cannot be closely nested inside ordered region without specified parameter","clang/test/OpenMP/ordered_messages.cpp:330:25: error: \'ordered\' directive with \'depend\' clause cannot be closely nested inside ordered region without specified parameter","clang/test/OpenMP/ordered_messages.cpp:331:25: error: \'ordered\' directive with \'depend\' clause cannot be closely nested inside ordered region without specified parameter"}
}
}
},
},
["err_requires_expr_expected_type_constraint"]={
["err_omp_ordered_simd"]={
[d]={{nil,o,"err_requires_expr_expected_type_constraint"}},
[j]="err_omp_ordered_simd",
[e]={{nil,o,"expected concept name with optional arguments"}},
[b]="\'ordered\' clause with a parameter can not be specified in \'#pragma omp %0\' directive",
[f]={{nil,o,"expected concept name with optional arguments"}},
[c]="\'ordered\' clause with a parameter can not be specified in \'#pragma omp A\' directive",
[g]=k,
[e]=d,
[h]="expected concept name with optional arguments",
[f]="\'ordered\' clause with a parameter can not be specified in \'\\#pragma omp (.*?)\' directive",
[b]=a,
[g]=a,
[c]={{nil,o,y}},
[i]=n,
[j]={lb,1570627358,kb,db},
[h]={"113438cd5cc3",1451477183,"[OPENMP 4.5] Allow \'ordered\' clause on \'loop simd\' constructs.","[OPENMP 4.5] Allow \'ordered\' clause on \'loop simd\' constructs.\nOpenMP 4.5 allows to use \'ordered\' clause without parameter on \'loop simd\' constructs.\n\nllvm-svn: 256639"},
[i]={{Nb,3591,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      case tok::l_brace: {\n        // ...\n        if (!isTypeConstraintAnnotation()) {\n         Diag(Tok, diag::err_requires_expr_expected_type_constraint);"}},
[k]={{m,4880,"StmtResult Sema::ActOnOpenMPRegionEnd(StmtResult S, ArrayRef<OMPClause *> Clauses) {\n  // ...\n  if (isOpenMPWorksharingDirective(DSAStack->getCurrentDirective()) && isOpenMPSimdDirective(DSAStack->getCurrentDirective()) && OC && OC->getNumForLoops()) {\n   Diag(OC->getBeginLoc(), diag::err_omp_ordered_simd) << getOpenMPDirectiveName(DSAStack->getCurrentDirective());"}},
[l]={
[l]={
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:97:38: error: expected concept name with optional arguments"}
["clang/test/OpenMP/parallel_for_simd_messages.cpp"]={"clang/test/OpenMP/parallel_for_simd_messages.cpp:98:31: error: \'ordered\' clause with a parameter can not be specified in \'#pragma omp parallel for simd\' directive"}
}
}
},
},
["err_requires_expr_in_simple_requirement"]={
["err_omp_original_storage_is_shared_and_does_not_contain"]={
[d]={{nil,F,"err_requires_expr_in_simple_requirement"}},
[j]="err_omp_original_storage_is_shared_and_does_not_contain",
[e]={{nil,F,"requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"}},
[b]="original storage of expression in data environment is shared but data environment do not fully contain mapped expression storage",
[f]={{nil,F,"requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"}},
[c]="original storage of expression in data environment is shared but data environment do not fully contain mapped expression storage",
[g]=k,
[e]=d,
[h]="requires expression in requirement body; did you intend to place it in a nested requirement\\? \\(add another \'requires\' before the expression\\)",
[f]="original storage of expression in data environment is shared but data environment do not fully contain mapped expression storage",
[b]=a,
[g]=a,
[c]={{nil,F,y}},
[i]=n,
[j]={"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"},
[h]={"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"},
[i]={{Nb,3736,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n     // ...\n      default: {\n        // ...\n        if (!Expression.isInvalid() && PossibleRequiresExprInSimpleRequirement)\n          Diag(StartLoc, diag::err_requires_expr_in_simple_requirement) << FixItHint::CreateInsertion(StartLoc, \"requires\");"}},
[k]={{m,21684,"// 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 // 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 must\n // have corresponding storage in the device data environment.\n // OpenMP 4.5 [2.15.5.1, map Clause, Restrictions, p.6]\n // If a list item is an element of a structure, and a different element of\n // the structure has a corresponding list item in the device data environment\n // prior to a task encountering the construct associated with the map clause,\n // then the list item must also have a corresponding list item in the device\n  //  data environment prior to the task encountering the construct.\n  //\n  if (EnclosingExpr && !IsEnclosedByDataEnvironmentExpr) {\n   SemaRef.Diag(ELoc, diag::err_omp_original_storage_is_shared_and_does_not_contain) << ERange;"}},
[l]={
[l]={
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:137:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:140:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:143:23: error: requires expression in requirement body; did you intend to place it in a nested requirement? (add another \'requires\' before the expression)"}
["clang/test/OpenMP/target_teams_map_messages.cpp"]={"clang/test/OpenMP/target_teams_map_messages.cpp:303:36: error: original storage of expression in data environment is shared but data environment do not fully contain mapped expression storage"}
}
}
},
},
["err_requires_expr_local_parameter_default_argument"]={
["err_omp_orphaned_device_directive"]={
[d]={{nil,o,"err_requires_expr_local_parameter_default_argument"}},
[j]="err_omp_orphaned_device_directive",
[e]={{nil,o,"default arguments not allowed for parameters of a requires expression"}},
[b]={{nil,o,"orphaned \'omp %0\' directives are prohibited; perhaps you forget to enclose the directive into a %select{|||target |teams|for, simd, for simd, parallel for, or parallel for simd }1region?"},{p,nil,"orphaned \'omp %0\' directives are prohibited; perhaps you forget to enclose the directive into a %select{|||target |teams }1region?"}},
[f]={{nil,o,"default arguments not allowed for parameters of a requires expression"}},
[c]={{nil,o,{"orphaned \'omp A\' directives are prohibited; perhaps you forget to enclose the directive into a ",{a,a,a,"target ","teams","for, simd, for simd, parallel for, or parallel for simd "},"region?"}},{p,nil,{"orphaned \'omp A\' directives are prohibited; perhaps you forget to enclose the directive into a ",{a,a,a,"target ","teams "},"region?"}}},
[g]=k,
[e]=d,
[h]="default arguments not allowed for parameters of a requires expression",
[f]="orphaned \'omp (.*?)\' directives are prohibited; perhaps you forget to enclose the directive into a (?:|||target |teams|for, simd, for simd, parallel for, or parallel for simd )region\\?",
[b]=a,
[g]=a,
[c]={{nil,o,m}},
[i]=n,
[j]={"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"},
[h]={"2b51f7284b29",1469507570,"[OpenMP] diagnose orphaned teams construct","[OpenMP] diagnose orphaned teams construct\n\nThe OpenMP spec mandates that \'a teams construct must be contained within a \ntarget construct\'. Currently, this scenario is not diagnosed. This patch is \nto add check for orphaned teams construct and issue an error message.\n\nDifferential Revision: https://reviews.llvm.org/D22785\n\nllvm-svn: 276726"},
[i]={{Q,9162,"RequiresExprBodyDecl *Sema::ActOnStartRequiresExpr(SourceLocation RequiresKWLoc, ArrayRef<ParmVarDecl *> LocalParameters, Scope *BodyScope) {\n  // ...\n  for (ParmVarDecl *Param : LocalParameters) {\n   if (Param->hasDefaultArg())\n     // ...\n     Diag(Param->getDefaultArgRange().getBegin(), diag::err_requires_expr_local_parameter_default_argument);"}},
[k]={{m,5235,"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        SemaRef.Diag(StartLoc, diag::err_omp_orphaned_device_directive) << getOpenMPDirectiveName(CurrentRegion) << Recommend;"},{m,11285,"StmtResult Sema::ActOnOpenMPScanDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc) {\n  // ...\n  // Check that scan directive is used in the scopeof the OpenMP loop body.\n if (Scope *S = DSAStack->getCurScope()) {\n   // ...\n   if (!ParentS || ParentS->getParent() != ParentS->getBreakParent() || !ParentS->getBreakParent()->isOpenMPLoopScope())\n      return StmtError(Diag(StartLoc, diag::err_omp_orphaned_device_directive) << getOpenMPDirectiveName(OMPD_scan) << 5);"}},
[l]={
[l]={
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:37:30: error: default arguments not allowed for parameters of a requires expression"}
["clang/test/OpenMP/cancel_messages.cpp"]={"clang/test/OpenMP/cancel_messages.cpp:13:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:19:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:20:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:21:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:22:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:24:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:51:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:53:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:56:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:60:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:63:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:66:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:69:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:72:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:74:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:77:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:81:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:83:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:86:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?","clang/test/OpenMP/cancel_messages.cpp:88:1: error: orphaned \'omp cancel\' directives are prohibited; perhaps you forget to enclose the directive into a region?"}
}
}
},
},
["err_requires_expr_missing_arrow"]={
["err_omp_orphaned_section_directive"]={
[d]={{nil,o,"err_requires_expr_missing_arrow"}},
[j]="err_omp_orphaned_section_directive",
[e]={{nil,o,"expected \'->\' before expression type requirement"}},
[b]="%select{orphaned \'omp section\' directives are prohibited, it|\'omp section\' directive}0 must be closely nested to a sections region%select{|, not a %1 region}0",
[f]={{nil,o,"expected \'->\' before expression type requirement"}},
[c]={{nil,nil,{{"orphaned \'omp section\' directives are prohibited, it","\'omp section\' directive"}," must be closely nested to a sections region",{a,", not a B region"}}}},
[g]=k,
[e]=d,
[h]="expected \'\\-\\>\' before expression type requirement",
[f]="(?:orphaned \'omp section\' directives are prohibited, it|\'omp section\' directive) must be closely nested to a sections region(?:|, not a (.*?) region)",
[b]=a,
[g]=a,
[c]={{nil,o,y}},
[i]=n,
[j]={lb,1570627358,kb,db},
[h]={"1e0498a92d6e",1403770918,"[OPENMP] Initial parsing and sema analysis for \'section\' directive.","[OPENMP] Initial parsing and sema analysis for \'section\' directive.\n\nllvm-svn: 211767"},
[i]={{Nb,3583,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      case tok::l_brace: {\n       // ...\n       if (!TryConsumeToken(tok::arrow))\n         // ...\n          Diag(Tok, diag::err_requires_expr_missing_arrow) << FixItHint::CreateInsertion(Tok.getLocation(), \"->\");"}},
[k]={{m,5028,"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_section) {\n      // OpenMP [2.7.2, sections Construct, Restrictions]\n      // Orphaned section directives are prohibited. That is, the section\n      // directives must appear within the sections construct and must not be\n     // encountered elsewhere in the sections region.\n     if (ParentRegion != OMPD_sections && ParentRegion != OMPD_parallel_sections) {\n       SemaRef.Diag(StartLoc, diag::err_omp_orphaned_section_directive) << (ParentRegion != OMPD_unknown) << getOpenMPDirectiveName(ParentRegion);"}},
[l]={
[l]={
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:97:38: error: expected \'->\' before expression type requirement","clang/test/Parser/cxx2a-concepts-requires-expr.cpp:107:38: error: expected \'->\' before expression type requirement"}
["clang/test/OpenMP/nesting_of_regions.cpp"]={"clang/test/OpenMP/nesting_of_regions.cpp:35:1: error: \'omp section\' directive must be closely nested to a sections region, not a parallel region","clang/test/OpenMP/nesting_of_regions.cpp:545:1: error: \'omp section\' directive must be closely nested to a sections region, not a for region","clang/test/OpenMP/nesting_of_regions.cpp:1353:1: error: orphaned \'omp section\' directives are prohibited, it must be closely nested to a sections region","clang/test/OpenMP/nesting_of_regions.cpp:1407:1: error: \'omp section\' directive must be closely nested to a sections region, not a section region","clang/test/OpenMP/nesting_of_regions.cpp:2592:1: error: \'omp section\' directive must be closely nested to a sections region, not a parallel for region","clang/test/OpenMP/nesting_of_regions.cpp:3947:1: error: \'omp section\' directive must be closely nested to a sections region, not a task region","clang/test/OpenMP/nesting_of_regions.cpp:4790:1: error: \'omp section\' directive must be closely nested to a sections region, not a target region","clang/test/OpenMP/nesting_of_regions.cpp:5024:1: error: \'omp section\' directive must be closely nested to a sections region, not a target parallel region","clang/test/OpenMP/nesting_of_regions.cpp:5266:1: error: \'omp section\' directive must be closely nested to a sections region, not a target parallel for region","clang/test/OpenMP/nesting_of_regions.cpp:5536:1: error: \'omp section\' directive must be closely nested to a sections region, not a teams region","clang/test/OpenMP/nesting_of_regions.cpp:5815:1: error: \'omp section\' directive must be closely nested to a sections region, not a taskloop region","clang/test/OpenMP/nesting_of_regions.cpp:6130:1: error: \'omp section\' directive must be closely nested to a sections region, not a distribute region","clang/test/OpenMP/nesting_of_regions.cpp:6449:1: error: \'omp section\' directive must be closely nested to a sections region, not a distribute parallel for region","clang/test/OpenMP/nesting_of_regions.cpp:7318:1: error: \'omp section\' directive must be closely nested to a sections region, not a teams distribute region","clang/test/OpenMP/nesting_of_regions.cpp:7587:1: error: \'omp section\' directive must be closely nested to a sections region, not a teams distribute region","clang/test/OpenMP/nesting_of_regions.cpp:8454:1: error: \'omp section\' directive must be closely nested to a sections region, not a teams distribute parallel for region","clang/test/OpenMP/nesting_of_regions.cpp:8708:1: error: \'omp section\' directive must be closely nested to a sections region, not a target teams region","clang/test/OpenMP/nesting_of_regions.cpp:8961:1: error: \'omp section\' directive must be closely nested to a sections region, not a target teams distribute region","clang/test/OpenMP/nesting_of_regions.cpp:9209:1: error: \'omp section\' directive must be closely nested to a sections region, not a target teams distribute parallel for region","clang/test/OpenMP/nesting_of_regions.cpp:9927:1: error: \'omp section\' directive must be closely nested to a sections region, not a parallel region","clang/test/OpenMP/nesting_of_regions.cpp:10400:1: error: \'omp section\' directive must be closely nested to a sections region, not a for region","clang/test/OpenMP/nesting_of_regions.cpp:11116:1: error: orphaned \'omp section\' directives are prohibited, it must be closely nested to a sections region","clang/test/OpenMP/nesting_of_regions.cpp:11170:1: error: \'omp section\' directive must be closely nested to a sections region, not a section region","clang/test/OpenMP/nesting_of_regions.cpp:12305:1: error: \'omp section\' directive must be closely nested to a sections region, not a parallel for region","clang/test/OpenMP/nesting_of_regions.cpp:13097:1: error: \'omp section\' directive must be closely nested to a sections region, not a task region","clang/test/OpenMP/nesting_of_regions.cpp:13639:1: error: \'omp section\' directive must be closely nested to a sections region, not a target region","clang/test/OpenMP/nesting_of_regions.cpp:13869:1: error: \'omp section\' directive must be closely nested to a sections region, not a target parallel region","clang/test/OpenMP/nesting_of_regions.cpp:14101:1: error: \'omp section\' directive must be closely nested to a sections region, not a target parallel for region","clang/test/OpenMP/nesting_of_regions.cpp:14370:1: error: \'omp section\' directive must be closely nested to a sections region, not a teams region","clang/test/OpenMP/nesting_of_regions.cpp:14653:1: error: \'omp section\' directive must be closely nested to a sections region, not a taskloop region","clang/test/OpenMP/nesting_of_regions.cpp:14938:1: error: \'omp section\' directive must be closely nested to a sections region, not a distribute region","clang/test/OpenMP/nesting_of_regions.cpp:15267:1: error: \'omp section\' directive must be closely nested to a sections region, not a distribute parallel for region","clang/test/OpenMP/nesting_of_regions.cpp:16466:1: error: \'omp section\' directive must be closely nested to a sections region, not a teams distribute region","clang/test/OpenMP/nesting_of_regions.cpp:17333:1: error: \'omp section\' directive must be closely nested to a sections region, not a teams distribute parallel for region","clang/test/OpenMP/nesting_of_regions.cpp:17587:1: error: \'omp section\' directive must be closely nested to a sections region, not a target teams region","clang/test/OpenMP/nesting_of_regions.cpp:17840:1: error: \'omp section\' directive must be closely nested to a sections region, not a target teams distribute region","clang/test/OpenMP/nesting_of_regions.cpp:18088:1: error: \'omp section\' directive must be closely nested to a sections region, not a target teams distribute parallel for region"}
}
}
},
},
["err_requires_expr_parameter_list_ellipsis"]={
["err_omp_parallel_reduction_in_task_firstprivate"]={
[d]={{nil,o,"err_requires_expr_parameter_list_ellipsis"}},
[j]="err_omp_parallel_reduction_in_task_firstprivate",
[e]={{nil,o,"varargs not allowed in requires expression"}},
[b]="argument of a reduction clause of a %0 construct must not appear in a firstprivate clause on a task construct",
[f]={{nil,o,"varargs not allowed in requires expression"}},
[c]="argument of a reduction clause of a A construct must not appear in a firstprivate clause on a task construct",
[g]=k,
[e]=d,
[h]="varargs not allowed in requires expression",
[f]="argument of a reduction clause of a (.*?) construct must not appear in a firstprivate clause on a task construct",
[b]=a,
[g]=a,
[c]={{nil,o,y}},
[i]=n,
[j]={lb,1570627358,kb,db},
[h]={"9c2e8ee72fe8",1405077916,"[OPENMP] Parsing and sema analysis for \'omp task\' directive.","[OPENMP] Parsing and sema analysis for \'omp task\' directive.\n\nllvm-svn: 212804"},
[i]={{Nb,3511,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n // ...\n if (Tok.is(tok::l_paren)) {\n   // ...\n   if (!Tok.is(tok::r_paren)) {\n      // ...\n      if (EllipsisLoc.isValid())\n       Diag(EllipsisLoc, diag::err_requires_expr_parameter_list_ellipsis);"}},
[k]={{m,18344,"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.3]\n     // A list item that appears in a reduction clause of a parallel construct\n     // must not appear in a firstprivate clause on a worksharing or task\n     // construct if any of the worksharing or task regions arising from the\n     // worksharing or task construct ever bind to any of the parallel regions\n     // arising from the parallel construct.\n     // OpenMP [2.9.3.4, Restrictions, p.4]\n     // A list item that appears in a reduction clause in worksharing\n     // construct must not appear in a firstprivate clause in a task construct\n     // encountered during execution of any of the worksharing regions arising\n     //  from the worksharing construct.\n     if (isOpenMPTaskingDirective(CurrDir)) {\n       // ...\n       if (DVar.CKind == OMPC_reduction && (isOpenMPParallelDirective(DVar.DKind) || isOpenMPWorksharingDirective(DVar.DKind) || isOpenMPTeamsDirective(DVar.DKind))) {\n         Diag(ELoc, diag::err_omp_parallel_reduction_in_task_firstprivate) << getOpenMPDirectiveName(DVar.DKind);"}},
[l]={
[l]={
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:8:28: error: varargs not allowed in requires expression"}
["clang/test/OpenMP/parallel_master_taskloop_firstprivate_messages.cpp"]={"clang/test/OpenMP/parallel_master_taskloop_firstprivate_messages.cpp:319:51: error: argument of a reduction clause of a parallel construct must not appear in a firstprivate clause on a task construct","clang/test/OpenMP/parallel_master_taskloop_firstprivate_messages.cpp:165:51: error: argument of a reduction clause of a parallel construct must not appear in a firstprivate clause on a task construct"}
}
}
},
},
["err_requires_expr_parameter_referenced_in_evaluated_context"]={
["err_omp_parallel_sections_not_compound_stmt"]={
[d]={{nil,o,"err_requires_expr_parameter_referenced_in_evaluated_context"}},
[j]="err_omp_parallel_sections_not_compound_stmt",
[e]={{nil,o,"constraint variable %0 cannot be used in an evaluated context"}},
[b]="the statement for \'#pragma omp parallel sections\' must be a compound statement",
[f]={{nil,o,"constraint variable A cannot be used in an evaluated context"}},
[c]="the statement for \'#pragma omp parallel sections\' must be a compound statement",
[g]=k,
[e]=d,
[h]="constraint variable (.*?) cannot be used in an evaluated context",
[f]="the statement for \'\\#pragma omp parallel sections\' must be a compound statement",
[b]=a,
[g]=a,
[c]={{nil,o,m}},
[i]=n,
[j]={"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"},
[h]={"84d0b3efee50",1404807123,"[OPENMP] Parsing and sema analysis for \'omp parallel sections\' directive.","[OPENMP] Parsing and sema analysis for \'omp parallel sections\' directive.\n\nllvm-svn: 212516"},
[i]={{O,404,"/// 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 (isa<ParmVarDecl>(D) && isa<RequiresExprBodyDecl>(D->getDeclContext()) && !isUnevaluatedContext()) {\n    // ...\n    Diag(Loc, diag::err_requires_expr_parameter_referenced_in_evaluated_context) << D;"}},
[k]={{m,11076,"StmtResult Sema::ActOnOpenMPParallelSectionsDirective(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_parallel_sections_not_compound_stmt);"}},
[l]={
["clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/simple-requirement.cpp:104:65: error: constraint variable \'x\' cannot be used in an evaluated context"}
}
},
["err_requires_expr_simple_requirement_noexcept"]={
[d]={{nil,o,"err_requires_expr_simple_requirement_noexcept"}},
[e]={{nil,o,"\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"}},
[f]={{nil,o,"\'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"}},
[g]=k,
[h]="\'noexcept\' can only be used in a compound requirement \\(with \'\\{\' \'\\}\' around the expression\\)",
[b]=a,
[c]={{nil,o,y}},
[j]={lb,1570627358,kb,db},
[i]={{Nb,3746,"/// ParseRequiresExpression - Parse a C++2a requires-expression.\n/// C++2a [expr.prim.req]p1\n///    A requires-expression provides a concise way to express requirements on\n///    template arguments. A requirement is one that can be checked by name\n///    lookup (6.4) or by checking properties of types and expressions.\n///\n///    requires-expression:\n///        \'requires\' requirement-parameter-list[opt] requirement-body\n///\n///    requirement-parameter-list:\n///        \'(\' parameter-declaration-clause[opt] \')\'\n///\n///    requirement-body:\n///        \'{\' requirement-seq \'}\'\n///\n///    requirement-seq:\n///        requirement\n///        requirement-seq requirement\n///\n///    requirement:\n///        simple-requirement\n///        type-requirement\n///        compound-requirement\n///        nested-requirement\nExprResult Parser::ParseRequiresExpression() {\n  // ...\n  if (Tok.is(tok::r_brace)) {\n  // ...\n  } else {\n    while (!Tok.is(tok::r_brace)) {\n      // ...\n      default: {\n        // ...\n        // User may have tried to put some compound requirement stuff here\n        if (Tok.is(tok::kw_noexcept)) {\n          Diag(Tok, diag::err_requires_expr_simple_requirement_noexcept) << FixItHint::CreateInsertion(StartLoc, \"{\") << FixItHint::CreateInsertion(Tok.getLocation(), \"}\");"}},
[l]={
[Mb]={"clang/test/Parser/cxx2a-concepts-requires-expr.cpp:122:25: error: \'noexcept\' can only be used in a compound requirement (with \'{\' \'}\' around the expression)"}
}
},
["err_restricted_superclass_mismatch"]={
[d]="err_restricted_superclass_mismatch",
[e]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[f]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[g]=k,
[h]="cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute",
[b]=a,
[c]=m,
[j]={"a8c44ba2c01e",1477650310,"[Objective-C] Add objc_subclassing_restricted attribute","[Objective-C] Add objc_subclassing_restricted attribute\n\nThis patch adds an objc_subclassing_restricted attribute into clang. This\nattribute acts similarly to \'final\' - Objective-C classes with this attribute\ncan\'t be subclassed. However, @interface declarations that have\nobjc_subclassing_restricted but don\'t have @implementation are allowed to\ninherit other @interface declarations with objc_subclassing_restricted. This is\nneeded to describe the Swift class hierarchy in clang while making sure that\nthe Objective-C classes cannot subclass the Swift classes.\n\nThis attribute is already implemented in a fork of clang that\'s used for Swift\n(https://github.com/apple/swift-clang) and this patch moves that code to the\nupstream clang repository.\n\nrdar://28937548\n\nDifferential Revision: https://reviews.llvm.org/D25993\n\nllvm-svn: 285391"},
[i]={{bb,4165,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    // ...\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      // ...\n      if (const ObjCInterfaceDecl *Super = IDecl->getSuperClass()) {\n        // An interface can subclass another interface with a\n        // objc_subclassing_restricted attribute when it has that attribute as\n        // well (because of interfaces imported from Swift). Therefore we have\n        // to check if we can subclass in the implementation as well.\n        if (IDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n          Diag(IC->getLocation(), diag::err_restricted_superclass_mismatch);"},{bb,4197,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  // ...\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n  // ...\n  } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n  // ...\n  } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n    if (const ObjCInterfaceDecl *Super = IntfDecl->getSuperClass()) {\n      if (!IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n        Diag(IntfDecl->getLocation(), diag::err_restricted_superclass_mismatch);"}},
[l]={
["clang/test/SemaObjC/subclassing-restricted-attr.m"]={"clang/test/SemaObjC/subclassing-restricted-attr.m:14:12: error: cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute","clang/test/SemaObjC/subclassing-restricted-attr.m:35:17: error: cannot subclass a class that was declared with the \'objc_subclassing_restricted\' attribute"}
}
},
["err_ret_local_block"]={
[d]="err_ret_local_block",
[e]="returning block that lives on the local stack",
[f]="returning block that lives on the local stack",
[g]=k,
[h]="returning block that lives on the local stack",
[b]=a,
[c]=m,
[j]={M,1237025389,L,N},
[i]={{P,8262,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n   // ...\n    case LK_Return:\n    case LK_StmtExprResult:\n      if (auto *DRE = dyn_cast<DeclRefExpr>(L)) {\n      // ...\n      } else if (isa<BlockExpr>(L)) {\n        Diag(DiagLoc, diag::err_ret_local_block) << DiagRange;"}},
[l]={
["clang/test/Analysis/stack-block-returned.cpp"]={"clang/test/Analysis/stack-block-returned.cpp:8:10: error: returning block that lives on the local stack"}
}
},
["err_rethrow_used_outside_catch"]={
[d]="err_rethrow_used_outside_catch",
[e]="@throw (rethrow) used outside of a @catch block",
[f]="@throw (rethrow) used outside of a @catch block",
[g]=k,
[h]="@throw \\(rethrow\\) used outside of a @catch block",
[b]=a,
[c]=m,
[j]={eb,1480718311,cb,fb},
[i]={{Kb,4292,"StmtResult Sema::ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw, Scope *CurScope) {\n  // ...\n  if (!Throw) {\n    // ...\n    if (!AtCatchParent)\n      return StmtError(Diag(AtLoc, diag::err_rethrow_used_outside_catch));"}},
[l]={
["clang/test/SemaObjC/try-catch.m"]={"clang/test/SemaObjC/try-catch.m:51:3: error: @throw (rethrow) used outside of a @catch block"}
}
},
["err_return_block_has_expr"]={
[d]="err_return_block_has_expr",
[e]="void block should not return a value",
[f]="void block should not return a value",
[g]=k,
[h]="void block should not return a value",
[b]=a,
[c]=m,
[j]={M,1237025389,L,N},
[i]={{Kb,3688,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  // Otherwise, verify that this result type matches the previous one.  We are\n  // pickier with blocks than for normal functions because we don\'t have GCC\n  // compatibility to worry about here.\n  if (FnRetType->isDependentType()) {\n  // ...\n  } else if (FnRetType->isVoidType()) {\n    if (RetValExp && !isa<InitListExpr>(RetValExp) && !(getLangOpts().CPlusPlus && (RetValExp->isTypeDependent() || RetValExp->getType()->isVoidType()))) {\n      if (!getLangOpts().CPlusPlus && RetValExp->getType()->isVoidType())\n      // ...\n      else {\n        Diag(ReturnLoc, diag::err_return_block_has_expr);"}}
},
["err_return_in_captured_stmt"]={
[d]="err_return_in_captured_stmt",
[e]="cannot return from %0",
[f]="cannot return from A",
[g]=k,
[h]="cannot return from (.*?)",
[b]=a,
[c]=m,
[j]={"6dfa25a19f3f",1366141058,"Sema for Captured Statements","Sema for Captured Statements\n\nAdd CapturedDecl to be the DeclContext for CapturedStmt, and perform semantic\nanalysis. Currently captures all variables by reference.\n\nTODO: templates\n\nAuthor: Ben Langmuir <ben.langmuir@intel.com>\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D433\n\nllvm-svn: 179618"},
[i]={{Kb,3661,"/// ActOnCapScopeReturnStmt - Utility routine to type-check return statements\n/// for capturing scopes.\n///\nStmtResult Sema::ActOnCapScopeReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, NamedReturnInfo &NRInfo, bool SupressSimplerImplicitMoves) {\n  // ...\n  if (auto *CurBlock = dyn_cast<BlockScopeInfo>(CurCap)) {\n  // ...\n  } else if (auto *CurRegion = dyn_cast<CapturedRegionScopeInfo>(CurCap)) {\n    Diag(ReturnLoc, diag::err_return_in_captured_stmt) << CurRegion->getRegionName();"}},
[l]={
["clang/test/Sema/captured-statements.c"]={"clang/test/Sema/captured-statements.c:30:7: error: cannot return from default captured statement"}
}
},
["err_return_in_constructor_handler"]={
[d]="err_return_in_constructor_handler",
[e]="return in the catch of a function try block of a constructor is illegal",
[f]="return in the catch of a function try block of a constructor is illegal",
[g]=k,
[h]="return in the catch of a function try block of a constructor is illegal",
[b]=a,
[c]=m,
[j]={"4c018663b22c",1240868004,"Track down return statements in the handlers of a function-try-block of constructors. Meh ...","Track down return statements in the handlers of a function-try-block of constructors. Meh ...\n\nllvm-svn: 70256"},
[i]={{w,17943,"static void SearchForReturnInStmt(Sema &Self, Stmt *S) {\n  for (Stmt *SubStmt : S->children()) {\n    // ...\n    if (isa<ReturnStmt>(SubStmt))\n      Self.Diag(SubStmt->getBeginLoc(), diag::err_return_in_constructor_handler);"}},
[l]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:86:11: error: return in the catch of a function try block of a constructor is illegal","clang/test/SemaCXX/exceptions.cpp:98:5: error: return in the catch of a function try block of a constructor is illegal","clang/test/SemaCXX/exceptions.cpp:102:9: error: return in the catch of a function try block of a constructor is illegal"}
}
},
["err_return_in_coroutine"]={
[d]="err_return_in_coroutine",
[e]="return statement not allowed in coroutine; did you mean \'co_return\'?",
[f]="return statement not allowed in coroutine; did you mean \'co_return\'?",
[g]=k,
[h]="return statement not allowed in coroutine; did you mean \'co_return\'\\?",
[b]=a,
[c]="Coroutines Issue",
[j]={"cfd53b4e9993",1445494430,"[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return.","[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return.\n\nllvm-svn: 250993"},
[i]={{"clang/lib/Sema/SemaCoroutine.cpp",1123,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // ...\n  // [stmt.return.coroutine]p1:\n  //  A coroutine shall not enclose a return statement ([stmt.return]).\n  if (Fn->FirstReturnLoc.isValid()) {\n    // ...\n    Diag(Fn->FirstReturnLoc, diag::err_return_in_coroutine);"}},
[l]={
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:200:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:206:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:213:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:220:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:227:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:232:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:238:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:245:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:252:3: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:264:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:272:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:281:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?","clang/test/SemaCXX/coroutines.cpp:291:5: error: return statement not allowed in coroutine; did you mean \'co_return\'?"}
}
},
["err_return_init_list"]={
[d]="err_return_init_list",
[e]="%select{void function|void method|constructor|destructor}1 %0 must not return a value",
[f]={{nil,nil,{{"void function","void method","constructor","destructor"}," A must not return a value"}}},
[g]=k,
[h]="(?:void function|void method|constructor|destructor) (.*?) must not return a value",
[b]=a,
[c]=m,
[j]={"eef474ce1bc8",1329907808,"Fix parsing and processing initializer lists in return statements and as direct member initializers.","Fix parsing and processing initializer lists in return statements and as direct member initializers.\n\nllvm-svn: 151155"},
[i]={{Kb,4063,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  // ...\n  if (FnRetType->isVoidType()) {\n    if (RetValExp) {\n      if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n        // ...\n        Diag(ReturnLoc, diag::err_return_init_list) << CurDecl << FunctionKind << RetValExp->getSourceRange();"}},
[l]={
["clang/test/SemaCXX/return-void.cpp"]={"clang/test/SemaCXX/return-void.cpp:3:13: error: void function \'f1\' must not return a value","clang/test/SemaCXX/return-void.cpp:5:35: error: void function \'f2\' must not return a value","clang/test/SemaCXX/return-void.cpp:7:32: error: void function \'f2<float>\' must not return a value","clang/test/SemaCXX/return-void.cpp:15:15: error: void function \'f3\' must not return a value","clang/test/SemaCXX/return-void.cpp:16:9: error: constructor \'S\' must not return a value","clang/test/SemaCXX/return-void.cpp:17:10: error: destructor \'~S\' must not return a value","clang/test/SemaCXX/return-void.cpp:21:15: error: void function \'f4\' must not return a value","clang/test/SemaCXX/return-void.cpp:22:10: error: constructor \'ST<T>\' must not return a value","clang/test/SemaCXX/return-void.cpp:23:11: error: destructor \'~ST<T>\' must not return a value"}
}
},
["err_return_value_with_address_space"]={
[d]={{nil,tb,"err_return_value_with_address_space"}},
[e]={{nil,tb,"return type cannot be qualified with address space"}},
[f]={{nil,tb,"return type cannot be qualified with address space"}},
[g]=k,
[h]="return type cannot be qualified with address space",
[b]=a,
[c]={{nil,tb,m}},
[j]={gb,1625925174,ib,jb},
[i]={{D,10253,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().OpenCL) {\n    // ...\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{D,10287,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().HLSL) {\n    // ...\n    if (AddressSpace != LangAS::Default) {\n      Diag(NewFD->getLocation(), diag::err_return_value_with_address_space);"},{"clang/lib/Sema/SemaLambda.cpp",876,"static TypeSourceInfo *getLambdaType(Sema &S, LambdaIntroducer &Intro, Declarator &ParamInfo, Scope *CurScope, SourceLocation Loc, bool &ExplicitResultType) {\n  // ...\n  if (ParamInfo.getNumTypeObjects() == 0) {\n  // ...\n  } else {\n    // ...\n    if (ExplicitResultType && S.getLangOpts().HLSL) {\n      // ...\n      if (!RetTy.isNull()) {\n        // ...\n        if (AddressSpace != LangAS::Default)\n          S.Diag(FTI.getTrailingReturnTypeLoc(), diag::err_return_value_with_address_space);"}},
[l]={
["clang/test/SemaHLSL/group_shared.hlsl"]={"clang/test/SemaHLSL/group_shared.hlsl:14:20: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:20:20: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:25:21: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:32:24: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:35:24: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:38:31: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:41:31: error: return type cannot be qualified with address space","clang/test/SemaHLSL/group_shared.hlsl:80:18: error: return type cannot be qualified with address space"}
}
},
["err_right_angle_bracket_equal_needs_space"]={
[d]="err_right_angle_bracket_equal_needs_space",
[e]="a space is required between a right angle bracket and an equals sign (use \'> =\')",
[f]="a space is required between a right angle bracket and an equals sign (use \'> =\')",
[g]=k,
[h]="a space is required between a right angle bracket and an equals sign \\(use \'\\> \\=\'\\)",
[b]=a,
[c]=y,
[j]={"7b3f322517c2",1339999864,"Extend the error recovery for a template-argument-list terminated by \'>>\' to","Extend the error recovery for a template-argument-list terminated by \'>>\' to\nalso deal with \'>>>\' (in CUDA), \'>=\', and \'>>=\'. Fix the FixItHints logic to\ndeal with cases where the token is followed by an adjacent \'=\', \'==\', \'>=\',\n\'>>=\', or \'>>>\' token, where a naive fix-it would result in a differing token\nstream on a re-lex.\n\nllvm-svn: 158652"},
[i]={{"clang/lib/Parse/ParseTemplate.cpp",1209,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  // ...\n  // Diagnose this situation as appropriate.\n  if (!ObjCGenericList) {\n    // ...\n    if (getLangOpts().CPlusPlus11 && (Tok.is(tok::greatergreater) || Tok.is(tok::greatergreatergreater)))\n    // ...\n    else if (Tok.is(tok::greaterequal))\n      DiagId = diag::err_right_angle_bracket_equal_needs_space;"}},
[l]={
["clang/test/Parser/cxx-template-argument.cpp"]={"clang/test/Parser/cxx-template-argument.cpp:22:15: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:23:18: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:30:18: error: a space is required between a right angle bracket and an equals sign (use \'> =\')","clang/test/Parser/cxx-template-argument.cpp:36:21: error: a space is required between a right angle bracket and an equals sign (use \'> =\')"}
}
},
["err_riscv_builtin_invalid_lmul"]={
[d]={{nil,V,"err_riscv_builtin_invalid_lmul"}},
[e]={{nil,V,"LMUL argument must be in the range [0,3] or [5,7]"}},
[f]={{nil,V,"LMUL argument must be in the range [0,3] or [5,7]"}},
[g]=k,
[h]="LMUL argument must be in the range \\[0,3\\] or \\[5,7\\]",
[b]=a,
[c]={{nil,V,S}},
[j]={"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"},
[i]={{I,4493,"bool Sema::CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum) {\n  // ...\n  return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_invalid_lmul) << Arg->getSourceRange();"}},
[l]={
["clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c"]={"clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:6:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:7:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:8:3: error: LMUL argument must be in the range [0,3] or [5,7]","clang/test/CodeGen/RISCV/rvv-intrinsics-handcrafted/rvv-errors.c:9:3: error: LMUL argument must be in the range [0,3] or [5,7]"}
}
},
["err_riscv_builtin_requires_extension"]={
[d]={{nil,V,"err_riscv_builtin_requires_extension"}},
[e]={{nil,tb,"builtin requires%select{| at least one of the following extensions to be enabled}0: %1"},{C,F,"builtin requires at least one of the following extensions support to be enabled : %0"},{V,V,"builtin requires \'%0\' extension support to be enabled"}},
[f]={{nil,tb,{"builtin requires",{a," at least one of the following extensions to be enabled"},": B"}},{C,F,"builtin requires at least one of the following extensions support to be enabled : A"},{V,V,"builtin requires \'A\' extension support to be enabled"}},
[g]=k,
[h]="builtin requires(?:| at least one of the following extensions to be enabled)\\: (.*?)",
[b]=a,
[c]={{nil,V,S}},
[j]={Vb,1590001902,Ub,Zb},
[i]={{I,4542,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  // Check if each required feature is included\n  for (StringRef F : ReqFeatures) {\n    // ...\n    if (llvm::none_of(ReqOpFeatures, [&TI](StringRef OF) { return TI.hasFeature(OF); })) {\n      // ...\n      Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << IsExtension << TheCall->getSourceRange() << StringRef(FeatureStrs);"},{I,4611,"bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo &TI, unsigned BuiltinID, CallExpr *TheCall) {\n  // ...\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_m:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_m:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulhsu_vx_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_m:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_m:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulhu_vx_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_m:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_m:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vmulh_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vmulh_vx_tumu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_tu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_m:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_m:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_mu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_mu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_tum:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tum:\n  case RISCVVector::BI__builtin_rvv_vsmul_vv_tumu:\n  case RISCVVector::BI__builtin_rvv_vsmul_vx_tumu: {\n    // ...\n    if (RequireV && !TI.hasFeature(\"v\"))\n      return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) << /* IsExtension */ false << TheCall->getSourceRange() << \"v\";"}},
[l]={
["clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c"]={"clang/test/CodeGen/RISCV/rvb-intrinsics/riscv32-zbb-error.c:5:10: error: builtin requires: \'RV64\'"}
}
},
["err_riscv_type_requires_extension"]={
[d]="err_riscv_type_requires_extension",
[e]="RISC-V type %0 requires the \'%1\' extension",
[f]="RISC-V type A requires the \'B\' extension",
[g]=k,
[h]="RISC\\-V type (.*?) requires the \'(.*?)\' extension",
[b]=a,
[c]=S,
[j]={gb,1625925174,ib,jb},
[i]={{I,5427,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  // (ELEN, LMUL) pairs of (8, mf8), (16, mf4), (32, mf2), (64, m1) requires at\n  // least zve64x\n  if ((Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ false) || Ty->isRVVType(/* ElementCount */ 1)) && !TI.hasFeature(\"zve64x\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64x\";"},{I,5430,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  if (Ty->isRVVType(/* Bitwidth */ 16, /* IsFloat */ true) && !TI.hasFeature(\"zvfh\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zvfh\";"},{I,5433,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  if (Ty->isRVVType(/* Bitwidth */ 32, /* IsFloat */ true) && !TI.hasFeature(\"zve32f\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32f\";"},{I,5436,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  if (Ty->isRVVType(/* Bitwidth */ 64, /* IsFloat */ true) && !TI.hasFeature(\"zve64d\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve64d\";"},{I,5440,"void Sema::checkRVVTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  // ...\n  // Given that caller already checked isRVVType() before calling this function,\n  // if we don\'t have at least zve32x supported, then we need to emit error.\n  if (!TI.hasFeature(\"zve32x\"))\n    Diag(Loc, diag::err_riscv_type_requires_extension, D) << Ty << \"zve32x\";"}},
[l]={
["clang/test/Sema/riscv-vector-zve64x-check.c"]={"clang/test/Sema/riscv-vector-zve64x-check.c:10:19: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:12:9: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:14:10: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:9:17: error: RISC-V type \'__rvv_int8mf8_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:18:20: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:20:9: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:22:10: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:17:18: error: RISC-V type \'__rvv_int16mf4_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:26:20: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:28:9: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:30:10: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:25:18: error: RISC-V type \'__rvv_int32mf2_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:34:19: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:36:9: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:38:10: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension","clang/test/Sema/riscv-vector-zve64x-check.c:33:17: error: RISC-V type \'__rvv_int64m1_t\' requires the \'zve64x\' extension"}
}
},
["err_root_class_cannot_use_super"]={
[d]="err_root_class_cannot_use_super",
[e]="%0 cannot use \'super\' because it is a root class",
[f]="A cannot use \'super\' because it is a root class",
[g]=k,
[h]="(.*?) cannot use \'super\' because it is a root class",
[b]=a,
[c]=m,
[j]={eb,1480718311,cb,fb},
[i]={{qb,2178,"ExprResult Sema::ActOnClassPropertyRefExpr(IdentifierInfo &receiverName, IdentifierInfo &propertyName, SourceLocation receiverNameLoc, SourceLocation propertyNameLoc) {\n  // ...\n  if (!IFace) {\n    // If the \"receiver\" is \'super\' in a method, handle it as an expression-like\n    // property reference.\n    if (receiverNamePtr->isStr(\"super\")) {\n      if (ObjCMethodDecl *CurMethod = tryCaptureObjCSelf(receiverNameLoc)) {\n        if (auto classDecl = CurMethod->getClassInterface()) {\n          // ...\n          if (CurMethod->isInstanceMethod()) {\n            if (SuperType.isNull()) {\n              // ...\n              Diag(receiverNameLoc, diag::err_root_class_cannot_use_super) << CurMethod->getClassInterface()->getIdentifier();"},{qb,2405,"ExprResult Sema::ActOnSuperMessage(Scope *S, SourceLocation SuperLoc, Selector Sel, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg Args) {\n  // ...\n  if (SuperTy.isNull()) {\n    // ...\n    Diag(SuperLoc, diag::err_root_class_cannot_use_super) << Class->getIdentifier();"}},
[l]={
["clang/test/SemaObjC/super-property-notation.m"]={"clang/test/SemaObjC/super-property-notation.m:38:3: error: \'ClassBase\' cannot use \'super\' because it is a root class","clang/test/SemaObjC/super-property-notation.m:39:4: error: \'ClassBase\' cannot use \'super\' because it is a root class"}
}
},
["err_roptr_cannot_build_shared"]={
[d]="err_roptr_cannot_build_shared",
[e]="-mxcoff-roptr is not supported with -shared",
[f]="-mxcoff-roptr is not supported with -shared",
[g]=k,
[h]="\\-mxcoff\\-roptr is not supported with \\-shared",
[b]=a,
[c]=S,
[j]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers\n\nThis patch adds clang options `-mxcoff-roptr` and `-mno-xcoff-roptr` to specify storage locations for constant pointers on AIX.\n\nWhen the `-mxcoff-roptr` option is in effect, constant pointers, virtual function tables, and virtual type tables are placed in read-only storage. When the `-mno-xcoff-roptr` option is in effect, pointers, virtual function tables, and virtual type tables are placed are placed in read/write storage.\n\nThis patch depends on https://reviews.llvm.org/D144189.\n\nReviewed By: hubert.reinterpretcast, stephenpeckham\n\nDifferential Revision: https://reviews.llvm.org/D144190"},
[i]={{"clang/lib/Driver/ToolChains/AIX.cpp",141,"void aix::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (Args.hasFlag(options::OPT_mxcoff_roptr, options::OPT_mno_xcoff_roptr, false)) {\n    if (Args.hasArg(options::OPT_shared))\n      D.Diag(diag::err_roptr_cannot_build_shared);"}}
},
["err_roptr_requires_data_sections"]={
[d]="err_roptr_requires_data_sections",
[e]="-mxcoff-roptr is supported only with -fdata-sections",
[f]="-mxcoff-roptr is supported only with -fdata-sections",
[g]=k,
[h]="\\-mxcoff\\-roptr is supported only with \\-fdata\\-sections",
[b]=a,
[c]=S,
[j]={"9715af434579",1684163645,"[AIX][clang] Storage Locations for Constant Pointers","[AIX][clang] Storage Locations for Constant Pointers\n\nThis patch adds clang options `-mxcoff-roptr` and `-mno-xcoff-roptr` to specify storage locations for constant pointers on AIX.\n\nWhen the `-mxcoff-roptr` option is in effect, constant pointers, virtual function tables, and virtual type tables are placed in read-only storage. When the `-mno-xcoff-roptr` option is in effect, pointers, virtual function tables, and virtual type tables are placed are placed in read/write storage.\n\nThis patch depends on https://reviews.llvm.org/D144189.\n\nReviewed By: hubert.reinterpretcast, stephenpeckham\n\nDifferential Revision: https://reviews.llvm.org/D144190"},
[i]={{"clang/lib/Driver/ToolChains/CommonArgs.cpp",766,"#endif\n  // ...\n  if (Args.hasArg(options::OPT_mxcoff_roptr) || Args.hasArg(options::OPT_mno_xcoff_roptr)) {\n    // ...\n    if (HasRoptr) {\n      // The data sections option is on by default on AIX. We only need to error\n      // out when -fno-data-sections is specified explicitly to turn off data\n      // sections.\n      if (DataSectionsTurnedOff)\n        D.Diag(diag::err_roptr_requires_data_sections);"},{"clang/lib/Frontend/CompilerInvocation.cpp",1947,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_mxcoff_roptr)) {\n    // ...\n    // Since the storage mapping class is specified per csect,\n    // without using data sections, it is less effective to use read-only\n    // pointers. Using read-only pointers may cause other RO variables in the\n    // same csect to become RW when the linker acts upon `-bforceimprw`;\n    // therefore, we require that separate data sections\n    // are used when `-mxcoff-roptr` is in effect. We respect the setting of\n    // data-sections since we have not found reasons to do otherwise that\n    // overcome the user surprise of not respecting the setting.\n    if (!Args.hasFlag(OPT_fdata_sections, OPT_fno_data_sections, false))\n      Diags.Report(diag::err_roptr_requires_data_sections);"}}
},
["err_rotation_argument_to_cadd"]={
[d]={{nil,t,"err_rotation_argument_to_cadd"}},
[e]={{nil,t,"argument should be the value 90 or 270"}},
[f]={{nil,t,"argument should be the value 90 or 270"}},
[g]=k,
[h]="argument should be the value 90 or 270",
[b]=a,
[c]={{nil,t,m}},
[j]={pb,1576908663,sb,ub},
[i]={{I,2992,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n  // ...\n  for (auto &I : ImmChecks) {\n    // ...\n    case SVETypeFlags::ImmCheckComplexRot90_270:\n      if (CheckImmediateInSet([](int64_t V) { return V == 90 || V == 270; }, diag::err_rotation_argument_to_cadd))"}},
[l]={
[l]={
["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:18:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:20:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:22:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:24:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:26:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:28:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:30:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:32:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:34:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:36:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:38:17: error: argument should be the value 90 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:40:17: error: argument should be the value 90 or 270"}
["clang/test/OpenMP/parallel_sections_misc_messages.c"]={"clang/test/OpenMP/parallel_sections_misc_messages.c:22:3: error: the statement for \'#pragma omp parallel sections\' must be a compound statement"}
}
}
},
},
["err_rotation_argument_to_cmla"]={
["err_omp_parallel_sections_substmt_not_section"]={
[d]={{nil,t,"err_rotation_argument_to_cmla"}},
[j]="err_omp_parallel_sections_substmt_not_section",
[e]={{nil,t,"argument should be the value 0, 90, 180 or 270"}},
[b]="statement in \'omp parallel sections\' directive must be enclosed into a section region",
[f]={{nil,t,"argument should be the value 0, 90, 180 or 270"}},
[c]="statement in \'omp parallel sections\' directive must be enclosed into a section region",
[g]=k,
[e]=d,
[h]="argument should be the value 0, 90, 180 or 270",
[f]="statement in \'omp parallel sections\' directive must be enclosed into a section region",
[b]=a,
[g]=a,
[c]={{nil,t,m}},
[i]=n,
[j]={pb,1576908663,sb,ub},
[h]={"84d0b3efee50",1404807123,"[OPENMP] Parsing and sema analysis for \'omp parallel sections\' directive.","[OPENMP] Parsing and sema analysis for \'omp parallel sections\' directive.\n\nllvm-svn: 212516"},
[i]={{I,3000,"#include \"clang/Basic/arm_sme_sema_rangechecks.inc\"\n  // ...\n  for (auto &I : ImmChecks) {\n    // ...\n    case SVETypeFlags::ImmCheckComplexRotAll90:\n      if (CheckImmediateInSet([](int64_t V) { return V == 0 || V == 90 || V == 180 || V == 270; }, diag::err_rotation_argument_to_cmla))"}},
[k]={{m,11068,"StmtResult Sema::ActOnOpenMPParallelSectionsDirective(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_parallel_sections_substmt_not_section);"}},
[l]={
[l]={
["clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp"]={"clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:46:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:48:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:50:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:52:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:54:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:56:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:58:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:60:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:62:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:64:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:66:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:68:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:70:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:72:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:74:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:76:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:78:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:80:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:82:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:84:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:86:17: error: argument should be the value 0, 90, 180 or 270","clang/test/Sema/aarch64-sve2-intrinsics/acle_sve2_imm_rotation.cpp:88:17: error: argument should be the value 0, 90, 180 or 270"}
["clang/test/OpenMP/parallel_sections_misc_messages.c"]={"clang/test/OpenMP/parallel_sections_misc_messages.c:27:5: error: statement in \'omp parallel sections\' directive must be enclosed into a section region"}
}
}
},
},
["err_rref_in_exception_spec"]={
["err_omp_param_or_this_in_clause"]={
[d]="err_rref_in_exception_spec",
[j]="err_omp_param_or_this_in_clause",
[e]="rvalue reference type %0 is not allowed in exception specification",
[b]="expected reference to one of the parameters of function %0%select{| or \'this\'}1",
[f]="rvalue reference type A is not allowed in exception specification",
[c]={{nil,nil,{"expected reference to one of the parameters of function A",{a," or \'this\'"}}}},
[g]=k,
[e]=d,
[h]="rvalue reference type (.*?) is not allowed in exception specification",
[f]="expected reference to one of the parameters of function (.*?)(?:| or \'this\')",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"a118c6a8c0e9",1354143162,"Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications.","Per C++11 [except.spec]p2, rvalue references are not permitted in exception specifications.\n\nllvm-svn: 168824"},
[h]={"e48a5fc56d7d",1460438914,"[OPENMP 4.0] Support for \'uniform\' clause in \'declare simd\' directive.","[OPENMP 4.0] Support for \'uniform\' clause in \'declare simd\' directive.\n\nOpenMP 4.0 defines clause \'uniform\' in \'declare simd\' directive:\n\'uniform\' \'(\' <argument-list> \')\'\nThe uniform clause declares one or more arguments to have an invariant value for all concurrent invocations of the function in the execution of a single SIMD loop.\nThe special this pointer can be used as if was one of the arguments to the function in any of the linear, aligned, or uniform clauses.\n\nllvm-svn: 266041"},
[i]={{"clang/lib/Sema/SemaExceptionSpec.cpp",152,"/// CheckSpecifiedExceptionType - Check if the given type is valid in an\n/// exception specification. Incomplete types, or pointers to incomplete types\n/// other than void are not allowed.\n///\n/// \\param[in,out] T  The exception type. This will be decayed to a pointer type\n///                  when the input is an array or a function type.\nbool Sema::CheckSpecifiedExceptionType(QualType &T, SourceRange Range) {\n  // ...\n  if (const PointerType *PT = T->getAs<PointerType>()) {\n  // ...\n  } else if (const ReferenceType *RT = T->getAs<ReferenceType>()) {\n   // ...\n   if (RT->isRValueReferenceType()) {\n     // ...\n     Diag(Range.getBegin(), diag::err_rref_in_exception_spec) << T << Range;"}},
[k]={{m,6881,"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 : Uniforms) {\n   // ...\n   Diag(E->getExprLoc(), diag::err_omp_param_or_this_in_clause) << FD->getDeclName() << (isa<CXXMethodDecl>(ADecl) ? 1 : 0);"},{m,6937,"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    Diag(E->getExprLoc(), diag::err_omp_param_or_this_in_clause) << FD->getDeclName() << (isa<CXXMethodDecl>(ADecl) ? 1 : 0);"},{m,7024,"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    Diag(E->getExprLoc(), diag::err_omp_param_or_this_in_clause) << FD->getDeclName() << (isa<CXXMethodDecl>(ADecl) ? 1 : 0);"},{m,7708,"void Sema::ActOnOpenMPDeclareVariantDirective(FunctionDecl *FD, Expr *VariantRef, OMPTraitInfo &TI, ArrayRef<Expr *> AdjustArgsNothing, ArrayRef<Expr *> AdjustArgsNeedDevicePtr, ArrayRef<OMPInteropInfo> AppendArgs, SourceLocation AdjustArgsLoc, SourceLocation AppendArgsLoc, SourceRange SR) {\n // ...\n for (Expr *E : AllAdjustArgs) {\n   // ...\n   Diag(E->getExprLoc(), diag::err_omp_param_or_this_in_clause) << FD << 0;"}},
[l]={
[l]={
["clang/test/SemaCXX/exceptions.cpp"]={"clang/test/SemaCXX/exceptions.cpp:164:24: error: rvalue reference type \'int &&\' is not allowed in exception specification"}
[Fb]={"clang/test/OpenMP/declare_simd_messages.cpp:90:51: error: expected reference to one of the parameters of function \'foo\'","clang/test/OpenMP/declare_simd_messages.cpp:90:64: error: expected reference to one of the parameters of function \'foo\'","clang/test/OpenMP/declare_simd_messages.cpp:90:51: error: expected reference to one of the parameters of function \'foo\'","clang/test/OpenMP/declare_simd_messages.cpp:90:64: error: expected reference to one of the parameters of function \'foo\'"}
}
}
},
},
["err_sampler_argument_required"]={
["err_omp_parent_cancel_region_nowait"]={
[d]="err_sampler_argument_required",
[j]="err_omp_parent_cancel_region_nowait",
[e]="sampler_t variable required - got %0",
[b]={{nil,L,"parent region for \'omp %select{cancellation point|cancel}0\' construct cannot be nowait"},{P,nil,"parent region for \'omp %select{cancellation point/cancel}0\' construct cannot be nowait"}},
[f]="sampler_t variable required - got A",
[c]={{nil,L,{"parent region for \'omp ",{"cancellation point","cancel"},"\' construct cannot be nowait"}},{P,nil,{"parent region for \'omp ",{"cancellation point/cancel"},"\' construct cannot be nowait"}}},
[g]=k,
[e]=d,
[h]="sampler_t variable required \\- got (.*?)",
[f]="parent region for \'omp (?:cancellation point|cancel)\' construct cannot be nowait",
[b]=a,
[g]=a,
[c]=m,
[i]=n,
[j]={"610541989a52",1360234547,"Add OpenCL samplers as Clang builtin types and check sampler related restrictions.","Add OpenCL samplers as Clang builtin types and check sampler related restrictions.\n\nllvm-svn: 174601"},
[h]={"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"},
[i]={{P,9310,"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       if (!SourceType->isSamplerT() && !SourceType->isIntegerType()) {\n         S.Diag(Kind.getLocation(), diag::err_sampler_argument_required) << SourceType;"}}
[k]={{m,13365,"StmtResult Sema::ActOnOpenMPCancellationPointDirective(SourceLocation StartLoc, SourceLocation EndLoc, OpenMPDirectiveKind CancelRegion) {\n  if (DSAStack->isParentNowaitRegion()) {\n    Diag(StartLoc, diag::err_omp_parent_cancel_region_nowait) << 0;"},{m,13381,"StmtResult Sema::ActOnOpenMPCancelDirective(ArrayRef<OMPClause *> Clauses, SourceLocation StartLoc, SourceLocation EndLoc, OpenMPDirectiveKind CancelRegion) {\n if (DSAStack->isParentNowaitRegion()) {\n   Diag(StartLoc, diag::err_omp_parent_cancel_region_nowait) << 1;"}}
}
}
};
};
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