Module:ClangDiags/DiagsLongData2

From emmtrix Wiki
Jump to navigation Jump to search

Documentation for this module may be created at Module:ClangDiags/DiagsLongData2/doc

local a="";
local b="message_hist";
local c="hierarchical_hist";
local d="(?:error|fatal error)\\: ";
local e="regex1";
local f="regex2";
local g="regex3";
local h="category_hist";
local i="id_hist";
local j="commit";
local k="source";
local l="tests2";
local m="Semantic Issue";
local n="None";
local o="14.0";
local p="5.0";
local q="clang/lib/Driver/ToolChains/Clang.cpp";
local r="clang/lib/Sema/SemaDeclCXX.cpp";
local s="15.0";
local t="13.0";
local u="clang/lib/Frontend/CompilerInvocation.cpp";
local v="10.0";
local w="12.0";
local x="clang/lib/Driver/Driver.cpp";
local y="6.0";
local z="9.0";
local A="11.0";
local B="7.0";
local C="8.0";
local D="16.0";
local E="clang/lib/Driver/SanitizerArgs.cpp";
local F="clang/lib/Sema/SemaDecl.cpp";
local G="clang/lib/Driver/ToolChains/Darwin.cpp";
local H="clang/lib/Sema/SemaCoroutine.cpp";
local I="equality";
local J="[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.";
local K="clang/lib/Sema/SemaExprCXX.cpp";
local L="[C++20][Modules][HU 2/5] Support searching Header Units in user or system search paths.\n\nThis is support for the user-facing options to create importable header units\nfrom headers in the user or system search paths (or to be given an absolute path).\n\nThis means that an incomplete header path will be passed by the driver and the\nlookup carried out using the search paths present when the front end is run.\n\nTo support this, we introduce file fypes for c++-{user,system,header-unit}-header.\nThese terms are the same as the ones used by GCC, to minimise the differences for\ntooling (and users).\n\nThe preprocessor checks for headers before issuing a warning for\n\"#pragma once\" in a header build.  We ensure that the importable header units\nare recognised as headers in order to avoid such warnings.\n\nDifferential Revision: https://reviews.llvm.org/D121096";
local M="Coroutines Issue";
local N="0687578728ea";
local O="clang/lib/Driver/ToolChains/WebAssembly.cpp";
local P="clang/lib/Sema/SemaDeclAttr.cpp";
local Q="Parse Issue";
local R="clang/lib/Sema/SemaTemplate.cpp";
local S="clang/lib/Driver/ToolChains/CommonArgs.cpp";
local T="AMDGPU: Teach toolchain to link rocm device libs";
local U="4593e4131aff";
local V="clang/lib/Driver/ToolChain.cpp";
local W="AMDGPU: Teach toolchain to link rocm device libs\n\nCurrently the library is separately linked, but this isn\'t correct to\nimplement fast math flags correctly. Each module should get the\nversion of the library appropriate for its combination of fast math\nand related flags, with the attributes propagated into its functions\nand internalized.\n\nHIP already maintains the list of libraries, but this is not used for\nOpenCL. Unfortunately, HIP uses a separate --hip-device-lib argument,\ndespite both languages using the same bitcode library. Eventually\nthese two searches need to be merged.\n\nAn additional problem is there are 3 different locations the libraries\nare installed, depending on which build is used. This also needs to be\nconsolidated (or at least the search logic needs to deal with this\nunnecessary complexity).";
local X="clang/lib/Sema/SemaInit.cpp";
local Y="clang/lib/Sema/SemaType.cpp";
local Z="[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee";
local ab="0175999805cf";
local bb="[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee\n\nAMDGPU backend need to know whether floating point opcodes that support exception\nflag gathering quiet and propagate signaling NaN inputs per IEEE754-2008, which is\nconveyed by a function attribute \"amdgpu-ieee\". \"amdgpu-ieee\"=\"false\" turns this off.\nWithout this function attribute backend assumes it is on for compute functions.\n\n-mamdgpu-ieee and -mno-amdgpu-ieee are added to Clang to control this function attribute.\nBy default it is on. -mno-amdgpu-ieee requires -fno-honor-nans or equivalent.\n\nReviewed by: Matt Arsenault\n\nDifferential Revision: https://reviews.llvm.org/D77013";
local cb="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 db="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local eb="Implement P2361 Unevaluated string literals";
local fb="clang/lib/Lex/LiteralSupport.cpp";
local gb="95f50964fbf5";
local hb="b1c4d5507fad";
local ib="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="clang/lib/Parse/ParseDeclCXX.cpp";
local kb="clang/test/SemaCXX/coroutines.cpp";
local lb="clang/lib/Driver/ToolChains/Arch/CSKY.cpp";
local mb="P0217R3: Perform semantic checks and initialization for the bindings in a\ndecomposition declaration for arrays, aggregate-like structs, tuple-like\ntypes, and (as an extension) for complex and vector types.\n\nllvm-svn: 278435";
local nb="P0217R3: Perform semantic checks and initialization for the bindings in a";
local ob="three-way";
local pb="clang/lib/Driver/XRayArgs.cpp";
local qb="relational";
local rb="7873de0cf65f";
local sb="clang/lib/Driver/ToolChains/Arch/ARM.cpp";
local tb="clang/lib/Driver/ToolChains/Gnu.cpp";
local ub="clang/lib/Driver/ToolChains/Hexagon.cpp";
local vb="Fold the six functions checking explicitly-defaulted special member functions";
local wb="P0217R3: Parsing support and framework for AST representation of C++1z";
local xb="bdb84f374cde";
local yb="clang/lib/Driver/ToolChains/AMDGPU.cpp";
local zb="b9e90b13cfd7";
local Ab="[c++1z] P0091R3: Basic support for deducing class template arguments via deduction-guides.\n\nllvm-svn: 294613";
local Bb="[c++1z] P0091R3: Basic support for deducing class template arguments via deduction-guides.";
local Cb="P0217R3: Parsing support and framework for AST representation of C++1z\ndecomposition declarations.\n\nThere are a couple of things in the wording that seem strange here:\ndecomposition declarations are permitted at namespace scope (which we partially\nsupport here) and they are permitted as the declaration in a template (which we\nreject).\n\nllvm-svn: 276492";
local Db="alias template";
local Eb="60437620db8e";
local Fb="clang/test/SemaCXX/virtual-override.cpp";
local Gb="function template";
local Hb="template template parameter";
local Ib="variable template";
local Jb="Fold the six functions checking explicitly-defaulted special member functions\ninto one. These were all performing almost identical checks, with different bugs\nin each of them.\n\nThis fixes PR12806 (we weren\'t setting the exception specification for an\nexplicitly-defaulted, non-user-provided default constructor) and enforces\n8.4.2/2\'s rule that an in-class defaulted member must exactly match the implicit\nparameter type.\n\nllvm-svn: 156802";
local Kb="clang/test/CXX/class/class.compare/class.compare.default/p1.cpp";
local Lb="clang/lib/Sema/SemaExpr.cpp";
local Mb="Lexical or Preprocessor Issue";
local Nb="clang/lib/CodeGen/CodeGenModule.cpp";
local Ob="clang/lib/Parse/ParseExprCXX.cpp";
local Pb="8fb0b8a2cb71";
local Qb="clang/test/CXX/temp/temp.deduct.guide/p3.cpp";
local Rb="clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp";
local Sb="Better diagnostics for covariance when checking overriding return types.";
local Tb="Better diagnostics for covariance when checking overriding return types.\n\nllvm-svn: 71786";
local Ub="clang/test/Parser/cxx1z-decomposition.cpp";
local Vb="5a8987ca5113";
local Wb="Update tablegen diagnostic files to be in sync with the def files.\n\nllvm-svn: 67004";
local Xb="clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp";
local Yb="Update tablegen diagnostic files to be in sync with the def files.";
local Zb="clang/lib/Driver/ToolChains/Cuda.cpp";
local ac="__global__";
local bc="__host__ __device__";
local cc="__host__";
local dc="__device__";
local ec="clang/test/Lexer/char-escapes-delimited.c:40:13: error: invalid digit \'g\' in escape sequence";

return {
	["err_convertvector_non_vector_type"]={
		[i]="err_convertvector_non_vector_type",
		[b]="second argument to __builtin_convertvector must be a vector type",
		[c]="second argument to __builtin_convertvector must be a vector type",
		[e]=d,
		[f]="second argument to __builtin_convertvector must be a vector type",
		[g]=a,
		[h]=m,
		[j]={"c4d7c82c7f73",1379474985,"Add the intrinsic __builtin_convertvector","Add the intrinsic __builtin_convertvector\n\nLLVM supports applying conversion instructions to vectors of the same number of\nelements (fptrunc, fptosi, etc.) but there had been no way for a Clang user to\ncause such instructions to be generated when using builtin vector types.\n\nC-style casting on vectors is already defined in terms of bitcasts, and so\ncannot be used for these conversions as well (without leading to a very\nconfusing set of semantics). As a result, this adds a __builtin_convertvector\nintrinsic (patterned after the OpenCL __builtin_astype intrinsic). This is\nintended to aid the creation of vector intrinsic headers that create generic IR\ninstead of target-dependent intrinsics (in other words, this is a generic\n_mm_cvtepi32_ps). As noted in the documentation, the action of\n__builtin_convertvector is defined in terms of the action of a C-style cast on\neach vector element.\n\nllvm-svn: 190915"},
		[k]={{"clang/lib/Sema/SemaChecking.cpp",8539,"/// SemaConvertVectorExpr - Handle __builtin_convertvector\nExprResult Sema::SemaConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo, SourceLocation BuiltinLoc, SourceLocation RParenLoc) {\n  // ...\n  if (!DstTy->isVectorType() && !DstTy->isDependentType())\n    return ExprError(Diag(BuiltinLoc, diag::err_convertvector_non_vector_type));"}},
		[l]={
			["clang/test/Sema/convertvector.c"]={"clang/test/Sema/convertvector.c:11:10: error: second argument to __builtin_convertvector must be a vector type"}
		}
	},
	["err_copy_capture_with_copy_default"]={
		[i]="err_copy_capture_with_copy_default",
		[b]="\'&\' must precede a capture when the capture default is \'=\'",
		[c]="\'&\' must precede a capture when the capture default is \'=\'",
		[e]=d,
		[f]="\'&\' must precede a capture when the capture default is \'\\=\'",
		[g]=a,
		[h]="Lambda Issue",
		[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"},
		[k]={{"clang/lib/Sema/SemaLambda.cpp",1122,"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      // ...\n      } else if (C->Kind == LCK_ByCopy && Intro.Default == LCD_ByCopy) {\n        Diag(C->Loc, diag::err_copy_capture_with_copy_default) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(PrevCaptureLoc), C->Loc));"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p8.cpp:9:15: error: \'&\' must precede a capture when the capture default is \'=\'"}
		}
	},
	["err_coro_invalid_addr_of_label"]={
		[i]={{nil,D,"err_coro_invalid_addr_of_label"}},
		[b]={{nil,D,"the GNU address of label extension is not allowed in coroutines."}},
		[c]={{nil,D,"the GNU address of label extension is not allowed in coroutines."}},
		[e]=d,
		[f]="the GNU address of label extension is not allowed in coroutines\\.",
		[g]=a,
		[h]={{nil,D,M}},
		[j]={gb,1625925174,eb,ib},
		[k]={{H,1131,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // ...\n  // Coroutines will get splitted into pieces. The GNU address of label\n  // extension wouldn\'t be meaningful in coroutines.\n  for (AddrLabelExpr *ALE : Fn->AddrLabels)\n    Diag(ALE->getBeginLoc(), diag::err_coro_invalid_addr_of_label);"}},
		[l]={
			["clang/test/SemaCXX/addr-label-in-coroutines.cpp"]={"clang/test/SemaCXX/addr-label-in-coroutines.cpp:16:38: error: the GNU address of label extension is not allowed in coroutines.","clang/test/SemaCXX/addr-label-in-coroutines.cpp:17:38: error: the GNU address of label extension is not allowed in coroutines.","clang/test/SemaCXX/addr-label-in-coroutines.cpp:18:38: error: the GNU address of label extension is not allowed in coroutines.","clang/test/SemaCXX/addr-label-in-coroutines.cpp:34:25: error: the GNU address of label extension is not allowed in coroutines.","clang/test/SemaCXX/addr-label-in-coroutines.cpp:35:25: error: the GNU address of label extension is not allowed in coroutines.","clang/test/SemaCXX/addr-label-in-coroutines.cpp:36:25: error: the GNU address of label extension is not allowed in coroutines.","clang/test/SemaCXX/addr-label-in-coroutines.cpp:53:29: error: the GNU address of label extension is not allowed in coroutines.","clang/test/SemaCXX/addr-label-in-coroutines.cpp:54:29: error: the GNU address of label extension is not allowed in coroutines.","clang/test/SemaCXX/addr-label-in-coroutines.cpp:55:29: error: the GNU address of label extension is not allowed in coroutines."}
		}
	},
	["err_coroutine_handle_missing_member"]={
		[i]={{nil,p,"err_coroutine_handle_missing_member"}},
		[b]={{nil,o,"std::coroutine_handle must have a member named \'%0\'"},{t,p,"std::experimental::coroutine_handle missing a member named \'%0\'"}},
		[c]={{nil,o,"std::coroutine_handle must have a member named \'A\'"},{t,p,"std::experimental::coroutine_handle missing a member named \'A\'"}},
		[e]=d,
		[f]="std\\:\\:coroutine_handle must have a member named \'(.*?)\'",
		[g]=a,
		[h]={{nil,p,M}},
		[j]={"6dcb0eb301c7",1489028983,"[coroutines] Build and pass coroutine_handle to await_suspend","[coroutines] Build and pass coroutine_handle to await_suspend\n\nSummary:\nThis patch adds passing a coroutine_handle object to await_suspend calls.\nIt builds the coroutine_handle using coroutine_handle<PromiseType>::from_address(__builtin_coro_frame()).\n\n(a revision of https://reviews.llvm.org/D26316 that for some reason refuses to apply via arc patch)\n\nReviewers: GorNishanov\n\nSubscribers: mehdi_amini, cfe-commits, EricWF\n\nDifferential Revision: https://reviews.llvm.org/D30769\n\nllvm-svn: 297356"},
		[k]={{H,276,"static ExprResult buildCoroutineHandle(Sema &S, QualType PromiseType, SourceLocation Loc) {\n  // ...\n  if (!S.LookupQualifiedName(Found, LookupCtx)) {\n    S.Diag(Loc, diag::err_coroutine_handle_missing_member) << \"from_address\";"}},
		[l]={
			[kb]={"clang/test/SemaCXX/coroutines.cpp:768:7: error: std::coroutine_handle must have a member named \'from_address\'"}
		}
	},
	["err_coroutine_invalid_func_context"]={
		[i]="err_coroutine_invalid_func_context",
		[b]={{nil,z,"\'%1\' cannot be used in %select{a constructor|a destructor|the \'main\' function|a constexpr function|a function with a deduced return type|a varargs function|a consteval function}0"},{C,nil,"\'%1\' cannot be used in %select{a constructor|a destructor|a copy assignment operator|a move assignment operator|the \'main\' function|a constexpr function|a function with a deduced return type|a varargs function}0"}},
		[c]={{nil,z,{"\'B\' cannot be used in ",{"a constructor","a destructor","the \'main\' function","a constexpr function","a function with a deduced return type","a varargs function","a consteval function"}}},{C,nil,{"\'B\' cannot be used in ",{"a constructor","a destructor","a copy assignment operator","a move assignment operator","the \'main\' function","a constexpr function","a function with a deduced return type","a varargs function"}}}},
		[e]=d,
		[f]="\'(.*?)\' cannot be used in (?:a constructor|a destructor|the \'main\' function|a constexpr function|a function with a deduced return type|a varargs function|a consteval function)",
		[g]=a,
		[h]=M,
		[j]={"c8efda7f8094",1477593808,"[coroutines] Add diagnostics for copy/move assignment operators and functions with deduced return ty...","[coroutines] Add diagnostics for copy/move assignment operators and functions with deduced return types.\n\nSummary: The title says it all. Additionally this patch refactors the diagnostic code into a separate function.\n\nReviewers: GorNishanov, rsmith\n\nSubscribers: majnemer, mehdi_amini, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D25292\n\nllvm-svn: 285331"},
		[k]={{H,211,"static bool isValidCoroutineContext(Sema &S, SourceLocation Loc, StringRef Keyword) {\n  // ...\n  auto DiagInvalid = [&](InvalidFuncDiag ID) {\n    S.Diag(Loc, diag::err_coroutine_invalid_func_context) << ID << Keyword;"}},
		[l]={
			["clang/test/SemaCXX/co_await-range-for.cpp"]={"clang/test/SemaCXX/co_await-range-for.cpp:128:7: error: \'co_await\' cannot be used in a constexpr function"}
		}
	},
	["err_coroutine_objc_method"]={
		[i]="err_coroutine_objc_method",
		[b]="Objective-C methods as coroutines are not yet supported",
		[c]="Objective-C methods as coroutines are not yet supported",
		[e]=d,
		[f]="Objective\\-C methods as coroutines are not yet supported",
		[g]=a,
		[h]=M,
		[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"},
		[k]={{H,193,"static bool isValidCoroutineContext(Sema &S, SourceLocation Loc, StringRef Keyword) {\n  // ...\n  if (!FD) {\n    S.Diag(Loc, isa<ObjCMethodDecl>(S.CurContext) ? diag::err_coroutine_objc_method : diag::err_coroutine_outside_function) << Keyword;"}}
	},
	["err_coroutine_outside_function"]={
		[i]="err_coroutine_outside_function",
		[b]="\'%0\' cannot be used outside a function",
		[c]="\'A\' cannot be used outside a function",
		[e]=d,
		[f]="\'(.*?)\' cannot be used outside a function",
		[g]=a,
		[h]=M,
		[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"},
		[k]={{H,194,"static bool isValidCoroutineContext(Sema &S, SourceLocation Loc, StringRef Keyword) {\n  // ...\n  if (!FD) {\n    S.Diag(Loc, isa<ObjCMethodDecl>(S.CurContext) ? diag::err_coroutine_objc_method : diag::err_coroutine_outside_function) << Keyword;"}},
		[l]={
			[kb]={"clang/test/SemaCXX/coroutines.cpp:351:33: error: \'co_await\' cannot be used outside a function"}
		}
	},
	["err_coroutine_promise_final_suspend_requires_nothrow"]={
		[i]={{nil,A,"err_coroutine_promise_final_suspend_requires_nothrow"}},
		[b]={{nil,A,"the expression \'co_await __promise.final_suspend()\' is required to be non-throwing"}},
		[c]={{nil,A,"the expression \'co_await __promise.final_suspend()\' is required to be non-throwing"}},
		[e]=d,
		[f]="the expression \'co_await __promise\\.final_suspend\\(\\)\' is required to be non\\-throwing",
		[g]=a,
		[h]={{nil,A,M}},
		[j]={"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"},
		[k]={{H,638,"/// Recursively check \\p E and all its children to see if any call target\n/// (including constructor call) is declared noexcept. Also any value returned\n/// from the call has a noexcept destructor.\nstatic void checkNoThrow(Sema &S, const Stmt *E, llvm::SmallPtrSetImpl<const Decl *> &ThrowingDecls) {\n  auto checkDeclNoexcept = [&](const Decl *D, bool IsDtor = false) {\n    // In the case of dtor, the call to dtor is implicit and hence we should\n    // pass nullptr to canCalleeThrow.\n    if (Sema::canCalleeThrow(S, IsDtor ? nullptr : cast<Expr>(E), D)) {\n      // ...\n      if (ThrowingDecls.empty()) {\n        // ...\n        S.Diag(cast<FunctionDecl>(S.CurContext)->getLocation(), diag::err_coroutine_promise_final_suspend_requires_nothrow);"}},
		[l]={
			["clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp"]={"clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp:51:8: error: the expression \'co_await __promise.final_suspend()\' is required to be non-throwing","clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp:103:16: error: the expression \'co_await __promise.final_suspend()\' is required to be non-throwing","clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp:57:8: error: the expression \'co_await __promise.final_suspend()\' is required to be non-throwing"}
		}
	},
	["err_coroutine_promise_get_return_object_on_allocation_failure"]={
		[i]={{nil,p,"err_coroutine_promise_get_return_object_on_allocation_failure"}},
		[b]={{nil,p,"%0: \'get_return_object_on_allocation_failure()\' must be a static member function"}},
		[c]={{nil,p,"A: \'get_return_object_on_allocation_failure()\' must be a static member function"}},
		[e]=d,
		[f]="(.*?)\\: \'get_return_object_on_allocation_failure\\(\\)\' must be a static member function",
		[g]=a,
		[h]={{nil,p,M}},
		[j]={"3aa9eb38a076",1490657819,"[coroutines] Handle get_return_object_on_allocation_failure","[coroutines] Handle get_return_object_on_allocation_failure\n\nSummary:\nIf promise_type has get_return_object_on_allocation_failure defined,\ncheck if an allocation function returns nullptr, and if so,\nreturn the result of get_return_object_on_allocation_failure().\n\nReviewers: rsmith, EricWF\n\nReviewed By: EricWF\n\nSubscribers: mehdi_amini, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D31399\n\nllvm-svn: 298891"},
		[k]={{H,1227,"static bool diagReturnOnAllocFailure(Sema &S, Expr *E, CXXRecordDecl *PromiseRecordDecl, FunctionScopeInfo &Fn) {\n  // ...\n  S.Diag(Loc, diag::err_coroutine_promise_get_return_object_on_allocation_failure) << PromiseRecordDecl;"}},
		[l]={
			[kb]={"clang/test/SemaCXX/coroutines.cpp:794:9: error: \'promise_type\': \'get_return_object_on_allocation_failure()\' must be a static member function"}
		}
	},
	["err_coroutine_promise_incompatible_return_functions"]={
		[i]={{nil,p,"err_coroutine_promise_incompatible_return_functions"}},
		[b]={{nil,p,"the coroutine promise type %0 declares both \'return_value\' and \'return_void\'"}},
		[c]={{nil,p,"the coroutine promise type A declares both \'return_value\' and \'return_void\'"}},
		[e]=d,
		[f]="the coroutine promise type (.*?) declares both \'return_value\' and \'return_void\'",
		[g]=a,
		[h]={{nil,p,M}},
		[j]={"fc50f62caafd",1495724379,"[coroutines] Diagnose when promise types fail to declare either return_void or return_value.","[coroutines] Diagnose when promise types fail to declare either return_void or return_value.\n\nSummary:\nAccording to the PDTS it\'s perfectly legal to have a promise type that defines neither `return_value` nor `return_void`. However a coroutine that uses such a promise type will almost always have UB, because it can never `co_return`.\n\nThis patch changes Clang to diagnose such cases as an error. It also cleans up some of the diagnostic messages relating to member lookup in the promise type.\n\nReviewers: GorNishanov, rsmith\n\nReviewed By: GorNishanov\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D33534\n\nllvm-svn: 303868"},
		[k]={{H,1632,"bool CoroutineStmtBuilder::makeOnFallthrough() {\n  // ...\n  if (HasRVoid && HasRValue) {\n    // ...\n    S.Diag(FD.getLocation(), diag::err_coroutine_promise_incompatible_return_functions) << PromiseRecordDecl;"}},
		[l]={
			[kb]={"clang/test/SemaCXX/coroutines.cpp:636:21: error: the coroutine promise type \'bad_promise_6\' declares both \'return_value\' and \'return_void\'","clang/test/SemaCXX/coroutines.cpp:641:9: error: the coroutine promise type \'bad_promise_6\' declares both \'return_value\' and \'return_void\'"}
		}
	},
	["err_coroutine_promise_new_requires_nothrow"]={
		[i]={{nil,p,"err_coroutine_promise_new_requires_nothrow"}},
		[b]={{nil,p,"%0 is required to have a non-throwing noexcept specification when the promise type declares \'get_return_object_on_allocation_failure()\'"}},
		[c]={{nil,p,"A is required to have a non-throwing noexcept specification when the promise type declares \'get_return_object_on_allocation_failure()\'"}},
		[e]=d,
		[f]="(.*?) is required to have a non\\-throwing noexcept specification when the promise type declares \'get_return_object_on_allocation_failure\\(\\)\'",
		[g]=a,
		[h]={{nil,p,M}},
		[j]={"627a63cf5081",1492334399,"[coroutines] Fix building of new/delete expressions when get_return_object_on_allocation_failure() i...","[coroutines] Fix building of new/delete expressions when get_return_object_on_allocation_failure() is present.\n\nSummary:\nThis patch implements [dcl.fct.def.coroutine]p8:\n> The unqualified-id get_return_object_on_allocation_failure is looked up in the scope of\n> class P by class member access lookup (3.4.5). If a declaration is found, ..., and if a \n> global allocation function is selected, the ::operator new(size_t, nothrow_t) form shall be used.\n> [...]\n> The allocation function used in this case must have a non-throwing noexcept-specification.\n\nReviewers: GorNishanov, rsmith, majnemer, aaron.ballman\n\nReviewed By: GorNishanov\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D31562\n\nllvm-svn: 300420"},
		[k]={{H,1497,"bool CoroutineStmtBuilder::makeNewAndDeleteExpr() {\n  // ...\n  if (RequiresNoThrowAlloc) {\n    // ...\n    if (!FT->isNothrow(/*ResultIfDependent*/ false)) {\n      S.Diag(OperatorNew->getLocation(), diag::err_coroutine_promise_new_requires_nothrow) << OperatorNew;"}},
		[l]={
			[kb]={"clang/test/SemaCXX/coroutines.cpp:834:16: error: \'operator new\' is required to have a non-throwing noexcept specification when the promise type declares \'get_return_object_on_allocation_failure()\'","clang/test/SemaCXX/coroutines.cpp:834:16: error: \'operator new\' is required to have a non-throwing noexcept specification when the promise type declares \'get_return_object_on_allocation_failure()\'"}
		}
	},
	["err_coroutine_promise_type_incomplete"]={
		[i]={{nil,p,"err_coroutine_promise_type_incomplete"}},
		[b]={{nil,p,"this function cannot be a coroutine: %0 is an incomplete type"}},
		[c]={{nil,p,"this function cannot be a coroutine: A is an incomplete type"}},
		[e]=d,
		[f]="this function cannot be a coroutine\\: (.*?) is an incomplete type",
		[g]=a,
		[h]={{nil,p,M}},
		[j]={"89bf0e725f6f",1488840748,"[coroutines] Improve diagnostics when building implicit constructs.","[coroutines] Improve diagnostics when building implicit constructs.\n\nPreviously when a coroutine was building the implicit setup/destroy\nconstructs it would emit diagostics about failures on the first co_await/co_return/co_yield\nit encountered. This was confusing because that construct may not itself be ill-formed.\n\nThis patch moves the diagnostics to the function start instead.\n\nllvm-svn: 297089"},
		[k]={{H,132,"/// Look up the std::coroutine_traits<...>::promise_type for the given\n/// function type.\nstatic QualType lookupPromiseType(Sema &S, const FunctionDecl *FD, SourceLocation KwLoc) {\n  // ...\n  if (S.RequireCompleteType(FuncLoc, buildElaboratedType(), diag::err_coroutine_promise_type_incomplete))"}},
		[l]={
			[kb]={"clang/test/SemaCXX/coroutines.cpp:121:6: error: this function cannot be a coroutine: \'std::coroutine_traits<void>::promise_type\' (aka \'promise\') is an incomplete type"}
		}
	},
	["err_coroutine_promise_unhandled_exception_required"]={
		[i]={{nil,p,"err_coroutine_promise_unhandled_exception_required"}},
		[b]={{nil,p,"%0 is required to declare the member \'unhandled_exception()\'"}},
		[c]={{nil,p,"A is required to declare the member \'unhandled_exception()\'"}},
		[e]=d,
		[f]="(.*?) is required to declare the member \'unhandled_exception\\(\\)\'",
		[g]=a,
		[h]={{nil,p,M}},
		[j]={"a9fdb346dbc6",1490229213,"[coroutines] Implement unhandled_exception changes.","[coroutines] Implement unhandled_exception changes.\n\nSummary:\nThis patch adopts the recent changes that renamed `set_exception(exception_pointer)` to `unhandled_exception()`. \n\nAdditionally `unhandled_exception()` is now required, and so an error is emitted when exceptions are enabled but the promise type does not provide the member.\nWhen exceptions are disabled a warning is emitted instead of an error, The warning notes that the `unhandled_exception()` function is required when exceptions are enabled.\n\nReviewers: rsmith, GorNishanov, aaron.ballman, majnemer\n\nReviewed By: GorNishanov\n\nSubscribers: mehdi_amini, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D30859\n\nllvm-svn: 298565"},
		[k]={{H,1677,"bool CoroutineStmtBuilder::makeOnException() {\n  // ...\n  if (!lookupMember(S, \"unhandled_exception\", PromiseRecordDecl, Loc)) {\n    auto DiagID = RequireUnhandledException ? diag::err_coroutine_promise_unhandled_exception_required : diag::warn_coroutine_promise_unhandled_exception_required_with_exceptions;"}},
		[l]={
			[kb]={"clang/test/SemaCXX/coroutines.cpp:652:21: error: \'bad_promise_7\' is required to declare the member \'unhandled_exception()\'","clang/test/SemaCXX/coroutines.cpp:657:9: error: \'bad_promise_7\' is required to declare the member \'unhandled_exception()\'"}
		}
	},
	["err_coroutine_type_missing_specialization"]={
		[i]={{nil,p,"err_coroutine_type_missing_specialization"}},
		[b]={{nil,B,"this function cannot be a coroutine: missing definition of specialization %0"},{y,p,"this function cannot be a coroutine: missing definition of specialization %q0"}},
		[c]={{nil,p,"this function cannot be a coroutine: missing definition of specialization A"}},
		[e]=d,
		[f]="this function cannot be a coroutine\\: missing definition of specialization (.*?)",
		[g]=a,
		[h]={{nil,p,M}},
		[j]={"6dcb0eb301c7",1489028983,"[coroutines] Build and pass coroutine_handle to await_suspend","[coroutines] Build and pass coroutine_handle to await_suspend\n\nSummary:\nThis patch adds passing a coroutine_handle object to await_suspend calls.\nIt builds the coroutine_handle using coroutine_handle<PromiseType>::from_address(__builtin_coro_frame()).\n\n(a revision of https://reviews.llvm.org/D26316 that for some reason refuses to apply via arc patch)\n\nReviewers: GorNishanov\n\nSubscribers: mehdi_amini, cfe-commits, EricWF\n\nDifferential Revision: https://reviews.llvm.org/D30769\n\nllvm-svn: 297356"},
		[k]={{H,98,"/// Look up the std::coroutine_traits<...>::promise_type for the given\n/// function type.\nstatic QualType lookupPromiseType(Sema &S, const FunctionDecl *FD, SourceLocation KwLoc) {\n  // ...\n  if (S.RequireCompleteType(KwLoc, CoroTrait, diag::err_coroutine_type_missing_specialization))"},{H,176,"/// Look up the std::coroutine_handle<PromiseType>.\nstatic QualType lookupCoroutineHandleType(Sema &S, QualType PromiseType, SourceLocation Loc) {\n  // ...\n  if (S.RequireCompleteType(Loc, CoroHandleType, diag::err_coroutine_type_missing_specialization))"}},
		[l]={
			["clang/test/SemaCXX/coroutine-traits-undefined-template.cpp"]={"clang/test/SemaCXX/coroutine-traits-undefined-template.cpp:17:3: error: this function cannot be a coroutine: missing definition of specialization \'coroutine_traits<void>\'"}
		}
	},
	["err_coroutine_unevaluated_context"]={
		[i]="err_coroutine_unevaluated_context",
		[b]="\'%0\' cannot be used in an unevaluated context",
		[c]="\'A\' cannot be used in an unevaluated context",
		[e]=d,
		[f]="\'(.*?)\' cannot be used in an unevaluated context",
		[g]=a,
		[h]=M,
		[j]={"744b224bb511",1447988041,"[coroutines] Per latest wording paper, co_* are no longer permitted in any","[coroutines] Per latest wording paper, co_* are no longer permitted in any\nunevaluated operands.\n\nllvm-svn: 253641"},
		[k]={{H,776,"// [expr.await]p2, emphasis added: \"An await-expression shall appear only in\n// a *potentially evaluated* expression within the compound-statement of a\n// function-body *outside of a handler* [...] A context within a function\n// where an await-expression can appear is called a suspension context of the\n// function.\"\nstatic bool checkSuspensionContext(Sema &S, SourceLocation Loc, StringRef Keyword) {\n  // First emphasis of [expr.await]p2: must be a potentially evaluated context.\n  // That is, \'co_await\' and \'co_yield\' cannot appear in subexpressions of\n  // \\c sizeof.\n  if (S.isUnevaluatedContext()) {\n    S.Diag(Loc, diag::err_coroutine_unevaluated_context) << Keyword;"}},
		[l]={
			["clang/test/SemaCXX/coroutine-decltype.cpp"]={"clang/test/SemaCXX/coroutine-decltype.cpp:27:42: error: \'co_await\' cannot be used in an unevaluated context","clang/test/SemaCXX/coroutine-decltype.cpp:32:42: error: \'co_yield\' cannot be used in an unevaluated context"}
		}
	},
	["err_coroutine_unfound_nothrow_new"]={
		[i]={{nil,D,"err_coroutine_unfound_nothrow_new"}},
		[b]={{nil,D,"unable to find %select{\'::operator new(size_t, nothrow_t)\'|\'::operator new(size_t, align_val_t, nothrow_t)\'}1 for %0"}},
		[c]={{nil,D,{"unable to find ",{"\'::operator new(size_t, nothrow_t)\'","\'::operator new(size_t, align_val_t, nothrow_t)\'"}," for A"}}},
		[e]=d,
		[f]="unable to find (?:\'\\:\\:operator new\\(size_t, nothrow_t\\)\'|\'\\:\\:operator new\\(size_t, align_val_t, nothrow_t\\)\') for (.*?)",
		[g]=a,
		[h]={{nil,D,M}},
		[j]={gb,1625925174,eb,ib},
		[k]={{H,1487,"bool CoroutineStmtBuilder::makeNewAndDeleteExpr() {\n  // ...\n  if (!OperatorNew) {\n    if (PromiseContainsNew)\n    // ...\n    else if (RequiresNoThrowAlloc)\n      S.Diag(Loc, diag::err_coroutine_unfound_nothrow_new) << &FD << S.getLangOpts().CoroAlignedAllocation;"}},
		[l]={
			["clang/test/SemaCXX/coroutine-alloc-3.cpp"]={"clang/test/SemaCXX/coroutine-alloc-3.cpp:49:16: error: unable to find \'::operator new(size_t, nothrow_t)\' for \'f\'","clang/test/SemaCXX/coroutine-alloc-3.cpp:49:16: error: unable to find \'::operator new(size_t, nothrow_t)\' for \'f\'"}
		}
	},
	["err_coroutine_unusable_new"]={
		[i]={{nil,s,"err_coroutine_unusable_new"}},
		[b]={{nil,s,"\'operator new\' provided by %0 is not usable with the function signature of %1"}},
		[c]={{nil,s,"\'operator new\' provided by A is not usable with the function signature of B"}},
		[e]=d,
		[f]="\'operator new\' provided by (.*?) is not usable with the function signature of (.*?)",
		[g]=a,
		[h]={{nil,s,M}},
		[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"},
		[k]={{H,1485,"bool CoroutineStmtBuilder::makeNewAndDeleteExpr() {\n  // ...\n  if (!OperatorNew) {\n    if (PromiseContainsNew)\n      S.Diag(Loc, diag::err_coroutine_unusable_new) << PromiseType << &FD;"}},
		[l]={
			["clang/test/SemaCXX/coroutine-alloc-2.cpp"]={"clang/test/SemaCXX/coroutine-alloc-2.cpp:50:16: error: \'operator new\' provided by \'std::coroutine_traits<int, promise_on_alloc_failure_tag>::promise_type\' is not usable with the function signature of \'f\'","clang/test/SemaCXX/coroutine-alloc-2.cpp:50:16: error: \'operator new\' provided by \'std::coroutine_traits<int, promise_on_alloc_failure_tag>::promise_type\' is not usable with the function signature of \'f\'"}
		}
	},
	["err_coroutine_within_handler"]={
		[i]={{nil,z,"err_coroutine_within_handler"}},
		[b]={{nil,z,"\'%0\' cannot be used in the handler of a try block"}},
		[c]={{nil,z,"\'A\' cannot be used in the handler of a try block"}},
		[e]=d,
		[f]="\'(.*?)\' cannot be used in the handler of a try block",
		[g]=a,
		[h]={{nil,z,M}},
		[j]={"9db9b1a17501",1552681549,"[coroutines][PR40978] Emit error for co_yield within catch block","[coroutines][PR40978] Emit error for co_yield within catch block\n\nSummary:\nAs reported in https://bugs.llvm.org/show_bug.cgi?id=40978, it\'s an\nerror to use the `co_yield` or `co_await` keywords outside of a valid\n\"suspension context\" as defined by [expr.await]p2 of\nhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/n4775.pdf.\n\nWhether or not the current scope was in a function-try-block\'s\n(https://en.cppreference.com/w/cpp/language/function-try-block) handler\ncould be determined using scope flag `Scope::FnTryCatchScope`. No\nsuch flag existed for a simple C++ catch statement, so this commit adds\none.\n\nReviewers: GorNishanov, tks2103, rsmith\n\nReviewed By: GorNishanov\n\nSubscribers: EricWF, jdoerfert, cfe-commits, lewissbaker\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D59076\n\nllvm-svn: 356296"},
		[k]={{H,782,"// [expr.await]p2, emphasis added: \"An await-expression shall appear only in\n// a *potentially evaluated* expression within the compound-statement of a\n// function-body *outside of a handler* [...] A context within a function\n// where an await-expression can appear is called a suspension context of the\n// function.\"\nstatic bool checkSuspensionContext(Sema &S, SourceLocation Loc, StringRef Keyword) {\n  // ...\n  // Second emphasis of [expr.await]p2: must be outside of an exception handler.\n  if (isWithinCatchScope(S.getCurScope())) {\n    S.Diag(Loc, diag::err_coroutine_within_handler) << Keyword;"}},
		[l]={
			[kb]={"clang/test/SemaCXX/coroutines.cpp:357:5: error: \'co_await\' cannot be used in the handler of a try block","clang/test/SemaCXX/coroutines.cpp:365:7: error: \'co_await\' cannot be used in the handler of a try block","clang/test/SemaCXX/coroutines.cpp:383:5: error: \'co_yield\' cannot be used in the handler of a try block"}
		}
	},
	["err_covariant_return_ambiguous_derived_to_base_conv"]={
		[i]="err_covariant_return_ambiguous_derived_to_base_conv",
		[b]="return type of virtual function %3 is not covariant with the return type of the function it overrides (ambiguous conversion from derived class %0 to base class %1:%2)",
		[c]="return type of virtual function D is not covariant with the return type of the function it overrides (ambiguous conversion from derived class A to base class B:C)",
		[e]=d,
		[f]="return type of virtual function (.*?) is not covariant with the return type of the function it overrides \\(ambiguous conversion from derived class (.*?) to base class (.*?)\\:(.*?)\\)",
		[g]=a,
		[h]=m,
		[j]={Pb,1242330739,Sb,Tb},
		[k]={{r,18086,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {\n    // ...\n    if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy, diag::err_covariant_return_inaccessible_base, diag::err_covariant_return_ambiguous_derived_to_base_conv, New->getLocation(), New->getReturnTypeSourceRange(), New->getDeclName(), nullptr)) {"}},
		[l]={
			[Fb]={"clang/test/SemaCXX/virtual-override.cpp:56:14: error: return type of virtual function \'f\' is not covariant with the return type of the function it overrides (ambiguous conversion from derived class \'b\' to base class \'a\':"}
		}
	},
	["err_covariant_return_inaccessible_base"]={
		[i]="err_covariant_return_inaccessible_base",
		[b]="invalid covariant return for virtual function: %1 is a %select{private|protected}2 base class of %0",
		[c]={{nil,nil,{"invalid covariant return for virtual function: B is a ",{"private","protected"}," base class of A"}}},
		[e]=d,
		[f]="invalid covariant return for virtual function\\: (.*?) is a (?:private|protected) base class of (.*?)",
		[g]=a,
		[h]=m,
		[j]={Pb,1242330739,Sb,Tb},
		[k]={{r,18085,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {\n    // ...\n    if (CheckDerivedToBaseConversion(NewClassTy, OldClassTy, diag::err_covariant_return_inaccessible_base, diag::err_covariant_return_ambiguous_derived_to_base_conv, New->getLocation(), New->getReturnTypeSourceRange(), New->getDeclName(), nullptr)) {"}},
		[l]={
			[Fb]={"clang/test/SemaCXX/virtual-override.cpp:40:14: error: invalid covariant return for virtual function: \'a\' is a private base class of \'b\'"}
		}
	},
	["err_covariant_return_incomplete"]={
		[i]="err_covariant_return_incomplete",
		[b]="return type of virtual function %0 is not covariant with the return type of the function it overrides (%1 is incomplete)",
		[c]="return type of virtual function A is not covariant with the return type of the function it overrides (B is incomplete)",
		[e]=d,
		[f]="return type of virtual function (.*?) is not covariant with the return type of the function it overrides \\((.*?) is incomplete\\)",
		[g]=a,
		[h]=m,
		[j]={"e60365b7b5c7",1262284464,"Make sure that an overriding return type is complete before checking if it\'s covariant. Fixes PR5920...","Make sure that an overriding return type is complete before checking if it\'s covariant. Fixes PR5920.\n\nllvm-svn: 92365"},
		[k]={{r,18067,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {\n    // C++14 [class.virtual]p8:\n    //   If the class type in the covariant return type of D::f differs from\n    //   that of B::f, the class type in the return type of D::f shall be\n    //   complete at the point of declaration of D::f or shall be the class\n    //   type D.\n    if (const RecordType *RT = NewClassTy->getAs<RecordType>()) {\n      if (!RT->isBeingDefined() && RequireCompleteType(New->getLocation(), NewClassTy, diag::err_covariant_return_incomplete, New->getDeclName()))"}},
		[l]={
			[Fb]={"clang/test/SemaCXX/virtual-override.cpp:117:8: error: return type of virtual function \'f\' is not covariant with the return type of the function it overrides (\'b\' is incomplete)"}
		}
	},
	["err_covariant_return_not_derived"]={
		[i]="err_covariant_return_not_derived",
		[b]="return type of virtual function %0 is not covariant with the return type of the function it overrides (%1 is not derived from %2)",
		[c]="return type of virtual function A is not covariant with the return type of the function it overrides (B is not derived from C)",
		[e]=d,
		[f]="return type of virtual function (.*?) is not covariant with the return type of the function it overrides \\((.*?) is not derived from (.*?)\\)",
		[g]=a,
		[h]=m,
		[j]={Pb,1242330739,Sb,Tb},
		[k]={{r,18074,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  if (!Context.hasSameUnqualifiedType(NewClassTy, OldClassTy)) {\n    // ...\n    // Check if the new class derives from the old class.\n    if (!IsDerivedFrom(New->getLocation(), NewClassTy, OldClassTy)) {\n      Diag(New->getLocation(), diag::err_covariant_return_not_derived) << New->getDeclName() << NewTy << OldTy << New->getReturnTypeSourceRange();"}},
		[l]={
			[Fb]={"clang/test/SemaCXX/virtual-override.cpp:25:14: error: return type of virtual function \'f\' is not covariant with the return type of the function it overrides (\'b *\' is not derived from \'a *\')","clang/test/SemaCXX/virtual-override.cpp:233:20: error: return type of virtual function \'f1\' is not covariant with the return type of the function it overrides (\'TD<1> *\' is not derived from \'B *\')","clang/test/SemaCXX/virtual-override.cpp:234:16: error: return type of virtual function \'f2\' is not covariant with the return type of the function it overrides (\'D *\' is not derived from \'TB<1> *\')"}
		}
	},
	["err_covariant_return_type_class_type_more_qualified"]={
		[i]="err_covariant_return_type_class_type_more_qualified",
		[b]="return type of virtual function %0 is not covariant with the return type of the function it overrides (class type %1 is more qualified than class type %2",
		[c]="return type of virtual function A is not covariant with the return type of the function it overrides (class type B is more qualified than class type C",
		[e]=d,
		[f]="return type of virtual function (.*?) is not covariant with the return type of the function it overrides \\(class type (.*?) is more qualified than class type (.*?)",
		[g]=a,
		[h]=m,
		[j]={Pb,1242330739,Sb,Tb},
		[k]={{r,18114,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  // The new class type must have the same or less qualifiers as the old type.\n  if (NewClassTy.isMoreQualifiedThan(OldClassTy)) {\n    Diag(New->getLocation(), diag::err_covariant_return_type_class_type_more_qualified) << New->getDeclName() << NewTy << OldTy << New->getReturnTypeSourceRange();"}},
		[l]={
			[Fb]={"clang/test/SemaCXX/virtual-override.cpp:90:20: error: return type of virtual function \'g\' is not covariant with the return type of the function it overrides (class type \'const a *\' is more qualified than class type \'a *\'"}
		}
	},
	["err_covariant_return_type_different_qualifications"]={
		[i]="err_covariant_return_type_different_qualifications",
		[b]="return type of virtual function %0 is not covariant with the return type of the function it overrides (%1 has different qualifiers than %2)",
		[c]="return type of virtual function A is not covariant with the return type of the function it overrides (B has different qualifiers than C)",
		[e]=d,
		[f]="return type of virtual function (.*?) is not covariant with the return type of the function it overrides \\((.*?) has different qualifiers than (.*?)\\)",
		[g]=a,
		[h]=m,
		[j]={Pb,1242330739,Sb,Tb},
		[k]={{r,18102,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  // The qualifiers of the return types must be the same.\n  if (NewTy.getLocalCVRQualifiers() != OldTy.getLocalCVRQualifiers()) {\n    Diag(New->getLocation(), diag::err_covariant_return_type_different_qualifications) << New->getDeclName() << NewTy << OldTy << New->getReturnTypeSourceRange();"}},
		[l]={
			[Fb]={"clang/test/SemaCXX/virtual-override.cpp:74:14: error: return type of virtual function \'g\' is not covariant with the return type of the function it overrides (\'a *\' has different qualifiers than \'a *const\')"}
		}
	},
	["err_cpu_dispatch_mismatch"]={
		[i]={{nil,B,"err_cpu_dispatch_mismatch"}},
		[b]={{nil,B,"\'cpu_dispatch\' function redeclared with different CPUs"}},
		[c]={{nil,B,"\'cpu_dispatch\' function redeclared with different CPUs"}},
		[e]=d,
		[f]="\'cpu_dispatch\' function redeclared with different CPUs",
		[g]=a,
		[h]={{nil,B,n}},
		[j]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning\n\nAs documented here: https://software.intel.com/en-us/node/682969 and\nhttps://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning\nis an ICC feature that provides for function multiversioning.\n\nThis feature is implemented with two attributes: First, cpu_specific,\nwhich specifies the individual function versions. Second, cpu_dispatch,\nwhich specifies the location of the resolver function and the list of\nresolvable functions.\n\nThis is valuable since it provides a mechanism where the resolver\'s TU\ncan be specified in one location, and the individual implementions\neach in their own translation units.\n\nThe goal of this patch is to be source-compatible with ICC, so this\nimplementation diverges from the ICC implementation in a few ways:\n1- Linux x86/64 only: This implementation uses ifuncs in order to\nproperly dispatch functions. This is is a valuable performance benefit\nover the ICC implementation. A future patch will be provided to enable\nthis feature on Windows, but it will obviously more closely fit ICC\'s\nimplementation.\n2- CPU Identification functions: ICC uses a set of custom functions to identify\nthe feature list of the host processor. This patch uses the cpu_supports\nfunctionality in order to better align with \'target\' multiversioning.\n1- cpu_dispatch function def/decl: ICC\'s cpu_dispatch requires that the function\nmarked cpu_dispatch be an empty definition. This patch supports that as well,\nhowever declarations are also permitted, since the linker will solve the\nissue of multiple emissions.\n\nDifferential Revision: https://reviews.llvm.org/D47474\n\nllvm-svn: 337552"},
		[k]={{F,11508,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Next, check ALL non-invalid non-overloads to see if this is a redeclaration\n  // of a previous member of the MultiVersion set.\n  for (NamedDecl *ND : Previous) {\n    // ...\n    case MultiVersionKind::CPUSpecific:\n    case MultiVersionKind::CPUDispatch: {\n      // ...\n      // Handle CPUDispatch/CPUSpecific versions.\n      // Only 1 CPUDispatch function is allowed, this will make it go through\n      // the redeclaration errors.\n      if (NewMVKind == MultiVersionKind::CPUDispatch && CurFD->hasAttr<CPUDispatchAttr>()) {\n        // ...\n        S.Diag(NewFD->getLocation(), diag::err_cpu_dispatch_mismatch);"}},
		[l]={
			["clang/test/Sema/attr-cpuspecific.c"]={"clang/test/Sema/attr-cpuspecific.c:76:44: error: \'cpu_dispatch\' function redeclared with different CPUs"}
		}
	},
	["err_cpu_specific_multiple_defs"]={
		[i]={{nil,B,"err_cpu_specific_multiple_defs"}},
		[b]={{nil,B,"multiple \'cpu_specific\' functions cannot specify the same CPU: %0"}},
		[c]={{nil,B,"multiple \'cpu_specific\' functions cannot specify the same CPU: A"}},
		[e]=d,
		[f]="multiple \'cpu_specific\' functions cannot specify the same CPU\\: (.*?)",
		[g]=a,
		[h]={{nil,B,n}},
		[j]={"3efe00206f0f",1532096008,"Implement cpu_dispatch/cpu_specific Multiversioning","Implement cpu_dispatch/cpu_specific Multiversioning\n\nAs documented here: https://software.intel.com/en-us/node/682969 and\nhttps://software.intel.com/en-us/node/523346. cpu_dispatch multiversioning\nis an ICC feature that provides for function multiversioning.\n\nThis feature is implemented with two attributes: First, cpu_specific,\nwhich specifies the individual function versions. Second, cpu_dispatch,\nwhich specifies the location of the resolver function and the list of\nresolvable functions.\n\nThis is valuable since it provides a mechanism where the resolver\'s TU\ncan be specified in one location, and the individual implementions\neach in their own translation units.\n\nThe goal of this patch is to be source-compatible with ICC, so this\nimplementation diverges from the ICC implementation in a few ways:\n1- Linux x86/64 only: This implementation uses ifuncs in order to\nproperly dispatch functions. This is is a valuable performance benefit\nover the ICC implementation. A future patch will be provided to enable\nthis feature on Windows, but it will obviously more closely fit ICC\'s\nimplementation.\n2- CPU Identification functions: ICC uses a set of custom functions to identify\nthe feature list of the host processor. This patch uses the cpu_supports\nfunctionality in order to better align with \'target\' multiversioning.\n1- cpu_dispatch function def/decl: ICC\'s cpu_dispatch requires that the function\nmarked cpu_dispatch be an empty definition. This patch supports that as well,\nhowever declarations are also permitted, since the linker will solve the\nissue of multiple emissions.\n\nDifferential Revision: https://reviews.llvm.org/D47474\n\nllvm-svn: 337552"},
		[k]={{F,11531,"/// Check the validity of a new function declaration being added to an existing\n/// multiversioned declaration collection.\nstatic bool CheckMultiVersionAdditionalDecl(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, MultiVersionKind NewMVKind, const CPUDispatchAttr *NewCPUDisp, const CPUSpecificAttr *NewCPUSpec, const TargetClonesAttr *NewClones, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  // ...\n  // Next, check ALL non-invalid non-overloads to see if this is a redeclaration\n  // of a previous member of the MultiVersion set.\n  for (NamedDecl *ND : Previous) {\n    // ...\n    case MultiVersionKind::CPUSpecific:\n    case MultiVersionKind::CPUDispatch: {\n      // ...\n      if (NewMVKind == MultiVersionKind::CPUSpecific && CurCPUSpec) {\n        // ...\n        // Only 1 version of CPUSpecific is allowed for each CPU.\n        for (const IdentifierInfo *CurII : CurCPUSpec->cpus()) {\n          for (const IdentifierInfo *NewII : NewCPUSpec->cpus()) {\n            if (CurII == NewII) {\n              S.Diag(NewFD->getLocation(), diag::err_cpu_specific_multiple_defs) << NewII;"}},
		[l]={
			["clang/test/Sema/attr-cpuspecific.c"]={"clang/test/Sema/attr-cpuspecific.c:61:41: error: multiple \'cpu_specific\' functions cannot specify the same CPU: \'atom\'","clang/test/Sema/attr-cpuspecific.c:66:52: error: multiple \'cpu_specific\' functions cannot specify the same CPU: \'ivybridge\'"}
		}
	},
	["err_cpu_unsupported_isa"]={
		[i]={{nil,y,"err_cpu_unsupported_isa"}},
		[b]={{nil,y,"CPU \'%0\' does not support \'%1\' execution mode"}},
		[c]={{nil,y,"CPU \'A\' does not support \'B\' execution mode"}},
		[e]=d,
		[f]="CPU \'(.*?)\' does not support \'(.*?)\' execution mode",
		[g]=a,
		[h]={{nil,y,n}},
		[j]={"83e57c232702",1501843218,"[Driver] Error if ARM mode was selected explicitly for M-profile CPUs.","[Driver] Error if ARM mode was selected explicitly for M-profile CPUs.\n\nSummary:\nM-class profiles do not support ARM execution mode, so providing\n-marm/-mno-thumb does not make sense in combination with -mcpu/-march\noptions that support the M-profile.\n\nThis is a follow-up patch to D35569 and it seemed pretty clear that we\nshould emit an error in the driver in this case.\n\nWe probably also should warn/error if the provided -mcpu/-march options\ndo not match, e.g. -mcpu=cortex-m0 -march=armv8-a is invalid, as\ncortex-m0 does not support armv8-a. But that should be a separate patch\nI think.\n\n\nReviewers: echristo, richard.barton.arm, rengolin, labrinea, charles.baylis\n\nReviewed By: rengolin\n\nSubscribers: aemerson, javed.absar, kristof.beyls, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D35826\n\nllvm-svn: 310047"},
		[k]={{sb,265,"void arm::setArchNameInTriple(const Driver &D, const ArgList &Args, types::ID InputType, llvm::Triple &Triple) {\n  // ...\n  if (IsMProfile && ARMModeRequested) {\n    if (MCPU.size())\n      D.Diag(diag::err_cpu_unsupported_isa) << CPU << \"ARM\";"}}
	},
	["err_ctor_dtor_returns_void"]={
		[i]="err_ctor_dtor_returns_void",
		[b]="%select{constructor|destructor}1 %0 must not return void expression",
		[c]={{nil,nil,{{"constructor","destructor"}," A must not return void expression"}}},
		[e]=d,
		[f]="(?:constructor|destructor) (.*?) must not return void expression",
		[g]=a,
		[h]=m,
		[j]={"a759848126ba",1386090608,"Issue diagnostic when constructor or destructor","Issue diagnostic when constructor or destructor\nreturn void expression. // rdar://15366494\npr17759.\n\nllvm-svn: 196296"},
		[k]={{"clang/lib/Sema/SemaStmt.cpp",4079,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  // ...\n  if (FnRetType->isVoidType()) {\n    if (RetValExp) {\n      if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n      // ...\n      } else if (!RetValExp->isTypeDependent()) {\n        // ...\n        if (RetValExp->getType()->isVoidType()) {\n          // ...\n          if (isa<CXXConstructorDecl>(CurDecl) || isa<CXXDestructorDecl>(CurDecl))\n            D = diag::err_ctor_dtor_returns_void;"},{"clang/lib/Sema/SemaStmt.cpp",4093,"StmtResult Sema::BuildReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp, bool AllowRecovery) {\n  // ...\n  if (FnRetType->isVoidType()) {\n    if (RetValExp) {\n      if (auto *ILE = dyn_cast<InitListExpr>(RetValExp)) {\n      // ...\n      } else if (!RetValExp->isTypeDependent()) {\n        // ...\n        if (D == diag::err_ctor_dtor_returns_void) {"}},
		[l]={
			["clang/test/SemaCXX/return.cpp"]={"clang/test/SemaCXX/return.cpp:114:11: error: constructor \'S\' must not return void expression","clang/test/SemaCXX/return.cpp:115:12: error: destructor \'~S\' must not return void expression","clang/test/SemaCXX/return.cpp:119:12: error: constructor \'ST<T>\' must not return void expression","clang/test/SemaCXX/return.cpp:121:13: error: destructor \'~ST<T>\' must not return void expression","clang/test/SemaCXX/return.cpp:119:12: error: constructor \'ST\' must not return void expression","clang/test/SemaCXX/return.cpp:121:13: error: destructor \'~ST\' must not return void expression"}
		}
	},
	["err_ctor_init_missing_comma"]={
		[i]="err_ctor_init_missing_comma",
		[b]="missing \',\' between base or member initializers",
		[c]="missing \',\' between base or member initializers",
		[e]=d,
		[f]="missing \',\' between base or member initializers",
		[g]=a,
		[h]=Q,
		[j]={"3465e26102ee",1283870110,"Improve diagnostic and recovery when missing a comma between base or","Improve diagnostic and recovery when missing a comma between base or\nmember initializers in a C++ constructor. Fixes <rdar://problem/7796492>.\n\nllvm-svn: 113199"},
		[k]={{jb,3760,"/// ParseConstructorInitializer - Parse a C++ constructor initializer,\n/// which explicitly initializes the members or base classes of a\n/// class (C++ [class.base.init]). For example, the three initializers\n/// after the \':\' in the Derived constructor below:\n///\n/// @code\n/// class Base { };\n/// class Derived : Base {\n///   int x;\n///   float f;\n/// public:\n///   Derived(float f) : Base(), x(17), f(f) { }\n/// };\n/// @endcode\n///\n/// [C++]  ctor-initializer:\n///          \':\' mem-initializer-list\n///\n/// [C++]  mem-initializer-list:\n///          mem-initializer ...[opt]\n///          mem-initializer ...[opt] , mem-initializer-list\nvoid Parser::ParseConstructorInitializer(Decl *ConstructorDecl) {\n  // ...\n  do {\n    // ...\n    if (Tok.is(tok::comma))\n    // ...\n    else if (Tok.is(tok::l_brace))\n    // ...\n    // If the previous initializer was valid and the next token looks like a\n    // base or member initializer, assume that we\'re just missing a comma.\n    else if (!MemInit.isInvalid() && Tok.isOneOf(tok::identifier, tok::coloncolon)) {\n      // ...\n      Diag(Loc, diag::err_ctor_init_missing_comma) << FixItHint::CreateInsertion(Loc, \", \");"}},
		[l]={
			["clang/test/Parser/cxx-invalid-function-decl.cpp"]={"clang/test/Parser/cxx-invalid-function-decl.cpp:33:24: error: missing \',\' between base or member initializers","clang/test/Parser/cxx-invalid-function-decl.cpp:41:31: error: missing \',\' between base or member initializers","clang/test/Parser/cxx-invalid-function-decl.cpp:41:51: error: missing \',\' between base or member initializers"}
		}
	},
	["err_ctu_error_opening"]={
		[i]={{nil,C,"err_ctu_error_opening"}},
		[b]={{nil,C,"error opening \'%0\': required by the CrossTU functionality"}},
		[c]={{nil,C,"error opening \'A\': required by the CrossTU functionality"}},
		[e]=d,
		[f]="error opening \'(.*?)\'\\: required by the CrossTU functionality",
		[g]=a,
		[h]={{nil,C,n}},
		[j]={"0f25c747a32a",1544758510,"Fix up diagnostics.","Fix up diagnostics.\n\nMove some diagnostics around between Diagnostic*Kinds.td files.  Diagnostics\nused in multiple places were moved to DiagnosticCommonKinds.td.  Diagnostics\nlisted in the wrong place (ie, Sema diagnostics listed in\nDiagnosticsParseKinds.td) were moved to the correct places.  One diagnostic\nsplit into two so that the diagnostic string is in the .td file instead of in\ncode.  Cleaned up the diagnostic includes after all the changes.\n\nllvm-svn: 349125"},
		[k]={{"clang/lib/CrossTU/CrossTranslationUnit.cpp",374,"void CrossTranslationUnitContext::emitCrossTUDiagnostics(const IndexError &IE) {\n  // ...\n  case index_error_code::missing_index_file:\n    Context.getDiagnostics().Report(diag::err_ctu_error_opening) << IE.getFileName();"}}
	},
	["err_cuda_device_builtin_surftex_cls_template"]={
		[i]={{nil,A,"err_cuda_device_builtin_surftex_cls_template"}},
		[b]={{nil,A,"illegal device builtin %select{surface|texture}0 reference class template %1 declared here"}},
		[c]={{nil,A,{"illegal device builtin ",{"surface","texture"}," reference class template B declared here"}}},
		[e]=d,
		[f]="illegal device builtin (?:surface|texture) reference class template (.*?) declared here",
		[g]=a,
		[h]={{nil,A,m}},
		[j]={"931fcd3ba011",1576908663,"[WebAssembly] Improve clang diagnostics for wasm attributes","[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"},
		[k]={{r,6316,"static void checkCUDADeviceBuiltinSurfaceClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  // ...\n  auto reportIllegalClassTemplate = [&ErrorReported](Sema &S, ClassTemplateDecl *TD) {\n    // ...\n    S.Diag(TD->getLocation(), diag::err_cuda_device_builtin_surftex_cls_template) << /*surface*/ 0 << TD;"},{r,6370,"static void checkCUDADeviceBuiltinTextureClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  // ...\n  auto reportIllegalClassTemplate = [&ErrorReported](Sema &S, ClassTemplateDecl *TD) {\n    // ...\n    S.Diag(TD->getLocation(), diag::err_cuda_device_builtin_surftex_cls_template) << /*texture*/ 1 << TD;"}},
		[l]={
			["clang/test/SemaCUDA/bad-attributes.cu"]={"clang/test/SemaCUDA/bad-attributes.cu:83:53: error: illegal device builtin surface reference class template \'s2_cls_template\' declared here","clang/test/SemaCUDA/bad-attributes.cu:86:53: error: illegal device builtin texture reference class template \'t2_cls_template\' declared here","clang/test/SemaCUDA/bad-attributes.cu:90:53: error: illegal device builtin surface reference class template \'s3_cls_template\' declared here","clang/test/SemaCUDA/bad-attributes.cu:94:53: error: illegal device builtin texture reference class template \'t3_cls_template\' declared here"}
		}
	},
	["err_cuda_device_builtin_surftex_ref_decl"]={
		[i]={{nil,A,"err_cuda_device_builtin_surftex_ref_decl"}},
		[b]={{nil,A,"illegal device builtin %select{surface|texture}0 reference type %1 declared here"}},
		[c]={{nil,A,{"illegal device builtin ",{"surface","texture"}," reference type B declared here"}}},
		[e]=d,
		[f]="illegal device builtin (?:surface|texture) reference type (.*?) declared here",
		[g]=a,
		[h]={{nil,A,m}},
		[j]={"931fcd3ba011",1576908663,"[WebAssembly] Improve clang diagnostics for wasm attributes","[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"},
		[k]={{r,6326,"static void checkCUDADeviceBuiltinSurfaceClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  // ...\n  if (!TD) {\n    // ...\n    if (!SD) {\n      S.Diag(Class->getLocation(), diag::err_cuda_device_builtin_surftex_ref_decl) << /*surface*/ 0 << Class;"},{r,6380,"static void checkCUDADeviceBuiltinTextureClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  // ...\n  if (!TD) {\n    // ...\n    if (!SD) {\n      S.Diag(Class->getLocation(), diag::err_cuda_device_builtin_surftex_ref_decl) << /*texture*/ 1 << Class;"}},
		[l]={
			["clang/test/SemaCUDA/bad-attributes.cu"]={"clang/test/SemaCUDA/bad-attributes.cu:77:53: error: illegal device builtin surface reference type \'s1_ref\' declared here","clang/test/SemaCUDA/bad-attributes.cu:79:53: error: illegal device builtin texture reference type \'t1_ref\' declared here"}
		}
	},
	["err_cuda_device_exceptions"]={
		[i]="err_cuda_device_exceptions",
		[b]="cannot use \'%0\' in %select{__device__|__global__|__host__|__host__ __device__}1 function",
		[c]={{nil,nil,{"cannot use \'A\' in ",{dc,ac,cc,bc}," function"}}},
		[e]=d,
		[f]="cannot use \'(.*?)\' in (?:__device__|__global__|__host__|__host__ __device__) function",
		[g]=a,
		[h]=m,
		[j]={"2a8db34044c3",1475102754,"[CUDA] Disallow exceptions in device code.","[CUDA] Disallow exceptions in device code.\n\nReviewers: tra\n\nSubscribers: cfe-commits, jhen\n\nDifferential Revision: https://reviews.llvm.org/D25036\n\nllvm-svn: 282646"},
		[k]={{K,880,"ExprResult Sema::BuildCXXThrow(SourceLocation OpLoc, Expr *Ex, bool IsThrownVarInScope) {\n  // ...\n  // Exceptions aren\'t allowed in CUDA device code.\n  if (getLangOpts().CUDA)\n    CUDADiagIfDeviceCode(OpLoc, diag::err_cuda_device_exceptions) << \"throw\" << CurrentCUDATarget();"},{"clang/lib/Sema/SemaStmt.cpp",4484,"/// ActOnCXXTryBlock - Takes a try compound-statement and a number of\n/// handlers and creates a try statement from them.\nStmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock, ArrayRef<Stmt *> Handlers) {\n  // ...\n  // Exceptions aren\'t allowed in CUDA device code.\n  if (getLangOpts().CUDA)\n    CUDADiagIfDeviceCode(TryLoc, diag::err_cuda_device_exceptions) << \"try\" << CurrentCUDATarget();"}},
		[l]={
			["clang/test/SemaCUDA/deferred-diags.cu"]={"clang/test/SemaCUDA/deferred-diags.cu:7:3: error: cannot use \'throw\' in __host__ __device__ function","clang/test/SemaCUDA/deferred-diags.cu:7:3: error: cannot use \'throw\' in __host__ __device__ function","clang/test/SemaCUDA/deferred-diags.cu:12:3: error: cannot use \'throw\' in __host__ __device__ function","clang/test/SemaCUDA/deferred-diags.cu:12:3: error: cannot use \'throw\' in __host__ __device__ function"}
		}
	},
	["err_cuda_extern_shared"]={
		[i]="err_cuda_extern_shared",
		[b]="__shared__ variable %0 cannot be \'extern\'",
		[c]="__shared__ variable A cannot be \'extern\'",
		[e]=d,
		[f]="__shared__ variable (.*?) cannot be \'extern\'",
		[g]=a,
		[h]=m,
		[j]={"1041101953da",1475279850,"[CUDA] Disallow \'extern __shared__\' variables.","[CUDA] Disallow \'extern __shared__\' variables.\n\nAlso add a test that we disallow\n\n  __constant__ __shared__ int x;\n\nbecause it\'s possible to break this without breaking\n\n  __shared__ __constant__ int x;\n\nReviewers: rnk\n\nSubscribers: cfe-commits, tra\n\nDifferential Revision: https://reviews.llvm.org/D25125\n\nllvm-svn: 282985"},
		[k]={{P,5027,"static void handleSharedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // extern __shared__ is only allowed on arrays with no length (e.g.\n  // \"int x[]\").\n  if (!S.getLangOpts().GPURelocatableDeviceCode && VD->hasExternalStorage() && !isa<IncompleteArrayType>(VD->getType())) {\n    S.Diag(AL.getLoc(), diag::err_cuda_extern_shared) << VD;"}},
		[l]={
			["clang/test/SemaCUDA/extern-shared.cu"]={"clang/test/SemaCUDA/extern-shared.cu:12:10: error: __shared__ variable \'x\' cannot be \'extern\'","clang/test/SemaCUDA/extern-shared.cu:14:10: error: __shared__ variable \'arr0\' cannot be \'extern\'","clang/test/SemaCUDA/extern-shared.cu:15:10: error: __shared__ variable \'arr1\' cannot be \'extern\'","clang/test/SemaCUDA/extern-shared.cu:16:10: error: __shared__ variable \'ptr\' cannot be \'extern\'","clang/test/SemaCUDA/extern-shared.cu:21:10: error: __shared__ variable \'arr0\' cannot be \'extern\'","clang/test/SemaCUDA/extern-shared.cu:22:10: error: __shared__ variable \'arr1\' cannot be \'extern\'","clang/test/SemaCUDA/extern-shared.cu:23:10: error: __shared__ variable \'ptr\' cannot be \'extern\'","clang/test/SemaCUDA/extern-shared.cu:26:8: error: __shared__ variable \'global\' cannot be \'extern\'","clang/test/SemaCUDA/extern-shared.cu:28:8: error: __shared__ variable \'global_arr1\' cannot be \'extern\'"}
		}
	},
	["err_cuda_host_shared"]={
		[i]="err_cuda_host_shared",
		[b]="__shared__ local variables not allowed in %select{__device__|__global__|__host__|__host__ __device__}0 functions",
		[c]={{nil,nil,{"__shared__ local variables not allowed in ",{dc,ac,cc,bc}," functions"}}},
		[e]=d,
		[f]="__shared__ local variables not allowed in (?:__device__|__global__|__host__|__host__ __device__) functions",
		[g]=a,
		[h]=m,
		[j]={"aa370bd0d77c",1476384313,"[CUDA] Disallow __shared__ variables in host functions.","[CUDA] Disallow __shared__ variables in host functions.\n\nReviewers: tra, rnk\n\nSubscribers: cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D25143\n\nllvm-svn: 284144"},
		[k]={{P,5031,"static void handleSharedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (S.getLangOpts().CUDA && VD->hasLocalStorage() && S.CUDADiagIfHostCode(AL.getLoc(), diag::err_cuda_host_shared) << S.CurrentCUDATarget())"}},
		[l]={
			["clang/test/SemaCUDA/bad-attributes.cu"]={"clang/test/SemaCUDA/bad-attributes.cu:68:3: error: __shared__ local variables not allowed in __host__ functions"}
		}
	},
	["err_cuda_nonstatic_constdev"]={
		[i]={{nil,w,"err_cuda_nonstatic_constdev"}},
		[b]={{nil,w,"__constant__, __device__, and __managed__ are not allowed on non-static local variables"}},
		[c]={{nil,w,"__constant__, __device__, and __managed__ are not allowed on non-static local variables"}},
		[e]=d,
		[f]="__constant__, __device__, and __managed__ are not allowed on non\\-static local variables",
		[g]=a,
		[h]={{nil,w,m}},
		[j]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
		[k]={{P,5008,"static void handleConstantAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (VD->hasLocalStorage()) {\n    S.Diag(AL.getLoc(), diag::err_cuda_nonstatic_constdev);"},{P,5076,"static void handleDeviceAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      S.Diag(AL.getLoc(), diag::err_cuda_nonstatic_constdev);"},{P,5092,"static void handleManagedAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      S.Diag(AL.getLoc(), diag::err_cuda_nonstatic_constdev);"}},
		[l]={
			["clang/test/SemaCUDA/device-var-init.cu"]={"clang/test/SemaCUDA/device-var-init.cu:220:3: error: __constant__, __device__, and __managed__ are not allowed on non-static local variables","clang/test/SemaCUDA/device-var-init.cu:222:3: error: __constant__, __device__, and __managed__ are not allowed on non-static local variables","clang/test/SemaCUDA/device-var-init.cu:220:3: error: __constant__, __device__, and __managed__ are not allowed on non-static local variables","clang/test/SemaCUDA/device-var-init.cu:222:3: error: __constant__, __device__, and __managed__ are not allowed on non-static local variables"}
		}
	},
	["err_cuda_ovl_target"]={
		[i]="err_cuda_ovl_target",
		[b]="%select{__device__|__global__|__host__|__host__ __device__}0 function %1 cannot overload %select{__device__|__global__|__host__|__host__ __device__}2 function %3",
		[c]={{nil,nil,{{dc,ac,cc,bc}," function B cannot overload ",{dc,ac,cc,bc}," function D"}}},
		[e]=d,
		[f]="(?:__device__|__global__|__host__|__host__ __device__) function (.*?) cannot overload (?:__device__|__global__|__host__|__host__ __device__) function (.*?)",
		[g]=a,
		[h]=m,
		[j]={"13e9b4d76851",1481138836,"[CUDA] Improve target attribute checking for function templates.","[CUDA] Improve target attribute checking for function templates.\n\n* __host__ __device__ functions are no longer considered to be\n  redeclarations of __host__ or __device__ functions. This prevents\n  unintentional merging of target attributes across them.\n* Function target attributes are not considered (and must match) during\n  explicit instantiation and specialization of function templates.\n\nDifferential Revision: https://reviews.llvm.org/D25809\n\nllvm-svn: 288962"},
		[k]={{"clang/lib/Sema/SemaCUDA.cpp",924,"void Sema::checkCUDATargetOverload(FunctionDecl *NewFD, const LookupResult &Previous) {\n  // ...\n  for (NamedDecl *OldND : Previous) {\n    // ...\n    // Don\'t allow HD and global functions to overload other functions with the\n    // same signature.  We allow overloading based on CUDA attributes so that\n    // functions can have different implementations on the host and device, but\n    // HD/global functions \"exist\" in some sense on both the host and device, so\n    // should have the same implementation on both sides.\n    if (NewTarget != OldTarget && ((NewTarget == CFT_HostDevice) || (OldTarget == CFT_HostDevice) || (NewTarget == CFT_Global) || (OldTarget == CFT_Global)) &&\n      // ...\n      Diag(NewFD->getLocation(), diag::err_cuda_ovl_target) << NewTarget << NewFD->getDeclName() << OldTarget << OldFD;"}},
		[l]={
			["clang/test/SemaCUDA/function-template-overload.cu"]={"clang/test/SemaCUDA/function-template-overload.cu:39:41: error: __device__ function \'overload_hd\' cannot overload __host__ __device__ function \'overload_hd\'","clang/test/SemaCUDA/function-template-overload.cu:52:45: error: __host__ __device__ function \'overload_h\' cannot overload __host__ function \'overload_h\'"}
		}
	},
	["err_cuda_unattributed_constexpr_cannot_overload_device"]={
		[i]="err_cuda_unattributed_constexpr_cannot_overload_device",
		[b]={{nil,B,"constexpr function %0 without __host__ or __device__ attributes cannot overload __device__ function with same signature.  Add a __host__ attribute, or build with -fno-cuda-host-device-constexpr."},{y,nil,"constexpr function \'%0\' without __host__ or __device__ attributes cannot overload __device__ function with same signature.  Add a __host__ attribute, or build with -fno-cuda-host-device-constexpr."}},
		[c]={{nil,B,"constexpr function A without __host__ or __device__ attributes cannot overload __device__ function with same signature.  Add a __host__ attribute, or build with -fno-cuda-host-device-constexpr."},{y,nil,"constexpr function \'A\' without __host__ or __device__ attributes cannot overload __device__ function with same signature.  Add a __host__ attribute, or build with -fno-cuda-host-device-constexpr."}},
		[e]=d,
		[f]="constexpr function (.*?) without __host__ or __device__ attributes cannot overload __device__ function with same signature\\.  Add a __host__ attribute, or build with \\-fno\\-cuda\\-host\\-device\\-constexpr\\.",
		[g]=a,
		[h]=m,
		[j]={"ba122ab42fe5",1459380621,"[CUDA] Make unattributed constexpr functions implicitly host+device.","[CUDA] Make unattributed constexpr functions implicitly host+device.\n\nWith this patch, by a constexpr function is implicitly host+device\nunless:\n\n a) it\'s a variadic function (variadic functions are not allowed on the\n    device side), or\n b) it\'s preceeded by a __device__ overload in a system header.\n\nThe restriction on overloading __host__ __device__ functions on the\nbasis of their CUDA attributes remains in place, but we use (b) to allow\nus to define __device__ overloads for constexpr functions in cmath,\nwhich would otherwise be __host__ __device__ and thus not overloadable.\n\nYou can disable this behavior with -fno-cuda-host-device-constexpr.\n\nReviewers: tra, rnk, rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D18380\n\nllvm-svn: 264964"},
		[k]={{"clang/lib/Sema/SemaCUDA.cpp",697,"// With -fcuda-host-device-constexpr, an unattributed constexpr function is\n// treated as implicitly __host__ __device__, unless:\n//  * it is a variadic function (device-side variadic functions are not\n//    allowed), or\n//  * a __device__ function with this signature was already declared, in which\n//    case in which case we output an error, unless the __device__ decl is in a\n//    system header, in which case we leave the constexpr function unattributed.\n//\n// In addition, all function decls are treated as __host__ __device__ when\n// ForceCUDAHostDeviceDepth > 0 (corresponding to code within a\n//   #pragma clang force_cuda_host_device_begin/end\n// pair).\nvoid Sema::maybeAddCUDAHostDeviceAttrs(FunctionDecl *NewD, const LookupResult &Previous) {\n  // ...\n  if (It != Previous.end()) {\n    // ...\n    if (!getSourceManager().isInSystemHeader(Match->getLocation())) {\n      Diag(NewD->getLocation(), diag::err_cuda_unattributed_constexpr_cannot_overload_device) << NewD;"}},
		[l]={
			["clang/test/SemaCUDA/host-device-constexpr.cu"]={"clang/test/SemaCUDA/host-device-constexpr.cu:44:15: error: constexpr function \'NonSysHdrOverload\' without __host__ or __device__ attributes cannot overload __device__ function with same signature.  Add a __host__ attribute, or build with -fno-cuda-host-device-constexpr."}
		}
	},
	["err_cuda_vla"]={
		[i]="err_cuda_vla",
		[b]="cannot use variable-length arrays in %select{__device__|__global__|__host__|__host__ __device__}0 functions",
		[c]={{nil,nil,{"cannot use variable-length arrays in ",{dc,ac,cc,bc}," functions"}}},
		[e]=d,
		[f]="cannot use variable\\-length arrays in (?:__device__|__global__|__host__|__host__ __device__) functions",
		[g]=a,
		[h]=m,
		[j]={"b17840de33e3",1475102758,"[CUDA] Disallow variable-length arrays in CUDA device code.","[CUDA] Disallow variable-length arrays in CUDA device code.\n\nReviewers: tra\n\nSubscribers: cfe-commits, jhen\n\nDifferential Revision: https://reviews.llvm.org/D25050\n\nllvm-svn: 282647"},
		[k]={{Y,2673,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // ...\n  if (T->isVariableArrayType() && !Context.getTargetInfo().isVLASupported()) {\n    // ...\n    targetDiag(Loc, IsCUDADevice ? diag::err_cuda_vla : diag::err_vla_unsupported) << (IsCUDADevice ? CurrentCUDATarget() : 0);"}},
		[l]={
			["clang/test/SemaCUDA/no-call-stack-for-immediate-errs.cu"]={"clang/test/SemaCUDA/no-call-stack-for-immediate-errs.cu:16:10: error: cannot use variable-length arrays in __device__ functions"}
		}
	},
	["err_current_module_name_mismatch"]={
		[i]="err_current_module_name_mismatch",
		[b]="module name \'%0\' specified on command line does not match name of module",
		[c]="module name \'A\' specified on command line does not match name of module",
		[e]=d,
		[f]="module name \'(.*?)\' specified on command line does not match name of module",
		[g]=a,
		[h]="Modules Issue",
		[j]={"964cc53d9a74",1471570986,"C++ Modules TS: support parsing the \'module\' declaration (including extensions","C++ Modules TS: support parsing the \'module\' declaration (including extensions\nfrom p0273r0 approved by EWG). We\'ll eventually need to handle this from the\nlexer as well, in order to disallow preprocessor directives preceding the\nmodule declaration and to support macro import.\n\nllvm-svn: 279196"},
		[k]={{"clang/lib/Sema/SemaModule.cpp",295,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // ...\n  // If a module name was explicitly specified on the command line, it must be\n  // correct.\n  if (!getLangOpts().CurrentModule.empty() && getLangOpts().CurrentModule != ModuleName) {\n    Diag(Path.front().second, diag::err_current_module_name_mismatch) << SourceRange(Path.front().second, IsPartition ? Partition.back().second : Path.back().second) << getLangOpts().CurrentModule;"}}
	},
	["err_cxx11_attribute_forbids_arguments"]={
		[i]="err_cxx11_attribute_forbids_arguments",
		[b]="attribute %0 cannot have an argument list",
		[c]="attribute A cannot have an argument list",
		[e]=d,
		[f]="attribute (.*?) cannot have an argument list",
		[g]=a,
		[h]=Q,
		[j]={"96d5c76498b2",1258792989,"Added rudimentary C++0x attribute support.","Added rudimentary C++0x attribute support.\nThe following attributes are currently supported in C++0x attribute\nlists (and in GNU ones as well):\n - align() - semantics believed to be conformant to n3000, except for\n   redeclarations and what entities it may apply to\n - final - semantics believed to be conformant to CWG issue 817\'s proposed\n   wording, except for redeclarations\n - noreturn - semantics believed to be conformant to n3000, except for\n   redeclarations\n - carries_dependency - currently ignored (this is an optimization hint)\n\nllvm-svn: 89543"},
		[k]={{jb,4466,"/// ParseCXX11AttributeArgs -- Parse a C++11 attribute-argument-clause.\n///\n/// [C++11] attribute-argument-clause:\n///         \'(\' balanced-token-seq \')\'\n///\n/// [C++11] balanced-token-seq:\n///         balanced-token\n///         balanced-token-seq balanced-token\n///\n/// [C++11] balanced-token:\n///         \'(\' balanced-token-seq \')\'\n///         \'[\' balanced-token-seq \']\'\n///         \'{\' balanced-token-seq \'}\'\n///         any token but \'(\', \')\', \'[\', \']\', \'{\', or \'}\'\nbool Parser::ParseCXX11AttributeArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc, ParsedAttributes &Attrs, SourceLocation *EndLoc, IdentifierInfo *ScopeName, SourceLocation ScopeLoc, CachedTokens &OpenMPTokens) {\n  // ...\n  if (!Attrs.empty() && IsBuiltInOrStandardCXX11Attribute(AttrName, ScopeName)) {\n    // ...\n    // If the attribute is a standard or built-in attribute and we are\n    // parsing an argument list, we need to determine whether this attribute\n    // was allowed to have an argument list (such as [[deprecated]]), and how\n    // many arguments were parsed (so we can diagnose on [[deprecated()]]).\n    if (Attr.getMaxArgs() && !NumArgs) {\n    // ...\n    } else if (!Attr.getMaxArgs()) {\n      // ...\n      Diag(LParenLoc, diag::err_cxx11_attribute_forbids_arguments) << AttrName << FixItHint::CreateRemoval(SourceRange(LParenLoc, *EndLoc));"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.unused/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.unused/p1.cpp:5:22: error: attribute \'maybe_unused\' cannot have an argument list"}
		}
	},
	["err_cxx11_attribute_forbids_ellipsis"]={
		[i]="err_cxx11_attribute_forbids_ellipsis",
		[b]={{nil,B,"attribute %0 cannot be used as an attribute pack"},{y,nil,"attribute \'%0\' cannot be used as an attribute pack"}},
		[c]={{nil,B,"attribute A cannot be used as an attribute pack"},{y,nil,"attribute \'A\' cannot be used as an attribute pack"}},
		[e]=d,
		[f]="attribute (.*?) cannot be used as an attribute pack",
		[g]=a,
		[h]=Q,
		[j]={"3dff251da1bf",1334028307,"Parsing of C++11 attributes:","Parsing of C++11 attributes:\n * Alternative tokens (such as \'compl\') are treated as identifiers in\n   attribute names.\n * An attribute-list can start with a comma.\n * An ellipsis may not be used with either of our currently-supported\n   C++11 attributes.\n\nllvm-svn: 154381"},
		[k]={{jb,4618,"/// Parse a C++11 or C2x attribute-specifier.\n///\n/// [C++11] attribute-specifier:\n///         \'[\' \'[\' attribute-list \']\' \']\'\n///         alignment-specifier\n///\n/// [C++11] attribute-list:\n///         attribute[opt]\n///         attribute-list \',\' attribute[opt]\n///         attribute \'...\'\n///         attribute-list \',\' attribute \'...\'\n///\n/// [C++11] attribute:\n///         attribute-token attribute-argument-clause[opt]\n///\n/// [C++11] attribute-token:\n///         identifier\n///         attribute-scoped-token\n///\n/// [C++11] attribute-scoped-token:\n///         attribute-namespace \'::\' identifier\n///\n/// [C++11] attribute-namespace:\n///         identifier\nvoid Parser::ParseCXX11AttributeSpecifierInternal(ParsedAttributes &Attrs, CachedTokens &OpenMPTokens, SourceLocation *EndLoc) {\n  // ...\n  while (!Tok.isOneOf(tok::r_square, tok::semi, tok::eof)) {\n    // ...\n    if (TryConsumeToken(tok::ellipsis))\n      Diag(Tok, diag::err_cxx11_attribute_forbids_ellipsis) << AttrName;"}},
		[l]={
			["clang/test/Parser/objcxx11-attributes.mm"]={"clang/test/Parser/objcxx11-attributes.mm:59:27: error: attribute \'foo\' cannot be used as an attribute pack","clang/test/Parser/objcxx11-attributes.mm:62:15: error: attribute \'used\' cannot be used as an attribute pack"}
		}
	},
	["err_cxx23_size_t_suffix"]={
		[i]="err_cxx23_size_t_suffix",
		[b]="\'size_t\' suffix for literals is a C++23 feature",
		[c]="\'size_t\' suffix for literals is a C++23 feature",
		[e]=d,
		[f]="\'size_t\' suffix for literals is a C\\+\\+23 feature",
		[g]=a,
		[h]=n,
		[j]={"dc7ebd2cb0cf",1616862441,"[C++2b] Support size_t literals","[C++2b] Support size_t literals\n\nThis adds support for C++2b\'s z/uz suffixes for size_t literals (P0330)."},
		[k]={{"clang/lib/Lex/PPExpressions.cpp",333,"/// EvaluateValue - Evaluate the token PeekTok (and any others needed) and\n/// return the computed value in Result.  Return true if there was an error\n/// parsing.  This function also returns information about the form of the\n/// expression in DT.  See above for information on what DT means.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation.\nstatic bool EvaluateValue(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // ...\n  case tok::numeric_constant: {\n    // ...\n    // \'z/uz\' literals are a C++23 feature.\n    if (Literal.isSizeT)\n      PP.Diag(PeekTok, PP.getLangOpts().CPlusPlus ? PP.getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_size_t_suffix : diag::ext_cxx23_size_t_suffix : diag::err_cxx23_size_t_suffix);"},{Lb,4060,"ExprResult Sema::ActOnNumericConstant(const Token &Tok, Scope *UDLScope) {\n  // ...\n  if (Literal.isFixedPointLiteral()) {\n  // ...\n  } else if (Literal.isFloatingLiteral()) {\n  // ...\n  } else if (!Literal.isIntegerLiteral()) {\n  // ...\n  } else {\n    // ...\n    // \'z/uz\' literals are a C++23 feature.\n    if (Literal.isSizeT)\n      Diag(Tok.getLocation(), getLangOpts().CPlusPlus ? getLangOpts().CPlusPlus23 ? diag::warn_cxx20_compat_size_t_suffix : diag::ext_cxx23_size_t_suffix : diag::err_cxx23_size_t_suffix);"}},
		[l]={
			["clang/test/SemaCXX/size_t-literal.cpp"]={"clang/test/SemaCXX/size_t-literal.cpp:87:9: error: \'size_t\' suffix for literals is a C++23 feature","clang/test/SemaCXX/size_t-literal.cpp:88:9: error: \'size_t\' suffix for literals is a C++23 feature","clang/test/SemaCXX/size_t-literal.cpp:89:9: error: \'size_t\' suffix for literals is a C++23 feature","clang/test/SemaCXX/size_t-literal.cpp:90:9: error: \'size_t\' suffix for literals is a C++23 feature","clang/test/SemaCXX/size_t-literal.cpp:91:9: error: \'size_t\' suffix for literals is a C++23 feature","clang/test/SemaCXX/size_t-literal.cpp:92:9: error: \'size_t\' suffix for literals is a C++23 feature","clang/test/SemaCXX/size_t-literal.cpp:93:9: error: \'size_t\' suffix for literals is a C++23 feature","clang/test/SemaCXX/size_t-literal.cpp:94:9: error: \'size_t\' suffix for literals is a C++23 feature","clang/test/SemaCXX/size_t-literal.cpp:95:9: error: \'size_t\' suffix for literals is a C++23 feature","clang/test/SemaCXX/size_t-literal.cpp:96:9: error: \'size_t\' suffix for literals is a C++23 feature"}
		}
	},
	["err_cyclic_alias"]={
		[i]="err_cyclic_alias",
		[b]="%select{alias|ifunc}0 definition is part of a cycle",
		[c]={{nil,nil,{{"alias","ifunc"}," definition is part of a cycle"}}},
		[e]=d,
		[f]="(?:alias|ifunc) definition is part of a cycle",
		[g]=a,
		[h]={{nil,C,n},{"7.1",nil,m}},
		[j]={"208b5c0fa5ca",1382469973,"New fix for pr17535.","New fix for pr17535.\n\nThis is a fixed version of r193161. In order to handle\n\n    void foo() __attribute__((alias(\"bar\")));\n    void bar() {}\n    void zed() __attribute__((alias(\"foo\")));\n\nit is not enough to delay aliases to the end of the TU, we have to do two\npasses over them to find if they are defined or not.\n\nThis can be implemented by producing alias as we go and just doing the second\npass at the end. This has the advantage that other parts of clang that were\nexpecting alias to be processed in order don\'t have to be changed.\n\nThis patch also handles cyclic aliases.\n\nllvm-svn: 193188"},
		[k]={{Nb,573,"static bool checkAliasedGlobal(DiagnosticsEngine &Diags, SourceLocation Location, bool IsIFunc, const llvm::GlobalValue *Alias, const llvm::GlobalValue *&GV, const llvm::MapVector<GlobalDecl, StringRef> &MangledDeclNames, SourceRange AliasRange) {\n  // ...\n  if (!GV) {\n    Diags.Report(Location, diag::err_cyclic_alias) << IsIFunc;"},{Nb,5684,"void CodeGenModule::EmitAliasDefinition(GlobalDecl GD) {\n  // ...\n  if (AA->getAliasee() == MangledName) {\n    Diags.Report(AA->getLocation(), diag::err_cyclic_alias) << 0;"},{Nb,5722,"void CodeGenModule::EmitAliasDefinition(GlobalDecl GD) {\n  // ...\n  if (Entry) {\n    if (GA->getAliasee() == Entry) {\n      Diags.Report(AA->getLocation(), diag::err_cyclic_alias) << 0;"},{Nb,5772,"void CodeGenModule::emitIFuncDefinition(GlobalDecl GD) {\n  // ...\n  if (IFA->getResolver() == MangledName) {\n    Diags.Report(IFA->getLocation(), diag::err_cyclic_alias) << 1;"},{Nb,5802,"void CodeGenModule::emitIFuncDefinition(GlobalDecl GD) {\n  // ...\n  if (Entry) {\n    if (GIF->getResolver() == Entry) {\n      Diags.Report(IFA->getLocation(), diag::err_cyclic_alias) << 1;"}},
		[l]={
			["clang/test/Sema/attr-self-alias.c"]={"clang/test/Sema/attr-self-alias.c:3:43: error: alias definition is part of a cycle"}
		}
	},
	["err_dangling_member"]={
		[i]={{nil,B,"err_dangling_member"}},
		[b]={{nil,B,"%select{reference|backing array for \'std::initializer_list\'}2 %select{|subobject of }1member %0 %select{binds to|is}2 a temporary object whose lifetime would be shorter than the lifetime of the constructed object"}},
		[c]={{nil,B,{{"reference","backing array for \'std::initializer_list\'"}," ",{a,"subobject of "},"member A ",{"binds to","is"}," a temporary object whose lifetime would be shorter than the lifetime of the constructed object"}}},
		[e]=d,
		[f]="(?:reference|backing array for \'std\\:\\:initializer_list\') (?:|subobject of )member (.*?) (?:binds to|is) a temporary object whose lifetime would be shorter than the lifetime of the constructed object",
		[g]=a,
		[h]={{nil,B,m}},
		[j]={"0e3102d1dc04",1532393708,"Warn if a local variable\'s initializer retains a pointer/reference to a","Warn if a local variable\'s initializer retains a pointer/reference to a\nnon-lifetime-extended temporary object.\n\nllvm-svn: 337790"},
		[k]={{X,8181,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  // ...\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    // ...\n    case LK_MemInitializer: {\n      if (isa<MaterializeTemporaryExpr>(L)) {\n        // Under C++ DR1696, if a mem-initializer (or a default member\n        // initializer used by the absence of one) would lifetime-extend a\n        // temporary, the program is ill-formed.\n        if (auto *ExtendingDecl = ExtendingEntity ? ExtendingEntity->getDecl() : nullptr) {\n          // ...\n          Diag(DiagLoc, shouldLifetimeExtendThroughPath(Path) != PathLifetimeKind::NoExtend ? diag::err_dangling_member : diag::warn_dangling_member) << ExtendingDecl << IsSubobjectMember << RK << DiagRange;"}},
		[l]={
			["clang/test/SemaCXX/warn-dangling-field.cpp"]={"clang/test/SemaCXX/warn-dangling-field.cpp:23:17: error: reference member \'x\' binds to a temporary object whose lifetime would be shorter than the lifetime of the constructed object","clang/test/SemaCXX/warn-dangling-field.cpp:46:15: error: reference subobject of member \'s5\' binds to a temporary object whose lifetime would be shorter than the lifetime of the constructed object","clang/test/SemaCXX/warn-dangling-field.cpp:50:15: error: reference member \'x\' binds to a temporary object whose lifetime would be shorter than the lifetime of the constructed object"}
		}
	},
	["err_dealloc_bad_result_type"]={
		[i]="err_dealloc_bad_result_type",
		[b]="dealloc return type must be correctly specified as \'void\' under ARC, instead of %0",
		[c]="dealloc return type must be correctly specified as \'void\' under ARC, instead of A",
		[e]=d,
		[f]="dealloc return type must be correctly specified as \'void\' under ARC, instead of (.*?)",
		[g]=a,
		[h]=m,
		[j]={"f881267db9a9",1480718311,"Mass-rename the handful of error_* diagnostics to err_*.","Mass-rename the handful of error_* diagnostics to err_*.\n\nllvm-svn: 288545"},
		[k]={{"clang/lib/Sema/SemaDeclObjC.cpp",244,"/// Check a method declaration for compatibility with the Objective-C\n/// ARC conventions.\nbool Sema::CheckARCMethodDecl(ObjCMethodDecl *method) {\n  // ...\n  case OMF_dealloc:\n    if (!Context.hasSameType(method->getReturnType(), Context.VoidTy)) {\n      // ...\n      if (ResultTypeRange.isInvalid())\n        Diag(method->getLocation(), diag::err_dealloc_bad_result_type) << method->getReturnType() << FixItHint::CreateInsertion(method->getSelectorLoc(0), \"(void)\");"},{"clang/lib/Sema/SemaDeclObjC.cpp",248,"/// Check a method declaration for compatibility with the Objective-C\n/// ARC conventions.\nbool Sema::CheckARCMethodDecl(ObjCMethodDecl *method) {\n  // ...\n  case OMF_dealloc:\n    if (!Context.hasSameType(method->getReturnType(), Context.VoidTy)) {\n      // ...\n      if (ResultTypeRange.isInvalid())\n      // ...\n      else\n        Diag(method->getLocation(), diag::err_dealloc_bad_result_type) << method->getReturnType() << FixItHint::CreateReplacement(ResultTypeRange, \"void\");"}},
		[l]={
			["clang/test/SemaObjC/dealloc.m"]={"clang/test/SemaObjC/dealloc.m:6:1: error: dealloc return type must be correctly specified as \'void\' under ARC, instead of \'id\'","clang/test/SemaObjC/dealloc.m:20:1: error: dealloc return type must be correctly specified as \'void\' under ARC, instead of \'id\'"}
		}
	},
	["err_decimal_unsupported"]={
		[i]="err_decimal_unsupported",
		[b]="GNU decimal type extension not supported",
		[c]="GNU decimal type extension not supported",
		[e]=d,
		[f]="GNU decimal type extension not supported",
		[g]=a,
		[h]=m,
		[j]={"df24298b4033",1242190928,"reject use of the GNU _Decimal32 extension with a diagnostic, not an abort.","reject use of the GNU _Decimal32 extension with a diagnostic, not an abort.\nrdar://6880104\n\nllvm-svn: 71639"},
		[k]={{Y,1570,"/// Convert the specified declspec to the appropriate type\n/// object.\n/// \\param state Specifies the declarator containing the declaration specifier\n/// to be converted, along with other associated processing state.\n/// \\returns The type described by the declaration specifiers.  This function\n/// never returns null.\nstatic QualType ConvertDeclSpecToType(TypeProcessingState &state) {\n  // ...\n  case DeclSpec::TST_decimal32:  // _Decimal32\n  case DeclSpec::TST_decimal64:  // _Decimal64\n  case DeclSpec::TST_decimal128: // _Decimal128\n    S.Diag(DS.getTypeSpecTypeLoc(), diag::err_decimal_unsupported);"}},
		[l]={
			["clang/test/Sema/types.c"]={"clang/test/Sema/types.c:54:1: error: GNU decimal type extension not supported"}
		}
	},
	["err_decl_attribute_invalid_on_stmt"]={
		[i]="err_decl_attribute_invalid_on_stmt",
		[b]="%0%select{ attribute|}1 cannot be applied to a statement",
		[c]={{nil,nil,{"A",{" attribute",a}," cannot be applied to a statement"}},{D,nil,"A attribute cannot be applied to a statement"}},
		[e]=d,
		[f]="(.*?)(?: attribute|) cannot be applied to a statement",
		[g]=a,
		[h]=m,
		[j]={"4f902c7eccd4",1457397175,"P0188R1: add support for standard [[fallthrough]] attribute. This is almost","P0188R1: add support for standard [[fallthrough]] attribute. This is almost\nexactly the same as clang\'s existing [[clang::fallthrough]] attribute, which\nhas been updated to have the same semantics. The one significant difference\nis that [[fallthrough]] is ill-formed if it\'s not used immediately before a\nswitch label (even when -Wimplicit-fallthrough is disabled). To support that,\nwe now build a CFG of any function that uses a \'[[fallthrough]];\' statement\nto check.\n\nIn passing, fix some bugs with our support for statement attributes -- in\nparticular, diagnose their use on declarations, rather than asserting.\n\nllvm-svn: 262881"},
		[k]={{"clang/lib/Sema/SemaStmtAttr.cpp",531,"static Attr *ProcessStmtAttribute(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  // ...\n  default:\n    // ...\n    S.Diag(A.getRange().getBegin(), diag::err_decl_attribute_invalid_on_stmt) << A << A.isRegularKeywordAttribute() << St->getBeginLoc();"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",3931,"static void GenerateAppertainsTo(const Record &Attr, raw_ostream &OS) {\n  // ...\n  if (StmtSubjects.empty()) {\n    // If there are no stmt subjects but there are decl subjects, diagnose\n    // trying to apply a declaration attribute to a statement.\n    if (!DeclSubjects.empty()) {\n      // ...\n      OS << \"  S.Diag(AL.getLoc(), diag::err_decl_attribute_invalid_on_stmt)\\n\";"}},
		[l]={
			["clang/test/SemaCXX/warn-unused-label-error.cpp"]={"clang/test/SemaCXX/warn-unused-label-error.cpp:23:20: error: \'unused\' attribute cannot be applied to a statement"}
		}
	},
	["err_decl_negative_array_size"]={
		[i]="err_decl_negative_array_size",
		[b]="\'%0\' declared as an array with a negative size",
		[c]="\'A\' declared as an array with a negative size",
		[e]=d,
		[f]="\'(.*?)\' declared as an array with a negative size",
		[g]=a,
		[h]=m,
		[j]={"a92409c3ec84",1294116275,"Enhance the diagnostic for negative array sizes to include the","Enhance the diagnostic for negative array sizes to include the\ndeclaration name of the array when present. This ensures that\na poor-man\'s C++03 static_assert will include the user error message\noften embedded in the name.\n\nUpdate all the tests to reflect the new wording, and add a test for the\nname behavior.\n\nllvm-svn: 122802"},
		[k]={{Y,2635,"/// Build an array type.\n///\n/// \\param T The type of each element in the array.\n///\n/// \\param ASM C99 array size modifier (e.g., \'*\', \'static\').\n///\n/// \\param ArraySize Expression describing the size of the array.\n///\n/// \\param Brackets The range from the opening \'[\' to the closing \']\'.\n///\n/// \\param Entity The name of the entity that involves the array\n/// type, if known.\n///\n/// \\returns A suitable array type, if there are no errors. Otherwise,\n/// returns a NULL type.\nQualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM, Expr *ArraySize, unsigned Quals, SourceRange Brackets, DeclarationName Entity) {\n  // ...\n  if (!ArraySize) {\n  // ...\n  } else if (ArraySize->isTypeDependent() || ArraySize->isValueDependent()) {\n  // ...\n  } else {\n    // ...\n    if (!R.isUsable()) {\n    // ...\n    } else if (!T->isDependentType() && !T->isIncompleteType() && !T->isConstantSizeType()) {\n    // ...\n    } else {\n      // C99 6.7.5.2p1: If the expression is a constant expression, it shall\n      // have a value greater than zero.\n      // In C++, this follows from narrowing conversions being disallowed.\n      if (ConstVal.isSigned() && ConstVal.isNegative()) {\n        if (Entity)\n          Diag(ArraySize->getBeginLoc(), diag::err_decl_negative_array_size) << getPrintableNameForEntity(Entity) << ArraySize->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/operator-arrow-temporary.cpp"]={"clang/test/SemaCXX/operator-arrow-temporary.cpp:9:19: error: \'a\' declared as an array with a negative size"}
		}
	},
	["err_declaration_does_not_declare_param"]={
		[i]="err_declaration_does_not_declare_param",
		[b]="declaration does not declare a parameter",
		[c]="declaration does not declare a parameter",
		[e]=d,
		[f]="declaration does not declare a parameter",
		[g]=a,
		[h]=Q,
		[j]={hb,1236199783,db,cb},
		[k]={{"clang/lib/Parse/Parser.cpp",1522,"/// ParseKNRParamDeclarations - Parse \'declaration-list[opt]\' which provides\n/// types for a function with a K&R-style identifier list for arguments.\nvoid Parser::ParseKNRParamDeclarations(Declarator &D) {\n  // ...\n  // Read all the argument declarations.\n  while (isDeclarationSpecifier(ImplicitTypenameContext::No)) {\n    // ...\n    // C99 6.9.1p6: \'each declaration in the declaration list shall have at\n    // least one declarator\'.\n    // NOTE: GCC just makes this an ext-warn.  It\'s not clear what it does with\n    // the declarations though.  It\'s trivial to ignore them, really hard to do\n    // anything else with them.\n    if (TryConsumeToken(tok::semi)) {\n      Diag(DSStart, diag::err_declaration_does_not_declare_param);"}}
	},
	["err_declarator_need_ident"]={
		[i]="err_declarator_need_ident",
		[b]="declarator requires an identifier",
		[c]="declarator requires an identifier",
		[e]=d,
		[f]="declarator requires an identifier",
		[g]=a,
		[h]=m,
		[j]={hb,1236199783,db,cb},
		[k]={{F,6261,"NamedDecl *Sema::HandleDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  // All of these full declarators require an identifier.  If it doesn\'t have\n  // one, the ParsedFreeStandingDeclSpec action should be used.\n  if (D.isDecompositionDeclarator()) {\n  // ...\n  } else if (!Name) {\n    if (!D.isInvalidType()) // Reject this if we think it is valid.\n      Diag(D.getDeclSpec().getBeginLoc(), diag::err_declarator_need_ident) << D.getDeclSpec().getSourceRange() << D.getSourceRange();"}},
		[l]={
			[Qb]={"clang/test/CXX/temp/temp.deduct.guide/p3.cpp:24:1: error: declarator requires an identifier","clang/test/CXX/temp/temp.deduct.guide/p3.cpp:32:3: error: declarator requires an identifier"}
		}
	},
	["err_declspec_after_virtspec"]={
		[i]="err_declspec_after_virtspec",
		[b]="\'%0\' qualifier may not appear after the virtual specifier \'%1\'",
		[c]="\'A\' qualifier may not appear after the virtual specifier \'B\'",
		[e]=d,
		[f]="\'(.*?)\' qualifier may not appear after the virtual specifier \'(.*?)\'",
		[g]=a,
		[h]=Q,
		[j]={"9a7adfcf3ac0",1427202167,"Diagnose declspecs occuring after virt-specifier-seq and generate fixit hints","Diagnose declspecs occuring after virt-specifier-seq and generate fixit hints\n\nSummary: This fixes PR22075.\n\nReviewers: rsmith\n\nSubscribers: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D6828\n\nllvm-svn: 233069"},
		[k]={{jb,2611,"/// Look for declaration specifiers possibly occurring after C++11\n/// virt-specifier-seq and diagnose them.\nvoid Parser::MaybeParseAndDiagnoseDeclSpecAfterCXX11VirtSpecifierSeq(Declarator &D, VirtSpecifiers &VS) {\n  // ...\n  if (D.isFunctionDeclarator()) {\n    // ...\n    if (DS.getTypeQualifiers() != DeclSpec::TQ_unspecified) {\n      auto DeclSpecCheck = [&](DeclSpec::TQ TypeQual, StringRef FixItName, SourceLocation SpecLoc) {\n        // ...\n        Diag(SpecLoc, diag::err_declspec_after_virtspec) << FixItName << VirtSpecifiers::getSpecifierName(VS.getLastSpecifier()) << FixItHint::CreateRemoval(SpecLoc) << Insertion;"},{jb,2629,"/// Look for declaration specifiers possibly occurring after C++11\n/// virt-specifier-seq and diagnose them.\nvoid Parser::MaybeParseAndDiagnoseDeclSpecAfterCXX11VirtSpecifierSeq(Declarator &D, VirtSpecifiers &VS) {\n  // ...\n  if (D.isFunctionDeclarator()) {\n    // ...\n    if (ParseRefQualifier(RefQualifierIsLValueRef, RefQualifierLoc)) {\n      // ...\n      Diag(RefQualifierLoc, diag::err_declspec_after_virtspec) << (RefQualifierIsLValueRef ? \"&\" : \"&&\") << VirtSpecifiers::getSpecifierName(VS.getLastSpecifier()) << FixItHint::CreateRemoval(RefQualifierLoc) << Insertion;"}},
		[l]={
			["clang/test/FixIt/fixit-c++11.cpp"]={"clang/test/FixIt/fixit-c++11.cpp:175:37: error: \'const\' qualifier may not appear after the virtual specifier \'final\'","clang/test/FixIt/fixit-c++11.cpp:175:43: error: \'volatile\' qualifier may not appear after the virtual specifier \'final\'","clang/test/FixIt/fixit-c++11.cpp:182:31: error: \'&\' qualifier may not appear after the virtual specifier \'override\'","clang/test/FixIt/fixit-c++11.cpp:183:37: error: \'const\' qualifier may not appear after the virtual specifier \'final\'","clang/test/FixIt/fixit-c++11.cpp:183:43: error: \'volatile\' qualifier may not appear after the virtual specifier \'final\'","clang/test/FixIt/fixit-c++11.cpp:183:52: error: \'&&\' qualifier may not appear after the virtual specifier \'final\'"}
		}
	},
	["err_declspec_keyword_has_no_effect"]={
		[i]="err_declspec_keyword_has_no_effect",
		[b]="%0 cannot appear here, place it after \"%select{class|struct|interface|union|enum}1\" to apply it to the type declaration",
		[c]={{nil,nil,{"A cannot appear here, place it after \"",{"class","struct","interface","union","enum"},"\" to apply it to the type declaration"}}},
		[e]=d,
		[f]="(.*?) cannot appear here, place it after \"(?:class|struct|interface|union|enum)\" to apply it to the type declaration",
		[g]=a,
		[h]=m,
		[j]={gb,1625925174,eb,ib},
		[k]={{F,5323,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // ...\n  // Warn about ignored type attributes, for example:\n  // __attribute__((aligned)) struct A;\n  // Attributes should be placed after tag to apply to type declaration.\n  if (!DS.getAttributes().empty() || !DeclAttrs.empty()) {\n    // ...\n    if (TypeSpecType == DeclSpec::TST_class || TypeSpecType == DeclSpec::TST_struct || TypeSpecType == DeclSpec::TST_interface || TypeSpecType == DeclSpec::TST_union || TypeSpecType == DeclSpec::TST_enum) {\n      for (const ParsedAttr &AL : DS.getAttributes())\n        Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? diag::err_declspec_keyword_has_no_effect : diag::warn_declspec_attribute_ignored) << AL << GetDiagnosticTypeSpecifierID(DS);"},{F,5328,"/// ParsedFreeStandingDeclSpec - This method is invoked when a declspec with\n/// no declarator (e.g. \"struct foo;\") is parsed. It also accepts template\n/// parameters to cope with template friend declarations.\nDecl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, DeclSpec &DS, const ParsedAttributesView &DeclAttrs, MultiTemplateParamsArg TemplateParams, bool IsExplicitInstantiation, RecordDecl *&AnonRecord) {\n  // ...\n  // Warn about ignored type attributes, for example:\n  // __attribute__((aligned)) struct A;\n  // Attributes should be placed after tag to apply to type declaration.\n  if (!DS.getAttributes().empty() || !DeclAttrs.empty()) {\n    // ...\n    if (TypeSpecType == DeclSpec::TST_class || TypeSpecType == DeclSpec::TST_struct || TypeSpecType == DeclSpec::TST_interface || TypeSpecType == DeclSpec::TST_union || TypeSpecType == DeclSpec::TST_enum) {\n      // ...\n      for (const ParsedAttr &AL : DeclAttrs)\n        Diag(AL.getLoc(), AL.isRegularKeywordAttribute() ? diag::err_declspec_keyword_has_no_effect : diag::warn_declspec_attribute_ignored) << AL << GetDiagnosticTypeSpecifierID(DS);"}},
		[l]={
			["clang/test/Parser/cxx0x-keyword-attributes.cpp"]={"clang/test/Parser/cxx0x-keyword-attributes.cpp:87:28: error: \'__arm_streaming\' cannot appear here, place it after \"class\" to apply it to the type declaration","clang/test/Parser/cxx0x-keyword-attributes.cpp:194:12: error: \'__arm_streaming\' cannot appear here, place it after \"enum\" to apply it to the type declaration"}
		}
	},
	["err_declspec_thread_on_thread_variable"]={
		[i]="err_declspec_thread_on_thread_variable",
		[b]="\'__declspec(thread)\' applied to variable that already has a thread-local storage specifier",
		[c]="\'__declspec(thread)\' applied to variable that already has a thread-local storage specifier",
		[e]=d,
		[f]="\'__declspec\\(thread\\)\' applied to variable that already has a thread\\-local storage specifier",
		[g]=a,
		[h]=m,
		[j]={"7d6d2705f68d",1398914207,"Add support for __declspec(thread) under -fms-extensions","Add support for __declspec(thread) under -fms-extensions\n\nReviewers: rsmith\n\nDifferential Revision: http://reviews.llvm.org/D3551\n\nllvm-svn: 207734"},
		[k]={{P,7310,"static void handleDeclspecThreadAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (VD->getTSCSpec() != TSCS_unspecified) {\n    S.Diag(AL.getLoc(), diag::err_declspec_thread_on_thread_variable);"}},
		[l]={
			["clang/test/SemaCXX/declspec-thread.cpp"]={"clang/test/SemaCXX/declspec-thread.cpp:4:21: error: \'__declspec(thread)\' applied to variable that already has a thread-local storage specifier","clang/test/SemaCXX/declspec-thread.cpp:5:12: error: \'__declspec(thread)\' applied to variable that already has a thread-local storage specifier"}
		}
	},
	["err_decltype_auto_cannot_be_combined"]={
		[i]="err_decltype_auto_cannot_be_combined",
		[b]="\'decltype(auto)\' cannot be combined with other type specifiers",
		[c]="\'decltype(auto)\' cannot be combined with other type specifiers",
		[e]=d,
		[f]="\'decltype\\(auto\\)\' cannot be combined with other type specifiers",
		[g]=a,
		[h]=m,
		[j]={"74aeef50a0cc",1366992935,"Implement C++1y decltype(auto).","Implement C++1y decltype(auto).\n\nllvm-svn: 180610"},
		[k]={{"clang/lib/Sema/DeclSpec.cpp",1160,"/// Finish - This does final analysis of the declspec, rejecting things like\n/// \"_Imaginary\" (lacking an FP type). After calling this method, DeclSpec is\n/// guaranteed to be self-consistent, even if an error occurred.\nvoid DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {\n  // ...\n  // If decltype(auto) is used, no other type specifiers are permitted.\n  if (TypeSpecType == TST_decltype_auto && (getTypeSpecWidth() != TypeSpecifierWidth::Unspecified || TypeSpecComplex != TSC_unspecified || getTypeSpecSign() != TypeSpecifierSign::Unspecified || TypeAltiVecVector || TypeAltiVecPixel || TypeAltiVecBool || TypeQualifiers)) {\n    // ...\n    S.Diag(TSTLoc, diag::err_decltype_auto_cannot_be_combined) << Hints[0] << Hints[1] << Hints[2] << Hints[3] << Hints[4] << Hints[5] << Hints[6] << Hints[7];"}},
		[l]={
			["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:26:10: error: \'decltype(auto)\' cannot be combined with other type specifiers","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:28:10: error: \'decltype(auto)\' cannot be combined with other type specifiers"}
		}
	},
	["err_decltype_auto_compound_type"]={
		[i]="err_decltype_auto_compound_type",
		[b]="cannot form %select{pointer to|reference to|array of}0 \'decltype(auto)\'",
		[c]={{nil,nil,{"cannot form ",{"pointer to","reference to","array of"}," \'decltype(auto)\'"}}},
		[e]=d,
		[f]="cannot form (?:pointer to|reference to|array of) \'decltype\\(auto\\)\'",
		[g]=a,
		[h]=m,
		[j]={"74aeef50a0cc",1366992935,"Implement C++1y decltype(auto).","Implement C++1y decltype(auto).\n\nllvm-svn: 180610"},
		[k]={{Y,4674,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  // If T is \'decltype(auto)\', the only declarators we can have are parens\n  // and at most one function declarator if this is a function declaration.\n  // If T is a deduced class template specialization type, we can have no\n  // declarator chunks at all.\n  if (auto *DT = T->getAs<DeducedType>()) {\n    // ...\n    if ((AT && AT->isDecltypeAuto()) || IsClassTemplateDeduction) {\n      for (unsigned I = 0, E = D.getNumTypeObjects(); I != E; ++I) {\n        // ...\n        unsigned DiagId = IsClassTemplateDeduction ? diag::err_deduced_class_template_compound_type : diag::err_decltype_auto_compound_type;"}},
		[l]={
			["clang/test/Parser/cxx2a-placeholder-type-constraint.cpp"]={"clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:26:29: error: cannot form reference to \'decltype(auto)\'","clang/test/Parser/cxx2a-placeholder-type-constraint.cpp:28:32: error: cannot form reference to \'decltype(auto)\'"}
		}
	},
	["err_decltype_auto_function_declarator_not_declaration"]={
		[i]="err_decltype_auto_function_declarator_not_declaration",
		[b]="\'decltype(auto)\' can only be used as a return type in a function declaration",
		[c]="\'decltype(auto)\' can only be used as a return type in a function declaration",
		[e]=d,
		[f]="\'decltype\\(auto\\)\' can only be used as a return type in a function declaration",
		[g]=a,
		[h]=m,
		[j]={"74aeef50a0cc",1366992935,"Implement C++1y decltype(auto).","Implement C++1y decltype(auto).\n\nllvm-svn: 180610"},
		[k]={{Y,4693,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  // If T is \'decltype(auto)\', the only declarators we can have are parens\n  // and at most one function declarator if this is a function declaration.\n  // If T is a deduced class template specialization type, we can have no\n  // declarator chunks at all.\n  if (auto *DT = T->getAs<DeducedType>()) {\n    // ...\n    if ((AT && AT->isDecltypeAuto()) || IsClassTemplateDeduction) {\n      for (unsigned I = 0, E = D.getNumTypeObjects(); I != E; ++I) {\n        // ...\n        case DeclaratorChunk::Function: {\n          // ...\n          DiagId = diag::err_decltype_auto_function_declarator_not_declaration;"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp:51:21: error: \'decltype(auto)\' can only be used as a return type in a function declaration","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp:56:20: error: \'decltype(auto)\' can only be used as a return type in a function declaration","clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp:57:24: error: \'decltype(auto)\' can only be used as a return type in a function declaration"}
		}
	},
	["err_decltype_auto_initializer_list"]={
		[i]="err_decltype_auto_initializer_list",
		[b]="cannot deduce \'decltype(auto)\' from initializer list",
		[c]="cannot deduce \'decltype(auto)\' from initializer list",
		[e]=d,
		[f]="cannot deduce \'decltype\\(auto\\)\' from initializer list",
		[g]=a,
		[h]=m,
		[j]={"74aeef50a0cc",1366992935,"Implement C++1y decltype(auto).","Implement C++1y decltype(auto).\n\nllvm-svn: 180610"},
		[k]={{"clang/lib/Sema/SemaTemplateDeduction.cpp",4817,"/// Deduce the type for an auto type-specifier (C++11 [dcl.spec.auto]p6)\n///\n/// Note that this is done even if the initializer is dependent. (This is\n/// necessary to support partial ordering of templates using \'auto\'.)\n/// A dependent type will be produced when deducing from a dependent type.\n///\n/// \\param Type the type pattern using the auto type-specifier.\n/// \\param Init the initializer for the variable whose type is to be deduced.\n/// \\param Result if type deduction was successful, this will be set to the\n///        deduced type.\n/// \\param Info the argument will be updated to provide additional information\n///        about template argument deduction.\n/// \\param DependentDeduction Set if we should permit deduction in\n///        dependent cases. This is necessary for template partial ordering with\n///        \'auto\' template parameters. The template parameter depth to be used\n///        should be specified in the \'Info\' parameter.\n/// \\param IgnoreConstraints Set if we should not fail if the deduced type does\n///                          not satisfy the type-constraint in the auto type.\nSema::TemplateDeductionResult Sema::DeduceAutoType(TypeLoc Type, Expr *Init, QualType &Result, TemplateDeductionInfo &Info, bool DependentDeduction, bool IgnoreConstraints, TemplateSpecCandidateSet *FailedTSC) {\n  // ...\n  // If this is a \'decltype(auto)\' specifier, do the decltype dance.\n  if (AT->isDecltypeAuto()) {\n    if (InitList) {\n      Diag(Init->getBeginLoc(), diag::err_decltype_auto_initializer_list);"}},
		[l]={
			["clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p7-cxx14.cpp:41:22: error: cannot deduce \'decltype(auto)\' from initializer list"}
		}
	},
	["err_decltype_auto_invalid"]={
		[i]={{nil,p,"err_decltype_auto_invalid"}},
		[b]={{nil,p,"\'decltype(auto)\' not allowed here"}},
		[c]={{nil,p,"\'decltype(auto)\' not allowed here"}},
		[e]=d,
		[f]="\'decltype\\(auto\\)\' not allowed here",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={"ef2cd8f8c30d",1486586348,"More fixes for places where \'decltype(auto)\' is permitted in the C++ grammar but makes no sense.","More fixes for places where \'decltype(auto)\' is permitted in the C++ grammar but makes no sense.\n\nllvm-svn: 294509"},
		[k]={{r,4409,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n  // ...\n  if (TemplateTypeTy) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype) {\n  // ...\n  } else if (DS.getTypeSpecType() == TST_decltype_auto) {\n    Diag(DS.getTypeSpecTypeLoc(), diag::err_decltype_auto_invalid);"},{K,475,"ParsedType Sema::getDestructorTypeForDecltype(const DeclSpec &DS, ParsedType ObjectType) {\n  // ...\n  if (DS.getTypeSpecType() == DeclSpec::TST_decltype_auto) {\n    Diag(DS.getTypeSpecTypeLoc(), diag::err_decltype_auto_invalid);"},{K,8025,"ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, SourceLocation TildeLoc, const DeclSpec &DS) {\n  // ...\n  if (DS.getTypeSpecType() == DeclSpec::TST_decltype_auto) {\n    Diag(DS.getTypeSpecTypeLoc(), diag::err_decltype_auto_invalid);"}},
		[l]={
			["clang/test/SemaCXX/deduced-return-type-cxx14.cpp"]={"clang/test/SemaCXX/deduced-return-type-cxx14.cpp:435:22: error: \'decltype(auto)\' not allowed here","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:436:24: error: \'decltype(auto)\' not allowed here","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:440:16: error: \'decltype(auto)\' not allowed here","clang/test/SemaCXX/deduced-return-type-cxx14.cpp:442:13: error: \'decltype(auto)\' not allowed here"}
		}
	},
	["err_decltype_in_declarator"]={
		[i]="err_decltype_in_declarator",
		[b]="\'decltype\' cannot be used to name a declaration",
		[c]="\'decltype\' cannot be used to name a declaration",
		[e]=d,
		[f]="\'decltype\' cannot be used to name a declaration",
		[g]=a,
		[h]=m,
		[j]={"42b99e08e63c",1323763416,"Disallow decltype in qualified declarator-ids.","Disallow decltype in qualified declarator-ids.\n\nllvm-svn: 146480"},
		[k]={{F,6243,"/// Diagnose a declaration whose declarator-id has the given\n/// nested-name-specifier.\n///\n/// \\param SS The nested-name-specifier of the declarator-id.\n///\n/// \\param DC The declaration context to which the nested-name-specifier\n/// resolves.\n///\n/// \\param Name The name of the entity being declared.\n///\n/// \\param Loc The location of the name of the entity being declared.\n///\n/// \\param IsTemplateId Whether the name is a (simple-)template-id, and thus\n/// we\'re declaring an explicit / partial specialization / instantiation.\n///\n/// \\returns true if we cannot safely recover from this error, false otherwise.\nbool Sema::diagnoseQualifiedDeclaration(CXXScopeSpec &SS, DeclContext *DC, DeclarationName Name, SourceLocation Loc, bool IsTemplateId) {\n  // ...\n  if (isa_and_nonnull<DecltypeType>(SpecLoc.getNestedNameSpecifier()->getAsType()))\n    Diag(Loc, diag::err_decltype_in_declarator) << SpecLoc.getTypeLoc().getSourceRange();"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.meaning/p1-0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/p1-0x.cpp:9:22: error: \'decltype\' cannot be used to name a declaration","clang/test/CXX/dcl.decl/dcl.meaning/p1-0x.cpp:10:23: error: \'decltype\' cannot be used to name a declaration"}
		}
	},
	["err_decomp_decl_ambiguous_base"]={
		[i]="err_decomp_decl_ambiguous_base",
		[b]="cannot decompose members of ambiguous base class %1 of %0:%2",
		[c]="cannot decompose members of ambiguous base class B of A:C",
		[e]=d,
		[f]="cannot decompose members of ambiguous base class (.*?) of (.*?)\\:(.*?)",
		[g]=a,
		[h]=m,
		[j]={rb,1470954346,nb,mb},
		[k]={{r,1380,"/// Find the base class to decompose in a built-in decomposition of a class type.\n/// This base class search is, unfortunately, not quite like any other that we\n/// perform anywhere else in C++.\nstatic DeclAccessPair findDecomposableBaseClass(Sema &S, SourceLocation Loc, const CXXRecordDecl *RD, CXXCastPath &BasePath) {\n  // ...\n  if (RD->hasDirectFields())\n  // ...\n  else {\n    // ...\n    if (Paths.isAmbiguous(S.Context.getCanonicalType(BaseType))) {\n      S.Diag(Loc, diag::err_decomp_decl_ambiguous_base) << RD << BaseType << S.getAmbiguousPathsDisplayString(Paths);"}},
		[l]={
			[Xb]={"clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp:79:10: error: cannot decompose members of ambiguous base class \'A\' of \'F\':","clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp:81:10: error: cannot decompose members of ambiguous base class \'I\' of \'K\':"}
		}
	},
	["err_decomp_decl_anon_union_member"]={
		[i]="err_decomp_decl_anon_union_member",
		[b]="cannot decompose class type %0 because it has an anonymous %select{struct|union}1 member",
		[c]={{nil,nil,{"cannot decompose class type A because it has an anonymous ",{"struct","union"}," member"}}},
		[e]=d,
		[f]="cannot decompose class type (.*?) because it has an anonymous (?:struct|union) member",
		[g]=a,
		[h]=m,
		[j]={rb,1470954346,nb,mb},
		[k]={{r,1451,"static bool checkMemberDecomposition(Sema &S, ArrayRef<BindingDecl *> Bindings, ValueDecl *Src, QualType DecompType, const CXXRecordDecl *OrigRD) {\n  // ...\n  for (auto *FD : RD->fields()) {\n    // ...\n    // All the non-static data members are required to be nameable, so they\n    // must all have names.\n    if (!FD->getDeclName()) {\n      // ...\n      if (FD->isAnonymousStructOrUnion()) {\n        S.Diag(Src->getLocation(), diag::err_decomp_decl_anon_union_member) << DecompType << FD->getType()->isUnionType();"}},
		[l]={
			[Xb]={"clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp:49:10: error: cannot decompose class type \'Struct\' because it has an anonymous struct member","clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp:50:10: error: cannot decompose class type \'Union\' because it has an anonymous union member"}
		}
	},
	["err_decomp_decl_constraint"]={
		[i]={{nil,D,"err_decomp_decl_constraint"}},
		[b]={{nil,D,"decomposition declaration cannot be declared with constrained \'auto\'"}},
		[c]={{nil,D,"decomposition declaration cannot be declared with constrained \'auto\'"}},
		[e]=d,
		[f]="decomposition declaration cannot be declared with constrained \'auto\'",
		[g]=a,
		[h]={{nil,D,m}},
		[j]={gb,1625925174,eb,ib},
		[k]={{r,871,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  // Constrained auto is prohibited by [decl.pre]p6, so check that here.\n  if (DS.isConstrainedAuto()) {\n    // ...\n    Diag(TemplRep->TemplateNameLoc, diag::err_decomp_decl_constraint) << TemplRange << FixItHint::CreateRemoval(TemplRange);"}},
		[l]={
			["clang/test/CXX/drs/dr26xx.cpp"]={"clang/test/CXX/drs/dr26xx.cpp:69:3: error: decomposition declaration cannot be declared with constrained \'auto\'","clang/test/CXX/drs/dr26xx.cpp:71:3: error: decomposition declaration cannot be declared with constrained \'auto\'","clang/test/CXX/drs/dr26xx.cpp:77:3: error: decomposition declaration cannot be declared with constrained \'auto\'","clang/test/CXX/drs/dr26xx.cpp:79:3: error: decomposition declaration cannot be declared with constrained \'auto\'"}
		}
	},
	["err_decomp_decl_context"]={
		[i]="err_decomp_decl_context",
		[b]="decomposition declaration not permitted in this context",
		[c]="decomposition declaration not permitted in this context",
		[e]=d,
		[f]="decomposition declaration not permitted in this context",
		[g]=a,
		[h]=m,
		[j]={xb,1469230619,wb,Cb},
		[k]={{F,17989,"/// HandleField - Analyze a field of a C struct or a C++ data member.\n///\nFieldDecl *Sema::HandleField(Scope *S, RecordDecl *Record, SourceLocation DeclStart, Declarator &D, Expr *BitWidth, InClassInitStyle InitStyle, AccessSpecifier AS) {\n  if (D.isDecompositionDeclarator()) {\n    // ...\n    Diag(Decomp.getLSquareLoc(), diag::err_decomp_decl_context) << Decomp.getSourceRange();"},{r,737,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  // The syntax only allows a decomposition declarator as a simple-declaration,\n  // a for-range-declaration, or a condition in Clang, but we parse it in more\n  // cases than that.\n  if (!D.mayHaveDecompositionDeclarator()) {\n    Diag(Decomp.getLSquareLoc(), diag::err_decomp_decl_context) << Decomp.getSourceRange();"}},
		[l]={
			[Ub]={"clang/test/Parser/cxx1z-decomposition.cpp:53:10: error: decomposition declaration not permitted in this context","clang/test/Parser/cxx1z-decomposition.cpp:54:17: error: decomposition declaration not permitted in this context","clang/test/Parser/cxx1z-decomposition.cpp:75:21: error: decomposition declaration not permitted in this context","clang/test/Parser/cxx1z-decomposition.cpp:78:21: error: decomposition declaration not permitted in this context","clang/test/Parser/cxx1z-decomposition.cpp:79:22: error: decomposition declaration not permitted in this context"}
		}
	},
	["err_decomp_decl_inaccessible_base"]={
		[i]={{nil,C,"err_decomp_decl_inaccessible_base"}},
		[b]={{nil,C,"cannot decompose members of inaccessible base class %1 of %0"}},
		[c]={{nil,C,"cannot decompose members of inaccessible base class B of A"}},
		[e]=d,
		[f]="cannot decompose members of inaccessible base class (.*?) of (.*?)",
		[g]=a,
		[h]={{nil,C,m}},
		[j]={"5c9b3b757623",1537913564,"P0969R0: allow structured binding of accessible members, not only public members.","P0969R0: allow structured binding of accessible members, not only public members.\n\nllvm-svn: 343036"},
		[k]={{r,1387,"/// Find the base class to decompose in a built-in decomposition of a class type.\n/// This base class search is, unfortunately, not quite like any other that we\n/// perform anywhere else in C++.\nstatic DeclAccessPair findDecomposableBaseClass(Sema &S, SourceLocation Loc, const CXXRecordDecl *RD, CXXCastPath &BasePath) {\n  // ...\n  if (RD->hasDirectFields())\n  // ...\n  else {\n    // ...\n    S.CheckBaseClassAccess(Loc, BaseType, S.Context.getRecordType(RD), *BestPath, diag::err_decomp_decl_inaccessible_base);"}},
		[l]={
			[Xb]={"clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp:30:10: error: cannot decompose members of inaccessible base class \'A\' of \'NonPublicMembers::NonPublic3\'","clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp:217:11: error: cannot decompose members of inaccessible base class \'A\' of \'p0969r0::B\'"}
		}
	},
	["err_decomp_decl_inaccessible_field"]={
		[i]={{nil,C,"err_decomp_decl_inaccessible_field"}},
		[b]={{nil,C,"cannot decompose %select{private|protected}0 member %1 of %3"}},
		[c]={{nil,C,{"cannot decompose ",{"private","protected"}," member B of D"}}},
		[e]=d,
		[f]="cannot decompose (?:private|protected) member (.*?) of (.*?)",
		[g]=a,
		[h]={{nil,C,m}},
		[j]={"5c9b3b757623",1537913564,"P0969R0: allow structured binding of accessible members, not only public members.","P0969R0: allow structured binding of accessible members, not only public members.\n\nllvm-svn: 343036"},
		[k]={{"clang/lib/Sema/SemaAccess.cpp",1773,"/// Checks implicit access to a member in a structured binding.\nSema::AccessResult Sema::CheckStructuredBindingMemberAccess(SourceLocation UseLoc, CXXRecordDecl *DecomposedClass, DeclAccessPair Field) {\n  // ...\n  Entity.setDiag(diag::err_decomp_decl_inaccessible_field);"}},
		[l]={
			[Xb]={"clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp:28:11: error: cannot decompose protected member \'a\' of \'NonPublicMembers::NonPublic1\'","clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp:29:11: error: cannot decompose private member \'a\' of \'NonPublicMembers::NonPublic2\'","clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp:31:11: error: cannot decompose private member \'a\' of \'NonPublicMembers::NonPublic2\'","clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp:232:18: error: cannot decompose protected member \'y\' of \'p0969r0::C\'","clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp:239:15: error: cannot decompose protected member \'y\' of \'p0969r0::C\'"}
		}
	},
	["err_decomp_decl_lambda"]={
		[i]={{nil,w,"err_decomp_decl_lambda"}},
		[b]={{nil,w,"cannot decompose lambda closure type"}},
		[c]={{nil,w,"cannot decompose lambda closure type"}},
		[e]=d,
		[f]="cannot decompose lambda closure type",
		[g]=a,
		[h]={{nil,w,m}},
		[j]={"61d065e21ff3",1590001902,"Let clang atomic builtins fetch add/sub support floating point types","Let clang atomic builtins fetch add/sub support floating point types\n\nRecently atomicrmw started to support fadd/fsub:\n\nhttps://reviews.llvm.org/D53965\n\nHowever clang atomic builtins fetch add/sub still does not support\nemitting atomicrmw fadd/fsub.\n\nThis patch adds that.\n\nReviewed by: John McCall, Artem Belevich, Matt Arsenault, JF Bastien,\nJames Y Knight, Louis Dionne, Olivier Giroux\n\nDifferential Revision: https://reviews.llvm.org/D71726"},
		[k]={{r,1445,"static bool checkMemberDecomposition(Sema &S, ArrayRef<BindingDecl *> Bindings, ValueDecl *Src, QualType DecompType, const CXXRecordDecl *OrigRD) {\n  // ...\n  for (auto *FD : RD->fields()) {\n    // ...\n    // All the non-static data members are required to be nameable, so they\n    // must all have names.\n    if (!FD->getDeclName()) {\n      if (RD->isLambda()) {\n        S.Diag(Src->getLocation(), diag::err_decomp_decl_lambda);"}},
		[l]={
			["clang/test/SemaCXX/cxx1z-decomposition.cpp"]={"clang/test/SemaCXX/cxx1z-decomposition.cpp:158:10: error: cannot decompose lambda closure type","clang/test/SemaCXX/cxx1z-decomposition.cpp:167:13: error: cannot decompose lambda closure type"}
		}
	},
	["err_decomp_decl_multiple_bases_with_members"]={
		[i]="err_decomp_decl_multiple_bases_with_members",
		[b]="cannot decompose class type %1: %select{its base classes %2 and|both it and its base class}0 %3 have non-static data members",
		[c]={{nil,nil,{"cannot decompose class type B: ",{"its base classes C and","both it and its base class"}," D have non-static data members"}}},
		[e]=d,
		[f]="cannot decompose class type (.*?)\\: (?:its base classes (.*?) and|both it and its base class) (.*?) have non\\-static data members",
		[g]=a,
		[h]=m,
		[j]={rb,1470954346,nb,mb},
		[k]={{r,1368,"/// Find the base class to decompose in a built-in decomposition of a class type.\n/// This base class search is, unfortunately, not quite like any other that we\n/// perform anywhere else in C++.\nstatic DeclAccessPair findDecomposableBaseClass(Sema &S, SourceLocation Loc, const CXXRecordDecl *RD, CXXCastPath &BasePath) {\n  // ...\n  if (RD->hasDirectFields())\n  // ...\n  else {\n    // ...\n    for (auto &P : Paths) {\n      if (!BestPath)\n      // ...\n      else if (!S.Context.hasSameType(P.back().Base->getType(), BestPath->back().Base->getType())) {\n        // ...\n        S.Diag(Loc, diag::err_decomp_decl_multiple_bases_with_members) << false << RD << BestPath->back().Base->getType() << P.back().Base->getType();"},{r,1398,"/// Find the base class to decompose in a built-in decomposition of a class type.\n/// This base class search is, unfortunately, not quite like any other that we\n/// perform anywhere else in C++.\nstatic DeclAccessPair findDecomposableBaseClass(Sema &S, SourceLocation Loc, const CXXRecordDecl *RD, CXXCastPath &BasePath) {\n  // ...\n  if (ClassWithFields->lookupInBases(BaseHasFields, Paths)) {\n    S.Diag(Loc, diag::err_decomp_decl_multiple_bases_with_members) << (ClassWithFields == RD) << RD << ClassWithFields << Paths.front().back().Base->getType();"}},
		[l]={
			[Xb]={"clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp:76:10: error: cannot decompose class type \'B\': both it and its base class \'A\' have non-static data members","clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp:77:10: error: cannot decompose class type \'D\': its base classes \'A\' and \'C\' have non-static data members"}
		}
	},
	["err_decomp_decl_not_alone"]={
		[i]="err_decomp_decl_not_alone",
		[b]="decomposition declaration must be the only declaration in its group",
		[c]="decomposition declaration must be the only declaration in its group",
		[e]=d,
		[f]="decomposition declaration must be the only declaration in its group",
		[g]=a,
		[h]=m,
		[j]={xb,1469230619,wb,Cb},
		[k]={{F,14569,"Sema::DeclGroupPtrTy Sema::FinalizeDeclaratorGroup(Scope *S, const DeclSpec &DS, ArrayRef<Decl *> Group) {\n  // ...\n  for (unsigned i = 0, e = Group.size(); i != e; ++i) {\n    if (Decl *D = Group[i]) {\n      // ...\n      // For declarators, there are some additional syntactic-ish checks we need\n      // to perform.\n      if (auto *DD = dyn_cast<DeclaratorDecl>(D)) {\n        // ...\n        if (FirstDeclaratorInGroup != DD) {\n          // A decomposition declaration cannot be combined with any other\n          // declaration in the same group.\n          if (FirstDecompDeclaratorInGroup && !DiagnosedMultipleDecomps) {\n            Diag(FirstDecompDeclaratorInGroup->getLocation(), diag::err_decomp_decl_not_alone) << FirstDeclaratorInGroup->getSourceRange() << DD->getSourceRange();"}},
		[l]={
			[Ub]={"clang/test/Parser/cxx1z-decomposition.cpp:132:10: error: decomposition declaration must be the only declaration in its group","clang/test/Parser/cxx1z-decomposition.cpp:133:10: error: decomposition declaration must be the only declaration in its group","clang/test/Parser/cxx1z-decomposition.cpp:134:19: error: decomposition declaration must be the only declaration in its group","clang/test/Parser/cxx1z-decomposition.cpp:135:31: error: decomposition declaration must be the only declaration in its group"}
		}
	},
	["err_decomp_decl_parens"]={
		[i]="err_decomp_decl_parens",
		[b]="decomposition declaration cannot be declared with parentheses",
		[c]="decomposition declaration cannot be declared with parentheses",
		[e]=d,
		[f]="decomposition declaration cannot be declared with parentheses",
		[g]=a,
		[h]=m,
		[j]={xb,1469230619,wb,Cb},
		[k]={{r,850,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  // The syntax only allows a single ref-qualifier prior to the decomposition\n  // declarator. No other declarator chunks are permitted. Also check the type\n  // specifier here.\n  if (DS.getTypeSpecType() != DeclSpec::TST_auto || D.hasGroupingParens() || D.getNumTypeObjects() > 1 || (D.getNumTypeObjects() == 1 && D.getTypeObject(0).Kind != DeclaratorChunk::Reference)) {\n    Diag(Decomp.getLSquareLoc(), (D.hasGroupingParens() || (D.getNumTypeObjects() && D.getTypeObject(0).Kind == DeclaratorChunk::Paren)) ? diag::err_decomp_decl_parens : diag::err_decomp_decl_type) << R;"}},
		[l]={
			[Ub]={"clang/test/Parser/cxx1z-decomposition.cpp:94:9: error: decomposition declaration cannot be declared with parentheses"}
		}
	},
	["err_decomp_decl_requires_init"]={
		[i]="err_decomp_decl_requires_init",
		[b]="decomposition declaration %0 requires an initializer",
		[c]="decomposition declaration A requires an initializer",
		[e]=d,
		[f]="decomposition declaration (.*?) requires an initializer",
		[g]=a,
		[h]=m,
		[j]={rb,1470954346,nb,mb},
		[k]={{F,13663,"void Sema::ActOnUninitializedDecl(Decl *RealDecl) {\n  // ...\n  if (VarDecl *Var = dyn_cast<VarDecl>(RealDecl)) {\n    // ...\n    // C++1z [dcl.dcl]p1 grammar implies that an initializer is mandatory.\n    if (isa<DecompositionDecl>(RealDecl)) {\n      Diag(Var->getLocation(), diag::err_decomp_decl_requires_init) << Var;"}},
		[l]={
			["clang/test/SemaCXX/cxx1z-decomposition.cpp"]={"clang/test/SemaCXX/cxx1z-decomposition.cpp:123:8: error: decomposition declaration \'[foobar]\' requires an initializer"}
		}
	},
	["err_decomp_decl_spec"]={
		[i]="err_decomp_decl_spec",
		[b]="decomposition declaration cannot be declared %plural{1:\'%1\'|:with \'%1\' specifiers}0",
		[c]={{nil,nil,{"decomposition declaration cannot be declared ",{"\'B\'","with \'B\' specifiers"}}}},
		[e]=d,
		[f]="decomposition declaration cannot be declared (?:\'(.*?)\'|with \'(.*?)\' specifiers)",
		[g]=a,
		[h]=m,
		[j]={xb,1469230619,wb,Cb},
		[k]={{r,802,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  {\n    // ...\n    if (!BadSpecifiers.empty()) {\n      auto &&Err = Diag(BadSpecifierLocs.front(), diag::err_decomp_decl_spec);"}},
		[l]={
			[Ub]={"clang/test/Parser/cxx1z-decomposition.cpp:73:5: error: decomposition declaration cannot be declared \'extern\'","clang/test/Parser/cxx1z-decomposition.cpp:84:5: error: decomposition declaration cannot be declared \'typedef\'","clang/test/Parser/cxx1z-decomposition.cpp:85:5: error: decomposition declaration cannot be declared \'constexpr\'","clang/test/Parser/cxx1z-decomposition.cpp:88:10: error: decomposition declaration cannot be declared with \'constexpr inline\' specifiers","clang/test/Parser/cxx1z-decomposition.cpp:91:3: error: decomposition declaration cannot be declared \'inline\'"}
		}
	},
	["err_decomp_decl_std_tuple_element_not_specialized"]={
		[i]="err_decomp_decl_std_tuple_element_not_specialized",
		[b]="cannot decompose this type; \'std::tuple_element<%0>::type\' does not name a type",
		[c]="cannot decompose this type; \'std::tuple_element<A>::type\' does not name a type",
		[e]=d,
		[f]="cannot decompose this type; \'std\\:\\:tuple_element\\<(.*?)\\>\\:\\:type\' does not name a type",
		[g]=a,
		[h]=m,
		[j]={rb,1470954346,nb,mb},
		[k]={{r,1164,"/// \\return std::tuple_element<I, T>::type.\nstatic QualType getTupleLikeElementType(Sema &S, SourceLocation Loc, unsigned I, QualType T) {\n  // ...\n  if (lookupStdTypeTraitMember(S, R, Loc, \"tuple_element\", Args, diag::err_decomp_decl_std_tuple_element_not_specialized))"},{r,1170,"/// \\return std::tuple_element<I, T>::type.\nstatic QualType getTupleLikeElementType(Sema &S, SourceLocation Loc, unsigned I, QualType T) {\n  // ...\n  if (!TD) {\n    // ...\n    S.Diag(Loc, diag::err_decomp_decl_std_tuple_element_not_specialized) << printTemplateArgs(S.Context.getPrintingPolicy(), Args,"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp:42:9: error: cannot decompose this type; \'std::tuple_element<0UL, A>::type\' does not name a type"}
		}
	},
	["err_decomp_decl_std_tuple_size_not_constant"]={
		[i]="err_decomp_decl_std_tuple_size_not_constant",
		[b]="cannot decompose this type; \'std::tuple_size<%0>::value\' is not a valid integral constant expression",
		[c]="cannot decompose this type; \'std::tuple_size<A>::value\' is not a valid integral constant expression",
		[e]=d,
		[f]="cannot decompose this type; \'std\\:\\:tuple_size\\<(.*?)\\>\\:\\:value\' is not a valid integral constant expression",
		[g]=a,
		[h]=m,
		[j]={rb,1470954346,nb,mb},
		[k]={{r,1133,"static IsTupleLike isTupleLike(Sema &S, SourceLocation Loc, QualType T, llvm::APSInt &Size) {\n  // ...\n  struct ICEDiagnoser : Sema::VerifyICEDiagnoser {\n    // ...\n    Sema::SemaDiagnosticBuilder diagnoseNotICE(Sema &S, SourceLocation Loc) override {\n      return S.Diag(Loc, diag::err_decomp_decl_std_tuple_size_not_constant) << printTemplateArgs(S.Context.getPrintingPolicy(), Args,"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp:19:31: error: cannot decompose this type; \'std::tuple_size<Bad2>::value\' is not a valid integral constant expression"}
		}
	},
	["err_decomp_decl_template"]={
		[i]="err_decomp_decl_template",
		[b]="decomposition declaration template not supported",
		[c]="decomposition declaration template not supported",
		[e]=d,
		[f]="decomposition declaration template not supported",
		[g]=a,
		[h]=m,
		[j]={xb,1469230619,wb,Cb},
		[k]={{r,746,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  if (!TemplateParamLists.empty()) {\n    // ...\n    Diag(TemplateParamLists.front()->getTemplateLoc(), diag::err_decomp_decl_template);"}},
		[l]={
			[Ub]={"clang/test/Parser/cxx1z-decomposition.cpp:142:3: error: decomposition declaration template not supported"}
		}
	},
	["err_decomp_decl_type"]={
		[i]="err_decomp_decl_type",
		[b]="decomposition declaration cannot be declared with type %0; declared type must be \'auto\' or reference to \'auto\'",
		[c]="decomposition declaration cannot be declared with type A; declared type must be \'auto\' or reference to \'auto\'",
		[e]=d,
		[f]="decomposition declaration cannot be declared with type (.*?); declared type must be \'auto\' or reference to \'auto\'",
		[g]=a,
		[h]=m,
		[j]={xb,1469230619,wb,Cb},
		[k]={{r,851,"NamedDecl *Sema::ActOnDecompositionDeclarator(Scope *S, Declarator &D, MultiTemplateParamsArg TemplateParamLists) {\n  // ...\n  // The syntax only allows a single ref-qualifier prior to the decomposition\n  // declarator. No other declarator chunks are permitted. Also check the type\n  // specifier here.\n  if (DS.getTypeSpecType() != DeclSpec::TST_auto || D.hasGroupingParens() || D.getNumTypeObjects() > 1 || (D.getNumTypeObjects() == 1 && D.getTypeObject(0).Kind != DeclaratorChunk::Reference)) {\n    Diag(Decomp.getLSquareLoc(), (D.hasGroupingParens() || (D.getNumTypeObjects() && D.getTypeObject(0).Kind == DeclaratorChunk::Paren)) ? diag::err_decomp_decl_parens : diag::err_decomp_decl_type) << R;"}},
		[l]={
			["clang/test/Parser/cxx1z-class-template-argument-deduction.cpp"]={"clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:161:5: error: decomposition declaration cannot be declared with type \'A\'; declared type must be \'auto\' or reference to \'auto\'","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:188:16: error: decomposition declaration cannot be declared with type \'typename ::A\'; declared type must be \'auto\' or reference to \'auto\'","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:211:20: error: decomposition declaration cannot be declared with type \'typename T::A\'; declared type must be \'auto\' or reference to \'auto\'"}
		}
	},
	["err_decomp_decl_unbindable_type"]={
		[i]="err_decomp_decl_unbindable_type",
		[b]="cannot decompose %select{union|non-class, non-array}1 type %2",
		[c]={{nil,nil,{"cannot decompose ",{"union","non-class, non-array"}," type C"}}},
		[e]=d,
		[f]="cannot decompose (?:union|non\\-class, non\\-array) type (.*?)",
		[g]=a,
		[h]=m,
		[j]={rb,1470954346,nb,mb},
		[k]={{r,1563,"void Sema::CheckCompleteDecompositionDeclaration(DecompositionDecl *DD) {\n  // ...\n  if (!RD || RD->isUnion()) {\n    Diag(DD->getLocation(), diag::err_decomp_decl_unbindable_type) << DD << !RD << DecompType;"}},
		[l]={
			["clang/test/SemaCXX/cxx1z-decomposition.cpp"]={"clang/test/SemaCXX/cxx1z-decomposition.cpp:117:12: error: cannot decompose non-class, non-array type \'int\'"}
		}
	},
	["err_decomp_decl_wrong_number_bindings"]={
		[i]="err_decomp_decl_wrong_number_bindings",
		[b]={{nil,w,"type %0 decomposes into %3 %plural{1:element|:elements}2, but %select{%plural{0:no|:only %1}1|%1}4 %plural{1:name was|:names were}1 provided"},{"11.1",nil,"type %0 decomposes into %2 elements, but %select{only |}3%1 names were provided"}},
		[c]={{nil,w,{"type A decomposes into D ",{"element","elements"},", but ",{{{"no","only B"}},"B"}," ",{"name was","names were"}," provided"}},{"11.1",nil,{"type A decomposes into C elements, but ",{"only ",a},"B names were provided"}}},
		[e]=d,
		[f]="type (.*?) decomposes into (.*?) (?:element|elements), but (?:(?:no|only (.*?))|(.*?)) (?:name was|names were) provided",
		[g]=a,
		[h]=m,
		[j]={rb,1470954346,nb,mb},
		[k]={{r,947,"static bool checkSimpleDecomposition(Sema &S, ArrayRef<BindingDecl *> Bindings, ValueDecl *Src, QualType DecompType, const llvm::APSInt &NumElems, QualType ElemType, llvm::function_ref<ExprResult(SourceLocation, Expr *, unsigned)> GetInit) {\n  if ((int64_t)Bindings.size() != NumElems) {\n    S.Diag(Src->getLocation(), diag::err_decomp_decl_wrong_number_bindings) << DecompType << (unsigned)Bindings.size() << (unsigned)NumElems.getLimitedValue(UINT_MAX) << toString(NumElems, 10) << (NumElems < Bindings.size());"},{r,1202,"static bool checkTupleLikeDecomposition(Sema &S, ArrayRef<BindingDecl *> Bindings, VarDecl *Src, QualType DecompType, const llvm::APSInt &TupleSize) {\n  if ((int64_t)Bindings.size() != TupleSize) {\n    S.Diag(Src->getLocation(), diag::err_decomp_decl_wrong_number_bindings) << DecompType << (unsigned)Bindings.size() << (unsigned)TupleSize.getLimitedValue(UINT_MAX) << toString(TupleSize, 10) << (TupleSize < Bindings.size());"},{r,1427,"static bool checkMemberDecomposition(Sema &S, ArrayRef<BindingDecl *> Bindings, ValueDecl *Src, QualType DecompType, const CXXRecordDecl *OrigRD) {\n  // ...\n  auto DiagnoseBadNumberOfBindings = [&]() -> bool {\n    // ...\n    S.Diag(Src->getLocation(), diag::err_decomp_decl_wrong_number_bindings) << DecompType << (unsigned)Bindings.size() << NumFields << NumFields << (NumFields < Bindings.size());"}},
		[l]={
			["clang/test/SemaTemplate/cxx1z-decomposition.cpp"]={"clang/test/SemaTemplate/cxx1z-decomposition.cpp:18:9: error: type \'D\' decomposes into 3 elements, but only 2 names were provided"}
		}
	},
	["err_decrement_bool"]={
		[i]="err_decrement_bool",
		[b]="cannot decrement expression of type bool",
		[c]="cannot decrement expression of type bool",
		[e]=d,
		[f]="cannot decrement expression of type bool",
		[g]=a,
		[h]=m,
		[j]={Vb,1237025389,Yb,Wb},
		[k]={{Lb,14702,"/// CheckIncrementDecrementOperand - unlike most \"Check\" methods, this routine\n/// doesn\'t need to call UsualUnaryConversions or UsualArithmeticConversions.\nstatic QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, ExprValueKind &VK, ExprObjectKind &OK, SourceLocation OpLoc, bool IsInc, bool IsPrefix) {\n  // ...\n  if (S.getLangOpts().CPlusPlus && ResType->isBooleanType()) {\n    // Decrement of bool is not allowed.\n    if (!IsInc) {\n      S.Diag(OpLoc, diag::err_decrement_bool) << Op->getSourceRange();"}},
		[l]={
			["clang/test/CXX/over/over.built/p5.cpp"]={"clang/test/CXX/over/over.built/p5.cpp:7:9: error: cannot decrement expression of type bool","clang/test/CXX/over/over.built/p5.cpp:8:10: error: cannot decrement expression of type bool"}
		}
	},
	["err_deduced_class_template_compound_type"]={
		[i]={{nil,p,"err_deduced_class_template_compound_type"}},
		[b]={{nil,p,"cannot %select{form pointer to|form reference to|form array of|form function returning|use parentheses when declaring variable with}0 deduced class template specialization type"}},
		[c]={{nil,p,{"cannot ",{"form pointer to","form reference to","form array of","form function returning","use parentheses when declaring variable with"}," deduced class template specialization type"}}},
		[e]=d,
		[f]="cannot (?:form pointer to|form reference to|form array of|form function returning|use parentheses when declaring variable with) deduced class template specialization type",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={"600b5261c4c5",1485463247,"PR0091R3: Implement parsing support for using templates as types.","PR0091R3: Implement parsing support for using templates as types.\n\nThis change adds a new type node, DeducedTemplateSpecializationType, to\nrepresent a type template name that has been used as a type. This is modeled\naround AutoType, and shares a common base class for representing a deduced\nplaceholder type.\n\nWe allow deduced class template types in a few more places than the standard\ndoes: in conditions and for-range-declarators, and in new-type-ids. This is\nconsistent with GCC and with discussion on the core reflector. This patch\ndoes not yet support deduced class template types being named in typename\nspecifiers.\n\nllvm-svn: 293207"},
		[k]={{K,2032,"ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal, SourceLocation PlacementLParen, MultiExprArg PlacementArgs, SourceLocation PlacementRParen, SourceRange TypeIdParens, QualType AllocType, TypeSourceInfo *AllocTypeInfo, std::optional<Expr *> ArraySize, SourceRange DirectInitRange, Expr *Initializer) {\n  // ...\n  if (Deduced && !Deduced->isDeduced() && isa<DeducedTemplateSpecializationType>(Deduced)) {\n    if (ArraySize)\n      return ExprError(Diag(*ArraySize ? (*ArraySize)->getExprLoc() : TypeRange.getBegin(), diag::err_deduced_class_template_compound_type) << /*array*/ 2 << (*ArraySize ? (*ArraySize)->getSourceRange() : TypeRange));"},{Y,4673,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  // If T is \'decltype(auto)\', the only declarators we can have are parens\n  // and at most one function declarator if this is a function declaration.\n  // If T is a deduced class template specialization type, we can have no\n  // declarator chunks at all.\n  if (auto *DT = T->getAs<DeducedType>()) {\n    // ...\n    if ((AT && AT->isDecltypeAuto()) || IsClassTemplateDeduction) {\n      for (unsigned I = 0, E = D.getNumTypeObjects(); I != E; ++I) {\n        // ...\n        unsigned DiagId = IsClassTemplateDeduction ? diag::err_deduced_class_template_compound_type : diag::err_decltype_auto_compound_type;"}},
		[l]={
			["clang/test/Parser/cxx1z-class-template-argument-deduction.cpp"]={"clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:155:5: error: cannot use parentheses when declaring variable with deduced class template specialization type","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:156:5: error: cannot form pointer to deduced class template specialization type","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:157:5: error: cannot form reference to deduced class template specialization type","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:158:8: error: cannot form array of deduced class template specialization type","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:159:5: error: cannot form pointer to deduced class template specialization type","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:160:10: error: cannot form function returning deduced class template specialization type","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:182:16: error: cannot use parentheses when declaring variable with deduced class template specialization type","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:183:16: error: cannot form pointer to deduced class template specialization type","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:184:16: error: cannot form reference to deduced class template specialization type","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:185:19: error: cannot form array of deduced class template specialization type","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:186:16: error: cannot form pointer to deduced class template specialization type","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:187:21: error: cannot form function returning deduced class template specialization type"}
		}
	},
	["err_deduced_class_template_ctor_ambiguous"]={
		[i]={{nil,p,"err_deduced_class_template_ctor_ambiguous"}},
		[b]={{nil,p,"ambiguous deduction for template arguments of %0"}},
		[c]={{nil,p,"ambiguous deduction for template arguments of A"}},
		[e]=d,
		[f]="ambiguous deduction for template arguments of (.*?)",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={Eb,1486667864,Bb,Ab},
		[k]={{X,10855,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // ...\n  case OR_Ambiguous:\n    // ...\n    Candidates.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), PDiag(diag::err_deduced_class_template_ctor_ambiguous) << TemplateName), *this, OCD_AmbiguousCandidates, Inits);"}},
		[l]={
			["clang/test/CXX/over/over.match/over.match.funcs/over.match.class.deduct/p3.cpp"]={"clang/test/CXX/over/over.match/over.match.funcs/over.match.class.deduct/p3.cpp:21:5: error: ambiguous deduction for template arguments of \'A\'","clang/test/CXX/over/over.match/over.match.funcs/over.match.class.deduct/p3.cpp:22:5: error: ambiguous deduction for template arguments of \'A\'"}
		}
	},
	["err_deduced_class_template_ctor_no_viable"]={
		[i]={{nil,p,"err_deduced_class_template_ctor_no_viable"}},
		[b]={{nil,p,"no viable constructor or deduction guide for deduction of template arguments of %0"}},
		[c]={{nil,p,"no viable constructor or deduction guide for deduction of template arguments of A"}},
		[e]=d,
		[f]="no viable constructor or deduction guide for deduction of template arguments of (.*?)",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={Eb,1486667864,Bb,Ab},
		[k]={{X,10868,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // ...\n  case OR_No_Viable_Function: {\n    // ...\n    Candidates.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), PDiag(Complete ? diag::err_deduced_class_template_ctor_no_viable : diag::err_deduced_class_template_incomplete) << TemplateName << !Guides.empty()), *this, OCD_AllCandidates, Inits);"}},
		[l]={
			["clang/test/SemaTemplate/ctad.cpp"]={"clang/test/SemaTemplate/ctad.cpp:31:5: error: no viable constructor or deduction guide for deduction of template arguments of \'D\'"}
		}
	},
	["err_deduced_class_template_deleted"]={
		[i]={{nil,p,"err_deduced_class_template_deleted"}},
		[b]={{nil,p,"class template argument deduction for %0 selected a deleted constructor"}},
		[c]={{nil,p,"class template argument deduction for A selected a deleted constructor"}},
		[e]=d,
		[f]="class template argument deduction for (.*?) selected a deleted constructor",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={Eb,1486667864,Bb,Ab},
		[k]={{X,10876,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // ...\n  case OR_Deleted: {\n    Diag(Kind.getLocation(), diag::err_deduced_class_template_deleted) << TemplateName;"}}
	},
	["err_deduced_class_template_explicit"]={
		[i]={{nil,p,"err_deduced_class_template_explicit"}},
		[b]={{nil,p,"class template argument deduction for %0 selected an explicit %select{constructor|deduction guide}1 for copy-list-initialization"}},
		[c]={{nil,p,{"class template argument deduction for A selected an explicit ",{"constructor","deduction guide"}," for copy-list-initialization"}}},
		[e]=d,
		[f]="class template argument deduction for (.*?) selected an explicit (?:constructor|deduction guide) for copy\\-list\\-initialization",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={Eb,1486667864,Bb,Ab},
		[k]={{X,10889,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // ...\n  case OR_Success:\n    // C++ [over.match.list]p1:\n    //   In copy-list-initialization, if an explicit constructor is chosen, the\n    //   initialization is ill-formed.\n    if (Kind.isCopyInit() && ListInit && cast<CXXDeductionGuideDecl>(Best->Function)->isExplicit()) {\n      // ...\n      Diag(Kind.getLocation(), diag::err_deduced_class_template_explicit) << TemplateName << IsDeductionGuide;"}},
		[l]={
			["clang/test/CXX/over/over.match/over.match.funcs/over.match.class.deduct/p2.cpp"]={"clang/test/CXX/over/over.match/over.match.funcs/over.match.class.deduct/p2.cpp:18:5: error: class template argument deduction for \'A\' selected an explicit deduction guide for copy-list-initialization"}
		}
	},
	["err_deduced_class_template_incomplete"]={
		[i]={{nil,p,"err_deduced_class_template_incomplete"}},
		[b]={{nil,p,"template %0 has no definition and no %select{|viable }1deduction guides for deduction of template arguments"}},
		[c]={{nil,p,{"template A has no definition and no ",{a,"viable "},"deduction guides for deduction of template arguments"}}},
		[e]=d,
		[f]="template (.*?) has no definition and no (?:|viable )deduction guides for deduction of template arguments",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={Eb,1486667864,Bb,Ab},
		[k]={{X,10869,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // ...\n  case OR_No_Viable_Function: {\n    // ...\n    Candidates.NoteCandidates(PartialDiagnosticAt(Kind.getLocation(), PDiag(Complete ? diag::err_deduced_class_template_ctor_no_viable : diag::err_deduced_class_template_incomplete) << TemplateName << !Guides.empty()), *this, OCD_AllCandidates, Inits);"}}
	},
	["err_deduced_non_class_template_specialization_type"]={
		[i]={{nil,p,"err_deduced_non_class_template_specialization_type"}},
		[b]={{nil,z,"%select{<error>|function template|variable template|alias template|template template parameter|concept|template}0 %1 requires template arguments; argument deduction only allowed for class templates"},{C,p,"%select{<error>|function template|variable template|alias template|template template parameter|template}0 %1 requires template arguments; argument deduction only allowed for class templates"}},
		[c]={{nil,z,{{Gb,Ib,Db,Hb,"concept","template"}," B requires template arguments; argument deduction only allowed for class templates"}},{C,p,{{Gb,Ib,Db,Hb,"template"}," B requires template arguments; argument deduction only allowed for class templates"}}},
		[e]=d,
		[f]="(?:function template|variable template|alias template|template template parameter|concept|template) (.*?) requires template arguments; argument deduction only allowed for class templates",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={Eb,1486667864,Bb,Ab},
		[k]={{X,10575,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\n  // ...\n  if (!Template) {\n    Diag(Kind.getLocation(), diag::err_deduced_non_class_template_specialization_type) << (int)getTemplateNameKindForDiagnostics(TemplateName) << TemplateName;"}},
		[l]={
			["clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp"]={"clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:108:19: error: alias template \'Y\' requires template arguments; argument deduction only allowed for class templates"}
		}
	},
	["err_deduced_non_type_template_arg_type_mismatch"]={
		[i]="err_deduced_non_type_template_arg_type_mismatch",
		[b]="deduced non-type template argument does not have the same type as the corresponding template parameter%diff{ ($ vs $)|}0,1",
		[c]={{nil,nil,{"deduced non-type template argument does not have the same type as the corresponding template parameter",{" (A vs B)",a}}}},
		[e]=d,
		[f]="deduced non\\-type template argument does not have the same type as the corresponding template parameter(?: \\((.*?) vs (.*?)\\)|)",
		[g]=a,
		[h]=m,
		[j]={"d5cb1ddb2cf4",1269744163,"After performing template argument deduction for a function template,","After performing template argument deduction for a function template,\ncheck deduced non-type template arguments and template template\narguments against the template parameters for which they were deduced,\nperforming conversions as appropriate so that deduced template\narguments get the same treatment as explicitly-specified template\narguments. This is the bulk of PR6723.\n\nAlso keep track of whether deduction of a non-type template argument\ncame from an array bound (vs. anywhere else). With this information,\nwe enforce C++ [temp.deduct.type]p17, which requires exact type\nmatches when deduction deduces a non-type template argument from\nsomething that is not an array bound.\n\nFinally, when in a SFINAE context, translate the \"zero sized\narrays are an extension\" extension diagnostic into a hard error (for\nbetter standard conformance), which was a minor part of PR6723.\n\nllvm-svn: 99734"},
		[k]={{R,7217,"/// Check a template argument against its corresponding\n/// non-type template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.nontype].\n/// If an error occurred, it returns ExprError(); otherwise, it\n/// returns the converted template argument. \\p ParamType is the\n/// type of the non-type template parameter after it has been instantiated.\nExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, TemplateArgument &SugaredConverted, TemplateArgument &CanonicalConverted, CheckTemplateArgumentKind CTAK) {\n  // ...\n  // FIXME: When Param is a reference, should we check that Arg is an lvalue?\n  if (CTAK == CTAK_Deduced && (ParamType->isReferenceType() ? !Context.hasSameType(ParamType.getNonReferenceType(), Arg->getType()) : !Context.hasSameUnqualifiedType(ParamType, Arg->getType()))) {\n    // ...\n    Diag(StartLoc, diag::err_deduced_non_type_template_arg_type_mismatch) << Arg->getType() << ParamType.getUnqualifiedType();"}}
	},
	["err_deduced_return_type"]={
		[i]="err_deduced_return_type",
		[b]="deduced return types are a C++14 extension",
		[c]="deduced return types are a C++14 extension",
		[e]=d,
		[f]="deduced return types are a C\\+\\+14 extension",
		[g]=a,
		[h]=m,
		[j]={"2add11460050",1392416252,"Fix crash-on-invalid if decltype(auto) is used as a deduced return type in","Fix crash-on-invalid if decltype(auto) is used as a deduced return type in\nC++11 mode. Continue to disallow return type deduction in C++11 for now.\n\nllvm-svn: 201438"},
		[k]={{Y,5199,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::Function: {\n      // ...\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n          if (!S.getLangOpts().CPlusPlus14) {\n            S.Diag(D.getDeclSpec().getTypeSpecTypeLoc(), D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto ? diag::err_auto_missing_trailing_return : diag::err_deduced_return_type);"}},
		[l]={
			["clang/test/SemaCXX/trailing-return-0x.cpp"]={"clang/test/SemaCXX/trailing-return-0x.cpp:21:1: error: deduced return types are a C++14 extension"}
		}
	},
	["err_deduced_tst"]={
		[i]={{nil,v,"err_deduced_tst"}},
		[b]={{nil,v,"typename specifier refers to %select{class template|function template|variable template|alias template|template template parameter|template}0; argument deduction not allowed here"}},
		[c]={{nil,v,{"typename specifier refers to ",{"class template",Gb,Ib,Db,Hb,"template"},"; argument deduction not allowed here"}}},
		[e]=d,
		[f]="typename specifier refers to (?:class template|function template|variable template|alias template|template template parameter|template); argument deduction not allowed here",
		[g]=a,
		[h]={{nil,v,m}},
		[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"},
		[k]={{R,11133,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  // ...\n  case LookupResult::Found:\n    // ...\n    // C++ [dcl.type.simple]p2:\n    //   A type-specifier of the form\n    //     typename[opt] nested-name-specifier[opt] template-name\n    //   is a placeholder for a deduced class type [...].\n    if (getLangOpts().CPlusPlus17) {\n      if (auto *TD = getAsTypeTemplateDecl(Result.getFoundDecl())) {\n        if (!DeducedTSTContext) {\n          // ...\n          if (!T.isNull())\n          // ...\n          else\n            Diag(IILoc, diag::err_deduced_tst) << (int)getTemplateNameKindForDiagnostics(TemplateName(TD));"}},
		[l]={
			["clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:21:36: error: typename specifier refers to class template; argument deduction not allowed here","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:23:38: error: typename specifier refers to class template; argument deduction not allowed here","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:25:36: error: typename specifier refers to alias template; argument deduction not allowed here","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:27:38: error: typename specifier refers to alias template; argument deduction not allowed here"}
		}
	},
	["err_deduction_guide_bad_trailing_return_type"]={
		[i]={{nil,p,"err_deduction_guide_bad_trailing_return_type"}},
		[b]={{nil,p,"deduced type %1 of deduction guide is not %select{|written as }2a specialization of template %0"}},
		[c]={{nil,p,{"deduced type B of deduction guide is not ",{a,"written as "},"a specialization of template A"}}},
		[e]=d,
		[f]="deduced type (.*?) of deduction guide is not (?:|written as )a specialization of template (.*?)",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={"3817e4a40c90",1486756190,"[c++1z] Disallow deduction guides with deduced types that don\'t syntactically match the template bei...","[c++1z] Disallow deduction guides with deduced types that don\'t syntactically match the template being deduced.\n\nllvm-svn: 294773"},
		[k]={{r,11327,"/// Check the validity of a declarator that we parsed for a deduction-guide.\n/// These aren\'t actually declarators in the grammar, so we need to check that\n/// the user didn\'t specify any pieces that are not part of the deduction-guide\n/// grammar. Return true on invalid deduction-guide.\nbool Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  for (const DeclaratorChunk &Chunk : llvm::reverse(D.type_objects())) {\n    // ...\n    if (!AcceptableReturnType)\n      return Diag(TSI->getTypeLoc().getBeginLoc(), diag::err_deduction_guide_bad_trailing_return_type) << GuidedTemplate << TSI->getType() << MightInstantiateToSpecialization << TSI->getTypeLoc().getSourceRange();"}},
		[l]={
			[Qb]={"clang/test/CXX/temp/temp.deduct.guide/p3.cpp:35:11: error: deduced type \'int\' of deduction guide is not a specialization of template \'A\'","clang/test/CXX/temp/temp.deduct.guide/p3.cpp:36:30: error: deduced type \'B<T>\' (aka \'A<type-parameter-0-0>\') of deduction guide is not written as a specialization of template \'A\'","clang/test/CXX/temp/temp.deduct.guide/p3.cpp:37:37: error: deduced type \'const A<T>\' of deduction guide is not a specialization of template \'A\'"}
		}
	},
	["err_deduction_guide_defines_function"]={
		[i]={{nil,p,"err_deduction_guide_defines_function"}},
		[b]={{nil,p,"deduction guide cannot have a function definition"}},
		[c]={{nil,p,"deduction guide cannot have a function definition"}},
		[e]=d,
		[f]="deduction guide cannot have a function definition",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={"c88aa3f3a6f0",1486517249,"Diagnose an attempt to give a deduction-guide a function body.","Diagnose an attempt to give a deduction-guide a function body.\n\nllvm-svn: 294397"},
		[k]={{r,11339,"/// Check the validity of a declarator that we parsed for a deduction-guide.\n/// These aren\'t actually declarators in the grammar, so we need to check that\n/// the user didn\'t specify any pieces that are not part of the deduction-guide\n/// grammar. Return true on invalid deduction-guide.\nbool Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  if (D.isFunctionDefinition())\n    // ...\n    Diag(D.getIdentifierLoc(), diag::err_deduction_guide_defines_function);"}},
		[l]={
			["clang/test/CXX/temp/temp.deduct.guide/p1.cpp"]={"clang/test/CXX/temp/temp.deduct.guide/p1.cpp:81:1: error: deduction guide cannot have a function definition","clang/test/CXX/temp/temp.deduct.guide/p1.cpp:82:1: error: deduction guide cannot have a function definition","clang/test/CXX/temp/temp.deduct.guide/p1.cpp:83:1: error: deduction guide cannot have a function definition","clang/test/CXX/temp/temp.deduct.guide/p1.cpp:84:1: error: deduction guide cannot have a function definition"}
		}
	},
	["err_deduction_guide_invalid_specifier"]={
		[i]={{nil,p,"err_deduction_guide_invalid_specifier"}},
		[b]={{nil,p,"deduction guide cannot be declared \'%0\'"}},
		[c]={{nil,p,"deduction guide cannot be declared \'A\'"}},
		[e]=d,
		[f]="deduction guide cannot be declared \'(.*?)\'",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={"f283fdcd5096",1486514125,"P0091R3: Improved syntactic checking of deduction-guides.","P0091R3: Improved syntactic checking of deduction-guides.\n\nllvm-svn: 294395"},
		[k]={{F,6681,"NamedDecl *Sema::ActOnTypedefDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous) {\n  // ...\n  if (D.getName().getKind() != UnqualifiedIdKind::IK_Identifier) {\n    if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName)\n      Diag(D.getName().StartLocation, diag::err_deduction_guide_invalid_specifier) << \"typedef\";"},{r,11248,"/// Check the validity of a declarator that we parsed for a deduction-guide.\n/// These aren\'t actually declarators in the grammar, so we need to check that\n/// the user didn\'t specify any pieces that are not part of the deduction-guide\n/// grammar. Return true on invalid deduction-guide.\nbool Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // We leave \'friend\' and \'virtual\' to be rejected in the normal way.\n  if (DS.hasTypeSpecifier() || DS.getTypeQualifiers() || DS.getStorageClassSpecLoc().isValid() || DS.isInlineSpecified() || DS.isNoreturnSpecified() || DS.hasConstexprSpecifier()) {\n    BadSpecifierDiagnoser Diagnoser(*this, D.getIdentifierLoc(), diag::err_deduction_guide_invalid_specifier);"}},
		[l]={
			["clang/test/CXX/temp/temp.deduct.guide/p1.cpp"]={"clang/test/CXX/temp/temp.deduct.guide/p1.cpp:61:9: error: deduction guide cannot be declared \'typedef\'","clang/test/CXX/temp/temp.deduct.guide/p1.cpp:62:11: error: deduction guide cannot be declared \'constexpr\'","clang/test/CXX/temp/temp.deduct.guide/p1.cpp:63:8: error: deduction guide cannot be declared \'inline\'","clang/test/CXX/temp/temp.deduct.guide/p1.cpp:64:8: error: deduction guide cannot be declared \'static\'","clang/test/CXX/temp/temp.deduct.guide/p1.cpp:74:7: error: deduction guide cannot be declared \'const\'","clang/test/CXX/temp/temp.deduct.guide/p1.cpp:76:40: error: deduction guide cannot be declared \'static inline constexpr const volatile\'"}
		}
	},
	["err_deduction_guide_name_not_class_template"]={
		[i]={{nil,p,"err_deduction_guide_name_not_class_template"}},
		[b]={{nil,z,"cannot specify deduction guide for %select{<error>|function template|variable template|alias template|template template parameter|concept|dependent template name}0 %1"},{C,p,"cannot specify deduction guide for %select{<error>|function template|variable template|alias template|template template parameter|dependent template name}0 %1"}},
		[c]={{nil,z,{"cannot specify deduction guide for ",{Gb,Ib,Db,Hb,"concept","dependent template name"}," B"}},{C,p,{"cannot specify deduction guide for ",{Gb,Ib,Db,Hb,"dependent template name"}," B"}}},
		[e]=d,
		[f]="cannot specify deduction guide for (?:function template|variable template|alias template|template template parameter|concept|dependent template name) (.*?)",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={"3584515018da",1486431450,"P0091R3: Implement basic parsing support for C++17 deduction-guides.","P0091R3: Implement basic parsing support for C++17 deduction-guides.\n\nWe model deduction-guides as functions with a new kind of name that identifies\nthe template whose deduction they guide; the bulk of this patch is adding the\nnew name kind. This gives us a clean way to attach an extensible list of guides\nto a class template in a way that doesn\'t require any special handling in AST\nfiles etc (and we\'re going to need these functions we come to performing\ndeduction).\n\nllvm-svn: 294266"},
		[k]={{F,5860,"/// Retrieves the declaration name from a parsed unqualified-id.\nDeclarationNameInfo Sema::GetNameFromUnqualifiedId(const UnqualifiedId &Name) {\n  // ...\n  case UnqualifiedIdKind::IK_DeductionGuideName: {\n    // ...\n    if (!Template || !isa<ClassTemplateDecl>(Template)) {\n      Diag(Name.StartLocation, diag::err_deduction_guide_name_not_class_template) << (int)getTemplateNameKindForDiagnostics(TN) << TN;"}},
		[l]={
			[Qb]={"clang/test/CXX/temp/temp.deduct.guide/p3.cpp:24:1: error: cannot specify deduction guide for alias template \'B\'","clang/test/CXX/temp/temp.deduct.guide/p3.cpp:32:3: error: cannot specify deduction guide for template template parameter \'TT\'","clang/test/CXX/temp/temp.deduct.guide/p3.cpp:32:3: error: cannot specify deduction guide for template template parameter \'TT\'"}
		}
	},
	["err_deduction_guide_no_trailing_return_type"]={
		[i]={{nil,p,"err_deduction_guide_no_trailing_return_type"}},
		[b]={{nil,p,"deduction guide declaration without trailing return type"}},
		[c]={{nil,p,"deduction guide declaration without trailing return type"}},
		[e]=d,
		[f]="deduction guide declaration without trailing return type",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={"3584515018da",1486431450,"P0091R3: Implement basic parsing support for C++17 deduction-guides.","P0091R3: Implement basic parsing support for C++17 deduction-guides.\n\nWe model deduction-guides as functions with a new kind of name that identifies\nthe template whose deduction they guide; the bulk of this patch is adding the\nnew name kind. This gives us a clean way to attach an extensible list of guides\nto a class template in a way that doesn\'t require any special handling in AST\nfiles etc (and we\'re going to need these functions we come to performing\ndeduction).\n\nllvm-svn: 294266"},
		[k]={{r,11290,"/// Check the validity of a declarator that we parsed for a deduction-guide.\n/// These aren\'t actually declarators in the grammar, so we need to check that\n/// the user didn\'t specify any pieces that are not part of the deduction-guide\n/// grammar. Return true on invalid deduction-guide.\nbool Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  for (const DeclaratorChunk &Chunk : llvm::reverse(D.type_objects())) {\n    // ...\n    if (!Chunk.Fun.hasTrailingReturnType())\n      return Diag(D.getName().getBeginLoc(), diag::err_deduction_guide_no_trailing_return_type);"}},
		[l]={
			["clang/test/SemaCXX/invalid-deduction-guide-as-template-candidates.cpp"]={"clang/test/SemaCXX/invalid-deduction-guide-as-template-candidates.cpp:5:1: error: deduction guide declaration without trailing return type"}
		}
	},
	["err_deduction_guide_redeclared"]={
		[i]={{nil,z,"err_deduction_guide_redeclared"}},
		[b]={{nil,z,"redeclaration of deduction guide"}},
		[c]={{nil,z,"redeclaration of deduction guide"}},
		[e]=d,
		[f]="redeclaration of deduction guide",
		[g]=a,
		[h]={{nil,z,m}},
		[j]={"5fe2ddbdf47d",1556928540,"[clang] adding explicit(bool) from c++2a","[clang] adding explicit(bool) from c++2a\n\nthis patch adds support for the explicit bool specifier.\n\nChanges:\n- The parsing for the explicit(bool) specifier was added in ParseDecl.cpp.\n- The storage of the explicit specifier was changed. the explicit specifier was stored as a boolean value in the FunctionDeclBitfields and in the DeclSpec class. now it is stored as a PointerIntPair<Expr*, 2> with a flag and a potential expression in CXXConstructorDecl, CXXDeductionGuideDecl, CXXConversionDecl and in the DeclSpec class.\n- Following the AST change, Serialization, ASTMatchers, ASTComparator and ASTPrinter were adapted.\n- Template instantiation was adapted to instantiate the potential expressions of the explicit(bool) specifier When instantiating their associated declaration.\n- The Add*Candidate functions were adapted, they now take a Boolean indicating if the context allowing explicit constructor or conversion function and this boolean is used to remove invalid overloads that required template instantiation to be detected.\n- Test for Semantic and Serialization were added.\n\nThis patch is not yet complete. I still need to check that interaction with CTAD and deduction guides is correct. and add more tests for AST operations. But I wanted first feedback.\nPerhaps this patch should be spited in smaller patches, but making each patch testable as a standalone may be tricky.\n\nPatch by Tyker\n\nDifferential Revision: https://reviews.llvm.org/D60934\n\nllvm-svn: 359949"},
		[k]={{r,698,"/// 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++17 [temp.deduct.guide]p3:\n  //   Two deduction guide declarations in the same translation unit\n  //   for the same class template shall not have equivalent\n  //   parameter-declaration-clauses.\n  if (isa<CXXDeductionGuideDecl>(New) && !New->isFunctionTemplateSpecialization() && isVisible(Old)) {\n    Diag(New->getLocation(), diag::err_deduction_guide_redeclared);"}},
		[l]={
			[Qb]={"clang/test/CXX/temp/temp.deduct.guide/p3.cpp:9:1: error: redeclaration of deduction guide","clang/test/CXX/temp/temp.deduct.guide/p3.cpp:12:1: error: redeclaration of deduction guide"}
		}
	},
	["err_deduction_guide_specialized"]={
		[i]={{nil,p,"err_deduction_guide_specialized"}},
		[b]={{nil,p,"deduction guide cannot be %select{explicitly instantiated|explicitly specialized}0"}},
		[c]={{nil,p,{"deduction guide cannot be ",{"explicitly instantiated","explicitly specialized"}}}},
		[e]=d,
		[f]="deduction guide cannot be (?:explicitly instantiated|explicitly specialized)",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={"19a311a483ba",1486680471,"Disallow explicit instantiation and explicit specialization for deduction guides.","Disallow explicit instantiation and explicit specialization for deduction guides.\n\nllvm-svn: 294641"},
		[k]={{F,11933,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // C++-specific checks.\n    if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(NewFD)) {\n    // ...\n    } else if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(NewFD)) {\n    // ...\n    } else if (auto *Guide = dyn_cast<CXXDeductionGuideDecl>(NewFD)) {\n      // ...\n      // A deduction guide is not on the list of entities that can be\n      // explicitly specialized.\n      if (Guide->getTemplateSpecializationKind() == TSK_ExplicitSpecialization)\n        Diag(Guide->getBeginLoc(), diag::err_deduction_guide_specialized) << /*explicit specialization*/ 1;"},{R,10422,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // ...\n  // A deduction guide is not on the list of entities that can be explicitly\n  // instantiated.\n  if (Name.getNameKind() == DeclarationName::CXXDeductionGuideName) {\n    Diag(D.getDeclSpec().getBeginLoc(), diag::err_deduction_guide_specialized) << /*explicit instantiation*/ 0;"}},
		[l]={
			["clang/test/CXX/temp/temp.deduct.guide/p1.cpp"]={"clang/test/CXX/temp/temp.deduct.guide/p1.cpp:94:3: error: deduction guide cannot be explicitly specialized","clang/test/CXX/temp/temp.deduct.guide/p1.cpp:95:19: error: deduction guide cannot be explicitly instantiated","clang/test/CXX/temp/temp.deduct.guide/p1.cpp:96:12: error: deduction guide cannot be explicitly instantiated","clang/test/CXX/temp/temp.deduct.guide/p1.cpp:104:5: error: deduction guide cannot be explicitly specialized"}
		}
	},
	["err_deduction_guide_template_not_deducible"]={
		[i]={{nil,p,"err_deduction_guide_template_not_deducible"}},
		[b]={{nil,p,"deduction guide template contains %select{a template parameter|template parameters}0 that cannot be deduced"}},
		[c]={{nil,p,{"deduction guide template contains ",{"a template parameter","template parameters"}," that cannot be deduced"}}},
		[e]=d,
		[f]="deduction guide template contains (?:a template parameter|template parameters) that cannot be deduced",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={"4e05eaa9e84a",1487205407,"[c++1z] Diagnose non-deducible template parameters in deduction guide templates, per [temp.param]p11...","[c++1z] Diagnose non-deducible template parameters in deduction guide templates, per [temp.param]p11.\n\nllvm-svn: 295264"},
		[k]={{R,4509,"void Sema::CheckDeductionGuideTemplate(FunctionTemplateDecl *TD) {\n  // ...\n  if (!DeducibleParams.all()) {\n    // ...\n    Diag(TD->getLocation(), diag::err_deduction_guide_template_not_deducible) << (NumNonDeducible > 1);"}},
		[l]={
			["clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp"]={"clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:163:3: error: deduction guide template contains a template parameter that cannot be deduced","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:166:3: error: deduction guide template contains a template parameter that cannot be deduced","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:170:3: error: deduction guide template contains a template parameter that cannot be deduced","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:178:3: error: deduction guide template contains a template parameter that cannot be deduced"}
		}
	},
	["err_deduction_guide_with_complex_decl"]={
		[i]={{nil,p,"err_deduction_guide_with_complex_decl"}},
		[b]={{nil,p,"cannot specify any part of a return type in the declaration of a deduction guide"}},
		[c]={{nil,p,"cannot specify any part of a return type in the declaration of a deduction guide"}},
		[e]=d,
		[f]="cannot specify any part of a return type in the declaration of a deduction guide",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={"3584515018da",1486431450,"P0091R3: Implement basic parsing support for C++17 deduction-guides.","P0091R3: Implement basic parsing support for C++17 deduction-guides.\n\nWe model deduction-guides as functions with a new kind of name that identifies\nthe template whose deduction they guide; the bulk of this patch is adding the\nnew name kind. This gives us a clean way to attach an extensible list of guides\nto a class template in a way that doesn\'t require any special handling in AST\nfiles etc (and we\'re going to need these functions we come to performing\ndeduction).\n\nllvm-svn: 294266"},
		[k]={{r,11284,"/// Check the validity of a declarator that we parsed for a deduction-guide.\n/// These aren\'t actually declarators in the grammar, so we need to check that\n/// the user didn\'t specify any pieces that are not part of the deduction-guide\n/// grammar. Return true on invalid deduction-guide.\nbool Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  for (const DeclaratorChunk &Chunk : llvm::reverse(D.type_objects())) {\n    // ...\n    if (Chunk.Kind != DeclaratorChunk::Function || FoundFunction) {\n      Diag(D.getDeclSpec().getBeginLoc(), diag::err_deduction_guide_with_complex_decl) << D.getSourceRange();"},{Y,5219,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::Function: {\n      // ...\n      // Check for auto functions and trailing return type and adjust the\n      // return type accordingly.\n      if (!D.isInvalidType()) {\n        // trailing-return-type is only required if we\'re declaring a function,\n        // and not, for instance, a pointer to a function.\n        if (D.getDeclSpec().hasAutoTypeSpec() && !FTI.hasTrailingReturnType() && chunkIndex == 0) {\n        // ...\n        } else if (FTI.hasTrailingReturnType()) {\n          // T must be exactly \'auto\' at this point. See CWG issue 681.\n          if (isa<ParenType>(T)) {\n          // ...\n          } else if (D.getName().getKind() == UnqualifiedIdKind::IK_DeductionGuideName) {\n            if (T != Context.DependentTy) {\n              S.Diag(D.getDeclSpec().getBeginLoc(), diag::err_deduction_guide_with_complex_decl) << D.getSourceRange();"}},
		[l]={
			["clang/test/CXX/temp/temp.deduct.guide/p1.cpp"]={"clang/test/CXX/temp/temp.deduct.guide/p1.cpp:15:1: error: cannot specify any part of a return type in the declaration of a deduction guide","clang/test/CXX/temp/temp.deduct.guide/p1.cpp:16:1: error: cannot specify any part of a return type in the declaration of a deduction guide","clang/test/CXX/temp/temp.deduct.guide/p1.cpp:30:1: error: cannot specify any part of a return type in the declaration of a deduction guide"}
		}
	},
	["err_deduction_guide_wrong_access"]={
		[i]={{nil,B,"err_deduction_guide_wrong_access"}},
		[b]={{nil,B,"deduction guide has different access from the corresponding member template"}},
		[c]={{nil,B,"deduction guide has different access from the corresponding member template"}},
		[e]=d,
		[f]="deduction guide has different access from the corresponding member template",
		[g]=a,
		[h]={{nil,B,m}},
		[j]={"e4899c16480d",1527718423,"PR37631: verify that a member deduction guide has the same access as its template.","PR37631: verify that a member deduction guide has the same access as its template.\n\nllvm-svn: 333599"},
		[k]={{r,3667,"/// ActOnCXXMemberDeclarator - This is invoked when a C++ class member\n/// declarator is parsed. \'AS\' is the access specifier, \'BW\' specifies the\n/// bitfield width if there is one, \'InitExpr\' specifies the initializer if\n/// one has been parsed, and \'InitStyle\' is set if an in-class initializer is\n/// present (but parsing it has been deferred).\nNamedDecl *Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, MultiTemplateParamsArg TemplateParameterLists, Expr *BW, const VirtSpecifiers &VS, InClassInitStyle InitStyle) {\n  // ...\n  if (isInstField) {\n  // ...\n  } else {\n    // ...\n    // C++ [temp.deduct.guide]p3:\n    //   A deduction guide [...] for a member class template [shall be\n    //   declared] with the same access [as the template].\n    if (auto *DG = dyn_cast<CXXDeductionGuideDecl>(NonTemplateMember)) {\n      // ...\n      // Access specifiers are only meaningful if both the template and the\n      // deduction guide are from the same scope.\n      if (AS != TD->getAccess() && TD->getDeclContext()->getRedeclContext()->Equals(DG->getDeclContext()->getRedeclContext())) {\n        Diag(DG->getBeginLoc(), diag::err_deduction_guide_wrong_access);"}},
		[l]={
			["clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp"]={"clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:368:5: error: deduction guide has different access from the corresponding member template","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:371:5: error: deduction guide has different access from the corresponding member template","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:374:26: error: deduction guide has different access from the corresponding member template","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:375:26: error: deduction guide has different access from the corresponding member template"}
		}
	},
	["err_deduction_guide_wrong_scope"]={
		[i]={{nil,p,"err_deduction_guide_wrong_scope"}},
		[b]={{nil,p,"deduction guide must be declared in the same scope as template %q0"}},
		[c]={{nil,p,"deduction guide must be declared in the same scope as template A"}},
		[e]=d,
		[f]="deduction guide must be declared in the same scope as template (.*?)",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={"278890f85bba",1486759198,"[c++1z] Enforce restriction that deduction guide is declared in the same scope as its template.","[c++1z] Enforce restriction that deduction guide is declared in the same scope as its template.\n\nllvm-svn: 294778"},
		[k]={{r,11236,"/// Check the validity of a declarator that we parsed for a deduction-guide.\n/// These aren\'t actually declarators in the grammar, so we need to check that\n/// the user didn\'t specify any pieces that are not part of the deduction-guide\n/// grammar. Return true on invalid deduction-guide.\nbool Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R, StorageClass &SC) {\n  // ...\n  // C++ [temp.deduct.guide]p3:\n  //   A deduction-gide shall be declared in the same scope as the\n  //   corresponding class template.\n  if (!CurContext->getRedeclContext()->Equals(GuidedTemplateDecl->getDeclContext()->getRedeclContext())) {\n    Diag(D.getIdentifierLoc(), diag::err_deduction_guide_wrong_scope) << GuidedTemplateDecl;"}},
		[l]={
			[Qb]={"clang/test/CXX/temp/temp.deduct.guide/p3.cpp:46:3: error: deduction guide must be declared in the same scope as template \'WrongScope::(anonymous namespace)::AnonNS1\'","clang/test/CXX/temp/temp.deduct.guide/p3.cpp:50:5: error: deduction guide must be declared in the same scope as template \'WrongScope::AnonNS2\'","clang/test/CXX/temp/temp.deduct.guide/p3.cpp:57:3: error: deduction guide must be declared in the same scope as template \'WrongScope::N::NamedNS1\'","clang/test/CXX/temp/temp.deduct.guide/p3.cpp:60:3: error: deduction guide must be declared in the same scope as template \'WrongScope::N::NamedNS2\'","clang/test/CXX/temp/temp.deduct.guide/p3.cpp:65:5: error: deduction guide must be declared in the same scope as template \'WrongScope::ClassMemberA::X\'"}
		}
	},
	["err_deep_exception_specs_differ"]={
		[i]="err_deep_exception_specs_differ",
		[b]="exception specifications of %select{return|argument}0 types differ",
		[c]={{nil,nil,{"exception specifications of ",{"return","argument"}," types differ"}}},
		[e]=d,
		[f]="exception specifications of (?:return|argument) types differ",
		[g]=a,
		[h]=m,
		[j]={"a44822fdb645",1255536569,"Have the exception specification checkers take partial diagnostics. Use this to merge two diagnostic...","Have the exception specification checkers take partial diagnostics. Use this to merge two diagnostics.\n\nllvm-svn: 84105"},
		[k]={{"clang/lib/Sema/SemaExceptionSpec.cpp",941,"bool Sema::CheckExceptionSpecCompatibility(Expr *From, QualType ToType) {\n  // ...\n  unsigned NestedDiagID = diag::err_deep_exception_specs_differ;"},{"clang/lib/Sema/SemaExceptionSpec.cpp",994,"bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  return CheckExceptionSpecSubset(PDiag(DiagID), PDiag(diag::err_deep_exception_specs_differ), PDiag(diag::note_overridden_virtual_function), PDiag(diag::ext_override_exception_spec), Old->getType()->castAs<FunctionProtoType>(), Old->getLocation(), New->getType()->castAs<FunctionProtoType>(), New->getLocation());"}},
		[l]={
			["clang/test/CXX/except/except.spec/p5-pointers.cpp"]={"clang/test/CXX/except/except.spec/p5-pointers.cpp:66:32: error: exception specifications of return types differ","clang/test/CXX/except/except.spec/p5-pointers.cpp:67:32: error: exception specifications of return types differ","clang/test/CXX/except/except.spec/p5-pointers.cpp:69:38: error: exception specifications of argument types differ","clang/test/CXX/except/except.spec/p5-pointers.cpp:70:38: error: exception specifications of argument types differ"}
		}
	},
	["err_default_arg_in_partial_spec"]={
		[i]="err_default_arg_in_partial_spec",
		[b]="default template argument in a class template partial specialization",
		[c]="default template argument in a class template partial specialization",
		[e]=d,
		[f]="default template argument in a class template partial specialization",
		[g]=a,
		[h]=m,
		[j]={"d52220513fbc",1244835782,"Verify that the template parameters of a class template partial","Verify that the template parameters of a class template partial\nspecialization do not have default arguments \n(C++ [temp.class.spec]p10). \n\nllvm-svn: 73245"},
		[k]={{R,8675,"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    // C++ [temp.class.spec]p10:\n    //   The template parameter list of a specialization shall not\n    //   contain default template argument values.\n    for (unsigned I = 0, N = TemplateParams->size(); I != N; ++I) {\n      // ...\n      if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(Param)) {\n        if (TTP->hasDefaultArgument()) {\n          Diag(TTP->getDefaultArgumentLoc(), diag::err_default_arg_in_partial_spec);"},{R,8682,"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    // C++ [temp.class.spec]p10:\n    //   The template parameter list of a specialization shall not\n    //   contain default template argument values.\n    for (unsigned I = 0, N = TemplateParams->size(); I != N; ++I) {\n      // ...\n      if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(Param)) {\n      // ...\n      } else if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n        if (Expr *DefArg = NTTP->getDefaultArgument()) {\n          Diag(NTTP->getDefaultArgumentLoc(), diag::err_default_arg_in_partial_spec) << DefArg->getSourceRange();"},{R,8690,"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    // C++ [temp.class.spec]p10:\n    //   The template parameter list of a specialization shall not\n    //   contain default template argument values.\n    for (unsigned I = 0, N = TemplateParams->size(); I != N; ++I) {\n      // ...\n      if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(Param)) {\n      // ...\n      } else if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(Param)) {\n      // ...\n      } else {\n        // ...\n        if (TTP->hasDefaultArgument()) {\n          Diag(TTP->getDefaultArgument().getLocation(), diag::err_default_arg_in_partial_spec) << TTP->getDefaultArgument().getSourceRange();"}},
		[l]={
			["clang/test/SemaTemplate/temp_class_spec_neg.cpp"]={"clang/test/SemaTemplate/temp_class_spec_neg.cpp:40:23: error: default template argument in a class template partial specialization","clang/test/SemaTemplate/temp_class_spec_neg.cpp:41:18: error: default template argument in a class template partial specialization","clang/test/SemaTemplate/temp_class_spec_neg.cpp:42:44: error: default template argument in a class template partial specialization"}
		}
	},
	["err_default_arg_makes_ctor_special"]={
		[i]="err_default_arg_makes_ctor_special",
		[b]="addition of default argument on redeclaration makes this constructor a %select{default|copy|move}0 constructor",
		[c]={{nil,nil,{"addition of default argument on redeclaration makes this constructor a ",{"default","copy","move"}," constructor"}}},
		[e]=d,
		[f]="addition of default argument on redeclaration makes this constructor a (?:default|copy|move) constructor",
		[g]=a,
		[h]=m,
		[j]={"58c3cc12dacc",1354074324,"C++ core issue 1344, PR10618: promote \"addition of default argument makes this","C++ core issue 1344, PR10618: promote \"addition of default argument makes this\na special member\" diagnostic from warning to error, and fix the cases where it\nproduced diagnostics with incorrect wording.\n\nWe don\'t support this as an extension, and we ban it even in C++98 mode. This\nbreaks too much (for instance, the ABI-specified calling convention for a type\ncan change if it acquires a copy constructor through the addition of a default\nargument).\n\nllvm-svn: 168769"},
		[k]={{r,661,"/// 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  // DR1344: If a default argument is added outside a class definition and that\n  // default argument makes the function a special member function, the program\n  // is ill-formed. This can only happen for constructors.\n  if (isa<CXXConstructorDecl>(New) && New->getMinRequiredArguments() < Old->getMinRequiredArguments()) {\n    // ...\n    if (NewSM != OldSM) {\n      // ...\n      Diag(NewParam->getLocation(), diag::err_default_arg_makes_ctor_special) << NewParam->getDefaultArgRange() << NewSM;"}},
		[l]={
			["clang/test/SemaCXX/copy-constructor-error.cpp"]={"clang/test/SemaCXX/copy-constructor-error.cpp:19:20: error: addition of default argument on redeclaration makes this constructor a copy constructor","clang/test/SemaCXX/copy-constructor-error.cpp:20:14: error: addition of default argument on redeclaration makes this constructor a default constructor","clang/test/SemaCXX/copy-constructor-error.cpp:21:21: error: addition of default argument on redeclaration makes this constructor a default constructor","clang/test/SemaCXX/copy-constructor-error.cpp:29:16: error: addition of default argument on redeclaration makes this constructor a copy constructor","clang/test/SemaCXX/copy-constructor-error.cpp:41:12: error: addition of default argument on redeclaration makes this constructor a default constructor","clang/test/SemaCXX/copy-constructor-error.cpp:49:17: error: addition of default argument on redeclaration makes this constructor a default constructor","clang/test/SemaCXX/copy-constructor-error.cpp:57:12: error: addition of default argument on redeclaration makes this constructor a copy constructor"}
		}
	},
	["err_default_arg_unparsed"]={
		[i]="err_default_arg_unparsed",
		[b]="unexpected end of default argument expression",
		[c]="unexpected end of default argument expression",
		[e]=d,
		[f]="unexpected end of default argument expression",
		[g]=a,
		[h]=Q,
		[j]={"c0dc36b21309",1281388093,"Change warning about incomplete parsing of C++ default arg to error and provide a test case; thanks ...","Change warning about incomplete parsing of C++ default arg to error and provide a test case; thanks Doug!\n\nllvm-svn: 110603"},
		[k]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",408,"void Parser::ParseLexedMethodDeclaration(LateParsedMethodDeclaration &LM) {\n  // ...\n  for (unsigned I = 0, N = LM.DefaultArgs.size(); I != N; ++I) {\n    // ...\n    if (Toks) {\n      // ...\n      if (DefArgResult.isInvalid()) {\n      // ...\n      } else {\n        if (Tok.isNot(tok::eof) || Tok.getEofData() != Param) {\n          // ...\n          Diag(Tok.getLocation(), diag::err_default_arg_unparsed) << SourceRange(Tok.getLocation(), (*Toks)[Toks->size() - 3].getLocation());"}},
		[l]={
			["clang/test/Parser/cxx-default-args.cpp"]={"clang/test/Parser/cxx-default-args.cpp:15:19: error: unexpected end of default argument expression"}
		}
	},
	["err_default_delete_in_multiple_declaration"]={
		[i]="err_default_delete_in_multiple_declaration",
		[b]="\'= %select{default|delete}0\' is a function definition and must occur in a standalone declaration",
		[c]={{nil,nil,{"\'= ",{"default","delete"},"\' is a function definition and must occur in a standalone declaration"}}},
		[e]=d,
		[f]="\'\\= (?:default|delete)\' is a function definition and must occur in a standalone declaration",
		[g]=a,
		[h]=Q,
		[j]={"5a7fa250ab78",1305180949,"Properly parse the \'default\' and \'delete\' keywords.","Properly parse the \'default\' and \'delete\' keywords.\n\nThey are actually grammatically considered definitions and parsed\naccordingly.\n\nThis fixes the outstanding bugs regarding defaulting functions after\ntheir declarations.\n\nWe now really nicely diagnose the following construct (try it!)\n\nint foo() = delete, bar;\n\nStill todo: Defaulted functions other than default constructors\n            Test cases (including for the above construct)\n\nllvm-svn: 131228"},
		[k]={{"clang/lib/Parse/ParseCXXInlineMethods.cpp",93,"/// ParseCXXInlineMethodDef - We parsed and verified that the specified\n/// Declarator is a well formed C++ inline method definition. Now lex its body\n/// and store its tokens for parsing after the C++ class is complete.\nNamedDecl *Parser::ParseCXXInlineMethodDef(AccessSpecifier AS, const ParsedAttributesView &AccessAttrs, ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, const VirtSpecifiers &VS, SourceLocation PureSpecLoc) {\n  // ...\n  if (TryConsumeToken(tok::equal)) {\n    // ...\n    if (Tok.is(tok::comma)) {\n      Diag(KWLoc, diag::err_default_delete_in_multiple_declaration) << Delete;"},{"clang/lib/Parse/ParseDecl.cpp",2505,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  // ...\n  // Parse declarator \'=\' initializer.\n  case InitKind::Equal: {\n    // ...\n    if (Tok.is(tok::kw_delete)) {\n      if (D.isFunctionDeclarator())\n        Diag(ConsumeToken(), diag::err_default_delete_in_multiple_declaration) << 1 /* delete */;"},{"clang/lib/Parse/ParseDecl.cpp",2511,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  // ...\n  // Parse declarator \'=\' initializer.\n  case InitKind::Equal: {\n    // ...\n    if (Tok.is(tok::kw_delete)) {\n    // ...\n    } else if (Tok.is(tok::kw_default)) {\n      if (D.isFunctionDeclarator())\n        Diag(ConsumeToken(), diag::err_default_delete_in_multiple_declaration) << 0 /* default */;"},{jb,3246,"/// ParseCXXMemberInitializer - Parse the brace-or-equal-initializer.\n/// Also detect and reject any attempted defaulted/deleted function definition.\n/// The location of the \'=\', if any, will be placed in EqualLoc.\n///\n/// This does not check for a pure-specifier; that\'s handled elsewhere.\n///\n///   brace-or-equal-initializer:\n///     \'=\' initializer-expression\n///     braced-init-list\n///\n///   initializer-clause:\n///     assignment-expression\n///     braced-init-list\n///\n///   defaulted/deleted function-definition:\n///     \'=\' \'default\'\n///     \'=\' \'delete\'\n///\n/// Prior to C++0x, the assignment-expression in an initializer-clause must\n/// be a constant-expression.\nExprResult Parser::ParseCXXMemberInitializer(Decl *D, bool IsFunction, SourceLocation &EqualLoc) {\n  // ...\n  if (TryConsumeToken(tok::equal, EqualLoc)) {\n    if (Tok.is(tok::kw_delete)) {\n      // ...\n      if (IsFunction || Next.isOneOf(tok::semi, tok::comma, tok::eof)) {\n        if (IsFunction)\n          Diag(ConsumeToken(), diag::err_default_delete_in_multiple_declaration) << 1 /* delete */;"},{jb,3254,"/// ParseCXXMemberInitializer - Parse the brace-or-equal-initializer.\n/// Also detect and reject any attempted defaulted/deleted function definition.\n/// The location of the \'=\', if any, will be placed in EqualLoc.\n///\n/// This does not check for a pure-specifier; that\'s handled elsewhere.\n///\n///   brace-or-equal-initializer:\n///     \'=\' initializer-expression\n///     braced-init-list\n///\n///   initializer-clause:\n///     assignment-expression\n///     braced-init-list\n///\n///   defaulted/deleted function-definition:\n///     \'=\' \'default\'\n///     \'=\' \'delete\'\n///\n/// Prior to C++0x, the assignment-expression in an initializer-clause must\n/// be a constant-expression.\nExprResult Parser::ParseCXXMemberInitializer(Decl *D, bool IsFunction, SourceLocation &EqualLoc) {\n  // ...\n  if (TryConsumeToken(tok::equal, EqualLoc)) {\n    if (Tok.is(tok::kw_delete)) {\n    // ...\n    } else if (Tok.is(tok::kw_default)) {\n      if (IsFunction)\n        Diag(Tok, diag::err_default_delete_in_multiple_declaration) << 0 /* default */;"},{"clang/lib/Parse/Parser.cpp",1382,"/// ParseFunctionDefinition - We parsed and verified that the specified\n/// Declarator is well formed.  If this is a K&R-style function, read the\n/// parameters declaration-list, then start the compound-statement.\n///\n///       function-definition: [C99 6.9.1]\n///         decl-specs      declarator declaration-list[opt] compound-statement\n/// [C90] function-definition: [C99 6.7.1] - implicit int result\n/// [C90]   decl-specs[opt] declarator declaration-list[opt] compound-statement\n/// [C++] function-definition: [C++ 8.4]\n///         decl-specifier-seq[opt] declarator ctor-initializer[opt]\n///         function-body\n/// [C++] function-definition: [C++ 8.4]\n///         decl-specifier-seq[opt] declarator function-try-block\n///\nDecl *Parser::ParseFunctionDefinition(ParsingDeclarator &D, const ParsedTemplateInfo &TemplateInfo, LateParsedAttrList *LateParsedAttrs) {\n  // ...\n  if (TryConsumeToken(tok::equal)) {\n    // ...\n    if (Tok.is(tok::comma)) {\n      Diag(KWLoc, diag::err_default_delete_in_multiple_declaration) << (BodyKind == Sema::FnBodyKind::Delete);"}},
		[l]={
			["clang/test/Parser/cxx-default-delete.cpp"]={"clang/test/Parser/cxx-default-delete.cpp:6:11: error: \'= delete\' is a function definition and must occur in a standalone declaration","clang/test/Parser/cxx-default-delete.cpp:7:14: error: \'= delete\' is a function definition and must occur in a standalone declaration","clang/test/Parser/cxx-default-delete.cpp:9:11: error: \'= default\' is a function definition and must occur in a standalone declaration","clang/test/Parser/cxx-default-delete.cpp:11:14: error: \'= default\' is a function definition and must occur in a standalone declaration"}
		}
	},
	["err_default_init_const"]={
		[i]="err_default_init_const",
		[b]="default initialization of an object of const type %0%select{| without a user-provided default constructor}1",
		[c]={{nil,nil,{"default initialization of an object of const type A",{a," without a user-provided default constructor"}}}},
		[e]=d,
		[f]="default initialization of an object of const type (.*?)(?:| without a user\\-provided default constructor)",
		[g]=a,
		[h]=m,
		[j]={"85dabae6ad94",1260927482,"Switch the C++ new expression over to InitializationSequence, rather","Switch the C++ new expression over to InitializationSequence, rather\nthan using its own partial implementation of initialization. \n\nSwitched CheckInitializerTypes over to\nInitializedEntity/InitializationKind, to help move us closer to\nInitializationSequence.\n\nAdded InitializedEntity::getName() to retrieve the name of the entity,\nfor diagnostics that care about such things.\n\nImplemented support for default initialization in\nInitializationSequence.\n\nClean up the determination of the \"source expressions\" for an\ninitialization sequence in InitializationSequence::Perform.\n\nTaught CXXConstructExpr to store more location information.\n\nllvm-svn: 91492"},
		[k]={{X,8535,"ExprResult InitializationSequence::Perform(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType *ResultType) {\n  // ...\n  if (!ZeroInitializationFixit.empty()) {\n    // ...\n    // The initialization would have succeeded with this fixit. Since the fixit\n    // is on the error, we need to build a valid AST in this case, so this isn\'t\n    // handled in the Failed() branch above.\n    if (!DestType->isRecordType() && VD && VD->isConstexpr()) {\n    // ...\n    } else {\n      unsigned DiagID = diag::err_default_init_const;"},{X,9969,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_DefaultInitOfConst:\n    if (Entity.getKind() == InitializedEntity::EK_Member && isa<CXXConstructorDecl>(S.CurContext)) {\n    // ...\n    } else if (const auto *VD = dyn_cast_if_present<VarDecl>(Entity.getDecl()); VD && VD->isConstexpr()) {\n    // ...\n    } else {\n      S.Diag(Kind.getLocation(), diag::err_default_init_const) << DestType << (bool)DestType->getAs<RecordType>();"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp"]={"clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp:39:14: error: default initialization of an object of const type \'const S3\' without a user-provided default constructor","clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p2.cpp:134:13: error: default initialization of an object of const type \'const B\' without a user-provided default constructor"}
		}
	},
	["err_default_member_initializer_cycle"]={
		[i]={{nil,w,"err_default_member_initializer_cycle"}},
		[b]={{nil,w,"default member initializer for %0 uses itself"}},
		[c]={{nil,w,"default member initializer for A uses itself"}},
		[e]=d,
		[f]="default member initializer for (.*?) uses itself",
		[g]=a,
		[h]={{nil,w,m}},
		[j]={"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"},
		[k]={{"clang/lib/Sema/SemaTemplateInstantiate.cpp",3530,"/// Instantiate the definition of a field from the given pattern.\n///\n/// \\param PointOfInstantiation The point of instantiation within the\n///        source code.\n/// \\param Instantiation is the declaration whose definition is being\n///        instantiated. This will be a class of a class temploid\n///        specialization, or a local enumeration within a function temploid\n///        specialization.\n/// \\param Pattern The templated declaration from which the instantiation\n///        occurs.\n/// \\param TemplateArgs The template arguments to be substituted into\n///        the pattern.\n///\n/// \\return \\c true if an error occurred, \\c false otherwise.\nbool Sema::InstantiateInClassInitializer(SourceLocation PointOfInstantiation, FieldDecl *Instantiation, FieldDecl *Pattern, const MultiLevelTemplateArgumentList &TemplateArgs) {\n  // ...\n  if (Inst.isAlreadyInstantiating()) {\n    // ...\n    Diag(PointOfInstantiation, diag::err_default_member_initializer_cycle) << Instantiation;"}},
		[l]={
			["clang/test/SemaTemplate/instantiate-self.cpp"]={"clang/test/SemaTemplate/instantiate-self.cpp:89:15: error: default member initializer for \'n\' uses itself"}
		}
	},
	["err_default_member_initializer_not_yet_parsed"]={
		[i]={{nil,w,"err_default_member_initializer_not_yet_parsed"}},
		[b]={{nil,w,"default member initializer for %1 needed within definition of enclosing class %0 outside of member functions"}},
		[c]={{nil,w,"default member initializer for B needed within definition of enclosing class A outside of member functions"}},
		[e]=d,
		[f]="default member initializer for (.*?) needed within definition of enclosing class (.*?) outside of member functions",
		[g]=a,
		[h]={{nil,w,m}},
		[j]={"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"},
		[k]={{Lb,6330,"ExprResult Sema::BuildCXXDefaultInitExpr(SourceLocation Loc, FieldDecl *Field) {\n  // ...\n  Diag(Loc, diag::err_default_member_initializer_not_yet_parsed) << OutermostClass << Field;"},{"clang/lib/Sema/SemaTemplateInstantiate.cpp",3517,"/// Instantiate the definition of a field from the given pattern.\n///\n/// \\param PointOfInstantiation The point of instantiation within the\n///        source code.\n/// \\param Instantiation is the declaration whose definition is being\n///        instantiated. This will be a class of a class temploid\n///        specialization, or a local enumeration within a function temploid\n///        specialization.\n/// \\param Pattern The templated declaration from which the instantiation\n///        occurs.\n/// \\param TemplateArgs The template arguments to be substituted into\n///        the pattern.\n///\n/// \\return \\c true if an error occurred, \\c false otherwise.\nbool Sema::InstantiateInClassInitializer(SourceLocation PointOfInstantiation, FieldDecl *Instantiation, FieldDecl *Pattern, const MultiLevelTemplateArgumentList &TemplateArgs) {\n  // ...\n  if (!OldInit) {\n    // ...\n    Diag(PointOfInstantiation, diag::err_default_member_initializer_not_yet_parsed) << OutermostClass << Pattern;"}},
		[l]={
			["clang/test/SemaCXX/cxx1y-initializer-aggregates.cpp"]={"clang/test/SemaCXX/cxx1y-initializer-aggregates.cpp:69:30: error: default member initializer for \'l\' needed within definition of enclosing class \'FibTree\' outside of member functions","clang/test/SemaCXX/cxx1y-initializer-aggregates.cpp:71:30: error: default member initializer for \'r\' needed within definition of enclosing class \'FibTree\' outside of member functions"}
		}
	},
	["err_default_not_in_switch"]={
		[i]="err_default_not_in_switch",
		[b]="\'default\' statement not in switch statement",
		[c]="\'default\' statement not in switch statement",
		[e]=d,
		[f]="\'default\' statement not in switch statement",
		[g]=a,
		[h]=m,
		[j]={Vb,1237025389,Yb,Wb},
		[k]={{"clang/lib/Sema/SemaStmt.cpp",545,"StmtResult Sema::ActOnDefaultStmt(SourceLocation DefaultLoc, SourceLocation ColonLoc, Stmt *SubStmt, Scope *CurScope) {\n  if (getCurFunction()->SwitchStack.empty()) {\n    Diag(DefaultLoc, diag::err_default_not_in_switch);"}},
		[l]={
			["clang/test/Sema/default.c"]={"clang/test/Sema/default.c:5:5: error: \'default\' statement not in switch statement"}
		}
	},
	["err_default_special_members"]={
		[i]="err_default_special_members",
		[b]={{nil,v,"only special member functions %select{|and comparison operators }0may be defaulted"},{z,nil,"only special member functions may be defaulted"}},
		[c]={{nil,v,{"only special member functions ",{a,"and comparison operators "},"may be defaulted"}},{z,nil,"only special member functions may be defaulted"}},
		[e]=d,
		[f]="only special member functions (?:|and comparison operators )may be defaulted",
		[g]=a,
		[h]=Q,
		[j]={"1adeff92bc65",1304566588,"Implement some framework for defaulted constructors.","Implement some framework for defaulted constructors.\n\nThere\'s some unused stuff for now.\n\nllvm-svn: 130912"},
		[k]={{"clang/lib/Parse/ParseDecl.cpp",2514,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  // ...\n  // Parse declarator \'=\' initializer.\n  case InitKind::Equal: {\n    // ...\n    if (Tok.is(tok::kw_delete)) {\n    // ...\n    } else if (Tok.is(tok::kw_default)) {\n      if (D.isFunctionDeclarator())\n      // ...\n      else\n        Diag(ConsumeToken(), diag::err_default_special_members) << getLangOpts().CPlusPlus20;"},{jb,3257,"/// ParseCXXMemberInitializer - Parse the brace-or-equal-initializer.\n/// Also detect and reject any attempted defaulted/deleted function definition.\n/// The location of the \'=\', if any, will be placed in EqualLoc.\n///\n/// This does not check for a pure-specifier; that\'s handled elsewhere.\n///\n///   brace-or-equal-initializer:\n///     \'=\' initializer-expression\n///     braced-init-list\n///\n///   initializer-clause:\n///     assignment-expression\n///     braced-init-list\n///\n///   defaulted/deleted function-definition:\n///     \'=\' \'default\'\n///     \'=\' \'delete\'\n///\n/// Prior to C++0x, the assignment-expression in an initializer-clause must\n/// be a constant-expression.\nExprResult Parser::ParseCXXMemberInitializer(Decl *D, bool IsFunction, SourceLocation &EqualLoc) {\n  // ...\n  if (TryConsumeToken(tok::equal, EqualLoc)) {\n    if (Tok.is(tok::kw_delete)) {\n    // ...\n    } else if (Tok.is(tok::kw_default)) {\n      if (IsFunction)\n      // ...\n      else\n        Diag(ConsumeToken(), diag::err_default_special_members) << getLangOpts().CPlusPlus20;"},{r,17859,"void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {\n  // ...\n  if (!FD) {\n    // ...\n    Diag(DefaultLoc, diag::err_default_special_members) << getLangOpts().CPlusPlus20;"},{r,17873,"void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {\n  // ...\n  if (!DefKind &&\n    // ...\n    Diag(DefaultLoc, diag::err_default_special_members) << getLangOpts().CPlusPlus20;"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-defaulted-functions.cpp"]={"clang/test/SemaCXX/cxx0x-defaulted-functions.cpp:3:13: error: only special member functions may be defaulted","clang/test/SemaCXX/cxx0x-defaulted-functions.cpp:5:15: error: only special member functions may be defaulted","clang/test/SemaCXX/cxx0x-defaulted-functions.cpp:203:35: error: only special member functions may be defaulted","clang/test/SemaCXX/cxx0x-defaulted-functions.cpp:228:3: error: only special member functions may be defaulted"}
		}
	},
	["err_default_template_template_parameter_not_template"]={
		[i]="err_default_template_template_parameter_not_template",
		[b]="default template argument for a template template parameter must be a class template",
		[c]="default template argument for a template template parameter must be a class template",
		[e]=d,
		[f]="default template argument for a template template parameter must be a class template",
		[g]=a,
		[h]=Q,
		[j]={"9167f8bbd534",1257901240,"Introduce a new representation for template template","Introduce a new representation for template template\nparameters. Rather than storing them as either declarations (for the\nnon-dependent case) or expressions (for the dependent case), we now\n(always) store them as TemplateNames. \n\nThe primary change here is to add a new kind of TemplateArgument,\nwhich stores a TemplateName. However, making that change ripples to\nevery switch on a TemplateArgument\'s kind, also affecting\nTemplateArgumentLocInfo/TemplateArgumentLoc, default template\narguments for template template parameters, type-checking of template\ntemplate arguments, etc.\n\nThis change is light on testing. It should fix several pre-existing\nproblems with template template parameters, such as:\n  - the inability to use dependent template names as template template\n  arguments\n  - template template parameter default arguments cannot be\n  instantiation\n\nHowever, there are enough pieces missing that more implementation is\nrequired before we can adequately test template template parameters. \n\nllvm-svn: 86777"},
		[k]={{"clang/lib/Parse/ParseTemplate.cpp",995,"/// ParseTemplateTemplateParameter - Handle the parsing of template\n/// template parameters.\n///\n///       type-parameter:    [C++ temp.param]\n///         template-head type-parameter-key ...[opt] identifier[opt]\n///         template-head type-parameter-key identifier[opt] = id-expression\n///       type-parameter-key:\n///         \'class\'\n///         \'typename\'       [C++1z]\n///       template-head:     [C++2a]\n///         \'template\' \'<\' template-parameter-list \'>\'\n///             requires-clause[opt]\nNamedDecl *Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {\n  // ...\n  if (TryConsumeToken(tok::equal, EqualLoc)) {\n    // ...\n    if (DefaultArg.isInvalid()) {\n      Diag(Tok.getLocation(), diag::err_default_template_template_parameter_not_template);"}},
		[l]={
			["clang/test/SemaTemplate/default-arguments.cpp"]={"clang/test/SemaTemplate/default-arguments.cpp:127:36: error: default template argument for a template template parameter must be a class template"}
		}
	},
	["err_defaulted_comparison_cannot_deduce_undeduced_auto"]={
		[i]={{nil,v,"err_defaulted_comparison_cannot_deduce_undeduced_auto"}},
		[b]={{nil,v,"return type of defaulted \'operator<=>\' cannot be deduced because three-way comparison for %select{|member|base class}0 %1 has a deduced return type and is not yet defined"}},
		[c]={{nil,v,{"return type of defaulted \'operator<=>\' cannot be deduced because three-way comparison for ",{a,"member","base class"}," B has a deduced return type and is not yet defined"}}},
		[e]=d,
		[f]="return type of defaulted \'operator\\<\\=\\>\' cannot be deduced because three\\-way comparison for (?:|member|base class) (.*?) has a deduced return type and is not yet defined",
		[g]=a,
		[h]={{nil,v,m}},
		[j]={"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"},
		[k]={{r,8146,"/// A visitor over the notional body of a defaulted comparison that determines\n/// whether that body would be deleted or constexpr.\nclass DefaultedComparisonAnalyzer : public DefaultedComparisonVisitor<DefaultedComparisonAnalyzer, DefaultedComparisonInfo, DefaultedComparisonInfo, DefaultedComparisonSubobject> {\n  // ...\n  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    // ...\n    case OR_Success: {\n      // ...\n      if (FunctionDecl *BestFD = Best->Function) {\n        // ...\n        if (NeedsDeducing) {\n          // If any callee has an undeduced return type, deduce it now.\n          // FIXME: It\'s not clear how a failure here should be handled. For\n          // now, we produce an eager diagnostic, because that is forward\n          // compatible with most (all?) other reasonable options.\n          if (BestFD->getReturnType()->isUndeducedType() && S.DeduceReturnType(BestFD, FD->getLocation(),\n            // ...\n            // Don\'t produce a duplicate error when asked to explain why the\n            // comparison is deleted: we diagnosed that when initially checking\n            // the defaulted operator.\n            if (Diagnose == NoDiagnostics) {\n              S.Diag(FD->getLocation(), diag::err_defaulted_comparison_cannot_deduce_undeduced_auto) << Subobj.Kind << Subobj.Decl;"}},
		[l]={
			["clang/test/CXX/class/class.compare/class.spaceship/p2.cpp"]={"clang/test/CXX/class/class.compare/class.spaceship/p2.cpp:122:17: error: return type of defaulted \'operator<=>\' cannot be deduced because three-way comparison for base class \'c\' has a deduced return type and is not yet defined"}
		}
	},
	["err_defaulted_comparison_deduced_return_type_not_auto"]={
		[i]={{nil,v,"err_defaulted_comparison_deduced_return_type_not_auto"}},
		[b]={{nil,v,"deduced return type for defaulted %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator must be \'auto\', not %1"}},
		[c]={{nil,v,{"deduced return type for defaulted ",{I,ob,I,qb}," comparison operator must be \'auto\', not B"}}},
		[e]=d,
		[f]="deduced return type for defaulted (?:equality|three\\-way|equality|relational) comparison operator must be \'auto\', not (.*?)",
		[g]=a,
		[h]={{nil,v,m}},
		[j]={"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"},
		[k]={{r,8864,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  // C++2a [class.spaceship]p2 [P2002R0]:\n  //   Let R be the declared return type [...]. If R is auto, [...]. Otherwise,\n  //   R shall not contain a placeholder type.\n  if (QualType RT = FD->getDeclaredReturnType(); DCK == DefaultedComparisonKind::ThreeWay && RT->getContainedDeducedType() && (!Context.hasSameType(RT, Context.getAutoDeductType()) || RT->getContainedAutoType()->isConstrained())) {\n    Diag(FD->getLocation(), diag::err_defaulted_comparison_deduced_return_type_not_auto) << (int)DCK << FD->getDeclaredReturnType() << Context.AutoDeductTy << FD->getReturnTypeSourceRange();"}},
		[l]={
			["clang/test/CXX/class/class.compare/class.spaceship/p2.cpp"]={"clang/test/CXX/class/class.compare/class.spaceship/p2.cpp:139:18: error: deduced return type for defaulted three-way comparison operator must be \'auto\', not \'auto &\'","clang/test/CXX/class/class.compare/class.spaceship/p2.cpp:144:23: error: deduced return type for defaulted three-way comparison operator must be \'auto\', not \'const auto\'","clang/test/CXX/class/class.compare/class.spaceship/p2.cpp:156:24: error: deduced return type for defaulted three-way comparison operator must be \'auto\', not \'CmpCat auto\'"}
		}
	},
	["err_defaulted_comparison_non_const"]={
		[i]={{nil,v,"err_defaulted_comparison_non_const"}},
		[b]={{nil,v,"defaulted member %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator must be const-qualified"}},
		[c]={{nil,v,{"defaulted member ",{I,ob,I,qb}," comparison operator must be const-qualified"}}},
		[e]=d,
		[f]="defaulted member (?:equality|three\\-way|equality|relational) comparison operator must be const\\-qualified",
		[g]=a,
		[h]={{nil,v,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"},
		[k]={{r,8729,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (IsMethod) {\n    // ...\n    if (!MD->isConst()) {\n      // ...\n      // Don\'t diagnose an implicit \'operator==\'; we will have diagnosed the\n      // corresponding defaulted \'operator<=>\' already.\n      if (!MD->isImplicit()) {\n        Diag(MD->getLocation(), diag::err_defaulted_comparison_non_const) << (int)DCK << FixItHint::CreateInsertion(InsertLoc, \" const\");"}},
		[l]={
			[Kb]={"clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:20:8: error: defaulted member three-way comparison operator must be const-qualified"}
		}
	},
	["err_defaulted_comparison_not_friend"]={
		[i]={{nil,o,"err_defaulted_comparison_not_friend"}},
		[b]={{nil,o,"%select{<ERROR>|equality|three-way|equality|relational}0 comparison operator is not a friend of %select{|incomplete class }1%2"}},
		[c]={{nil,o,{{I,ob,I,qb}," comparison operator is not a friend of ",{a,"incomplete class "},"C"}}},
		[e]=d,
		[f]="(?:equality|three\\-way|equality|relational) comparison operator is not a friend of (?:|incomplete class )(.*?)",
		[g]=a,
		[h]={{nil,o,m}},
		[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"},
		[k]={{r,8829,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (IsMethod) {\n  } else if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) {\n  // ...\n  } else {\n    // ...\n    if (RequireCompleteType(FD->getLocation(), Context.getRecordType(RD), diag::err_defaulted_comparison_not_friend, int(DCK), int(1)))"},{r,8837,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (IsMethod) {\n  } else if (isa<CXXRecordDecl>(FD->getLexicalDeclContext())) {\n  // ...\n  } else {\n    // ...\n    if (llvm::none_of(RD->friends(), [&](const FriendDecl *F) { return FD->getCanonicalDecl() == F->getFriendDecl()->getCanonicalDecl(); })) {\n      Diag(FD->getLocation(), diag::err_defaulted_comparison_not_friend) << int(DCK) << int(0) << RD;"}},
		[l]={
			[Kb]={"clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:185:6: error: equality comparison operator is not a friend of \'S3\'","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:188:6: error: equality comparison operator is not a friend of incomplete class \'p2085::S4\'","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:191:6: error: equality comparison operator is not a friend of incomplete class \'p2085::S5\'"}
		}
	},
	["err_defaulted_comparison_num_args"]={
		[i]={{nil,o,"err_defaulted_comparison_num_args"}},
		[b]={{nil,o,"%select{non-member|member}0 %select{<ERROR>|equality|three-way|equality|relational}1 comparison operator comparison operator must have %select{2|1}0 parameters"}},
		[c]={{nil,o,{{"non-member","member"}," ",{I,ob,I,qb}," comparison operator comparison operator must have ",{"2","1"}," parameters"}}},
		[e]=d,
		[f]="(?:non\\-member|member) (?:equality|three\\-way|equality|relational) comparison operator comparison operator must have (?:2|1) parameters",
		[g]=a,
		[h]={{nil,o,m}},
		[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"},
		[k]={{r,8756,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  if (FD->getNumParams() != (IsMethod ? 1 : 2)) {\n    // ...\n    Diag(FD->getLocation(), diag::err_defaulted_comparison_num_args) << int(IsMethod) << int(DCK);"}}
	},
	["err_defaulted_comparison_param"]={
		[i]={{nil,v,"err_defaulted_comparison_param"}},
		[b]={{nil,v,"invalid parameter type for defaulted %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator; found %1, expected %2%select{| or %4}3"}},
		[c]={{nil,v,{"invalid parameter type for defaulted ",{I,ob,I,qb}," comparison operator; found B, expected C",{a," or E"}}}},
		[e]=d,
		[f]="invalid parameter type for defaulted (?:equality|three\\-way|equality|relational) comparison operator; found (.*?), expected (.*?)(?:| or (.*?))",
		[g]=a,
		[h]={{nil,v,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"},
		[k]={{r,8800,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  for (const ParmVarDecl *Param : FD->parameters()) {\n    // ...\n    if (!KnownParm) {\n      // ...\n      if (Ok) {\n      // ...\n      } else {\n        // Don\'t diagnose an implicit \'operator==\'; we will have diagnosed the\n        // corresponding defaulted \'operator<=>\' already.\n        if (!FD->isImplicit()) {\n          if (RD) {\n            // ...\n            Diag(FD->getLocation(), diag::err_defaulted_comparison_param) << int(DCK) << ParmTy << RefTy << int(!IsMethod) << PlainTy << Param->getSourceRange();"}},
		[l]={
			[Kb]={"clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:11:15: error: invalid parameter type for defaulted equality comparison operator; found \'const B &\', expected \'const A &\' or \'A\'","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:13:15: error: invalid parameter type for defaulted relational comparison operator; found \'const B &\', expected \'const A &\' or \'A\'","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:21:8: error: invalid parameter type for defaulted relational comparison operator; found \'const B &\', expected \'const A &\'","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:38:8: error: invalid parameter type for defaulted equality comparison operator; found \'D<C>\', expected \'const D<C> &\'","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:43:8: error: invalid parameter type for defaulted equality comparison operator; found \'U\' (aka \'typename T::type\'), expected \'const Dependent<T> &\'","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:44:15: error: invalid parameter type for defaulted equality comparison operator; found \'U\' (aka \'Dependent<Bad> &\'), expected \'const Dependent<Bad> &\' or \'Dependent<Bad>\'","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:132:8: error: invalid parameter type for defaulted equality comparison operator; found \'const float &\', expected \'const evil1::Bad<float> &\'","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:214:8: error: invalid parameter type for defaulted equality comparison operator; found \'const int &\', expected \'const p2085_2::S6<int> &\'","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:214:8: error: invalid parameter type for defaulted equality comparison operator; found \'const float &\', expected \'const p2085_2::S6<float> &\'"}
		}
	},
	["err_defaulted_comparison_param_mismatch"]={
		[i]={{nil,v,"err_defaulted_comparison_param_mismatch"}},
		[b]={{nil,v,"parameters for defaulted %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator must have the same type%diff{ (found $ vs $)|}1,2"}},
		[c]={{nil,v,{"parameters for defaulted ",{I,ob,I,qb}," comparison operator must have the same type",{" (found B vs C)",a}}}},
		[e]=d,
		[f]="parameters for defaulted (?:equality|three\\-way|equality|relational) comparison operator must have the same type(?: \\(found (.*?) vs (.*?)\\)|)",
		[g]=a,
		[h]={{nil,v,m}},
		[j]={"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"},
		[k]={{r,8813,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  for (const ParmVarDecl *Param : FD->parameters()) {\n    // ...\n    if (!KnownParm) {\n    // ...\n    } else if (!Context.hasSameType(KnownParm->getType(), ParmTy)) {\n      Diag(FD->getLocation(), diag::err_defaulted_comparison_param_mismatch) << int(DCK) << KnownParm->getType() << KnownParm->getSourceRange() << ParmTy << Param->getSourceRange();"}},
		[l]={
			[Kb]={"clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:10:15: error: parameters for defaulted equality comparison operator must have the same type (found \'const A &\' vs \'const B &\')","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:23:15: error: parameters for defaulted relational comparison operator must have the same type (found \'A\' vs \'const A &\')","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:33:15: error: parameters for defaulted equality comparison operator must have the same type (found \'const D<C> &\' vs \'D<C>\')","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:34:15: error: parameters for defaulted relational comparison operator must have the same type (found \'D<C>\' vs \'const D<C> &\')"}
		}
	},
	["err_defaulted_comparison_param_unknown"]={
		[i]={{nil,o,"err_defaulted_comparison_param_unknown"}},
		[b]={{nil,o,"invalid parameter type for non-member defaulted %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator; found %1, expected class or reference to a constant class"}},
		[c]={{nil,o,{"invalid parameter type for non-member defaulted ",{I,ob,I,qb}," comparison operator; found B, expected class or reference to a constant class"}}},
		[e]=d,
		[f]="invalid parameter type for non\\-member defaulted (?:equality|three\\-way|equality|relational) comparison operator; found (.*?), expected class or reference to a constant class",
		[g]=a,
		[h]={{nil,o,m}},
		[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"},
		[k]={{r,8806,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  for (const ParmVarDecl *Param : FD->parameters()) {\n    // ...\n    if (!KnownParm) {\n      // ...\n      if (Ok) {\n      // ...\n      } else {\n        // Don\'t diagnose an implicit \'operator==\'; we will have diagnosed the\n        // corresponding defaulted \'operator<=>\' already.\n        if (!FD->isImplicit()) {\n          if (RD) {\n          // ...\n          } else {\n            // ...\n            Diag(FD->getLocation(), diag::err_defaulted_comparison_param_unknown) << int(DCK) << ParmTy << Param->getSourceRange();"}},
		[l]={
			[Kb]={"clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:205:6: error: invalid parameter type for non-member defaulted equality comparison operator; found \'e\', expected class or reference to a constant class"}
		}
	},
	["err_defaulted_comparison_return_type_not_bool"]={
		[i]={{nil,v,"err_defaulted_comparison_return_type_not_bool"}},
		[b]={{nil,v,"return type for defaulted %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator must be \'bool\', not %1"}},
		[c]={{nil,v,{"return type for defaulted ",{I,ob,I,qb}," comparison operator must be \'bool\', not B"}}},
		[e]=d,
		[f]="return type for defaulted (?:equality|three\\-way|equality|relational) comparison operator must be \'bool\', not (.*?)",
		[g]=a,
		[h]={{nil,v,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"},
		[k]={{r,8850,"bool Sema::CheckExplicitlyDefaultedComparison(Scope *S, FunctionDecl *FD, DefaultedComparisonKind DCK) {\n  // ...\n  // C++2a [class.eq]p1, [class.rel]p1:\n  //   A [defaulted comparison other than <=>] shall have a declared return\n  //   type bool.\n  if (DCK != DefaultedComparisonKind::ThreeWay && !FD->getDeclaredReturnType()->isDependentType() && !Context.hasSameType(FD->getDeclaredReturnType(), Context.BoolTy)) {\n    Diag(FD->getLocation(), diag::err_defaulted_comparison_return_type_not_bool) << (int)DCK << FD->getDeclaredReturnType() << Context.BoolTy << FD->getReturnTypeSourceRange();"}},
		[l]={
			["clang/test/CXX/class/class.compare/class.eq/p1.cpp"]={"clang/test/CXX/class/class.compare/class.eq/p1.cpp:14:9: error: return type for defaulted equality comparison operator must be \'bool\', not \'bool &\'","clang/test/CXX/class/class.compare/class.eq/p1.cpp:16:15: error: return type for defaulted equality comparison operator must be \'bool\', not \'Bool\'","clang/test/CXX/class/class.compare/class.eq/p1.cpp:15:14: error: return type for defaulted equality comparison operator must be \'bool\', not \'const bool\'","clang/test/CXX/class/class.compare/class.eq/p1.cpp:17:14: error: return type for defaulted equality comparison operator must be \'bool\', not \'int\'","clang/test/CXX/class/class.compare/class.eq/p1.cpp:21:5: error: return type for defaulted equality comparison operator must be \'bool\', not \'int\'","clang/test/CXX/class/class.compare/class.eq/p1.cpp:23:12: error: return type for defaulted equality comparison operator must be \'bool\', not \'int\'","clang/test/CXX/class/class.compare/class.eq/p1.cpp:22:5: error: return type for defaulted equality comparison operator must be \'bool\', not \'int\'","clang/test/CXX/class/class.compare/class.eq/p1.cpp:24:12: error: return type for defaulted equality comparison operator must be \'bool\', not \'int\'"}
		}
	},
	["err_defaulted_comparison_template"]={
		[i]={{nil,v,"err_defaulted_comparison_template"}},
		[b]={{nil,v,"comparison operator template cannot be defaulted"}},
		[c]={{nil,v,"comparison operator template cannot be defaulted"}},
		[e]=d,
		[f]="comparison operator template cannot be defaulted",
		[g]=a,
		[h]={{nil,v,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"},
		[k]={{r,17854,"void Sema::SetDeclDefaulted(Decl *Dcl, SourceLocation DefaultLoc) {\n  // ...\n  if (!FD) {\n    if (auto *FTD = dyn_cast<FunctionTemplateDecl>(Dcl)) {\n      if (getDefaultedFunctionKind(FTD->getTemplatedDecl()).isComparison()) {\n        Diag(DefaultLoc, diag::err_defaulted_comparison_template);"}},
		[l]={
			[Kb]={"clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:6:40: error: comparison operator template cannot be defaulted","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:26:50: error: comparison operator template cannot be defaulted","clang/test/CXX/class/class.compare/class.compare.default/p1.cpp:28:39: error: comparison operator template cannot be defaulted"}
		}
	},
	["err_defaulted_copy_assign_not_ref"]={
		[i]="err_defaulted_copy_assign_not_ref",
		[b]="the parameter for an explicitly-defaulted copy assignment operator must be an lvalue reference type",
		[c]="the parameter for an explicitly-defaulted copy assignment operator must be an lvalue reference type",
		[e]=d,
		[f]="the parameter for an explicitly\\-defaulted copy assignment operator must be an lvalue reference type",
		[g]=a,
		[h]=m,
		[j]={"604aeb384998",1305665083,"Fix some minor bugs and add a lot more test cases for defaulted","Fix some minor bugs and add a lot more test cases for defaulted\nconstructors, including two more FIXMEs (one of which I don\'t actually\nunderstand).\n\nllvm-svn: 131487"},
		[k]={{r,7706,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (ExpectedParams && ArgType->isReferenceType()) {\n  // ...\n  } else if (ExpectedParams) {\n    // ...\n    Diag(MD->getLocation(), diag::err_defaulted_copy_assign_not_ref);"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-cursory-default-delete.cpp"]={"clang/test/SemaCXX/cxx0x-cursory-default-delete.cpp:133:15: error: the parameter for an explicitly-defaulted copy assignment operator must be an lvalue reference type"}
		}
	},
	["err_defaulted_special_member_copy_const_param"]={
		[i]="err_defaulted_special_member_copy_const_param",
		[b]="the parameter for this explicitly-defaulted copy %select{constructor|assignment operator}0 is const, but a member or base requires it to be non-const",
		[c]={{nil,nil,{"the parameter for this explicitly-defaulted copy ",{"constructor","assignment operator"}," is const, but a member or base requires it to be non-const"}}},
		[e]=d,
		[f]="the parameter for this explicitly\\-defaulted copy (?:constructor|assignment operator) is const, but a member or base requires it to be non\\-const",
		[g]=a,
		[h]=m,
		[j]={zb,1337056791,vb,Jb},
		[k]={{r,7691,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (ExpectedParams && ArgType->isReferenceType()) {\n    // ...\n    if (HasConstParam && !CanHaveConstParam) {\n      if (DeleteOnTypeMismatch)\n      // ...\n      else if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment) {\n        Diag(MD->getLocation(), diag::err_defaulted_special_member_copy_const_param) << (CSM == CXXCopyAssignment);"}},
		[l]={
			[Rb]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp:59:5: error: the parameter for this explicitly-defaulted copy constructor is const, but a member or base requires it to be non-const","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp:60:15: error: the parameter for this explicitly-defaulted copy assignment operator is const, but a member or base requires it to be non-const"}
		}
	},
	["err_defaulted_special_member_move_const_param"]={
		[i]="err_defaulted_special_member_move_const_param",
		[b]="the parameter for an explicitly-defaulted move %select{constructor|assignment operator}0 may not be const",
		[c]={{nil,nil,{"the parameter for an explicitly-defaulted move ",{"constructor","assignment operator"}," may not be const"}}},
		[e]=d,
		[f]="the parameter for an explicitly\\-defaulted move (?:constructor|assignment operator) may not be const",
		[g]=a,
		[h]=m,
		[j]={zb,1337056791,vb,Jb},
		[k]={{r,7697,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (ExpectedParams && ArgType->isReferenceType()) {\n    // ...\n    if (HasConstParam && !CanHaveConstParam) {\n      if (DeleteOnTypeMismatch)\n      // ...\n      else if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment) {\n      // ...\n      } else {\n        Diag(MD->getLocation(), diag::err_defaulted_special_member_move_const_param) << (CSM == CXXMoveAssignment);"}},
		[l]={
			[Rb]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp:7:5: error: the parameter for an explicitly-defaulted move constructor may not be const","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp:8:12: error: the parameter for an explicitly-defaulted move assignment operator may not be const"}
		}
	},
	["err_defaulted_special_member_params"]={
		[i]="err_defaulted_special_member_params",
		[b]="an explicitly-defaulted %select{|copy |move }0constructor cannot have default arguments",
		[c]={{nil,nil,{"an explicitly-defaulted ",{a,"copy ","move "},"constructor cannot have default arguments"}}},
		[e]=d,
		[f]="an explicitly\\-defaulted (?:|copy |move )constructor cannot have default arguments",
		[g]=a,
		[h]=m,
		[j]={zb,1337056791,vb,Jb},
		[k]={{r,7619,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (MD->getNumParams() != ExpectedParams) {\n    // ...\n    Diag(MD->getLocation(), diag::err_defaulted_special_member_params) << CSM << MD->getSourceRange();"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p1.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p1.cpp:8:3: error: an explicitly-defaulted constructor cannot have default arguments","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p1.cpp:9:3: error: an explicitly-defaulted constructor cannot have default arguments","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p1.cpp:10:3: error: an explicitly-defaulted copy constructor cannot have default arguments","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p1.cpp:11:3: error: an explicitly-defaulted constructor cannot have default arguments","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p1.cpp:12:3: error: an explicitly-defaulted move constructor cannot have default arguments"}
		}
	},
	["err_defaulted_special_member_quals"]={
		[i]="err_defaulted_special_member_quals",
		[b]="an explicitly-defaulted %select{copy|move}0 assignment operator may not have \'const\'%select{, \'constexpr\'|}1 or \'volatile\' qualifiers",
		[c]={{nil,nil,{"an explicitly-defaulted ",{"copy","move"}," assignment operator may not have \'const\'",{", \'constexpr\'",a}," or \'volatile\' qualifiers"}}},
		[e]=d,
		[f]="an explicitly\\-defaulted (?:copy|move) assignment operator may not have \'const\'(?:, \'constexpr\'|) or \'volatile\' qualifiers",
		[g]=a,
		[h]=m,
		[j]={zb,1337056791,vb,Jb},
		[k]={{r,7661,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (CSM == CXXCopyAssignment || CSM == CXXMoveAssignment) {\n    // ...\n    // A defaulted special member cannot have cv-qualifiers.\n    if (Type->getMethodQuals().hasConst() || Type->getMethodQuals().hasVolatile()) {\n      if (DeleteOnTypeMismatch)\n      // ...\n      else {\n        Diag(MD->getLocation(), diag::err_defaulted_special_member_quals) << (CSM == CXXMoveAssignment) << getLangOpts().CPlusPlus14;"}},
		[l]={
			[Rb]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp:25:22: error: an explicitly-defaulted move assignment operator may not have \'const\', \'constexpr\' or \'volatile\' qualifiers","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp:73:22: error: an explicitly-defaulted copy assignment operator may not have \'const\', \'constexpr\' or \'volatile\' qualifiers"}
		}
	},
	["err_defaulted_special_member_return_type"]={
		[i]="err_defaulted_special_member_return_type",
		[b]="explicitly-defaulted %select{copy|move}0 assignment operator must return %1",
		[c]={{nil,nil,{"explicitly-defaulted ",{"copy","move"}," assignment operator must return B"}}},
		[e]=d,
		[f]="explicitly\\-defaulted (?:copy|move) assignment operator must return (.*?)",
		[g]=a,
		[h]=m,
		[j]={zb,1337056791,vb,Jb},
		[k]={{r,7651,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (CSM == CXXCopyAssignment || CSM == CXXMoveAssignment) {\n    // ...\n    if (!Context.hasSameType(ReturnType, ExpectedReturnType)) {\n      Diag(MD->getLocation(), diag::err_defaulted_special_member_return_type) << (CSM == CXXMoveAssignment) << ExpectedReturnType;"}},
		[l]={
			[Rb]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp:17:22: error: explicitly-defaulted move assignment operator must return \'AssignmentRet1 &\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp:21:27: error: explicitly-defaulted move assignment operator must return \'AssignmentRet2 &\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp:65:22: error: explicitly-defaulted copy assignment operator must return \'AssignmentRet1 &\'","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp:69:27: error: explicitly-defaulted copy assignment operator must return \'AssignmentRet2 &\'"}
		}
	},
	["err_defaulted_special_member_variadic"]={
		[i]="err_defaulted_special_member_variadic",
		[b]="an explicitly-defaulted %select{|copy |move }0constructor cannot be variadic",
		[c]={{nil,nil,{"an explicitly-defaulted ",{a,"copy ","move "},"constructor cannot be variadic"}}},
		[e]=d,
		[f]="an explicitly\\-defaulted (?:|copy |move )constructor cannot be variadic",
		[g]=a,
		[h]=m,
		[j]={"c2f865e8e5df",1354847161,"Add file missed from r169574!","Add file missed from r169574!\n\nllvm-svn: 169576"},
		[k]={{r,7626,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (MD->getNumParams() != ExpectedParams) {\n  // ...\n  } else if (MD->isVariadic()) {\n    if (DeleteOnTypeMismatch)\n    // ...\n    else {\n      Diag(MD->getLocation(), diag::err_defaulted_special_member_variadic) << CSM << MD->getSourceRange();"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p1.cpp"]={"clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p1.cpp:63:5: error: an explicitly-defaulted constructor cannot be variadic","clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p1.cpp:64:5: error: an explicitly-defaulted copy constructor cannot be variadic"}
		}
	},
	["err_defaulted_special_member_volatile_param"]={
		[i]="err_defaulted_special_member_volatile_param",
		[b]={{nil,B,"the parameter for an explicitly-defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 may not be volatile"},{y,nil,"the parameter for an explicitly-defaulted %select{<<ERROR>>|copy constructor|move constructor|copy assignment operator|move assignment operator|<<ERROR>>}0 may not be volatile"}},
		[c]={{nil,B,{"the parameter for an explicitly-defaulted ",{"default constructor","copy constructor","move constructor","copy assignment operator","move assignment operator","destructor"}," may not be volatile"}},{y,nil,{"the parameter for an explicitly-defaulted ",{"copy constructor","move constructor","copy assignment operator","move assignment operator"}," may not be volatile"}}},
		[e]=d,
		[f]="the parameter for an explicitly\\-defaulted (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) may not be volatile",
		[g]=a,
		[h]=m,
		[j]={zb,1337056791,vb,Jb},
		[k]={{r,7681,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  // ...\n  if (ExpectedParams && ArgType->isReferenceType()) {\n    // ...\n    if (ReferentType.isVolatileQualified()) {\n      if (DeleteOnTypeMismatch)\n      // ...\n      else {\n        Diag(MD->getLocation(), diag::err_defaulted_special_member_volatile_param) << CSM;"}},
		[l]={
			[Rb]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp:12:5: error: the parameter for an explicitly-defaulted move constructor may not be volatile","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp:13:15: error: the parameter for an explicitly-defaulted move assignment operator may not be volatile","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp:31:5: error: the parameter for an explicitly-defaulted copy constructor may not be volatile","clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p2.cpp:32:15: error: the parameter for an explicitly-defaulted copy assignment operator may not be volatile"}
		}
	},
	["err_defined_macro_name"]={
		[i]="err_defined_macro_name",
		[b]="\'defined\' cannot be used as a macro name",
		[c]="\'defined\' cannot be used as a macro name",
		[e]=d,
		[f]="\'defined\' cannot be used as a macro name",
		[g]=a,
		[h]=Mb,
		[j]={hb,1236199783,db,cb},
		[k]={{"clang/lib/Lex/PPDirectives.cpp",344,"bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, bool *ShadowFlag) {\n  // ...\n  if ((isDefineUndef != MU_Other) && II->getPPKeywordID() == tok::pp_defined) {\n    // ...\n    return Diag(MacroNameTok, diag::err_defined_macro_name);"}}
	},
	["err_definition_of_explicitly_defaulted_member"]={
		[i]="err_definition_of_explicitly_defaulted_member",
		[b]="definition of explicitly defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function}0",
		[c]={{nil,nil,{"definition of explicitly defaulted ",{"default constructor","copy constructor","move constructor","copy assignment operator","move assignment operator","destructor","function"}}}},
		[e]=d,
		[f]="definition of explicitly defaulted (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function)",
		[g]=a,
		[h]=m,
		[j]={"6d5b96c6b3ef",1304988582,"Further implement defaulting constructors.","Further implement defaulting constructors.\n\nFocus is on default constructors for the time being. Currently the\nexception specification and prototype are processed correctly. Codegen\nmight work but in all likelihood doesn\'t.\n\nNote that due to an error, out-of-line defaulting of member functions is\ncurrently impossible. It will continue to that until I muster up the\ncourage to admit that I secretly pray to epimetheus and that I need to\nrework the way default gets from Parse -> Sema.\n\nllvm-svn: 131115"},
		[k]={{F,4031,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    if (OldMethod && NewMethod) {\n      // ...\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n      // ...\n      } else if (OldMethod->isImplicit()) {\n      // ...\n      } else if (OldMethod->getFirstDecl()->isExplicitlyDefaulted() && !isFriend) {\n        Diag(NewMethod->getLocation(), diag::err_definition_of_explicitly_defaulted_member) << getSpecialMember(OldMethod);"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-defaulted-functions.cpp"]={"clang/test/SemaCXX/cxx0x-defaulted-functions.cpp:146:6: error: definition of explicitly defaulted default constructor","clang/test/SemaCXX/cxx0x-defaulted-functions.cpp:147:6: error: definition of explicitly defaulted copy constructor","clang/test/SemaCXX/cxx0x-defaulted-functions.cpp:148:6: error: definition of explicitly defaulted move constructor","clang/test/SemaCXX/cxx0x-defaulted-functions.cpp:149:9: error: definition of explicitly defaulted copy assignment operator","clang/test/SemaCXX/cxx0x-defaulted-functions.cpp:150:9: error: definition of explicitly defaulted move assignment operator","clang/test/SemaCXX/cxx0x-defaulted-functions.cpp:151:6: error: definition of explicitly defaulted destructor","clang/test/SemaCXX/cxx0x-defaulted-functions.cpp:244:10: error: definition of explicitly defaulted function"}
		}
	},
	["err_definition_of_implicitly_declared_member"]={
		[i]="err_definition_of_implicitly_declared_member",
		[b]="definition of implicitly declared %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function}1",
		[c]={{nil,nil,{"definition of implicitly declared ",{"default constructor","copy constructor","move constructor","copy assignment operator","move assignment operator","destructor","function"}}}},
		[e]=d,
		[f]="definition of implicitly declared (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function)",
		[g]=a,
		[h]=m,
		[j]={"1ed86de0800f",1259966047,"Forgot this.","Forgot this.\n\nllvm-svn: 90606"},
		[k]={{F,4025,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    if (OldMethod && NewMethod) {\n      // ...\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n      // ...\n      } else if (OldMethod->isImplicit()) {\n        if (isFriend) {\n        // ...\n        } else {\n          Diag(NewMethod->getLocation(), diag::err_definition_of_implicitly_declared_member) << New << getSpecialMember(OldMethod);"}},
		[l]={
			["clang/test/SemaCXX/implicit-member-functions.cpp"]={"clang/test/SemaCXX/implicit-member-functions.cpp:4:4: error: definition of implicitly declared default constructor","clang/test/SemaCXX/implicit-member-functions.cpp:7:4: error: definition of implicitly declared copy constructor","clang/test/SemaCXX/implicit-member-functions.cpp:10:7: error: definition of implicitly declared copy assignment operator","clang/test/SemaCXX/implicit-member-functions.cpp:13:4: error: definition of implicitly declared destructor"}
		}
	},
	["err_delegating_ctor"]={
		[i]="err_delegating_ctor",
		[b]="delegating constructors are permitted only in C++11",
		[c]="delegating constructors are permitted only in C++11",
		[e]=d,
		[f]="delegating constructors are permitted only in C\\+\\+11",
		[g]=a,
		[h]=m,
		[j]={"0bf8a492fd75",1318970984,"-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 1.","-Wc++98-compat and -Wc++98-compat-pedantic warnings for Sema, part 1.\n\nllvm-svn: 142419"},
		[k]={{r,4620,"MemInitResult Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init, CXXRecordDecl *ClassDecl) {\n  // ...\n  if (!LangOpts.CPlusPlus11)\n    return Diag(NameLoc, diag::err_delegating_ctor) << TInfo->getTypeLoc().getSourceRange();"}},
		[l]={
			["clang/test/CXX/drs/dr6xx.cpp"]={"clang/test/CXX/drs/dr6xx.cpp:659:14: error: delegating constructors are permitted only in C++11"}
		}
	},
	["err_delegating_initializer_alone"]={
		[i]="err_delegating_initializer_alone",
		[b]="an initializer for a delegating constructor must appear alone",
		[c]="an initializer for a delegating constructor must appear alone",
		[e]=d,
		[f]="an initializer for a delegating constructor must appear alone",
		[g]=a,
		[h]=m,
		[j]={"c5575cced8a7",1298747593,"Implement delegating constructors partially.","Implement delegating constructors partially.\n\nThis successfully performs constructor lookup and verifies that a\ndelegating initializer is the only initializer present.\n\nThis does not perform loop detection in the initialization, but it also\ndoesn\'t codegen delegating constructors at all, so this won\'t cause\nruntime infinite loops yet.\n\nllvm-svn: 126552"},
		[k]={{r,5735,"/// ActOnMemInitializers - Handle the member initializers for a constructor.\nvoid Sema::ActOnMemInitializers(Decl *ConstructorDecl, SourceLocation ColonLoc, ArrayRef<CXXCtorInitializer *> MemInits, bool AnyErrors) {\n  // ...\n  for (unsigned i = 0; i < MemInits.size(); i++) {\n    // ...\n    if (Init->isAnyMemberInitializer()) {\n    // ...\n    } else if (Init->isBaseInitializer()) {\n    // ...\n    } else {\n      // ...\n      // This must be the only initializer\n      if (MemInits.size() != 1) {\n        Diag(Init->getSourceLocation(), diag::err_delegating_initializer_alone) << Init->getSourceRange() << MemInits[i ? 0 : 1]->getSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-delegating-ctors.cpp"]={"clang/test/SemaCXX/cxx0x-delegating-ctors.cpp:38:3: error: an initializer for a delegating constructor must appear alone"}
		}
	},
	["err_delete_explicit_conversion"]={
		[i]="err_delete_explicit_conversion",
		[b]="converting delete expression from type %0 to type %1 invokes an explicit conversion function",
		[c]="converting delete expression from type A to type B invokes an explicit conversion function",
		[e]=d,
		[f]="converting delete expression from type (.*?) to type (.*?) invokes an explicit conversion function",
		[g]=a,
		[h]=m,
		[j]={"ccc11811052d",1369163148,"Refactor places which perform contextual implicit conversions to go through a","Refactor places which perform contextual implicit conversions to go through a\ncommon function. The C++1y contextual implicit conversion rules themselves are\nnot yet implemented, however.\n\nThis also fixes a subtle bug where template instantiation context notes were\ndropped for diagnostics coming from conversions for integral constant\nexpressions -- we were implicitly slicing a SemaDiagnosticBuilder into a\nDiagnosticBuilder when producing these diagnostics, and losing their context\nnotes in the process.\n\nllvm-svn: 182406"},
		[k]={{K,3635,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  // ...\n  if (!Ex.get()->isTypeDependent()) {\n    // ...\n    class DeleteConverter : public ContextualImplicitConverter {\n      // ...\n      SemaDiagnosticBuilder diagnoseExplicitConv(Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) override { return S.Diag(Loc, diag::err_delete_explicit_conversion) << T << ConvTy; }"}},
		[l]={
			["clang/test/SemaCXX/explicit.cpp"]={"clang/test/SemaCXX/explicit.cpp:237:5: error: converting delete expression from type \'NotPtr\' to type \'int *\' invokes an explicit conversion function"}
		}
	},
	["err_delete_incomplete_class_type"]={
		[i]="err_delete_incomplete_class_type",
		[b]="deleting incomplete class type %0; no conversions to pointer type",
		[c]="deleting incomplete class type A; no conversions to pointer type",
		[e]=d,
		[f]="deleting incomplete class type (.*?); no conversions to pointer type",
		[g]=a,
		[h]=m,
		[j]={"f65f490ae987",1280414675,"When deleting a value of class type, make sure that type is complete","When deleting a value of class type, make sure that type is complete\nbefore looking for conversions to pointer type. Fixes <rdar://problem/8248780>.\n\nllvm-svn: 109749"},
		[k]={{K,3629,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  // ...\n  if (!Ex.get()->isTypeDependent()) {\n    // ...\n    class DeleteConverter : public ContextualImplicitConverter {\n      // ...\n      SemaDiagnosticBuilder diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_delete_incomplete_class_type) << T; }"}},
		[l]={
			["clang/test/SemaCXX/new-delete.cpp"]={"clang/test/SemaCXX/new-delete.cpp:507:14: error: deleting incomplete class type \'A\'; no conversions to pointer type"}
		}
	},
	["err_delete_operand"]={
		[i]="err_delete_operand",
		[b]="cannot delete expression of type %0",
		[c]="cannot delete expression of type A",
		[e]=d,
		[f]="cannot delete expression of type (.*?)",
		[g]=a,
		[h]=m,
		[j]={Vb,1237025389,Yb,Wb},
		[k]={{K,3624,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  // ...\n  if (!Ex.get()->isTypeDependent()) {\n    // ...\n    class DeleteConverter : public ContextualImplicitConverter {\n      // ...\n      SemaDiagnosticBuilder diagnoseNoMatch(Sema &S, SourceLocation Loc, QualType T) override { return S.Diag(Loc, diag::err_delete_operand) << T; }"},{K,3690,"/// ActOnCXXDelete - Parsed a C++ \'delete\' expression (C++ 5.3.5), as in:\n/// @code ::delete ptr; @endcode\n/// or\n/// @code delete [] ptr; @endcode\nExprResult Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, bool ArrayForm, Expr *ExE) {\n  // ...\n  if (!Ex.get()->isTypeDependent()) {\n    // ...\n    if (Pointee->isVoidType() && !isSFINAEContext()) {\n    // ...\n    } else if (Pointee->isFunctionType() || Pointee->isVoidType() || Pointee->isSizelessType()) {\n      return ExprError(Diag(StartLoc, diag::err_delete_operand) << Type << Ex.get()->getSourceRange());"}},
		[l]={
			["clang/test/SemaObjCXX/properties.mm"]={"clang/test/SemaObjCXX/properties.mm:103:3: error: cannot delete expression of type \'char\'","clang/test/SemaObjCXX/properties.mm:105:3: error: cannot delete expression of type \'int\'"}
		}
	},
	["err_deleted_decl_not_first"]={
		[i]="err_deleted_decl_not_first",
		[b]="deleted definition must be first declaration",
		[c]="deleted definition must be first declaration",
		[e]=d,
		[f]="deleted definition must be first declaration",
		[g]=a,
		[h]=m,
		[j]={"f769df5ef9d7",1237933677,"Parse deleted function definitions and hook them up to Doug\'s machinery.","Parse deleted function definitions and hook them up to Doug\'s machinery.\n\nllvm-svn: 67653"},
		[k]={{r,17812,"void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {\n  // ...\n  if (const FunctionDecl *Prev = Fn->getPreviousDecl()) {\n    // Don\'t consider the implicit declaration we generate for explicit\n    // specializations. FIXME: Do not generate these implicit declarations.\n    if ((Prev->getTemplateSpecializationKind() != TSK_ExplicitSpecialization || Prev->getPreviousDecl()) && !Prev->isDefined()) {\n      Diag(DelLoc, diag::err_deleted_decl_not_first);"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.delete/p4.cpp"]={"clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.delete/p4.cpp:8:32: error: deleted definition must be first declaration"}
		}
	},
	["err_deleted_function_use"]={
		[i]="err_deleted_function_use",
		[b]="attempt to use a deleted function",
		[c]="attempt to use a deleted function",
		[e]=d,
		[f]="attempt to use a deleted function",
		[g]=a,
		[h]=m,
		[j]={Vb,1237025389,Yb,Wb},
		[k]={{Lb,275,"/// 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    // See if this is a deleted function.\n    if (FD->isDeleted()) {\n      // ...\n      if (Ctor && Ctor->isInheritingConstructor())\n      // ...\n      else\n        Diag(Loc, diag::err_deleted_function_use);"},{K,3282,"bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, DeclarationName Name, FunctionDecl *&Operator, bool Diagnose, bool WantSize, bool WantAligned) {\n  // ...\n  // If we could find an overload, use it.\n  if (Matches.size() == 1) {\n    // ...\n    // FIXME: DiagnoseUseOfDecl?\n    if (Operator->isDeleted()) {\n      if (Diagnose) {\n        Diag(StartLoc, diag::err_deleted_function_use);"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-delegating-ctors.cpp"]={"clang/test/SemaCXX/cxx0x-delegating-ctors.cpp:48:23: error: attempt to use a deleted function"}
		}
	},
	["err_deleted_inherited_ctor_use"]={
		[i]="err_deleted_inherited_ctor_use",
		[b]="constructor inherited by %0 from base class %1 is implicitly deleted",
		[c]="constructor inherited by A from base class B is implicitly deleted",
		[e]=d,
		[f]="constructor inherited by (.*?) from base class (.*?) is implicitly deleted",
		[g]=a,
		[h]=m,
		[j]={"80a4702d022f",1467162627,"Mark inheriting constructors as deleted if the corresponding defaulted default","Mark inheriting constructors as deleted if the corresponding defaulted default\nconstructor would be; this is effectively required by P0136R1. This has the\neffect of exposing the validity of the base class initialization steps to\nSFINAE checks.\n\nllvm-svn: 274088"},
		[k]={{Lb,271,"/// 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    // See if this is a deleted function.\n    if (FD->isDeleted()) {\n      // ...\n      if (Ctor && Ctor->isInheritingConstructor())\n        Diag(Loc, diag::err_deleted_inherited_ctor_use) << Ctor->getParent() << Ctor->getInheritedConstructor().getConstructor()->getParent();"}},
		[l]={
			["clang/test/SemaCUDA/inherited-ctor.cu"]={"clang/test/SemaCUDA/inherited-ctor.cu:41:11: error: constructor inherited by \'B\' from base class \'A\' is implicitly deleted"}
		}
	},
	["err_deleted_main"]={
		[i]="err_deleted_main",
		[b]="\'main\' is not allowed to be deleted",
		[c]="\'main\' is not allowed to be deleted",
		[e]=d,
		[f]="\'main\' is not allowed to be deleted",
		[g]=a,
		[h]=m,
		[j]={"b63b6ee9a00e",1390354999,"Enforce restrictions that \'main\' is not allowed to be deleted, or to be used by","Enforce restrictions that \'main\' is not allowed to be deleted, or to be used by\nthe program, in C++. (We allow the latter as an extension, since we\'ve always\npermitted it, and GCC does the same, and our supported C++ ABIs don\'t do\nanything special in main.)\n\nllvm-svn: 199782"},
		[k]={{r,17838,"void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {\n  // ...\n  // C++11 [basic.start.main]p3:\n  //   A program that defines main as deleted [...] is ill-formed.\n  if (Fn->isMain())\n    Diag(DelLoc, diag::err_deleted_main);"}},
		[l]={
			["clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp"]={"clang/test/CXX/basic/basic.start/basic.start.init/p3.cpp:16:5: error: \'main\' is not allowed to be deleted"}
		}
	},
	["err_deleted_non_function"]={
		[i]="err_deleted_non_function",
		[b]="only functions can have deleted definitions",
		[c]="only functions can have deleted definitions",
		[e]=d,
		[f]="only functions can have deleted definitions",
		[g]=a,
		[h]=Q,
		[j]={"f769df5ef9d7",1237933677,"Parse deleted function definitions and hook them up to Doug\'s machinery.","Parse deleted function definitions and hook them up to Doug\'s machinery.\n\nllvm-svn: 67653"},
		[k]={{"clang/lib/Parse/ParseDecl.cpp",2508,"Decl *Parser::ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D, const ParsedTemplateInfo &TemplateInfo, ForRangeInit *FRI) {\n  // ...\n  // Parse declarator \'=\' initializer.\n  case InitKind::Equal: {\n    // ...\n    if (Tok.is(tok::kw_delete)) {\n      if (D.isFunctionDeclarator())\n      // ...\n      else\n        Diag(ConsumeToken(), diag::err_deleted_non_function);"},{jb,3249,"/// ParseCXXMemberInitializer - Parse the brace-or-equal-initializer.\n/// Also detect and reject any attempted defaulted/deleted function definition.\n/// The location of the \'=\', if any, will be placed in EqualLoc.\n///\n/// This does not check for a pure-specifier; that\'s handled elsewhere.\n///\n///   brace-or-equal-initializer:\n///     \'=\' initializer-expression\n///     braced-init-list\n///\n///   initializer-clause:\n///     assignment-expression\n///     braced-init-list\n///\n///   defaulted/deleted function-definition:\n///     \'=\' \'default\'\n///     \'=\' \'delete\'\n///\n/// Prior to C++0x, the assignment-expression in an initializer-clause must\n/// be a constant-expression.\nExprResult Parser::ParseCXXMemberInitializer(Decl *D, bool IsFunction, SourceLocation &EqualLoc) {\n  // ...\n  if (TryConsumeToken(tok::equal, EqualLoc)) {\n    if (Tok.is(tok::kw_delete)) {\n      // ...\n      if (IsFunction || Next.isOneOf(tok::semi, tok::comma, tok::eof)) {\n        if (IsFunction)\n        // ...\n        else\n          Diag(ConsumeToken(), diag::err_deleted_non_function);"},{r,17799,"void Sema::SetDeclDeleted(Decl *Dcl, SourceLocation DelLoc) {\n  // ...\n  if (!Fn) {\n    Diag(DelLoc, diag::err_deleted_non_function);"}},
		[l]={
			["clang/test/SemaCXX/deleted-function.cpp"]={"clang/test/SemaCXX/deleted-function.cpp:3:9: error: only functions can have deleted definitions","clang/test/SemaCXX/deleted-function.cpp:23:11: error: only functions can have deleted definitions"}
		}
	},
	["err_deleted_override"]={
		[i]="err_deleted_override",
		[b]="deleted function %0 cannot override a non-deleted function",
		[c]="deleted function A cannot override a non-deleted function",
		[e]=d,
		[f]="deleted function (.*?) cannot override a non\\-deleted function",
		[g]=a,
		[h]=m,
		[j]={"7e414261f647",1350434878,"Implement C++ 10.3p16 - overrides involving deleted functions must match.","Implement C++ 10.3p16 - overrides involving deleted functions must match.\n\nOnly deleted functions may override deleted functions and non-deleted functions\nmay only override non-deleted functions.\n\nllvm-svn: 166082"},
		[k]={{r,7026,"/// Perform semantic checks on a class definition that has been\n/// completing, introducing implicitly-declared members, checking for\n/// abstract types, etc.\n///\n/// \\param S The scope in which the class was parsed. Null if we didn\'t just\n///        parse a class definition.\n/// \\param Record The completed class.\nvoid Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) {\n  // ...\n  // Perform checks that can\'t be done until we know all the properties of a\n  // member function (whether it\'s defaulted, deleted, virtual, overriding,\n  // ...).\n  auto CheckCompletedMemberFunction = [&](CXXMethodDecl *MD) {\n    // ...\n    if (ReportOverrides(*this, MD->isDeleted() ? diag::err_deleted_override : diag::err_non_deleted_override, MD, [&](const CXXMethodDecl *V) { return MD->isDeleted() != V->isDeleted(); })) {"}},
		[l]={
			["clang/test/CXX/class.derived/class.abstract/p16.cpp"]={"clang/test/CXX/class.derived/class.abstract/p16.cpp:9:16: error: deleted function \'a\' cannot override a non-deleted function","clang/test/CXX/class.derived/class.abstract/p16.cpp:34:8: error: deleted function \'~E\' cannot override a non-deleted function","clang/test/CXX/class.derived/class.abstract/p16.cpp:34:8: error: deleted function \'operator=\' cannot override a non-deleted function","clang/test/CXX/class.derived/class.abstract/p16.cpp:40:8: error: deleted function \'~G\' cannot override a non-deleted function","clang/test/CXX/class.derived/class.abstract/p16.cpp:40:8: error: deleted function \'operator=\' cannot override a non-deleted function","clang/test/CXX/class.derived/class.abstract/p16.cpp:46:6: error: deleted function \'operator=\' cannot override a non-deleted function"}
		}
	},
	["err_delimited_escape_empty"]={
		[i]={{nil,o,"err_delimited_escape_empty"}},
		[b]={{nil,o,"delimited escape sequence cannot be empty"}},
		[c]={{nil,o,"delimited escape sequence cannot be empty"}},
		[e]=d,
		[f]="delimited escape sequence cannot be empty",
		[g]=a,
		[h]={{nil,o,Mb}},
		[j]={gb,1625925174,eb,ib},
		[k]={{fb,195,"/// ProcessCharEscape - Parse a standard C escape sequence, which can occur in\n/// either a character or a string literal.\nstatic unsigned ProcessCharEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, bool &HadError, FullSourceLoc Loc, unsigned CharWidth, DiagnosticsEngine *Diags, const LangOptions &Features, StringLiteralEvalMethod EvalMethod) {\n  // ...\n  case \'x\': { // Hex escape.\n    // ...\n    if (ThisTokBuf != ThisTokEnd && *ThisTokBuf == \'{\') {\n      // ...\n      if (*ThisTokBuf == \'}\') {\n        Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::err_delimited_escape_empty);"},{fb,288,"/// ProcessCharEscape - Parse a standard C escape sequence, which can occur in\n/// either a character or a string literal.\nstatic unsigned ProcessCharEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, bool &HadError, FullSourceLoc Loc, unsigned CharWidth, DiagnosticsEngine *Diags, const LangOptions &Features, StringLiteralEvalMethod EvalMethod) {\n  // ...\n  case \'o\': {\n    // ...\n    if (*ThisTokBuf == \'}\') {\n      Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::err_delimited_escape_empty);"},{fb,522,"static bool ProcessNumericUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, bool &Delimited, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // ...\n  // If we didn\'t consume the proper number of digits, there is a problem.\n  if (Count == 0 || (!Delimited && Count != UcnLen)) {\n    if (Diags)\n      Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, Delimited ? diag::err_delimited_escape_empty : diag::err_ucn_escape_incomplete);"},{fb,611,"static bool ProcessNamedUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features) {\n  // ...\n  if (Incomplete || Empty) {\n    if (Diags) {\n      Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, Incomplete ? diag::err_ucn_escape_incomplete : diag::err_delimited_escape_empty) << StringRef(&UcnBegin[1], 1);"}},
		[l]={
			["clang/test/Lexer/char-escapes-delimited.c"]={"clang/test/Lexer/char-escapes-delimited.c:9:6: error: delimited escape sequence cannot be empty","clang/test/Lexer/char-escapes-delimited.c:12:6: error: delimited escape sequence cannot be empty","clang/test/Lexer/char-escapes-delimited.c:15:6: error: delimited escape sequence cannot be empty","clang/test/Lexer/char-escapes-delimited.c:89:13: error: delimited escape sequence cannot be empty"}
		}
	},
	["err_delimited_escape_invalid"]={
		[i]={{nil,o,"err_delimited_escape_invalid"}},
		[b]={{nil,o,"invalid digit \'%0\' in escape sequence"}},
		[c]={{nil,o,"invalid digit \'A\' in escape sequence"}},
		[e]=d,
		[f]="invalid digit \'(.*?)\' in escape sequence",
		[g]=a,
		[h]={{nil,o,Mb}},
		[j]={gb,1625925174,eb,ib},
		[k]={{fb,221,"/// ProcessCharEscape - Parse a standard C escape sequence, which can occur in\n/// either a character or a string literal.\nstatic unsigned ProcessCharEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, bool &HadError, FullSourceLoc Loc, unsigned CharWidth, DiagnosticsEngine *Diags, const LangOptions &Features, StringLiteralEvalMethod EvalMethod) {\n  // ...\n  case \'x\': { // Hex escape.\n    // ...\n    for (; ThisTokBuf != ThisTokEnd; ++ThisTokBuf) {\n      // ...\n      if (CharVal == -1) {\n        // ...\n        if (Diags)\n          Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::err_delimited_escape_invalid) << StringRef(ThisTokBuf, 1);"},{fb,302,"/// ProcessCharEscape - Parse a standard C escape sequence, which can occur in\n/// either a character or a string literal.\nstatic unsigned ProcessCharEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, bool &HadError, FullSourceLoc Loc, unsigned CharWidth, DiagnosticsEngine *Diags, const LangOptions &Features, StringLiteralEvalMethod EvalMethod) {\n  // ...\n  case \'o\': {\n    // ...\n    while (ThisTokBuf != ThisTokEnd) {\n      // ...\n      if (*ThisTokBuf < \'0\' || *ThisTokBuf > \'7\') {\n        // ...\n        if (Diags)\n          Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::err_delimited_escape_invalid) << StringRef(ThisTokBuf, 1);"},{fb,486,"static bool ProcessNumericUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, bool &Delimited, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal = false) {\n  // ...\n  for (; ThisTokBuf != ThisTokEnd && (Delimited || Count != UcnLen); ++ThisTokBuf) {\n    // ...\n    if (CharVal == -1) {\n      // ...\n      if (Diags) {\n        Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, diag::err_delimited_escape_invalid) << StringRef(ThisTokBuf, 1);"}},
		[l]={
			["clang/test/Lexer/char-escapes-delimited.c"]={"clang/test/Lexer/char-escapes-delimited.c:11:6: error: invalid digit \'h\' in escape sequence","clang/test/Lexer/char-escapes-delimited.c:14:6: error: invalid digit \'h\' in escape sequence","clang/test/Lexer/char-escapes-delimited.c:18:6: error: invalid digit \'8\' in escape sequence",ec,ec,ec,ec,ec,"clang/test/Lexer/char-escapes-delimited.c:56:13: error: invalid digit \'8\' in escape sequence","clang/test/Lexer/char-escapes-delimited.c:56:13: error: invalid digit \'8\' in escape sequence","clang/test/Lexer/char-escapes-delimited.c:56:13: error: invalid digit \'8\' in escape sequence","clang/test/Lexer/char-escapes-delimited.c:56:13: error: invalid digit \'8\' in escape sequence","clang/test/Lexer/char-escapes-delimited.c:109:10: error: invalid digit \'\'\' in escape sequence","clang/test/Lexer/char-escapes-delimited.c:110:10: error: invalid digit \'\'\' in escape sequence","clang/test/Lexer/char-escapes-delimited.c:111:10: error: invalid digit \'\'\' in escape sequence"}
		}
	},
	["err_delimited_escape_missing_brace"]={
		[i]={{nil,o,"err_delimited_escape_missing_brace"}},
		[b]={{nil,o,"expected \'{\' after \'\\%0\' escape sequence"}},
		[c]={{nil,o,"expected \'{\' after \'\\A\' escape sequence"}},
		[e]=d,
		[f]="expected \'\\{\' after \'\\\\(.*?)\' escape sequence",
		[g]=a,
		[h]={{nil,o,Mb}},
		[j]={gb,1625925174,eb,ib},
		[k]={{fb,278,"/// ProcessCharEscape - Parse a standard C escape sequence, which can occur in\n/// either a character or a string literal.\nstatic unsigned ProcessCharEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, bool &HadError, FullSourceLoc Loc, unsigned CharWidth, DiagnosticsEngine *Diags, const LangOptions &Features, StringLiteralEvalMethod EvalMethod) {\n  // ...\n  case \'o\': {\n    // ...\n    if (ThisTokBuf == ThisTokEnd || *ThisTokBuf != \'{\') {\n      // ...\n      if (Diags)\n        Diag(Diags, Features, Loc, ThisTokBegin, EscapeBegin, ThisTokBuf, diag::err_delimited_escape_missing_brace) << \"o\";"},{fb,596,"static bool ProcessNamedUCNEscape(const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features) {\n  // ...\n  if (ThisTokBuf == ThisTokEnd || *ThisTokBuf != \'{\') {\n    if (Diags) {\n      Diag(Diags, Features, Loc, ThisTokBegin, UcnBegin, ThisTokBuf, diag::err_delimited_escape_missing_brace) << StringRef(&ThisTokBuf[-1], 1);"}},
		[l]={
			["clang/test/Lexer/char-escapes-delimited.c"]={"clang/test/Lexer/char-escapes-delimited.c:17:6: error: expected \'{\' after \'\\o\' escape sequence","clang/test/Lexer/char-escapes-delimited.c:99:13: error: expected \'{\' after \'\\N\' escape sequence"}
		}
	},
	["err_dep_source_scanner_missing_semi_after_at_import"]={
		[i]={{nil,s,"err_dep_source_scanner_missing_semi_after_at_import"}},
		[b]={{nil,s,"could not find \';\' after @import"}},
		[c]={{nil,s,"could not find \';\' after @import"}},
		[e]=d,
		[f]="could not find \';\' after @import",
		[g]=a,
		[h]={{nil,s,"Dependency Directive Source Scanner Issue"}},
		[j]={gb,1625925174,eb,ib},
		[k]={{"clang/lib/Lex/DependencyDirectivesScanner.cpp",504,"bool Scanner::lexModuleDirectiveBody(DirectiveKind Kind, const char *&First, const char *const End) {\n  // ...\n  for (;;) {\n    // ...\n    if (Tok.is(tok::eof))\n      return reportError(DirectiveLoc, diag::err_dep_source_scanner_missing_semi_after_at_import);"}},
		[l]={
			["clang/test/Lexer/minimize_source_to_dependency_directives_at_import_missing_semi.m"]={"clang/test/Lexer/minimize_source_to_dependency_directives_at_import_missing_semi.m:3:1: error: could not find \';\' after @import"}
		}
	},
	["err_dep_source_scanner_unexpected_tokens_at_import"]={
		[i]={{nil,s,"err_dep_source_scanner_unexpected_tokens_at_import"}},
		[b]={{nil,s,"unexpected extra tokens at end of @import declaration"}},
		[c]={{nil,s,"unexpected extra tokens at end of @import declaration"}},
		[e]=d,
		[f]="unexpected extra tokens at end of @import declaration",
		[g]=a,
		[h]={{nil,s,"Dependency Directive Source Scanner Issue"}},
		[j]={gb,1625925174,eb,ib},
		[k]={{"clang/lib/Lex/DependencyDirectivesScanner.cpp",514,"bool Scanner::lexModuleDirectiveBody(DirectiveKind Kind, const char *&First, const char *const End) {\n  // ...\n  if (!isVerticalWhitespace(*First))\n    return reportError(DirectiveLoc, diag::err_dep_source_scanner_unexpected_tokens_at_import);"}},
		[l]={
			["clang/test/Lexer/minimize_source_to_dependency_directives_at_import_extra_tokens.m"]={"clang/test/Lexer/minimize_source_to_dependency_directives_at_import_extra_tokens.m:3:1: error: unexpected extra tokens at end of @import declaration"}
		}
	},
	["err_dependent_deduced_tst"]={
		[i]={{nil,p,"err_dependent_deduced_tst"}},
		[b]={{nil,p,"typename specifier refers to %select{class template|function template|variable template|alias template|template template parameter|template}0 member in %1; argument deduction not allowed here"}},
		[c]={{nil,p,{"typename specifier refers to ",{"class template",Gb,Ib,Db,Hb,"template"}," member in B; argument deduction not allowed here"}}},
		[e]=d,
		[f]="typename specifier refers to (?:class template|function template|variable template|alias template|template template parameter|template) member in (.*?); argument deduction not allowed here",
		[g]=a,
		[h]={{nil,p,m}},
		[j]={"c95726ea3937",1485751108,"Towards P0091R3: parsing support for class template argument deduction in typename-specifiers.","Towards P0091R3: parsing support for class template argument deduction in typename-specifiers.\n\nllvm-svn: 293455"},
		[k]={{R,11130,"/// Build the type that describes a C++ typename specifier,\n/// e.g., \"typename T::type\".\nQualType Sema::CheckTypenameType(ElaboratedTypeKeyword Keyword, SourceLocation KeywordLoc, NestedNameSpecifierLoc QualifierLoc, const IdentifierInfo &II, SourceLocation IILoc, bool DeducedTSTContext) {\n  // ...\n  case LookupResult::Found:\n    // ...\n    // C++ [dcl.type.simple]p2:\n    //   A type-specifier of the form\n    //     typename[opt] nested-name-specifier[opt] template-name\n    //   is a placeholder for a deduced class type [...].\n    if (getLangOpts().CPlusPlus17) {\n      if (auto *TD = getAsTypeTemplateDecl(Result.getFoundDecl())) {\n        if (!DeducedTSTContext) {\n          // ...\n          if (!T.isNull())\n            Diag(IILoc, diag::err_dependent_deduced_tst) << (int)getTemplateNameKindForDiagnostics(TemplateName(TD)) << T;"}},
		[l]={
			["clang/test/Parser/cxx1z-class-template-argument-deduction.cpp"]={"clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:202:25: error: typename specifier refers to class template member in \'typename_specifier::X\'; argument deduction not allowed here","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:203:25: error: typename specifier refers to class template member in \'typename_specifier::X\'; argument deduction not allowed here","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:204:18: error: typename specifier refers to class template member in \'typename_specifier::X\'; argument deduction not allowed here","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:206:18: error: typename specifier refers to class template member in \'typename_specifier::X\'; argument deduction not allowed here","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:207:18: error: typename specifier refers to class template member in \'typename_specifier::X\'; argument deduction not allowed here","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:208:18: error: typename specifier refers to class template member in \'typename_specifier::X\'; argument deduction not allowed here","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:209:18: error: typename specifier refers to class template member in \'typename_specifier::X\'; argument deduction not allowed here","clang/test/Parser/cxx1z-class-template-argument-deduction.cpp:210:18: error: typename specifier refers to class template member in \'typename_specifier::X\'; argument deduction not allowed here"}
		}
	},
	["err_dependent_function_template_spec_no_match"]={
		[i]={{nil,B,"err_dependent_function_template_spec_no_match"}},
		[b]={{nil,B,"no candidate function template was found for dependent friend function template specialization"}},
		[c]={{nil,B,"no candidate function template was found for dependent friend function template specialization"}},
		[e]=d,
		[f]="no candidate function template was found for dependent friend function template specialization",
		[g]=a,
		[h]={{nil,B,m}},
		[j]={"0b75dc5fa2e0",1532032820,"[Sema] Diagnose an invalid dependent function template specialization","[Sema] Diagnose an invalid dependent function template specialization\n\nPreviously, clang marked the specialization as invalid without emitting a\ndiagnostic. This lead to an assert in CodeGen.\n\nrdar://41806724\n\nDifferential revision: https://reviews.llvm.org/D49085\n\nllvm-svn: 337497"},
		[k]={{R,9354,"/// Perform semantic analysis for the given dependent function\n/// template specialization.\n///\n/// The only possible way to get a dependent function template specialization\n/// is with a friend declaration, like so:\n///\n/// \\code\n///   template \\<class T> void foo(T);\n///   template \\<class T> class A {\n///     friend void foo<>(T);\n///   };\n/// \\endcode\n///\n/// There really isn\'t any useful analysis we can do here, so we\n/// just store the information.\nbool Sema::CheckDependentFunctionTemplateSpecialization(FunctionDecl *FD, const TemplateArgumentListInfo &ExplicitTemplateArgs, LookupResult &Previous) {\n  // ...\n  if (Previous.empty()) {\n    Diag(FD->getLocation(), diag::err_dependent_function_template_spec_no_match);"}},
		[l]={
			["clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp"]={"clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp:366:15: error: no candidate function template was found for dependent friend function template specialization","clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp:376:15: error: no candidate function template was found for dependent friend function template specialization","clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp:387:15: error: no candidate function template was found for dependent friend function template specialization"}
		}
	},
	["err_dependent_nested_name_spec"]={
		[i]="err_dependent_nested_name_spec",
		[b]="nested name specifier for a declaration cannot depend on a template parameter",
		[c]="nested name specifier for a declaration cannot depend on a template parameter",
		[e]=d,
		[f]="nested name specifier for a declaration cannot depend on a template parameter",
		[g]=a,
		[h]=m,
		[j]={"ba41d01b5970",1272127121,"Be more careful around dependent nested-name-specifiers, complaining","Be more careful around dependent nested-name-specifiers, complaining\nwhen they are not complete (since we could not match them up to\nanything) and ensuring that enum parsing can cope with dependent\nelaborated-type-specifiers. Fixes PR6915 and PR6649.\n\nllvm-svn: 102247"},
		[k]={{F,16946,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  // ...\n  if (Name && SS.isNotEmpty()) {\n    // ...\n    // If this is a friend or a reference to a class in a dependent\n    // context, don\'t try to make a decl for it.\n    if (TUK == TUK_Friend || TUK == TUK_Reference) {\n    // ...\n    } else {\n      // ...\n      if (!DC) {\n        Diag(SS.getRange().getBegin(), diag::err_dependent_nested_name_spec) << SS.getRange();"}},
		[l]={
			["clang/test/SemaTemplate/elaborated-type-specifier.cpp"]={"clang/test/SemaTemplate/elaborated-type-specifier.cpp:25:8: error: nested name specifier for a declaration cannot depend on a template parameter","clang/test/SemaTemplate/elaborated-type-specifier.cpp:26:8: error: nested name specifier for a declaration cannot depend on a template parameter","clang/test/SemaTemplate/elaborated-type-specifier.cpp:33:11: error: nested name specifier for a declaration cannot depend on a template parameter","clang/test/SemaTemplate/elaborated-type-specifier.cpp:34:11: error: nested name specifier for a declaration cannot depend on a template parameter"}
		}
	},
	["err_dependent_non_type_arg_in_partial_spec"]={
		[i]="err_dependent_non_type_arg_in_partial_spec",
		[b]="type of specialized non-type template argument depends on a template parameter of the partial specialization",
		[c]="type of specialized non-type template argument depends on a template parameter of the partial specialization",
		[e]=d,
		[f]="type of specialized non\\-type template argument depends on a template parameter of the partial specialization",
		[g]=a,
		[h]=m,
		[j]={"8cfd2ba76d3c",1244841662,"Diagnose the incorrect use of non-type template arguments for class","Diagnose the incorrect use of non-type template arguments for class\ntemplate partial specializations.\n\nllvm-svn: 73254"},
		[k]={{R,8547,"/// Subroutine of Sema::CheckTemplatePartialSpecializationArgs\n/// that checks non-type template partial specialization arguments.\nstatic bool CheckNonTypeTemplatePartialSpecializationArgs(Sema &S, SourceLocation TemplateNameLoc, NonTypeTemplateParmDecl *Param, const TemplateArgument *Args, unsigned NumArgs, bool IsDefaultArgument) {\n  for (unsigned I = 0; I != NumArgs; ++I) {\n    // ...\n    if (ParamUseRange.isValid()) {\n      if (IsDefaultArgument) {\n        S.Diag(TemplateNameLoc, diag::err_dependent_non_type_arg_in_partial_spec);"},{R,8553,"/// Subroutine of Sema::CheckTemplatePartialSpecializationArgs\n/// that checks non-type template partial specialization arguments.\nstatic bool CheckNonTypeTemplatePartialSpecializationArgs(Sema &S, SourceLocation TemplateNameLoc, NonTypeTemplateParmDecl *Param, const TemplateArgument *Args, unsigned NumArgs, bool IsDefaultArgument) {\n  for (unsigned I = 0; I != NumArgs; ++I) {\n    // ...\n    if (ParamUseRange.isValid()) {\n      if (IsDefaultArgument) {\n      // ...\n      } else {\n        S.Diag(ParamUseRange.getBegin(), diag::err_dependent_non_type_arg_in_partial_spec) << ParamUseRange;"}},
		[l]={
			["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:447:50: error: type of specialized non-type template argument depends on a template parameter of the partial specialization"}
		}
	},
	["err_dependent_tag_decl"]={
		[i]="err_dependent_tag_decl",
		[b]="%select{declaration|definition}0 of %select{struct|interface|union|class|enum}1 in a dependent scope",
		[c]={{nil,nil,{{"declaration","definition"}," of ",{"struct","interface","union","class","enum"}," in a dependent scope"}}},
		[e]=d,
		[f]="(?:declaration|definition) of (?:struct|interface|union|class|enum) in a dependent scope",
		[g]=a,
		[h]=m,
		[j]={"ba41d01b5970",1272127121,"Be more careful around dependent nested-name-specifiers, complaining","Be more careful around dependent nested-name-specifiers, complaining\nwhen they are not complete (since we could not match them up to\nanything) and ensuring that enum parsing can cope with dependent\nelaborated-type-specifiers. Fixes PR6915 and PR6649.\n\nllvm-svn: 102247"},
		[k]={{R,10781,"TypeResult Sema::ActOnDependentTag(Scope *S, unsigned TagSpec, TagUseKind TUK, const CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation TagLoc, SourceLocation NameLoc) {\n  // ...\n  if (TUK == TUK_Declaration || TUK == TUK_Definition) {\n    Diag(NameLoc, diag::err_dependent_tag_decl) << (TUK == TUK_Definition) << Kind << SS.getRange();"}}
	},
	["err_dependent_typed_non_type_arg_in_partial_spec"]={
		[i]="err_dependent_typed_non_type_arg_in_partial_spec",
		[b]="non-type template argument specializes a template parameter with dependent type %0",
		[c]="non-type template argument specializes a template parameter with dependent type A",
		[e]=d,
		[f]="non\\-type template argument specializes a template parameter with dependent type (.*?)",
		[g]=a,
		[h]=m,
		[j]={"8cfd2ba76d3c",1244841662,"Diagnose the incorrect use of non-type template arguments for class","Diagnose the incorrect use of non-type template arguments for class\ntemplate partial specializations.\n\nllvm-svn: 73254"},
		[k]={{R,8563,"/// Subroutine of Sema::CheckTemplatePartialSpecializationArgs\n/// that checks non-type template partial specialization arguments.\nstatic bool CheckNonTypeTemplatePartialSpecializationArgs(Sema &S, SourceLocation TemplateNameLoc, NonTypeTemplateParmDecl *Param, const TemplateArgument *Args, unsigned NumArgs, bool IsDefaultArgument) {\n  for (unsigned I = 0; I != NumArgs; ++I) {\n    // ...\n    if (ParamUseRange.isValid()) {\n      S.Diag(IsDefaultArgument ? TemplateNameLoc : ArgExpr->getBeginLoc(), diag::err_dependent_typed_non_type_arg_in_partial_spec) << Param->getType();"}},
		[l]={
			["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:440:38: error: non-type template argument specializes a template parameter with dependent type \'Y<T>\' (aka \'type-parameter-0-0 *\')"}
		}
	},
	["err_dereference_incomplete_type"]={
		[i]="err_dereference_incomplete_type",
		[b]="dereference of pointer to incomplete type %0",
		[c]="dereference of pointer to incomplete type A",
		[e]=d,
		[f]="dereference of pointer to incomplete type (.*?)",
		[g]=a,
		[h]=m,
		[j]={"c4fc3a2ba52d",1364245789,"Emit an error message instead of crashing when dereferencing an incomplete pointer type.","Emit an error message instead of crashing when dereferencing an incomplete pointer type.\n\nIf the ASM statement is dereferencing an incomplete pointer type, issue an error\ninstead of crashing.\n<rdar://problem/12700799>\n\nllvm-svn: 177915"},
		[k]={{"clang/lib/Sema/SemaStmtAsm.cpp",334,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n  // ...\n  for (unsigned i = 0; i != NumOutputs; i++) {\n    // ...\n    case Expr::MLV_IncompleteType:\n    case Expr::MLV_IncompleteVoidType:\n      if (RequireCompleteType(OutputExpr->getBeginLoc(), Exprs[i]->getType(), diag::err_dereference_incomplete_type))"},{"clang/lib/Sema/SemaStmtAsm.cpp",454,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n  // ...\n  for (unsigned i = NumOutputs, e = NumOutputs + NumInputs; i != e; i++) {\n    // ...\n    if (!Ty->isVoidType() || !Info.allowsMemory())\n      if (RequireCompleteType(InputExpr->getBeginLoc(), Exprs[i]->getType(), diag::err_dereference_incomplete_type))"}},
		[l]={
			["clang/test/Sema/asm.c"]={"clang/test/Sema/asm.c:141:19: error: dereference of pointer to incomplete type \'struct S\'","clang/test/Sema/asm.c:142:19: error: dereference of pointer to incomplete type \'struct S\'"}
		}
	},
	["err_designated_init_attr_non_init"]={
		[i]={{nil,C,"err_designated_init_attr_non_init"}},
		[b]={{nil,C,"\'objc_designated_initializer\' attribute only applies to init methods of interface or class extension declarations"}},
		[c]={{nil,C,"\'objc_designated_initializer\' attribute only applies to init methods of interface or class extension declarations"}},
		[e]=d,
		[f]="\'objc_designated_initializer\' attribute only applies to init methods of interface or class extension declarations",
		[g]=a,
		[h]={{nil,C,m}},
		[j]={"81d3f45137e1",1550089957,"[Sema] Delay checking whether objc_designated_initializer is being applied to an init method","[Sema] Delay checking whether objc_designated_initializer is being applied to an init method\n\nThis fixes a regression that was caused by r335084, which reversed\nthe order that attributes are applied. objc_method_family can change\nwhether a method is an init method, so the order that these\nattributes are applied matters. The commit fixes this by delaying the\ninit check until after all attributes have been applied.\n\nrdar://47829358\n\nDifferential revision: https://reviews.llvm.org/D58152\n\nllvm-svn: 353976"},
		[k]={{P,6234,"static void handleObjCDesignatedInitializer(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // This attribute can only be applied to methods in interfaces or class\n  // extensions.\n  if (!isa<ObjCInterfaceDecl>(Ctx) && !(isa<ObjCCategoryDecl>(Ctx) && cast<ObjCCategoryDecl>(Ctx)->IsClassExtension())) {\n    S.Diag(D->getLocation(), diag::err_designated_init_attr_non_init);"},{P,9570,"/// ProcessDeclAttributeList - Apply all the decl attributes in the specified\n/// attribute list to the specified decl, ignoring any type attributes.\nvoid Sema::ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AttrList, const ProcessDeclAttributeOptions &Options) {\n  // ...\n  // Do this check after processing D\'s attributes because the attribute\n  // objc_method_family can change whether the given method is in the init\n  // family, and it can be applied after objc_designated_initializer. This is a\n  // bit of a hack, but we need it to be compatible with versions of clang that\n  // processed the attribute list in the wrong order.\n  if (D->hasAttr<ObjCDesignatedInitializerAttr>() && cast<ObjCMethodDecl>(D)->getMethodFamily() != OMF_init) {\n    Diag(D->getLocation(), diag::err_designated_init_attr_non_init);"}},
		[l]={
			["clang/test/SemaObjC/attr-designated-init.m"]={"clang/test/SemaObjC/attr-designated-init.m:9:1: error: \'objc_designated_initializer\' attribute only applies to init methods of interface or class extension declarations","clang/test/SemaObjC/attr-designated-init.m:14:1: error: \'objc_designated_initializer\' attribute only applies to init methods of interface or class extension declarations","clang/test/SemaObjC/attr-designated-init.m:16:1: error: \'objc_designated_initializer\' attribute only applies to init methods of interface or class extension declarations","clang/test/SemaObjC/attr-designated-init.m:20:1: error: \'objc_designated_initializer\' attribute only applies to init methods of interface or class extension declarations","clang/test/SemaObjC/attr-designated-init.m:29:1: error: \'objc_designated_initializer\' attribute only applies to init methods of interface or class extension declarations","clang/test/SemaObjC/attr-designated-init.m:32:1: error: \'objc_designated_initializer\' attribute only applies to init methods of interface or class extension declarations","clang/test/SemaObjC/attr-designated-init.m:442:1: error: \'objc_designated_initializer\' attribute only applies to init methods of interface or class extension declarations"}
		}
	},
	["err_designated_init_for_non_aggregate"]={
		[i]="err_designated_init_for_non_aggregate",
		[b]="initialization of non-aggregate type %0 with a designated initializer list",
		[c]="initialization of non-aggregate type A with a designated initializer list",
		[e]=d,
		[f]="initialization of non\\-aggregate type (.*?) with a designated initializer list",
		[g]=a,
		[h]=m,
		[j]={gb,1625925174,eb,ib},
		[k]={{X,10012,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  // ...\n  case FK_DesignatedInitForNonAggregate:\n    // ...\n    S.Diag(Kind.getLocation(), diag::err_designated_init_for_non_aggregate) << Entity.getType() << InitList->getSourceRange();"}},
		[l]={
			["clang/test/Sema/designated-initializers.c"]={"clang/test/Sema/designated-initializers.c:73:20: error: initialization of non-aggregate type \'double\' with a designated initializer list"}
		}
	},
	["err_designator_for_scalar_or_sizeless_init"]={
		[i]={{nil,A,"err_designator_for_scalar_or_sizeless_init"}},
		[b]={{nil,A,"designator in initializer for %select{scalar|indivisible sizeless}0 type %1"}},
		[c]={{nil,A,{"designator in initializer for ",{"scalar","indivisible sizeless"}," type B"}}},
		[e]=d,
		[f]="designator in initializer for (?:scalar|indivisible sizeless) type (.*?)",
		[g]=a,
		[h]={{nil,A,m}},
		[j]={"931fcd3ba011",1576908663,"[WebAssembly] Improve clang diagnostics for wasm attributes","[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"},
		[k]={{X,1664,"void InitListChecker::CheckScalarType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  // ...\n  if (InitListExpr *SubIList = dyn_cast<InitListExpr>(expr)) {\n  // ...\n  } else if (isa<DesignatedInitExpr>(expr)) {\n    if (!VerifyOnly)\n      SemaRef.Diag(expr->getBeginLoc(), diag::err_designator_for_scalar_or_sizeless_init) << DeclType->isSizelessBuiltinType() << DeclType << expr->getSourceRange();"}}
	},
	["err_designator_into_flexible_array_member"]={
		[i]="err_designator_into_flexible_array_member",
		[b]="designator into flexible array member subobject",
		[c]="designator into flexible array member subobject",
		[e]=d,
		[f]="designator into flexible array member subobject",
		[g]=a,
		[h]=m,
		[j]={hb,1236199783,db,cb},
		[k]={{X,2882,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  // ...\n  if (D->isFieldDesignator()) {\n    // ...\n    // This designator names a flexible array member.\n    if (Field->getType()->isIncompleteArrayType()) {\n      // ...\n      if ((DesigIdx + 1) != DIE->size()) {\n        // We can\'t designate an object within the flexible array\n        // member (because GCC doesn\'t allow it).\n        if (!VerifyOnly) {\n          // ...\n          SemaRef.Diag(NextD->getBeginLoc(), diag::err_designator_into_flexible_array_member) << SourceRange(NextD->getBeginLoc(), DIE->getEndLoc());"}},
		[l]={
			["clang/test/Sema/flexible-array-init.c"]={"clang/test/Sema/flexible-array-init.c:48:10: error: designator into flexible array member subobject"}
		}
	},
	["err_destroy_attr_on_non_static_var"]={
		[i]={{nil,C,"err_destroy_attr_on_non_static_var"}},
		[b]={{nil,C,"%select{no_destroy|always_destroy}0 attribute can only be applied to a variable with static or thread storage duration"}},
		[c]={{nil,C,{{"no_destroy","always_destroy"}," attribute can only be applied to a variable with static or thread storage duration"}}},
		[e]=d,
		[f]="(?:no_destroy|always_destroy) attribute can only be applied to a variable with static or thread storage duration",
		[g]=a,
		[h]={{nil,C,m}},
		[j]={"5a559e64a919",1534872246,"Add a new flag and attributes to control static destructor registration","Add a new flag and attributes to control static destructor registration\n\nThis commit adds the flag -fno-c++-static-destructors and the attributes\n[[clang::no_destroy]] and [[clang::always_destroy]]. no_destroy specifies that a\nspecific static or thread duration variable shouldn\'t have it\'s destructor\nregistered, and is the default in -fno-c++-static-destructors mode.\nalways_destroy is the opposite, and is the default in -fc++-static-destructors\nmode.\n\nA variable whose destructor is disabled (either because of\n-fno-c++-static-destructors or [[clang::no_destroy]]) doesn\'t count as a use of\nthe destructor, so we don\'t do any access checking or mark it referenced. We\nalso don\'t emit -Wexit-time-destructors for these variables.\n\nrdar://21734598\n\nDifferential revision: https://reviews.llvm.org/D50994\n\nllvm-svn: 340306"},
		[k]={{P,8430,"static void handleDestroyAttr(Sema &S, Decl *D, const ParsedAttr &A) {\n  if (!cast<VarDecl>(D)->hasGlobalStorage()) {\n    S.Diag(D->getLocation(), diag::err_destroy_attr_on_non_static_var) << (A.getKind() == ParsedAttr::AT_AlwaysDestroy);"}},
		[l]={
			["clang/test/SemaCXX/no_destroy.cpp"]={"clang/test/SemaCXX/no_destroy.cpp:35:29: error: no_destroy attribute can only be applied to a variable with static or thread storage duration","clang/test/SemaCXX/no_destroy.cpp:36:33: error: always_destroy attribute can only be applied to a variable with static or thread storage duration"}
		}
	},
	["err_destroying_operator_delete_not_usual"]={
		[i]={{nil,y,"err_destroying_operator_delete_not_usual"}},
		[b]={{nil,y,"destroying operator delete can have only an optional size and optional alignment parameter"}},
		[c]={{nil,y,"destroying operator delete can have only an optional size and optional alignment parameter"}},
		[e]=d,
		[f]="destroying operator delete can have only an optional size and optional alignment parameter",
		[g]=a,
		[h]={{nil,y,m}},
		[j]={"5b34958b46dc",1507859736,"Support for destroying operator delete, per C++2a proposal P0722.","Support for destroying operator delete, per C++2a proposal P0722.\n\nThis feature is not (yet) approved by the C++ committee, so this is liable to\nbe reverted or significantly modified based on committee feedback.\n\nNo functionality change intended for existing code (a new type must be defined\nin namespace std to take advantage of this feature).\n\nllvm-svn: 315662"},
		[k]={{r,16111,"static bool CheckOperatorDeleteDeclaration(Sema &SemaRef, FunctionDecl *FnDecl) {\n  // ...\n  // C++ P0722:\n  //   A destroying operator delete shall be a usual deallocation function.\n  if (MD && !MD->getParent()->isDependentContext() && MD->isDestroyingOperatorDelete() && !SemaRef.isUsualDeallocationFunction(MD)) {\n    SemaRef.Diag(MD->getLocation(), diag::err_destroying_operator_delete_not_usual);"}},
		[l]={
			["clang/test/SemaCXX/cxx2a-destroying-delete.cpp"]={"clang/test/SemaCXX/cxx2a-destroying-delete.cpp:26:8: error: destroying operator delete can have only an optional size and optional alignment parameter"}
		}
	},
	["err_destructor_cannot_be"]={
		[i]="err_destructor_cannot_be",
		[b]="destructor cannot be declared \'%0\'",
		[c]="destructor cannot be declared \'A\'",
		[e]=d,
		[f]="destructor cannot be declared \'(.*?)\'",
		[g]=a,
		[h]=m,
		[j]={hb,1236199783,db,cb},
		[k]={{r,10887,"/// 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  // C++ [class.dtor]p2:\n  //   A destructor is used to destroy objects of its class type. A\n  //   destructor takes no parameters, and no return type can be\n  //   specified for it (not even void). The address of a destructor\n  //   shall not be taken. A destructor shall not be static. A\n  //   destructor can be invoked for a const, volatile or const\n  //   volatile object. A destructor shall not be declared const,\n  //   volatile or const volatile (9.3.2).\n  if (SC == SC_Static) {\n    if (!D.isInvalidType())\n      Diag(D.getIdentifierLoc(), diag::err_destructor_cannot_be) << \"static\" << SourceRange(D.getDeclSpec().getStorageClassSpecLoc()) << SourceRange(D.getIdentifierLoc()) << FixItHint::CreateRemoval(D.getDeclSpec().getStorageClassSpecLoc());"}}
	},
	["err_destructor_expr_mismatch"]={
		[i]={{nil,A,"err_destructor_expr_mismatch"}},
		[b]={{nil,A,"identifier %0 in object destruction expression does not name the type %1 of the object being destroyed"}},
		[c]={{nil,A,"identifier A in object destruction expression does not name the type B of the object being destroyed"}},
		[e]=d,
		[f]="identifier (.*?) in object destruction expression does not name the type (.*?) of the object being destroyed",
		[g]=a,
		[h]={{nil,A,m}},
		[j]={"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"},
		[k]={{K,453,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n  // ...\n  if (FoundDecls.empty()) {\n  // ...\n  } else if (!SearchType.isNull() && FoundDecls.size() == 1) {\n  // ...\n  } else {\n    Diag(NameLoc, SearchType.isNull() ? diag::err_destructor_name_nontype : diag::err_destructor_expr_mismatch) << &II << SearchType << MakeFixItHint();"}}
	},
	["err_destructor_expr_nontype"]={
		[i]={{nil,A,"err_destructor_expr_nontype"}},
		[b]={{nil,A,"identifier %0 in object destruction expression does not name a type"}},
		[c]={{nil,A,"identifier A in object destruction expression does not name a type"}},
		[e]=d,
		[f]="identifier (.*?) in object destruction expression does not name a type",
		[g]=a,
		[h]={{nil,A,m}},
		[j]={"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"},
		[k]={{K,448,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n  // ...\n  if (FoundDecls.empty()) {\n  // ...\n  } else if (!SearchType.isNull() && FoundDecls.size() == 1) {\n    if (auto *TD = dyn_cast<TypeDecl>(FoundDecls[0]->getUnderlyingDecl())) {\n    // ...\n    } else {\n      Diag(NameLoc, diag::err_destructor_expr_nontype) << &II << MakeFixItHint();"}}
	},
	["err_destructor_expr_type_mismatch"]={
		[i]="err_destructor_expr_type_mismatch",
		[b]="destructor type %0 in object destruction expression does not match the type %1 of the object being destroyed",
		[c]="destructor type A in object destruction expression does not match the type B of the object being destroyed",
		[e]=d,
		[f]="destructor type (.*?) in object destruction expression does not match the type (.*?) of the object being destroyed",
		[g]=a,
		[h]=m,
		[j]={"4cf85a725af0",1299277928,"When clearing a LookupResult structure, clear out the naming class,","When clearing a LookupResult structure, clear out the naming class,\ntoo. Fixes PR7900.\n\nWhile I\'m in this area, improve the diagnostic when the type being\ndestroyed doesn\'t match either of the types we found.\n\nllvm-svn: 127041"},
		[k]={{K,445,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n  // ...\n  if (FoundDecls.empty()) {\n  // ...\n  } else if (!SearchType.isNull() && FoundDecls.size() == 1) {\n    if (auto *TD = dyn_cast<TypeDecl>(FoundDecls[0]->getUnderlyingDecl())) {\n      // ...\n      Diag(NameLoc, diag::err_destructor_expr_type_mismatch) << T << SearchType << MakeFixItHint();"},{K,488,"ParsedType Sema::getDestructorTypeForDecltype(const DeclSpec &DS, ParsedType ObjectType) {\n  // ...\n  if (!SearchType.isNull() && !SearchType->isDependentType() && !Context.hasSameUnqualifiedType(T, SearchType)) {\n    Diag(DS.getTypeSpecTypeLoc(), diag::err_destructor_expr_type_mismatch) << T << SearchType;"}},
		[l]={
			["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:28:7: error: destructor type \'Bar\' (aka \'Foo\') in object destruction expression does not match the type \'A\' of the object being destroyed"}
		}
	},
	["err_destructor_name"]={
		[i]="err_destructor_name",
		[b]="expected the class name after \'~\' to name the enclosing class",
		[c]="expected the class name after \'~\' to name the enclosing class",
		[e]=d,
		[f]="expected the class name after \'~\' to name the enclosing class",
		[g]=a,
		[h]=m,
		[j]={"b154ecafa62f",1248190130,"Diagnose when a destructor uses a unrelated class type as its name.","Diagnose when a destructor uses a unrelated class type as its name.\n\nllvm-svn: 76577"},
		[k]={{F,11921,"/// Perform semantic checking of a new function declaration.\n///\n/// Performs semantic analysis of the new function declaration\n/// NewFD. This routine performs all semantic checking that does not\n/// require the actual declarator involved in the declaration, and is\n/// used both for the declaration of functions as they are parsed\n/// (called via ActOnDeclarator) and for the declaration of functions\n/// that have been instantiated via C++ template instantiation (called\n/// via InstantiateDecl).\n///\n/// \\param IsMemberSpecialization whether this new function declaration is\n/// a member specialization (that replaces any definition provided by the\n/// previous declaration).\n///\n/// This sets NewFD->isInvalidDecl() to true if there was an error.\n///\n/// \\returns true if the function declaration is a redeclaration.\nbool Sema::CheckFunctionDeclaration(Scope *S, FunctionDecl *NewFD, LookupResult &Previous, bool IsMemberSpecialization, bool DeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // C++-specific checks.\n    if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(NewFD)) {\n    // ...\n    } else if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(NewFD)) {\n      // We check here for invalid destructor names.\n      // If we have a friend destructor declaration that is dependent, we can\'t\n      // diagnose right away because cases like this are still valid:\n      // template <class T> struct A { friend T::X::~Y(); };\n      // struct B { struct Y { ~Y(); }; using X = Y; };\n      // template struct A<B>;\n      if (NewFD->getFriendObjectKind() == Decl::FriendObjectKind::FOK_None || !Destructor->getThisType()->isDependentType()) {\n        // ...\n        if (NewFD->getDeclName() != Name) {\n          Diag(NewFD->getLocation(), diag::err_destructor_name);"}},
		[l]={
			["clang/test/SemaCXX/member-class-11.cpp"]={"clang/test/SemaCXX/member-class-11.cpp:9:3: error: expected the class name after \'~\' to name the enclosing class","clang/test/SemaCXX/member-class-11.cpp:26:3: error: expected the class name after \'~\' to name the enclosing class","clang/test/SemaCXX/member-class-11.cpp:73:13: error: expected the class name after \'~\' to name the enclosing class","clang/test/SemaCXX/member-class-11.cpp:78:13: error: expected the class name after \'~\' to name the enclosing class"}
		}
	},
	["err_destructor_name_nontype"]={
		[i]={{nil,A,"err_destructor_name_nontype"}},
		[b]={{nil,A,"identifier %0 after \'~\' in destructor name does not name a type"}},
		[c]={{nil,A,"identifier A after \'~\' in destructor name does not name a type"}},
		[e]=d,
		[f]="identifier (.*?) after \'~\' in destructor name does not name a type",
		[g]=a,
		[h]={{nil,A,m}},
		[j]={"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"},
		[k]={{K,452,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n  // ...\n  if (FoundDecls.empty()) {\n  // ...\n  } else if (!SearchType.isNull() && FoundDecls.size() == 1) {\n  // ...\n  } else {\n    Diag(NameLoc, SearchType.isNull() ? diag::err_destructor_name_nontype : diag::err_destructor_expr_mismatch) << &II << SearchType << MakeFixItHint();"}},
		[l]={
			["clang/test/SemaCXX/GH59446.cpp"]={"clang/test/SemaCXX/GH59446.cpp:10:20: error: identifier \'X\' after \'~\' in destructor name does not name a type"}
		}
	},
	["err_destructor_not_member"]={
		[i]="err_destructor_not_member",
		[b]="destructor must be a non-static member function",
		[c]="destructor must be a non-static member function",
		[e]=d,
		[f]="destructor must be a non\\-static member function",
		[g]=a,
		[h]=m,
		[j]={hb,1236199783,db,cb},
		[k]={{F,9225,"static FunctionDecl *CreateNewFunctionDecl(Sema &SemaRef, Declarator &D, DeclContext *DC, QualType &R, TypeSourceInfo *TInfo, StorageClass SC, bool &IsVirtualOkay) {\n  // ...\n  if (Name.getNameKind() == DeclarationName::CXXConstructorName) {\n  // ...\n  } else if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n    // This is a C++ destructor declaration.\n    if (DC->isRecord()) {\n    // ...\n    } else {\n      SemaRef.Diag(D.getIdentifierLoc(), diag::err_destructor_not_member);"}}
	},
	["err_destructor_redeclared"]={
		[i]="err_destructor_redeclared",
		[b]="destructor cannot be redeclared",
		[c]="destructor cannot be redeclared",
		[e]=d,
		[f]="destructor cannot be redeclared",
		[g]=a,
		[h]=m,
		[j]={hb,1236199783,db,cb},
		[k]={{F,4001,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    if (OldMethod && NewMethod) {\n      // ...\n      if (!isFriend && NewMethod->getLexicalDeclContext()->isRecord() && !IsClassScopeExplicitSpecialization) {\n        // ...\n        // C++ [class.mem]p1:\n        //   [...] A member shall not be declared twice in the\n        //   member-specification, except that a nested class or member\n        //   class template can be declared and then later defined.\n        if (!inTemplateInstantiation()) {\n          // ...\n          if (isa<CXXConstructorDecl>(OldMethod))\n          // ...\n          else if (isa<CXXDestructorDecl>(NewMethod))\n            NewDiag = diag::err_destructor_redeclared;"}},
		[l]={
			["clang/test/SemaCXX/cxx0x-cursory-default-delete.cpp"]={"clang/test/SemaCXX/cxx0x-cursory-default-delete.cpp:143:3: error: destructor cannot be redeclared","clang/test/SemaCXX/cxx0x-cursory-default-delete.cpp:154:3: error: destructor cannot be redeclared"}
		}
	},
	["err_destructor_return_type"]={
		[i]="err_destructor_return_type",
		[b]="destructor cannot have a return type",
		[c]="destructor cannot have a return type",
		[e]=d,
		[f]="destructor cannot have a return type",
		[g]=a,
		[h]=m,
		[j]={hb,1236199783,db,cb},
		[k]={{r,10904,"/// 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 (!D.isInvalidType()) {\n    // Destructors don\'t have return types, but the parser will\n    // happily parse something like:\n    //\n    //   class X {\n    //     float ~X();\n    //   };\n    //\n    // The return type will be eliminated later.\n    if (D.getDeclSpec().hasTypeSpecifier())\n      Diag(D.getIdentifierLoc(), diag::err_destructor_return_type) << SourceRange(D.getDeclSpec().getTypeSpecTypeLoc()) << SourceRange(D.getIdentifierLoc());"},{r,10908,"/// 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 (!D.isInvalidType()) {\n    // Destructors don\'t have return types, but the parser will\n    // happily parse something like:\n    //\n    //   class X {\n    //     float ~X();\n    //   };\n    //\n    // The return type will be eliminated later.\n    if (D.getDeclSpec().hasTypeSpecifier())\n    // ...\n    else if (unsigned TypeQuals = D.getDeclSpec().getTypeQualifiers()) {\n      diagnoseIgnoredQualifiers(diag::err_destructor_return_type, TypeQuals, SourceLocation(), D.getDeclSpec().getConstSpecLoc(), D.getDeclSpec().getVolatileSpecLoc(), D.getDeclSpec().getRestrictSpecLoc(), D.getDeclSpec().getAtomicSpecLoc());"}}
	},
	["err_destructor_template"]={
		[i]="err_destructor_template",
		[b]="destructor cannot be declared as a template",
		[c]="destructor cannot be declared as a template",
		[e]=d,
		[f]="destructor cannot be declared as a template",
		[g]=a,
		[h]=m,
		[j]={"93ded320269f",1299278755,"Diagnose destructor templates. Fixes PR7904.","Diagnose destructor templates. Fixes PR7904.\n\nllvm-svn: 127042"},
		[k]={{F,9796,"NamedDecl *Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, TypeSourceInfo *TInfo, LookupResult &Previous, MultiTemplateParamsArg TemplateParamListsRef, bool &AddToScope) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    if (TemplateParams) {\n      // ...\n      if (TemplateParams->size() > 0) {\n        // ...\n        // A destructor cannot be a template.\n        if (Name.getNameKind() == DeclarationName::CXXDestructorName) {\n          Diag(NewFD->getLocation(), diag::err_destructor_template);"}},
		[l]={
			["clang/test/SemaTemplate/destructor-template.cpp"]={"clang/test/SemaTemplate/destructor-template.cpp:57:8: error: destructor cannot be declared as a template","clang/test/SemaTemplate/destructor-template.cpp:93:3: error: destructor cannot be declared as a template","clang/test/SemaTemplate/destructor-template.cpp:99:3: error: destructor cannot be declared as a template"}
		}
	},
	["err_destructor_template_id"]={
		[i]="err_destructor_template_id",
		[b]="destructor name %0 does not refer to a template",
		[c]="destructor name A does not refer to a template",
		[e]=d,
		[f]="destructor name (.*?) does not refer to a template",
		[g]=a,
		[h]=Q,
		[j]={"fe17d2550b84",1266347380,"Improve parsing and instantiation of destructor names, so that we can","Improve parsing and instantiation of destructor names, so that we can\nnow cope with the destruction of types named as dependent templates,\ne.g.,\n\n  y->template Y<T>::~Y()\n\nNominally, we implement C++0x [basic.lookup.qual]p6. However, we don\'t\nfollow the letter of the standard here because that would fail to\nparse\n\n  template<typename T, typename U>\n  X0<T, U>::~X0() { }\n\nproperly. The problem is captured in core issue 339, which gives some\n(but not enough!) guidance. I expect to revisit this code when the\nresolution of 339 is clear, and/or we start capturing better source\ninformation for DeclarationNames.\n\nFixes PR6152.\n\nllvm-svn: 96367"},
		[k]={{Ob,2524,"/// Finish parsing a C++ unqualified-id that is a template-id of\n/// some form.\n///\n/// This routine is invoked when a \'<\' is encountered after an identifier or\n/// operator-function-id is parsed by \\c ParseUnqualifiedId() to determine\n/// whether the unqualified-id is actually a template-id. This routine will\n/// then parse the template arguments and form the appropriate template-id to\n/// return to the caller.\n///\n/// \\param SS the nested-name-specifier that precedes this template-id, if\n/// we\'re actually parsing a qualified-id.\n///\n/// \\param ObjectType if this unqualified-id occurs within a member access\n/// expression, the type of the base object whose member is being accessed.\n///\n/// \\param ObjectHadErrors this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n///\n/// \\param Name for constructor and destructor names, this is the actual\n/// identifier that may be a template-name.\n///\n/// \\param NameLoc the location of the class-name in a constructor or\n/// destructor.\n///\n/// \\param EnteringContext whether we\'re entering the scope of the\n/// nested-name-specifier.\n///\n/// \\param Id as input, describes the template-name or operator-function-id\n/// that precedes the \'<\'. If template arguments were parsed successfully,\n/// will be updated with the template-id.\n///\n/// \\param AssumeTemplateId When true, this routine will assume that the name\n/// refers to a template without performing name lookup to verify.\n///\n/// \\returns true if a parse error occurred, false otherwise.\nbool Parser::ParseUnqualifiedIdTemplateId(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, SourceLocation TemplateKWLoc, IdentifierInfo *Name, SourceLocation NameLoc, bool EnteringContext, UnqualifiedId &Id, bool AssumeTemplateId) {\n  // ...\n  case UnqualifiedIdKind::IK_DestructorName: {\n    // ...\n    if (ObjectType) {\n    // ...\n    } else {\n      // ...\n      if (TNK == TNK_Non_template && !Id.DestructorName.get()) {\n        Diag(NameLoc, diag::err_destructor_template_id) << Name << SS.getRange();"}},
		[l]={
			["clang/test/Parser/cxx-class.cpp"]={"clang/test/Parser/cxx-class.cpp:214:17: error: destructor name \'T\' does not refer to a template","clang/test/Parser/cxx-class.cpp:216:17: error: destructor name \'T\' does not refer to a template"}
		}
	},
	["err_destructor_tilde_identifier"]={
		[i]="err_destructor_tilde_identifier",
		[b]="expected a class name after \'~\' to name a destructor",
		[c]="expected a class name after \'~\' to name a destructor",
		[e]=d,
		[f]="expected a class name after \'~\' to name a destructor",
		[g]=a,
		[h]=Q,
		[j]={"fe17d2550b84",1266347380,"Improve parsing and instantiation of destructor names, so that we can","Improve parsing and instantiation of destructor names, so that we can\nnow cope with the destruction of types named as dependent templates,\ne.g.,\n\n  y->template Y<T>::~Y()\n\nNominally, we implement C++0x [basic.lookup.qual]p6. However, we don\'t\nfollow the letter of the standard here because that would fail to\nparse\n\n  template<typename T, typename U>\n  X0<T, U>::~X0() { }\n\nproperly. The problem is captured in core issue 339, which gives some\n(but not enough!) guidance. I expect to revisit this code when the\nresolution of 339 is clear, and/or we start capturing better source\ninformation for DeclarationNames.\n\nFixes PR6152.\n\nllvm-svn: 96367"},
		[k]={{Ob,1820,"/// Parse a C++ pseudo-destructor expression after the base,\n/// . or -> operator, and nested-name-specifier have already been\n/// parsed. We\'re handling this fragment of the grammar:\n///\n///       postfix-expression: [C++2a expr.post]\n///         postfix-expression . template[opt] id-expression\n///         postfix-expression -> template[opt] id-expression\n///\n///       id-expression:\n///         qualified-id\n///         unqualified-id\n///\n///       qualified-id:\n///         nested-name-specifier template[opt] unqualified-id\n///\n///       nested-name-specifier:\n///         type-name ::\n///         decltype-specifier ::    FIXME: not implemented, but probably only\n///                                         allowed in C++ grammar by accident\n///         nested-name-specifier identifier ::\n///         nested-name-specifier template[opt] simple-template-id ::\n///         [...]\n///\n///       unqualified-id:\n///         ~ type-name\n///         ~ decltype-specifier\n///         [...]\n///\n/// ... where the all but the last component of the nested-name-specifier\n/// has already been parsed, and the base expression is not of a non-dependent\n/// class type.\nExprResult Parser::ParseCXXPseudoDestructor(Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, CXXScopeSpec &SS, ParsedType ObjectType) {\n  // ...\n  if (!Tok.is(tok::identifier)) {\n    Diag(Tok, diag::err_destructor_tilde_identifier);"},{Ob,3068,"/// Parse a C++ unqualified-id (or a C identifier), which describes the\n/// name of an entity.\n///\n/// \\code\n///       unqualified-id: [C++ expr.prim.general]\n///         identifier\n///         operator-function-id\n///         conversion-function-id\n/// [C++0x] literal-operator-id [TODO]\n///         ~ class-name\n///         template-id\n///\n/// \\endcode\n///\n/// \\param SS The nested-name-specifier that preceded this unqualified-id. If\n/// non-empty, then we are parsing the unqualified-id of a qualified-id.\n///\n/// \\param ObjectType if this unqualified-id occurs within a member access\n/// expression, the type of the base object whose member is being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we are entering the scope of the\n/// nested-name-specifier.\n///\n/// \\param AllowDestructorName whether we allow parsing of a destructor name.\n///\n/// \\param AllowConstructorName whether we allow parsing a constructor name.\n///\n/// \\param AllowDeductionGuide whether we allow parsing a deduction guide name.\n///\n/// \\param Result on a successful parse, contains the parsed unqualified-id.\n///\n/// \\returns true if parsing fails, false otherwise.\nbool Parser::ParseUnqualifiedId(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool AllowDestructorName, bool AllowConstructorName, bool AllowDeductionGuide, SourceLocation *TemplateKWLoc, UnqualifiedId &Result) {\n  // ...\n  if (getLangOpts().CPlusPlus && (AllowDestructorName || SS.isSet()) && Tok.is(tok::tilde)) {\n    // ...\n    // Parse the class-name.\n    if (Tok.isNot(tok::identifier)) {\n      Diag(Tok, diag::err_destructor_tilde_identifier);"}},
		[l]={
			["clang/test/CXX/special/class.dtor/p10-0x.cpp"]={"clang/test/CXX/special/class.dtor/p10-0x.cpp:26:12: error: expected a class name after \'~\' to name a destructor"}
		}
	},
	["err_destructor_tilde_scope"]={
		[i]="err_destructor_tilde_scope",
		[b]="\'~\' in destructor name should be after nested name specifier",
		[c]="\'~\' in destructor name should be after nested name specifier",
		[e]=d,
		[f]="\'~\' in destructor name should be after nested name specifier",
		[g]=a,
		[h]=Q,
		[j]={"efa6f736e63a",1409969172,"Add error, recovery and fixit for \"~A::A() {...}\".","Add error, recovery and fixit for \"~A::A() {...}\".\n\nllvm-svn: 217302"},
		[k]={{Ob,3091,"/// Parse a C++ unqualified-id (or a C identifier), which describes the\n/// name of an entity.\n///\n/// \\code\n///       unqualified-id: [C++ expr.prim.general]\n///         identifier\n///         operator-function-id\n///         conversion-function-id\n/// [C++0x] literal-operator-id [TODO]\n///         ~ class-name\n///         template-id\n///\n/// \\endcode\n///\n/// \\param SS The nested-name-specifier that preceded this unqualified-id. If\n/// non-empty, then we are parsing the unqualified-id of a qualified-id.\n///\n/// \\param ObjectType if this unqualified-id occurs within a member access\n/// expression, the type of the base object whose member is being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we are entering the scope of the\n/// nested-name-specifier.\n///\n/// \\param AllowDestructorName whether we allow parsing of a destructor name.\n///\n/// \\param AllowConstructorName whether we allow parsing a constructor name.\n///\n/// \\param AllowDeductionGuide whether we allow parsing a deduction guide name.\n///\n/// \\param Result on a successful parse, contains the parsed unqualified-id.\n///\n/// \\returns true if parsing fails, false otherwise.\nbool Parser::ParseUnqualifiedId(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool AllowDestructorName, bool AllowConstructorName, bool AllowDeductionGuide, SourceLocation *TemplateKWLoc, UnqualifiedId &Result) {\n  // ...\n  if (getLangOpts().CPlusPlus && (AllowDestructorName || SS.isSet()) && Tok.is(tok::tilde)) {\n    // ...\n    if (NextToken().is(tok::coloncolon)) {\n      // ...\n      if (Tok.isNot(tok::identifier) || NextToken().is(tok::coloncolon) || !SS.isSet()) {\n        Diag(TildeLoc, diag::err_destructor_tilde_scope);"},{Ob,3096,"/// Parse a C++ unqualified-id (or a C identifier), which describes the\n/// name of an entity.\n///\n/// \\code\n///       unqualified-id: [C++ expr.prim.general]\n///         identifier\n///         operator-function-id\n///         conversion-function-id\n/// [C++0x] literal-operator-id [TODO]\n///         ~ class-name\n///         template-id\n///\n/// \\endcode\n///\n/// \\param SS The nested-name-specifier that preceded this unqualified-id. If\n/// non-empty, then we are parsing the unqualified-id of a qualified-id.\n///\n/// \\param ObjectType if this unqualified-id occurs within a member access\n/// expression, the type of the base object whose member is being accessed.\n///\n/// \\param ObjectHadErrors if this unqualified-id occurs within a member access\n/// expression, indicates whether the original subexpressions had any errors.\n/// When true, diagnostics for missing \'template\' keyword will be supressed.\n///\n/// \\param EnteringContext whether we are entering the scope of the\n/// nested-name-specifier.\n///\n/// \\param AllowDestructorName whether we allow parsing of a destructor name.\n///\n/// \\param AllowConstructorName whether we allow parsing a constructor name.\n///\n/// \\param AllowDeductionGuide whether we allow parsing a deduction guide name.\n///\n/// \\param Result on a successful parse, contains the parsed unqualified-id.\n///\n/// \\returns true if parsing fails, false otherwise.\nbool Parser::ParseUnqualifiedId(CXXScopeSpec &SS, ParsedType ObjectType, bool ObjectHadErrors, bool EnteringContext, bool AllowDestructorName, bool AllowConstructorName, bool AllowDeductionGuide, SourceLocation *TemplateKWLoc, UnqualifiedId &Result) {\n  // ...\n  if (getLangOpts().CPlusPlus && (AllowDestructorName || SS.isSet()) && Tok.is(tok::tilde)) {\n    // ...\n    if (NextToken().is(tok::coloncolon)) {\n      // ...\n      Diag(TildeLoc, diag::err_destructor_tilde_scope) << FixItHint::CreateRemoval(TildeLoc) << FixItHint::CreateInsertion(Tok.getLocation(), \"~\");"}},
		[l]={
			["clang/test/Parser/cxx-class.cpp"]={"clang/test/Parser/cxx-class.cpp:178:3: error: \'~\' in destructor name should be after nested name specifier","clang/test/Parser/cxx-class.cpp:182:15: error: \'~\' in destructor name should be after nested name specifier","clang/test/Parser/cxx-class.cpp:185:7: error: \'~\' in destructor name should be after nested name specifier","clang/test/Parser/cxx-class.cpp:186:8: error: \'~\' in destructor name should be after nested name specifier","clang/test/Parser/cxx-class.cpp:190:3: error: \'~\' in destructor name should be after nested name specifier","clang/test/Parser/cxx-class.cpp:193:3: error: \'~\' in destructor name should be after nested name specifier","clang/test/Parser/cxx-class.cpp:195:3: error: \'~\' in destructor name should be after nested name specifier","clang/test/Parser/cxx-class.cpp:196:3: error: \'~\' in destructor name should be after nested name specifier","clang/test/Parser/cxx-class.cpp:201:5: error: \'~\' in destructor name should be after nested name specifier","clang/test/Parser/cxx-class.cpp:206:5: error: \'~\' in destructor name should be after nested name specifier","clang/test/Parser/cxx-class.cpp:210:5: error: \'~\' in destructor name should be after nested name specifier","clang/test/Parser/cxx-class.cpp:216:13: error: \'~\' in destructor name should be after nested name specifier"}
		}
	},
	["err_destructor_variadic"]={
		[i]="err_destructor_variadic",
		[b]="destructor cannot be variadic",
		[c]="destructor cannot be variadic",
		[e]=d,
		[f]="destructor cannot be variadic",
		[g]=a,
		[h]=m,
		[j]={hb,1236199783,db,cb},
		[k]={{r,10941,"/// 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  // Make sure the destructor isn\'t variadic.\n  if (FTI.isVariadic) {\n    Diag(D.getIdentifierLoc(), diag::err_destructor_variadic);"}}
	},
	["err_destructor_with_params"]={
		[i]="err_destructor_with_params",
		[b]="destructor cannot have any parameters",
		[c]="destructor cannot have any parameters",
		[e]=d,
		[f]="destructor cannot have any parameters",
		[g]=a,
		[h]=m,
		[j]={hb,1236199783,db,cb},
		[k]={{r,10932,"/// 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  // Make sure we don\'t have any parameters.\n  if (FTIHasNonVoidParameters(FTI)) {\n    Diag(D.getIdentifierLoc(), diag::err_destructor_with_params);"}},
		[l]={
			["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p1.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/dcl.fct.def.default/p1.cpp:15:3: error: destructor cannot have any parameters"}
		}
	},
	["err_diagnose_if_invalid_diagnostic_type"]={
		[i]="err_diagnose_if_invalid_diagnostic_type",
		[b]="invalid diagnostic type for \'diagnose_if\'; use \"error\" or \"warning\" instead",
		[c]="invalid diagnostic type for \'diagnose_if\'; use \"error\" or \"warning\" instead",
		[e]=d,
		[f]="invalid diagnostic type for \'diagnose_if\'; use \"error\" or \"warning\" instead",
		[g]=a,
		[h]=m,
		[j]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang.","Add the diagnose_if attribute to clang.\n\n`diagnose_if` can be used to have clang emit either warnings or errors\nfor function calls that meet user-specified conditions. For example:\n\n```\nconstexpr int foo(int a)\n  __attribute__((diagnose_if(a > 10, \"configurations with a > 10 are \"\n                                      \"expensive.\", \"warning\")));\n\nint f1 = foo(9);\nint f2 = foo(10); // warning: configuration with a > 10 are expensive.\nint f3 = foo(f2);\n```\n\nIt currently only emits diagnostics in cases where the condition is\nguaranteed to always be true. So, the following code will emit no\nwarnings:\n\n```\nconstexpr int bar(int a) {\n  foo(a);\n  return 0;\n}\n\nconstexpr int i = bar(10);\n```\n\nWe hope to support optionally emitting diagnostics for cases like that\n(and emitting runtime checks) in the future.\n\nRelease notes will appear shortly. :)\n\nDifferential Revision: https://reviews.llvm.org/D27424\n\nllvm-svn: 291418"},
		[k]={{P,1112,"static void handleDiagnoseIfAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  if (!DiagnoseIfAttr::ConvertStrToDiagnosticType(DiagTypeStr, DiagType)) {\n    S.Diag(AL.getArgAsExpr(2)->getBeginLoc(), diag::err_diagnose_if_invalid_diagnostic_type);"}},
		[l]={
			["clang/test/Sema/diagnose_if.c"]={"clang/test/Sema/diagnose_if.c:10:41: error: invalid diagnostic type for \'diagnose_if\'; use \"error\" or \"warning\" instead","clang/test/Sema/diagnose_if.c:11:41: error: invalid diagnostic type for \'diagnose_if\'; use \"error\" or \"warning\" instead","clang/test/Sema/diagnose_if.c:12:42: error: invalid diagnostic type for \'diagnose_if\'; use \"error\" or \"warning\" instead"}
		}
	},
	["err_different_asm_label"]={
		[i]="err_different_asm_label",
		[b]="conflicting asm label",
		[c]="conflicting asm label",
		[e]=d,
		[f]="conflicting asm label",
		[g]=a,
		[h]=m,
		[j]={"6ee53bc0850c",1449869335,"Error on redeclaring with a conflicting asm label and on redeclaring with an asm label after the fir...","Error on redeclaring with a conflicting asm label and on redeclaring with an asm label after the first ODR-use. Detects problems like the one in PR22830 where gcc and clang both compiled the file but with different behaviour.\n\nllvm-svn: 255371"},
		[k]={{F,3240,"/// mergeDeclAttributes - Copy attributes from the Old decl to the New one.\nvoid Sema::mergeDeclAttributes(NamedDecl *New, Decl *Old, AvailabilityMergeKind AMK) {\n  // ...\n  if (AsmLabelAttr *NewA = New->getAttr<AsmLabelAttr>()) {\n    if (AsmLabelAttr *OldA = Old->getAttr<AsmLabelAttr>()) {\n      if (!OldA->isEquivalent(NewA)) {\n        // ...\n        Diag(New->getLocation(), diag::err_different_asm_label);"}},
		[l]={
			["clang/test/Sema/asm-label.c"]={"clang/test/Sema/asm-label.c:13:6: error: conflicting asm label","clang/test/Sema/asm-label.c:24:5: error: conflicting asm label"}
		}
	},
	["err_different_language_linkage"]={
		[i]="err_different_language_linkage",
		[b]="declaration of %0 has a different language linkage",
		[c]="declaration of A has a different language linkage",
		[e]=d,
		[f]="declaration of (.*?) has a different language linkage",
		[g]=a,
		[h]=m,
		[j]={"cffa95d73f78",1356580580,"Implement dcl.link paragraph 5.","Implement dcl.link paragraph 5.\n\nThe language linkage of redeclarations must match. GCC was already reporting\nan error for this.\n\nllvm-svn: 171139"},
		[k]={{F,4088,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  // ...\n  if (getLangOpts().CPlusPlus) {\n    // ...\n    if (haveIncompatibleLanguageLinkages(Old, New)) {\n      // As a special case, retain the language linkage from previous\n      // declarations of a friend function as an extension.\n      //\n      // This liberal interpretation of C++ [class.friend]p3 matches GCC/MSVC\n      // and is useful because there\'s otherwise no way to specify language\n      // linkage within class scope.\n      //\n      // Check cautiously as the friend object kind isn\'t yet complete.\n      if (New->getFriendObjectKind() != Decl::FOK_None) {\n      // ...\n      } else {\n        Diag(New->getLocation(), diag::err_different_language_linkage) << New;"},{F,4738,"/// 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 (haveIncompatibleLanguageLinkages(Old, New)) {\n    Diag(New->getLocation(), diag::err_different_language_linkage) << New;"}},
		[l]={
			["clang/test/Sema/pragma-ms-alloc-text.cpp"]={"clang/test/Sema/pragma-ms-alloc-text.cpp:36:17: error: declaration of \'foo5\' has a different language linkage"}
		}
	},
	["err_different_pass_object_size_params"]={
		[i]="err_different_pass_object_size_params",
		[b]="conflicting pass_object_size attributes on parameters",
		[c]="conflicting pass_object_size attributes on parameters",
		[e]=d,
		[f]="conflicting pass_object_size attributes on parameters",
		[g]=a,
		[h]=m,
		[j]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang.","Add the `pass_object_size` attribute to clang.\n\n`pass_object_size` is our way of enabling `__builtin_object_size` to\nproduce high quality results without requiring inlining to happen\neverywhere.\n\nA link to the design doc for this attribute is available at the\nDifferential review link below.\n\nDifferential Revision: http://reviews.llvm.org/D13263\n\nllvm-svn: 254554"},
		[k]={{F,3897,"/// 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 pass_object_size params don\'t match up perfectly, this isn\'t a valid\n  // redeclaration.\n  if (Old->getNumParams() > 0 && Old->getNumParams() == New->getNumParams() && !hasIdenticalPassObjectSizeAttrs(Old, New)) {\n    Diag(New->getLocation(), diag::err_different_pass_object_size_params) << New->getDeclName();"}},
		[l]={
			["clang/test/Sema/pass-object-size.c"]={"clang/test/Sema/pass-object-size.c:26:6: error: conflicting pass_object_size attributes on parameters","clang/test/Sema/pass-object-size.c:28:6: error: conflicting pass_object_size attributes on parameters","clang/test/Sema/pass-object-size.c:31:6: error: conflicting pass_object_size attributes on parameters","clang/test/Sema/pass-object-size.c:65:6: error: conflicting pass_object_size attributes on parameters","clang/test/Sema/pass-object-size.c:68:6: error: conflicting pass_object_size attributes on parameters"}
		}
	},
	["err_different_return_type_for_overriding_virtual_function"]={
		[i]="err_different_return_type_for_overriding_virtual_function",
		[b]="virtual function %0 has a different return type %diff{($) than the function it overrides (which has return type $)|than the function it overrides}1,2",
		[c]={{nil,nil,{"virtual function A has a different return type ",{"(B) than the function it overrides (which has return type C)","than the function it overrides"}}}},
		[e]=d,
		[f]="virtual function (.*?) has a different return type (?:\\((.*?)\\) than the function it overrides \\(which has return type (.*?)\\)|than the function it overrides)",
		[g]=a,
		[h]=m,
		[j]={"f2a2e338ffec",1242263344,"Add return type checking for overriding virtual functions. We currently don\'t check covariance but t...","Add return type checking for overriding virtual functions. We currently don\'t check covariance but that\'s next.\n\nllvm-svn: 71759"},
		[k]={{r,18049,"bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New, const CXXMethodDecl *Old) {\n  // ...\n  // The return types aren\'t either both pointers or references to a class type.\n  if (NewClassTy.isNull()) {\n    Diag(New->getLocation(), diag::err_different_return_type_for_overriding_virtual_function) << New->getDeclName() << NewTy << OldTy << New->getReturnTypeSourceRange();"}},
		[l]={
			["clang/test/SemaCXX/PR7410.cpp"]={"clang/test/SemaCXX/PR7410.cpp:10:5: error: virtual function \'Foo\' has a different return type (\'X\') than the function it overrides (which has return type \'BaseReturn\')"}
		}
	},
	["err_digit_separator_not_between_digits"]={
		[i]="err_digit_separator_not_between_digits",
		[b]="digit separator cannot appear at %select{start|end}0 of digit sequence",
		[c]={{nil,nil,{"digit separator cannot appear at ",{"start","end"}," of digit sequence"}}},
		[e]=d,
		[f]="digit separator cannot appear at (?:start|end) of digit sequence",
		[g]=a,
		[h]=Mb,
		[j]={"fde948529789",1380166386,"Implement C++1y digit separator proposal (\' as a digit separator). This is not","Implement C++1y digit separator proposal (\' as a digit separator). This is not\nyet approved by full committee, but was unanimously supported by EWG.\n\nllvm-svn: 191417"},
		[k]={{fb,1259,"void NumericLiteralParser::checkSeparator(SourceLocation TokLoc, const char *Pos, CheckSeparatorKind IsAfterDigits) {\n  // ...\n  if (isDigitSeparator(*Pos)) {\n    Diags.Report(Lexer::AdvanceToTokenCharacter(TokLoc, Pos - ThisTokBegin, SM, LangOpts), diag::err_digit_separator_not_between_digits) << IsAfterDigits;"}},
		[l]={
			["clang/test/Lexer/c2x_digit_separators.c"]={"clang/test/Lexer/c2x_digit_separators.c:9:11: error: digit separator cannot appear at end of digit sequence","clang/test/Lexer/c2x_digit_separators.c:17:13: error: digit separator cannot appear at end of digit sequence","clang/test/Lexer/c2x_digit_separators.c:19:14: error: digit separator cannot appear at start of digit sequence","clang/test/Lexer/c2x_digit_separators.c:20:15: error: digit separator cannot appear at end of digit sequence","clang/test/Lexer/c2x_digit_separators.c:21:14: error: digit separator cannot appear at start of digit sequence","clang/test/Lexer/c2x_digit_separators.c:22:14: error: digit separator cannot appear at start of digit sequence","clang/test/Lexer/c2x_digit_separators.c:24:15: error: digit separator cannot appear at start of digit sequence","clang/test/Lexer/c2x_digit_separators.c:27:16: error: digit separator cannot appear at start of digit sequence","clang/test/Lexer/c2x_digit_separators.c:28:17: error: digit separator cannot appear at end of digit sequence","clang/test/Lexer/c2x_digit_separators.c:29:18: error: digit separator cannot appear at start of digit sequence","clang/test/Lexer/c2x_digit_separators.c:30:13: error: digit separator cannot appear at end of digit sequence","clang/test/Lexer/c2x_digit_separators.c:32:14: error: digit separator cannot appear at start of digit sequence","clang/test/Lexer/c2x_digit_separators.c:33:15: error: digit separator cannot appear at end of digit sequence","clang/test/Lexer/c2x_digit_separators.c:34:16: error: digit separator cannot appear at start of digit sequence","clang/test/Lexer/c2x_digit_separators.c:38:13: error: digit separator cannot appear at end of digit sequence","clang/test/Lexer/c2x_digit_separators.c:39:15: error: digit separator cannot appear at end of digit sequence"}
		}
	},
	["err_dimension_expr_not_constant_integer"]={
		[i]="err_dimension_expr_not_constant_integer",
		[b]="dimension expression does not evaluate to a constant unsigned int",
		[c]="dimension expression does not evaluate to a constant unsigned int",
		[e]=d,
		[f]="dimension expression does not evaluate to a constant unsigned int",
		[g]=a,
		[h]=m,
		[j]={"d35222283949",1303956406,"A few corrections to type traits that missed the last checkin","A few corrections to type traits that missed the last checkin\n\nllvm-svn: 130371"},
		[k]={{K,5877,"static uint64_t EvaluateArrayTypeTrait(Sema &Self, ArrayTypeTrait ATT, QualType T, Expr *DimExpr, SourceLocation KeyLoc) {\n  // ...\n  case ATT_ArrayExtent: {\n    // ...\n    if (Self.VerifyIntegerConstantExpression(DimExpr, &Value, diag::err_dimension_expr_not_constant_integer).isInvalid())"},{K,5881,"static uint64_t EvaluateArrayTypeTrait(Sema &Self, ArrayTypeTrait ATT, QualType T, Expr *DimExpr, SourceLocation KeyLoc) {\n  // ...\n  case ATT_ArrayExtent: {\n    // ...\n    if (Value.isSigned() && Value.isNegative()) {\n      Self.Diag(KeyLoc, diag::err_dimension_expr_not_constant_integer) << DimExpr->getSourceRange();"}}
	},
	["err_direct_selector_expression"]={
		[i]={{nil,v,"err_direct_selector_expression"}},
		[b]={{nil,v,"@selector expression formed with direct selector %0"}},
		[c]={{nil,v,"@selector expression formed with direct selector A"}},
		[e]=d,
		[f]="@selector expression formed with direct selector (.*?)",
		[g]=a,
		[h]={{nil,v,m}},
		[j]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining","[SYCL] Add sycl_kernel attribute for accelerated code outlining\n\nSYCL is single source offload programming model relying on compiler to\nseparate device code (i.e. offloaded to an accelerator) from the code\nexecuted on the host.\n\nHere is code example of the SYCL program to demonstrate compiler\noutlining work:\n\n```\nint foo(int x) { return ++x; }\nint bar(int x) { throw std::exception(\"CPU code only!\"); }\n...\nusing namespace cl::sycl;\nqueue Q;\nbuffer<int, 1> a(range<1>{1024});\nQ.submit([&](handler& cgh) {\n  auto A = a.get_access<access::mode::write>(cgh);\n  cgh.parallel_for<init_a>(range<1>{1024}, [=](id<1> index) {\n    A[index] = index[0] + foo(42);\n  });\n}\n...\n```\n\nSYCL device compiler must compile lambda expression passed to\ncl::sycl::handler::parallel_for method and function foo called from this\nlambda expression for an \"accelerator\". SYCL device compiler also must\nignore bar function as it\'s not required for offloaded code execution.\n\nThis patch adds the sycl_kernel attribute, which is used to mark code\npassed to cl::sycl::handler::parallel_for as \"accelerated code\".\n\nAttribute must be applied to function templates which parameters include\nat least \"kernel name\" and \"kernel function object\". These parameters\nwill be used to establish an ABI between the host application and\noffloaded part.\n\nReviewers: jlebar, keryell, Naghasan, ABataev, Anastasia, bader, aaron.ballman, rjmccall, rsmith\n\nReviewed By: keryell, bader\n\nSubscribers: mgorny, OlegM, ArturGainullin, agozillon, aaron.ballman, ebevhan, Anastasia, cfe-commits\n\nTags: #clang\n\nDifferential Revision: https://reviews.llvm.org/D60455\n\nSigned-off-by: Alexey Bader <alexey.bader@intel.com>"},
		[k]={{"clang/lib/Sema/SemaExprObjC.cpp",1324,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n  // ...\n  if (!Method) {\n  // ...\n  } else {\n    // ...\n    if (onlyDirect) {\n      Diag(AtLoc, diag::err_direct_selector_expression) << Method->getSelector();"}},
		[l]={
			["clang/test/SemaObjC/method-direct.m"]={"clang/test/SemaObjC/method-direct.m:167:10: error: @selector expression formed with direct selector \'direct2\'"}
		}
	},
	["err_disallowed_duplicate_attribute"]={
		[i]={{nil,o,"err_disallowed_duplicate_attribute"}},
		[b]={{nil,o,"attribute %0 cannot appear more than once on a declaration"}},
		[c]={{nil,o,"attribute A cannot appear more than once on a declaration"}},
		[e]=d,
		[f]="attribute (.*?) cannot appear more than once on a declaration",
		[g]=a,
		[h]={{nil,o,m}},
		[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"},
		[k]={{P,2070,"static void handleCPUSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Ensure we don\'t combine these with themselves, since that causes some\n  // confusing behavior.\n  if (AL.getParsedKind() == ParsedAttr::AT_CPUDispatch) {\n    // ...\n    if (const auto *Other = D->getAttr<CPUDispatchAttr>()) {\n      S.Diag(AL.getLoc(), diag::err_disallowed_duplicate_attribute) << AL;"},{P,2079,"static void handleCPUSpecificAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // Ensure we don\'t combine these with themselves, since that causes some\n  // confusing behavior.\n  if (AL.getParsedKind() == ParsedAttr::AT_CPUDispatch) {\n  // ...\n  } else if (AL.getParsedKind() == ParsedAttr::AT_CPUSpecific) {\n    // ...\n    if (const auto *Other = D->getAttr<CPUSpecificAttr>()) {\n      S.Diag(AL.getLoc(), diag::err_disallowed_duplicate_attribute) << AL;"},{P,3620,"static void handleTargetClonesAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  // ...\n  // Ensure we don\'t combine these with themselves, since that causes some\n  // confusing behavior.\n  if (const auto *Other = D->getAttr<TargetClonesAttr>()) {\n    S.Diag(AL.getLoc(), diag::err_disallowed_duplicate_attribute) << AL;"}},
		[l]={
			["clang/test/Sema/attr-target-clones.c"]={"clang/test/Sema/attr-target-clones.c:79:52: error: attribute \'target_clones\' cannot appear more than once on a declaration"}
		}
	},
	["err_distant_exception_spec"]={
		[i]="err_distant_exception_spec",
		[b]="exception specifications are not allowed beyond a single level of indirection",
		[c]="exception specifications are not allowed beyond a single level of indirection",
		[e]=d,
		[f]="exception specifications are not allowed beyond a single level of indirection",
		[g]=a,
		[h]=m,
		[j]={"10b9de45c376",1243609265,"Disallow exception specifications on multi-level indirections.","Disallow exception specifications on multi-level indirections.\n\nllvm-svn: 72571"},
		[k]={{Y,3077,"/// Build a member pointer type \\c T Class::*.\n///\n/// \\param T the type to which the member pointer refers.\n/// \\param Class the class type into which the member pointer points.\n/// \\param Loc the location where this type begins\n/// \\param Entity the name of the entity that will have this member pointer type\n///\n/// \\returns a member pointer type, if successful, or a NULL type if there was\n/// an error.\nQualType Sema::BuildMemberPointerType(QualType T, QualType Class, SourceLocation Loc, DeclarationName Entity) {\n  // Verify that we\'re not building a pointer to pointer to function with\n  // exception specification.\n  if (CheckDistantExceptionSpec(T)) {\n    Diag(Loc, diag::err_distant_exception_spec);"},{Y,5054,"static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, QualType declSpecType, TypeSourceInfo *TInfo) {\n  // ...\n  for (unsigned i = 0, e = D.getNumTypeObjects(); i != e; ++i) {\n    // ...\n    case DeclaratorChunk::Pointer:\n      // Verify that we\'re not building a pointer to pointer to function with\n      // exception specification.\n      if (LangOpts.CPlusPlus && S.CheckDistantExceptionSpec(T)) {\n        S.Diag(D.getIdentifierLoc(), diag::err_distant_exception_spec);"},{Y,5090,"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::Reference: {\n      // Verify that we\'re not building a reference to pointer to function with\n      // exception specification.\n      if (LangOpts.CPlusPlus && S.CheckDistantExceptionSpec(T)) {\n        S.Diag(D.getIdentifierLoc(), diag::err_distant_exception_spec);"},{Y,5104,"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::Array: {\n      // Verify that we\'re not building an array of pointers to function with\n      // exception specification.\n      if (LangOpts.CPlusPlus && S.CheckDistantExceptionSpec(T)) {\n        S.Diag(D.getIdentifierLoc(), diag::err_distant_exception_spec);"}},
		[l]={
			["clang/test/CXX/except/except.spec/p2-places.cpp"]={"clang/test/CXX/except/except.spec/p2-places.cpp:35:11: error: exception specifications are not allowed beyond a single level of indirection","clang/test/CXX/except/except.spec/p2-places.cpp:38:13: error: exception specifications are not allowed beyond a single level of indirection","clang/test/CXX/except/except.spec/p2-places.cpp:62:11: error: exception specifications are not allowed beyond a single level of indirection","clang/test/CXX/except/except.spec/p2-places.cpp:64:13: error: exception specifications are not allowed beyond a single level of indirection"}
		}
	},
	["err_downcast_from_inaccessible_base"]={
		[i]="err_downcast_from_inaccessible_base",
		[b]="cannot cast %select{private|protected}2 base class %1 to %0",
		[c]={{nil,nil,{"cannot cast ",{"private","protected"}," base class B to A"}}},
		[e]=d,
		[f]="cannot cast (?:private|protected) base class (.*?) to (.*?)",
		[g]=a,
		[h]=m,
		[j]={"9f831dbbcdfa",1248536498,"Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conve...","Implement C++ semantics for C-style and functional-style casts. This regresses Clang extension conversions, like vectors, but allows conversions via constructors and conversion operators.\nAdd custom conversions to static_cast.\n\nllvm-svn: 77076"},
		[k]={{"clang/lib/Sema/SemaCast.cpp",1734,"/// TryStaticDowncast - Common functionality of TryStaticReferenceDowncast and\n/// TryStaticPointerDowncast. Tests whether a static downcast from SrcType to\n/// DestType is possible and allowed.\nTryCastResult TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType, bool CStyle, SourceRange OpRange, QualType OrigSrcType, QualType OrigDestType, unsigned &msg, CastKind &Kind, CXXCastPath &BasePath) {\n  // ...\n  if (!CStyle) {\n    switch (Self.CheckBaseClassAccess(OpRange.getBegin(), SrcType, DestType, Paths.front(), diag::err_downcast_from_inaccessible_base)) {"},{"clang/lib/Sema/SemaOverload.cpp",3293,"/// CheckMemberPointerConversion - Check the member pointer conversion from the\n/// expression From to the type ToType. This routine checks for ambiguous or\n/// virtual or inaccessible base-to-derived member pointer conversions\n/// for which IsMemberPointerConversion has already returned true. It returns\n/// true and produces a diagnostic if there was an error, or returns false\n/// otherwise.\nbool Sema::CheckMemberPointerConversion(Expr *From, QualType ToType, CastKind &Kind, CXXCastPath &BasePath, bool IgnoreBaseAccess) {\n  // ...\n  if (!IgnoreBaseAccess)\n    CheckBaseClassAccess(From->getExprLoc(), FromClass, ToClass, Paths.front(), diag::err_downcast_from_inaccessible_base);"}},
		[l]={
			["clang/test/CXX/conv/conv.mem/p4.cpp"]={"clang/test/CXX/conv/conv.mem/p4.cpp:22:25: error: cannot cast private base class \'Base\' to \'test1::Derived\'","clang/test/CXX/conv/conv.mem/p4.cpp:23:27: error: cannot cast private base class \'Base\' to \'test1::Derived\'"}
		}
	},
	["err_drv_I_dash_not_supported"]={
		[i]="err_drv_I_dash_not_supported",
		[b]="\'%0\' not supported, please use -iquote instead",
		[c]="\'A\' not supported, please use -iquote instead",
		[e]=d,
		[f]="\'(.*?)\' not supported, please use \\-iquote instead",
		[g]=a,
		[h]=n,
		[j]={"38b6279ce414",1256781224,"Reject -I- in driver instead of clang-cc.","Reject -I- in driver instead of clang-cc.\n\nllvm-svn: 85469"},
		[k]={{q,1339,"void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, const Driver &D, const ArgList &Args, ArgStringList &CmdArgs, const InputInfo &Output, const InputInfoList &Inputs) const {\n  // ...\n  // -I- is a deprecated GCC feature, reject it.\n  if (Arg *A = Args.getLastArg(options::OPT_I_))\n    D.Diag(diag::err_drv_I_dash_not_supported) << A->getAsString(Args);"}}
	},
	["err_drv_Xopenmp_target_missing_triple"]={
		[i]={{nil,y,"err_drv_Xopenmp_target_missing_triple"}},
		[b]={{nil,y,"cannot deduce implicit triple value for -Xopenmp-target, specify triple using -Xopenmp-target=<triple>"}},
		[c]={{nil,y,"cannot deduce implicit triple value for -Xopenmp-target, specify triple using -Xopenmp-target=<triple>"}},
		[e]=d,
		[f]="cannot deduce implicit triple value for \\-Xopenmp\\-target, specify triple using \\-Xopenmp\\-target\\=\\<triple\\>",
		[g]=a,
		[h]={{nil,y,n}},
		[j]={"47e0cf378c79",1502120351,"[OpenMP] Add flag for specifying the target device architecture for OpenMP device offloading","[OpenMP] Add flag for specifying the target device architecture for OpenMP device offloading\n\nSummary:\nOpenMP has the ability to offload target regions to devices which may have different architectures.\n\nA new -fopenmp-target-arch flag is introduced to specify the device architecture.\n\nIn this patch I use the new flag to specify the compute capability of the underlying NVIDIA architecture for the OpenMP offloading CUDA tool chain.\n\nOnly a host-offloading test is provided since full device offloading capability will only be available when [[ https://reviews.llvm.org/D29654 | D29654 ]] lands.\n\nReviewers: hfinkel, Hahnfeld, carlo.bertolli, caomhin, ABataev\n\nReviewed By: hfinkel\n\nSubscribers: guansong, cfe-commits\n\nTags: #openmp\n\nDifferential Revision: https://reviews.llvm.org/D34784\n\nllvm-svn: 310263"},
		[k]={{V,1407,"llvm::opt::DerivedArgList *ToolChain::TranslateOpenMPTargetArgs(const llvm::opt::DerivedArgList &Args, bool SameTripleAsHost, SmallVectorImpl<llvm::opt::Arg *> &AllocatedArgs) const {\n  // ...\n  // Handle -Xopenmp-target flags\n  for (auto *A : Args) {\n    // ...\n    if (XOpenMPTargetNoTriple && XOpenMPTargetArg && Args.getAllArgValues(options::OPT_fopenmp_targets_EQ).size() != 1) {\n      getDriver().Diag(diag::err_drv_Xopenmp_target_missing_triple);"}}
	},
	["err_drv_alignment_not_power_of_two"]={
		[i]={{nil,o,"err_drv_alignment_not_power_of_two"}},
		[b]={{nil,o,"alignment is not a power of 2 in \'%0\'"}},
		[c]={{nil,o,"alignment is not a power of 2 in \'A\'"}},
		[e]=d,
		[f]="alignment is not a power of 2 in \'(.*?)\'",
		[g]=a,
		[h]={{nil,o,n}},
		[j]={N,1610286626,J,L},
		[k]={{q,5192,"#endif\n  // ...\n  // We support -falign-loops=N where N is a power of 2. GCC supports more\n  // forms.\n  if (const Arg *A = Args.getLastArg(options::OPT_falign_loops_EQ)) {\n    // ...\n    if (StringRef(A->getValue()).getAsInteger(10, Value) || Value > 65536)\n    // ...\n    else if (Value & (Value - 1))\n      TC.getDriver().Diag(diag::err_drv_alignment_not_power_of_two) << A->getAsString(Args) << A->getValue();"}}
	},
	["err_drv_amdgpu_ieee_without_no_honor_nans"]={
		[i]={{nil,t,"err_drv_amdgpu_ieee_without_no_honor_nans"}},
		[b]={{nil,t,"invalid argument \'-mno-amdgpu-ieee\' only allowed with relaxed NaN handling"}},
		[c]={{nil,t,"invalid argument \'-mno-amdgpu-ieee\' only allowed with relaxed NaN handling"}},
		[e]=d,
		[f]="invalid argument \'\\-mno\\-amdgpu\\-ieee\' only allowed with relaxed NaN handling",
		[g]=a,
		[h]={{nil,t,n}},
		[j]={ab,1585492323,Z,bb},
		[k]={{u,2066,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (!Opts.EmitIEEENaNCompliantInsts && !LangOptsRef.NoHonorNaNs)\n    Diags.Report(diag::err_drv_amdgpu_ieee_without_no_honor_nans);"}}
	},
	["err_drv_arg_requires_bitcode_input"]={
		[i]={{nil,z,"err_drv_arg_requires_bitcode_input"}},
		[b]={{nil,z,"option \'%0\' requires input to be LLVM bitcode"}},
		[c]={{nil,z,"option \'A\' requires input to be LLVM bitcode"}},
		[e]=d,
		[f]="option \'(.*?)\' requires input to be LLVM bitcode",
		[g]=a,
		[h]={{nil,z,n}},
		[j]={U,1534346725,T,W},
		[k]={{q,4959,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_fthinlto_index_EQ)) {\n    if (!types::isLLVMIR(Input.getType()))\n      D.Diag(diag::err_drv_arg_requires_bitcode_input) << A->getAsString(Args);"}}
	},
	["err_drv_argument_not_allowed_with"]={
		[i]="err_drv_argument_not_allowed_with",
		[b]="invalid argument \'%0\' not allowed with \'%1\'",
		[c]="invalid argument \'A\' not allowed with \'B\'",
		[e]=d,
		[f]="invalid argument \'(.*?)\' not allowed with \'(.*?)\'",
		[g]=a,
		[h]=n,
		[j]={"c196421fbcfe",1238084592,"Driver: Add darwin::Link tool.","Driver: Add darwin::Link tool.\n - <rdar://problem/6717381> [driver] implement ld argument translation\n   in new driver\n\nllvm-svn: 67760"},
		[k]={
			[1]={x,656,"/// Compute target triple from args.\n///\n/// This routine provides the logic to compute a target triple from various\n/// args passed to the driver and the default triple string.\nstatic llvm::Triple computeTargetTriple(const Driver &D, StringRef TargetTriple, const ArgList &Args, StringRef DarwinArchName = \"\") {\n  // ...\n  // Handle -miamcu flag.\n  if (Args.hasFlag(options::OPT_miamcu, options::OPT_mno_iamcu, false)) {\n    // ...\n    if (A && !A->getOption().matches(options::OPT_m32))\n      D.Diag(diag::err_drv_argument_not_allowed_with) << \"-miamcu\" << A->getBaseArg().getAsString(Args);"},
			[2]={E,379,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {\n      // ...\n      // At this point we have not expanded groups, so any unsupported\n      // sanitizers in Add are those which have been explicitly enabled.\n      // Diagnose them.\n      if (SanitizerMask KindsToDiagnose = Add & InvalidTrappingKinds & ~DiagnosedKinds) {\n        if (DiagnoseErrors) {\n          // ...\n          D.Diag(diag::err_drv_argument_not_allowed_with) << Desc << \"-fsanitize-trap=undefined\";"},
			[3]={E,391,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {\n      // ...\n      if (MinimalRuntime) {\n        if (SanitizerMask KindsToDiagnose = Add & NotAllowedWithMinimalRuntime & ~DiagnosedKinds) {\n          if (DiagnoseErrors) {\n            // ...\n            D.Diag(diag::err_drv_argument_not_allowed_with) << Desc << \"-fsanitize-minimal-runtime\";"},
			[4]={E,420,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {\n      // ...\n      if (isExecuteOnlyTarget(Triple, Args)) {\n        if (SanitizerMask KindsToDiagnose = Add & NotAllowedWithExecuteOnly & ~DiagnosedKinds) {\n          if (DiagnoseErrors) {\n            // ...\n            D.Diag(diag::err_drv_argument_not_allowed_with) << Desc << Triple.str();"},
			[5]={E,440,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {\n      // ...\n      // FIXME: Make CFI on member function calls compatible with cross-DSO CFI.\n      // There are currently two problems:\n      // - Virtual function call checks need to pass a pointer to the function\n      //   address to llvm.type.test and a pointer to the address point to the\n      //   diagnostic function. Currently we pass the same pointer to both\n      //   places.\n      // - Non-virtual function call checks may need to check multiple type\n      //   identifiers.\n      // Fixing both of those may require changes to the cross-DSO CFI\n      // interface.\n      if (CfiCrossDso && (Add & SanitizerKind::CFIMFCall & ~DiagnosedKinds)) {\n        if (DiagnoseErrors)\n          D.Diag(diag::err_drv_argument_not_allowed_with) << \"-fsanitize=cfi-mfcall\""},
			[6]={E,467,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {\n      // ...\n      // Test for -fno-rtti + explicit -fsanitizer=vptr before expanding groups\n      // so we don\'t error out if -fno-rtti and -fsanitize=undefined were\n      // passed.\n      if ((Add & SanitizerKind::Vptr) && (RTTIMode == ToolChain::RM_Disabled)) {\n        if (const llvm::opt::Arg *NoRTTIArg = TC.getRTTIArg()) {\n          // ...\n          // The user explicitly passed -fno-rtti with -fsanitize=vptr, but\n          // the vptr sanitizer requires RTTI, so this is a user error.\n          if (DiagnoseErrors)\n            D.Diag(diag::err_drv_argument_not_allowed_with) << \"-fsanitize=vptr\" << NoRTTIArg->getAsString(Args);"},
			[7]={E,613,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Warn about incompatible groups of sanitizers.\n  for (auto G : IncompatibleGroups) {\n    // ...\n    if (Kinds & Group) {\n      if (SanitizerMask Incompatible = Kinds & G.second) {\n        if (DiagnoseErrors)\n          D.Diag(clang::diag::err_drv_argument_not_allowed_with) << lastArgumentForMask(D, Args, Group) << lastArgumentForMask(D, Args, Incompatible);"},
			[8]={E,750,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  if (AllAddedKinds & SanitizerKind::CFI) {\n    // ...\n    if (CfiCrossDso && CfiICallGeneralizePointers && DiagnoseErrors)\n      D.Diag(diag::err_drv_argument_not_allowed_with) << \"-fsanitize-cfi-cross-dso\""},
			[9]={E,764,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  if (AllAddedKinds & SanitizerKind::KCFI) {\n    // ...\n    if (AllAddedKinds & SanitizerKind::CFI && DiagnoseErrors)\n      D.Diag(diag::err_drv_argument_not_allowed_with) << \"-fsanitize=kcfi\" << lastArgumentForMask(D, Args, SanitizerKind::CFI);"},
			[10]={E,776,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  if (MinimalRuntime) {\n    // ...\n    if (IncompatibleMask && DiagnoseErrors)\n      D.Diag(clang::diag::err_drv_argument_not_allowed_with) << \"-fsanitize-minimal-runtime\" << lastArgumentForMask(D, Args, IncompatibleMask);"},
			[11]={E,820,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Choose at most one coverage type: function, bb, or edge.\n  if (DiagnoseErrors) {\n    if ((CoverageFeatures & CoverageFunc) && (CoverageFeatures & CoverageBB))\n      D.Diag(clang::diag::err_drv_argument_not_allowed_with) << \"-fsanitize-coverage=func\""},
			[12]={E,824,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Choose at most one coverage type: function, bb, or edge.\n  if (DiagnoseErrors) {\n    // ...\n    if ((CoverageFeatures & CoverageFunc) && (CoverageFeatures & CoverageEdge))\n      D.Diag(clang::diag::err_drv_argument_not_allowed_with) << \"-fsanitize-coverage=func\""},
			[13]={E,828,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Choose at most one coverage type: function, bb, or edge.\n  if (DiagnoseErrors) {\n    // ...\n    if ((CoverageFeatures & CoverageBB) && (CoverageFeatures & CoverageEdge))\n      D.Diag(clang::diag::err_drv_argument_not_allowed_with) << \"-fsanitize-coverage=bb\""},
			[14]={E,939,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  if (AllAddedKinds & SanitizerKind::Address) {\n    // ...\n    if (Arg *WindowsDebugRTArg = Args.getLastArg(options::OPT__SLASH_MTd, options::OPT__SLASH_MT, options::OPT__SLASH_MDd, options::OPT__SLASH_MD, options::OPT__SLASH_LDd, options::OPT__SLASH_LD)) {\n      // ...\n      case options::OPT__SLASH_MTd:\n      case options::OPT__SLASH_MDd:\n      case options::OPT__SLASH_LDd:\n        if (DiagnoseErrors) {\n          D.Diag(clang::diag::err_drv_argument_not_allowed_with) << WindowsDebugRTArg->getAsString(Args) << lastArgumentForMask(D, Args, SanitizerKind::Address);"},
			[15]={V,1323,"VersionTuple ToolChain::computeMSVCVersion(const Driver *D, const llvm::opt::ArgList &Args) const {\n  // ...\n  if (MSCVersion && MSCompatibilityVersion) {\n    if (D)\n      D->Diag(diag::err_drv_argument_not_allowed_with) << MSCVersion->getAsString(Args) << MSCompatibilityVersion->getAsString(Args);"},
			[16]={"clang/lib/Driver/ToolChains/Arch/X86.cpp",210,"void x86::getX86TargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (Args.hasFlag(options::OPT_m_seses, options::OPT_mno_seses, false)) {\n    if (LVIOpt == options::OPT_mlvi_hardening)\n      D.Diag(diag::err_drv_argument_not_allowed_with) << D.getOpts().getOptionName(options::OPT_mlvi_hardening) << D.getOpts().getOptionName(options::OPT_m_seses);"},
			[17]={"clang/lib/Driver/ToolChains/Arch/X86.cpp",215,"void x86::getX86TargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (Args.hasFlag(options::OPT_m_seses, options::OPT_mno_seses, false)) {\n    // ...\n    if (SpectreOpt != clang::driver::options::ID::OPT_INVALID)\n      D.Diag(diag::err_drv_argument_not_allowed_with) << D.getOpts().getOptionName(SpectreOpt) << D.getOpts().getOptionName(options::OPT_m_seses);"},
			[18]={"clang/lib/Driver/ToolChains/Arch/X86.cpp",228,"void x86::getX86TargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (SpectreOpt != clang::driver::options::ID::OPT_INVALID && LVIOpt != clang::driver::options::ID::OPT_INVALID) {\n    D.Diag(diag::err_drv_argument_not_allowed_with) << D.getOpts().getOptionName(SpectreOpt) << D.getOpts().getOptionName(LVIOpt);"},
			[19]={q,87,"static void CheckCodeGenerationOptions(const Driver &D, const ArgList &Args) {\n  // In gcc, only ARM checks this, but it seems reasonable to check universally.\n  if (Args.hasArg(options::OPT_static))\n    if (const Arg *A = Args.getLastArg(options::OPT_dynamic, options::OPT_mdynamic_no_pic))\n      D.Diag(diag::err_drv_argument_not_allowed_with) << A->getAsString(Args) << \"-static\";"},
			[20]={q,733,"static void addPGOAndCoverageFlags(const ToolChain &TC, Compilation &C, const JobAction &JA, const InputInfo &Output, const ArgList &Args, SanitizerArgs &SanArgs, ArgStringList &CmdArgs) {\n  // ...\n  if (PGOGenerateArg && ProfileGenerateArg)\n    D.Diag(diag::err_drv_argument_not_allowed_with) << PGOGenerateArg->getSpelling() << ProfileGenerateArg->getSpelling();"},
			[21]={q,739,"static void addPGOAndCoverageFlags(const ToolChain &TC, Compilation &C, const JobAction &JA, const InputInfo &Output, const ArgList &Args, SanitizerArgs &SanArgs, ArgStringList &CmdArgs) {\n  // ...\n  if (PGOGenerateArg && ProfileUseArg)\n    D.Diag(diag::err_drv_argument_not_allowed_with) << ProfileUseArg->getSpelling() << PGOGenerateArg->getSpelling();"},
			[22]={q,743,"static void addPGOAndCoverageFlags(const ToolChain &TC, Compilation &C, const JobAction &JA, const InputInfo &Output, const ArgList &Args, SanitizerArgs &SanArgs, ArgStringList &CmdArgs) {\n  // ...\n  if (ProfileGenerateArg && ProfileUseArg)\n    D.Diag(diag::err_drv_argument_not_allowed_with) << ProfileGenerateArg->getSpelling() << ProfileUseArg->getSpelling();"},
			[23]={q,747,"static void addPGOAndCoverageFlags(const ToolChain &TC, Compilation &C, const JobAction &JA, const InputInfo &Output, const ArgList &Args, SanitizerArgs &SanArgs, ArgStringList &CmdArgs) {\n  // ...\n  if (CSPGOGenerateArg && PGOGenerateArg) {\n    D.Diag(diag::err_drv_argument_not_allowed_with) << CSPGOGenerateArg->getSpelling() << PGOGenerateArg->getSpelling();"},
			[24]={q,3405,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_EQ)) {\n    // ...\n    if ((EffectiveTriple.isARM() || EffectiveTriple.isThumb()) && Value == \"tls\") {\n      // ...\n      // Check whether the user asked for something other than -mtp=cp15\n      if (Arg *A = Args.getLastArg(options::OPT_mtp_mode_EQ)) {\n        // ...\n        if (Value != \"cp15\") {\n          D.Diag(diag::err_drv_argument_not_allowed_with) << A->getAsString(Args) << \"-mstack-protector-guard=tls\";"},
			[25]={q,3637,"static void RenderARCMigrateToolOptions(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs) {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_ccc_objcmt_migrate)) {\n    if (ARCMTEnabled)\n      D.Diag(diag::err_drv_argument_not_allowed_with) << A->getAsString(Args) << \"-ccc-arcmt-migrate\";"},
			[26]={q,3874,"static bool RenderModulesOptions(Compilation &C, const Driver &D, const ArgList &Args, const InputInfo &Input, const InputInfo &Output, const Arg *Std, ArgStringList &CmdArgs) {\n  // ...\n  if (HaveClangModules) {\n    // ...\n    if (Arg *A = Args.getLastArg(options::OPT_fbuild_session_file)) {\n      if (Args.hasArg(options::OPT_fbuild_session_timestamp))\n        D.Diag(diag::err_drv_argument_not_allowed_with) << A->getAsString(Args) << \"-fbuild-session-timestamp\";"},
			[27]={q,4979,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (auto *MemProfUseArg = Args.getLastArg(options::OPT_fmemory_profile_use_EQ)) {\n    if (MemProfArg)\n      D.Diag(diag::err_drv_argument_not_allowed_with) << MemProfUseArg->getAsString(Args) << MemProfArg->getAsString(Args);"},
			[28]={q,4983,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (auto *MemProfUseArg = Args.getLastArg(options::OPT_fmemory_profile_use_EQ)) {\n    // ...\n    if (auto *PGOInstrArg = Args.getLastArg(options::OPT_fprofile_generate, options::OPT_fprofile_generate_EQ))\n      D.Diag(diag::err_drv_argument_not_allowed_with) << MemProfUseArg->getAsString(Args) << PGOInstrArg->getAsString(Args);"},
			[29]={q,6589,"#endif\n  // ...\n  // Forward -f options with positive and negative forms; we translate these by\n  // hand.  Do not propagate PGO options to the GPU-side compilations as the\n  // profile info is for the host-side compilation only.\n  if (!(IsCudaDevice || IsHIPDevice)) {\n    if (Arg *A = getLastProfileSampleUseArg(Args)) {\n      // ...\n      if (PGOArg)\n        D.Diag(diag::err_drv_argument_not_allowed_with) << \"SampleUse with PGO options\";"},
			[30]={q,7338,"#endif\n  // ...\n  if (VirtualFunctionElimination && !WholeProgramVTables) {\n    D.Diag(diag::err_drv_argument_not_allowed_with) << \"-fno-whole-program-vtables\""},
			[31]={q,7372,"#endif\n  // ...\n  if (SanitizeArgs.needsLTO() && !SplitLTOUnit)\n    D.Diag(diag::err_drv_argument_not_allowed_with) << \"-fno-split-lto-unit\""},
			[32]={q,7547,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_pg))\n    if (FPKeepKind == CodeGenOptions::FramePointerKind::None && !Args.hasArg(options::OPT_mfentry))\n      D.Diag(diag::err_drv_argument_not_allowed_with) << \"-fomit-frame-pointer\" << A->getAsString(Args);"},
			[33]={q,7881,"void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType, ArgStringList &CmdArgs, llvm::codegenoptions::DebugInfoKind *DebugInfoKind, bool *EmitCodeView) const {\n  // ...\n  if (Args.hasArg(options::OPT__SLASH_kernel)) {\n    // ...\n    if (!Values.empty()) {\n      // ...\n      for (auto &V : Values)\n        if (!SupportedArches.contains(V))\n          D.Diag(diag::err_drv_argument_not_allowed_with) << std::string(\"/arch:\").append(V) << \"/kernel\";"},
			[34]={q,7887,"void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType, ArgStringList &CmdArgs, llvm::codegenoptions::DebugInfoKind *DebugInfoKind, bool *EmitCodeView) const {\n  // ...\n  if (Args.hasArg(options::OPT__SLASH_kernel)) {\n    // ...\n    if (Args.hasFlag(options::OPT__SLASH_GR, options::OPT__SLASH_GR_, false))\n      D.Diag(diag::err_drv_argument_not_allowed_with) << \"/GR\""},
			[35]={q,7894,"void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType, ArgStringList &CmdArgs, llvm::codegenoptions::DebugInfoKind *DebugInfoKind, bool *EmitCodeView) const {\n  // ...\n  if (MostGeneralArg && BestCaseArg)\n    D.Diag(clang::diag::err_drv_argument_not_allowed_with) << MostGeneralArg->getAsString(Args) << BestCaseArg->getAsString(Args);"},
			[36]={q,7905,"void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType, ArgStringList &CmdArgs, llvm::codegenoptions::DebugInfoKind *DebugInfoKind, bool *EmitCodeView) const {\n  // ...\n  if (MostGeneralArg) {\n    // ...\n    if (FirstConflict && SecondConflict && FirstConflict != SecondConflict)\n      D.Diag(clang::diag::err_drv_argument_not_allowed_with) << FirstConflict->getAsString(Args) << SecondConflict->getAsString(Args);"},
			[37]={G,331,"void darwin::Linker::AddLinkArgs(Compilation &C, const ArgList &Args, ArgStringList &CmdArgs, const InputInfoList &Inputs, VersionTuple Version, bool LinkerIsLLD) const {\n  // ...\n  if (!Args.hasArg(options::OPT_dynamiclib)) {\n  // ...\n  } else {\n    // ...\n    if ((A = Args.getLastArg(options::OPT_bundle)) || (A = Args.getLastArg(options::OPT_bundle__loader)) || (A = Args.getLastArg(options::OPT_client__name)) || (A = Args.getLastArg(options::OPT_force__flat__namespace)) || (A = Args.getLastArg(options::OPT_keep__private__externs)) || (A = Args.getLastArg(options::OPT_private__bundle)))\n      D.Diag(diag::err_drv_argument_not_allowed_with) << A->getAsString(Args) << \"-dynamiclib\";"},
			[38]={G,1829,"/// Returns the deployment target that\'s specified using the -m<os>-version-min\n/// argument.\nstd::optional<DarwinPlatform> getDeploymentTargetFromOSVersionArg(DerivedArgList &Args, const Driver &TheDriver) {\n  // ...\n  if (macOSVersion) {\n    if (iOSVersion || TvOSVersion || WatchOSVersion) {\n      TheDriver.Diag(diag::err_drv_argument_not_allowed_with) << macOSVersion->getAsString(Args) << (iOSVersion ? iOSVersion : TvOSVersion ? TvOSVersion : WatchOSVersion)->getAsString(Args);"},
			[39]={G,1839,"/// Returns the deployment target that\'s specified using the -m<os>-version-min\n/// argument.\nstd::optional<DarwinPlatform> getDeploymentTargetFromOSVersionArg(DerivedArgList &Args, const Driver &TheDriver) {\n  // ...\n  if (macOSVersion) {\n  // ...\n  } else if (iOSVersion) {\n    if (TvOSVersion || WatchOSVersion) {\n      TheDriver.Diag(diag::err_drv_argument_not_allowed_with) << iOSVersion->getAsString(Args) << (TvOSVersion ? TvOSVersion : WatchOSVersion)->getAsString(Args);"},
			[40]={G,1849,"/// Returns the deployment target that\'s specified using the -m<os>-version-min\n/// argument.\nstd::optional<DarwinPlatform> getDeploymentTargetFromOSVersionArg(DerivedArgList &Args, const Driver &TheDriver) {\n  // ...\n  if (macOSVersion) {\n  // ...\n  } else if (iOSVersion) {\n  // ...\n  } else if (TvOSVersion) {\n    if (WatchOSVersion) {\n      TheDriver.Diag(diag::err_drv_argument_not_allowed_with) << TvOSVersion->getAsString(Args) << WatchOSVersion->getAsString(Args);"},
			[41]={O,247,"void WebAssembly::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args, Action::OffloadKind) const {\n  // ...\n  // \'-pthread\' implies atomics, bulk-memory, mutable-globals, and sign-ext\n  if (DriverArgs.hasFlag(options::OPT_pthread, options::OPT_no_pthread, false)) {\n    if (DriverArgs.hasFlag(options::OPT_mno_atomics, options::OPT_matomics, false))\n      getDriver().Diag(diag::err_drv_argument_not_allowed_with) << \"-pthread\""},
			[42]={O,252,"void WebAssembly::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args, Action::OffloadKind) const {\n  // ...\n  // \'-pthread\' implies atomics, bulk-memory, mutable-globals, and sign-ext\n  if (DriverArgs.hasFlag(options::OPT_pthread, options::OPT_no_pthread, false)) {\n    // ...\n    if (DriverArgs.hasFlag(options::OPT_mno_bulk_memory, options::OPT_mbulk_memory, false))\n      getDriver().Diag(diag::err_drv_argument_not_allowed_with) << \"-pthread\""},
			[43]={O,257,"void WebAssembly::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args, Action::OffloadKind) const {\n  // ...\n  // \'-pthread\' implies atomics, bulk-memory, mutable-globals, and sign-ext\n  if (DriverArgs.hasFlag(options::OPT_pthread, options::OPT_no_pthread, false)) {\n    // ...\n    if (DriverArgs.hasFlag(options::OPT_mno_mutable_globals, options::OPT_mmutable_globals, false))\n      getDriver().Diag(diag::err_drv_argument_not_allowed_with) << \"-pthread\""},
			[44]={O,262,"void WebAssembly::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args, Action::OffloadKind) const {\n  // ...\n  // \'-pthread\' implies atomics, bulk-memory, mutable-globals, and sign-ext\n  if (DriverArgs.hasFlag(options::OPT_pthread, options::OPT_no_pthread, false)) {\n    // ...\n    if (DriverArgs.hasFlag(options::OPT_mno_sign_ext, options::OPT_msign_ext, false))\n      getDriver().Diag(diag::err_drv_argument_not_allowed_with) << \"-pthread\""},
			[45]={O,287,"void WebAssembly::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args, Action::OffloadKind) const {\n  // ...\n  if (!DriverArgs.hasFlag(options::OPT_mmutable_globals, options::OPT_mno_mutable_globals, false)) {\n    // ...\n    if (RelocationModel == llvm::Reloc::PIC_) {\n      if (DriverArgs.hasFlag(options::OPT_mno_mutable_globals, options::OPT_mmutable_globals, false)) {\n        getDriver().Diag(diag::err_drv_argument_not_allowed_with) << \"-fPIC\""},
			[46]={O,300,"void WebAssembly::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args, Action::OffloadKind) const {\n  // ...\n  if (DriverArgs.getLastArg(options::OPT_fwasm_exceptions)) {\n    // \'-fwasm-exceptions\' is not compatible with \'-mno-exception-handling\'\n    if (DriverArgs.hasFlag(options::OPT_mno_exception_handing, options::OPT_mexception_handing, false))\n      getDriver().Diag(diag::err_drv_argument_not_allowed_with) << \"-fwasm-exceptions\""},
			[47]={O,307,"void WebAssembly::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args, Action::OffloadKind) const {\n  // ...\n  if (DriverArgs.getLastArg(options::OPT_fwasm_exceptions)) {\n    // ...\n    // \'-fwasm-exceptions\' is not compatible with\n    // \'-mllvm -enable-emscripten-cxx-exceptions\'\n    for (const Arg *A : DriverArgs.filtered(options::OPT_mllvm)) {\n      if (StringRef(A->getValue(0)) == \"-enable-emscripten-cxx-exceptions\")\n        getDriver().Diag(diag::err_drv_argument_not_allowed_with) << \"-fwasm-exceptions\""},
			[48]={O,353,"void WebAssembly::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args, Action::OffloadKind) const {\n  // ...\n  for (const Arg *A : DriverArgs.filtered(options::OPT_mllvm)) {\n    // ...\n    if (Opt.startswith(\"-wasm-enable-sjlj\")) {\n      // \'-mllvm -wasm-enable-sjlj\' is not compatible with\n      // \'-mno-exception-handling\'\n      if (DriverArgs.hasFlag(options::OPT_mno_exception_handing, options::OPT_mexception_handing, false))\n        getDriver().Diag(diag::err_drv_argument_not_allowed_with) << \"-mllvm -wasm-enable-sjlj\""},
			[49]={O,361,"void WebAssembly::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args, Action::OffloadKind) const {\n  // ...\n  for (const Arg *A : DriverArgs.filtered(options::OPT_mllvm)) {\n    // ...\n    if (Opt.startswith(\"-wasm-enable-sjlj\")) {\n      // ...\n      // \'-mllvm -wasm-enable-sjlj\' is not compatible with\n      // \'-mllvm -enable-emscripten-cxx-exceptions\'\n      // because we don\'t allow Emscripten EH + Wasm SjLj\n      for (const Arg *A : DriverArgs.filtered(options::OPT_mllvm)) {\n        if (StringRef(A->getValue(0)) == \"-enable-emscripten-cxx-exceptions\")\n          getDriver().Diag(diag::err_drv_argument_not_allowed_with) << \"-mllvm -wasm-enable-sjlj\""},
			[50]={O,369,"void WebAssembly::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args, Action::OffloadKind) const {\n  // ...\n  for (const Arg *A : DriverArgs.filtered(options::OPT_mllvm)) {\n    // ...\n    if (Opt.startswith(\"-wasm-enable-sjlj\")) {\n      // ...\n      // \'-mllvm -wasm-enable-sjlj\' is not compatible with\n      // \'-mllvm -enable-emscripten-sjlj\'\n      for (const Arg *A : DriverArgs.filtered(options::OPT_mllvm)) {\n        if (StringRef(A->getValue(0)) == \"-enable-emscripten-sjlj\")\n          getDriver().Diag(diag::err_drv_argument_not_allowed_with) << \"-mllvm -wasm-enable-sjlj\""},
			[51]={pb,70,"XRayArgs::XRayArgs(const ToolChain &TC, const ArgList &Args) {\n  // ...\n  // Both XRay and -fpatchable-function-entry use\n  // TargetOpcode::PATCHABLE_FUNCTION_ENTER.\n  if (Arg *A = Args.getLastArg(options::OPT_fpatchable_function_entry_EQ))\n    D.Diag(diag::err_drv_argument_not_allowed_with) << XRayInstrument->getSpelling() << A->getSpelling();"},
			[52]={u,510,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  // ...\n  // Prevent the user from specifying both -fsycl-is-device and -fsycl-is-host.\n  if (LangOpts.SYCLIsDevice && LangOpts.SYCLIsHost)\n    Diags.Report(diag::err_drv_argument_not_allowed_with) << \"-fsycl-is-device\""},
			[53]={u,514,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  // ...\n  if (Args.hasArg(OPT_fgnu89_inline) && LangOpts.CPlusPlus)\n    Diags.Report(diag::err_drv_argument_not_allowed_with) << \"-fgnu89-inline\" << GetInputKindName(IK);"},
			[54]={u,518,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  // ...\n  if (Args.hasArg(OPT_hlsl_entrypoint) && !LangOpts.HLSL)\n    Diags.Report(diag::err_drv_argument_not_allowed_with) << \"-hlsl-entry\" << GetInputKindName(IK);"},
			[55]={u,564,"static bool FixupInvocation(CompilerInvocation &Invocation, DiagnosticsEngine &Diags, const ArgList &Args, InputKind IK) {\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_fdefault_calling_conv_EQ)) {\n    // ...\n    if (emitError)\n      Diags.Report(diag::err_drv_argument_not_allowed_with) << A->getSpelling() << T.getTriple();"},
			[56]={u,1860,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (const Arg *A = Args.getLastArg(OPT_mfunction_return_EQ)) {\n    // ...\n    // SystemZ might want to add support for \"expolines.\"\n    if (!T.isX86())\n      Diags.Report(diag::err_drv_argument_not_allowed_with) << A->getSpelling() << T.getTriple();"},
			[57]={u,1867,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (const Arg *A = Args.getLastArg(OPT_mfunction_return_EQ)) {\n    // ...\n    // SystemZ might want to add support for \"expolines.\"\n    if (!T.isX86())\n    // ...\n    else if (Val == llvm::FunctionReturnThunksKind::Invalid)\n    // ...\n    else if (Val == llvm::FunctionReturnThunksKind::Extern && Args.getLastArgValue(OPT_mcmodel_EQ).equals(\"large\"))\n      Diags.Report(diag::err_drv_argument_not_allowed_with) << A->getAsString(Args) << Args.getLastArg(OPT_mcmodel_EQ)->getAsString(Args);"},
			[58]={u,2805,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Opts.ARCMTAction != FrontendOptions::ARCMT_None && Opts.ObjCMTAction != FrontendOptions::ObjCMT_None) {\n    Diags.Report(diag::err_drv_argument_not_allowed_with) << \"ARC migration\""},
			[59]={u,3589,"#include \"clang/Basic/LangStandards.def\"\n    // ...\n    } else {\n      // ...\n      if (!IsInputCompatibleWithStandard(IK, Std)) {\n        Diags.Report(diag::err_drv_argument_not_allowed_with) << A->getAsString(Args) << GetInputKindName(IK);"},
			[60]={u,3773,"#include \"clang/Driver/Options.inc\"\n  // ...\n  // -mrtd option\n  if (Arg *A = Args.getLastArg(OPT_mrtd)) {\n    if (Opts.getDefaultCallingConv() != LangOptions::DCC_None)\n      Diags.Report(diag::err_drv_argument_not_allowed_with) << A->getSpelling() << \"-fdefault-calling-conv\";"},
			[61]={u,3777,"#include \"clang/Driver/Options.inc\"\n  // ...\n  // -mrtd option\n  if (Arg *A = Args.getLastArg(OPT_mrtd)) {\n    if (Opts.getDefaultCallingConv() != LangOptions::DCC_None)\n    // ...\n    else {\n      if (T.getArch() != llvm::Triple::x86)\n        Diags.Report(diag::err_drv_argument_not_allowed_with) << A->getSpelling() << T.getTriple();"}
		}
	},
	["err_drv_argument_only_allowed_with"]={
		[i]="err_drv_argument_only_allowed_with",
		[b]="invalid argument \'%0\' only allowed with \'%1\'",
		[c]="invalid argument \'A\' only allowed with \'B\'",
		[e]=d,
		[f]="invalid argument \'(.*?)\' only allowed with \'(.*?)\'",
		[g]=a,
		[h]=n,
		[j]={"c196421fbcfe",1238084592,"Driver: Add darwin::Link tool.","Driver: Add darwin::Link tool.\n - <rdar://problem/6717381> [driver] implement ld argument translation\n   in new driver\n\nllvm-svn: 67760"},
		[k]={{E,404,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  for (const llvm::opt::Arg *Arg : llvm::reverse(Args)) {\n    if (Arg->getOption().matches(options::OPT_fsanitize_EQ)) {\n      // ...\n      if (llvm::opt::Arg *A = Args.getLastArg(options::OPT_mcmodel_EQ)) {\n        // ...\n        if (CM != \"small\" && (Add & SanitizerKind::Function & ~DiagnosedKinds)) {\n          if (DiagnoseErrors)\n            D.Diag(diag::err_drv_argument_only_allowed_with) << \"-fsanitize=function\""},{E,575,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Check that LTO is enabled if we need it.\n  if ((Kinds & NeedsLTO) && !D.isUsingLTO() && DiagnoseErrors) {\n    D.Diag(diag::err_drv_argument_only_allowed_with) << lastArgumentForMask(D, Args, Kinds & NeedsLTO) << \"-flto\";"},{E,582,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  if ((Kinds & SanitizerKind::ShadowCallStack) && TC.getTriple().isAArch64() && !llvm::AArch64::isX18ReservedByDefault(TC.getTriple()) && !Args.hasArg(options::OPT_ffixed_x18) && DiagnoseErrors) {\n    D.Diag(diag::err_drv_argument_only_allowed_with) << lastArgumentForMask(D, Args, Kinds & SanitizerKind::ShadowCallStack) << \"-ffixed-x18\";"},{E,782,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  if (MinimalRuntime) {\n    // ...\n    if (NonTrappingCfi && DiagnoseErrors)\n      D.Diag(clang::diag::err_drv_argument_only_allowed_with) << \"fsanitize-minimal-runtime\""},{E,1021,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  if (AllAddedKinds & SanitizerKind::Address) {\n  // ...\n  } else {\n    // ...\n    if ((AllAddedKinds & DetectInvalidPointerPairs & ~AllRemove) && DiagnoseErrors) {\n      TC.getDriver().Diag(clang::diag::err_drv_argument_only_allowed_with) << lastArgumentForMask(D, Args, SanitizerKind::PointerCompare | SanitizerKind::PointerSubtract) << \"-fsanitize=address\";"},{E,1378,"void SanitizerArgs::addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const {\n  // ...\n  // Require -fvisibility= flag on non-Windows when compiling if vptr CFI is\n  // enabled.\n  if (Sanitizers.hasOneOf(CFIClasses) && !TC.getTriple().isOSWindows() && !Args.hasArg(options::OPT_fvisibility_EQ)) {\n    TC.getDriver().Diag(clang::diag::err_drv_argument_only_allowed_with) << lastArgumentForMask(TC.getDriver(), Args, Sanitizers.Mask & CFIClasses) << \"-fvisibility=\";"},{q,75,"static void CheckPreprocessingOptions(const Driver &D, const ArgList &Args) {\n  if (Arg *A = Args.getLastArg(clang::driver::options::OPT_C, options::OPT_CC, options::OPT_fminimize_whitespace, options::OPT_fno_minimize_whitespace)) {\n    if (!Args.hasArg(options::OPT_E) && !Args.hasArg(options::OPT__SLASH_P) && !Args.hasArg(options::OPT__SLASH_EP) && !D.CCCIsCPP()) {\n      D.Diag(clang::diag::err_drv_argument_only_allowed_with) << A->getBaseArg().getAsString(Args) << (D.IsCLMode() ? \"/E, /P or /EP\" : \"-E\");"},{q,824,"static void addPGOAndCoverageFlags(const ToolChain &TC, Compilation &C, const JobAction &JA, const InputInfo &Output, const ArgList &Args, SanitizerArgs &SanArgs, ArgStringList &CmdArgs) {\n  // ...\n  if (Args.hasFlag(options::OPT_fcoverage_mapping, options::OPT_fno_coverage_mapping, false)) {\n    if (!ProfileGenerateArg)\n      D.Diag(clang::diag::err_drv_argument_only_allowed_with) << \"-fcoverage-mapping\""},{q,846,"static void addPGOAndCoverageFlags(const ToolChain &TC, Compilation &C, const JobAction &JA, const InputInfo &Output, const ArgList &Args, SanitizerArgs &SanArgs, ArgStringList &CmdArgs) {\n  // ...\n  if (Args.hasArg(options::OPT_fprofile_exclude_files_EQ)) {\n    // ...\n    if (!Args.hasArg(options::OPT_coverage))\n      D.Diag(clang::diag::err_drv_argument_only_allowed_with) << \"-fprofile-exclude-files=\""},{q,858,"static void addPGOAndCoverageFlags(const ToolChain &TC, Compilation &C, const JobAction &JA, const InputInfo &Output, const ArgList &Args, SanitizerArgs &SanArgs, ArgStringList &CmdArgs) {\n  // ...\n  if (Args.hasArg(options::OPT_fprofile_filter_files_EQ)) {\n    // ...\n    if (!Args.hasArg(options::OPT_coverage))\n      D.Diag(clang::diag::err_drv_argument_only_allowed_with) << \"-fprofile-filter-files=\""},{q,3461,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_symbol_EQ)) {\n    // ...\n    if (!isValidSymbolName(Value)) {\n      D.Diag(diag::err_drv_argument_only_allowed_with) << A->getOption().getName() << \"legal symbol name\";"},{q,4191,"static void renderDwarfFormat(const Driver &D, const llvm::Triple &T, const ArgList &Args, ArgStringList &CmdArgs, unsigned DwarfVersion) {\n  // ...\n  if (DwarfFormatArg->getOption().matches(options::OPT_gdwarf64)) {\n    if (DwarfVersion < 3)\n      D.Diag(diag::err_drv_argument_only_allowed_with) << DwarfFormatArg->getAsString(Args) << \"DWARFv3 or greater\";"},{q,4194,"static void renderDwarfFormat(const Driver &D, const llvm::Triple &T, const ArgList &Args, ArgStringList &CmdArgs, unsigned DwarfVersion) {\n  // ...\n  if (DwarfFormatArg->getOption().matches(options::OPT_gdwarf64)) {\n    if (DwarfVersion < 3)\n    // ...\n    else if (!T.isArch64Bit())\n      D.Diag(diag::err_drv_argument_only_allowed_with) << DwarfFormatArg->getAsString(Args) << \"64 bit architecture\";"},{q,4197,"static void renderDwarfFormat(const Driver &D, const llvm::Triple &T, const ArgList &Args, ArgStringList &CmdArgs, unsigned DwarfVersion) {\n  // ...\n  if (DwarfFormatArg->getOption().matches(options::OPT_gdwarf64)) {\n    if (DwarfVersion < 3)\n    // ...\n    else if (!T.isArch64Bit())\n    // ...\n    else if (!T.isOSBinFormatELF())\n      D.Diag(diag::err_drv_argument_only_allowed_with) << DwarfFormatArg->getAsString(Args) << \"ELF platforms\";"},{q,4390,"static void renderDebugOptions(const ToolChain &TC, const Driver &D, const llvm::Triple &T, const ArgList &Args, bool EmitCodeView, bool IRInput, ArgStringList &CmdArgs, llvm::codegenoptions::DebugInfoKind &DebugInfoKind, DwarfFissionKind &DwarfFission) {\n  // ...\n  if (Args.hasFlag(options::OPT_gembed_source, options::OPT_gno_embed_source, false)) {\n    // ...\n    if (RequestedDWARFVersion < 5)\n      D.Diag(diag::err_drv_argument_only_allowed_with) << A->getAsString(Args) << \"-gdwarf-5\";"},{q,5244,"#endif\n  // ...\n  if (LastPICDataRelArg) {\n    if (LastPICDataRelArg->getOption().matches(options::OPT_mno_pic_data_is_text_relative)) {\n      // ...\n      if (!PICLevel)\n        D.Diag(diag::err_drv_argument_only_allowed_with) << \"-mno-pic-data-is-text-relative\""},{q,7326,"#endif\n  // ...\n  if (VirtualFunctionElimination) {\n    // VFE requires full LTO (currently, this might be relaxed to allow ThinLTO\n    // in the future).\n    if (LTOMode != LTOK_Full)\n      D.Diag(diag::err_drv_argument_only_allowed_with) << \"-fvirtual-function-elimination\""},{q,7355,"#endif\n  // ...\n  if (WholeProgramVTables) {\n    // ...\n    // Check if we passed LTO options but they were suppressed because this is a\n    // device offloading action, or we passed device offload LTO options which\n    // were suppressed because this is not the device offload action.\n    // Check if we are using PS4 in regular LTO mode.\n    // Otherwise, issue an error.\n    if ((!IsUsingLTO && !D.isUsingLTO(!IsDeviceOffloadAction)) || (IsPS4 && !UnifiedLTO && (D.getLTOMode() != LTOK_Full)))\n      D.Diag(diag::err_drv_argument_only_allowed_with) << \"-fwhole-program-vtables\" << ((IsPS4 && !UnifiedLTO) ? \"-flto=full\" : \"-flto\");"},{G,315,"void darwin::Linker::AddLinkArgs(Compilation &C, const ArgList &Args, ArgStringList &CmdArgs, const InputInfoList &Inputs, VersionTuple Version, bool LinkerIsLLD) const {\n  // ...\n  if (!Args.hasArg(options::OPT_dynamiclib)) {\n    // ...\n    if ((A = Args.getLastArg(options::OPT_compatibility__version)) || (A = Args.getLastArg(options::OPT_current__version)) || (A = Args.getLastArg(options::OPT_install__name)))\n      D.Diag(diag::err_drv_argument_only_allowed_with) << A->getAsString(Args) << \"-dynamiclib\";"},{O,332,"void WebAssembly::addClangTargetOptions(const ArgList &DriverArgs, ArgStringList &CC1Args, Action::OffloadKind) const {\n  // ...\n  for (const Arg *A : DriverArgs.filtered(options::OPT_mllvm)) {\n    // ...\n    if (Opt.startswith(\"-emscripten-cxx-exceptions-allowed\")) {\n      // ...\n      if (!EmEHArgExists)\n        getDriver().Diag(diag::err_drv_argument_only_allowed_with) << \"-mllvm -emscripten-cxx-exceptions-allowed\""},{u,1776,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_fthinlto_index_EQ)) {\n    if (IK.getLanguage() != Language::LLVM_IR)\n      Diags.Report(diag::err_drv_argument_only_allowed_with) << A->getAsString(Args) << \"-x ir\";"},{u,2795,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Opts.ProgramAction != frontend::GenerateModule && Opts.IsSystemModule)\n    Diags.Report(diag::err_drv_argument_only_allowed_with) << \"-fsystem-module\""}}
	},
	["err_drv_bad_offload_arch_combo"]={
		[i]={{nil,w,"err_drv_bad_offload_arch_combo"}},
		[b]={{nil,o,"invalid offload arch combinations: \'%0\' and \'%1\' (for a specific processor, a feature should either exist in all offload archs, or not exist in any offload archs)"},{t,w,"Invalid offload arch combinations: %0 and %1 (For a specific processor, a feature should either exist in all offload archs, or not exist in any offload archs)"}},
		[c]={{nil,o,"invalid offload arch combinations: \'A\' and \'B\' (for a specific processor, a feature should either exist in all offload archs, or not exist in any offload archs)"},{t,w,"Invalid offload arch combinations: A and B (For a specific processor, a feature should either exist in all offload archs, or not exist in any offload archs)"}},
		[e]=d,
		[f]="invalid offload arch combinations\\: \'(.*?)\' and \'(.*?)\' \\(for a specific processor, a feature should either exist in all offload archs, or not exist in any offload archs\\)",
		[g]=a,
		[h]={{nil,w,n}},
		[j]={ab,1585492323,Z,bb},
		[k]={{x,3204,"/// 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      if (ConflictingArchs) {\n        C.getDriver().Diag(clang::diag::err_drv_bad_offload_arch_combo) << ConflictingArchs->first << ConflictingArchs->second;"},{x,4479,"llvm::DenseSet<StringRef> Driver::getOffloadArchs(Compilation &C, const llvm::opt::DerivedArgList &Args, Action::OffloadKind Kind, const ToolChain *TC, bool SuppressError) const {\n  // ...\n  if (auto ConflictingArchs = getConflictOffloadArchCombination(Archs, TC->getTriple())) {\n    C.getDriver().Diag(clang::diag::err_drv_bad_offload_arch_combo) << ConflictingArchs->first << ConflictingArchs->second;"}}
	},
	["err_drv_bad_target_id"]={
		[i]={{nil,w,"err_drv_bad_target_id"}},
		[b]={{nil,o,"invalid target ID \'%0\'; format is a processor name followed by an optional colon-delimited list of features followed by an enable/disable sign (e.g., \'gfx908:sramecc+:xnack-\')"},{t,w,"Invalid target ID: %0 (A target ID is a processor name followed by an optional list of predefined features post-fixed by a plus or minus sign deliminated by colon, e.g. \'gfx908:sramecc+:xnack-\')"}},
		[c]={{nil,o,"invalid target ID \'A\'; format is a processor name followed by an optional colon-delimited list of features followed by an enable/disable sign (e.g., \'gfx908:sramecc+:xnack-\')"},{t,w,"Invalid target ID: A (A target ID is a processor name followed by an optional list of predefined features post-fixed by a plus or minus sign deliminated by colon, e.g. \'gfx908:sramecc+:xnack-\')"}},
		[e]=d,
		[f]="invalid target ID \'(.*?)\'; format is a processor name followed by an optional colon\\-delimited list of features followed by an enable\\/disable sign \\(e\\.g\\., \'gfx908\\:sramecc\\+\\:xnack\\-\'\\)",
		[g]=a,
		[h]={{nil,w,n}},
		[j]={ab,1585492323,Z,bb},
		[k]={{x,3413,"/// 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    StringRef getCanonicalOffloadArch(StringRef IdStr) override {\n      // ...\n      if (!ArchStr) {\n        C.getDriver().Diag(clang::diag::err_drv_bad_target_id) << IdStr;"},{x,4376,"/// Returns the canonical name for the offloading architecture when using a HIP\n/// or CUDA architecture.\nstatic StringRef getCanonicalArchString(Compilation &C, const llvm::opt::DerivedArgList &Args, StringRef ArchStr, const llvm::Triple &Triple, bool SuppressError = false) {\n  // ...\n  if (IsAMDGpuArch(Arch)) {\n    // ...\n    if (!Arch) {\n      C.getDriver().Diag(clang::diag::err_drv_bad_target_id) << ArchStr;"},{yb,787,"void AMDGPUToolChain::checkTargetID(const llvm::opt::ArgList &DriverArgs) const {\n  // ...\n  if (PTID.OptionalTargetID && !PTID.OptionalGPUArch) {\n    getDriver().Diag(clang::diag::err_drv_bad_target_id) << *PTID.OptionalTargetID;"},{"clang/lib/Driver/ToolChains/HIPAMD.cpp",436,"void HIPAMDToolChain::checkTargetID(const llvm::opt::ArgList &DriverArgs) const {\n  // ...\n  if (PTID.OptionalTargetID && !PTID.OptionalGPUArch) {\n    getDriver().Diag(clang::diag::err_drv_bad_target_id) << *PTID.OptionalTargetID;"}}
	},
	["err_drv_bitcode_unsupported_on_toolchain"]={
		[i]="err_drv_bitcode_unsupported_on_toolchain",
		[b]="-fembed-bitcode is not supported on versions of iOS prior to 6.0",
		[c]="-fembed-bitcode is not supported on versions of iOS prior to 6.0",
		[e]=d,
		[f]="\\-fembed\\-bitcode is not supported on versions of iOS prior to 6\\.0",
		[g]=a,
		[h]=n,
		[j]={"574b0f2f9ca8",1456794478,"Introduce -fembed-bitcode driver option","Introduce -fembed-bitcode driver option\n\nSummary:\nThis is the clang driver part of the change to embedded bitcode. This\nincludes:\n1. -fembed-bitcode option which breaks down the compilation into two\nstages. The first stage emits optimized bitcode and the second stage\ncompiles bitcode into object file.\n2. -fembed-bitcode-marker option which doesn\'t really break down to\ntwo stages to speedup the compilation flow.\n3. pass the correct linker flag to darwin linker if tool chains supports\nembedded bitcode.\n\nReviewers: rsmith, thakis\n\nSubscribers: thakis, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D17390\n\nllvm-svn: 262282"},
		[k]={{G,395,"void darwin::Linker::AddLinkArgs(Compilation &C, const ArgList &Args, ArgStringList &CmdArgs, const InputInfoList &Inputs, VersionTuple Version, bool LinkerIsLLD) const {\n  // ...\n  // for embed-bitcode, use -bitcode_bundle in linker command\n  if (C.getDriver().embedBitcodeEnabled()) {\n    // Check if the toolchain supports bitcode build flow.\n    if (MachOTC.SupportsEmbeddedBitcode()) {\n    // ...\n    } else\n      D.Diag(diag::err_drv_bitcode_unsupported_on_toolchain);"}}
	},
	["err_drv_cannot_mix_options"]={
		[i]={{nil,z,"err_drv_cannot_mix_options"}},
		[b]={{nil,z,"cannot specify \'%1\' along with \'%0\'"}},
		[c]={{nil,z,"cannot specify \'B\' along with \'A\'"}},
		[e]=d,
		[f]="cannot specify \'(.*?)\' along with \'(.*?)\'",
		[g]=a,
		[h]={{nil,z,n}},
		[j]={U,1534346725,T,W},
		[k]={{G,2173,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  if (OSTarget) {\n    // Disallow mixing -target and -mtargetos=.\n    if (const auto *MTargetOSArg = Args.getLastArg(options::OPT_mtargetos_EQ)) {\n      // ...\n      getDriver().Diag(diag::err_drv_cannot_mix_options) << TargetArgStr << MTargetOSArgStr;"},{G,2216,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  if (OSTarget) {\n  // ...\n  } else if ((OSTarget = getDeploymentTargetFromMTargetOSArg(Args, getDriver(), SDKInfo))) {\n    // ...\n    if (OSVersionArgTarget) {\n      // ...\n      getDriver().Diag(diag::err_drv_cannot_mix_options) << MTargetOSArgStr << OSVersionArgStr;"},{tb,317,"static bool getStaticPIE(const ArgList &Args, const ToolChain &TC) {\n  // ...\n  // -no-pie is an alias for -nopie. So, handling -nopie takes care of\n  // -no-pie as well.\n  if (HasStaticPIE && Args.hasArg(options::OPT_nopie)) {\n    // ...\n    D.Diag(diag::err_drv_cannot_mix_options) << StaticPIEName << NoPIEName;"}}
	},
	["err_drv_cannot_open_config_file"]={
		[i]={{nil,D,"err_drv_cannot_open_config_file"}},
		[b]={{nil,D,"configuration file \'%0\' cannot be opened: %1"}},
		[c]={{nil,D,"configuration file \'A\' cannot be opened: B"}},
		[e]=d,
		[f]="configuration file \'(.*?)\' cannot be opened\\: (.*?)",
		[g]=a,
		[h]={{nil,D,n}},
		[j]={"17eb198de934",1665752829,"Handle errors in expansion of response files","Handle errors in expansion of response files\n\nPreviously an error raised during an expansion of response files (including\nconfiguration files) was ignored and only the fact of its presence was\nreported to the user with generic error messages. This made it difficult to\nanalyze problems. For example, if a configuration file tried to read an\ninexistent file, the error message said that \'configuration file cannot\nbe found\', which is wrong and misleading.\n\nThis change enhances handling errors in the expansion so that users\ncould get more informative error messages.\n\nDifferential Revision: https://reviews.llvm.org/D136090"},
		[k]={{x,1012,"bool Driver::readConfigFile(StringRef FileName, llvm::cl::ExpansionContext &ExpCtx) {\n  // ...\n  if (!Status) {\n    Diag(diag::err_drv_cannot_open_config_file) << FileName << Status.getError().message();"},{x,1017,"bool Driver::readConfigFile(StringRef FileName, llvm::cl::ExpansionContext &ExpCtx) {\n  // ...\n  if (Status->getType() != llvm::sys::fs::file_type::regular_file) {\n    Diag(diag::err_drv_cannot_open_config_file) << FileName << \"not a regular file\";"},{x,1104,"bool Driver::loadConfigFiles() {\n  // ...\n  if (CLOptions) {\n    for (auto CfgFileName : CLOptions->getAllArgValues(options::OPT_config)) {\n      // If argument contains directory separator, treat it as a path to\n      // configuration file.\n      if (llvm::sys::path::has_parent_path(CfgFileName)) {\n        // ...\n        if (llvm::sys::path::is_relative(CfgFilePath)) {\n          if (getVFS().makeAbsolute(CfgFilePath)) {\n            Diag(diag::err_drv_cannot_open_config_file) << CfgFilePath << \"cannot get absolute path\";"}}
	},
	["err_drv_cannot_open_randomize_layout_seed_file"]={
		[i]={{nil,s,"err_drv_cannot_open_randomize_layout_seed_file"}},
		[b]={{nil,s,"cannot read randomize layout seed file \'%0\'"}},
		[c]={{nil,s,"cannot read randomize layout seed file \'A\'"}},
		[e]=d,
		[f]="cannot read randomize layout seed file \'(.*?)\'",
		[g]=a,
		[h]={{nil,s,n}},
		[j]={"c5e5b54350fe",1645456106,"[CUDA] Add driver support for compiling CUDA with the new driver","[CUDA] Add driver support for compiling CUDA with the new driver\n\nThis patch adds the basic support for the clang driver to compile and link CUDA\nusing the new offloading driver. This requires handling the CUDA offloading kind\nand embedding the generated files into the host. This will allow us to link\nOpenMP code with CUDA code in the linker wrapper. More support will be required\nto create functional CUDA / HIP binaries using this method.\n\nDepends on D120270 D120271 D120934\n\nReviewed By: tra\n\nDifferential Revision: https://reviews.llvm.org/D120272"},
		[k]={{u,4060,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (const Arg *A = Args.getLastArg(OPT_frandomize_layout_seed_file_EQ)) {\n    // ...\n    if (!SeedFile.is_open())\n      Diags.Report(diag::err_drv_cannot_open_randomize_layout_seed_file) << A->getValue(0);"}}
	},
	["err_drv_cannot_read_config_file"]={
		[i]={{nil,y,"err_drv_cannot_read_config_file"}},
		[b]={{nil,D,"cannot read configuration file \'%0\': %1"},{s,y,"cannot read configuration file \'%0\'"}},
		[c]={{nil,D,"cannot read configuration file \'A\': B"},{s,y,"cannot read configuration file \'A\'"}},
		[e]=d,
		[f]="cannot read configuration file \'(.*?)\'\\: (.*?)",
		[g]=a,
		[h]={{nil,y,n}},
		[j]={"c92ca91472b9",1514656766,"Enable configuration files in clang","Enable configuration files in clang\n\nClang is inherently a cross compiler and can generate code for any target\nenabled during build. It however requires to specify many parameters in the\ninvocation, which could be hardcoded during configuration process in the\ncase of single-target compiler. The purpose of configuration files is to\nmake specifying clang arguments easier.\n\nA configuration file is a collection of driver options, which are inserted\ninto command line before other options specified in the clang invocation.\nIt groups related options together and allows specifying them in simpler,\nmore flexible and less error prone way than just listing the options\nsomewhere in build scripts. Configuration file may be thought as a \"macro\"\nthat names an option set and is expanded when the driver is called.\n\nUse of configuration files is described in `UserManual.rst`.\n\nDifferential Revision: https://reviews.llvm.org/D24933\n\nllvm-svn: 321587"},
		[k]={{x,1025,"bool Driver::readConfigFile(StringRef FileName, llvm::cl::ExpansionContext &ExpCtx) {\n  // ...\n  if (llvm::Error Err = ExpCtx.readConfigFile(FileName, NewCfgArgs)) {\n    Diag(diag::err_drv_cannot_read_config_file) << FileName << toString(std::move(Err));"}}
	},
	["err_drv_cc_print_options_failure"]={
		[i]="err_drv_cc_print_options_failure",
		[b]="unable to open CC_PRINT_OPTIONS file: %0",
		[c]="unable to open CC_PRINT_OPTIONS file: A",
		[e]=d,
		[f]="unable to open CC_PRINT_OPTIONS file\\: (.*?)",
		[g]=a,
		[h]=n,
		[j]={"6a8efa8a79e7",1269072119,"Driver: Support CC_PRINT_OPTIONS, used for logging the compile commands (in -v style) to a file.","Driver: Support CC_PRINT_OPTIONS, used for logging the compile commands (in -v style) to a file.\n\nllvm-svn: 99054"},
		[k]={{"clang/lib/Driver/Compilation.cpp",181,"int Compilation::ExecuteCommand(const Command &C, const Command *&FailingCommand, bool LogOnly) const {\n  if ((getDriver().CCPrintOptions || getArgs().hasArg(options::OPT_v)) && !getDriver().CCGenDiagnostics) {\n    // ...\n    // Follow gcc implementation of CC_PRINT_OPTIONS; we could also cache the\n    // output stream.\n    if (getDriver().CCPrintOptions && !getDriver().CCPrintOptionsFilename.empty()) {\n      // ...\n      if (EC) {\n        getDriver().Diag(diag::err_drv_cc_print_options_failure) << EC.message();"}}
	},
	["err_drv_clang_unsupported"]={
		[i]="err_drv_clang_unsupported",
		[b]="the clang compiler does not support \'%0\'",
		[c]="the clang compiler does not support \'A\'",
		[e]=d,
		[f]="the clang compiler does not support \'(.*?)\'",
		[g]=a,
		[h]=n,
		[j]={"adeeb052adb5",1243018940,"Don\'t warn about -funit-at-a-time, and reject -fno-unit-at-a-time.","Don\'t warn about -funit-at-a-time, and reject -fno-unit-at-a-time.\n - We could just warn about -fno-unit-at-a-time, but in practice people using it\n   probably aren\'t going to get what they want out of clang.\n\nAlso, use \"clang\" specified error for unsupported things instead of driver\nunsupported error.\n\nllvm-svn: 72272"},
		[k]={{sb,86,"// Handle -mhwdiv=.\n// FIXME: Use ARMTargetParser.\nstatic void getARMHWDivFeatures(const Driver &D, const Arg *A, const ArgList &Args, StringRef HWDiv, std::vector<StringRef> &Features) {\n  // ...\n  if (!llvm::ARM::getHWDivFeatures(HWDivID, Features))\n    D.Diag(clang::diag::err_drv_clang_unsupported) << A->getAsString(Args);"},{sb,95,"// Handle -mfpu=.\nstatic llvm::ARM::FPUKind getARMFPUFeatures(const Driver &D, const Arg *A, const ArgList &Args, StringRef FPU, std::vector<StringRef> &Features) {\n  // ...\n  if (!llvm::ARM::getFPUFeatures(FPUKind, Features))\n    D.Diag(clang::diag::err_drv_clang_unsupported) << A->getAsString(Args);"},{sb,628,"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 (WaFPU) {\n  // ...\n  } else if (FPUArg) {\n  // ...\n  } else if (Triple.isAndroid() && getARMSubArchVersionNumber(Triple) >= 7) {\n    // ...\n    if (!llvm::ARM::getFPUFeatures(FPUKind, Features))\n      D.Diag(clang::diag::err_drv_clang_unsupported) << std::string(\"-mfpu=\") + AndroidFPU;"},{lb,44,"std::optional<llvm::StringRef> csky::getCSKYArchName(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // ...\n  if (const Arg *A = Args.getLastArg(clang::driver::options::OPT_mcpu_EQ)) {\n    // ...\n    if (ArchKind == llvm::CSKY::ArchKind::INVALID) {\n      D.Diag(clang::diag::err_drv_clang_unsupported) << A->getAsString(Args);"},{lb,95,"// Handle -mfpu=.\nstatic llvm::CSKY::CSKYFPUKind getCSKYFPUFeatures(const Driver &D, const Arg *A, const ArgList &Args, StringRef FPU, std::vector<StringRef> &Features) {\n  // ...\n  if (FPUID == llvm::CSKY::FK_INVALID) {\n    D.Diag(clang::diag::err_drv_clang_unsupported) << A->getAsString(Args);"},{lb,112,"// Handle -mfpu=.\nstatic llvm::CSKY::CSKYFPUKind getCSKYFPUFeatures(const Driver &D, const Arg *A, const ArgList &Args, StringRef FPU, std::vector<StringRef> &Features) {\n  // ...\n  if (!llvm::CSKY::getFPUFeatures(FPUID, Features)) {\n    D.Diag(clang::diag::err_drv_clang_unsupported) << A->getAsString(Args);"},{lb,137,"void csky::getCSKYTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, ArgStringList &CmdArgs, std::vector<llvm::StringRef> &Features) {\n  // ...\n  if (const Arg *A = Args.getLastArg(clang::driver::options::OPT_mcpu_EQ)) {\n    // ...\n    if (Kind == llvm::CSKY::ArchKind::INVALID) {\n      D.Diag(clang::diag::err_drv_clang_unsupported) << A->getAsString(Args);"},{lb,141,"void csky::getCSKYTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, ArgStringList &CmdArgs, std::vector<llvm::StringRef> &Features) {\n  // ...\n  if (const Arg *A = Args.getLastArg(clang::driver::options::OPT_mcpu_EQ)) {\n    // ...\n    if (!archName.empty() && Kind != ArchKind) {\n      D.Diag(clang::diag::err_drv_clang_unsupported) << A->getAsString(Args);"},{q,4673,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  // C++ is not supported for IAMCU.\n  if (IsIAMCU && types::isCXX(Input.getType()))\n    D.Diag(diag::err_drv_clang_unsupported) << \"C++ for IAMCU\";"},{q,6970,"#endif\n  // ...\n  // -fsigned-bitfields is default, and clang doesn\'t support -fno-for-scope.\n  if (!Args.hasFlag(options::OPT_ffor_scope, options::OPT_fno_for_scope, true))\n    D.Diag(diag::err_drv_clang_unsupported) << Args.getLastArg(options::OPT_fno_for_scope)->getAsString(Args);"},{q,7061,"#endif\n  // ...\n  // Only allow -traditional or -traditional-cpp outside in preprocessing modes.\n  if (Arg *A = Args.getLastArg(options::OPT_traditional, options::OPT_traditional_cpp)) {\n    if (isa<PreprocessJobAction>(JA))\n    // ...\n    else\n      D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args);"},{q,7624,"/// Add options related to the Objective-C runtime/ABI.\n///\n/// Returns true if the runtime is non-fragile.\nObjCRuntime Clang::AddObjCRuntimeArgs(const ArgList &args, const InputInfoList &inputs, ArgStringList &cmdArgs, RewriteKind rewriteKind) const {\n  // ...\n  // If -fobjc-abi-version= is present, use that to set the version.\n  if (Arg *abiArg = args.getLastArg(options::OPT_fobjc_abi_version_EQ)) {\n    // ...\n    if (value == \"1\")\n    // ...\n    else if (value == \"2\")\n    // ...\n    else if (value == \"3\")\n    // ...\n    else\n      getToolChain().getDriver().Diag(diag::err_drv_clang_unsupported) << value;"},{q,7649,"#endif\n      if (Arg *abiArg = args.getLastArg(options::OPT_fobjc_nonfragile_abi_version_EQ)) {\n        // ...\n        if (value == \"1\")\n        // ...\n        else if (value == \"2\")\n        // ...\n        else\n          getToolChain().getDriver().Diag(diag::err_drv_clang_unsupported) << value;"},{"clang/lib/Driver/ToolChains/MSP430.cpp",61,"void msp430::getMSP430TargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  if (MCU && !isSupportedMCU(MCU->getValue())) {\n    D.Diag(diag::err_drv_clang_unsupported) << MCU->getValue();"}}
	},
	["err_drv_clang_unsupported_opt_cxx_darwin_i386"]={
		[i]="err_drv_clang_unsupported_opt_cxx_darwin_i386",
		[b]="the clang compiler does not support \'%0\' for C++ on Darwin/i386",
		[c]="the clang compiler does not support \'A\' for C++ on Darwin/i386",
		[e]=d,
		[f]="the clang compiler does not support \'(.*?)\' for C\\+\\+ on Darwin\\/i386",
		[g]=a,
		[h]=n,
		[j]={"fcc49a8f1f0b",1273688398,"Driver/Darwin/i386: Don\'t allow compiling C++ with -fapple-kext, we don\'t support the necessary ABI ...","Driver/Darwin/i386: Don\'t allow compiling C++ with -fapple-kext, we don\'t support the necessary ABI yet.\n\nllvm-svn: 103632"},
		[k]={{q,5759,"#endif\n  // ...\n  // Explicitly error on some things we know we don\'t support and can\'t just\n  // ignore.\n  if (!Args.hasArg(options::OPT_fallow_unsupported)) {\n    // ...\n    if (types::isCXX(InputType) && RawTriple.isOSDarwin() && TC.getArch() == llvm::Triple::x86) {\n      if ((Unsupported = Args.getLastArg(options::OPT_fapple_kext)) || (Unsupported = Args.getLastArg(options::OPT_mkernel)))\n        D.Diag(diag::err_drv_clang_unsupported_opt_cxx_darwin_i386) << Unsupported->getOption().getName();"}}
	},
	["err_drv_clang_unsupported_opt_faltivec"]={
		[i]={{nil,p,"err_drv_clang_unsupported_opt_faltivec"}},
		[b]={{nil,p,"the clang compiler does not support \'%0\', %1"}},
		[c]={{nil,p,"the clang compiler does not support \'A\', B"}},
		[e]=d,
		[f]="the clang compiler does not support \'(.*?)\', (.*?)",
		[g]=a,
		[h]={{nil,p,n}},
		[j]={"758aad76d880",1490133978,"Remove the -faltivec alias option and replace it with -maltivec everywhere.","Remove the -faltivec alias option and replace it with -maltivec everywhere.\nThe alias was only ever used on darwin and had some issues there,\nand isn\'t used in practice much. Also fixes a problem with -mno-altivec\nnot turning off -maltivec.\n\nAlso add a diagnostic for faltivec/fno-altivec that directs users to use\nmaltivec options and include the altivec.h file explicitly.\n\nllvm-svn: 298449"},
		[k]={{q,5764,"#endif\n  // ...\n  // Explicitly error on some things we know we don\'t support and can\'t just\n  // ignore.\n  if (!Args.hasArg(options::OPT_fallow_unsupported)) {\n    // ...\n    // The faltivec option has been superseded by the maltivec option.\n    if ((Unsupported = Args.getLastArg(options::OPT_faltivec)))\n      D.Diag(diag::err_drv_clang_unsupported_opt_faltivec) << Unsupported->getOption().getName() << \"please use -maltivec and include altivec.h explicitly\";"},{q,5768,"#endif\n  // ...\n  // Explicitly error on some things we know we don\'t support and can\'t just\n  // ignore.\n  if (!Args.hasArg(options::OPT_fallow_unsupported)) {\n    // ...\n    if ((Unsupported = Args.getLastArg(options::OPT_fno_altivec)))\n      D.Diag(diag::err_drv_clang_unsupported_opt_faltivec) << Unsupported->getOption().getName() << \"please use -mno-altivec\";"}}
	},
	["err_drv_clang_unsupported_opt_pg_darwin"]={
		[i]={{nil,z,"err_drv_clang_unsupported_opt_pg_darwin"}},
		[b]={{nil,z,"the clang compiler does not support -pg option on %select{Darwin|versions of OS X 10.9 and later}0"}},
		[c]={{nil,z,{"the clang compiler does not support -pg option on ",{"Darwin","versions of OS X 10.9 and later"}}}},
		[e]=d,
		[f]="the clang compiler does not support \\-pg option on (?:Darwin|versions of OS X 10\\.9 and later)",
		[g]=a,
		[h]={{nil,z,n}},
		[j]={U,1534346725,T,W},
		[k]={{G,3239,"// Add additional link args for the -pg option.\nstatic void addPgProfilingLinkArgs(const Darwin &D, const ArgList &Args, ArgStringList &CmdArgs) {\n  if (D.isTargetMacOS() && D.isMacosxVersionLT(10, 9)) {\n  // ...\n  } else {\n    D.getDriver().Diag(diag::err_drv_clang_unsupported_opt_pg_darwin) << D.isTargetMacOSBased();"}}
	},
	["err_drv_command_failed"]={
		[i]="err_drv_command_failed",
		[b]="%0 command failed with exit code %1 (use -v to see invocation)",
		[c]="A command failed with exit code B (use -v to see invocation)",
		[e]=d,
		[f]="(.*?) command failed with exit code (.*?) \\(use \\-v to see invocation\\)",
		[g]=a,
		[h]=n,
		[j]={"aa246cafaa7b",1246475679,"Driver: Improve diagnostics for failed commands.","Driver: Improve diagnostics for failed commands.\n - Not all tools give good error messages, and sometimes the tool can fail w/o\n   any error (for example, when signalled).\n\n - We suppress this message when the failing command is the compiler and it\n   failed normally (exit code == 1), under the assumption that it gave a good\n   diagnostic.\n\nFor example, for a linker failure we now get:\n--\nddunbar@lordcrumb:tmp$ clang a.c b.c\nld: duplicate symbol _x in /var/folders/cl/clrOX6SaG+moCeRKEI4PtU+++TI/-Tmp-/cc-bXYITq.o and /var/folders/cl/clrOX6SaG+moCeRKEI4PtU+++TI/-Tmp-/cc-6uK4jD.o\nclang: error: linker command failed with exit code 1 (use -v to see invocation)\n--\n\nFor a compiler crash we get:\n--\nddunbar@lordcrumb:tmp$ clang t.i\nAssertion failed: (CGT.getTargetData().getTypeAllocSizeInBits(STy) == RL.getSize()), function layoutStructFields, file CodeGenTypes.cpp, line 573.\n0   clang-cc          0x0000000100f1f1f1 PrintStackTrace(void*) + 38\n... stack trace and virtual stack trace follow ...\nclang: error: compiler command failed due to signal 6 (use -v to see invocation)\n--\n\nBut for a regular compilation failure we get the usual:\n--\nddunbar@lordcrumb:tmp$ clang c.c\nc.c:1:6: error: invalid token after top level declarator\nint x\n     ^\n1 diagnostic generated.\n--\n\n - No test case, not amenable to non-executable testing. :/\n\n - <rdar://problem/6945613>\n\nllvm-svn: 74629"},
		[k]={{x,1949,"int Driver::ExecuteCompilation(Compilation &C, SmallVectorImpl<std::pair<int, const Command *>> &FailingCommands) {\n  // ...\n  for (const auto &CmdPair : FailingCommands) {\n    // ...\n    if (!FailingCommand->getCreator().hasGoodDiagnostics() || CommandRes != 1) {\n      // FIXME: See FIXME above regarding result code interpretation.\n      if (CommandRes < 0)\n      // ...\n      else\n        Diag(clang::diag::err_drv_command_failed) << FailingTool.getShortName() << CommandRes;"}},
		[l]={
			["clang/test/Driver/freebsd.c"]={"clang: error: linker command failed with exit code 1 (use -v to see invocation)"}
		}
	},
	["err_drv_command_failure"]={
		[i]="err_drv_command_failure",
		[b]="unable to execute command: %0",
		[c]="unable to execute command: A",
		[e]=d,
		[f]="unable to execute command\\: (.*?)",
		[g]=a,
		[h]=n,
		[j]={"64316c49a6b6",1237416264,"Driver: Execute jobs; no pipe support yet.","Driver: Execute jobs; no pipe support yet.\n\nllvm-svn: 67250"},
		[k]={{"clang/lib/Driver/Compilation.cpp",205,"int Compilation::ExecuteCommand(const Command &C, const Command *&FailingCommand, bool LogOnly) const {\n  // ...\n  if (!Error.empty()) {\n    // ...\n    getDriver().Diag(diag::err_drv_command_failure) << Error;"}}
	},
	["err_drv_command_signalled"]={
		[i]="err_drv_command_signalled",
		[b]="%0 command failed due to signal (use -v to see invocation)",
		[c]="A command failed due to signal (use -v to see invocation)",
		[e]=d,
		[f]="(.*?) command failed due to signal \\(use \\-v to see invocation\\)",
		[g]=a,
		[h]=n,
		[j]={"aa246cafaa7b",1246475679,"Driver: Improve diagnostics for failed commands.","Driver: Improve diagnostics for failed commands.\n - Not all tools give good error messages, and sometimes the tool can fail w/o\n   any error (for example, when signalled).\n\n - We suppress this message when the failing command is the compiler and it\n   failed normally (exit code == 1), under the assumption that it gave a good\n   diagnostic.\n\nFor example, for a linker failure we now get:\n--\nddunbar@lordcrumb:tmp$ clang a.c b.c\nld: duplicate symbol _x in /var/folders/cl/clrOX6SaG+moCeRKEI4PtU+++TI/-Tmp-/cc-bXYITq.o and /var/folders/cl/clrOX6SaG+moCeRKEI4PtU+++TI/-Tmp-/cc-6uK4jD.o\nclang: error: linker command failed with exit code 1 (use -v to see invocation)\n--\n\nFor a compiler crash we get:\n--\nddunbar@lordcrumb:tmp$ clang t.i\nAssertion failed: (CGT.getTargetData().getTypeAllocSizeInBits(STy) == RL.getSize()), function layoutStructFields, file CodeGenTypes.cpp, line 573.\n0   clang-cc          0x0000000100f1f1f1 PrintStackTrace(void*) + 38\n... stack trace and virtual stack trace follow ...\nclang: error: compiler command failed due to signal 6 (use -v to see invocation)\n--\n\nBut for a regular compilation failure we get the usual:\n--\nddunbar@lordcrumb:tmp$ clang c.c\nc.c:1:6: error: invalid token after top level declarator\nint x\n     ^\n1 diagnostic generated.\n--\n\n - No test case, not amenable to non-executable testing. :/\n\n - <rdar://problem/6945613>\n\nllvm-svn: 74629"},
		[k]={{x,1946,"int Driver::ExecuteCompilation(Compilation &C, SmallVectorImpl<std::pair<int, const Command *>> &FailingCommands) {\n  // ...\n  for (const auto &CmdPair : FailingCommands) {\n    // ...\n    if (!FailingCommand->getCreator().hasGoodDiagnostics() || CommandRes != 1) {\n      // FIXME: See FIXME above regarding result code interpretation.\n      if (CommandRes < 0)\n        Diag(clang::diag::err_drv_command_signalled) << FailingTool.getShortName();"}}
	},
	["err_drv_compilationdatabase"]={
		[i]="err_drv_compilationdatabase",
		[b]="compilation database \'%0\' could not be opened: %1",
		[c]="compilation database \'A\' could not be opened: B",
		[e]=d,
		[f]="compilation database \'(.*?)\' could not be opened\\: (.*?)",
		[g]=a,
		[h]=n,
		[j]={"cbc872549cf8",1481042002,"Allow clang to write compilation database records.","Allow clang to write compilation database records.\n\nWhen integrating compilation database output into existing build\nsystems, two approaches dominate so far. Ad-hoc implementation of the\nJSON output rules or using compiler wrappers. This patch adds a new\noption \"-MJ foo.json\" which gives a slightly cleaned up compilation\nrecord. The output is a fragment, i.e. you still need to add the array\nmarkers, but it allows multiple files to be easy merged.\n\nThis way the only change in a build system is adding the option with\npotentially a per-target output file and merging the files with\nsomething like\n  (echo \'[\'; cat *.o.json; echo \']\' > compilation_database.json\nor some additional filtering to remove the trailing comma for strict\nJSON compliance.\n\nDifferential Revision: https://reviews.llvm.org/D27140\n\nllvm-svn: 288821"},
		[k]={{q,2426,"void Clang::DumpCompilationDatabase(Compilation &C, StringRef Filename, StringRef Target, const InputInfo &Output, const InputInfo &Input, const ArgList &Args) const {\n  // ...\n  if (!CompilationDatabase) {\n    // ...\n    if (EC) {\n      D.Diag(clang::diag::err_drv_compilationdatabase) << Filename << EC.message();"},{q,2493,"void Clang::DumpCompilationDatabaseFragmentToDir(StringRef Dir, Compilation &C, StringRef Target, const InputInfo &Output, const InputInfo &Input, const llvm::opt::ArgList &Args) const {\n  // ...\n  if (Err) {\n    Driver.Diag(diag::err_drv_compilationdatabase) << Dir << Err.message();"},{q,2505,"void Clang::DumpCompilationDatabaseFragmentToDir(StringRef Dir, Compilation &C, StringRef Target, const InputInfo &Output, const InputInfo &Input, const llvm::opt::ArgList &Args) const {\n  // ...\n  if (Err) {\n    Driver.Diag(diag::err_drv_compilationdatabase) << Path << Err.message();"}}
	},
	["err_drv_config_file_not_found"]={
		[i]={{nil,y,"err_drv_config_file_not_found"}},
		[b]={{nil,y,"configuration file \'%0\' cannot be found"}},
		[c]={{nil,y,"configuration file \'A\' cannot be found"}},
		[e]=d,
		[f]="configuration file \'(.*?)\' cannot be found",
		[g]=a,
		[h]={{nil,y,n}},
		[j]={"c92ca91472b9",1514656766,"Enable configuration files in clang","Enable configuration files in clang\n\nClang is inherently a cross compiler and can generate code for any target\nenabled during build. It however requires to specify many parameters in the\ninvocation, which could be hardcoded during configuration process in the\ncase of single-target compiler. The purpose of configuration files is to\nmake specifying clang arguments easier.\n\nA configuration file is a collection of driver options, which are inserted\ninto command line before other options specified in the clang invocation.\nIt groups related options together and allows specifying them in simpler,\nmore flexible and less error prone way than just listing the options\nsomewhere in build scripts. Configuration file may be thought as a \"macro\"\nthat names an option set and is expanded when the driver is called.\n\nUse of configuration files is described in `UserManual.rst`.\n\nDifferential Revision: https://reviews.llvm.org/D24933\n\nllvm-svn: 321587"},
		[k]={{x,1111,"bool Driver::loadConfigFiles() {\n  // ...\n  if (CLOptions) {\n    for (auto CfgFileName : CLOptions->getAllArgValues(options::OPT_config)) {\n      // If argument contains directory separator, treat it as a path to\n      // configuration file.\n      if (llvm::sys::path::has_parent_path(CfgFileName)) {\n      // ...\n      } else if (!ExpCtx.findConfigFile(CfgFileName, CfgFilePath)) {\n        // ...\n        Diag(diag::err_drv_config_file_not_found) << CfgFileName;"}}
	},
	["err_drv_conflicting_deployment_targets"]={
		[i]="err_drv_conflicting_deployment_targets",
		[b]="conflicting deployment targets, both \'%0\' and \'%1\' are present in environment",
		[c]="conflicting deployment targets, both \'A\' and \'B\' are present in environment",
		[e]=d,
		[f]="conflicting deployment targets, both \'(.*?)\' and \'(.*?)\' are present in environment",
		[g]=a,
		[h]=n,
		[j]={"d54669d30b8f",1264470319,"Driver/Darwin: Honor IPHONEOS_DEPLOYMENT_TARGET.","Driver/Darwin: Honor IPHONEOS_DEPLOYMENT_TARGET.\n\nllvm-svn: 94488"},
		[k]={{G,1906,"/// Returns the deployment target that\'s specified using the\n/// OS_DEPLOYMENT_TARGET environment variable.\nstd::optional<DarwinPlatform> getDeploymentTargetFromEnvironmentVariables(const Driver &TheDriver, const llvm::Triple &Triple) {\n  // ...\n  // Allow conflicts among OSX and iOS for historical reasons, but choose the\n  // default platform.\n  if (!Targets[Darwin::MacOS].empty() && (!Targets[Darwin::IPhoneOS].empty() || !Targets[Darwin::WatchOS].empty() || !Targets[Darwin::TvOS].empty())) {\n  // ...\n  } else {\n    // ...\n    for (unsigned I = 0; I != std::size(Targets); ++I) {\n      // ...\n      if (FirstTarget == std::size(Targets))\n      // ...\n      else\n        TheDriver.Diag(diag::err_drv_conflicting_deployment_targets) << Targets[FirstTarget] << Targets[I];"}}
	},
	["err_drv_cuda_bad_gpu_arch"]={
		[i]="err_drv_cuda_bad_gpu_arch",
		[b]={{nil,o,"unsupported CUDA gpu architecture: %0"},{t,nil,"Unsupported CUDA gpu architecture: %0"}},
		[c]={{nil,o,"unsupported CUDA gpu architecture: A"},{t,nil,"Unsupported CUDA gpu architecture: A"}},
		[e]=d,
		[f]="unsupported CUDA gpu architecture\\: (.*?)",
		[g]=a,
		[h]=n,
		[j]={"7bf779859a2c",1452554833,"[CUDA] Reject values for --cuda-gpu-arch that are not of the form /sm_\\d+/.","[CUDA] Reject values for --cuda-gpu-arch that are not of the form /sm_\\d+/.\n\nReviewers: tra\n\nSubscribers: cfe-commits, jhen, echristo\n\nDifferential Revision: http://reviews.llvm.org/D16079\n\nllvm-svn: 257413"},
		[k]={{x,3241,"/// Provides a convenient interface for different programming models to generate\n/// the required device actions.\nclass OffloadingActionBuilder final {\n  // ...\n  /// \\brief CUDA action builder. It injects device code in the host backend\n  /// action.\n  class CudaActionBuilder final : public CudaActionBuilderBase {\n    // ...\n    StringRef getCanonicalOffloadArch(StringRef ArchStr) override {\n      // ...\n      if (Arch == CudaArch::UNKNOWN || !IsNVIDIAGpuArch(Arch)) {\n        C.getDriver().Diag(clang::diag::err_drv_cuda_bad_gpu_arch) << ArchStr;"}}
	},
	["err_drv_cuda_host_arch"]={
		[i]={{nil,B,"err_drv_cuda_host_arch"}},
		[b]={{nil,o,"unsupported architecture \'%0\' for host compilation"},{t,B,"unsupported architecture \'%0\' for host compilation."}},
		[c]={{nil,o,"unsupported architecture \'A\' for host compilation"},{t,B,"unsupported architecture \'A\' for host compilation."}},
		[e]=d,
		[f]="unsupported architecture \'(.*?)\' for host compilation",
		[g]=a,
		[h]={{nil,B,n}},
		[j]={"00f31d514c05",1526066074,"[HIP] Diagnose unsupported host triple","[HIP] Diagnose unsupported host triple\n\nDifferential Revision: https://reviews.llvm.org/D46487\n\nllvm-svn: 332122"},
		[k]={{x,3125,"/// 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      if (HostTC->getTriple().isNVPTX() || HostTC->getTriple().getArch() == llvm::Triple::amdgcn) {\n        // ...\n        C.getDriver().Diag(diag::err_drv_cuda_host_arch) << HostTC->getTriple().getArchName();"}}
	},
	["err_drv_cuda_offload_only_emit_bc"]={
		[i]={{nil,o,"err_drv_cuda_offload_only_emit_bc"}},
		[b]={{nil,o,"CUDA offload target is supported only along with --emit-llvm"}},
		[c]={{nil,o,"CUDA offload target is supported only along with --emit-llvm"}},
		[e]=d,
		[f]="CUDA offload target is supported only along with \\-\\-emit\\-llvm",
		[g]=a,
		[h]={{nil,o,n}},
		[j]={N,1610286626,J,L},
		[k]={{x,144,"static std::optional<llvm::Triple> getNVIDIAOffloadTargetTriple(const Driver &D, const ArgList &Args, const llvm::Triple &HostTriple) {\n  // ...\n  if (TT && (TT->getArch() == llvm::Triple::spirv32 || TT->getArch() == llvm::Triple::spirv64)) {\n    // ...\n    D.Diag(diag::err_drv_cuda_offload_only_emit_bc);"}}
	},
	["err_drv_cuda_version_unsupported"]={
		[i]={{nil,y,"err_drv_cuda_version_unsupported"}},
		[b]={{nil,o,"GPU arch %0 is supported by CUDA versions between %1 and %2 (inclusive), but installation at %3 is %4; use \'--cuda-path\' to specify a different CUDA install, pass a different GPU arch with \'--cuda-gpu-arch\', or pass \'--no-cuda-version-check\'"},{t,A,"GPU arch %0 is supported by CUDA versions between %1 and %2 (inclusive), but installation at %3 is %4. Use --cuda-path to specify a different CUDA install, pass a different GPU arch with --cuda-gpu-arch, or pass --no-cuda-version-check."},{v,y,"GPU arch %0 is supported by CUDA versions between %1 and %2 (inclusive), but installation at %3 is %4.  Use --cuda-path to specify a different CUDA install, pass a different GPU arch with --cuda-gpu-arch, or pass --no-cuda-version-check."}},
		[c]={{nil,o,"GPU arch A is supported by CUDA versions between B and C (inclusive), but installation at D is E; use \'--cuda-path\' to specify a different CUDA install, pass a different GPU arch with \'--cuda-gpu-arch\', or pass \'--no-cuda-version-check\'"},{t,A,"GPU arch A is supported by CUDA versions between B and C (inclusive), but installation at D is E. Use --cuda-path to specify a different CUDA install, pass a different GPU arch with --cuda-gpu-arch, or pass --no-cuda-version-check."},{v,y,"GPU arch A is supported by CUDA versions between B and C (inclusive), but installation at D is E.  Use --cuda-path to specify a different CUDA install, pass a different GPU arch with --cuda-gpu-arch, or pass --no-cuda-version-check."}},
		[e]=d,
		[f]="GPU arch (.*?) is supported by CUDA versions between (.*?) and (.*?) \\(inclusive\\), but installation at (.*?) is (.*?); use \'\\-\\-cuda\\-path\' to specify a different CUDA install, pass a different GPU arch with \'\\-\\-cuda\\-gpu\\-arch\', or pass \'\\-\\-no\\-cuda\\-version\\-check\'",
		[g]=a,
		[h]={{nil,y,n}},
		[j]={"066494d8c1a1",1508967126,"[CUDA] Print an error if you try to compile with < sm_30 on CUDA 9.","[CUDA] Print an error if you try to compile with < sm_30 on CUDA 9.\n\nSummary:\nCUDA 9\'s minimum sm is sm_30.\n\nIdeally we should also make sm_30 the default when compiling with CUDA\n9, but that seems harder than it should be.\n\nSubscribers: sanjoy\n\nDifferential Revision: https://reviews.llvm.org/D39109\n\nllvm-svn: 316611"},
		[k]={{Zb,317,"void CudaInstallationDetector::CheckCudaVersionSupportsArch(CudaArch Arch) const {\n  // ...\n  if (Version < MinVersion || Version > MaxVersion) {\n    // ...\n    D.Diag(diag::err_drv_cuda_version_unsupported) << CudaArchToString(Arch) << CudaVersionToString(MinVersion) << CudaVersionToString(MaxVersion) << InstallPath << CudaVersionToString(Version);"}}
	},
	["err_drv_darwin_sdk_missing_arclite"]={
		[i]="err_drv_darwin_sdk_missing_arclite",
		[b]="SDK does not contain \'libarclite\' at the path \'%0\'; try increasing the minimum deployment target",
		[c]="SDK does not contain \'libarclite\' at the path \'A\'; try increasing the minimum deployment target",
		[e]=d,
		[f]="SDK does not contain \'libarclite\' at the path \'(.*?)\'; try increasing the minimum deployment target",
		[g]=a,
		[h]=n,
		[j]={"1d511e1864f1",1684763280,"[ARM][Driver] Warn if -mhard-float is incompatible","[ARM][Driver] Warn if -mhard-float is incompatible\n\nMixing -mfloat-abi=hard with a CPU that doesn\'t have floating point\nregisters is an error in GCC:\n  cc1: error: \'-mfloat-abi=hard\': selected processor lacks an FPU\n\nSince there is code in the wild (including in clang tests) that relies\non Clang\'s current behaviour, emit a warning instead of an error.\n\nUnlike the GCC error, the new warning refers to floating point\nregisters instead of an FPU. This is because -mfloat-abi=hard and\n-march=armv8.1-m.main+mve+nofp are compatible - in that case floating\npoint registers are required, but an FPU is not required.\n\nMy initial thought was to use the floating point ABI calculated by\narm::getARMFloatABI() but in invalid cases which error for other\nreasons the ABI is miscalculated and the warning would cause confusion.\nTherefore only warn if the user specifies the float ABI explicitly.\n\nFixes part of https://github.com/llvm/llvm-project/issues/55755\n\nDifferential Revision: https://reviews.llvm.org/D150902"},
		[k]={{G,1239,"void DarwinClang::AddLinkARCArgs(const ArgList &Args, ArgStringList &CmdArgs) const {\n  // ...\n  if (!getVFS().exists(P))\n    getDriver().Diag(clang::diag::err_drv_darwin_sdk_missing_arclite) << P;"}}
	},
	["err_drv_defsym_invalid_format"]={
		[i]="err_drv_defsym_invalid_format",
		[b]="defsym must be of the form: sym=value: %0",
		[c]="defsym must be of the form: sym=value: A",
		[e]=d,
		[f]="defsym must be of the form\\: sym\\=value\\: (.*?)",
		[g]=a,
		[h]=n,
		[j]={"6d1d36c4b7c3",1480992556,"[clang] Fix D26214: Move error handling out of MC and to the callers.","[clang] Fix D26214: Move error handling out of MC and to the callers.\n\nSummary: Related llvm patch: https://reviews.llvm.org/D27359\n\nReviewers: echristo, t.p.northover, rengolin, grosbach, compnerd\n\nSubscribers: mehdi_amini, cfe-commits, llvm-commits\n\nTags: #clang-c\n\nDifferential Revision: https://reviews.llvm.org/D27360\n\nllvm-svn: 288762"},
		[k]={{q,2705,"static void CollectArgsForIntegratedAssembler(Compilation &C, const ArgList &Args, ArgStringList &CmdArgs, const Driver &D) {\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_Wa_COMMA, options::OPT_Xassembler, options::OPT_mimplicit_it_EQ)) {\n    // ...\n    for (StringRef Value : A->getValues()) {\n      // ...\n      if (Value == \"-force_cpusubtype_ALL\") {\n      // ...\n      } else if (Value == \"-L\") {\n      // ...\n      } else if (Value == \"--fatal-warnings\") {\n      // ...\n      } else if (Value == \"--no-warn\" || Value == \"-W\") {\n      // ...\n      } else if (Value == \"--noexecstack\") {\n      // ...\n      } else if (Value.startswith(\"-compress-debug-sections\") || Value.startswith(\"--compress-debug-sections\") || Value == \"-nocompress-debug-sections\" || Value == \"--nocompress-debug-sections\") {\n      // ...\n      } else if (Value == \"-mrelax-relocations=yes\" || Value == \"--mrelax-relocations=yes\") {\n      // ...\n      } else if (Value == \"-mrelax-relocations=no\" || Value == \"--mrelax-relocations=no\") {\n      // ...\n      } else if (Value.startswith(\"-I\")) {\n      // ...\n      } else if (Value.startswith(\"-gdwarf-\")) {\n      // ...\n      } else if (Value.startswith(\"-mcpu\") || Value.startswith(\"-mfpu\") || Value.startswith(\"-mhwdiv\") || Value.startswith(\"-march\")) {\n      // ...\n      } else if (Value == \"-defsym\") {\n        if (A->getNumValues() != 2) {\n          D.Diag(diag::err_drv_defsym_invalid_format) << Value;"},{q,2714,"static void CollectArgsForIntegratedAssembler(Compilation &C, const ArgList &Args, ArgStringList &CmdArgs, const Driver &D) {\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_Wa_COMMA, options::OPT_Xassembler, options::OPT_mimplicit_it_EQ)) {\n    // ...\n    for (StringRef Value : A->getValues()) {\n      // ...\n      if (Value == \"-force_cpusubtype_ALL\") {\n      // ...\n      } else if (Value == \"-L\") {\n      // ...\n      } else if (Value == \"--fatal-warnings\") {\n      // ...\n      } else if (Value == \"--no-warn\" || Value == \"-W\") {\n      // ...\n      } else if (Value == \"--noexecstack\") {\n      // ...\n      } else if (Value.startswith(\"-compress-debug-sections\") || Value.startswith(\"--compress-debug-sections\") || Value == \"-nocompress-debug-sections\" || Value == \"--nocompress-debug-sections\") {\n      // ...\n      } else if (Value == \"-mrelax-relocations=yes\" || Value == \"--mrelax-relocations=yes\") {\n      // ...\n      } else if (Value == \"-mrelax-relocations=no\" || Value == \"--mrelax-relocations=no\") {\n      // ...\n      } else if (Value.startswith(\"-I\")) {\n      // ...\n      } else if (Value.startswith(\"-gdwarf-\")) {\n      // ...\n      } else if (Value.startswith(\"-mcpu\") || Value.startswith(\"-mfpu\") || Value.startswith(\"-mhwdiv\") || Value.startswith(\"-march\")) {\n      // ...\n      } else if (Value == \"-defsym\") {\n        // ...\n        if (Sym.empty() || SVal.empty()) {\n          D.Diag(diag::err_drv_defsym_invalid_format) << S;"}}
	},
	["err_drv_defsym_invalid_symval"]={
		[i]="err_drv_defsym_invalid_symval",
		[b]={{nil,o,"value is not an integer: %0"},{t,nil,"Value is not an integer: %0"}},
		[c]={{nil,o,"value is not an integer: A"},{t,nil,"Value is not an integer: A"}},
		[e]=d,
		[f]="value is not an integer\\: (.*?)",
		[g]=a,
		[h]=n,
		[j]={"6d1d36c4b7c3",1480992556,"[clang] Fix D26214: Move error handling out of MC and to the callers.","[clang] Fix D26214: Move error handling out of MC and to the callers.\n\nSummary: Related llvm patch: https://reviews.llvm.org/D27359\n\nReviewers: echristo, t.p.northover, rengolin, grosbach, compnerd\n\nSubscribers: mehdi_amini, cfe-commits, llvm-commits\n\nTags: #clang-c\n\nDifferential Revision: https://reviews.llvm.org/D27360\n\nllvm-svn: 288762"},
		[k]={{q,2719,"static void CollectArgsForIntegratedAssembler(Compilation &C, const ArgList &Args, ArgStringList &CmdArgs, const Driver &D) {\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_Wa_COMMA, options::OPT_Xassembler, options::OPT_mimplicit_it_EQ)) {\n    // ...\n    for (StringRef Value : A->getValues()) {\n      // ...\n      if (Value == \"-force_cpusubtype_ALL\") {\n      // ...\n      } else if (Value == \"-L\") {\n      // ...\n      } else if (Value == \"--fatal-warnings\") {\n      // ...\n      } else if (Value == \"--no-warn\" || Value == \"-W\") {\n      // ...\n      } else if (Value == \"--noexecstack\") {\n      // ...\n      } else if (Value.startswith(\"-compress-debug-sections\") || Value.startswith(\"--compress-debug-sections\") || Value == \"-nocompress-debug-sections\" || Value == \"--nocompress-debug-sections\") {\n      // ...\n      } else if (Value == \"-mrelax-relocations=yes\" || Value == \"--mrelax-relocations=yes\") {\n      // ...\n      } else if (Value == \"-mrelax-relocations=no\" || Value == \"--mrelax-relocations=no\") {\n      // ...\n      } else if (Value.startswith(\"-I\")) {\n      // ...\n      } else if (Value.startswith(\"-gdwarf-\")) {\n      // ...\n      } else if (Value.startswith(\"-mcpu\") || Value.startswith(\"-mfpu\") || Value.startswith(\"-mhwdiv\") || Value.startswith(\"-march\")) {\n      // ...\n      } else if (Value == \"-defsym\") {\n        // ...\n        if (SVal.getAsInteger(0, IVal)) {\n          D.Diag(diag::err_drv_defsym_invalid_symval) << SVal;"}}
	},
	["err_drv_duplicate_config"]={
		[i]={{nil,y,"err_drv_duplicate_config"}},
		[b]={{nil,y,"no more than one option \'--config\' is allowed"}},
		[c]={{nil,y,"no more than one option \'--config\' is allowed"}},
		[e]=d,
		[f]="no more than one option \'\\-\\-config\' is allowed",
		[g]=a,
		[h]={{nil,y,n}},
		[j]={"c92ca91472b9",1514656766,"Enable configuration files in clang","Enable configuration files in clang\n\nClang is inherently a cross compiler and can generate code for any target\nenabled during build. It however requires to specify many parameters in the\ninvocation, which could be hardcoded during configuration process in the\ncase of single-target compiler. The purpose of configuration files is to\nmake specifying clang arguments easier.\n\nA configuration file is a collection of driver options, which are inserted\ninto command line before other options specified in the clang invocation.\nIt groups related options together and allows specifying them in simpler,\nmore flexible and less error prone way than just listing the options\nsomewhere in build scripts. Configuration file may be thought as a \"macro\"\nthat names an option set and is expanded when the driver is called.\n\nUse of configuration files is described in `UserManual.rst`.\n\nDifferential Revision: https://reviews.llvm.org/D24933\n\nllvm-svn: 321587"}
	},
	["err_drv_dxc_missing_target_profile"]={
		[i]={{nil,s,"err_drv_dxc_missing_target_profile"}},
		[b]={{nil,s,"target profile option (-T) is missing"}},
		[c]={{nil,s,"target profile option (-T) is missing"}},
		[e]=d,
		[f]="target profile option \\(\\-T\\) is missing",
		[g]=a,
		[h]={{nil,s,n}},
		[j]={"aef03c9b3bed",1651866463,"[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clan...","[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang\n\nGCC 12 has been released and contains unconditional support for\n-ftrivial-auto-var-init=zero:\nhttps://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-ftrivial-auto-var-init\n\nMaintain compatibility with GCC, and remove the -enable flag for \"zero\"\nmode. The flag is left to generate an \"unused\" warning, though, to not\nbreak all the existing users. The flag will be fully removed in Clang 17.\n\nLink: https://github.com/llvm/llvm-project/issues/44842\n\nReviewed By: nickdesaulniers, MaskRay, srhines, xbolva00\n\nDifferential Revision: https://reviews.llvm.org/D125142"},
		[k]={{x,1330,"Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {\n  // ...\n  // FIXME: TargetTriple is used by the target-prefixed calls to as/ld\n  // and getToolChain is const.\n  if (IsCLMode()) {\n  // ...\n  } else if (IsDXCMode()) {\n    // Build TargetTriple from target_profile option for clang-dxc.\n    if (const Arg *A = Args.getLastArg(options::OPT_target_profile)) {\n    // ...\n    } else {\n      Diag(diag::err_drv_dxc_missing_target_profile);"}}
	},
	["err_drv_emit_llvm_link"]={
		[i]="err_drv_emit_llvm_link",
		[b]="-emit-llvm cannot be used when linking",
		[c]="-emit-llvm cannot be used when linking",
		[e]=d,
		[f]="\\-emit\\-llvm cannot be used when linking",
		[g]=a,
		[h]=n,
		[j]={"e8025644b279",1377440829,"Produce an error when trying to link with -emit-llvm.","Produce an error when trying to link with -emit-llvm.\n\nllvm-svn: 189193"},
		[k]={{x,3959,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  if (FinalPhase == phases::Link) {\n    // Emitting LLVM while linking disabled except in HIPAMD Toolchain\n    if (Args.hasArg(options::OPT_emit_llvm) && !Args.hasArg(options::OPT_hip_link))\n      Diag(clang::diag::err_drv_emit_llvm_link);"}}
	},
	["err_drv_expand_response_file"]={
		[i]="err_drv_expand_response_file",
		[b]="failed to expand response file: %0",
		[c]="failed to expand response file: A",
		[e]=d,
		[f]="failed to expand response file\\: (.*?)",
		[g]=a,
		[h]=n,
		[j]={"6adb9a0602bc",1678065956,"[AMDGPU] Emit predefined macro `__AMDGCN_CUMODE__`","[AMDGPU] Emit predefined macro `__AMDGCN_CUMODE__`\n\nPredefine __AMDGCN_CUMODE__ as 1 or 0 when compilation assumes CU or WGP modes.\n\nIf WGP mode is not supported, ignore -mno-cumode and emit a warning.\n\nThis is needed for implementing device functions like __smid\n(https://github.com/ROCm-Developer-Tools/hipamd/blob/312dff7b794337aa040be0691acc78e9f968a8d2/include/hip/amd_detail/amd_device_functions.h#L957)\n\nReviewed by: Matt Arsenault, Artem Belevich, Brian Sumner\n\nDifferential Revision: https://reviews.llvm.org/D145343"},
		[k]={{"clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp",379,"static bool forEachDriverJob(ArrayRef<std::string> ArgStrs, DiagnosticsEngine &Diags, FileManager &FM, llvm::function_ref<bool(const driver::Command &Cmd)> Callback) {\n  // ...\n  if (llvm::Error E = driver::expandResponseFiles(Argv, CLMode, Alloc, FS)) {\n    Diags.Report(diag::err_drv_expand_response_file) << llvm::toString(std::move(E));"}}
	},
	["err_drv_expecting_fopenmp_with_fopenmp_targets"]={
		[i]="err_drv_expecting_fopenmp_with_fopenmp_targets",
		[b]={{nil,o,"\'-fopenmp-targets\' must be used in conjunction with a \'-fopenmp\' option compatible with offloading; e.g., \'-fopenmp=libomp\' or \'-fopenmp=libiomp5\'"},{t,nil,"The option -fopenmp-targets must be used in conjunction with a -fopenmp option compatible with offloading, please use -fopenmp=libomp or -fopenmp=libiomp5."}},
		[c]={{nil,o,"\'-fopenmp-targets\' must be used in conjunction with a \'-fopenmp\' option compatible with offloading; e.g., \'-fopenmp=libomp\' or \'-fopenmp=libiomp5\'"},{t,nil,"The option -fopenmp-targets must be used in conjunction with a -fopenmp option compatible with offloading, please use -fopenmp=libomp or -fopenmp=libiomp5."}},
		[e]=d,
		[f]="\'\\-fopenmp\\-targets\' must be used in conjunction with a \'\\-fopenmp\' option compatible with offloading; e\\.g\\., \'\\-fopenmp\\=libomp\' or \'\\-fopenmp\\=libiomp5\'",
		[g]=a,
		[h]=n,
		[j]={"39f9da2a8752",1477586285,"[Driver][OpenMP] Create tool chains for OpenMP offloading kind.","[Driver][OpenMP] Create tool chains for OpenMP offloading kind.\n\nSummary: This patch adds new logic to create the necessary tool chains to support offloading for OpenMP. The OpenMP related options are checked and the tool chains created accordingly. Diagnostics are emitted in case the options are illegal or express unknown targets.\n\nReviewers: echristo, tra, jlebar, rsmith, ABataev, hfinkel\n\nSubscribers: whchung, mkuron, mehdi_amini, cfe-commits, Hahnfeld, arpith-jacob, carlo.bertolli, caomhin\n\nDifferential Revision: https://reviews.llvm.org/D21843\n\nllvm-svn: 285311"},
		[k]={{x,856,"void Driver::CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs) {\n  // ...\n  if (IsOpenMPOffloading) {\n    // ...\n    if (RuntimeKind != OMPRT_OMP && RuntimeKind != OMPRT_IOMP5) {\n      Diag(clang::diag::err_drv_expecting_fopenmp_with_fopenmp_targets);"},{x,982,"void Driver::CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs) {\n  // ...\n  if (IsOpenMPOffloading) {\n  // ...\n  } else if (C.getInputArgs().hasArg(options::OPT_fopenmp_targets_EQ)) {\n    Diag(clang::diag::err_drv_expecting_fopenmp_with_fopenmp_targets);"}}
	},
	["err_drv_extract_api_wrong_kind"]={
		[i]={{nil,s,"err_drv_extract_api_wrong_kind"}},
		[b]={{nil,s,"header file \'%0\' input \'%1\' does not match the type of prior input in api extraction; use \'-x %2\' to override"}},
		[c]={{nil,s,"header file \'A\' input \'B\' does not match the type of prior input in api extraction; use \'-x C\' to override"}},
		[e]=d,
		[f]="header file \'(.*?)\' input \'(.*?)\' does not match the type of prior input in api extraction; use \'\\-x (.*?)\' to override",
		[g]=a,
		[h]={{nil,s,n}},
		[j]={N,1610286626,J,L},
		[k]={{q,4644,"void Clang::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  for (const InputInfo &I : Inputs) {\n    if (&I == &Input || I.getType() == types::TY_Nothing) {\n    // ...\n    } else if (IsExtractAPI) {\n      // ...\n      if (I.getType() != ExpectedInputType) {\n        D.Diag(diag::err_drv_extract_api_wrong_kind) << I.getFilename() << types::getTypeName(I.getType()) << types::getTypeName(ExpectedInputType);"}}
	},
	["err_drv_failed_to_deduce_target_from_arch"]={
		[i]={{nil,s,"err_drv_failed_to_deduce_target_from_arch"}},
		[b]={{nil,s,"failed to deduce triple for target architecture \'%0\'; specify the triple using \'-fopenmp-targets\' and \'-Xopenmp-target\' instead."}},
		[c]={{nil,s,"failed to deduce triple for target architecture \'A\'; specify the triple using \'-fopenmp-targets\' and \'-Xopenmp-target\' instead."}},
		[e]=d,
		[f]="failed to deduce triple for target architecture \'(.*?)\'; specify the triple using \'\\-fopenmp\\-targets\' and \'\\-Xopenmp\\-target\' instead\\.",
		[g]=a,
		[h]={{nil,s,n}},
		[j]={"509b631f84e9",1651788595,"[OpenMP] Try to Infer target triples using the offloading architecture","[OpenMP] Try to Infer target triples using the offloading architecture\n\nCurrently we require the `-fopenmp-targets=` option to specify the\ntriple to use for the offloading toolchains, and the `-Xopenmp-target=`\noption to specify architectures to a specific toolchain. The changes\nmade in D124721 allowed us to use `--offload-arch=` to specify multiple\ntarget architectures. However, this can become combersome with many\ndifferent architectures. This patch introduces functinality that\nattempts to deduce the target triple and architectures from the\noffloading action. Currently we will deduce known GPU architectures when\nonly `-fopenmp` is specified.\n\nThis required a bit of a hack to cache the deduced architectures,\nwithout this we would\'ve just thrown an error when we tried to look up\nthe architecture again when generating the job. Normally we require the\nuser to manually specify the toolchain arguments, but here they would\nconfict unless we overrode them.\n\nDepends on: D124721\n\nReviewed By: saiislam\n\nDifferential Revision: https://reviews.llvm.org/D125050"},
		[k]={{x,917,"void Driver::CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs) {\n  // ...\n  if (IsOpenMPOffloading) {\n    // ...\n    // If the user specified -fopenmp-targets= we create a toolchain for each\n    // valid triple. Otherwise, if only --offload-arch= was specified we instead\n    // attempt to derive the appropriate toolchains from the arguments.\n    if (Arg *OpenMPTargets = C.getInputArgs().getLastArg(options::OPT_fopenmp_targets_EQ)) {\n    // ...\n    } else if (C.getInputArgs().hasArg(options::OPT_offload_arch_EQ) && !IsHIP && !IsCuda) {\n      // ...\n      for (StringRef Arch : Archs) {\n        if (NVPTXTriple && IsNVIDIAGpuArch(StringToCudaArch(getProcessorFromTargetID(*NVPTXTriple, Arch)))) {\n        // ...\n        } else if (AMDTriple && IsAMDGpuArch(StringToCudaArch(getProcessorFromTargetID(*AMDTriple, Arch)))) {\n        // ...\n        } else {\n          Diag(clang::diag::err_drv_failed_to_deduce_target_from_arch) << Arch;"},{x,924,"void Driver::CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs) {\n  // ...\n  if (IsOpenMPOffloading) {\n    // ...\n    // If the user specified -fopenmp-targets= we create a toolchain for each\n    // valid triple. Otherwise, if only --offload-arch= was specified we instead\n    // attempt to derive the appropriate toolchains from the arguments.\n    if (Arg *OpenMPTargets = C.getInputArgs().getLastArg(options::OPT_fopenmp_targets_EQ)) {\n    // ...\n    } else if (C.getInputArgs().hasArg(options::OPT_offload_arch_EQ) && !IsHIP && !IsCuda) {\n      // ...\n      // If the set is empty then we failed to find a native architecture.\n      if (Archs.empty()) {\n        Diag(clang::diag::err_drv_failed_to_deduce_target_from_arch) << \"native\";"}}
	},
	["err_drv_force_crash"]={
		[i]="err_drv_force_crash",
		[b]="failing because environment variable \'%0\' is set",
		[c]="failing because environment variable \'A\' is set",
		[e]=d,
		[f]="failing because (?:environment variable \'FORCE_CLANG_DIAGNOSTICS_CRASH\' is set|\'\\-gen\\-reproducer\' is used)",
		[g]=a,
		[h]=n,
		[j]={"940a6d73ce06",1356472587,"Produce an actual error before attempting to attach notes to it when bailing out","Produce an actual error before attempting to attach notes to it when bailing out\ndue to FORCE_CLANG_DIAGNOSTICS_CRASH=1. Also add a test for that env var.\n\nllvm-svn: 171074"}
	},
	["err_drv_gnustep_objc_runtime_incompatible_binary"]={
		[i]={{nil,B,"err_drv_gnustep_objc_runtime_incompatible_binary"}},
		[b]={{nil,B,"GNUstep Objective-C runtime version %0 incompatible with target binary format"}},
		[c]={{nil,B,"GNUstep Objective-C runtime version A incompatible with target binary format"}},
		[e]=d,
		[f]="GNUstep Objective\\-C runtime version (.*?) incompatible with target binary format",
		[g]=a,
		[h]={{nil,B,n}},
		[j]={"79356eefc055",1526969363,"GNUstep Objective-C ABI version 2","GNUstep Objective-C ABI version 2\n\nSummary:\nThis includes initial support for the (hopefully final) updated Objective-C ABI, developed here:\n\nhttps://github.com/davidchisnall/clang-gnustep-abi-2\n\nIt also includes some cleanups and refactoring from older GNU ABIs.\n\nThe current version is ELF only, other formats to follow.\n\nReviewers: rjmccall, DHowett-MSFT\n\nReviewed By: rjmccall\n\nSubscribers: smeenai, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D46052\n\nllvm-svn: 332950"},
		[k]={{q,7600,"/// Add options related to the Objective-C runtime/ABI.\n///\n/// Returns true if the runtime is non-fragile.\nObjCRuntime Clang::AddObjCRuntimeArgs(const ArgList &args, const InputInfoList &inputs, ArgStringList &cmdArgs, RewriteKind rewriteKind) const {\n  // ...\n  // Just forward -fobjc-runtime= to the frontend.  This supercedes\n  // options about fragility.\n  if (runtimeArg && runtimeArg->getOption().matches(options::OPT_fobjc_runtime_EQ)) {\n    // ...\n    if ((runtime.getKind() == ObjCRuntime::GNUstep) && (runtime.getVersion() >= VersionTuple(2, 0)))\n      if (!getToolChain().getTriple().isOSBinFormatELF() && !getToolChain().getTriple().isOSBinFormatCOFF()) {\n        getToolChain().getDriver().Diag(diag::err_drv_gnustep_objc_runtime_incompatible_binary) << runtime.getVersion().getMajor();"}}
	},
	["err_drv_header_unit_extra_inputs"]={
		[i]={{nil,s,"err_drv_header_unit_extra_inputs"}},
		[b]={{nil,s,"multiple inputs are not valid for header units (first extra \'%0\')"}},
		[c]={{nil,s,"multiple inputs are not valid for header units (first extra \'A\')"}},
		[e]=d,
		[f]="multiple inputs are not valid for header units \\(first extra \'(.*?)\'\\)",
		[g]=a,
		[h]={{nil,s,n}},
		[j]={N,1610286626,J,L},
		[k]={{u,2898,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (DashX.getHeaderUnitKind() != InputKind::HeaderUnit_None && Inputs.size() > 1)\n    Diags.Report(diag::err_drv_header_unit_extra_inputs) << Inputs[1];"}}
	},
	["err_drv_hipspv_no_hip_path"]={
		[i]={{nil,o,"err_drv_hipspv_no_hip_path"}},
		[b]={{nil,o,"\'--hip-path\' must be specified when offloading to SPIR-V%select{| unless %1 is given}0."}},
		[c]={{nil,o,{"\'--hip-path\' must be specified when offloading to SPIR-V",{a," unless B is given"},"."}}},
		[e]=d,
		[f]="\'\\-\\-hip\\-path\' must be specified when offloading to SPIR\\-V(?:| unless (.*?) is given)\\.",
		[g]=a,
		[h]={{nil,o,n}},
		[j]={N,1610286626,J,L},
		[k]={{"clang/lib/Driver/ToolChains/HIPSPV.cpp",201,"void HIPSPVToolChain::AddHIPIncludeArgs(const ArgList &DriverArgs, ArgStringList &CC1Args) const {\n  // ...\n  if (hipPath.empty()) {\n    getDriver().Diag(diag::err_drv_hipspv_no_hip_path) << 1 << \"\'-nogpuinc\'\";"}}
	},
	["err_drv_hlsl_unsupported_target"]={
		[i]={{nil,D,"err_drv_hlsl_unsupported_target"}},
		[b]={{nil,D,"HLSL code generation is unsupported for target \'%0\'"}},
		[c]={{nil,D,"HLSL code generation is unsupported for target \'A\'"}},
		[e]=d,
		[f]="HLSL code generation is unsupported for target \'(.*?)\'",
		[g]=a,
		[h]={{nil,D,n}},
		[j]={"aef03c9b3bed",1651866463,"[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clan...","[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang\n\nGCC 12 has been released and contains unconditional support for\n-ftrivial-auto-var-init=zero:\nhttps://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-ftrivial-auto-var-init\n\nMaintain compatibility with GCC, and remove the -enable flag for \"zero\"\nmode. The flag is left to generate an \"unused\" warning, though, to not\nbreak all the existing users. The flag will be fully removed in Clang 17.\n\nLink: https://github.com/llvm/llvm-project/issues/44842\n\nReviewed By: nickdesaulniers, MaskRay, srhines, xbolva00\n\nDifferential Revision: https://reviews.llvm.org/D125142"},
		[k]={{u,4074,"#include \"clang/Driver/Options.inc\"\n  // ...\n  // Validate options for HLSL\n  if (Opts.HLSL) {\n    // ...\n    if (!SupportedTarget)\n      Diags.Report(diag::err_drv_hlsl_unsupported_target) << T.str();"}}
	},
	["err_drv_incompatible_omp_arch"]={
		[i]={{nil,w,"err_drv_incompatible_omp_arch"}},
		[b]={{nil,w,"OpenMP target architecture \'%0\' pointer size is incompatible with host \'%1\'"}},
		[c]={{nil,w,"OpenMP target architecture \'A\' pointer size is incompatible with host \'B\'"}},
		[e]=d,
		[f]="OpenMP target architecture \'(.*?)\' pointer size is incompatible with host \'(.*?)\'",
		[g]=a,
		[h]={{nil,w,n}},
		[j]={ab,1585492323,Z,bb},
		[k]={{u,3884,"#include \"clang/Driver/Options.inc\"\n  // ...\n  // Get the OpenMP target triples if any.\n  if (Arg *A = Args.getLastArg(options::OPT_fopenmp_targets_EQ)) {\n    // ...\n    for (unsigned i = 0; i < A->getNumValues(); ++i) {\n      // ...\n      if (TT.getArch() == llvm::Triple::UnknownArch || !(TT.getArch() == llvm::Triple::aarch64 || TT.isPPC() || TT.getArch() == llvm::Triple::nvptx || TT.getArch() == llvm::Triple::nvptx64 || TT.getArch() == llvm::Triple::amdgcn || TT.getArch() == llvm::Triple::x86 || TT.getArch() == llvm::Triple::x86_64))\n      // ...\n      else if (getArchPtrSize(T) != getArchPtrSize(TT))\n        Diags.Report(diag::err_drv_incompatible_omp_arch) << A->getValue(i) << T.str();"}}
	},
	["err_drv_incompatible_options"]={
		[i]={{nil,D,"err_drv_incompatible_options"}},
		[b]="the combination of \'%0\' and \'%1\' is incompatible",
		[c]="the combination of \'A\' and \'B\' is incompatible",
		[e]=d,
		[f]="the combination of \'(.*?)\' and \'(.*?)\' is incompatible",
		[g]=a,
		[h]={{nil,D,n}},
		[j]={"f89327e28bc1",1672206488,"[Driver] [Modules] Support -fmodule-output (1/2)","[Driver] [Modules] Support -fmodule-output (1/2)\n\nPatches to support the one-phase compilation model for modules.\n\nThe behavior:\n(1) If -o and -c is specified , the module file is in the same path\nwithin the same directory as the output the -o specified and with a new\nsuffix .pcm.\n(2) Otherwise, the module file is in the same path within the working\ndirectory directory with the name of the input file with a new suffix\n.pcm\n\nFor example,\n\n```\nHello.cppm Use.cpp\n```\n\nA trivial one and the contents are ignored. When we run:\n\n```\nclang++ -std=c++20 -fmodule-output Hello.cppm -c\n```\n\nThe directory would look like:\n\n```\nHello.cppm  Hello.o  Hello.pcm Use.cpp\n```\n\nAnd if we run:\n\n```\nclang++ -std=c++20 -fmodule-output Hello.cppm -c -o output/Hello.o\n```\n\nThen the `output` directory may look like:\n\n```\nHello.o  Hello.pcm\n```\n\nReviewed By: dblaikie, iains, tahonermann\n\nDifferential Revision: https://reviews.llvm.org/D137058"},
		[k]={{x,746,"// Parse the LTO options.\nvoid Driver::setLTOMode(const llvm::opt::ArgList &Args) {\n  // ...\n  // Try to enable `-foffload-lto=full` if `-fopenmp-target-jit` is on.\n  if (Args.hasFlag(options::OPT_fopenmp_target_jit, options::OPT_fno_openmp_target_jit, false)) {\n    if (Arg *A = Args.getLastArg(options::OPT_foffload_lto_EQ, options::OPT_fno_offload_lto))\n      if (OffloadLTOMode != LTOK_Full)\n        Diag(diag::err_drv_incompatible_options) << A->getSpelling() << \"-fopenmp-target-jit\";"}}
	},
	["err_drv_incompatible_unwindlib"]={
		[i]={{nil,z,"err_drv_incompatible_unwindlib"}},
		[b]={{nil,z,"--rtlib=libgcc requires --unwindlib=libgcc"}},
		[c]={{nil,z,"--rtlib=libgcc requires --unwindlib=libgcc"}},
		[e]=d,
		[f]="\\-\\-rtlib\\=libgcc requires \\-\\-unwindlib\\=libgcc",
		[g]=a,
		[h]={{nil,z,n}},
		[j]={U,1534346725,T,W},
		[k]={{V,1047,"ToolChain::UnwindLibType ToolChain::GetUnwindLibType(const ArgList &Args) const {\n  // ...\n  if (LibName == \"none\")\n  // ...\n  else if (LibName == \"platform\" || LibName == \"\") {\n  // ...\n  } else if (LibName == \"libunwind\") {\n    if (GetRuntimeLibType(Args) == RLT_Libgcc)\n      getDriver().Diag(diag::err_drv_incompatible_unwindlib);"}}
	},
	["err_drv_invalid_Xarch_argument_with_args"]={
		[i]="err_drv_invalid_Xarch_argument_with_args",
		[b]="invalid Xarch argument: \'%0\', options requiring arguments are unsupported",
		[c]="invalid Xarch argument: \'A\', options requiring arguments are unsupported",
		[e]=d,
		[f]="invalid Xarch argument\\: \'(.*?)\', options requiring arguments are unsupported",
		[g]=a,
		[h]=n,
		[j]={"6914a98ccd70",1303407141,"Driver: Improve -Xarch argument diagnostics a bit.","Driver: Improve -Xarch argument diagnostics a bit.\n\nllvm-svn: 129918"},
		[k]={{V,1449,"// TODO: Currently argument values separated by space e.g.\n// -Xclang -mframe-pointer=no cannot be passed by -Xarch_. This should be\n// fixed.\nvoid ToolChain::TranslateXarchArgs(const llvm::opt::DerivedArgList &Args, llvm::opt::Arg *&A, llvm::opt::DerivedArgList *DAL, SmallVectorImpl<llvm::opt::Arg *> *AllocatedArgs) const {\n  // ...\n  // If the argument parsing failed or more than one argument was\n  // consumed, the -Xarch_ argument\'s parameter tried to consume\n  // extra arguments. Emit an error and ignore.\n  //\n  // We also want to disallow any options which would alter the\n  // driver behavior; that isn\'t going to work in our model. We\n  // use options::NoXarchOption to control this.\n  if (!XarchArg || Index > Prev + 1) {\n    getDriver().Diag(diag::err_drv_invalid_Xarch_argument_with_args) << A->getAsString(Args);"}}
	},
	["err_drv_invalid_Xopenmp_target_with_args"]={
		[i]={{nil,y,"err_drv_invalid_Xopenmp_target_with_args"}},
		[b]={{nil,y,"invalid -Xopenmp-target argument: \'%0\', options requiring arguments are unsupported"}},
		[c]={{nil,y,"invalid -Xopenmp-target argument: \'A\', options requiring arguments are unsupported"}},
		[e]=d,
		[f]="invalid \\-Xopenmp\\-target argument\\: \'(.*?)\', options requiring arguments are unsupported",
		[g]=a,
		[h]={{nil,y,n}},
		[j]={"47e0cf378c79",1502120351,"[OpenMP] Add flag for specifying the target device architecture for OpenMP device offloading","[OpenMP] Add flag for specifying the target device architecture for OpenMP device offloading\n\nSummary:\nOpenMP has the ability to offload target regions to devices which may have different architectures.\n\nA new -fopenmp-target-arch flag is introduced to specify the device architecture.\n\nIn this patch I use the new flag to specify the compute capability of the underlying NVIDIA architecture for the OpenMP offloading CUDA tool chain.\n\nOnly a host-offloading test is provided since full device offloading capability will only be available when [[ https://reviews.llvm.org/D29654 | D29654 ]] lands.\n\nReviewers: hfinkel, Hahnfeld, carlo.bertolli, caomhin, ABataev\n\nReviewed By: hfinkel\n\nSubscribers: guansong, cfe-commits\n\nTags: #openmp\n\nDifferential Revision: https://reviews.llvm.org/D34784\n\nllvm-svn: 310263"},
		[k]={{V,1401,"llvm::opt::DerivedArgList *ToolChain::TranslateOpenMPTargetArgs(const llvm::opt::DerivedArgList &Args, bool SameTripleAsHost, SmallVectorImpl<llvm::opt::Arg *> &AllocatedArgs) const {\n  // ...\n  // Handle -Xopenmp-target flags\n  for (auto *A : Args) {\n    // ...\n    if (!XOpenMPTargetArg || Index > Prev + 1) {\n      getDriver().Diag(diag::err_drv_invalid_Xopenmp_target_with_args) << A->getAsString(Args);"}}
	},
	["err_drv_invalid_arch_name"]={
		[i]="err_drv_invalid_arch_name",
		[b]="invalid arch name \'%0\'",
		[c]="invalid arch name \'A\'",
		[e]=d,
		[f]="invalid arch name \'(.*?)\'",
		[g]=a,
		[h]=n,
		[j]={"9c3f7c4a4bb1",1252453050,"Validate arguments to -arch.","Validate arguments to -arch.\n\nllvm-svn: 81281"},
		[k]={{x,2432,"void Driver::BuildUniversalActions(Compilation &C, const ToolChain &TC, const InputList &BAInputs) const {\n  // ...\n  for (Arg *A : Args) {\n    if (A->getOption().matches(options::OPT_arch)) {\n      // ...\n      if (Arch == llvm::Triple::UnknownArch) {\n        Diag(clang::diag::err_drv_invalid_arch_name) << A->getAsString(Args);"},{lb,35,"std::optional<llvm::StringRef> csky::getCSKYArchName(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  if (const Arg *A = Args.getLastArg(options::OPT_march_EQ)) {\n    // ...\n    if (ArchKind == llvm::CSKY::ArchKind::INVALID) {\n      D.Diag(clang::diag::err_drv_invalid_arch_name) << A->getAsString(Args);"},{lb,128,"void csky::getCSKYTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, ArgStringList &CmdArgs, std::vector<llvm::StringRef> &Features) {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_march_EQ)) {\n    // ...\n    if (ArchKind == llvm::CSKY::ArchKind::INVALID) {\n      D.Diag(clang::diag::err_drv_invalid_arch_name) << A->getAsString(Args);"}}
	},
	["err_drv_invalid_argument_to_option"]={
		[i]={{nil,v,"err_drv_invalid_argument_to_option"}},
		[b]={{nil,v,"invalid argument \'%0\' to -%1"}},
		[c]={{nil,v,"invalid argument \'A\' to -B"}},
		[e]=d,
		[f]="invalid argument \'(.*?)\' to \\-(.*?)",
		[g]=a,
		[h]={{nil,v,n}},
		[j]={U,1534346725,T,W},
		[k]={{q,599,"/// Add a CC1 and CC1AS option to specify the debug file path prefix map.\nstatic void addDebugPrefixMapArg(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) {\n  auto AddOneArg = [&](StringRef Map, StringRef Name) {\n    if (!Map.contains(\'=\'))\n      D.Diag(diag::err_drv_invalid_argument_to_option) << Map << Name;"},{q,622,"/// Add a CC1 and CC1AS option to specify the macro file path prefix map.\nstatic void addMacroPrefixMapArg(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs) {\n  for (const Arg *A : Args.filtered(options::OPT_ffile_prefix_map_EQ, options::OPT_fmacro_prefix_map_EQ)) {\n    // ...\n    if (!Map.contains(\'=\'))\n      D.Diag(diag::err_drv_invalid_argument_to_option) << Map << A->getOption().getName();"},{q,637,"/// Add a CC1 and CC1AS option to specify the coverage file path prefix map.\nstatic void addCoveragePrefixMapArg(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs) {\n  for (const Arg *A : Args.filtered(options::OPT_ffile_prefix_map_EQ, options::OPT_fcoverage_prefix_map_EQ)) {\n    // ...\n    if (!Map.contains(\'=\'))\n      D.Diag(diag::err_drv_invalid_argument_to_option) << Map << A->getOption().getName();"},{q,4133,"static void RenderDiagnosticsOptions(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs) {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_fdiagnostics_color_EQ)) {\n    // ...\n    if (Value != \"always\" && Value != \"never\" && Value != \"auto\")\n      D.Diag(diag::err_drv_invalid_argument_to_option) << Value << A->getOption().getName();"},{q,5389,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_Wframe_larger_than_EQ)) {\n    // ...\n    if (V1.consumeInteger(10, Size) || !V1.empty())\n      D.Diag(diag::err_drv_invalid_argument_to_option) << V << A->getOption().getName();"},{q,5516,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_fextend_args_EQ)) {\n    // ...\n    if (Arch == llvm::Triple::x86 || Arch == llvm::Triple::x86_64) {\n      // ...\n      if (V == \"64\")\n      // ...\n      else if (V != \"32\")\n        D.Diag(diag::err_drv_invalid_argument_to_option) << A->getValue() << A->getOption().getName();"},{q,5561,"#endif\n  // ...\n  // Parse \'none\' or \'$major.$minor\'. Disallow -fbinutils-version=0 because we\n  // use that to indicate the MC default in the backend.\n  if (Arg *A = Args.getLastArg(options::OPT_fbinutils_version_EQ)) {\n    // ...\n    if (V == \"none\")\n    // ...\n    else if (!V.consumeInteger(10, Num) && Num > 0 && (V.empty() || (V.consume_front(\".\") && !V.consumeInteger(10, Num) && V.empty())))\n    // ...\n    else\n      D.Diag(diag::err_drv_invalid_argument_to_option) << A->getValue() << A->getOption().getName();"},{q,5667,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mcmodel_EQ)) {\n    // ...\n    if (CM == \"small\" || CM == \"kernel\" || CM == \"medium\" || CM == \"large\" || CM == \"tiny\") {\n      if (Triple.isOSAIX() && CM == \"medium\")\n      // ...\n      else if (Triple.isAArch64() && (CM == \"kernel\" || CM == \"medium\"))\n        D.Diag(diag::err_drv_invalid_argument_to_option) << CM << A->getOption().getName();"},{q,5672,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mcmodel_EQ)) {\n    // ...\n    if (CM == \"small\" || CM == \"kernel\" || CM == \"medium\" || CM == \"large\" || CM == \"tiny\") {\n    // ...\n    } else {\n      D.Diag(diag::err_drv_invalid_argument_to_option) << CM << A->getOption().getName();"},{q,6162,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_fmessage_length_EQ)) {\n    // ...\n    if (V.getAsInteger(0, MessageLength))\n      D.Diag(diag::err_drv_invalid_argument_to_option) << V << A->getOption().getName();"},{q,6369,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_fpatchable_function_entry_EQ)) {\n    // ...\n    if (!Triple.isAArch64() && !Triple.isLoongArch() && !Triple.isRISCV() && !Triple.isX86())\n    // ...\n    else if (S.consumeInteger(10, Size) || (!S.empty() && (!S.consume_front(\",\") || S.consumeInteger(10, Offset) || !S.empty())))\n      D.Diag(diag::err_drv_invalid_argument_to_option) << S0 << A->getOption().getName();"},{S,1948,"void tools::addX86AlignBranchArgs(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs, bool IsLTO, const StringRef PluginOptPrefix) {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_boundary_EQ)) {\n    // ...\n    if (Value.getAsInteger(10, Boundary) || Boundary < 16 || !llvm::isPowerOf2_64(Boundary)) {\n      D.Diag(diag::err_drv_invalid_argument_to_option) << Value << A->getOption().getName();"},{S,1971,"void tools::addX86AlignBranchArgs(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs, bool IsLTO, const StringRef PluginOptPrefix) {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_mpad_max_prefix_size_EQ)) {\n    // ...\n    if (Value.getAsInteger(10, PrefixSize)) {\n      D.Diag(diag::err_drv_invalid_argument_to_option) << Value << A->getOption().getName();"},{"clang/lib/Driver/ToolChains/FreeBSD.cpp",107,"void freebsd::Assembler::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_ffile_prefix_map_EQ, options::OPT_fdebug_prefix_map_EQ)) {\n    // ...\n    if (!Map.contains(\'=\'))\n      D.Diag(diag::err_drv_invalid_argument_to_option) << Map << A->getOption().getName();"},{tb,952,"void tools::gnutools::Assembler::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_ffile_prefix_map_EQ, options::OPT_fdebug_prefix_map_EQ)) {\n    // ...\n    if (!Map.contains(\'=\'))\n      D.Diag(diag::err_drv_invalid_argument_to_option) << Map << A->getOption().getName();"},{O,97,"void wasm::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_mexec_model_EQ)) {\n    // ...\n    if (CM == \"command\") {\n    // ...\n    } else if (CM == \"reactor\") {\n    // ...\n    } else {\n      ToolChain.getDriver().Diag(diag::err_drv_invalid_argument_to_option) << CM << A->getOption().getName();"}}
	},
	["err_drv_invalid_cf_runtime_abi"]={
		[i]={{nil,C,"err_drv_invalid_cf_runtime_abi"}},
		[b]={{nil,C,"invalid CoreFoundation Runtime ABI \'%0\'; must be one of \'objc\', \'standalone\', \'swift\', \'swift-5.0\', \'swift-4.2\', \'swift-4.1\'"}},
		[c]={{nil,C,"invalid CoreFoundation Runtime ABI \'A\'; must be one of \'objc\', \'standalone\', \'swift\', \'swift-5.0\', \'swift-4.2\', \'swift-4.1\'"}},
		[e]=d,
		[f]="invalid CoreFoundation Runtime ABI \'(.*?)\'; must be one of \'objc\', \'standalone\', \'swift\', \'swift\\-5\\.0\', \'swift\\-4\\.2\', \'swift\\-4\\.1\'",
		[g]=a,
		[h]={{nil,C,n}},
		[j]={U,1534346725,T,W},
		[k]={{q,6115,"#endif\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_fcf_runtime_abi_EQ)) {\n    // ...\n    if (!llvm::is_contained(kCFABIs, StringRef(A->getValue())))\n      D.Diag(diag::err_drv_invalid_cf_runtime_abi) << A->getValue();"}}
	},
	["err_drv_invalid_darwin_version"]={
		[i]="err_drv_invalid_darwin_version",
		[b]="invalid Darwin version number: %0",
		[c]="invalid Darwin version number: A",
		[e]=d,
		[f]="invalid Darwin version number\\: (.*?)",
		[g]=a,
		[h]=n,
		[j]={"7f2600244c21",1237573311,"Driver: Parse Darwin version out of target triple.","Driver: Parse Darwin version out of target triple.\n\nllvm-svn: 67388"},
		[k]={{G,1998,"std::string getOSVersion(llvm::Triple::OSType OS, const llvm::Triple &Triple, const Driver &TheDriver) {\n  // ...\n  case llvm::Triple::Darwin:\n  case llvm::Triple::MacOSX:\n    // If there is no version specified on triple, and both host and target are\n    // macos, use the host triple to infer OS version.\n    if (Triple.isMacOSX() && SystemTriple.isMacOSX() && !Triple.getOSMajorVersion())\n    // ...\n    else if (!Triple.getMacOSXVersion(OsVersion))\n      TheDriver.Diag(diag::err_drv_invalid_darwin_version) << Triple.getOSName();"}}
	},
	["err_drv_invalid_diagnotics_hotness_threshold"]={
		[i]={{nil,w,"err_drv_invalid_diagnotics_hotness_threshold"}},
		[b]={{nil,w,"invalid argument in \'%0\', only integer or \'auto\' is supported"}},
		[c]={{nil,w,"invalid argument in \'A\', only integer or \'auto\' is supported"}},
		[e]=d,
		[f]="invalid argument in \'(.*?)\', only integer or \'auto\' is supported",
		[g]=a,
		[h]={{nil,w,n}},
		[j]={ab,1585492323,Z,bb},
		[k]={{u,2003,"#include \"clang/Driver/Options.inc\"\n  // ...\n  // Parse remarks hotness threshold. Valid value is either integer or \'auto\'.\n  if (auto *arg = Args.getLastArg(options::OPT_fdiagnostics_hotness_threshold_EQ)) {\n    // ...\n    if (!ResultOrErr) {\n      Diags.Report(diag::err_drv_invalid_diagnotics_hotness_threshold) << \"-fdiagnostics-hotness-threshold=\";"}}
	},
	["err_drv_invalid_diagnotics_misexpect_tolerance"]={
		[i]={{nil,s,"err_drv_invalid_diagnotics_misexpect_tolerance"}},
		[b]={{nil,s,"invalid argument in \'%0\', only integers are supported"}},
		[c]={{nil,s,"invalid argument in \'A\', only integers are supported"}},
		[e]=d,
		[f]="invalid argument in \'(.*?)\', only integers are supported",
		[g]=a,
		[h]={{nil,s,n}},
		[j]={"c5e5b54350fe",1645456106,"[CUDA] Add driver support for compiling CUDA with the new driver","[CUDA] Add driver support for compiling CUDA with the new driver\n\nThis patch adds the basic support for the clang driver to compile and link CUDA\nusing the new offloading driver. This requires handling the CUDA offloading kind\nand embedding the generated files into the host. This will allow us to link\nOpenMP code with CUDA code in the linker wrapper. More support will be required\nto create functional CUDA / HIP binaries using this method.\n\nDepends on D120270 D120271 D120934\n\nReviewed By: tra\n\nDifferential Revision: https://reviews.llvm.org/D120272"},
		[k]={{u,2020,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (auto *arg = Args.getLastArg(options::OPT_fdiagnostics_misexpect_tolerance_EQ)) {\n    // ...\n    if (!ResultOrErr) {\n      Diags.Report(diag::err_drv_invalid_diagnotics_misexpect_tolerance) << \"-fdiagnostics-misexpect-tolerance=\";"}}
	},
	["err_drv_invalid_directx_shader_module"]={
		[i]={{nil,s,"err_drv_invalid_directx_shader_module"}},
		[b]={{nil,s,"invalid profile : %0"}},
		[c]={{nil,s,"invalid profile : A"}},
		[e]=d,
		[f]="invalid profile \\: (.*?)",
		[g]=a,
		[h]={{nil,s,n}},
		[j]={"c5e5b54350fe",1645456106,"[CUDA] Add driver support for compiling CUDA with the new driver","[CUDA] Add driver support for compiling CUDA with the new driver\n\nThis patch adds the basic support for the clang driver to compile and link CUDA\nusing the new offloading driver. This requires handling the CUDA offloading kind\nand embedding the generated files into the host. This will allow us to link\nOpenMP code with CUDA code in the linker wrapper. More support will be required\nto create functional CUDA / HIP binaries using this method.\n\nDepends on D120270 D120271 D120934\n\nReviewed By: tra\n\nDifferential Revision: https://reviews.llvm.org/D120272"},
		[k]={{x,1326,"Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {\n  // ...\n  // FIXME: TargetTriple is used by the target-prefixed calls to as/ld\n  // and getToolChain is const.\n  if (IsCLMode()) {\n  // ...\n  } else if (IsDXCMode()) {\n    // Build TargetTriple from target_profile option for clang-dxc.\n    if (const Arg *A = Args.getLastArg(options::OPT_target_profile)) {\n      // ...\n      if (auto Triple = toolchains::HLSLToolChain::parseTargetProfile(TargetProfile))\n      // ...\n      else\n        Diag(diag::err_drv_invalid_directx_shader_module) << TargetProfile;"}}
	},
	["err_drv_invalid_empty_dxil_validator_version"]={
		[i]={{nil,s,"err_drv_invalid_empty_dxil_validator_version"}},
		[b]={{nil,s,"invalid validator version : %0\nIf validator major version is 0, minor version must also be 0."}},
		[c]={{nil,s,"invalid validator version : A\nIf validator major version is 0, minor version must also be 0."}},
		[e]=d,
		[f]="invalid validator version \\: (.*?)\nIf validator major version is 0, minor version must also be 0\\.",
		[g]=a,
		[h]={{nil,s,n}},
		[j]={"73417c517644",1650064974,"[HLSL][clang][Driver] Support validator version command line option.","[HLSL][clang][Driver] Support validator version command line option.\n\nThe DXIL validator version option(/validator-version) decide the validator version when compile hlsl.\nThe format is major.minor like 1.0.\n\nIn normal case, the value of validator version should be got from DXIL validator. Before we got DXIL validator ready for llvm/main, DXIL validator version option is added first to set validator version.\n\nIt will affect code generation for DXIL, so it is treated as a code gen option.\n\nA new member std::string DxilValidatorVersion is added to clang::CodeGenOptions.\n\nThen CGHLSLRuntime is added to clang::CodeGenModule.\nIt is used to translate clang::CodeGenOptions::DxilValidatorVersion into a ModuleFlag under key \"dx.valver\" at end of clang code generation.\n\nReviewed By: beanz\n\nDifferential Revision: https://reviews.llvm.org/D123884"},
		[k]={{"clang/lib/Driver/ToolChains/HLSL.cpp",126,"bool isLegalValidatorVersion(StringRef ValVersionStr, const Driver &D) {\n  // ...\n  if (Major == 0 && Minor != 0) {\n    D.Diag(diag::err_drv_invalid_empty_dxil_validator_version) << ValVersionStr;"}}
	},
	["err_drv_invalid_format_dxil_validator_version"]={
		[i]={{nil,s,"err_drv_invalid_format_dxil_validator_version"}},
		[b]={{nil,s,"invalid validator version : %0\nFormat of validator version is \"<major>.<minor>\" (ex:\"1.4\")."}},
		[c]={{nil,s,"invalid validator version : A\nFormat of validator version is \"<major>.<minor>\" (ex:\"1.4\")."}},
		[e]=d,
		[f]="invalid validator version \\: (.*?)\nFormat of validator version is \"\\<major\\>\\.\\<minor\\>\" \\(ex\\:\"1\\.4\"\\)\\.",
		[g]=a,
		[h]={{nil,s,n}},
		[j]={"73417c517644",1650064974,"[HLSL][clang][Driver] Support validator version command line option.","[HLSL][clang][Driver] Support validator version command line option.\n\nThe DXIL validator version option(/validator-version) decide the validator version when compile hlsl.\nThe format is major.minor like 1.0.\n\nIn normal case, the value of validator version should be got from DXIL validator. Before we got DXIL validator ready for llvm/main, DXIL validator version option is added first to set validator version.\n\nIt will affect code generation for DXIL, so it is treated as a code gen option.\n\nA new member std::string DxilValidatorVersion is added to clang::CodeGenOptions.\n\nThen CGHLSLRuntime is added to clang::CodeGenModule.\nIt is used to translate clang::CodeGenOptions::DxilValidatorVersion into a ModuleFlag under key \"dx.valver\" at end of clang code generation.\n\nReviewed By: beanz\n\nDifferential Revision: https://reviews.llvm.org/D123884"},
		[k]={{"clang/lib/Driver/ToolChains/HLSL.cpp",118,"bool isLegalValidatorVersion(StringRef ValVersionStr, const Driver &D) {\n  // ...\n  if (Version.tryParse(ValVersionStr) || Version.getBuild() || Version.getSubminor() || !Version.getMinor()) {\n    D.Diag(diag::err_drv_invalid_format_dxil_validator_version) << ValVersionStr;"}}
	},
	["err_drv_invalid_gcc_install_dir"]={
		[i]={{nil,D,"err_drv_invalid_gcc_install_dir"}},
		[b]={{nil,D,"\'%0\' does not contain a GCC installation"}},
		[c]={{nil,D,"\'A\' does not contain a GCC installation"}},
		[e]=d,
		[f]="\'(.*?)\' does not contain a GCC installation",
		[g]=a,
		[h]={{nil,D,n}},
		[j]={"aef03c9b3bed",1651866463,"[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clan...","[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang\n\nGCC 12 has been released and contains unconditional support for\n-ftrivial-auto-var-init=zero:\nhttps://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-ftrivial-auto-var-init\n\nMaintain compatibility with GCC, and remove the -enable flag for \"zero\"\nmode. The flag is left to generate an \"unused\" warning, though, to not\nbreak all the existing users. The flag will be fully removed in Clang 17.\n\nLink: https://github.com/llvm/llvm-project/issues/44842\n\nReviewed By: nickdesaulniers, MaskRay, srhines, xbolva00\n\nDifferential Revision: https://reviews.llvm.org/D125142"},
		[k]={{tb,2095,"/// Initialize a GCCInstallationDetector from the driver.\n///\n/// This performs all of the autodetection and sets up the various paths.\n/// Once constructed, a GCCInstallationDetector is essentially immutable.\n///\n/// FIXME: We shouldn\'t need an explicit TargetTriple parameter here, and\n/// should instead pull the target out of the driver. This is currently\n/// necessary because the driver doesn\'t store the final version of the target\n/// triple.\nvoid Generic_GCC::GCCInstallationDetector::init(const llvm::Triple &TargetTriple, const ArgList &Args, ArrayRef<std::string> ExtraTripleAliases) {\n  // ...\n  // If --gcc-install-dir= is specified, skip filesystem detection.\n  if (const Arg *A = Args.getLastArg(clang::driver::options::OPT_gcc_install_dir_EQ); A && A->getValue()[0]) {\n    // ...\n    if (!ScanGCCForMultilibs(TargetTriple, Args, InstallDir, false)) {\n      D.Diag(diag::err_drv_invalid_gcc_install_dir) << InstallDir;"}}
	},
	["err_drv_invalid_gcc_output_type"]={
		[i]="err_drv_invalid_gcc_output_type",
		[b]="invalid output type \'%0\' for use with gcc tool",
		[c]="invalid output type \'A\' for use with gcc tool",
		[e]=d,
		[f]="invalid output type \'(.*?)\' for use with gcc tool",
		[g]=a,
		[h]=n,
		[j]={"aeea8ac3d82b",1265858181,"Driver: Add -rewrite-objc, which is an interface to clang -cc1 -rewrite-objc.","Driver: Add -rewrite-objc, which is an interface to clang -cc1 -rewrite-objc.\n\nllvm-svn: 95849"},
		[k]={{tb,215,"void tools::gcc::Compiler::RenderExtraToolArgs(const JobAction &JA, ArgStringList &CmdArgs) const {\n  // ...\n  default:\n    D.Diag(diag::err_drv_invalid_gcc_output_type) << getTypeName(JA.getType());"}}
	},
	["err_drv_invalid_int_value"]={
		[i]="err_drv_invalid_int_value",
		[b]="invalid integral value \'%1\' in \'%0\'",
		[c]="invalid integral value \'B\' in \'A\'",
		[e]=d,
		[f]="invalid integral value \'(.*?)\' in \'(.*?)\'",
		[g]=a,
		[h]=n,
		[j]={"0ac66427a9f2",1259531573,"clang -cc1: Use proper diagnostics for all parsing errors.","clang -cc1: Use proper diagnostics for all parsing errors.\n\nllvm-svn: 90100"},
		[k]={{"clang/lib/Driver/OptionUtils.cpp",27,"template <typename IntTy> IntTy getLastArgIntValueImpl(const ArgList &Args, OptSpecifier Id, IntTy Default, DiagnosticsEngine *Diags, unsigned Base) {\n  // ...\n  if (Arg *A = Args.getLastArg(Id)) {\n    if (StringRef(A->getValue()).getAsInteger(Base, Res)) {\n      if (Diags)\n        Diags->Report(diag::err_drv_invalid_int_value) << A->getAsString(Args) << A->getValue();"},{q,882,"static void addPGOAndCoverageFlags(const ToolChain &TC, Compilation &C, const JobAction &JA, const InputInfo &Output, const ArgList &Args, SanitizerArgs &SanArgs, ArgStringList &CmdArgs) {\n  // ...\n  if (const auto *A = Args.getLastArg(options::OPT_fprofile_function_groups)) {\n    // ...\n    if (Val.getAsInteger(0, FunctionGroups) || FunctionGroups < 1)\n      D.Diag(diag::err_drv_invalid_int_value) << A->getAsString(Args) << Val;"},{q,889,"static void addPGOAndCoverageFlags(const ToolChain &TC, Compilation &C, const JobAction &JA, const InputInfo &Output, const ArgList &Args, SanitizerArgs &SanArgs, ArgStringList &CmdArgs) {\n  // ...\n  if (const auto *A = Args.getLastArg(options::OPT_fprofile_selected_function_group)) {\n    // ...\n    if (Val.getAsInteger(0, SelectedFunctionGroup) || SelectedFunctionGroup < 0 || SelectedFunctionGroup >= FunctionGroups)\n      D.Diag(diag::err_drv_invalid_int_value) << A->getAsString(Args) << Val;"},{q,3434,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_offset_EQ)) {\n    // ...\n    if ((EffectiveTriple.isARM() || EffectiveTriple.isThumb()) && (Offset < 0 || Offset > 0xfffff)) {\n      D.Diag(diag::err_drv_invalid_int_value) << A->getOption().getName() << Value;"},{q,5189,"#endif\n  // ...\n  // We support -falign-loops=N where N is a power of 2. GCC supports more\n  // forms.\n  if (const Arg *A = Args.getLastArg(options::OPT_falign_loops_EQ)) {\n    // ...\n    if (StringRef(A->getValue()).getAsInteger(10, Value) || Value > 65536)\n      TC.getDriver().Diag(diag::err_drv_invalid_int_value) << A->getAsString(Args) << A->getValue();"},{q,5685,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mtls_size_EQ)) {\n    // ...\n    if (TLSSize != 12 && TLSSize != 24 && TLSSize != 32 && TLSSize != 48)\n      D.Diag(diag::err_drv_invalid_int_value) << A->getOption().getName() << Value;"},{q,5961,"#endif\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT_W_Group, options::OPT__SLASH_wd)) {\n    // ...\n    if (A->getOption().getID() == options::OPT__SLASH_wd) {\n      // ...\n      if (StringRef(A->getValue()).getAsInteger(10, WarningNumber)) {\n        D.Diag(diag::err_drv_invalid_int_value) << A->getAsString(Args) << A->getValue();"},{S,583,"llvm::StringRef tools::getLTOParallelism(const ArgList &Args, const Driver &D) {\n  // ...\n  if (!llvm::get_threadpool_strategy(LtoJobsArg->getValue()))\n    D.Diag(diag::err_drv_invalid_int_value) << LtoJobsArg->getAsString(Args) << LtoJobsArg->getValue();"},{S,1649,"// `-falign-functions` indicates that the functions should be aligned to a\n// 16-byte boundary.\n//\n// `-falign-functions=1` is the same as `-fno-align-functions`.\n//\n// The scalar `n` in `-falign-functions=n` must be an integral value between\n// [0, 65536].  If the value is not a power-of-two, it will be rounded up to\n// the nearest power-of-two.\n//\n// If we return `0`, the frontend will default to the backend\'s preferred\n// alignment.\n//\n// NOTE: icc only allows values between [0, 4096].  icc uses `-falign-functions`\n// to mean `-falign-functions=16`.  GCC defaults to the backend\'s preferred\n// alignment.  For unaligned functions, we default to the backend\'s preferred\n// alignment.\nunsigned tools::ParseFunctionAlignment(const ToolChain &TC, const ArgList &Args) {\n  // ...\n  if (StringRef(A->getValue()).getAsInteger(10, Value) || Value > 65536)\n    TC.getDriver().Diag(diag::err_drv_invalid_int_value) << A->getAsString(Args) << A->getValue();"},{S,1706,"static unsigned ParseDebugDefaultVersion(const ToolChain &TC, const ArgList &Args) {\n  // ...\n  if (StringRef(A->getValue()).getAsInteger(10, Value) || Value > 5 || Value < 2)\n    TC.getDriver().Diag(diag::err_drv_invalid_int_value) << A->getAsString(Args) << A->getValue();"},{S,2312,"void tools::checkAMDGPUCodeObjectVersion(const Driver &D, const llvm::opt::ArgList &Args) {\n  // ...\n  if (auto *CodeObjArg = getAMDGPUCodeObjectArgument(D, Args)) {\n    if (CodeObjArg->getOption().getID() == options::OPT_mcode_object_version_EQ) {\n      // ...\n      if (Remnant || CodeObjVer < MinCodeObjVer || CodeObjVer > MaxCodeObjVer)\n        D.Diag(diag::err_drv_invalid_int_value) << CodeObjArg->getAsString(Args) << CodeObjArg->getValue();"},{u,357,"template <typename IntTy> static std::optional<IntTy> normalizeStringIntegral(OptSpecifier Opt, int, const ArgList &Args, DiagnosticsEngine &Diags) {\n  // ...\n  if (StringRef(Arg->getValue()).getAsInteger(0, Res)) {\n    Diags.Report(diag::err_drv_invalid_int_value) << Arg->getAsString(Args) << Arg->getValue();"}}
	},
	["err_drv_invalid_linker_name"]={
		[i]="err_drv_invalid_linker_name",
		[b]="invalid linker name in argument \'%0\'",
		[c]="invalid linker name in argument \'A\'",
		[e]=d,
		[f]="invalid linker name in argument \'(.*?)\'",
		[g]=a,
		[h]=n,
		[j]={"e6dcfaf127c7",1384006612,"Add support for -fuse-ld=.","Add support for -fuse-ld=.\n\nllvm-svn: 194328"},
		[k]={{V,812,"std::string ToolChain::GetLinkerPath(bool *LinkerIsLLD) const {\n  // ...\n  // --ld-path= takes precedence over -fuse-ld= and specifies the executable\n  // name. -B, COMPILER_PATH and PATH and consulted if the value does not\n  // contain a path component separator.\n  // -fuse-ld=lld can be used with --ld-path= to inform clang that the binary\n  // that --ld-path= points to is lld.\n  if (const Arg *A = Args.getLastArg(options::OPT_ld_path_EQ)) {\n    // ...\n    getDriver().Diag(diag::err_drv_invalid_linker_name) << A->getAsString(Args);"},{V,854,"std::string ToolChain::GetLinkerPath(bool *LinkerIsLLD) const {\n  // ...\n  if (A)\n    getDriver().Diag(diag::err_drv_invalid_linker_name) << A->getAsString(Args);"},{O,50,"std::string wasm::Linker::getLinkerPath(const ArgList &Args) const {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_fuse_ld_EQ)) {\n    // ...\n    if (!UseLinker.empty()) {\n      // ...\n      // Accept \'lld\', and \'ld\' as aliases for the default linker\n      if (UseLinker != \"lld\" && UseLinker != \"ld\")\n        ToolChain.getDriver().Diag(diag::err_drv_invalid_linker_name) << A->getAsString(Args);"}}
	},
	["err_drv_invalid_malign_branch_EQ"]={
		[i]={{nil,v,"err_drv_invalid_malign_branch_EQ"}},
		[b]={{nil,v,"invalid argument \'%0\' to -malign-branch=; each element must be one of: %1"}},
		[c]={{nil,v,"invalid argument \'A\' to -malign-branch=; each element must be one of: B"}},
		[e]=d,
		[f]="invalid argument \'(.*?)\' to \\-malign\\-branch\\=; each element must be one of\\: (.*?)",
		[g]=a,
		[h]={{nil,v,n}},
		[j]={U,1534346725,T,W},
		[k]={{S,1959,"void tools::addX86AlignBranchArgs(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs, bool IsLTO, const StringRef PluginOptPrefix) {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_malign_branch_EQ)) {\n    // ...\n    for (StringRef T : A->getValues()) {\n      if (T != \"fused\" && T != \"jcc\" && T != \"jmp\" && T != \"call\" && T != \"ret\" && T != \"indirect\")\n        D.Diag(diag::err_drv_invalid_malign_branch_EQ) << T << \"fused, jcc, jmp, call, ret, indirect\";"}}
	},
	["err_drv_invalid_mfloat_abi"]={
		[i]="err_drv_invalid_mfloat_abi",
		[b]="invalid float ABI \'%0\'",
		[c]="invalid float ABI \'A\'",
		[e]=d,
		[f]="invalid float ABI \'(.*?)\'",
		[g]=a,
		[h]=n,
		[j]={"7848592ec652",1252623609,"Initial handling of -m{soft-float,hard-float,float-abi=} for ARM.","Initial handling of -m{soft-float,hard-float,float-abi=} for ARM.\n\nllvm-svn: 81471"},
		[k]={{sb,452,"// Select the float ABI as determined by -msoft-float, -mhard-float, and\n// -mfloat-abi=.\narm::FloatABI arm::getARMFloatABI(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_msoft_float, options::OPT_mhard_float, options::OPT_mfloat_abi_EQ)) {\n    if (A->getOption().matches(options::OPT_msoft_float)) {\n    // ...\n    } else if (A->getOption().matches(options::OPT_mhard_float)) {\n    // ...\n    } else {\n      // ...\n      if (ABI == FloatABI::Invalid && !StringRef(A->getValue()).empty()) {\n        D.Diag(diag::err_drv_invalid_mfloat_abi) << A->getAsString(Args);"},{lb,69,"csky::FloatABI csky::getCSKYFloatABI(const Driver &D, const ArgList &Args) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_msoft_float, options::OPT_mhard_float, options::OPT_mfloat_abi_EQ)) {\n    if (A->getOption().matches(options::OPT_msoft_float)) {\n    // ...\n    } else if (A->getOption().matches(options::OPT_mhard_float)) {\n    // ...\n    } else {\n      // ...\n      if (ABI == FloatABI::Invalid) {\n        D.Diag(diag::err_drv_invalid_mfloat_abi) << A->getAsString(Args);"},{"clang/lib/Driver/ToolChains/Arch/Mips.cpp",163,"// Select the MIPS float ABI as determined by -msoft-float, -mhard-float,\n// and -mfloat-abi=.\nmips::FloatABI mips::getMipsFloatABI(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_msoft_float, options::OPT_mhard_float, options::OPT_mfloat_abi_EQ)) {\n    if (A->getOption().matches(options::OPT_msoft_float))\n    // ...\n    else if (A->getOption().matches(options::OPT_mhard_float))\n    // ...\n    else {\n      // ...\n      if (ABI == mips::FloatABI::Invalid && !StringRef(A->getValue()).empty()) {\n        D.Diag(clang::diag::err_drv_invalid_mfloat_abi) << A->getAsString(Args);"},{"clang/lib/Driver/ToolChains/Arch/PPC.cpp",153,"ppc::FloatABI ppc::getPPCFloatABI(const Driver &D, const ArgList &Args) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_msoft_float, options::OPT_mhard_float, options::OPT_mfloat_abi_EQ)) {\n    if (A->getOption().matches(options::OPT_msoft_float))\n    // ...\n    else if (A->getOption().matches(options::OPT_mhard_float))\n    // ...\n    else {\n      // ...\n      if (ABI == ppc::FloatABI::Invalid && !StringRef(A->getValue()).empty()) {\n        D.Diag(clang::diag::err_drv_invalid_mfloat_abi) << A->getAsString(Args);"},{"clang/lib/Driver/ToolChains/Arch/Sparc.cpp",102,"sparc::FloatABI sparc::getSparcFloatABI(const Driver &D, const ArgList &Args) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_msoft_float, options::OPT_mno_fpu, options::OPT_mhard_float, options::OPT_mfpu, options::OPT_mfloat_abi_EQ)) {\n    if (A->getOption().matches(options::OPT_msoft_float) || A->getOption().matches(options::OPT_mno_fpu))\n    // ...\n    else if (A->getOption().matches(options::OPT_mhard_float) || A->getOption().matches(options::OPT_mfpu))\n    // ...\n    else {\n      // ...\n      if (ABI == sparc::FloatABI::Invalid && !StringRef(A->getValue()).empty()) {\n        D.Diag(clang::diag::err_drv_invalid_mfloat_abi) << A->getAsString(Args);"}}
	},
	["err_drv_invalid_mtp"]={
		[i]={{nil,y,"err_drv_invalid_mtp"}},
		[b]={{nil,y,"invalid thread pointer reading mode \'%0\'"}},
		[c]={{nil,y,"invalid thread pointer reading mode \'A\'"}},
		[e]=d,
		[f]="invalid thread pointer reading mode \'(.*?)\'",
		[g]=a,
		[h]={{nil,y,n}},
		[j]={"3ac5ab7e1da1",1505212858,"[ARM] Option for reading thread pointer from coprocessor register","[ARM] Option for reading thread pointer from coprocessor register\n\nThis patch enables option for reading thread pointer directly\nfrom coprocessor register (-mtp=soft/cp15).\n\nDifferential Revision: https://reviews.llvm.org/D34878\n\nllvm-svn: 313018"},
		[k]={{"clang/lib/Driver/ToolChains/Arch/AArch64.cpp",323,"void aarch64::getAArch64TargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features, bool ForAS) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mtp_mode_EQ)) {\n    // ...\n    if (Mtp == \"el3\" || Mtp == \"tpidr_el3\")\n    // ...\n    else if (Mtp == \"el2\" || Mtp == \"tpidr_el2\")\n    // ...\n    else if (Mtp == \"el1\" || Mtp == \"tpidr_el1\")\n    // ...\n    else if (Mtp == \"tpidrro_el0\")\n    // ...\n    else if (Mtp != \"el0\" && Mtp != \"tpidr_el0\")\n      D.Diag(diag::err_drv_invalid_mtp) << A->getAsString(Args);"},{sb,220,"// Select mode for reading thread pointer (-mtp=soft/cp15).\narm::ReadTPMode arm::getReadTPMode(const Driver &D, const ArgList &Args, const llvm::Triple &Triple, bool ForAS) {\n  if (Arg *A = Args.getLastArg(options::OPT_mtp_mode_EQ)) {\n    // ...\n    if (StringRef(A->getValue()).empty())\n    // ...\n    else\n      D.Diag(diag::err_drv_invalid_mtp) << A->getAsString(Args);"}}
	},
	["err_drv_invalid_object_mode"]={
		[i]={{nil,A,"err_drv_invalid_object_mode"}},
		[b]={{nil,o,"OBJECT_MODE setting %0 is not recognized and is not a valid setting"},{t,A,"OBJECT_MODE setting %0 is not recognized and is not a valid setting."}},
		[c]={{nil,o,"OBJECT_MODE setting A is not recognized and is not a valid setting"},{t,A,"OBJECT_MODE setting A is not recognized and is not a valid setting."}},
		[e]=d,
		[f]="OBJECT_MODE setting (.*?) is not recognized and is not a valid setting",
		[g]=a,
		[h]={{nil,A,n}},
		[j]={ab,1585492323,Z,bb},
		[k]={{x,594,"/// Compute target triple from args.\n///\n/// This routine provides the logic to compute a target triple from various\n/// args passed to the driver and the default triple string.\nstatic llvm::Triple computeTargetTriple(const Driver &D, StringRef TargetTriple, const ArgList &Args, StringRef DarwinArchName = \"\") {\n  // ...\n  // On AIX, the env OBJECT_MODE may affect the resulting arch variant.\n  if (Target.isOSAIX()) {\n    if (std::optional<std::string> ObjectModeValue = llvm::sys::Process::GetEnv(\"OBJECT_MODE\")) {\n      // ...\n      if (ObjectMode.equals(\"64\")) {\n      // ...\n      } else if (ObjectMode.equals(\"32\")) {\n      // ...\n      } else {\n        D.Diag(diag::err_drv_invalid_object_mode) << ObjectMode;"}}
	},
	["err_drv_invalid_omp_target"]={
		[i]="err_drv_invalid_omp_target",
		[b]="OpenMP target is invalid: \'%0\'",
		[c]="OpenMP target is invalid: \'A\'",
		[e]=d,
		[f]="OpenMP target is invalid\\: \'(.*?)\'",
		[g]=a,
		[h]=n,
		[j]={"4d5f0bbea1ec",1452010984,"[OpenMP] Offloading descriptor registration and device codegen.","[OpenMP] Offloading descriptor registration and device codegen.\n\nSummary:\nIn order to offloading work properly two things need to be in place:\n- a descriptor with all the offloading information (device entry functions, and global variable) has to be created by the host and registered in the OpenMP offloading runtime library.\n- all the device functions need to be emitted for the device and a convention has to be in place so that the runtime library can easily map the host ID of an entry point with the actual function in the device.\n\nThis patch adds support for these two things. However, only entry functions are being registered given that \'declare target\' directive is not yet implemented.\n\nAbout offloading descriptor:\n\nThe details of the descriptor are explained with more detail in http://goo.gl/L1rnKJ. Basically the descriptor will have fields that specify the number of devices, the pointers to where the device images begin and end (that will be defined by the linker), and also pointers to a the begin and end of table whose entries contain information about a specific entry point. Each entry has the type:\n```\nstruct __tgt_offload_entry{\n void *addr;\n char *name;\n int64_t size;\n};\n```  \nand will be implemented in a pre determined (ELF) section `.omp_offloading.entries` with 1-byte alignment, so that when all the objects are linked, the table is in that section with no padding in between entries (will be like a C array). The code generation ensures that all `__tgt_offload_entry` entries are emitted in the same order for both host and device so that the runtime can have the corresponding entries in both host and device in same index of the table, and efficiently implement the mapping.\n\nThe resulting descriptor is registered/unregistered with the runtime library using the calls `__tgt_register_lib` and `__tgt_unregister_lib`. The registration is implemented in a high priority global initializer so that the registration happens always before any initializer (that can potentially include target regions) is run.\n\nThe driver flag -omptargets= was created to specify a comma separated list of devices the user wants to support so that the new functionality can be exercised. Each device is specified with its triple.\n\n\nAbout target codegen:\n\nThe target codegen is pretty much straightforward as it reuses completely the logic of the host version for the same target region. The tricky part is to identify the meaningful target regions in the device side. Unlike other programming models, like CUDA, there are no already outlined functions with attributes that mark what should be emitted or not. So, the information on what to emit is passed in the form of metadata in host bc file. This requires a new option to pass the host bc to the device frontend. Then everything is similar to what happens in CUDA: the global declarations emission is intercepted to check to see if it is an \"interesting\" declaration. The difference is that instead of checking an attribute, the metadata information in checked. Right now, there is only a form of metadata to pass information about the device entry points (target regions). A class `OffloadEntriesInfoManagerTy` was created to manage all the information and queries related with the metadata. The metadata looks like this:\n```\n!omp_offload.info = !{!0, !1, !2, !3, !4, !5, !6}\n\n!0 = !{i32 0, i32 52, i32 77426347, !\"_ZN2S12r1Ei\", i32 479, i32 13, i32 4}\n!1 = !{i32 0, i32 52, i32 77426347, !\"_ZL7fstatici\", i32 461, i32 11, i32 5}\n!2 = !{i32 0, i32 52, i32 77426347, !\"_Z9ftemplateIiET_i\", i32 444, i32 11, i32 6}\n!3 = !{i32 0, i32 52, i32 77426347, !\"_Z3fooi\", i32 99, i32 11, i32 0}\n!4 = !{i32 0, i32 52, i32 77426347, !\"_Z3fooi\", i32 272, i32 11, i32 3}\n!5 = !{i32 0, i32 52, i32 77426347, !\"_Z3fooi\", i32 127, i32 11, i32 1}\n!6 = !{i32 0, i32 52, i32 77426347, !\"_Z3fooi\", i32 159, i32 11, i32 2}\n```\nThe fields in each metadata entry are (in sequence):\nEntry 1) an ID of the type of metadata - right now only zero is used meaning \"OpenMP target region\".\nEntry 2) a unique ID of the device where the input source file that contain the target region lives. \nEntry 3) a unique ID of the file where the input source file that contain the target region lives. \nEntry 4) a mangled name of the function that encloses the target region.\nEntries 5) and 6) line and column number where the target region was found.\nEntry 7) is the order the entry was emitted.\n\nEntry 2) and 3) are required to distinguish files that have the same function name.\nEntry 4) is required to distinguish different instances of the same declaration (usually templated ones)\nEntries 5) and 6) are required to distinguish the particular target region in body of the function (it is possible that a given target region is not an entry point - if clause can evaluate always to zero - and therefore we need to identify the \"interesting\" target regions. )\n\nThis patch replaces http://reviews.llvm.org/D12306.\n\nReviewers: ABataev, hfinkel, tra, rjmccall, sfantao\n\nSubscribers: FBrygidyn, piotr.rak, Hahnfeld, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D12614\n\nllvm-svn: 256842"},
		[k]={{x,951,"void Driver::CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs) {\n  // ...\n  if (IsOpenMPOffloading) {\n    // ...\n    for (StringRef Val : OpenMPTriples) {\n      // ...\n      // If the specified target is invalid, emit a diagnostic.\n      if (TT.getArch() == llvm::Triple::UnknownArch)\n        Diag(clang::diag::err_drv_invalid_omp_target) << Val;"},{u,3882,"#include \"clang/Driver/Options.inc\"\n  // ...\n  // Get the OpenMP target triples if any.\n  if (Arg *A = Args.getLastArg(options::OPT_fopenmp_targets_EQ)) {\n    // ...\n    for (unsigned i = 0; i < A->getNumValues(); ++i) {\n      // ...\n      if (TT.getArch() == llvm::Triple::UnknownArch || !(TT.getArch() == llvm::Triple::aarch64 || TT.isPPC() || TT.getArch() == llvm::Triple::nvptx || TT.getArch() == llvm::Triple::nvptx64 || TT.getArch() == llvm::Triple::amdgcn || TT.getArch() == llvm::Triple::x86 || TT.getArch() == llvm::Triple::x86_64))\n        Diags.Report(diag::err_drv_invalid_omp_target) << A->getValue(i);"}}
	},
	["err_drv_invalid_or_unsupported_offload_target"]={
		[i]={{nil,o,"err_drv_invalid_or_unsupported_offload_target"}},
		[b]={{nil,o,"invalid or unsupported offload target: \'%0\'"}},
		[c]={{nil,o,"invalid or unsupported offload target: \'A\'"}},
		[e]=d,
		[f]="invalid or unsupported offload target\\: \'(.*?)\'",
		[g]=a,
		[h]={{nil,o,n}},
		[j]={N,1610286626,J,L},
		[k]={{x,124,"static std::optional<llvm::Triple> getOffloadTargetTriple(const Driver &D, const ArgList &Args) {\n  // ...\n  case 0:\n    D.Diag(diag::err_drv_invalid_or_unsupported_offload_target) << \"\";"},{x,147,"static std::optional<llvm::Triple> getNVIDIAOffloadTargetTriple(const Driver &D, const ArgList &Args, const llvm::Triple &HostTriple) {\n  // ...\n  D.Diag(diag::err_drv_invalid_or_unsupported_offload_target) << TT->str();"},{x,164,"static std::optional<llvm::Triple> getHIPOffloadTargetTriple(const Driver &D, const ArgList &Args) {\n  // ...\n  D.Diag(diag::err_drv_invalid_or_unsupported_offload_target) << TT->str();"}}
	},
	["err_drv_invalid_os_in_arg"]={
		[i]={{nil,o,"err_drv_invalid_os_in_arg"}},
		[b]={{nil,o,"invalid OS value \'%0\' in \'%1\'"}},
		[c]={{nil,o,"invalid OS value \'A\' in \'B\'"}},
		[e]=d,
		[f]="invalid OS value \'(.*?)\' in \'(.*?)\'",
		[g]=a,
		[h]={{nil,o,n}},
		[j]={N,1610286626,J,L},
		[k]={{G,2106,"/// Returns the deployment target that\'s specified using the -mtargetos option.\nstd::optional<DarwinPlatform> getDeploymentTargetFromMTargetOSArg(DerivedArgList &Args, const Driver &TheDriver, const std::optional<DarwinSDKInfo> &SDKInfo) {\n  // ...\n  default:\n    TheDriver.Diag(diag::err_drv_invalid_os_in_arg) << TT.getOSName() << A->getAsString(Args);"}}
	},
	["err_drv_invalid_output_with_multiple_archs"]={
		[i]="err_drv_invalid_output_with_multiple_archs",
		[b]="cannot use \'%0\' output with multiple -arch options",
		[c]="cannot use \'A\' output with multiple -arch options",
		[e]=d,
		[f]="cannot use \'(.*?)\' output with multiple \\-arch options",
		[g]=a,
		[h]=n,
		[j]={"f479c1293ea4",1236883218,"Driver: Add majority of driver-driver implementation.","Driver: Add majority of driver-driver implementation.\n - Compare to driverdriver.c if bored; not completely fair since the\n   driver gets a bit more code in other places to handle binding archs\n   (for Xarch) but not completely unfair either.\n\nFear not, extra Action classes will have a happy home for their\nvtables soon.\n\nllvm-svn: 66817"},
		[k]={{x,2460,"void Driver::BuildUniversalActions(Compilation &C, const ToolChain &TC, const InputList &BAInputs) const {\n  // ...\n  // Add in arch bindings for every top level action, as well as lipo and\n  // dsymutil steps if needed.\n  for (Action *Act : SingleActions) {\n    // ...\n    if (Archs.size() > 1 && !types::canLipoType(Act->getType()))\n      Diag(clang::diag::err_drv_invalid_output_with_multiple_archs) << types::getTypeName(Act->getType());"},{q,1458,"static bool checkRemarksOptions(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // ...\n  if (hasMultipleInvocations && hasExplicitOutputFile) {\n    D.Diag(diag::err_drv_invalid_output_with_multiple_archs) << \"-foptimization-record-file\";"},{G,504,"static bool checkRemarksOptions(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // ...\n  if (hasMultipleInvocations && hasExplicitOutputFile) {\n    D.Diag(diag::err_drv_invalid_output_with_multiple_archs) << \"-foptimization-record-file\";"}}
	},
	["err_drv_invalid_range_dxil_validator_version"]={
		[i]={{nil,s,"err_drv_invalid_range_dxil_validator_version"}},
		[b]={{nil,s,"invalid validator version : %0\nValidator version must be less than or equal to current internal version."}},
		[c]={{nil,s,"invalid validator version : A\nValidator version must be less than or equal to current internal version."}},
		[e]=d,
		[f]="invalid validator version \\: (.*?)\nValidator version must be less than or equal to current internal version\\.",
		[g]=a,
		[h]={{nil,s,n}},
		[j]={"73417c517644",1650064974,"[HLSL][clang][Driver] Support validator version command line option.","[HLSL][clang][Driver] Support validator version command line option.\n\nThe DXIL validator version option(/validator-version) decide the validator version when compile hlsl.\nThe format is major.minor like 1.0.\n\nIn normal case, the value of validator version should be got from DXIL validator. Before we got DXIL validator ready for llvm/main, DXIL validator version option is added first to set validator version.\n\nIt will affect code generation for DXIL, so it is treated as a code gen option.\n\nA new member std::string DxilValidatorVersion is added to clang::CodeGenOptions.\n\nThen CGHLSLRuntime is added to clang::CodeGenModule.\nIt is used to translate clang::CodeGenOptions::DxilValidatorVersion into a ModuleFlag under key \"dx.valver\" at end of clang code generation.\n\nReviewed By: beanz\n\nDifferential Revision: https://reviews.llvm.org/D123884"},
		[k]={{"clang/lib/Driver/ToolChains/HLSL.cpp",131,"bool isLegalValidatorVersion(StringRef ValVersionStr, const Driver &D) {\n  // ...\n  if (Version < MinVer) {\n    D.Diag(diag::err_drv_invalid_range_dxil_validator_version) << ValVersionStr;"}}
	},
	["err_drv_invalid_remap_file"]={
		[i]="err_drv_invalid_remap_file",
		[b]="invalid option \'%0\' not of the form <from-file>;<to-file>",
		[c]="invalid option \'A\' not of the form <from-file>;<to-file>",
		[e]=d,
		[f]="invalid option \'(.*?)\' not of the form \\<from\\-file\\>;\\<to\\-file\\>",
		[g]=a,
		[h]=n,
		[j]={"6048e7fdc0f6",1259817076,"Add clang -cc1 support for -remap-file.","Add clang -cc1 support for -remap-file.\n\nllvm-svn: 90414"},
		[k]={{u,4259,"#include \"clang/Driver/Options.inc\"\n  // ...\n  for (const auto *A : Args.filtered(OPT_remap_file)) {\n    // ...\n    if (Split.second.empty()) {\n      Diags.Report(diag::err_drv_invalid_remap_file) << A->getAsString(Args);"}}
	},
	["err_drv_invalid_riscv_arch_name"]={
		[i]={{nil,B,"err_drv_invalid_riscv_arch_name"}},
		[b]={{nil,B,"invalid arch name \'%0\', %1"}},
		[c]={{nil,B,"invalid arch name \'A\', B"}},
		[e]=d,
		[f]="invalid arch name \'(.*?)\', (.*?)",
		[g]=a,
		[h]={{nil,B,n}},
		[j]={"c85505450ab6",1524696158,"[RISCV] More validations on the input value of -march=","[RISCV] More validations on the input value of -march=\n\nSupporting additional rules for parsing ISA string.\n\n- RISC-V ISA strings must be lowercase.\nE.g.: rv32IMC is not supported, rv32imc is correct.\n\n- Multi-letter extensions are to be separated by a single\nunderscore \'_\'. The extension prefix counts as a letter.\nThis means extensions that start with \'s\', \'sx\' and \'sx\'\nare all multi-letter.\nE.g.:\nxasb is a single non-standard extension named \'xasb\'\nxa_sb are two extensions, the non-standard user level extension\n\'xa\', and the supervisor level extension \'sb\'.\n\n- Standard user-level extensions are specified following\na canonical order, according to Table 22.1 in\nRISC-V User-Level ISA V2.2.\n\n- Non-standard user-level \'x\' extensions,\nstandard supervisor-level \'s\' extensions and\nnon-standard supervisor-level \'sx\' extensions\nare also specified following a canonical order according\nto Table 22.1 in RISC-V User-Level ISA V2.2:\n\'x\' extensions, follwed by \'s\' extensions and then \'sx\' extensions.\n\n- Extensions might have a version number.\nUnderscores may be used to separate ISA subset components to\nimprove readability and to provide disambiguation.\nE.g.: rv32i2_m3_a1_f2_d2\n\n- Version numbers are divided into major and minor numbers,\nseparated by a \'p\'. If the minor version is 0, then \'p0\' can\nbe omitted.\n\n- Additional checks for dependent extensions and invalid\nextensions combinations.\nE.g.:\n\'e\' requires rv32\n\'e\' can\'t be combined with \'f\' nor \'d\'\n\'q\' requires rv64\n\n- TODO items have also been marked with comments in the code.\n\nReviewers: asb, kito-cheng\n\nReviewed By: asb\n\nSubscribers: edward-jones, mgrang, zzheng, rbar, johnrusso, simoncook, jordy.potman.lists, sabuasal, niosHD, shiva0217, cfe-commits\n\nDifferential Revision: https://reviews.llvm.org/D45284\n\nllvm-svn: 330880"},
		[k]={{"clang/lib/Driver/ToolChains/Arch/RISCV.cpp",39,"// Returns false if an error is diagnosed.\nstatic bool getArchFeatures(const Driver &D, StringRef Arch, std::vector<StringRef> &Features, const ArgList &Args) {\n  // ...\n  if (!ISAInfo) {\n    handleAllErrors(ISAInfo.takeError(), [&](llvm::StringError &ErrMsg) { D.Diag(diag::err_drv_invalid_riscv_arch_name) << Arch << ErrMsg.getMessage(); });"}}
	},
	["err_drv_invalid_riscv_cpu_name_for_target"]={
		[i]="err_drv_invalid_riscv_cpu_name_for_target",
		[b]="cpu \'%0\' does not support rv%select{32|64}1",
		[c]={{nil,nil,{"cpu \'A\' does not support rv",{"32","64"}}}},
		[e]=d,
		[f]="cpu \'(.*?)\' does not support rv(?:32|64)",
		[g]=a,
		[h]=n,
		[j]={"6adb9a0602bc",1678065956,"[AMDGPU] Emit predefined macro `__AMDGCN_CUMODE__`","[AMDGPU] Emit predefined macro `__AMDGCN_CUMODE__`\n\nPredefine __AMDGCN_CUMODE__ as 1 or 0 when compilation assumes CU or WGP modes.\n\nIf WGP mode is not supported, ignore -mno-cumode and emit a warning.\n\nThis is needed for implementing device functions like __smid\n(https://github.com/ROCm-Developer-Tools/hipamd/blob/312dff7b794337aa040be0691acc78e9f968a8d2/include/hip/amd_detail/amd_device_functions.h#L957)\n\nReviewed by: Matt Arsenault, Artem Belevich, Brian Sumner\n\nDifferential Revision: https://reviews.llvm.org/D145343"},
		[k]={{"clang/lib/Driver/ToolChains/Arch/RISCV.cpp",61,"// Get features except standard extension feature\nstatic void getRISCFeaturesFromMcpu(const Driver &D, const Arg *A, const llvm::Triple &Triple, StringRef Mcpu, std::vector<StringRef> &Features) {\n  // ...\n  if (!llvm::RISCV::parseCPU(Mcpu, Is64Bit)) {\n    // Try inverting Is64Bit in case the CPU is valid, but for the wrong target.\n    if (llvm::RISCV::parseCPU(Mcpu, !Is64Bit))\n      D.Diag(clang::diag::err_drv_invalid_riscv_cpu_name_for_target) << Mcpu << Is64Bit;"}}
	},
	["err_drv_invalid_rtlib_name"]={
		[i]="err_drv_invalid_rtlib_name",
		[b]="invalid runtime library name in argument \'%0\'",
		[c]="invalid runtime library name in argument \'A\'",
		[e]=d,
		[f]="invalid runtime library name in argument \'(.*?)\'",
		[g]=a,
		[h]=n,
		[j]={"f4916cde7668",1323298995,"Driver: Add a --rtlib={compiler-rt,libgcc} argument which I plan to use to allow","Driver: Add a --rtlib={compiler-rt,libgcc} argument which I plan to use to allow\ndual support for compiler-rt on Linux, during bringup.\n\nllvm-svn: 146094"},
		[k]={{V,1017,"ToolChain::RuntimeLibType ToolChain::GetRuntimeLibType(const ArgList &Args) const {\n  // ...\n  // Only use \"platform\" in tests to override CLANG_DEFAULT_RTLIB!\n  if (LibName == \"compiler-rt\")\n  // ...\n  else if (LibName == \"libgcc\")\n  // ...\n  else if (LibName == \"platform\")\n  // ...\n  else {\n    if (A)\n      getDriver().Diag(diag::err_drv_invalid_rtlib_name) << A->getAsString(Args);"},{"clang/lib/Driver/ToolChains/Fuchsia.cpp",350,"ToolChain::RuntimeLibType Fuchsia::GetRuntimeLibType(const ArgList &Args) const {\n  if (Arg *A = Args.getLastArg(clang::driver::options::OPT_rtlib_EQ)) {\n    // ...\n    if (Value != \"compiler-rt\")\n      getDriver().Diag(clang::diag::err_drv_invalid_rtlib_name) << A->getAsString(Args);"},{"clang/lib/Driver/ToolChains/OHOS.cpp",180,"ToolChain::RuntimeLibType OHOS::GetRuntimeLibType(const ArgList &Args) const {\n  if (Arg *A = Args.getLastArg(clang::driver::options::OPT_rtlib_EQ)) {\n    // ...\n    if (Value != \"compiler-rt\")\n      getDriver().Diag(clang::diag::err_drv_invalid_rtlib_name) << A->getAsString(Args);"}}
	},
	["err_drv_invalid_stdlib_name"]={
		[i]="err_drv_invalid_stdlib_name",
		[b]="invalid library name in argument \'%0\'",
		[c]="invalid library name in argument \'A\'",
		[e]=d,
		[f]="invalid library name in argument \'(.*?)\'",
		[g]=a,
		[h]=n,
		[j]={"092b6fb18709",1284505960,"Driver: Add a -stdlib= argument which can be used to select the C++ standard","Driver: Add a -stdlib= argument which can be used to select the C++ standard\nlibrary to use.\n - This is currently useful for testing libc++; you can now use \'clang++\n   -stdlib=libc++ t.cpp\' to compile using it if installed.\n\n - In the future could also be used to select other standard library choices if\n   alternatives become available (for example, to use an alternate C library).\n\nllvm-svn: 113891"},
		[k]={{V,1078,"ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList &Args) const {\n  // ...\n  // Only use \"platform\" in tests to override CLANG_DEFAULT_CXX_STDLIB!\n  if (LibName == \"libc++\")\n  // ...\n  else if (LibName == \"libstdc++\")\n  // ...\n  else if (LibName == \"platform\")\n  // ...\n  else {\n    if (A)\n      getDriver().Diag(diag::err_drv_invalid_stdlib_name) << A->getAsString(Args);"},{"clang/lib/Driver/ToolChains/Fuchsia.cpp",362,"ToolChain::CXXStdlibType Fuchsia::GetCXXStdlibType(const ArgList &Args) const {\n  if (Arg *A = Args.getLastArg(options::OPT_stdlib_EQ)) {\n    // ...\n    if (Value != \"libc++\")\n      getDriver().Diag(diag::err_drv_invalid_stdlib_name) << A->getAsString(Args);"},{ub,772,"ToolChain::CXXStdlibType HexagonToolChain::GetCXXStdlibType(const ArgList &Args) const {\n  // ...\n  if (Value != \"libstdc++\" && Value != \"libc++\")\n    getDriver().Diag(diag::err_drv_invalid_stdlib_name) << A->getAsString(Args);"},{"clang/lib/Driver/ToolChains/MipsLinux.cpp",89,"ToolChain::CXXStdlibType MipsLLVMToolChain::GetCXXStdlibType(const ArgList &Args) const {\n  // ...\n  if (A) {\n    // ...\n    if (Value != \"libc++\")\n      getDriver().Diag(clang::diag::err_drv_invalid_stdlib_name) << A->getAsString(Args);"},{"clang/lib/Driver/ToolChains/NaCl.cpp",350,"ToolChain::CXXStdlibType NaClToolChain::GetCXXStdlibType(const ArgList &Args) const {\n  if (Arg *A = Args.getLastArg(options::OPT_stdlib_EQ)) {\n    // ...\n    getDriver().Diag(clang::diag::err_drv_invalid_stdlib_name) << A->getAsString(Args);"},{"clang/lib/Driver/ToolChains/OHOS.cpp",192,"ToolChain::CXXStdlibType OHOS::GetCXXStdlibType(const ArgList &Args) const {\n  if (Arg *A = Args.getLastArg(options::OPT_stdlib_EQ)) {\n    // ...\n    if (Value != \"libc++\")\n      getDriver().Diag(diag::err_drv_invalid_stdlib_name) << A->getAsString(Args);"},{O,395,"ToolChain::CXXStdlibType WebAssembly::GetCXXStdlibType(const ArgList &Args) const {\n  if (Arg *A = Args.getLastArg(options::OPT_stdlib_EQ)) {\n    // ...\n    if (Value == \"libc++\")\n    // ...\n    else if (Value == \"libstdc++\")\n    // ...\n    else\n      getDriver().Diag(diag::err_drv_invalid_stdlib_name) << A->getAsString(Args);"}}
	},
	["err_drv_invalid_thread_model_for_target"]={
		[i]="err_drv_invalid_thread_model_for_target",
		[b]="invalid thread model \'%0\' in \'%1\' for this target",
		[c]="invalid thread model \'A\' in \'B\' for this target",
		[e]=d,
		[f]="invalid thread model \'(.*?)\' in \'(.*?)\' for this target",
		[g]=a,
		[h]=n,
		[j]={"b140a100a047",1412373464,"CFE Knob for: Add a thread-model knob for lowering atomics on baremetal & single threaded systems","CFE Knob for: Add a thread-model knob for lowering atomics on baremetal & single threaded systems\n\nhttp://reviews.llvm.org/D4985\n\nllvm-svn: 219027"},
		[k]={{q,5329,"#endif\n  // ...\n  {\n    // ...\n    if (Arg *A = Args.getLastArg(options::OPT_mthread_model)) {\n      if (!TC.isThreadModelSupported(A->getValue()))\n        D.Diag(diag::err_drv_invalid_thread_model_for_target) << A->getValue() << A->getAsString(Args);"}}
	},
	["err_drv_invalid_unwindlib_name"]={
		[i]={{nil,z,"err_drv_invalid_unwindlib_name"}},
		[b]={{nil,z,"invalid unwind library name in argument \'%0\'"}},
		[c]={{nil,z,"invalid unwind library name in argument \'A\'"}},
		[e]=d,
		[f]="invalid unwind library name in argument \'(.*?)\'",
		[g]=a,
		[h]={{nil,z,n}},
		[j]={U,1534346725,T,W},
		[k]={{V,1053,"ToolChain::UnwindLibType ToolChain::GetUnwindLibType(const ArgList &Args) const {\n  // ...\n  if (LibName == \"none\")\n  // ...\n  else if (LibName == \"platform\" || LibName == \"\") {\n  // ...\n  } else if (LibName == \"libunwind\") {\n  // ...\n  } else if (LibName == \"libgcc\")\n  // ...\n  else {\n    if (A)\n      getDriver().Diag(diag::err_drv_invalid_unwindlib_name) << A->getAsString(Args);"}}
	},
	["err_drv_invalid_value"]={
		[i]="err_drv_invalid_value",
		[b]="invalid value \'%1\' in \'%0\'",
		[c]="invalid value \'B\' in \'A\'",
		[e]=d,
		[f]="invalid value \'(.*?)\' in \'(.*?)\'",
		[g]=a,
		[h]=n,
		[j]={"0ac66427a9f2",1259531573,"clang -cc1: Use proper diagnostics for all parsing errors.","clang -cc1: Use proper diagnostics for all parsing errors.\n\nllvm-svn: 90100"},
		[k]={
			[1]={x,1390,"Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {\n  // ...\n  // Process -fembed-bitcode= flags.\n  if (Arg *A = Args.getLastArg(options::OPT_fembed_bitcode_EQ)) {\n    // ...\n    if (Model == ~0U) {\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Name;"},
			[2]={x,1426,"Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {\n  // ...\n  // Process -fmodule-header{=} flags.\n  if (Arg *A = Args.getLastArg(options::OPT_fmodule_header_EQ, options::OPT_fmodule_header)) {\n    // ...\n    if (A->getOption().matches(options::OPT_fmodule_header))\n    // ...\n    else {\n      // ...\n      if (Kind == ~0U) {\n        Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << ArgName;"},
			[3]={x,3147,"/// 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      if (Arg *A = Args.getLastArg(options::OPT_fuse_cuid_EQ)) {\n        // ...\n        if (UseCUID == CUID_Invalid) {\n          C.getDriver().Diag(diag::err_drv_invalid_value) << A->getAsString(Args) << UseCUIDStr;"},
			[4]={E,692,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Parse -f[no-]sanitize-memory-track-origins[=level] options.\n  if (AllAddedKinds & SanitizerKind::Memory) {\n    if (Arg *A = Args.getLastArg(options::OPT_fsanitize_memory_track_origins_EQ, options::OPT_fno_sanitize_memory_track_origins)) {\n      if (!A->getOption().matches(options::OPT_fno_sanitize_memory_track_origins)) {\n        // ...\n        if (S.getAsInteger(0, MsanTrackOrigins) || MsanTrackOrigins < 0 || MsanTrackOrigins > 2) {\n          if (DiagnoseErrors)\n            D.Diag(clang::diag::err_drv_invalid_value) << A->getAsString(Args) << S;"},
			[5]={E,926,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  if (AllAddedKinds & SanitizerKind::Address) {\n    // ...\n    if (Arg *A = Args.getLastArg(options::OPT_fsanitize_address_field_padding)) {\n      // ...\n      // Legal values are 0 and 1, 2, but in future we may add more levels.\n      if ((S.getAsInteger(0, AsanFieldPadding) || AsanFieldPadding < 0 || AsanFieldPadding > 2) && DiagnoseErrors) {\n        D.Diag(clang::diag::err_drv_invalid_value) << A->getAsString(Args) << S;"},
			[6]={E,1035,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  if (AllAddedKinds & SanitizerKind::HWAddress) {\n    if (Arg *HwasanAbiArg = Args.getLastArg(options::OPT_fsanitize_hwaddress_abi_EQ)) {\n      // ...\n      if (HwasanAbi != \"platform\" && HwasanAbi != \"interceptor\" && DiagnoseErrors)\n        D.Diag(clang::diag::err_drv_invalid_value) << HwasanAbiArg->getAsString(Args) << HwasanAbi;"},
			[7]={V,1333,"VersionTuple ToolChain::computeMSVCVersion(const Driver *D, const llvm::opt::ArgList &Args) const {\n  // ...\n  if (MSCompatibilityVersion) {\n    // ...\n    if (MSVT.tryParse(MSCompatibilityVersion->getValue())) {\n      if (D)\n        D->Diag(diag::err_drv_invalid_value) << MSCompatibilityVersion->getAsString(Args) << MSCompatibilityVersion->getValue();"},
			[8]={V,1345,"VersionTuple ToolChain::computeMSVCVersion(const Driver *D, const llvm::opt::ArgList &Args) const {\n  // ...\n  if (MSCVersion) {\n    // ...\n    if (StringRef(MSCVersion->getValue()).getAsInteger(10, Version)) {\n      if (D)\n        D->Diag(diag::err_drv_invalid_value) << MSCVersion->getAsString(Args) << MSCVersion->getValue();"},
			[9]={yb,350,"RocmInstallationDetector::RocmInstallationDetector(const Driver &D, const llvm::Triple &HostTriple, const llvm::opt::ArgList &Args, bool DetectHIPRuntime, bool DetectDeviceLib) : D(D) {\n  // ...\n  if (auto *A = Args.getLastArg(clang::driver::options::OPT_hip_version_EQ)) {\n    // ...\n    if (Major == ~0U || Minor == ~0U)\n      D.Diag(diag::err_drv_invalid_value) << A->getAsString(Args) << HIPVersionArg;"},
			[10]={q,160,"/// This is a helper function for validating the optional refinement step\n/// parameter in reciprocal argument strings. Return false if there is an error\n/// parsing the refinement step. Otherwise, return true and set the Position\n/// of the refinement step in the input string.\nstatic bool getRefinementStep(StringRef In, const Driver &D, const Arg &A, size_t &Position) {\n  // ...\n  if (Position != StringRef::npos) {\n    // ...\n    // Allow exactly one numeric character for the additional refinement\n    // step parameter. This is reasonable for all currently-supported\n    // operations and architectures because we would expect that a larger value\n    // of refinement steps would cause the estimate \"optimization\" to\n    // under-perform the native operation. Also, if the estimate does not\n    // converge quickly, it probably will not ever converge, so further\n    // refinement steps will not produce a better answer.\n    if (RefStep.size() != 1) {\n      D.Diag(diag::err_drv_invalid_value) << Option << RefStep;"},
			[11]={q,165,"/// This is a helper function for validating the optional refinement step\n/// parameter in reciprocal argument strings. Return false if there is an error\n/// parsing the refinement step. Otherwise, return true and set the Position\n/// of the refinement step in the input string.\nstatic bool getRefinementStep(StringRef In, const Driver &D, const Arg &A, size_t &Position) {\n  // ...\n  if (Position != StringRef::npos) {\n    // ...\n    if (RefStepChar < \'0\' || RefStepChar > \'9\') {\n      D.Diag(diag::err_drv_invalid_value) << Option << RefStep;"},
			[12]={q,249,"/// The -mrecip flag requires processing of many optional parameters.\nstatic void ParseMRecip(const Driver &D, const ArgList &Args, ArgStringList &OutStrings) {\n  // ...\n  for (unsigned i = 0; i != NumOptions; ++i) {\n    // ...\n    if (OptionIter == OptionStrings.end()) {\n      // ...\n      // The option was specified without a half or float or double suffix.\n      // Make sure that the double or half entry was not already specified.\n      // The float entry will be checked below.\n      if (OptionStrings[ValBase.str() + \'d\'] || OptionStrings[ValBase.str() + \'h\']) {\n        D.Diag(diag::err_drv_invalid_value) << A->getOption().getName() << Val;"},
			[13]={q,256,"/// The -mrecip flag requires processing of many optional parameters.\nstatic void ParseMRecip(const Driver &D, const ArgList &Args, ArgStringList &OutStrings) {\n  // ...\n  for (unsigned i = 0; i != NumOptions; ++i) {\n    // ...\n    if (OptionIter->second == true) {\n      // ...\n      D.Diag(diag::err_drv_invalid_value) << A->getOption().getName() << Val;"},
			[14]={q,294,"/// The -mprefer-vector-width option accepts either a positive integer\n/// or the string \"none\".\nstatic void ParseMPreferVectorWidth(const Driver &D, const ArgList &Args, ArgStringList &CmdArgs) {\n  // ...\n  if (Value == \"none\") {\n  // ...\n  } else {\n    // ...\n    if (Value.getAsInteger(10, Width)) {\n      D.Diag(diag::err_drv_invalid_value) << A->getOption().getName() << Value;"},
			[15]={q,2935,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const Arg *A : Args) {\n    // ...\n    case options::OPT_fdenormal_fp_math_EQ:\n      // ...\n      if (!DenormalFPMath.isValid()) {\n        D.Diag(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[16]={q,2943,"static void RenderFloatingPointOptions(const ToolChain &TC, const Driver &D, bool OFastEnabled, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const Arg *A : Args) {\n    // ...\n    case options::OPT_fdenormal_fp_math_f32_EQ:\n      // ...\n      if (!DenormalFP32Math.isValid()) {\n        D.Diag(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[17]={q,3429,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_offset_EQ)) {\n    // ...\n    if (Value.getAsInteger(10, Offset)) {\n      D.Diag(diag::err_drv_invalid_value) << A->getOption().getName() << Value;"},
			[18]={q,3452,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_reg_EQ)) {\n    // ...\n    if (EffectiveTriple.isAArch64() && Value != \"sp_el0\") {\n      D.Diag(diag::err_drv_invalid_value) << A->getOption().getName() << Value;"},
			[19]={q,5829,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_fbasic_block_sections_EQ)) {\n    // ...\n    if (Triple.isX86() && Triple.isOSBinFormatELF()) {\n      if (Val != \"all\" && Val != \"labels\" && Val != \"none\" && !Val.startswith(\"list=\"))\n        D.Diag(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[20]={q,6712,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_fgnuc_version_EQ)) {\n    // ...\n    if (Invalid || GNUCVer.getBuild() || Minor >= 100 || Patch >= 100) {\n      D.Diag(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[21]={q,6977,"#endif\n  // ...\n  // -finput_charset=UTF-8 is default. Reject others\n  if (Arg *inputCharset = Args.getLastArg(options::OPT_finput_charset_EQ)) {\n    // ...\n    if (!value.equals_insensitive(\"utf-8\"))\n      D.Diag(diag::err_drv_invalid_value) << inputCharset->getAsString(Args) << value;"},
			[22]={q,6985,"#endif\n  // ...\n  // -fexec_charset=UTF-8 is default. Reject others\n  if (Arg *execCharset = Args.getLastArg(options::OPT_fexec_charset_EQ)) {\n    // ...\n    if (!value.equals_insensitive(\"utf-8\"))\n      D.Diag(diag::err_drv_invalid_value) << execCharset->getAsString(Args) << value;"},
			[23]={q,7754,"/// /EH controls whether to run destructor cleanups when exceptions are\n/// thrown.  There are three modifiers:\n/// - s: Cleanup after \"synchronous\" exceptions, aka C++ exceptions.\n/// - a: Cleanup after \"asynchronous\" exceptions, aka structured exceptions.\n///      The \'a\' modifier is unimplemented and fundamentally hard in LLVM IR.\n/// - c: Assume that extern \"C\" functions are implicitly nounwind.\n/// The default is /EHs-c-, meaning cleanups are disabled.\nstatic EHFlags parseClangCLEHFlags(const Driver &D, const ArgList &Args) {\n  // ...\n  for (auto EHVal : EHArgs) {\n    for (size_t I = 0, E = EHVal.size(); I != E; ++I) {\n      // ...\n      D.Diag(clang::diag::err_drv_invalid_value) << \"/EH\" << EHVal;"},
			[24]={q,7980,"void Clang::AddClangCLArgs(const ArgList &Args, types::ID InputType, ArgStringList &CmdArgs, llvm::codegenoptions::DebugInfoKind *DebugInfoKind, bool *EmitCodeView) const {\n  // ...\n  for (const Arg *A : Args.filtered(options::OPT__SLASH_guard)) {\n    // ...\n    // The only valid options are \"cf\", \"cf,nochecks\", \"cf-\", \"ehcont\" and\n    // \"ehcont-\".\n    if (GuardArgs.equals_insensitive(\"cf\")) {\n    // ...\n    } else if (GuardArgs.equals_insensitive(\"cf,nochecks\")) {\n    // ...\n    } else if (GuardArgs.equals_insensitive(\"ehcont\")) {\n    // ...\n    } else if (GuardArgs.equals_insensitive(\"cf-\") || GuardArgs.equals_insensitive(\"ehcont-\")) {\n    // ...\n    } else {\n      D.Diag(diag::err_drv_invalid_value) << A->getSpelling() << GuardArgs;"},
			[25]={S,1901,"SmallString<128> tools::getStatsFileName(const llvm::opt::ArgList &Args, const InputInfo &Output, const InputInfo &Input, const Driver &D) {\n  // ...\n  if (A) {\n    // ...\n    if (SaveStats == \"obj\" && Output.isFilename()) {\n    // ...\n    } else if (SaveStats != \"cwd\") {\n      D.Diag(diag::err_drv_invalid_value) << A->getAsString(Args) << SaveStats;"},
			[26]={pb,93,"XRayArgs::XRayArgs(const ToolChain &TC, const ArgList &Args) {\n  // ...\n  if (Bundles.empty())\n  // ...\n  else\n    for (const auto &B : Bundles) {\n      // ...\n      for (const auto &P : BundleParts) {\n        // ...\n        if (!Valid) {\n          D.Diag(clang::diag::err_drv_invalid_value) << \"-fxray-instrumentation-bundle=\" << P;"},
			[27]={pb,186,"void XRayArgs::addArgs(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, types::ID InputType) const {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_fxray_instruction_threshold_EQ)) {\n    // ...\n    if (S.getAsInteger(0, Value) || Value < 0)\n      D.Diag(clang::diag::err_drv_invalid_value) << A->getAsString(Args) << S;"},
			[28]={pb,196,"void XRayArgs::addArgs(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, types::ID InputType) const {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_fxray_function_groups)) {\n    // ...\n    if (S.getAsInteger(0, XRayFunctionGroups) || XRayFunctionGroups < 1)\n      D.Diag(clang::diag::err_drv_invalid_value) << A->getAsString(Args) << S;"},
			[29]={pb,206,"void XRayArgs::addArgs(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, types::ID InputType) const {\n  // ...\n  if (const Arg *A = Args.getLastArg(options::OPT_fxray_selected_function_group)) {\n    // ...\n    if (S.getAsInteger(0, XRaySelectedFunctionGroup) || XRaySelectedFunctionGroup < 0 || XRaySelectedFunctionGroup >= XRayFunctionGroups)\n      D.Diag(clang::diag::err_drv_invalid_value) << A->getAsString(Args) << S;"},
			[30]={u,307,"static std::optional<unsigned> normalizeSimpleEnum(OptSpecifier Opt, unsigned TableIndex, const ArgList &Args, DiagnosticsEngine &Diags) {\n  // ...\n  Diags.Report(diag::err_drv_invalid_value) << Arg->getAsString(Args) << ArgValue;"},
			[31]={u,955,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n    // ...\n    if (Value == NumConstraints) {\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Name;"},
			[32]={u,975,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n    // ...\n    if (Value == NUM_ANALYSIS_DIAG_CLIENTS) {\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Name;"},
			[33]={u,990,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n    // ...\n    if (Value == NumPurgeModes) {\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Name;"},
			[34]={u,1005,"#include \"clang/StaticAnalyzer/Core/Analyses.def\"\n    // ...\n    if (Value == NumInliningModes) {\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Name;"},
			[35]={u,1279,"static bool parseDiagnosticLevelMask(StringRef FlagName, const std::vector<std::string> &Levels, DiagnosticsEngine &Diags, DiagnosticLevelMask &M) {\n  // ...\n  for (const auto &Level : Levels) {\n    // ...\n    if (PM == DiagnosticLevelMask::None) {\n      // ...\n      Diags.Report(diag::err_drv_invalid_value) << FlagName << Level;"},
			[36]={u,1292,"static void parseSanitizerKinds(StringRef FlagName, const std::vector<std::string> &Sanitizers, DiagnosticsEngine &Diags, SanitizerSet &S) {\n  for (const auto &Sanitizer : Sanitizers) {\n    // ...\n    if (K == SanitizerMask())\n      Diags.Report(diag::err_drv_invalid_value) << FlagName << Sanitizer;"},
			[37]={u,1313,"static void parseXRayInstrumentationBundle(StringRef FlagName, StringRef Bundle, ArgList &Args, DiagnosticsEngine &D, XRayInstrSet &S) {\n  // ...\n  for (const auto &B : BundleParts) {\n    // ...\n    if (Mask == XRayInstrKind::None)\n      if (B != \"none\")\n        D.Report(diag::err_drv_invalid_value) << FlagName << Bundle;"},
			[38]={u,1674,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_debug_info_kind_EQ)) {\n    // ...\n    if (Val == ~0U)\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[39]={u,1757,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (const Arg *A = Args.getLastArg(OPT_ftime_report, OPT_ftime_report_EQ)) {\n    // ...\n    // -ftime-report= is only for new pass manager.\n    if (A->getOption().getID() == OPT_ftime_report_EQ) {\n      // ...\n      if (Val == \"per-pass\")\n      // ...\n      else if (Val == \"per-pass-run\")\n      // ...\n      else\n        Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[40]={u,1770,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_flto_EQ)) {\n    // ...\n    if (S == \"thin\")\n    // ...\n    else if (S != \"full\")\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << S;"},
			[41]={u,1802,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Opts.CoverageNotesFile.size() || Opts.CoverageDataFile.size()) {\n    if (Args.hasArg(OPT_coverage_version_EQ)) {\n      // ...\n      if (CoverageVersion.size() != 4) {\n        Diags.Report(diag::err_drv_invalid_value) << Args.getLastArg(OPT_coverage_version_EQ)->getAsString(Args) << CoverageVersion;"},
			[42]={u,1850,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (const Arg *A = Args.getLastArg(OPT_fcf_protection_EQ)) {\n    // ...\n    if (Name == \"full\") {\n    // ...\n    } else if (Name == \"return\")\n    // ...\n    else if (Name == \"branch\")\n    // ...\n    else if (Name != \"none\")\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Name;"},
			[43]={u,1863,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (const Arg *A = Args.getLastArg(OPT_mfunction_return_EQ)) {\n    // ...\n    // SystemZ might want to add support for \"expolines.\"\n    if (!T.isX86())\n    // ...\n    else if (Val == llvm::FunctionReturnThunksKind::Invalid)\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[44]={u,1901,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_fdenormal_fp_math_EQ)) {\n    // ...\n    if (!Opts.FPDenormalMode.isValid())\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Val;"},
			[45]={u,1908,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_fdenormal_fp_math_f32_EQ)) {\n    // ...\n    if (!Opts.FP32DenormalMode.isValid())\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Val;"},
			[46]={u,2216,"static bool checkVerifyPrefixes(const std::vector<std::string> &VerifyPrefixes, DiagnosticsEngine &Diags) {\n  // ...\n  for (const auto &Prefix : VerifyPrefixes) {\n    // ...\n    if (BadChar != Prefix.end() || !isLetter(Prefix[0])) {\n      // ...\n      Diags.Report(diag::err_drv_invalid_value) << \"-verify=\" << Prefix;"},
			[47]={u,2709,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (const Arg *A = Args.getLastArg(OPT_Action_Group)) {\n    // ...\n    if (ProgramAction == frontend::ASTDump && (Opt == OPT_ast_dump_all_EQ || Opt == OPT_ast_dump_EQ)) {\n      // ...\n      if (Val != std::numeric_limits<unsigned>::max())\n      // ...\n      else {\n        Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[48]={u,2729,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (const Arg *A = Args.getLastArg(OPT_Action_Group)) {\n    // ...\n    if (ProgramAction == frontend::GenerateInterfaceStubs) {\n      // ...\n      if (ArgStr == \"experimental-yaml-elf-v1\" || ArgStr == \"experimental-ifs-v1\" || ArgStr == \"experimental-ifs-v2\" || ArgStr == \"experimental-tapi-elf-v1\") {\n        // ...\n        Diags.Report(diag::err_drv_invalid_value) << \"Must specify a valid interface stub format type, ie: \""},
			[49]={u,2737,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (const Arg *A = Args.getLastArg(OPT_Action_Group)) {\n    // ...\n    if (ProgramAction == frontend::GenerateInterfaceStubs) {\n      // ...\n      if (ArgStr == \"experimental-yaml-elf-v1\" || ArgStr == \"experimental-ifs-v1\" || ArgStr == \"experimental-ifs-v2\" || ArgStr == \"experimental-tapi-elf-v1\") {\n      // ...\n      } else if (!ArgStr.startswith(\"ifs-\")) {\n        // ...\n        Diags.Report(diag::err_drv_invalid_value) << \"Must specify a valid interface stub format type, ie: \""},
			[50]={u,2780,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (const Arg *A = Args.getLastArg(OPT_code_completion_at)) {\n    // ...\n    if (Opts.CodeCompletionAt.FileName.empty())\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[51]={u,2875,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (const Arg *A = Args.getLastArg(OPT_x)) {\n    // ...\n    if (DashX.isUnknown())\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[52]={u,3559,"bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, const llvm::Triple &T, std::vector<std::string> &Includes, DiagnosticsEngine &Diags) {\n  // ...\n  if (const Arg *A = Args.getLastArg(OPT_std_EQ)) {\n    // ...\n    if (LangStd == LangStandard::lang_unspecified) {\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[53]={u,3612,"#include \"clang/Basic/LangStandards.def\"\n  // ...\n  // -cl-std only applies for OpenCL language standards.\n  // Override the -std option in this case.\n  if (const Arg *A = Args.getLastArg(OPT_cl_std_EQ)) {\n    // ...\n    if (OpenCLLangStd == LangStandard::lang_unspecified) {\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[54]={u,3707,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_fgnuc_version_EQ)) {\n    // ...\n    if (Invalid || GNUCVer.getBuild() || Minor >= 100 || Patch >= 100) {\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[55]={u,3729,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (const Arg *A = Args.getLastArg(OPT_fms_compatibility_version)) {\n    // ...\n    if (VT.tryParse(A->getValue()))\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[56]={u,3932,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_ffp_contract)) {\n    // ...\n    if (Val == \"fast\")\n    // ...\n    else if (Val == \"on\")\n    // ...\n    else if (Val == \"off\")\n    // ...\n    else if (Val == \"fast-honor-pragmas\")\n    // ...\n    else\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Val;"},
			[57]={u,3981,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_fclang_abi_compat_EQ)) {\n    // ...\n    // Check the version number is valid: either 3.x (0 <= x <= 9) or\n    // y or y.0 (4 <= y <= current version).\n    if (!VerParts.first.startswith(\"0\") && !VerParts.first.getAsInteger(10, Major) && 3 <= Major && Major <= CLANG_VERSION_MAJOR && (Major == 3 ? VerParts.second.size() == 1 && !VerParts.second.getAsInteger(10, Minor) : VerParts.first.size() == Ver.size() || VerParts.second == \"0\")) {\n    // ...\n    } else if (Ver != \"latest\") {\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[58]={u,3999,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_msign_return_address_EQ)) {\n    // ...\n    if (SignScope.equals_insensitive(\"none\"))\n    // ...\n    else if (SignScope.equals_insensitive(\"all\"))\n    // ...\n    else if (SignScope.equals_insensitive(\"non-leaf\"))\n    // ...\n    else\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << SignScope;"},
			[59]={u,4012,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_msign_return_address_EQ)) {\n    // ...\n    if (Arg *A = Args.getLastArg(OPT_msign_return_address_key_EQ)) {\n      // ...\n      if (!SignScope.empty() && !SignKey.empty()) {\n        if (SignKey.equals_insensitive(\"a_key\"))\n        // ...\n        else if (SignKey.equals_insensitive(\"b_key\"))\n        // ...\n        else\n          Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << SignKey;"},
			[60]={u,4360,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_target_sdk_version_EQ)) {\n    // ...\n    if (Version.tryParse(A->getValue()))\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[61]={u,4369,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_darwin_target_variant_sdk_version_EQ)) {\n    // ...\n    if (Version.tryParse(A->getValue()))\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[62]={"clang/tools/driver/cc1as_main.cpp",241,"bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts, ArrayRef<const char *> Argv, DiagnosticsEngine &Diags) {\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_darwin_target_variant_sdk_version_EQ)) {\n    // ...\n    if (Version.tryParse(A->getValue()))\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << A->getValue();"},
			[63]={"clang/tools/driver/cc1as_main.cpp",313,"bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts, ArrayRef<const char *> Argv, DiagnosticsEngine &Diags) {\n  // ...\n  if (Arg *A = Args.getLastArg(OPT_filetype)) {\n    // ...\n    if (OutputType == ~0U) {\n      Diags.Report(diag::err_drv_invalid_value) << A->getAsString(Args) << Name;"}
		}
	},
	["err_drv_invalid_value_with_suggestion"]={
		[i]={{nil,w,"err_drv_invalid_value_with_suggestion"}},
		[b]={{nil,t,"invalid value \'%1\' in \'%0\', expected one of: %2"},{w,w,"invalid value \'%1\' in \'%0\',\'%2\'"}},
		[c]={{nil,t,"invalid value \'B\' in \'A\', expected one of: C"},{w,w,"invalid value \'B\' in \'A\',\'C\'"}},
		[e]=d,
		[f]="invalid value \'(.*?)\' in \'(.*?)\', expected one of\\: (.*?)",
		[g]=a,
		[h]={{nil,w,n}},
		[j]={ab,1585492323,Z,bb},
		[k]={{E,721,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  if (AllAddedKinds & SanitizerKind::MemTag) {\n    // ...\n    if (S == \"async\" || S == \"sync\") {\n    // ...\n    } else {\n      D.Diag(clang::diag::err_drv_invalid_value_with_suggestion) << \"-fsanitize-memtag-mode=\" << S << \"{async, sync}\";"},{q,3384,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_EQ)) {\n    // ...\n    if ((EffectiveTriple.isX86() || EffectiveTriple.isARM() || EffectiveTriple.isThumb()) && Value != \"tls\" && Value != \"global\") {\n      D.Diag(diag::err_drv_invalid_value_with_suggestion) << A->getOption().getName() << Value << \"tls global\";"},{q,3414,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_EQ)) {\n    // ...\n    if (EffectiveTriple.isAArch64() && Value != \"sysreg\" && Value != \"global\") {\n      D.Diag(diag::err_drv_invalid_value_with_suggestion) << A->getOption().getName() << Value << \"sysreg global\";"},{q,3447,"static void RenderSSPOptions(const Driver &D, const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs, bool KernelOrKext) {\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mstack_protector_guard_reg_EQ)) {\n    // ...\n    if (EffectiveTriple.isX86() && (Value != \"fs\" && Value != \"gs\")) {\n      D.Diag(diag::err_drv_invalid_value_with_suggestion) << A->getOption().getName() << Value << \"fs gs\";"}}
	},
	["err_drv_invalid_version_number"]={
		[i]="err_drv_invalid_version_number",
		[b]="invalid version number in \'%0\'",
		[c]="invalid version number in \'A\'",
		[e]=d,
		[f]="invalid version number in \'(.*?)\'",
		[g]=a,
		[h]=n,
		[j]={"c196421fbcfe",1238084592,"Driver: Add darwin::Link tool.","Driver: Add darwin::Link tool.\n - <rdar://problem/6717381> [driver] implement ld argument translation\n   in new driver\n\nllvm-svn: 67760"},
		[k]={{G,1068,"#endif\n  // ...\n  if (Arg *A = Args.getLastArg(options::OPT_mlinker_version_EQ))\n    if (NewLinkerVersion.tryParse(A->getValue()))\n      getDriver().Diag(diag::err_drv_invalid_version_number) << A->getAsString(Args);"},{G,2113,"/// Returns the deployment target that\'s specified using the -mtargetos option.\nstd::optional<DarwinPlatform> getDeploymentTargetFromMTargetOSArg(DerivedArgList &Args, const Driver &TheDriver, const std::optional<DarwinSDKInfo> &SDKInfo) {\n  // ...\n  if (!Version.getMajor()) {\n    TheDriver.Diag(diag::err_drv_invalid_version_number) << A->getAsString(Args);"},{G,2266,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  // Set the tool chain target information.\n  if (Platform == MacOS) {\n    if (!Driver::GetReleaseVersion(OSTarget->getOSVersion(), Major, Minor, Micro, HadExtra) || HadExtra || Major < 10 || Major >= MajorVersionLimit || Minor >= 100 || Micro >= 100)\n      getDriver().Diag(diag::err_drv_invalid_version_number) << OSTarget->getAsString(Args, Opts);"},{G,2272,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  // Set the tool chain target information.\n  if (Platform == MacOS) {\n  // ...\n  } else if (Platform == IPhoneOS) {\n    if (!Driver::GetReleaseVersion(OSTarget->getOSVersion(), Major, Minor, Micro, HadExtra) || HadExtra || Major >= MajorVersionLimit || Minor >= 100 || Micro >= 100)\n      getDriver().Diag(diag::err_drv_invalid_version_number) << OSTarget->getAsString(Args, Opts);"},{G,2277,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  // Set the tool chain target information.\n  if (Platform == MacOS) {\n  // ...\n  } else if (Platform == IPhoneOS) {\n    // ...\n    if (OSTarget->getEnvironment() == MacCatalyst && (Major < 13 || (Major == 13 && Minor < 1))) {\n      getDriver().Diag(diag::err_drv_invalid_version_number) << OSTarget->getAsString(Args, Opts);"},{G,2304,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  // Set the tool chain target information.\n  if (Platform == MacOS) {\n  // ...\n  } else if (Platform == IPhoneOS) {\n  // ...\n  } else if (Platform == TvOS) {\n    if (!Driver::GetReleaseVersion(OSTarget->getOSVersion(), Major, Minor, Micro, HadExtra) || HadExtra || Major >= MajorVersionLimit || Minor >= 100 || Micro >= 100)\n      getDriver().Diag(diag::err_drv_invalid_version_number) << OSTarget->getAsString(Args, Opts);"},{G,2310,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  // Set the tool chain target information.\n  if (Platform == MacOS) {\n  // ...\n  } else if (Platform == IPhoneOS) {\n  // ...\n  } else if (Platform == TvOS) {\n  // ...\n  } else if (Platform == WatchOS) {\n    if (!Driver::GetReleaseVersion(OSTarget->getOSVersion(), Major, Minor, Micro, HadExtra) || HadExtra || Major >= MajorVersionLimit || Minor >= 100 || Micro >= 100)\n      getDriver().Diag(diag::err_drv_invalid_version_number) << OSTarget->getAsString(Args, Opts);"},{G,2317,"void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {\n  // ...\n  // Set the tool chain target information.\n  if (Platform == MacOS) {\n  // ...\n  } else if (Platform == IPhoneOS) {\n  // ...\n  } else if (Platform == TvOS) {\n  // ...\n  } else if (Platform == WatchOS) {\n  // ...\n  } else if (Platform == DriverKit) {\n    if (!Driver::GetReleaseVersion(OSTarget->getOSVersion(), Major, Minor, Micro, HadExtra) || HadExtra || Major < 19 || Major >= MajorVersionLimit || Minor >= 100 || Micro >= 100)\n      getDriver().Diag(diag::err_drv_invalid_version_number) << OSTarget->getAsString(Args, Opts);"}}
	},
	["err_drv_loongarch_invalid_mfpu_EQ"]={
		[i]={{nil,D,"err_drv_loongarch_invalid_mfpu_EQ"}},
		[b]={{nil,D,"invalid argument \'%0\' to -mfpu=; must be one of: 64, 32, none, 0 (alias for none)"}},
		[c]={{nil,D,"invalid argument \'A\' to -mfpu=; must be one of: 64, 32, none, 0 (alias for none)"}},
		[e]=d,
		[f]="invalid argument \'(.*?)\' to \\-mfpu\\=; must be one of\\: 64, 32, none, 0 \\(alias for none\\)",
		[g]=a,
		[h]={{nil,D,n}},
		[j]={"1f67dc8b7c22",1666243490,"[Driver] Enable nested configuration files","[Driver] Enable nested configuration files\n\nUsers may partition parameters specified by configuration file and put\ndifferent groups into separate files. These files are inserted into the\nmain file using constructs `@file`. Relative file names in it are\nresolved relative to the including configuration file and this is not\nconvenient in some cases. A configuration file, which resides in system\ndirectory, may need to include a file with user-defined parameters and\nstill provide default definitions if such file is absent.\n\nTo solve such problems, the option `--config=` is allowed inside\nconfiguration files. Like `@file` it results in insertion of\ncommand-line arguments but the algorithm of file search is different and\nallows overriding system definitions with user ones.\n\nDifferential Revision: https://reviews.llvm.org/D136354"},
		[k]={{"clang/lib/Driver/ToolChains/Arch/LoongArch.cpp",50,"StringRef loongarch::getLoongArchABI(const Driver &D, const ArgList &Args, const llvm::Triple &Triple) {\n  // ...\n  if (MFPUArg) {\n    // ...\n    if (V == \"64\")\n    // ...\n    else if (V == \"32\")\n    // ...\n    else if (V == \"0\" || V == \"none\")\n    // ...\n    else\n      D.Diag(diag::err_drv_loongarch_invalid_mfpu_EQ) << V;"},{"clang/lib/Driver/ToolChains/Arch/LoongArch.cpp",165,"void loongarch::getLoongArchTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<StringRef> &Features) {\n  // ...\n  // Select floating-point features determined by -mdouble-float,\n  // -msingle-float, -msoft-float and -mfpu.\n  // Note: -m*-float wins any other options.\n  if (const Arg *A = Args.getLastArg(options::OPT_mdouble_float, options::OPT_msingle_float, options::OPT_msoft_float)) {\n  // ...\n  } else if (const Arg *A = Args.getLastArg(options::OPT_mfpu_EQ)) {\n    // ...\n    if (FPU == \"64\") {\n    // ...\n    } else if (FPU == \"32\") {\n    // ...\n    } else if (FPU == \"0\" || FPU == \"none\") {\n    // ...\n    } else {\n      D.Diag(diag::err_drv_loongarch_invalid_mfpu_EQ) << FPU;"}}
	},
	["err_drv_lto_without_lld"]={
		[i]={{nil,p,"err_drv_lto_without_lld"}},
		[b]={{nil,p,"LTO requires -fuse-ld=lld"}},
		[c]={{nil,p,"LTO requires -fuse-ld=lld"}},
		[e]=d,
		[f]="LTO requires \\-fuse\\-ld\\=lld",
		[g]=a,
		[h]={{nil,p,n}},
		[j]={"aaf519136482",1488224419,"enable -flto=thin in clang-cl","enable -flto=thin in clang-cl\n\nSummary: This enables LTO to be used with the clang-cl frontend.\n\nReviewers: rnk, hans\n\nReviewed By: hans\n\nSubscribers: pcc, cfe-commits, mehdi_amini, Prazek\n\nDifferential Revision: https://reviews.llvm.org/D30239\n\nllvm-svn: 296373"},
		[k]={{x,3963,"void Driver::handleArguments(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  if (FinalPhase == phases::Link) {\n    // ...\n    if (IsCLMode() && LTOMode != LTOK_None && !Args.getLastArgValue(options::OPT_fuse_ld_EQ).equals_insensitive(\"lld\"))\n      Diag(clang::diag::err_drv_lto_without_lld);"}}
	},
	["err_drv_malformed_sanitizer_coverage_allowlist"]={
		[i]={{nil,o,"err_drv_malformed_sanitizer_coverage_allowlist"}},
		[b]={{nil,o,"malformed sanitizer coverage allowlist: \'%0\'"}},
		[c]={{nil,o,"malformed sanitizer coverage allowlist: \'A\'"}},
		[e]=d,
		[f]="malformed sanitizer coverage allowlist\\: \'(.*?)\'",
		[g]=a,
		[h]={{nil,o,n}},
		[j]={N,1610286626,J,L},
		[k]={{E,875,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Parse -fsanitize-coverage-(allow|ignore)list options if coverage enabled.\n  // This also validates special case lists format.\n  // Here, OptSpecifier() acts as a never-matching command-line argument.\n  // So, there is no way to clear coverage lists but you can append to them.\n  if (CoverageFeatures) {\n    parseSpecialCaseListArg(D, Args, CoverageAllowlistFiles, options::OPT_fsanitize_coverage_allowlist, OptSpecifier(), clang::diag::err_drv_malformed_sanitizer_coverage_allowlist, DiagnoseErrors);"}}
	},
	["err_drv_malformed_sanitizer_coverage_ignorelist"]={
		[i]={{nil,t,"err_drv_malformed_sanitizer_coverage_ignorelist"}},
		[b]={{nil,t,"malformed sanitizer coverage ignorelist: \'%0\'"}},
		[c]={{nil,t,"malformed sanitizer coverage ignorelist: \'A\'"}},
		[e]=d,
		[f]="malformed sanitizer coverage ignorelist\\: \'(.*?)\'",
		[g]=a,
		[h]={{nil,t,n}},
		[j]={N,1610286626,J,L},
		[k]={{E,880,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Parse -fsanitize-coverage-(allow|ignore)list options if coverage enabled.\n  // This also validates special case lists format.\n  // Here, OptSpecifier() acts as a never-matching command-line argument.\n  // So, there is no way to clear coverage lists but you can append to them.\n  if (CoverageFeatures) {\n    // ...\n    parseSpecialCaseListArg(D, Args, CoverageIgnorelistFiles, options::OPT_fsanitize_coverage_ignorelist, OptSpecifier(), clang::diag::err_drv_malformed_sanitizer_coverage_ignorelist, DiagnoseErrors);"}}
	},
	["err_drv_malformed_sanitizer_ignorelist"]={
		[i]={{nil,t,"err_drv_malformed_sanitizer_ignorelist"}},
		[b]={{nil,t,"malformed sanitizer ignorelist: \'%0\'"}},
		[c]={{nil,t,"malformed sanitizer ignorelist: \'A\'"}},
		[e]=d,
		[f]="malformed sanitizer ignorelist\\: \'(.*?)\'",
		[g]=a,
		[h]={{nil,t,n}},
		[j]={N,1610286626,J,L},
		[k]={{E,203,"static void addDefaultIgnorelists(const Driver &D, SanitizerMask Kinds, std::vector<std::string> &IgnorelistFiles, bool DiagnoseErrors) {\n  // ...\n  validateSpecialCaseListFormat(D, IgnorelistFiles, clang::diag::err_drv_malformed_sanitizer_ignorelist, DiagnoseErrors);"},{E,679,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  parseSpecialCaseListArg(D, Args, UserIgnorelistFiles, options::OPT_fsanitize_ignorelist_EQ, options::OPT_fno_sanitize_ignorelist, clang::diag::err_drv_malformed_sanitizer_ignorelist, DiagnoseErrors);"}}
	},
	["err_drv_malformed_sanitizer_metadata_ignorelist"]={
		[i]="err_drv_malformed_sanitizer_metadata_ignorelist",
		[b]="malformed sanitizer metadata ignorelist: \'%0\'",
		[c]="malformed sanitizer metadata ignorelist: \'A\'",
		[e]=d,
		[f]="malformed sanitizer metadata ignorelist\\: \'(.*?)\'",
		[g]=a,
		[h]=n,
		[j]={"421215b919d0",1676018048,"[SanitizerBinaryMetadata] Support ignore list","[SanitizerBinaryMetadata] Support ignore list\n\nFor large projects it will be required to opt out entire subdirectories.\nIn the absence of fine-grained control over the flags passed via the\nbuild system, introduce -fexperimental-sanitize-metadata-ignorelist=.\n\nThe format is identical to other sanitizer ignore lists, and its effect\nwill be to simply not instrument either functions or entire modules\nbased on the rules in the ignore list file.\n\nReviewed By: dvyukov\n\nDifferential Revision: https://reviews.llvm.org/D143664"},
		[k]={{E,906,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  // ...\n  // Parse -fsanitize-metadata-ignorelist option if enabled.\n  if (BinaryMetadataFeatures) {\n    parseSpecialCaseListArg(D, Args, BinaryMetadataIgnorelistFiles, options::OPT_fexperimental_sanitize_metadata_ignorelist_EQ,\n                            // ...\n                            clang::diag::err_drv_malformed_sanitizer_metadata_ignorelist, DiagnoseErrors);"}}
	},
	["err_drv_mg_requires_m_or_mm"]={
		[i]="err_drv_mg_requires_m_or_mm",
		[b]="option \'-MG\' requires \'-M\' or \'-MM\'",
		[c]="option \'-MG\' requires \'-M\' or \'-MM\'",
		[e]=d,
		[f]="option \'\\-MG\' requires \'\\-M\' or \'\\-MM\'",
		[g]=a,
		[h]=n,
		[j]={"77b0e7f2969a",1310499315,"Implement -MG.  Fixes PR9613","Implement -MG.  Fixes PR9613\n\nllvm-svn: 134996"},
		[k]={{q,1165,"void Clang::AddPreprocessingOptions(Compilation &C, const JobAction &JA, const Driver &D, const ArgList &Args, ArgStringList &CmdArgs, const InputInfo &Output, const InputInfoList &Inputs) const {\n  // ...\n  if (Args.hasArg(options::OPT_MG)) {\n    if (!ArgM || ArgM->getOption().matches(options::OPT_MD) || ArgM->getOption().matches(options::OPT_MMD))\n      D.Diag(diag::err_drv_mg_requires_m_or_mm);"}}
	},
	["err_drv_minws_unsupported_input_type"]={
		[i]={{nil,o,"err_drv_minws_unsupported_input_type"}},
		[b]={{nil,o,"\'-fminimize-whitespace\' invalid for input of type %0"}},
		[c]={{nil,o,"\'-fminimize-whitespace\' invalid for input of type A"}},
		[e]=d,
		[f]="\'\\-fminimize\\-whitespace\' invalid for input of type (.*?)",
		[g]=a,
		[h]={{nil,o,n}},
		[j]={N,1610286626,J,L},
		[k]={{q,6679,"#endif\n  // ...\n  // -fno-minimize-whitespace is default.\n  if (Args.hasFlag(options::OPT_fminimize_whitespace, options::OPT_fno_minimize_whitespace, false)) {\n    // ...\n    if (!isDerivedFromC(InputType))\n      D.Diag(diag::err_drv_minws_unsupported_input_type) << types::getTypeName(InputType);"}}
	},
	["err_drv_missing_arg_mtp"]={
		[i]={{nil,y,"err_drv_missing_arg_mtp"}},
		[b]={{nil,y,"missing argument to \'%0\'"}},
		[c]={{nil,y,"missing argument to \'A\'"}},
		[e]=d,
		[f]="missing argument to \'(.*?)\'",
		[g]=a,
		[h]={{nil,y,n}},
		[j]={"3ac5ab7e1da1",1505212858,"[ARM] Option for reading thread pointer from coprocessor register","[ARM] Option for reading thread pointer from coprocessor register\n\nThis patch enables option for reading thread pointer directly\nfrom coprocessor register (-mtp=soft/cp15).\n\nDifferential Revision: https://reviews.llvm.org/D34878\n\nllvm-svn: 313018"},
		[k]={{sb,218,"// Select mode for reading thread pointer (-mtp=soft/cp15).\narm::ReadTPMode arm::getReadTPMode(const Driver &D, const ArgList &Args, const llvm::Triple &Triple, bool ForAS) {\n  if (Arg *A = Args.getLastArg(options::OPT_mtp_mode_EQ)) {\n    // ...\n    if (StringRef(A->getValue()).empty())\n      D.Diag(diag::err_drv_missing_arg_mtp) << A->getAsString(Args);"}}
	},
	["err_drv_missing_argument"]={
		[i]="err_drv_missing_argument",
		[b]="argument to \'%0\' is missing (expected %1 value%s1)",
		[c]="argument to \'A\' is missing (expected B valueB)",
		[e]=d,
		[f]="argument to \'(.*?)\' is missing \\(expected (.*?) value(.*?)\\)",
		[g]=a,
		[h]=n,
		[j]={"d8500f3b0f54",1237764403,"Driver: Implement \'missing argument\' error.","Driver: Implement \'missing argument\' error.\n\nllvm-svn: 67490"},
		[k]={{x,280,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // ...\n  // Check for missing argument error.\n  if (MissingArgCount) {\n    Diag(diag::err_drv_missing_argument) << Args.getArgString(MissingArgIndex) << MissingArgCount;"},{x,283,"InputArgList Driver::ParseArgStrings(ArrayRef<const char *> ArgStrings, bool IsClCompatMode, bool &ContainsError) {\n  // ...\n  // Check for missing argument error.\n  if (MissingArgCount) {\n    // ...\n    ContainsError |= Diags.getDiagnosticLevel(diag::err_drv_missing_argument, SourceLocation()) > DiagnosticsEngine::Warning;"},{x,4103,"void Driver::BuildActions(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  // Diagnose misuse of /o.\n  if (Arg *A = Args.getLastArg(options::OPT__SLASH_o)) {\n    if (A->getValue()[0] == \'\\0\') {\n      // ...\n      Diag(clang::diag::err_drv_missing_argument) << A->getSpelling() << 1;"},{u,4393,"bool CompilerInvocation::CreateFromArgsImpl(CompilerInvocation &Res, ArrayRef<const char *> CommandLineArgs, DiagnosticsEngine &Diags, const char *Argv0) {\n  // ...\n  // Check for missing argument error.\n  if (MissingArgCount)\n    Diags.Report(diag::err_drv_missing_argument) << Args.getArgString(MissingArgIndex) << MissingArgCount;"},{"clang/tools/driver/cc1as_main.cpp",215,"bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts, ArrayRef<const char *> Argv, DiagnosticsEngine &Diags) {\n  // ...\n  // Check for missing argument error.\n  if (MissingArgCount) {\n    Diags.Report(diag::err_drv_missing_argument) << Args.getArgString(MissingArgIndex) << MissingArgCount;"}}
	},
	["err_drv_missing_sanitizer_ignorelist"]={
		[i]={{nil,s,"err_drv_missing_sanitizer_ignorelist"}},
		[b]={{nil,s,"missing sanitizer ignorelist: \'%0\'"}},
		[c]={{nil,s,"missing sanitizer ignorelist: \'A\'"}},
		[e]=d,
		[f]="missing sanitizer ignorelist\\: \'(.*?)\'",
		[g]=a,
		[h]={{nil,s,n}},
		[j]={"aef03c9b3bed",1651866463,"[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clan...","[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang\n\nGCC 12 has been released and contains unconditional support for\n-ftrivial-auto-var-init=zero:\nhttps://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-ftrivial-auto-var-init\n\nMaintain compatibility with GCC, and remove the -enable flag for \"zero\"\nmode. The flag is left to generate an \"unused\" warning, though, to not\nbreak all the existing users. The flag will be fully removed in Clang 17.\n\nLink: https://github.com/llvm/llvm-project/issues/44842\n\nReviewed By: nickdesaulniers, MaskRay, srhines, xbolva00\n\nDifferential Revision: https://reviews.llvm.org/D125142"},
		[k]={{E,200,"static void addDefaultIgnorelists(const Driver &D, SanitizerMask Kinds, std::vector<std::string> &IgnorelistFiles, bool DiagnoseErrors) {\n  // ...\n  for (auto BL : Ignorelists) {\n    // ...\n    if (D.getVFS().exists(Path))\n    // ...\n    else if (BL.Mask == SanitizerKind::CFI && DiagnoseErrors)\n      // ...\n      D.Diag(clang::diag::err_drv_missing_sanitizer_ignorelist) << Path;"}}
	},
	["err_drv_mix_cuda_hip"]={
		[i]={{nil,B,"err_drv_mix_cuda_hip"}},
		[b]={{nil,o,"mixed CUDA and HIP compilation is not supported"},{t,B,"Mixed Cuda and HIP compilation is not supported."}},
		[c]={{nil,o,"mixed CUDA and HIP compilation is not supported"},{t,B,"Mixed Cuda and HIP compilation is not supported."}},
		[e]=d,
		[f]="mixed CUDA and HIP compilation is not supported",
		[g]=a,
		[h]={{nil,B,n}},
		[j]={"f5a6b96c0fc9",1526066499,"[HIP] Set proper triple and offload kind for the toolchain","[HIP] Set proper triple and offload kind for the toolchain\n\nAlso introduce --hip-link option to indicate HIP for linking.\n\nDifferential Revision: https://reviews.llvm.org/D46475\n\nllvm-svn: 332123"},
		[k]={{x,797,"void Driver::CreateOffloadingDeviceToolChains(Compilation &C, InputList &Inputs) {\n  // ...\n  if (IsCuda && IsHIP) {\n    Diag(clang::diag::err_drv_mix_cuda_hip);"}}
	},
	["err_drv_module_header_wrong_kind"]={
		[i]={{nil,C,"err_drv_module_header_wrong_kind"}},
		[b]={{nil,C,"header file \'%0\' input type \'%1\' does not match type of prior input in module compilation; use \'-x %2\' to override"}},
		[c]={{nil,C,"header file \'A\' input type \'B\' does not match type of prior input in module compilation; use \'-x C\' to override"}},
		[e]=d,
		[f]="header file \'(.*?)\' input type \'(.*?)\' does not match type of prior input in module compilation; use \'\\-x (.*?)\' to override",
		[g]=a,
		[h]={{nil,C,n}},
		[j]={U,1534346725,T,W}
	},
	["err_drv_module_output_with_multiple_arch"]={
		[i]={{nil,D,"err_drv_module_output_with_multiple_arch"}},
		[b]={{nil,D,"option \'-fmodule-output\' can\'t be used with multiple arch options"}},
		[c]={{nil,D,"option \'-fmodule-output\' can\'t be used with multiple arch options"}},
		[e]=d,
		[f]="option \'\\-fmodule\\-output\' can\'t be used with multiple arch options",
		[g]=a,
		[h]={{nil,D,n}},
		[j]={"f89327e28bc1",1672206488,"[Driver] [Modules] Support -fmodule-output (1/2)","[Driver] [Modules] Support -fmodule-output (1/2)\n\nPatches to support the one-phase compilation model for modules.\n\nThe behavior:\n(1) If -o and -c is specified , the module file is in the same path\nwithin the same directory as the output the -o specified and with a new\nsuffix .pcm.\n(2) Otherwise, the module file is in the same path within the working\ndirectory directory with the name of the input file with a new suffix\n.pcm\n\nFor example,\n\n```\nHello.cppm Use.cpp\n```\n\nA trivial one and the contents are ignored. When we run:\n\n```\nclang++ -std=c++20 -fmodule-output Hello.cppm -c\n```\n\nThe directory would look like:\n\n```\nHello.cppm  Hello.o  Hello.pcm Use.cpp\n```\n\nAnd if we run:\n\n```\nclang++ -std=c++20 -fmodule-output Hello.cppm -c -o output/Hello.o\n```\n\nThen the `output` directory may look like:\n\n```\nHello.o  Hello.pcm\n```\n\nReviewed By: dblaikie, iains, tahonermann\n\nDifferential Revision: https://reviews.llvm.org/D137058"},
		[k]={{x,5829,"const char *Driver::GetNamedOutputPath(Compilation &C, const JobAction &JA, const char *BaseInput, StringRef OrigBoundArch, bool AtTopLevel, bool MultipleArchs, StringRef OffloadingPrefix) const {\n  // ...\n  if (MultipleArchs && SpecifiedModuleOutput)\n    Diag(clang::diag::err_drv_module_output_with_multiple_arch);"}}
	},
	["err_drv_modules_validate_once_requires_timestamp"]={
		[i]="err_drv_modules_validate_once_requires_timestamp",
		[b]="option \'-fmodules-validate-once-per-build-session\' requires \'-fbuild-session-timestamp=<seconds since Epoch>\' or \'-fbuild-session-file=<file>\'",
		[c]="option \'-fmodules-validate-once-per-build-session\' requires \'-fbuild-session-timestamp=<seconds since Epoch>\' or \'-fbuild-session-file=<file>\'",
		[e]=d,
		[f]="option \'\\-fmodules\\-validate\\-once\\-per\\-build\\-session\' requires \'\\-fbuild\\-session\\-timestamp\\=\\<seconds since Epoch\\>\' or \'\\-fbuild\\-session\\-file\\=\\<file\\>\'",
		[g]=a,
		[h]=n,
		[j]={"f430da4de68b",1392201194,"Add an option to allow Clang verify source files for a module only once during","Add an option to allow Clang verify source files for a module only once during\nthe build\n\nWhen Clang loads the module, it verifies the user source files that the module\nwas built from.  If any file was changed, the module is rebuilt.  There are two\nproblems with this:\n1. correctness: we don\'t verify system files (there are too many of them, and\n   stat\'ing all of them would take a lot of time);\n2. performance: the same module file is verified again and again during a\n   single build.\n\nThis change allows the build system to optimize source file verification.  The\nidea is based on the fact that while the project is being built, the source\nfiles don\'t change.  This allows us to verify the module only once during a\nsingle build session.  The build system passes a flag,\n-fbuild-session-timestamp=, to inform Clang of the time when the build started.\nThe build system also requests to enable this feature by passing\n-fmodules-validate-once-per-build-session.  If these flags are not passed, the\nbehavior is not changed.  When Clang verifies the module the first time, it\nwrites out a timestamp file.  Then, when Clang loads the module the second\ntime, it finds a timestamp file, so it can compare the verification timestamp\nof the module with the time when the build started.  If the verification\ntimestamp is too old, the module is verified again, and the timestamp file is\nupdated.\n\nllvm-svn: 201224"},
		[k]={{q,3891,"static bool RenderModulesOptions(Compilation &C, const Driver &D, const ArgList &Args, const InputInfo &Input, const InputInfo &Output, const Arg *Std, ArgStringList &CmdArgs) {\n  // ...\n  if (HaveClangModules) {\n    // ...\n    if (Args.getLastArg(options::OPT_fmodules_validate_once_per_build_session)) {\n      if (!Args.getLastArg(options::OPT_fbuild_session_timestamp, options::OPT_fbuild_session_file))\n        D.Diag(diag::err_drv_modules_validate_once_requires_timestamp);"}}
	},
	["err_drv_needs_hvx"]={
		[i]={{nil,o,"err_drv_needs_hvx"}},
		[b]={{nil,o,"%0 requires HVX, use -mhvx/-mhvx= to enable it"}},
		[c]={{nil,o,"A requires HVX, use -mhvx/-mhvx= to enable it"}},
		[e]=d,
		[f]="(.*?) requires HVX, use \\-mhvx\\/\\-mhvx\\= to enable it",
		[g]=a,
		[h]={{nil,o,n}},
		[j]={N,1610286626,J,L},
		[k]={{ub,108,"// Handle hvx target features explicitly.\nstatic void handleHVXTargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features, StringRef Cpu, bool &HasHVX) {\n  // ...\n  // Handle -mhvx-length=.\n  if (Arg *A = Args.getLastArg(options::OPT_mhexagon_hvx_length_EQ)) {\n    // These flags are valid only if HVX in enabled.\n    if (!HasHVX)\n      D.Diag(diag::err_drv_needs_hvx) << withMinus(A->getOption().getName());"},{ub,141,"// Handle hvx target features explicitly.\nstatic void handleHVXTargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features, StringRef Cpu, bool &HasHVX) {\n  // ...\n  // Handle HVX floating point flags.\n  auto checkFlagHvxVersion = [&](auto FlagOn, auto FlagOff, unsigned MinVerNum) -> std::optional<StringRef> {\n    // ...\n    if (!HasHVX) {\n      D.Diag(diag::err_drv_needs_hvx) << withMinus(OptName);"}}
	},
	["err_drv_needs_hvx_version"]={
		[i]={{nil,o,"err_drv_needs_hvx_version"}},
		[b]={{nil,o,"%0 is not supported on HVX %1"}},
		[c]={{nil,o,"A is not supported on HVX B"}},
		[e]=d,
		[f]="(.*?) is not supported on HVX (.*?)",
		[g]=a,
		[h]={{nil,o,n}},
		[j]={N,1610286626,J,L},
		[k]={{ub,145,"// Handle hvx target features explicitly.\nstatic void handleHVXTargetFeatures(const Driver &D, const ArgList &Args, std::vector<StringRef> &Features, StringRef Cpu, bool &HasHVX) {\n  // ...\n  // Handle HVX floating point flags.\n  auto checkFlagHvxVersion = [&](auto FlagOn, auto FlagOff, unsigned MinVerNum) -> std::optional<StringRef> {\n    // ...\n    if (HvxVerNum < MinVerNum) {\n      D.Diag(diag::err_drv_needs_hvx_version) << withMinus(OptName) << (\"v\" + std::to_string(HvxVerNum));"}}
	},
	["err_drv_negative_columns"]={
		[i]={{nil,t,"err_drv_negative_columns"}},
		[b]={{nil,t,"invalid value \'%1\' in \'%0\', value must be \'none\' or a positive integer"}},
		[c]={{nil,t,"invalid value \'B\' in \'A\', value must be \'none\' or a positive integer"}},
		[e]=d,
		[f]="invalid value \'(.*?)\' in \'(.*?)\', value must be \'none\' or a positive integer",
		[g]=a,
		[h]={{nil,t,n}},
		[j]={N,1610286626,J,L}
	},
	["err_drv_no_ast_support"]={
		[i]="err_drv_no_ast_support",
		[b]="\'%0\': unable to use AST files with this tool",
		[c]="\'A\': unable to use AST files with this tool",
		[e]=d,
		[f]="\'(.*?)\'\\: unable to use AST files with this tool",
		[g]=a,
		[h]=n,
		[j]={"6cdf83c19279",1251824266,"Add driver support for -emit-ast and AST compilation steps.","Add driver support for -emit-ast and AST compilation steps.\n - <rdar://problem/7185031> Add \'clang\' option \'-emit-ast\'\n\nllvm-svn: 80678"},
		[k]={{tb,145,"void tools::gcc::Common::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  // Only pass -x if gcc will understand it; otherwise hope gcc\n  // understands the suffix correctly. The main use case this would go\n  // wrong in is for linker inputs if they happened to have an odd\n  // suffix; really the only way to get this to happen is a command\n  // like \'-x foobar a.c\' which will treat a.c like a linker input.\n  //\n  // FIXME: For the linker case specifically, can we safely convert\n  // inputs into \'-Wl,\' options?\n  for (const auto &II : Inputs) {\n    // Don\'t try to pass LLVM or AST inputs to a generic gcc.\n    if (types::isLLVMIR(II.getType()))\n    // ...\n    else if (II.getType() == types::TY_AST)\n      D.Diag(diag::err_drv_no_ast_support) << getToolChain().getTripleString();"},{ub,256,"void hexagon::Assembler::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  // Only pass -x if gcc will understand it; otherwise hope gcc\n  // understands the suffix correctly. The main use case this would go\n  // wrong in is for linker inputs if they happened to have an odd\n  // suffix; really the only way to get this to happen is a command\n  // like \'-x foobar a.c\' which will treat a.c like a linker input.\n  //\n  // FIXME: For the linker case specifically, can we safely convert\n  // inputs into \'-Wl,\' options?\n  for (const auto &II : Inputs) {\n    // Don\'t try to pass LLVM or AST inputs to a generic gcc.\n    if (types::isLLVMIR(II.getType()))\n    // ...\n    else if (II.getType() == types::TY_AST)\n      D.Diag(clang::diag::err_drv_no_ast_support) << HTC.getTripleString();"}}
	},
	["err_drv_no_cuda_installation"]={
		[i]="err_drv_no_cuda_installation",
		[b]={{nil,o,"cannot find CUDA installation; provide its path via \'--cuda-path\', or pass \'-nocudainc\' to build without CUDA includes"},{t,A,"cannot find CUDA installation. Provide its path via --cuda-path, or pass -nocudainc to build without CUDA includes."},{v,nil,"cannot find CUDA installation.  Provide its path via --cuda-path, or pass -nocudainc to build without CUDA includes."}},
		[c]={{nil,o,"cannot find CUDA installation; provide its path via \'--cuda-path\', or pass \'-nocudainc\' to build without CUDA includes"},{t,A,"cannot find CUDA installation. Provide its path via --cuda-path, or pass -nocudainc to build without CUDA includes."},{v,nil,"cannot find CUDA installation.  Provide its path via --cuda-path, or pass -nocudainc to build without CUDA includes."}},
		[e]=d,
		[f]="cannot find CUDA installation; provide its path via \'\\-\\-cuda\\-path\', or pass \'\\-nocudainc\' to build without CUDA includes",
		[g]=a,
		[h]=n,
		[j]={"423019d05989",1460765471,"[CUDA] Raise an error if the CUDA install can\'t be found.","[CUDA] Raise an error if the CUDA install can\'t be found.\n\nSummary:\nWithout this change, we silently proceed on without including\n__clang_cuda_runtime_wrapper.h.  This leads to very strange behavior --\nyou say you\'re compiling CUDA code, but e.g. __device__ is not defined!\n\nReviewers: tra\n\nSubscribers: cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D19180\n\nllvm-svn: 266496"},
		[k]={{Zb,299,"void CudaInstallationDetector::AddCudaIncludeArgs(const ArgList &DriverArgs, ArgStringList &CC1Args) const {\n  // ...\n  if (!isValid()) {\n    D.Diag(diag::err_drv_no_cuda_installation);"}}
	},
	["err_drv_no_cuda_libdevice"]={
		[i]="err_drv_no_cuda_libdevice",
		[b]={{nil,o,"cannot find libdevice for %0; provide path to different CUDA installation via \'--cuda-path\', or pass \'-nocudalib\' to build without linking with libdevice"},{t,nil,"cannot find libdevice for %0. Provide path to different CUDA installation via --cuda-path, or pass -nocudalib to build without linking with libdevice."}},
		[c]={{nil,o,"cannot find libdevice for A; provide path to different CUDA installation via \'--cuda-path\', or pass \'-nocudalib\' to build without linking with libdevice"},{t,nil,"cannot find libdevice for A. Provide path to different CUDA installation via --cuda-path, or pass -nocudalib to build without linking with libdevice."}},
		[e]=d,
		[f]="cannot find libdevice for (.*?); provide path to different CUDA installation via \'\\-\\-cuda\\-path\', or pass \'\\-nocudalib\' to build without linking with libdevice",
		[g]=a,
		[h]=n,
		[j]={"02a1e973a80a",1470179571,"[CUDA] Fix libdevice selection.","[CUDA] Fix libdevice selection.\n\nThis makes clang\'s libdevice selection match that of NVCC as described in\nhttp://docs.nvidia.com/cuda/libdevice-users-guide/basic-usage.html#version-selection\n\nIf required libdevice variant is not found, driver now fails with an error.\n\nDifferential Revision: https://reviews.llvm.org/D23037\n\nllvm-svn: 277542"},
		[k]={{Zb,826,"void CudaToolChain::addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args, Action::OffloadKind DeviceOffloadingKind) const {\n  // ...\n  if (LibDeviceFile.empty()) {\n    getDriver().Diag(diag::err_drv_no_cuda_libdevice) << GpuArch;"}}
	},
	["err_drv_no_hip_runtime"]={
		[i]={{nil,A,"err_drv_no_hip_runtime"}},
		[b]={{nil,o,"cannot find HIP runtime; provide its path via \'--rocm-path\', or pass \'-nogpuinc\' to build without HIP runtime"},{t,A,"cannot find HIP runtime. Provide its path via --rocm-path, or pass -nogpuinc to build without HIP runtime."}},
		[c]={{nil,o,"cannot find HIP runtime; provide its path via \'--rocm-path\', or pass \'-nogpuinc\' to build without HIP runtime"},{t,A,"cannot find HIP runtime. Provide its path via --rocm-path, or pass -nogpuinc to build without HIP runtime."}},
		[e]=d,
		[f]="cannot find HIP runtime; provide its path via \'\\-\\-rocm\\-path\', or pass \'\\-nogpuinc\' to build without HIP runtime",
		[g]=a,
		[h]={{nil,A,n}},
		[j]={ab,1585492323,Z,bb},
		[k]={{yb,537,"void RocmInstallationDetector::AddHIPIncludeArgs(const ArgList &DriverArgs, ArgStringList &CC1Args) const {\n  // ...\n  if (!hasHIPRuntime()) {\n    D.Diag(diag::err_drv_no_hip_runtime);"}}
	},
	["err_drv_no_hipspv_device_lib"]={
		[i]={{nil,o,"err_drv_no_hipspv_device_lib"}},
		[b]={{nil,o,"cannot find HIP device library%select{| for %1}0; provide its path via \'--hip-path\' or \'--hip-device-lib-path\', or pass \'-nogpulib\' to build without HIP device library"}},
		[c]={{nil,o,{"cannot find HIP device library",{a," for B"},"; provide its path via \'--hip-path\' or \'--hip-device-lib-path\', or pass \'-nogpulib\' to build without HIP device library"}}},
		[e]=d,
		[f]="cannot find HIP device library(?:| for (.*?)); provide its path via \'\\-\\-hip\\-path\' or \'\\-\\-hip\\-device\\-lib\\-path\', or pass \'\\-nogpulib\' to build without HIP device library",
		[g]=a,
		[h]={{nil,o,n}},
		[j]={N,1610286626,J,L},
		[k]={{"clang/lib/Driver/ToolChains/HIPSPV.cpp",260,"llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> HIPSPVToolChain::getDeviceLibs(const llvm::opt::ArgList &DriverArgs) const {\n  // ...\n  if (!BCLibArgs.empty()) {\n  // ...\n  } else {\n    // ...\n    getDriver().Diag(diag::err_drv_no_hipspv_device_lib) << 1 << (\"\'\" + TT + \"\' target\");"}}
	},
	["err_drv_no_input_files"]={
		[i]="err_drv_no_input_files",
		[b]="no input files",
		[c]="no input files",
		[e]=d,
		[f]="no input files",
		[g]=a,
		[h]=n,
		[j]={Vb,1237025389,Yb,Wb},
		[k]={{x,4071,"void Driver::BuildActions(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  if (!SuppressMissingInputWarning && Inputs.empty()) {\n    Diag(clang::diag::err_drv_no_input_files);"}},
		[l]={
			["clang/test/Driver/working-directory-and-abs.c"]={"clang: error: no input files"}
		}
	},
	["err_drv_no_linker_llvm_support"]={
		[i]="err_drv_no_linker_llvm_support",
		[b]="\'%0\': unable to pass LLVM bit-code files to linker",
		[c]="\'A\': unable to pass LLVM bit-code files to linker",
		[e]=d,
		[f]="\'(.*?)\'\\: unable to pass LLVM bit\\-code files to linker",
		[g]=a,
		[h]=n,
		[j]={"e3e263fb713f",1241295293,"Driver: Generate an error when trying to pass an LLVM bc input to a","Driver: Generate an error when trying to pass an LLVM bc input to a\nnon-Darwin linker (sorry Gold + LTO-plugin users).\n\nllvm-svn: 70641"},
		[k]={{S,281,"void tools::AddLinkerInputs(const ToolChain &TC, const InputInfoList &Inputs, const ArgList &Args, ArgStringList &CmdArgs, const JobAction &JA) {\n  // ...\n  for (const auto &II : Inputs) {\n    // ...\n    if (!TC.HasNativeLLVMSupport() && types::isLLVMIR(II.getType()))\n      // ...\n      D.Diag(diag::err_drv_no_linker_llvm_support) << TC.getTripleString();"},{Zb,610,"void NVPTX::Linker::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  for (const auto &II : Inputs) {\n    if (II.getType() == types::TY_LLVM_IR || II.getType() == types::TY_LTO_IR || II.getType() == types::TY_LTO_BC || II.getType() == types::TY_LLVM_BC) {\n      C.getDriver().Diag(diag::err_drv_no_linker_llvm_support) << getToolChain().getTripleString();"},{tb,142,"void tools::gcc::Common::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  // Only pass -x if gcc will understand it; otherwise hope gcc\n  // understands the suffix correctly. The main use case this would go\n  // wrong in is for linker inputs if they happened to have an odd\n  // suffix; really the only way to get this to happen is a command\n  // like \'-x foobar a.c\' which will treat a.c like a linker input.\n  //\n  // FIXME: For the linker case specifically, can we safely convert\n  // inputs into \'-Wl,\' options?\n  for (const auto &II : Inputs) {\n    // Don\'t try to pass LLVM or AST inputs to a generic gcc.\n    if (types::isLLVMIR(II.getType()))\n      D.Diag(clang::diag::err_drv_no_linker_llvm_support) << getToolChain().getTripleString();"},{ub,253,"void hexagon::Assembler::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  // Only pass -x if gcc will understand it; otherwise hope gcc\n  // understands the suffix correctly. The main use case this would go\n  // wrong in is for linker inputs if they happened to have an odd\n  // suffix; really the only way to get this to happen is a command\n  // like \'-x foobar a.c\' which will treat a.c like a linker input.\n  //\n  // FIXME: For the linker case specifically, can we safely convert\n  // inputs into \'-Wl,\' options?\n  for (const auto &II : Inputs) {\n    // Don\'t try to pass LLVM or AST inputs to a generic gcc.\n    if (types::isLLVMIR(II.getType()))\n      D.Diag(clang::diag::err_drv_no_linker_llvm_support) << HTC.getTripleString();"}}
	},
	["err_drv_no_module_support"]={
		[i]="err_drv_no_module_support",
		[b]="\'%0\': unable to use module files with this tool",
		[c]="\'A\': unable to use module files with this tool",
		[e]=d,
		[f]="\'(.*?)\'\\: unable to use module files with this tool",
		[g]=a,
		[h]=n,
		[j]={"bf7fc9c542f2",1364402838,"<rdar://problem/13509689> Introduce -module-file-info option that provides information about a parti...","<rdar://problem/13509689> Introduce -module-file-info option that provides information about a particular module file.\n\nThis option can be useful for end users who want to know why they\nended up with a ton of different variants of the \"std\" module in their\nmodule cache. This problem should go away over time, as we reduce the\nneed for module variants, but it will never go away entirely.\n\nllvm-svn: 178148"},
		[k]={{tb,147,"void tools::gcc::Common::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  // Only pass -x if gcc will understand it; otherwise hope gcc\n  // understands the suffix correctly. The main use case this would go\n  // wrong in is for linker inputs if they happened to have an odd\n  // suffix; really the only way to get this to happen is a command\n  // like \'-x foobar a.c\' which will treat a.c like a linker input.\n  //\n  // FIXME: For the linker case specifically, can we safely convert\n  // inputs into \'-Wl,\' options?\n  for (const auto &II : Inputs) {\n    // Don\'t try to pass LLVM or AST inputs to a generic gcc.\n    if (types::isLLVMIR(II.getType()))\n    // ...\n    else if (II.getType() == types::TY_AST)\n    // ...\n    else if (II.getType() == types::TY_ModuleFile)\n      D.Diag(diag::err_drv_no_module_support) << getToolChain().getTripleString();"},{ub,259,"void hexagon::Assembler::ConstructJob(Compilation &C, const JobAction &JA, const InputInfo &Output, const InputInfoList &Inputs, const ArgList &Args, const char *LinkingOutput) const {\n  // ...\n  // Only pass -x if gcc will understand it; otherwise hope gcc\n  // understands the suffix correctly. The main use case this would go\n  // wrong in is for linker inputs if they happened to have an odd\n  // suffix; really the only way to get this to happen is a command\n  // like \'-x foobar a.c\' which will treat a.c like a linker input.\n  //\n  // FIXME: For the linker case specifically, can we safely convert\n  // inputs into \'-Wl,\' options?\n  for (const auto &II : Inputs) {\n    // Don\'t try to pass LLVM or AST inputs to a generic gcc.\n    if (types::isLLVMIR(II.getType()))\n    // ...\n    else if (II.getType() == types::TY_AST)\n    // ...\n    else if (II.getType() == types::TY_ModuleFile)\n      D.Diag(diag::err_drv_no_module_support) << HTC.getTripleString();"}}
	},
	["err_drv_no_neon_modifier"]={
		[i]="err_drv_no_neon_modifier",
		[b]="[no]neon is not accepted as modifier, please use [no]simd instead",
		[c]="[no]neon is not accepted as modifier, please use [no]simd instead",
		[e]=d,
		[f]="\\[no\\]neon is not accepted as modifier, please use \\[no\\]simd instead",
		[g]=a,
		[h]=n,
		[j]={"110db6f2ad20",1405667002,"[AArch64] Implement Clang CLI interface proposal about \"-march\".","[AArch64] Implement Clang CLI interface proposal about \"-march\".\n\n1. Revert \"Add default feature for CPUs on AArch64 target in Clang\"\nat r210625. Then, all enabled feature will by passed explicitly by\n-target-feature in -cc1 option.\n\n2. Get \"-mfpu\" deprecated.\n\n3. Implement support of \"-march\". Usage is:\n    -march=armv8-a+[no]feature\n  For instance, \"-march=armv8-a+neon+crc+nocrypto\". Here \"armv8-a\" is\n  necessary, and CPU names are not acceptable. Candidate features are\n  fp, neon, crc and crypto. Where conflicting feature modifiers are\n  specified, the right-most feature is used.\n\n4. Implement support of \"-mtune\". Usage is:\n    -march=CPU_NAME\n  For instance, \"-march=cortex-a57\". This option will ONLY get\n  micro-architectural feature enabled specifying to target CPU,\n  like \"+zcm\" and \"+zcz\" for cyclone. Any architectural features\n  WON\'T be modified.\n\n5. Change usage of \"-mcpu\" to \"-mcpu=CPU_NAME+[no]feature\", which is\n  an alias to \"-march={feature of CPU_NAME}+[no]feature\" and\n  \"-mtune=CPU_NAME\" together. Where this option is used in conjunction\n  with -march or -mtune, those options take precedence over the\n  appropriate part of this option.\n\nllvm-svn: 213353"},
		[k]={{"clang/lib/Driver/ToolChains/Arch/AArch64.cpp",82,"// Decode AArch64 features from string like +[no]featureA+[no]featureB+...\nstatic bool DecodeAArch64Features(const Driver &D, StringRef text, std::vector<StringRef> &Features, const llvm::AArch64::ArchInfo &ArchInfo) {\n  // ...\n  for (StringRef Feature : Split) {\n    // ...\n    if (!FeatureName.empty())\n    // ...\n    else if (Feature == \"neon\" || Feature == \"noneon\")\n      D.Diag(clang::diag::err_drv_no_neon_modifier);"}}
	},
	["err_drv_no_rocm_device_lib"]={
		[i]={{nil,A,"err_drv_no_rocm_device_lib"}},
		[b]={{nil,s,"cannot find ROCm device library%select{| for %1|for ABI version %1}0; provide its path via \'--rocm-path\' or \'--rocm-device-lib-path\', or pass \'-nogpulib\' to build without ROCm device library"},{o,o,"cannot find ROCm device library%select{| for %1}0; provide its path via \'--rocm-path\' or \'--rocm-device-lib-path\', or pass \'-nogpulib\' to build without ROCm device library"},{t,A,"cannot find ROCm device library%select{| for %1}0. Provide its path via --rocm-path or --rocm-device-lib-path, or pass -nogpulib to build without ROCm device library."}},
		[c]={{nil,s,{"cannot find ROCm device library",{a," for B","for ABI version B"},"; provide its path via \'--rocm-path\' or \'--rocm-device-lib-path\', or pass \'-nogpulib\' to build without ROCm device library"}},{o,o,{"cannot find ROCm device library",{a," for B"},"; provide its path via \'--rocm-path\' or \'--rocm-device-lib-path\', or pass \'-nogpulib\' to build without ROCm device library"}},{t,A,{"cannot find ROCm device library",{a," for B"},". Provide its path via --rocm-path or --rocm-device-lib-path, or pass -nogpulib to build without ROCm device library."}}},
		[e]=d,
		[f]="cannot find ROCm device library(?:| for (.*?)|for ABI version (.*?)); provide its path via \'\\-\\-rocm\\-path\' or \'\\-\\-rocm\\-device\\-lib\\-path\', or pass \'\\-nogpulib\' to build without ROCm device library",
		[g]=a,
		[h]={{nil,A,n}},
		[j]={U,1534346725,T,W},
		[k]={{yb,876,"bool RocmInstallationDetector::checkCommonBitcodeLibs(StringRef GPUArch, StringRef LibDeviceFile, DeviceLibABIVersion ABIVer) const {\n  if (!hasDeviceLibrary()) {\n    D.Diag(diag::err_drv_no_rocm_device_lib) << 0;"},{yb,880,"bool RocmInstallationDetector::checkCommonBitcodeLibs(StringRef GPUArch, StringRef LibDeviceFile, DeviceLibABIVersion ABIVer) const {\n  // ...\n  if (LibDeviceFile.empty()) {\n    D.Diag(diag::err_drv_no_rocm_device_lib) << 1 << GPUArch;"},{yb,884,"bool RocmInstallationDetector::checkCommonBitcodeLibs(StringRef GPUArch, StringRef LibDeviceFile, DeviceLibABIVersion ABIVer) const {\n  // ...\n  if (ABIVer.requiresLibrary() && getABIVersionPath(ABIVer).empty()) {\n    D.Diag(diag::err_drv_no_rocm_device_lib) << 2 << ABIVer.toString();"},{"clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp",165,"llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> AMDGPUOpenMPToolChain::getDeviceLibs(const llvm::opt::ArgList &Args) const {\n  // ...\n  if (!RocmInstallation->hasDeviceLibrary()) {\n    getDriver().Diag(diag::err_drv_no_rocm_device_lib) << 0;"},{"clang/lib/Driver/ToolChains/HIPAMD.cpp",388,"llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> HIPAMDToolChain::getDeviceLibs(const llvm::opt::ArgList &DriverArgs) const {\n  // ...\n  if (!BCLibArgs.empty()) {\n  // ...\n  } else {\n    if (!RocmInstallation->hasDeviceLibrary()) {\n      getDriver().Diag(diag::err_drv_no_rocm_device_lib) << 0;"}}
	},
	["err_drv_no_such_file"]={
		[i]="err_drv_no_such_file",
		[b]="no such file or directory: \'%0\'",
		[c]="no such file or directory: \'A\'",
		[e]=d,
		[f]="no such file or directory\\: \'(.*?)\'",
		[g]=a,
		[h]=n,
		[j]={"4f495980c41b",1236852856,"Add Diagnostic files for Frontend and move a couple errors over.","Add Diagnostic files for Frontend and move a couple errors over.\n - Notably, clang now exits with an error if it can\'t find a\n   file. This flushed out a bug in the CGColorSpace.c test case. :)\n\nllvm-svn: 66789"},
		[k]={{x,2580,"bool Driver::DiagnoseInputExistence(const DerivedArgList &Args, StringRef Value, types::ID Ty, bool TypoCorrect) const {\n  // ...\n  Diag(clang::diag::err_drv_no_such_file) << Value;"},{E,224,"/// Parse -f(no-)?sanitize-(coverage-)?(allow|ignore)list argument\'s values,\n/// diagnosing any invalid file paths and validating special case list format.\nstatic void parseSpecialCaseListArg(const Driver &D, const llvm::opt::ArgList &Args, std::vector<std::string> &SCLFiles, llvm::opt::OptSpecifier SCLOptionID, llvm::opt::OptSpecifier NoSCLOptionID, unsigned MalformedSCLErrorDiagID, bool DiagnoseErrors) {\n  for (const auto *Arg : Args) {\n    // Match -fsanitize-(coverage-)?(allow|ignore)list.\n    if (Arg->getOption().matches(SCLOptionID)) {\n      // ...\n      if (D.getVFS().exists(SCLPath)) {\n      // ...\n      } else if (DiagnoseErrors) {\n        D.Diag(clang::diag::err_drv_no_such_file) << SCLPath;"},{q,3879,"static bool RenderModulesOptions(Compilation &C, const Driver &D, const ArgList &Args, const InputInfo &Input, const InputInfo &Output, const Arg *Std, ArgStringList &CmdArgs) {\n  // ...\n  if (HaveClangModules) {\n    // ...\n    if (Arg *A = Args.getLastArg(options::OPT_fbuild_session_file)) {\n      // ...\n      if (llvm::sys::fs::status(A->getValue(), Status))\n        D.Diag(diag::err_drv_no_such_file) << A->getValue();"},{q,6356,"#endif\n  // ...\n  for (const auto &Filename : Args.getAllArgValues(options::OPT_fprofile_list_EQ)) {\n    if (D.getVFS().exists(Filename))\n    // ...\n    else\n      D.Diag(clang::diag::err_drv_no_such_file) << Filename;"},{q,6594,"#endif\n  // ...\n  // Forward -f options with positive and negative forms; we translate these by\n  // hand.  Do not propagate PGO options to the GPU-side compilations as the\n  // profile info is for the host-side compilation only.\n  if (!(IsCudaDevice || IsHIPDevice)) {\n    if (Arg *A = getLastProfileSampleUseArg(Args)) {\n      // ...\n      if (!llvm::sys::fs::exists(fname))\n        D.Diag(diag::err_drv_no_such_file) << fname;"},{S,784,"#endif\n  // ...\n  if (Arg *A = getLastProfileSampleUseArg(Args)) {\n    // ...\n    if (!llvm::sys::fs::exists(FName))\n      D.Diag(diag::err_drv_no_such_file) << FName;"},{"clang/lib/Driver/ToolChains/HIPAMD.cpp",384,"llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> HIPAMDToolChain::getDeviceLibs(const llvm::opt::ArgList &DriverArgs) const {\n  // ...\n  if (!BCLibArgs.empty()) {\n    llvm::for_each(BCLibArgs, [&](StringRef BCName) {\n      // ...\n      getDriver().Diag(diag::err_drv_no_such_file) << BCName;"},{"clang/lib/Driver/ToolChains/HIPAMD.cpp",426,"llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> HIPAMDToolChain::getDeviceLibs(const llvm::opt::ArgList &DriverArgs) const {\n  // ...\n  if (!BCLibArgs.empty()) {\n  // ...\n  } else {\n    // ...\n    if (llvm::sys::fs::exists(InstLib))\n    // ...\n    else\n      getDriver().Diag(diag::err_drv_no_such_file) << InstLib;"},{"clang/lib/Driver/ToolChains/HIPSPV.cpp",45,"// Locates HIP pass plugin.\nstatic std::string findPassPlugin(const Driver &D, const llvm::opt::ArgList &Args) {\n  // ...\n  if (!Path.empty()) {\n    // ...\n    D.Diag(diag::err_drv_no_such_file) << Path;"},{"clang/lib/Driver/ToolChains/HIPSPV.cpp",246,"llvm::SmallVector<ToolChain::BitCodeLibraryInfo, 12> HIPSPVToolChain::getDeviceLibs(const llvm::opt::ArgList &DriverArgs) const {\n  // ...\n  if (!BCLibArgs.empty()) {\n    llvm::for_each(BCLibArgs, [&](StringRef BCName) {\n      // ...\n      getDriver().Diag(diag::err_drv_no_such_file) << BCName;"},{pb,116,"XRayArgs::XRayArgs(const ToolChain &TC, const ArgList &Args) {\n  // ...\n  // Validate the always/never attribute files. We also make sure that they\n  // are treated as actual dependencies.\n  for (const auto &Filename : Args.getAllArgValues(options::OPT_fxray_always_instrument)) {\n    if (D.getVFS().exists(Filename)) {\n    // ...\n    } else\n      D.Diag(clang::diag::err_drv_no_such_file) << Filename;"},{pb,125,"XRayArgs::XRayArgs(const ToolChain &TC, const ArgList &Args) {\n  // ...\n  for (const auto &Filename : Args.getAllArgValues(options::OPT_fxray_never_instrument)) {\n    if (D.getVFS().exists(Filename)) {\n    // ...\n    } else\n      D.Diag(clang::diag::err_drv_no_such_file) << Filename;"},{pb,134,"XRayArgs::XRayArgs(const ToolChain &TC, const ArgList &Args) {\n  // ...\n  for (const auto &Filename : Args.getAllArgValues(options::OPT_fxray_attr_list)) {\n    if (D.getVFS().exists(Filename)) {\n    // ...\n    } else\n      D.Diag(clang::diag::err_drv_no_such_file) << Filename;"}},
		[l]={
			["clang/test/Driver/working-directory-and-abs.c"]={"clang: error: no such file or directory: \'clang/test/Driver/working-directory-and-abs.c\'"}
		}
	},
	["err_drv_no_such_file_with_suggestion"]={
		[i]={{nil,z,"err_drv_no_such_file_with_suggestion"}},
		[b]={{nil,z,"no such file or directory: \'%0\'; did you mean \'%1\'?"}},
		[c]={{nil,z,"no such file or directory: \'A\'; did you mean \'B\'?"}},
		[e]=d,
		[f]="no such file or directory\\: \'(.*?)\'; did you mean \'(.*?)\'\\?",
		[g]=a,
		[h]={{nil,z,n}},
		[j]={U,1534346725,T,W},
		[k]={{x,2537,"bool Driver::DiagnoseInputExistence(const DerivedArgList &Args, StringRef Value, types::ID Ty, bool TypoCorrect) const {\n  // ...\n  if (TypoCorrect) {\n    // ...\n    if (getOpts().findNearest(Value, Nearest, IncludedFlagsBitmask, ExcludedFlagsBitmask) <= 1) {\n      Diag(clang::diag::err_drv_no_such_file_with_suggestion) << Value << Nearest;"}}
	},
	["err_drv_offload_bad_gpu_arch"]={
		[i]={{nil,s,"err_drv_offload_bad_gpu_arch"}},
		[b]={{nil,s,"unsupported %0 gpu architecture: %1"}},
		[c]={{nil,s,"unsupported A gpu architecture: B"}},
		[e]=d,
		[f]="unsupported (.*?) gpu architecture\\: (.*?)",
		[g]=a,
		[h]={{nil,s,n}},
		[j]={"509b631f84e9",1651788595,"[OpenMP] Try to Infer target triples using the offloading architecture","[OpenMP] Try to Infer target triples using the offloading architecture\n\nCurrently we require the `-fopenmp-targets=` option to specify the\ntriple to use for the offloading toolchains, and the `-Xopenmp-target=`\noption to specify architectures to a specific toolchain. The changes\nmade in D124721 allowed us to use `--offload-arch=` to specify multiple\ntarget architectures. However, this can become combersome with many\ndifferent architectures. This patch introduces functinality that\nattempts to deduce the target triple and architectures from the\noffloading action. Currently we will deduce known GPU architectures when\nonly `-fopenmp` is specified.\n\nThis required a bit of a hack to cache the deduced architectures,\nwithout this we would\'ve just thrown an error when we tried to look up\nthe architecture again when generating the job. Normally we require the\nuser to manually specify the toolchain arguments, but here they would\nconfict unless we overrode them.\n\nDepends on: D124721\n\nReviewed By: saiislam\n\nDifferential Revision: https://reviews.llvm.org/D125050"},
		[k]={{x,4356,"/// Returns the canonical name for the offloading architecture when using a HIP\n/// or CUDA architecture.\nstatic StringRef getCanonicalArchString(Compilation &C, const llvm::opt::DerivedArgList &Args, StringRef ArchStr, const llvm::Triple &Triple, bool SuppressError = false) {\n  // ...\n  if (!SuppressError && Triple.isNVPTX() && (Arch == CudaArch::UNKNOWN || !IsNVIDIAGpuArch(Arch))) {\n    C.getDriver().Diag(clang::diag::err_drv_offload_bad_gpu_arch) << \"CUDA\" << ArchStr;"},{x,4361,"/// Returns the canonical name for the offloading architecture when using a HIP\n/// or CUDA architecture.\nstatic StringRef getCanonicalArchString(Compilation &C, const llvm::opt::DerivedArgList &Args, StringRef ArchStr, const llvm::Triple &Triple, bool SuppressError = false) {\n  // ...\n  if (!SuppressError && Triple.isNVPTX() && (Arch == CudaArch::UNKNOWN || !IsNVIDIAGpuArch(Arch))) {\n  // ...\n  } else if (!SuppressError && Triple.isAMDGPU() && (Arch == CudaArch::UNKNOWN || !IsAMDGpuArch(Arch))) {\n    C.getDriver().Diag(clang::diag::err_drv_offload_bad_gpu_arch) << \"HIP\" << ArchStr;"}}
	},
	["err_drv_omp_host_ir_file_not_found"]={
		[i]="err_drv_omp_host_ir_file_not_found",
		[b]={{nil,o,"provided host compiler IR file \'%0\' is required to generate code for OpenMP target regions but cannot be found"},{t,nil,"The provided host compiler IR file \'%0\' is required to generate code for OpenMP target regions but cannot be found."}},
		[c]={{nil,o,"provided host compiler IR file \'A\' is required to generate code for OpenMP target regions but cannot be found"},{t,nil,"The provided host compiler IR file \'A\' is required to generate code for OpenMP target regions but cannot be found."}},
		[e]=d,
		[f]="provided host compiler IR file \'(.*?)\' is required to generate code for OpenMP target regions but cannot be found",
		[g]=a,
		[h]=n,
		[j]={"4d5f0bbea1ec",1452010984,"[OpenMP] Offloading descriptor registration and device codegen.","[OpenMP] Offloading descriptor registration and device codegen.\n\nSummary:\nIn order to offloading work properly two things need to be in place:\n- a descriptor with all the offloading information (device entry functions, and global variable) has to be created by the host and registered in the OpenMP offloading runtime library.\n- all the device functions need to be emitted for the device and a convention has to be in place so that the runtime library can easily map the host ID of an entry point with the actual function in the device.\n\nThis patch adds support for these two things. However, only entry functions are being registered given that \'declare target\' directive is not yet implemented.\n\nAbout offloading descriptor:\n\nThe details of the descriptor are explained with more detail in http://goo.gl/L1rnKJ. Basically the descriptor will have fields that specify the number of devices, the pointers to where the device images begin and end (that will be defined by the linker), and also pointers to a the begin and end of table whose entries contain information about a specific entry point. Each entry has the type:\n```\nstruct __tgt_offload_entry{\n void *addr;\n char *name;\n int64_t size;\n};\n```  \nand will be implemented in a pre determined (ELF) section `.omp_offloading.entries` with 1-byte alignment, so that when all the objects are linked, the table is in that section with no padding in between entries (will be like a C array). The code generation ensures that all `__tgt_offload_entry` entries are emitted in the same order for both host and device so that the runtime can have the corresponding entries in both host and device in same index of the table, and efficiently implement the mapping.\n\nThe resulting descriptor is registered/unregistered with the runtime library using the calls `__tgt_register_lib` and `__tgt_unregister_lib`. The registration is implemented in a high priority global initializer so that the registration happens always before any initializer (that can potentially include target regions) is run.\n\nThe driver flag -omptargets= was created to specify a comma separated list of devices the user wants to support so that the new functionality can be exercised. Each device is specified with its triple.\n\n\nAbout target codegen:\n\nThe target codegen is pretty much straightforward as it reuses completely the logic of the host version for the same target region. The tricky part is to identify the meaningful target regions in the device side. Unlike other programming models, like CUDA, there are no already outlined functions with attributes that mark what should be emitted or not. So, the information on what to emit is passed in the form of metadata in host bc file. This requires a new option to pass the host bc to the device frontend. Then everything is similar to what happens in CUDA: the global declarations emission is intercepted to check to see if it is an \"interesting\" declaration. The difference is that instead of checking an attribute, the metadata information in checked. Right now, there is only a form of metadata to pass information about the device entry points (target regions). A class `OffloadEntriesInfoManagerTy` was created to manage all the information and queries related with the metadata. The metadata looks like this:\n```\n!omp_offload.info = !{!0, !1, !2, !3, !4, !5, !6}\n\n!0 = !{i32 0, i32 52, i32 77426347, !\"_ZN2S12r1Ei\", i32 479, i32 13, i32 4}\n!1 = !{i32 0, i32 52, i32 77426347, !\"_ZL7fstatici\", i32 461, i32 11, i32 5}\n!2 = !{i32 0, i32 52, i32 77426347, !\"_Z9ftemplateIiET_i\", i32 444, i32 11, i32 6}\n!3 = !{i32 0, i32 52, i32 77426347, !\"_Z3fooi\", i32 99, i32 11, i32 0}\n!4 = !{i32 0, i32 52, i32 77426347, !\"_Z3fooi\", i32 272, i32 11, i32 3}\n!5 = !{i32 0, i32 52, i32 77426347, !\"_Z3fooi\", i32 127, i32 11, i32 1}\n!6 = !{i32 0, i32 52, i32 77426347, !\"_Z3fooi\", i32 159, i32 11, i32 2}\n```\nThe fields in each metadata entry are (in sequence):\nEntry 1) an ID of the type of metadata - right now only zero is used meaning \"OpenMP target region\".\nEntry 2) a unique ID of the device where the input source file that contain the target region lives. \nEntry 3) a unique ID of the file where the input source file that contain the target region lives. \nEntry 4) a mangled name of the function that encloses the target region.\nEntries 5) and 6) line and column number where the target region was found.\nEntry 7) is the order the entry was emitted.\n\nEntry 2) and 3) are required to distinguish files that have the same function name.\nEntry 4) is required to distinguish different instances of the same declaration (usually templated ones)\nEntries 5) and 6) are required to distinguish the particular target region in body of the function (it is possible that a given target region is not an entry point - if clause can evaluate always to zero - and therefore we need to identify the \"interesting\" target regions. )\n\nThis patch replaces http://reviews.llvm.org/D12306.\n\nReviewers: ABataev, hfinkel, tra, rjmccall, sfantao\n\nSubscribers: FBrygidyn, piotr.rak, Hahnfeld, cfe-commits\n\nDifferential Revision: http://reviews.llvm.org/D12614\n\nllvm-svn: 256842"},
		[k]={{u,3896,"#include \"clang/Driver/Options.inc\"\n  // ...\n  // Get OpenMP host file path if any and report if a non existent file is\n  // found\n  if (Arg *A = Args.getLastArg(options::OPT_fopenmp_host_ir_file_path)) {\n    // ...\n    if (!llvm::sys::fs::exists(Opts.OMPHostIRFile))\n      Diags.Report(diag::err_drv_omp_host_ir_file_not_found) << Opts.OMPHostIRFile;"}}
	},
	["err_drv_omp_host_target_not_supported"]={
		[i]="err_drv_omp_host_target_not_supported",
		[b]={{nil,o,"target \'%0\' is not a supported OpenMP host target"},{t,nil,"The target \'%0\' is not a supported OpenMP host target."}},
		[c]={{nil,o,"target \'A\' is not a supported OpenMP host target"},{t,nil,"The target \'A\' is not a supported OpenMP host target."}},
		[e]=d,
		[f]="target \'(.*?)\' is not a supported OpenMP host target",
		[g]=a,
		[h]=n,
		[j]={"3f465c095b22",1454724754,"[OpenMP] Reorganize code to allow specialized code generation for different devices.","[OpenMP] Reorganize code to allow specialized code generation for different devices.\n\nSummary:\nDifferent devices may in some cases require different code generation schemes in order to implement OpenMP. This is required not only for performance reasons, but also because it may not be possible to have the current (default) implementation working for these devices. E.g. GPU\'s cannot implement the same scheme a target such as powerpc or x86b would use, in the sense that it does not have the ability to fork threads, instead all the threads are always executing and need to be managed by the implementation. \n\nThis patch proposes a reorganization of the code in the OpenMP code generation to pave the way to have specialized implementation of OpenMP support. More than a \"real\" patch this is more a request for comments in order to understand if what is proposed is acceptable or if there are better/easier ways to do it.\n\nIn this patch part of the common OpenMP codegen infrastructure is moved to a new file under a new namespace (CGOpenMPCommon) so it can be shared between the default implementation and the specialized one. When CGOpenMPRuntime is created, an attempt to select a specialized implementation is done.\n\nIn the patch a specialization for nvptx targets is done which currently checks if the target is an OpenMP device and trap if it is not. \n\nLet me know comments suggestions you may have.\n\nReviewers: hfinkel, carlo.bertolli, arpith-jacob, kkwli0, ABataev\n\nSubscribers: Hahnfeld, cfe-commits, fraggamuffin, caomhin, jholewinski\n\nDifferential Revision: http://reviews.llvm.org/D16784\n\nllvm-svn: 259977"},
		[k]={{u,3817,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (Opts.OpenMP || Opts.OpenMPSimd) {\n    // ...\n    // Provide diagnostic when a given target is not expected to be an OpenMP\n    // device or host.\n    if (!Opts.OpenMPIsTargetDevice) {\n      // ...\n      case llvm::Triple::nvptx:\n      case llvm::Triple::nvptx64:\n        Diags.Report(diag::err_drv_omp_host_target_not_supported) << T.str();"}}
	},
	["err_drv_omp_offload_target_bcruntime_not_found"]={
		[i]={{nil,w,"err_drv_omp_offload_target_bcruntime_not_found"}},
		[b]={{nil,o,"bitcode library \'%0\' does not exist"},{t,w,"Bitcode library \'%0\' does not exist."}},
		[c]={{nil,o,"bitcode library \'A\' does not exist"},{t,w,"Bitcode library \'A\' does not exist."}},
		[e]=d,
		[f]="bitcode library \'(.*?)\' does not exist",
		[g]=a,
		[h]={{nil,w,n}},
		[j]={ab,1585492323,Z,bb},
		[k]={{S,2409,"void tools::addOpenMPDeviceRTL(const Driver &D, const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args, StringRef BitcodeSuffix, const llvm::Triple &Triple) {\n  // ...\n  // First check whether user specifies bc library\n  if (const Arg *A = DriverArgs.getLastArg(LibomptargetBCPathOpt)) {\n    // ...\n    if (llvm::sys::fs::exists(LibOmpTargetFile)) {\n    // ...\n    } else {\n      D.Diag(diag::err_drv_omp_offload_target_bcruntime_not_found) << LibOmpTargetFile;"}}
	},
	["err_drv_omp_offload_target_cuda_version_not_support"]={
		[i]={{nil,t,"err_drv_omp_offload_target_cuda_version_not_support"}},
		[b]={{nil,o,"NVPTX target requires CUDA 9.2 or above; CUDA %0 detected"},{t,t,"NVPTX target requires CUDA 9.2 or above. CUDA %0 is detected."}},
		[c]={{nil,o,"NVPTX target requires CUDA 9.2 or above; CUDA A detected"},{t,t,"NVPTX target requires CUDA 9.2 or above. CUDA A is detected."}},
		[e]=d,
		[f]="NVPTX target requires CUDA 9\\.2 or above; CUDA (.*?) detected",
		[g]=a,
		[h]={{nil,t,n}},
		[j]={ab,1585492323,Z,bb},
		[k]={{Zb,847,"void CudaToolChain::addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args, Action::OffloadKind DeviceOffloadingKind) const {\n  // ...\n  if (DeviceOffloadingKind == Action::OFK_OpenMP) {\n    if (CudaInstallationVersion < CudaVersion::CUDA_92) {\n      getDriver().Diag(diag::err_drv_omp_offload_target_cuda_version_not_support) << CudaVersionToString(CudaInstallationVersion);"}}
	},
	["err_drv_omp_offload_target_missingbcruntime"]={
		[i]={{nil,w,"err_drv_omp_offload_target_missingbcruntime"}},
		[b]={{nil,o,"no library \'%0\' found in the default clang lib directory or in LIBRARY_PATH; use \'--libomptarget-%1-bc-path\' to specify %1 bitcode library"},{t,t,"No library \'%0\' found in the default clang lib directory or in LIBRARY_PATH. Please use --libomptarget-%1-bc-path to specify %1 bitcode library."},{w,w,"No library \'%0\' found in the default clang lib directory or in LIBRARY_PATH. Please use --libomptarget-nvptx-bc-path to specify nvptx bitcode library."}},
		[c]={{nil,o,"no library \'A\' found in the default clang lib directory or in LIBRARY_PATH; use \'--libomptarget-B-bc-path\' to specify B bitcode library"},{t,t,"No library \'A\' found in the default clang lib directory or in LIBRARY_PATH. Please use --libomptarget-B-bc-path to specify B bitcode library."},{w,w,"No library \'A\' found in the default clang lib directory or in LIBRARY_PATH. Please use --libomptarget-nvptx-bc-path to specify nvptx bitcode library."}},
		[e]=d,
		[f]="no library \'(.*?)\' found in the default clang lib directory or in LIBRARY_PATH; use \'\\-\\-libomptarget\\-(.*?)\\-bc\\-path\' to specify (.*?) bitcode library",
		[g]=a,
		[h]={{nil,w,n}},
		[j]={ab,1585492323,Z,bb},
		[k]={{S,2427,"void tools::addOpenMPDeviceRTL(const Driver &D, const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args, StringRef BitcodeSuffix, const llvm::Triple &Triple) {\n  // ...\n  // First check whether user specifies bc library\n  if (const Arg *A = DriverArgs.getLastArg(LibomptargetBCPathOpt)) {\n  // ...\n  } else {\n    // ...\n    if (!FoundBCLibrary)\n      D.Diag(diag::err_drv_omp_offload_target_missingbcruntime) << LibOmpTargetName << ArchPrefix;"}}
	},
	["err_drv_only_one_offload_target_supported"]={
		[i]={{nil,o,"err_drv_only_one_offload_target_supported"}},
		[b]={{nil,o,"only one offload target is supported"}},
		[c]={{nil,o,"only one offload target is supported"}},
		[e]=d,
		[f]="only one offload target is supported",
		[g]=a,
		[h]={{nil,o,n}},
		[j]={N,1610286626,J,L},
		[k]={{x,121,"static std::optional<llvm::Triple> getOffloadTargetTriple(const Driver &D, const ArgList &Args) {\n  // ...\n  default:\n    D.Diag(diag::err_drv_only_one_offload_target_supported);"}}
	},
	["err_drv_optimization_remark_format"]={
		[i]={{nil,z,"err_drv_optimization_remark_format"}},
		[b]={{nil,z,"unknown remark serializer format: \'%0\'"}},
		[c]={{nil,z,"unknown remark serializer format: \'A\'"}},
		[e]=d,
		[f]="unknown remark serializer format\\: \'(.*?)\'",
		[g]=a,
		[h]={{nil,z,n}},
		[j]={U,1534346725,T,W},
		[k]={{"clang/lib/CodeGen/CodeGenAction.cpp",103,"static void reportOptRecordError(Error E, DiagnosticsEngine &Diags, const CodeGenOptions &CodeGenOpts) {\n  handleAllErrors(\n      std::move(E), [&](const LLVMRemarkSetupFileError &E) { Diags.Report(diag::err_cannot_open_file) << CodeGenOpts.OptRecordFile << E.message(); }, [&](const LLVMRemarkSetupPatternError &E) { Diags.Report(diag::err_drv_optimization_remark_pattern) << E.message() << CodeGenOpts.OptRecordPasses; }, [&](const LLVMRemarkSetupFormatError &E) { Diags.Report(diag::err_drv_optimization_remark_format) << CodeGenOpts.OptRecordFormat; });"}}
	},
	["err_drv_optimization_remark_pattern"]={
		[i]="err_drv_optimization_remark_pattern",
		[b]={{nil,z,"in pattern \'%1\': %0"},{C,nil,"%0 in \'%1\'"}},
		[c]={{nil,z,"in pattern \'B\': A"},{C,nil,"A in \'B\'"}},
		[e]=d,
		[f]="in pattern \'(.*?)\'\\: (.*?)",
		[g]=a,
		[h]=n,
		[j]={"829b1700484d",1397667264,"Add support for optimization reports.","Add support for optimization reports.\n\nSummary:\nThis patch adds a new flag -Rpass=. The flag indicates the name\nof the optimization pass that should emit remarks stating when it\nmade a transformation to the code.\n\nThis implements the design I proposed in:\n\nhttps://docs.google.com/document/d/1FYUatSjZZO-zmFBxjOiuOzAy9mhHA8hqdvklZv68WuQ/edit?usp=sharing\n\nOther changes:\n- Add DiagnosticIDs::isRemark(). Use it in printDiagnosticOptions to\n  print \"-R\" instead of \"-W\" in the diagnostic message.\n\n- In BackendConsumer::OptimizationRemarkHandler, get a SourceLocation\n  object out of the file name, line and column number. Use that location\n  in the call to Diags.Report().\n\n- When -Rpass is used without debug info a note is emitted alerting\n  the user that they need to use -gline-tables-only -gcolumn-info to\n  get this information.\n\nCC: llvm-commits\n\nDifferential Revision: http://llvm-reviews.chandlerc.com/D3226\n\nllvm-svn: 206401"},
		[k]={{"clang/lib/CodeGen/CodeGenAction.cpp",99,"static void reportOptRecordError(Error E, DiagnosticsEngine &Diags, const CodeGenOptions &CodeGenOpts) {\n  handleAllErrors(\n      std::move(E), [&](const LLVMRemarkSetupFileError &E) { Diags.Report(diag::err_cannot_open_file) << CodeGenOpts.OptRecordFile << E.message(); }, [&](const LLVMRemarkSetupPatternError &E) { Diags.Report(diag::err_drv_optimization_remark_pattern) << E.message() << CodeGenOpts.OptRecordPasses; }, [&](const LLVMRemarkSetupFormatError &E) { Diags.Report(diag::err_drv_optimization_remark_format) << CodeGenOpts.OptRecordFormat; });"},{u,1224,"/// Parse a remark command line argument. It may be missing, disabled/enabled by\n/// \'-R[no-]group\' or specified with a regular expression by \'-Rgroup=regexp\'.\n/// On top of that, it can be disabled/enabled globally by \'-R[no-]everything\'.\nstatic CodeGenOptions::OptRemark ParseOptimizationRemark(DiagnosticsEngine &Diags, ArgList &Args, OptSpecifier OptEQ, StringRef Name) {\n  // ...\n  auto InitializeResultPattern = [&Diags, &Args, &Result](const Arg *A, StringRef Pattern) {\n    // ...\n    if (!Result.Regex->isValid(RegexError)) {\n      Diags.Report(diag::err_drv_optimization_remark_pattern) << RegexError << A->getAsString(Args);"}}
	},
	["err_drv_out_file_argument_with_multiple_sources"]={
		[i]="err_drv_out_file_argument_with_multiple_sources",
		[b]="cannot specify \'%0%1\' when compiling multiple source files",
		[c]="cannot specify \'AB\' when compiling multiple source files",
		[e]=d,
		[f]="cannot specify \'(.*?)(.*?)\' when compiling multiple source files",
		[g]=a,
		[h]=n,
		[j]={"9c1659b5b703",1382136544,"clang-cl: diagnose setting asm listing filename with multiple inputs","clang-cl: diagnose setting asm listing filename with multiple inputs\n\nllvm-svn: 193006"},
		[k]={{x,4081,"void Driver::BuildActions(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  // Diagnose misuse of /Fo.\n  if (Arg *A = Args.getLastArg(options::OPT__SLASH_Fo)) {\n    // ...\n    if (Inputs.size() > 1 && !V.empty() && !llvm::sys::path::is_separator(V.back())) {\n      // ...\n      Diag(clang::diag::err_drv_out_file_argument_with_multiple_sources) << A->getSpelling() << V;"},{x,4093,"void Driver::BuildActions(Compilation &C, DerivedArgList &Args, const InputList &Inputs, ActionList &Actions) const {\n  // ...\n  // Diagnose misuse of /Fa.\n  if (Arg *A = Args.getLastArg(options::OPT__SLASH_Fa)) {\n    // ...\n    if (Inputs.size() > 1 && !V.empty() && !llvm::sys::path::is_separator(V.back())) {\n      // ...\n      Diag(clang::diag::err_drv_out_file_argument_with_multiple_sources) << A->getSpelling() << V;"}}
	},
	["err_drv_output_argument_with_multiple_files"]={
		[i]="err_drv_output_argument_with_multiple_files",
		[b]="cannot specify -o when generating multiple output files",
		[c]="cannot specify -o when generating multiple output files",
		[e]=d,
		[f]="cannot specify \\-o when generating multiple output files",
		[g]=a,
		[h]=n,
		[j]={"e75d834c7cd9",1237186611,"Driver: Implement majority tool binding logic.","Driver: Implement majority tool binding logic.\n - Still need code for determining proper output location.\n\n - Doesn\'t work yet, of course, as the host isn\'t providing real\n   tool chains.\n\n - Interface still has a few warts, but has gotten a nice bit of\n   polish during the rewrite.\n\nllvm-svn: 67038"},
		[k]={{x,4824,"void Driver::BuildJobs(Compilation &C) const {\n  // ...\n  // It is an error to provide a -o option if we are making multiple output\n  // files. There are exceptions:\n  //\n  // IfsMergeJob: when generating interface stubs enabled we want to be able to\n  // generate the stub file at the same time that we generate the real\n  // library/a.out. So when a .o, .so, etc are the output, with clang interface\n  // stubs there will also be a .ifs and .ifso at the same location.\n  //\n  // CompileJob of type TY_IFS_CPP: when generating interface stubs is enabled\n  // and -c is passed, we still want to be able to generate a .ifs file while\n  // we are also generating .o files. So we allow more than one output file in\n  // this case as well.\n  //\n  // OffloadClass of type TY_Nothing: device-only output will place many outputs\n  // into a single offloading action. We should count all inputs to the action\n  // as outputs. Also ignore device-only outputs if we\'re compiling with\n  // -fsyntax-only.\n  if (FinalOutput) {\n    // ...\n    if (NumOutputs > 1) {\n      Diag(clang::diag::err_drv_output_argument_with_multiple_files);"}}
	},
	["err_drv_preamble_format"]={
		[i]="err_drv_preamble_format",
		[b]="incorrect format for -preamble-bytes=N,END",
		[c]="incorrect format for -preamble-bytes=N,END",
		[e]=d,
		[f]="incorrect format for \\-preamble\\-bytes\\=N,END",
		[g]=a,
		[h]=n,
		[j]={"3f4bea064644",1280180180,"Introduce basic support for loading a precompiled preamble while","Introduce basic support for loading a precompiled preamble while\nreparsing an ASTUnit. When saving a preamble, create a buffer larger\nthan the actual file we\'re working with but fill everything from the\nend of the preamble to the end of the file with spaces (so the lexer\nwill quickly skip them). When we load the file, create a buffer of the\nsame size, filling it with the file and then spaces. Then, instruct\nthe lexer to start lexing after the preamble, therefore continuing the\nparse from the spot where the preamble left off.\n\nIt\'s now possible to perform a simple preamble build + parse (+\nreparse) with ASTUnit. However, one has to disable a bunch of checking\nin the PCH reader to do so. That part isn\'t committed; it will likely\nbe handled with some other kind of flag (e.g., -fno-validate-pch).\n\nAs part of this, fix some issues with null termination of the memory\nbuffers created for the preamble; we were trying to explicitly\nNULL-terminate them, even though they were also getting implicitly\nNULL terminated, leading to excess warnings about NULL characters in\nsource files.\n\nllvm-svn: 109445"},
		[k]={{u,4222,"#include \"clang/Driver/Options.inc\"\n  // ...\n  if (const Arg *A = Args.getLastArg(OPT_preamble_bytes_EQ)) {\n    // ...\n    if (Comma == StringRef::npos || Value.substr(0, Comma).getAsInteger(10, Bytes) || Value.substr(Comma + 1).getAsInteger(10, EndOfLine))\n      Diags.Report(diag::err_drv_preamble_format);"}}
	}
};