Module:ClangDiags/DiagsLongData6: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
No edit summary
Line 1: Line 1:
local a="";
local a="";
local b="note\\: ";
local b="title";
local c="category";
local c="category";
local d="regex3";
local d="note: ";
local e="regex2";
local e="prefix";
local f="title";
local f="Note";
local g="regex1";
local g="type";
local h="message";
local h="message";
local i="type";
local i="note\\: ";
local j="Note";
local j="regex1";
local k="prefix";
local k="regex2";
local l="note: ";
local l="regex3";
local m="commit";
local m="commit";
local n="source";
local n="source";
local o="Semantic Issue";
local o="tests2";
local p="clang/lib/AST/ExprConstant.cpp";
local p="Semantic Issue";
local q="clang/lib/Sema/SemaDeclCXX.cpp";
local q="clang/lib/AST/ExprConstant.cpp";
local r="clang/lib/Sema/SemaExpr.cpp";
local r="clang/lib/Sema/SemaDeclCXX.cpp";
local s="clang/lib/Sema/SemaExprObjC.cpp";
local s="clang/lib/Sema/SemaExpr.cpp";
local t="clang/lib/Sema/SemaDecl.cpp";
local t="clang/lib/Sema/SemaExprObjC.cpp";
local u="clang/lib/Sema/SemaTemplate.cpp";
local u="clang/lib/Sema/SemaDecl.cpp";
local v="clang/lib/AST/ASTStructuralEquivalence.cpp";
local v="clang/lib/Sema/SemaTemplate.cpp";
local w="clang/lib/AST/Interp/Interp.cpp";
local w="clang/test/SemaObjC/non-trivial-c-union.m:7:13: note: f1 has type \'__weak id\' that is non-trivial to destruct";
local x="clang/lib/Sema/JumpDiagnostics.cpp";
local x="clang/test/SemaObjC/non-trivial-c-union.m:6:6: note: f0 has type \'__strong id\' that is non-trivial to destruct";
local y="clang/lib/Sema/SemaChecking.cpp";
local y="clang/test/SemaObjC/non-trivial-c-union.m:5:9: note: \'U0\' has subobjects that are non-trivial to destruct";
local z="clang/lib/Sema/SemaTemplateInstantiate.cpp";
local z="clang/lib/AST/ASTStructuralEquivalence.cpp";
local A="clang/lib/Sema/SemaStmt.cpp";
local A="clang/lib/AST/Interp/Interp.cpp";
local B="clang/lib/Sema/SemaType.cpp";
local B="clang/lib/Sema/JumpDiagnostics.cpp";
local C="clang/lib/Sema/SemaOpenMP.cpp";
local C="clang/test/SemaObjC/non-trivial-c-union.m:7:13: note: f1 has type \'__weak id\' that is non-trivial to copy";
local D="clang/lib/Sema/SemaInit.cpp";
local D="clang/lib/Sema/SemaChecking.cpp";
local E="clang/lib/Sema/SemaDeclObjC.cpp";
local E="clang/test/SemaObjC/non-trivial-c-union.m:6:6: note: f0 has type \'__strong id\' that is non-trivial to copy";
local F="clang/lib/AST/ASTImporter.cpp";
local F="clang/test/SemaObjC/non-trivial-c-union.m:5:9: note: \'U0\' has subobjects that are non-trivial to copy";
local G="clang/lib/AST/ODRDiagsEmitter.cpp";
local G="clang/lib/Sema/SemaTemplateInstantiate.cpp";
local H="clang/lib/Driver/Driver.cpp";
local H="clang/lib/Sema/SemaStmt.cpp";
local I="clang/lib/Sema/SemaDeclAttr.cpp";
local I="clang/lib/Sema/SemaType.cpp";
local J="For P0784R7: Add support for dynamic allocation with new / delete during";
local J="clang/lib/Sema/SemaOpenMP.cpp";
local K="clang/lib/Sema/SemaExprCXX.cpp";
local K="clang/lib/Sema/SemaInit.cpp";
local L="clang/lib/Sema/SemaCoroutine.cpp";
local L="clang/lib/Driver/Driver.cpp";
local M="da1b4347e41a";
local M="clang/lib/Sema/SemaDeclObjC.cpp";
local N="clang/lib/Sema/SemaObjCProperty.cpp";
local N="clang/lib/AST/ODRDiagsEmitter.cpp";
local O="clang/lib/Sema/SemaConcept.cpp";
local O="clang/lib/AST/ASTImporter.cpp";
local P="clang/lib/Sema/SemaOverload.cpp";
local P="clang/lib/Sema/SemaDeclAttr.cpp";
local Q="Parse Issue";
local Q="da1b4347e41a";
local R="Lexical or Preprocessor Issue";
local R="For P0784R7: Add support for dynamic allocation with new / delete during";
local S="Let clang atomic builtins fetch add/sub support floating point types";
local S="clang/lib/Sema/SemaExprCXX.cpp";
local T="61d065e21ff3";
local T="clang/lib/Sema/SemaCoroutine.cpp";
local U="cf819ab38311";
local U="clang/test/CXX/expr/expr.const/p2-0x.cpp";
local V="clang/lib/Sema/SemaAvailability.cpp";
local V="clang/lib/Sema/SemaObjCProperty.cpp";
local W="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local W="clang/lib/Sema/SemaConcept.cpp";
local X="When checking scopes for indirect goto, be more permissive (but still safe)";
local X="clang/lib/Sema/SemaOverload.cpp";
local Y="14f6bfcb52e7";
local Y="clang/test/SemaCXX/constant-expression-cxx2a.cpp";
local Z="clang/lib/Sema/AnalysisBasedWarnings.cpp";
local Z="Parse Issue";
local ab="6d485ff455ea";
local ab="clang/test/SemaObjC/non-trivial-c-union.m:6:6: note: f0 has type \'__strong id\' that is non-trivial to default-initialize";
local bb="Improve static checks for sprintf and __builtin___sprintf_chk";
local bb="Lexical or Preprocessor Issue";
local cb="clang/lib/Sema/SemaModule.cpp";
local cb="clang/test/SemaObjC/non-trivial-c-union.m:7:13: note: f1 has type \'__weak id\' that is non-trivial to default-initialize";
local db="95f50964fbf5";
local db="clang/test/SemaObjC/non-trivial-c-union.m:5:9: note: \'U0\' has subobjects that are non-trivial to default-initialize";
local eb="Implement P2361 Unevaluated string literals";
local eb="clang/lib/Sema/AnalysisBasedWarnings.cpp";
local fb="eb3c10c248ac";
local fb="95f50964fbf5";
local gb="[c++20] Determine whether a defaulted comparison should be deleted or";
local gb="clang/lib/Sema/SemaAvailability.cpp";
local hb="clang/lib/Lex/ModuleMap.cpp";
local hb="When checking scopes for indirect goto, be more permissive (but still safe)";
local ib="clang/lib/Lex/PPMacroExpansion.cpp";
local ib="clang/lib/Sema/SemaModule.cpp";
local jb="5253d9138eb3";
local jb="[clang] Implement objc_non_runtime_protocol to remove protocol metadata";
local kb="[Clang] Implement P2738R1 - constexpr cast from void*";
local kb="cf819ab38311";
local lb="f27afedc6c86";
local lb="Improve static checks for sprintf and __builtin___sprintf_chk";
local mb="constexpr: semantic checking for constexpr functions and constructors. Based in";
local mb="14f6bfcb52e7";
local nb="Documentation Issue";
local nb="Implement P2361 Unevaluated string literals";
local ob="clang/lib/AST/CommentSema.cpp";
local ob="6d485ff455ea";
local pb="92f241f18812";
local pb="61d065e21ff3";
local qb="ec273d3e3a8c";
local qb="Let clang atomic builtins fetch add/sub support floating point types";
local rb="Add a warning for not packing non-POD members in packed structs";
local rb="f27afedc6c86";
local sb="C++1y: support simple variable assignments in constexpr functions.";
local sb="[Clang] Implement P2738R1 - constexpr cast from void*";
local tb="but in ... found ...";
local tb="5253d9138eb3";
local ub="Properly compute triviality for explicitly-defaulted or deleted special members.";
local ub="constexpr: semantic checking for constexpr functions and constructors. Based in";
local vb="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local vb="Documentation Issue";
local wb="b1c4d5507fad";
local wb="clang/lib/Lex/PPMacroExpansion.cpp";
local xb="3da88fac5416";
local xb="clang/test/SemaCXX/constexpr-string.cpp";
local yb="931fcd3ba011";
local yb="clang/lib/Lex/ModuleMap.cpp";
local zb="clang/lib/Sema/SemaLookup.cpp";
local zb="clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp";
local Ab="7c11da0cfd33";
local Ab="eb3c10c248ac";
local Bb="357362d00b04";
local Bb="[c++20] Determine whether a defaulted comparison should be deleted or";
local Cb="[clang] New __attribute__((__clang_arm_mve_alias)).";
local Cb="clang/test/SemaSYCL/zero-length-arrays.cpp:25:10: note: field of illegal type \'double[0]\' declared here";
local Db="[WebAssembly] Improve clang diagnostics for wasm attributes";
local Db="but in ... found ...";
local Eb="Add checks and diagnostics for many of the cases which C++11 considers to not";
local Eb="Add a warning for not packing non-POD members in packed structs";
local Fb="When AST merging for record declarations fails, warn about the";
local Fb="C++1y: support simple variable assignments in constexpr functions.";
local Gb="7eeb59752a60";
local Gb="3da88fac5416";
local Hb="Automatic Reference Counting.";
local Hb="ec273d3e3a8c";
local Ib="31168b077c36";
local Ib="clang/test/Sema/flexible-array-init.c:20:7: note: initialized flexible array member \'y\' is here";
local Jb="PR10217: Provide diagnostics explaining why an implicitly-deleted special";
local Jb="b1c4d5507fad";
local Kb="clang/lib/Parse/ParseObjc.cpp";
local Kb="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp...";
local Lb="but in \'A\' found ...";
local Lb="92f241f18812";
local Mb="852265ff1c19";
local Mb="Properly compute triviality for explicitly-defaulted or deleted special members.";
local Nb="[clang] Add no_builtin attribute";
local Nb="clang/lib/AST/CommentSema.cpp";
local Ob="Reland [clang] Check unsupported types in expressions";
local Ob="clang/test/SemaCXX/constant-expression-cxx11.cpp";
local Pb="3dbcea8b957a";
local Pb="but in \'A\' found ...";
local Qb="objc-arc: Diagnose when captured variable in block literals";
local Qb="Add checks and diagnostics for many of the cases which C++11 considers to not";
local Rb="bd8791610948";
local Rb="Automatic Reference Counting.";
local Sb="Modules Issue";
local Sb="31168b077c36";
local Tb="clang/lib/Sema/SemaStmtAsm.cpp";
local Tb="clang/lib/Parse/ParseObjc.cpp";
local Ub="clang/lib/Serialization/ASTReader.cpp";
local Ub="852265ff1c19";
local Vb="256d39d47d27";
local Vb="PR10217: Provide diagnostics explaining why an implicitly-deleted special";
local Wb="AST Deserialization Issue";
local Wb="clang/lib/Sema/SemaLookup.cpp";
local Xb="ARC Casting Rules";
local Xb="When AST merging for record declarations fails, warn about the";
local Yb="previous documentation";
local Yb="[clang] New __attribute__((__clang_arm_mve_alias)).";
local Zb="Coroutines Issue";
local Zb="7c11da0cfd33";
local ac="Lambda Issue";
local ac="357362d00b04";
local bc="clang/lib/Frontend/CompilerInvocation.cpp";
local bc="[WebAssembly] Improve clang diagnostics for wasm attributes";
local cc="clang/lib/Sema/SemaCXXScopeSpec.cpp";
local cc="931fcd3ba011";
local dc="clang/lib/Sema/SemaTemplateInstantiateDecl.cpp";
local dc="7eeb59752a60";
local ec="clang/lib/CodeGen/CodeGenAction.cpp";
local ec="clang/lib/Serialization/ASTReader.cpp";
local fc="474177c05381";
local fc="Modules Issue";
local gc="eee944e7f9e6";
local gc="ARC Casting Rules";
local hc="[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast";
local hc="AST Deserialization Issue";
local ic="b83b23275b74";
local ic="clang/test/CXX/basic/basic.types/p10.cpp";
local jc="Introduce -Wreserved-identifier";
local jc="clang/lib/Sema/SemaCXXScopeSpec.cpp";
local kc="Refine r251469 to give better (and more localizable) diagnostics";
local kc="clang/test/CXX/class/class.union/p1.cpp";
local lc="c6af8c606dae";
local lc="3dbcea8b957a";
local mc="ARC Restrictions";
local mc="clang/lib/Sema/SemaStmtAsm.cpp";
local nc="[AST] Improve overflow diagnostics for fixed-point constant evaluation.";
local nc="clang/lib/Sema/SemaTemplateInstantiateDecl.cpp";
local oc="clang/test/SemaObjC/dictionary-literal-duplicates.m:33:5: note: previous equal key is here";
local pc="bd8791610948";
local qc="clang/test/SemaObjC/attr-designated-init.m:38:1: note: method marked as designated initializer of the class here";
local rc="[clang] Add no_builtin attribute";
local sc="clang/lib/Frontend/CompilerInvocation.cpp";
local tc="clang/test/Modules/odr_hash.cpp";
local uc="clang/test/Sema/nonnull.c:161:16: note: declared \'returns_nonnull\' here";
local vc="Reland [clang] Check unsupported types in expressions";
local wc="256d39d47d27";
local xc="previous documentation";
local yc="objc-arc: Diagnose when captured variable in block literals";
local zc="clang/test/SemaObjC/strong-in-c-struct.m";
local Ac="clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:5:8: note: defaulted \'operator<=>\' is implicitly deleted because class \'A1\' has a reference member";
local Bc="Coroutines Issue";
local Cc="Lambda Issue";
local Dc="b83b23275b74";
local Ec="Introduce -Wreserved-identifier";
local Fc="474177c05381";
local Gc="clang/test/SemaCXX/constexpr-value-init.cpp:4:21: note: read of object outside its lifetime is not allowed in a constant expression";
local Hc="clang/test/CXX/expr/expr.const/p5-0x.cpp:29:22: note: conversion to integral type \'int\' declared here";
local Ic="clang/test/CXX/expr/expr.const/p5-0x.cpp:33:13: note: conversion to integral type \'int\' declared here";
local Jc="clang/test/CXX/expr/expr.const/p5-0x.cpp:34:13: note: conversion to integral type \'long\' declared here";
local Kc="eee944e7f9e6";
local Lc="[C++2a] Add __builtin_bit_cast, used to implement std::bit_cast";
local Mc="clang/test/SemaSYCL/zero-length-arrays.cpp:21:12: note: field of illegal pointer type \'ZEROARR *\' (aka \'float (*)[0]\') declared here";
local Nc="Refine r251469 to give better (and more localizable) diagnostics";
local Oc="c6af8c606dae";
local Pc="ARC Restrictions";
local Qc="[AST] Improve overflow diagnostics for fixed-point constant evaluation.";
local Rc="clang/lib/CodeGen/CodeGenAction.cpp";
local Sc="clang/test/Sema/attr-read-only-placement.cpp:17:23: note: type was declared read-only here";


return {
return {
["note_access_protected_restricted_noobject"]={
["note_access_protected_restricted_noobject"]={
[f]="must name member using the type of the current context A",
[b]="must name member using the type of the current context A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="must name member using the type of the current context %0",
[h]="must name member using the type of the current context %0",
[g]=b,
[j]=i,
[e]="must name member using the type of the current context (.*?)",
[k]="must name member using the type of the current context (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5dadb65e0722",1333767860,"Fix several problems with protected access control:"},
[m]={"5dadb65e0722",1333767860,"Fix several problems with protected access control:"},
[n]={{"clang/lib/Sema/SemaAccess.cpp",1079,"/// Given that an entity has protected natural access, check whether\n/// access might be denied because of the protected member access\n/// restriction.\n///\n/// \\return true if a note was emitted\nstatic bool TryDiagnoseProtectedAccess(Sema &S, const EffectiveContext &EC, AccessTarget &Target) {\n  for (EffectiveContext::record_iterator I = EC.Records.begin(), E = EC.Records.end(); I != E; ++I) {\n    // If we don\'t have an instance context, [class.protected] says the\n    // naming class has to equal the context class.\n    if (!Target.hasInstanceContext()) {\n      S.Diag(D->getLocation(), diag::note_access_protected_restricted_noobject) << S.Context.getTypeDeclType(ECRecord);"}}
[n]={{"clang/lib/Sema/SemaAccess.cpp",1079,"/// Given that an entity has protected natural access, check whether\n/// access might be denied because of the protected member access\n/// restriction.\n///\n/// \\return true if a note was emitted\nstatic bool TryDiagnoseProtectedAccess(Sema &S, const EffectiveContext &EC, AccessTarget &Target) {\n  for (EffectiveContext::record_iterator I = EC.Records.begin(), E = EC.Records.end(); I != E; ++I) {\n    // If we don\'t have an instance context, [class.protected] says the\n    // naming class has to equal the context class.\n    if (!Target.hasInstanceContext()) {\n      S.Diag(D->getLocation(), diag::note_access_protected_restricted_noobject) << S.Context.getTypeDeclType(ECRecord);"}},
[o]={
["clang/test/CXX/class.access/class.protected/p1.cpp"]={"clang/test/CXX/class.access/class.protected/p1.cpp:250:10: note: must name member using the type of the current context \'test7::B\'","clang/test/CXX/class.access/class.protected/p1.cpp:250:10: note: must name member using the type of the current context \'test7::C\'","clang/test/CXX/class.access/class.protected/p1.cpp:250:10: note: must name member using the type of the current context \'test7::D\'","clang/test/CXX/class.access/class.protected/p1.cpp:288:10: note: must name member using the type of the current context \'test8::B\'","clang/test/CXX/class.access/class.protected/p1.cpp:288:10: note: must name member using the type of the current context \'test8::C\'","clang/test/CXX/class.access/class.protected/p1.cpp:288:10: note: must name member using the type of the current context \'test8::D\'","clang/test/CXX/class.access/class.protected/p1.cpp:434:29: note: must name member using the type of the current context \'test14::B\'","clang/test/CXX/class.access/class.protected/p1.cpp:436:10: note: must name member using the type of the current context \'test14::B\'","clang/test/CXX/class.access/class.protected/p1.cpp:438:29: note: must name member using the type of the current context \'test14::B\'","clang/test/CXX/class.access/class.protected/p1.cpp:441:10: note: must name member using the type of the current context \'test14::B\'","clang/test/CXX/class.access/class.protected/p1.cpp:445:10: note: must name member using the type of the current context \'test14::B\'"}
}
},
},
["note_access_protected_restricted_object"]={
["note_access_protected_restricted_object"]={
[f]="can only access this member on an object of type A",
[b]="can only access this member on an object of type A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="can only access this member on an object of type %0",
[h]="can only access this member on an object of type %0",
[g]=b,
[j]=i,
[e]="can only access this member on an object of type (.*?)",
[k]="can only access this member on an object of type (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5dadb65e0722",1333767860,"Fix several problems with protected access control:"},
[m]={"5dadb65e0722",1333767860,"Fix several problems with protected access control:"},
[n]={{"clang/lib/Sema/SemaAccess.cpp",1108,"/// Given that an entity has protected natural access, check whether\n/// access might be denied because of the protected member access\n/// restriction.\n///\n/// \\return true if a note was emitted\nstatic bool TryDiagnoseProtectedAccess(Sema &S, const EffectiveContext &EC, AccessTarget &Target) {\n  for (EffectiveContext::record_iterator I = EC.Records.begin(), E = EC.Records.end(); I != E; ++I) {\n    return S.Diag(D->getLocation(), diag::note_access_protected_restricted_object) << S.Context.getTypeDeclType(ECRecord);"}}
[n]={{"clang/lib/Sema/SemaAccess.cpp",1108,"/// Given that an entity has protected natural access, check whether\n/// access might be denied because of the protected member access\n/// restriction.\n///\n/// \\return true if a note was emitted\nstatic bool TryDiagnoseProtectedAccess(Sema &S, const EffectiveContext &EC, AccessTarget &Target) {\n  for (EffectiveContext::record_iterator I = EC.Records.begin(), E = EC.Records.end(); I != E; ++I) {\n    return S.Diag(D->getLocation(), diag::note_access_protected_restricted_object) << S.Context.getTypeDeclType(ECRecord);"}},
[o]={
["clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp"]={"clang/test/CXX/dcl.decl/dcl.decomp/p4.cpp:223:9: note: can only access this member on an object of type \'p0969r0::D\'"}
}
},
},
["note_add_deprecation_attr"]={
["note_add_deprecation_attr"]={
[f]="add a deprecation attribute to the declaration to silence this warning",
[b]="add a deprecation attribute to the declaration to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add a deprecation attribute to the declaration to silence this warning",
[h]="add a deprecation attribute to the declaration to silence this warning",
[g]=b,
[j]=i,
[e]="add a deprecation attribute to the declaration to silence this warning",
[k]="add a deprecation attribute to the declaration to silence this warning",
[d]=a,
[l]=a,
[c]=nb,
[c]=vb,
[m]={"1da888691587",1348350470,"Comment sema: warn when comment has \\deprecated but declaration does not have a"},
[m]={"1da888691587",1348350470,"Comment sema: warn when comment has \\deprecated but declaration does not have a"},
[n]={{ob,700,"void Sema::checkDeprecatedCommand(const BlockCommandComment *Command) {\n  // Try to emit a fixit with a deprecation attribute.\n  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {\n    Diag(Loc, diag::note_add_deprecation_attr) << FixItHint::CreateInsertion(Loc, TextToInsert);"}}
[n]={{Nb,700,"void Sema::checkDeprecatedCommand(const BlockCommandComment *Command) {\n  // Try to emit a fixit with a deprecation attribute.\n  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {\n    Diag(Loc, diag::note_add_deprecation_attr) << FixItHint::CreateInsertion(Loc, TextToInsert);"}},
[o]={
["clang/test/Sema/warn-documentation-fixits.c"]={"clang/test/Sema/warn-documentation-fixits.c:7:1: note: add a deprecation attribute to the declaration to silence this warning","clang/test/Sema/warn-documentation-fixits.c:11:1: note: add a deprecation attribute to the declaration to silence this warning","clang/test/Sema/warn-documentation-fixits.c:17:1: note: add a deprecation attribute to the declaration to silence this warning","clang/test/Sema/warn-documentation-fixits.c:24:1: note: add a deprecation attribute to the declaration to silence this warning"}
}
},
},
["note_add_synthesize_directive"]={
["note_add_synthesize_directive"]={
[f]="add a \'@synthesize\' directive",
[b]="add a \'@synthesize\' directive",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add a \'@synthesize\' directive",
[h]="add a \'@synthesize\' directive",
[g]=b,
[j]=i,
[e]="add a \'@synthesize\' directive",
[k]="add a \'@synthesize\' directive",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"6c9af50cc815",1499076744,"Add a fixit for -Wobjc-protocol-property-synthesis"},
[m]={"6c9af50cc815",1499076744,"Add a fixit for -Wobjc-protocol-property-synthesis"},
[n]={{N,1940,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (ObjCProtocolDecl *Proto = dyn_cast<ObjCProtocolDecl>(Prop->getDeclContext())) {\n      // We won\'t auto-synthesize properties declared in protocols.\n      // Suppress the warning if class\'s superclass implements property\'s\n      // getter and implements property\'s setter (if readwrite property).\n      // Or, if property is going to be implemented in its super class.\n      if (!SuperClassImplementsProperty(IDecl, Prop) && !PropInSuperClass) {\n        Diag(AtEnd, diag::note_add_synthesize_directive) << FixItHint::CreateInsertion(AtEnd, FixIt);"}}
[n]={{V,1940,"/// Default synthesizes all properties which must be synthesized\n/// in class\'s \\@implementation.\nvoid Sema::DefaultSynthesizeProperties(Scope *S, ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl, SourceLocation AtEnd) {\n  for (const auto &PropEntry : PropMap) {\n    if (ObjCProtocolDecl *Proto = dyn_cast<ObjCProtocolDecl>(Prop->getDeclContext())) {\n      // We won\'t auto-synthesize properties declared in protocols.\n      // Suppress the warning if class\'s superclass implements property\'s\n      // getter and implements property\'s setter (if readwrite property).\n      // Or, if property is going to be implemented in its super class.\n      if (!SuperClassImplementsProperty(IDecl, Prop) && !PropInSuperClass) {\n        Diag(AtEnd, diag::note_add_synthesize_directive) << FixItHint::CreateInsertion(AtEnd, FixIt);"}},
[o]={
["clang/test/SemaObjC/default-synthesize.m"]={"clang/test/SemaObjC/default-synthesize.m:140:1: note: add a \'@synthesize\' directive"}
}
},
},
["note_additional_parens_for_variable_declaration"]={
["note_additional_parens_for_variable_declaration"]={
[f]="add a pair of parentheses to declare a variable",
[b]="add a pair of parentheses to declare a variable",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add a pair of parentheses to declare a variable",
[h]="add a pair of parentheses to declare a variable",
[g]=b,
[j]=i,
[e]="add a pair of parentheses to declare a variable",
[k]="add a pair of parentheses to declare a variable",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"943c44045551",1343683852,"Improvements to vexing-parse warnings. Make the no-parameters case more"},
[m]={"943c44045551",1343683852,"Improvements to vexing-parse warnings. Make the no-parameters case more"},
[n]={{B,3893,"/// Produce an appropriate diagnostic for an ambiguity between a function\n/// declarator and a C++ direct-initializer.\nstatic void warnAboutAmbiguousFunction(Sema &S, Declarator &D, DeclaratorChunk &DeclType, QualType RT) {\n  if (FTI.NumParams > 0) {\n    S.Diag(B, diag::note_additional_parens_for_variable_declaration) << FixItHint::CreateInsertion(B, \"(\") << FixItHint::CreateInsertion(E, \")\");"}}
[n]={{I,3893,"/// Produce an appropriate diagnostic for an ambiguity between a function\n/// declarator and a C++ direct-initializer.\nstatic void warnAboutAmbiguousFunction(Sema &S, Declarator &D, DeclaratorChunk &DeclType, QualType RT) {\n  if (FTI.NumParams > 0) {\n    S.Diag(B, diag::note_additional_parens_for_variable_declaration) << FixItHint::CreateInsertion(B, \"(\") << FixItHint::CreateInsertion(E, \")\");"}},
[o]={
["clang/test/SemaCXX/dcl_ambig_res.cpp"]={"clang/test/SemaCXX/dcl_ambig_res.cpp:16:7: note: add a pair of parentheses to declare a variable","clang/test/SemaCXX/dcl_ambig_res.cpp:18:8: note: add a pair of parentheses to declare a variable","clang/test/SemaCXX/dcl_ambig_res.cpp:73:9: note: add a pair of parentheses to declare a variable"}
}
},
},
["note_addrof_ovl_candidate_disabled_by_enable_if_attr"]={
["note_addrof_ovl_candidate_disabled_by_enable_if_attr"]={
[f]="candidate function made ineligible by enable_if",
[b]="candidate function made ineligible by enable_if",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="candidate function made ineligible by enable_if",
[h]="candidate function made ineligible by enable_if",
[g]=b,
[j]=i,
[e]="candidate function made ineligible by enable_if",
[k]="candidate function made ineligible by enable_if",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang."},
[m]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang."},
[n]={{P,10561,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  if (!isFunctionAlwaysEnabled(S.Context, FD)) {\n    if (Complain) {\n      if (InOverloadResolution)\n        S.Diag(FD->getBeginLoc(), diag::note_addrof_ovl_candidate_disabled_by_enable_if_attr);"}}
[n]={{X,10561,"/// Returns true if we can take the address of the function.\n///\n/// \\param Complain - If true, we\'ll emit a diagnostic\n/// \\param InOverloadResolution - For the purposes of emitting a diagnostic, are\n///  we in overload resolution?\n/// \\param Loc - The location of the statement we\'re complaining about. Ignored\n///  if we\'re not complaining, or if we\'re in overload resolution.\nstatic bool checkAddressOfFunctionIsAvailable(Sema &S, const FunctionDecl *FD, bool Complain, bool InOverloadResolution, SourceLocation Loc) {\n  if (!isFunctionAlwaysEnabled(S.Context, FD)) {\n    if (Complain) {\n      if (InOverloadResolution)\n        S.Diag(FD->getBeginLoc(), diag::note_addrof_ovl_candidate_disabled_by_enable_if_attr);"}},
[o]={
["clang/test/Sema/overloadable.c"]={"clang/test/Sema/overloadable.c:129:3: note: candidate function made ineligible by enable_if","clang/test/Sema/overloadable.c:128:3: note: candidate function made ineligible by enable_if","clang/test/Sema/overloadable.c:129:3: note: candidate function made ineligible by enable_if","clang/test/Sema/overloadable.c:128:3: note: candidate function made ineligible by enable_if"}
}
},
},
["note_alias_mangled_name_alternative"]={
["note_alias_mangled_name_alternative"]={
[f]="function by that name is mangled as \"A\"",
[b]="function by that name is mangled as \"A\"",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="function by that name is mangled as \"%0\"",
[h]="function by that name is mangled as \"%0\"",
[g]=b,
[j]=i,
[e]="function by that name is mangled as \"(.*?)\"",
[k]="function by that name is mangled as \"(.*?)\"",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"ba6e747f9b05",1670524276,"[clang] Set ShowInSystemHeader for module-build and module-import remarks"},
[m]={"ba6e747f9b05",1670524276,"[clang] Set ShowInSystemHeader for module-build and module-import remarks"},
[n]={{"clang/lib/CodeGen/CodeGenModule.cpp",586,"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  if (GV->isDeclaration()) {\n    // Provide a note if the given function is not found and exists as a\n    // mangled name.\n    for (const auto &[Decl, Name] : MangledDeclNames) {\n      if (const auto *ND = dyn_cast<NamedDecl>(Decl.getDecl())) {\n        if (ND->getName() == GV->getName()) {\n          Diags.Report(Location, diag::note_alias_mangled_name_alternative) << Name << FixItHint::CreateReplacement(AliasRange, (Twine(IsIFunc ? \"ifunc\" : \"alias\") + \"(\\\"\" + Name + \"\\\")\").str());"}}
[n]={{"clang/lib/CodeGen/CodeGenModule.cpp",586,"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  if (GV->isDeclaration()) {\n    // Provide a note if the given function is not found and exists as a\n    // mangled name.\n    for (const auto &[Decl, Name] : MangledDeclNames) {\n      if (const auto *ND = dyn_cast<NamedDecl>(Decl.getDecl())) {\n        if (ND->getName() == GV->getName()) {\n          Diags.Report(Location, diag::note_alias_mangled_name_alternative) << Name << FixItHint::CreateReplacement(AliasRange, (Twine(IsIFunc ? \"ifunc\" : \"alias\") + \"(\\\"\" + Name + \"\\\")\").str());"}},
[o]={
["clang/test/CodeGen/attr-ifunc.cpp"]={"clang/test/CodeGen/attr-ifunc.cpp:5:30: note: function by that name is mangled as \"_Z8f1_ifuncv\"","clang/test/CodeGen/attr-ifunc.cpp:12:40: note: function by that name is mangled as \"_Z20f6_resolver_resolverv\"","clang/test/CodeGen/attr-ifunc.cpp:17:30: note: function by that name is mangled as \"_Z11f6_resolverv\""}
}
},
},
["note_alias_requires_mangled_name"]={
["note_alias_requires_mangled_name"]={
[f]="the ... specified in an ... must refer to its mangled name",
[b]="the ... specified in an ... must refer to its mangled name",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="the %select{function or variable|function}0 specified in an %select{alias|ifunc}1 must refer to its mangled name",
[h]="the %select{function or variable|function}0 specified in an %select{alias|ifunc}1 must refer to its mangled name",
[g]=b,
[j]=i,
[e]="the (?:function or variable|function) specified in an (?:alias|ifunc) must refer to its mangled name",
[k]="the (?:function or variable|function) specified in an (?:alias|ifunc) must refer to its mangled name",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"ba6e747f9b05",1670524276,"[clang] Set ShowInSystemHeader for module-build and module-import remarks"},
[m]={"ba6e747f9b05",1670524276,"[clang] Set ShowInSystemHeader for module-build and module-import remarks"},
[n]={{"clang/lib/CodeGen/CodeGenModule.cpp",579,"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  if (GV->isDeclaration()) {\n    Diags.Report(Location, diag::note_alias_requires_mangled_name) << IsIFunc << IsIFunc;"}}
[n]={{"clang/lib/CodeGen/CodeGenModule.cpp",579,"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  if (GV->isDeclaration()) {\n    Diags.Report(Location, diag::note_alias_requires_mangled_name) << IsIFunc << IsIFunc;"}},
[o]={
["clang/test/Sema/attr-alias-elf.c"]={"clang/test/Sema/attr-alias-elf.c:7:30: note: the function or variable specified in an alias must refer to its mangled name","clang/test/Sema/attr-alias-elf.c:10:30: note: the function or variable specified in an alias must refer to its mangled name","clang/test/Sema/attr-alias-elf.c:49:30: note: the function or variable specified in an alias must refer to its mangled name","clang/test/Sema/attr-alias-elf.c:52:30: note: the function or variable specified in an alias must refer to its mangled name","clang/test/Sema/attr-alias-elf.c:56:30: note: the function or variable specified in an alias must refer to its mangled name"}
}
},
},
["note_alignas_on_declaration"]={
["note_alignas_on_declaration"]={
[f]="declared with A attribute here",
[b]="declared with A attribute here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declared with %0 attribute here",
[h]="declared with %0 attribute here",
[g]=b,
[j]=i,
[e]="declared with (.*?) attribute here",
[k]="declared with (.*?) attribute here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"bc8caaf05f09",1361508939,"Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of"},
[m]={"bc8caaf05f09",1361508939,"Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of"},
[n]={{t,2859,"/// Merge alignment attributes from \\p Old to \\p New, taking into account the\n/// special semantics of C11\'s _Alignas specifier and C++11\'s alignas attribute.\n///\n/// \\return \\c true if any attributes were added to \\p New.\nstatic bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) {\n  if (OldAlignasAttr && !NewAlignasAttr && isAttributeTargetADefinition(New)) {\n    S.Diag(OldAlignasAttr->getLocation(), diag::note_alignas_on_declaration) << OldAlignasAttr;"},{t,3087,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    if (isa<C11NoReturnAttr>(NewAttribute)) {\n    } else if (isa<UuidAttr>(NewAttribute)) {\n    } else if (const AlignedAttr *AA = dyn_cast<AlignedAttr>(NewAttribute)) {\n      if (AA->isAlignas()) {\n        S.Diag(NewAttribute->getLocation(), diag::note_alignas_on_declaration) << AA;"}}
[n]={{u,2859,"/// Merge alignment attributes from \\p Old to \\p New, taking into account the\n/// special semantics of C11\'s _Alignas specifier and C++11\'s alignas attribute.\n///\n/// \\return \\c true if any attributes were added to \\p New.\nstatic bool mergeAlignedAttrs(Sema &S, NamedDecl *New, Decl *Old) {\n  if (OldAlignasAttr && !NewAlignasAttr && isAttributeTargetADefinition(New)) {\n    S.Diag(OldAlignasAttr->getLocation(), diag::note_alignas_on_declaration) << OldAlignasAttr;"},{u,3087,"/// checkNewAttributesAfterDef - If we already have a definition, check that\n/// there are no new attributes in this declaration.\nstatic void checkNewAttributesAfterDef(Sema &S, Decl *New, const Decl *Old) {\n  for (unsigned I = 0, E = NewAttributes.size(); I != E;) {\n    if (isa<C11NoReturnAttr>(NewAttribute)) {\n    } else if (isa<UuidAttr>(NewAttribute)) {\n    } else if (const AlignedAttr *AA = dyn_cast<AlignedAttr>(NewAttribute)) {\n      if (AA->isAlignas()) {\n        S.Diag(NewAttribute->getLocation(), diag::note_alignas_on_declaration) << AA;"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:19:1: note: declared with \'alignas\' attribute here","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:24:1: note: declared with \'alignas\' attribute here","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:28:1: note: declared with \'alignas\' attribute here","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:31:8: note: declared with \'alignas\' attribute here","clang/test/CXX/dcl.dcl/dcl.attr/dcl.align/p6.cpp:44:8: note: declared with \'alignas\' attribute here"}
}
},
},
["note_allocated_here"]={
["note_allocated_here"]={
[f]="allocated with \'new...\' here",
[b]="allocated with \'new...\' here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="allocated with \'new%select{[]|}0\' here",
[h]="allocated with \'new%select{[]|}0\' here",
[g]=b,
[j]=i,
[e]="allocated with \'new(?:\\[\\]|)\' here",
[k]="allocated with \'new(?:\\[\\]|)\' here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"538ef53c139d",1431620097,"Detect uses of mismatching forms of \'new\' and \'delete\'"},
[m]={"538ef53c139d",1431620097,"Detect uses of mismatching forms of \'new\' and \'delete\'"},
[n]={{K,3541,"static void DiagnoseMismatchedNewDelete(Sema &SemaRef, SourceLocation DeleteLoc, const MismatchingNewDeleteDetector &Detector) {\n  for (const auto *NE : Detector.NewExprs)\n    SemaRef.Diag(NE->getExprLoc(), diag::note_allocated_here) << Detector.IsArrayForm;"}}
[n]={{S,3541,"static void DiagnoseMismatchedNewDelete(Sema &SemaRef, SourceLocation DeleteLoc, const MismatchingNewDeleteDetector &Detector) {\n  for (const auto *NE : Detector.NewExprs)\n    SemaRef.Diag(NE->getExprLoc(), diag::note_allocated_here) << Detector.IsArrayForm;"}},
[o]={
["clang/test/CodeGenCXX/default-arguments.cpp"]={"clang/test/CodeGenCXX/default-arguments.cpp:63:10: note: allocated with \'new[]\' here"}
}
},
},
["note_also_found"]={
["note_also_found"]={
[f]="also found",
[b]="also found",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="also found",
[h]="also found",
[g]=b,
[j]=i,
[e]="also found",
[k]="also found",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"e29c5cd2398c",1260474663,"Improve the diagnostic when a new declaration conflicts with a using shadow"},
[m]={"e29c5cd2398c",1260474663,"Improve the diagnostic when a new declaration conflicts with a using shadow"},
[n]={{E,3645,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n  if (issueDiagnostic) {\n    for (unsigned I = 1, N = Methods.size(); I != N; ++I) {\n      Diag(Methods[I]->getBeginLoc(), diag::note_also_found) << Methods[I]->getSourceRange();"}}
[n]={{M,3645,"void Sema::DiagnoseMultipleMethodInGlobalPool(SmallVectorImpl<ObjCMethodDecl *> &Methods, Selector Sel, SourceRange R, bool receiverIdOrClass) {\n  if (issueDiagnostic) {\n    for (unsigned I = 1, N = Methods.size(); I != N; ++I) {\n      Diag(Methods[I]->getBeginLoc(), diag::note_also_found) << Methods[I]->getSourceRange();"}},
[o]={
["clang/test/SemaObjC/selector-overload.m"]={"clang/test/SemaObjC/selector-overload.m:22:1: note: also found","clang/test/SemaObjC/selector-overload.m:28:1: note: also found","clang/test/SemaObjC/selector-overload.m:34:1: note: also found","clang/test/SemaObjC/selector-overload.m:40:1: note: also found"}
}
},
},
["note_ambig_member_ref_object_type"]={
["note_ambig_member_ref_object_type"]={
[f]="lookup in the object type A refers here",
[b]="lookup in the object type A refers here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="lookup in the object type %0 refers here",
[h]="lookup in the object type %0 refers here",
[g]=b,
[j]=i,
[e]="lookup in the object type (.*?) refers here",
[k]="lookup in the object type (.*?) refers here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"b7bfe794129f",1251932376,"Rewrite of our handling of name lookup in C++ member access expressions, e.g.,"},
[m]={"b7bfe794129f",1251932376,"Rewrite of our handling of name lookup in C++ member access expressions, e.g.,"},
[n]={{cc,684,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///      \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  if (AcceptSpec) {\n    if (!ObjectType.isNull() && !ObjectTypeSearchedInScope && !getLangOpts().CPlusPlus11) {\n      if (isAcceptableNestedNameSpecifier(OuterDecl) && OuterDecl->getCanonicalDecl() != SD->getCanonicalDecl() && (!isa<TypeDecl>(OuterDecl) || !isa<TypeDecl>(SD) || !Context.hasSameType(Context.getTypeDeclType(cast<TypeDecl>(OuterDecl)), Context.getTypeDeclType(cast<TypeDecl>(SD))))) {\n        Diag(SD->getLocation(), diag::note_ambig_member_ref_object_type) << ObjectType;"},{u,609,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  if (S && !ObjectType.isNull() && !ObjectTypeSearchedInScope && !getLangOpts().CPlusPlus11) {\n    if (FoundOuter.empty()) {\n    } else if (FoundOuter.isAmbiguous() || !FoundOuter.isSingleResult() || !(OuterTemplate = getAsTemplateNameDecl(FoundOuter.getFoundDecl()))) {\n    } else if (!Found.isSuppressingDiagnostics()) {\n      //  - if the name found is a class template, it must refer to the same\n      //    entity as the one found in the class of the object expression,\n      //    otherwise the program is ill-formed.\n      if (!Found.isSingleResult() || getAsTemplateNameDecl(Found.getFoundDecl())->getCanonicalDecl() != OuterTemplate->getCanonicalDecl()) {\n        Diag(Found.getRepresentativeDecl()->getLocation(), diag::note_ambig_member_ref_object_type) << ObjectType;"}}
[n]={{jc,684,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///      \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  if (AcceptSpec) {\n    if (!ObjectType.isNull() && !ObjectTypeSearchedInScope && !getLangOpts().CPlusPlus11) {\n      if (isAcceptableNestedNameSpecifier(OuterDecl) && OuterDecl->getCanonicalDecl() != SD->getCanonicalDecl() && (!isa<TypeDecl>(OuterDecl) || !isa<TypeDecl>(SD) || !Context.hasSameType(Context.getTypeDeclType(cast<TypeDecl>(OuterDecl)), Context.getTypeDeclType(cast<TypeDecl>(SD))))) {\n        Diag(SD->getLocation(), diag::note_ambig_member_ref_object_type) << ObjectType;"},{v,609,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  if (S && !ObjectType.isNull() && !ObjectTypeSearchedInScope && !getLangOpts().CPlusPlus11) {\n    if (FoundOuter.empty()) {\n    } else if (FoundOuter.isAmbiguous() || !FoundOuter.isSingleResult() || !(OuterTemplate = getAsTemplateNameDecl(FoundOuter.getFoundDecl()))) {\n    } else if (!Found.isSuppressingDiagnostics()) {\n      //  - if the name found is a class template, it must refer to the same\n      //    entity as the one found in the class of the object expression,\n      //    otherwise the program is ill-formed.\n      if (!Found.isSingleResult() || getAsTemplateNameDecl(Found.getFoundDecl())->getCanonicalDecl() != OuterTemplate->getCanonicalDecl()) {\n        Diag(Found.getRepresentativeDecl()->getLocation(), diag::note_ambig_member_ref_object_type) << ObjectType;"}},
[o]={
["clang/test/SemaCXX/qual-id-test.cpp"]={"clang/test/SemaCXX/qual-id-test.cpp:9:16: note: lookup in the object type \'A::sub\' refers here"}
}
},
},
["note_ambig_member_ref_scope"]={
["note_ambig_member_ref_scope"]={
[f]="lookup from the current scope refers here",
[b]="lookup from the current scope refers here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="lookup from the current scope refers here",
[h]="lookup from the current scope refers here",
[g]=b,
[j]=i,
[e]="lookup from the current scope refers here",
[k]="lookup from the current scope refers here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"b7bfe794129f",1251932376,"Rewrite of our handling of name lookup in C++ member access expressions, e.g.,"},
[m]={"b7bfe794129f",1251932376,"Rewrite of our handling of name lookup in C++ member access expressions, e.g.,"},
[n]={{cc,686,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///      \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  if (AcceptSpec) {\n    if (!ObjectType.isNull() && !ObjectTypeSearchedInScope && !getLangOpts().CPlusPlus11) {\n      if (isAcceptableNestedNameSpecifier(OuterDecl) && OuterDecl->getCanonicalDecl() != SD->getCanonicalDecl() && (!isa<TypeDecl>(OuterDecl) || !isa<TypeDecl>(SD) || !Context.hasSameType(Context.getTypeDeclType(cast<TypeDecl>(OuterDecl)), Context.getTypeDeclType(cast<TypeDecl>(SD))))) {\n        Diag(OuterDecl->getLocation(), diag::note_ambig_member_ref_scope);"},{u,612,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  if (S && !ObjectType.isNull() && !ObjectTypeSearchedInScope && !getLangOpts().CPlusPlus11) {\n    if (FoundOuter.empty()) {\n    } else if (FoundOuter.isAmbiguous() || !FoundOuter.isSingleResult() || !(OuterTemplate = getAsTemplateNameDecl(FoundOuter.getFoundDecl()))) {\n    } else if (!Found.isSuppressingDiagnostics()) {\n      //  - if the name found is a class template, it must refer to the same\n      //    entity as the one found in the class of the object expression,\n      //    otherwise the program is ill-formed.\n      if (!Found.isSingleResult() || getAsTemplateNameDecl(Found.getFoundDecl())->getCanonicalDecl() != OuterTemplate->getCanonicalDecl()) {\n        Diag(FoundOuter.getFoundDecl()->getLocation(), diag::note_ambig_member_ref_scope);"}}
[n]={{jc,686,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///      \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  if (AcceptSpec) {\n    if (!ObjectType.isNull() && !ObjectTypeSearchedInScope && !getLangOpts().CPlusPlus11) {\n      if (isAcceptableNestedNameSpecifier(OuterDecl) && OuterDecl->getCanonicalDecl() != SD->getCanonicalDecl() && (!isa<TypeDecl>(OuterDecl) || !isa<TypeDecl>(SD) || !Context.hasSameType(Context.getTypeDeclType(cast<TypeDecl>(OuterDecl)), Context.getTypeDeclType(cast<TypeDecl>(SD))))) {\n        Diag(OuterDecl->getLocation(), diag::note_ambig_member_ref_scope);"},{v,612,"bool Sema::LookupTemplateName(LookupResult &Found, Scope *S, CXXScopeSpec &SS, QualType ObjectType, bool EnteringContext, bool &MemberOfUnknownSpecialization, RequiredTemplateKind RequiredTemplate, AssumedTemplateKind *ATK, bool AllowTypoCorrection) {\n  if (S && !ObjectType.isNull() && !ObjectTypeSearchedInScope && !getLangOpts().CPlusPlus11) {\n    if (FoundOuter.empty()) {\n    } else if (FoundOuter.isAmbiguous() || !FoundOuter.isSingleResult() || !(OuterTemplate = getAsTemplateNameDecl(FoundOuter.getFoundDecl()))) {\n    } else if (!Found.isSuppressingDiagnostics()) {\n      //  - if the name found is a class template, it must refer to the same\n      //    entity as the one found in the class of the object expression,\n      //    otherwise the program is ill-formed.\n      if (!Found.isSingleResult() || getAsTemplateNameDecl(Found.getFoundDecl())->getCanonicalDecl() != OuterTemplate->getCanonicalDecl()) {\n        Diag(FoundOuter.getFoundDecl()->getLocation(), diag::note_ambig_member_ref_scope);"}},
[o]={
["clang/test/SemaCXX/qual-id-test.cpp"]={"clang/test/SemaCXX/qual-id-test.cpp:94:25: note: lookup from the current scope refers here"}
}
},
},
["note_ambiguous_atomic_constraints"]={
["note_ambiguous_atomic_constraints"]={
[f]="similar constraint expressions not considered equivalent; constraint expressions cannot be considered equivalent unless they originate from the same concept",
[b]="similar constraint expressions not considered equivalent; constraint expressions cannot be considered equivalent unless they originate from the same concept",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="similar constraint expressions not considered equivalent; constraint expressions cannot be considered equivalent unless they originate from the same concept",
[h]="similar constraint expressions not considered equivalent; constraint expressions cannot be considered equivalent unless they originate from the same concept",
[g]=b,
[j]=i,
[e]="similar constraint expressions not considered equivalent; constraint expressions cannot be considered equivalent unless they originate from the same concept",
[k]="similar constraint expressions not considered equivalent; constraint expressions cannot be considered equivalent unless they originate from the same concept",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[n]={{O,1579,"bool Sema::MaybeEmitAmbiguousAtomicConstraintsDiagnostic(NamedDecl *D1, ArrayRef<const Expr *> AC1, NamedDecl *D2, ArrayRef<const Expr *> AC2) {\n  Diag(AmbiguousAtomic1->getBeginLoc(), diag::note_ambiguous_atomic_constraints) << AmbiguousAtomic1->getSourceRange();"}}
[n]={{W,1579,"bool Sema::MaybeEmitAmbiguousAtomicConstraintsDiagnostic(NamedDecl *D1, ArrayRef<const Expr *> AC1, NamedDecl *D2, ArrayRef<const Expr *> AC2) {\n  Diag(AmbiguousAtomic1->getBeginLoc(), diag::note_ambiguous_atomic_constraints) << AmbiguousAtomic1->getSourceRange();"}},
[o]={
["clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp:3:32: note: similar constraint expressions not considered equivalent; constraint expressions cannot be considered equivalent unless they originate from the same concept"}
}
},
},
["note_ambiguous_atomic_constraints_similar_expression"]={
["note_ambiguous_atomic_constraints_similar_expression"]={
[f]="similar constraint expression here",
[b]="similar constraint expression here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="similar constraint expression here",
[h]="similar constraint expression here",
[g]=b,
[j]=i,
[e]="similar constraint expression here",
[k]="similar constraint expression here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[n]={{O,1,"bool Sema::MaybeEmitAmbiguousAtomicConstraintsDiagnostic(NamedDecl *D1, ArrayRef<const Expr *> AC1, NamedDecl *D2, ArrayRef<const Expr *> AC2) {\n  Diag(AmbiguousAtomic2->getBeginLoc(), diag::note_ambiguous_atomic_constraints_similar_expression) << AmbiguousAtomic2->getSourceRange();"}}
[n]={{W,1,"bool Sema::MaybeEmitAmbiguousAtomicConstraintsDiagnostic(NamedDecl *D1, ArrayRef<const Expr *> AC1, NamedDecl *D2, ArrayRef<const Expr *> AC2) {\n  Diag(AmbiguousAtomic2->getBeginLoc(), diag::note_ambiguous_atomic_constraints_similar_expression) << AmbiguousAtomic2->getSourceRange();"}},
[o]={
["clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.order/var-template-partial-specializations.cpp:7:32: note: similar constraint expression here"}
}
},
},
["note_ambiguous_candidate"]={
["note_ambiguous_candidate"]={
[f]="candidate found by name lookup is A",
[b]="candidate found by name lookup is A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="candidate found by name lookup is %q0",
[h]="candidate found by name lookup is %q0",
[g]=b,
[j]=i,
[e]="candidate found by name lookup is (.*?)",
[k]="candidate found by name lookup is (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files."},
[m]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files."},
[n]={{zb,2866,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousReference: {\n    for (auto *D : Result)\n      Diag(D->getLocation(), diag::note_ambiguous_candidate) << D;"}}
[n]={{Wb,2866,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousReference: {\n    for (auto *D : Result)\n      Diag(D->getLocation(), diag::note_ambiguous_candidate) << D;"}},
[o]={
["clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p5.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p5.cpp:14:10: note: candidate found by name lookup is \'B::x\'","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p5.cpp:4:10: note: candidate found by name lookup is \'A::x\'","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p5.cpp:15:9: note: candidate found by name lookup is \'B::x\'","clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p5.cpp:5:7: note: candidate found by name lookup is \'A::x\'"}
}
},
},
["note_ambiguous_inherited_constructor_using"]={
["note_ambiguous_inherited_constructor_using"]={
[f]="inherited from base class A here",
[b]="inherited from base class A here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="inherited from base class %0 here",
[h]="inherited from base class %0 here",
[g]=b,
[j]=i,
[e]="inherited from base class (.*?) here",
[k]="inherited from base class (.*?) here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5179eb78210a",1467140637,"P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:"},
[m]={"5179eb78210a",1467140637,"P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:"},
[n]={{q,7305,"class Sema::InheritedConstructorInfo {\n  InheritedConstructorInfo(Sema &S, SourceLocation UseLoc, ConstructorUsingShadowDecl *Shadow) : S(S), UseLoc(UseLoc) {\n    // Find the set of such base class subobjects and check that there\'s a\n    // unique constructed subobject.\n    for (auto *D : Shadow->redecls()) {\n      // [class.inhctor.init]p2:\n      //  If the constructor was inherited from multiple base class subobjects\n      //  of type B, the program is ill-formed.\n      if (!ConstructedBase) {\n      } else if (ConstructedBase != DConstructedBase && !Shadow->isInvalidDecl()) {\n        if (!DiagnosedMultipleConstructedBases) {\n          S.Diag(ConstructedBaseIntroducer->getLocation(), diag::note_ambiguous_inherited_constructor_using) << ConstructedBase;"},{q,7310,"class Sema::InheritedConstructorInfo {\n  InheritedConstructorInfo(Sema &S, SourceLocation UseLoc, ConstructorUsingShadowDecl *Shadow) : S(S), UseLoc(UseLoc) {\n    // Find the set of such base class subobjects and check that there\'s a\n    // unique constructed subobject.\n    for (auto *D : Shadow->redecls()) {\n      // [class.inhctor.init]p2:\n      //  If the constructor was inherited from multiple base class subobjects\n      //  of type B, the program is ill-formed.\n      if (!ConstructedBase) {\n      } else if (ConstructedBase != DConstructedBase && !Shadow->isInvalidDecl()) {\n        S.Diag(D->getIntroducer()->getLocation(), diag::note_ambiguous_inherited_constructor_using) << DConstructedBase;"}}
[n]={{r,7305,"class Sema::InheritedConstructorInfo {\n  InheritedConstructorInfo(Sema &S, SourceLocation UseLoc, ConstructorUsingShadowDecl *Shadow) : S(S), UseLoc(UseLoc) {\n    // Find the set of such base class subobjects and check that there\'s a\n    // unique constructed subobject.\n    for (auto *D : Shadow->redecls()) {\n      // [class.inhctor.init]p2:\n      //  If the constructor was inherited from multiple base class subobjects\n      //  of type B, the program is ill-formed.\n      if (!ConstructedBase) {\n      } else if (ConstructedBase != DConstructedBase && !Shadow->isInvalidDecl()) {\n        if (!DiagnosedMultipleConstructedBases) {\n          S.Diag(ConstructedBaseIntroducer->getLocation(), diag::note_ambiguous_inherited_constructor_using) << ConstructedBase;"},{r,7310,"class Sema::InheritedConstructorInfo {\n  InheritedConstructorInfo(Sema &S, SourceLocation UseLoc, ConstructorUsingShadowDecl *Shadow) : S(S), UseLoc(UseLoc) {\n    // Find the set of such base class subobjects and check that there\'s a\n    // unique constructed subobject.\n    for (auto *D : Shadow->redecls()) {\n      // [class.inhctor.init]p2:\n      //  If the constructor was inherited from multiple base class subobjects\n      //  of type B, the program is ill-formed.\n      if (!ConstructedBase) {\n      } else if (ConstructedBase != DConstructedBase && !Shadow->isInvalidDecl()) {\n        S.Diag(D->getIntroducer()->getLocation(), diag::note_ambiguous_inherited_constructor_using) << DConstructedBase;"}},
[o]={
["clang/test/CXX/special/class.init/class.inhctor.init/p2.cpp"]={"clang/test/CXX/special/class.init/class.inhctor.init/p2.cpp:12:15: note: inherited from base class \'C2\' here","clang/test/CXX/special/class.init/class.inhctor.init/p2.cpp:11:15: note: inherited from base class \'C1\' here"}
}
},
},
["note_ambiguous_member_found"]={
["note_ambiguous_member_found"]={
[f]="member found by ambiguous name lookup",
[b]="member found by ambiguous name lookup",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="member found by ambiguous name lookup",
[h]="member found by ambiguous name lookup",
[g]=b,
[j]=i,
[e]="member found by ambiguous name lookup",
[k]="member found by ambiguous name lookup",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files."},
[m]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files."},
[n]={{zb,2807,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousBaseSubobjects: {\n    Diag((*Found)->getLocation(), diag::note_ambiguous_member_found);"},{zb,2831,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousBaseSubobjectTypes: {\n    for (CXXBasePaths::paths_iterator Path = Paths->begin(), PathEnd = Paths->end(); Path != PathEnd; ++Path) {\n      if (DeclsPrinted.insert(D).second) {\n        if (const auto *TD = dyn_cast<TypedefNameDecl>(D->getUnderlyingDecl()))\n        else if (const auto *TD = dyn_cast<TypeDecl>(D->getUnderlyingDecl()))\n        else\n          Diag(D->getLocation(), diag::note_ambiguous_member_found);"}}
[n]={{Wb,2807,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousBaseSubobjects: {\n    Diag((*Found)->getLocation(), diag::note_ambiguous_member_found);"},{Wb,2831,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousBaseSubobjectTypes: {\n    for (CXXBasePaths::paths_iterator Path = Paths->begin(), PathEnd = Paths->end(); Path != PathEnd; ++Path) {\n      if (DeclsPrinted.insert(D).second) {\n        if (const auto *TD = dyn_cast<TypedefNameDecl>(D->getUnderlyingDecl()))\n        else if (const auto *TD = dyn_cast<TypeDecl>(D->getUnderlyingDecl()))\n        else\n          Diag(D->getLocation(), diag::note_ambiguous_member_found);"}},
[o]={
["clang/test/SemaCXX/lookup-member.cpp"]={"clang/test/SemaCXX/lookup-member.cpp:30:30: note: member found by ambiguous name lookup","clang/test/SemaCXX/lookup-member.cpp:36:30: note: member found by ambiguous name lookup"}
}
},
},
["note_ambiguous_member_type_found"]={
["note_ambiguous_member_type_found"]={
[f]="member type A found by ambiguous name lookup",
[b]="member type A found by ambiguous name lookup",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="member type %0 found by ambiguous name lookup",
[h]="member type %0 found by ambiguous name lookup",
[g]=b,
[j]=i,
[e]="member type (.*?) found by ambiguous name lookup",
[k]="member type (.*?) found by ambiguous name lookup",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={T,1590001902,S},
[m]={pb,1590001902,qb},
[n]={{zb,2825,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousBaseSubobjectTypes: {\n    for (CXXBasePaths::paths_iterator Path = Paths->begin(), PathEnd = Paths->end(); Path != PathEnd; ++Path) {\n      if (DeclsPrinted.insert(D).second) {\n        if (const auto *TD = dyn_cast<TypedefNameDecl>(D->getUnderlyingDecl()))\n          Diag(D->getLocation(), diag::note_ambiguous_member_type_found) << TD->getUnderlyingType();"},{zb,2828,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousBaseSubobjectTypes: {\n    for (CXXBasePaths::paths_iterator Path = Paths->begin(), PathEnd = Paths->end(); Path != PathEnd; ++Path) {\n      if (DeclsPrinted.insert(D).second) {\n        if (const auto *TD = dyn_cast<TypedefNameDecl>(D->getUnderlyingDecl()))\n        else if (const auto *TD = dyn_cast<TypeDecl>(D->getUnderlyingDecl()))\n          Diag(D->getLocation(), diag::note_ambiguous_member_type_found) << Context.getTypeDeclType(TD);"}}
[n]={{Wb,2825,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousBaseSubobjectTypes: {\n    for (CXXBasePaths::paths_iterator Path = Paths->begin(), PathEnd = Paths->end(); Path != PathEnd; ++Path) {\n      if (DeclsPrinted.insert(D).second) {\n        if (const auto *TD = dyn_cast<TypedefNameDecl>(D->getUnderlyingDecl()))\n          Diag(D->getLocation(), diag::note_ambiguous_member_type_found) << TD->getUnderlyingType();"},{Wb,2828,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousBaseSubobjectTypes: {\n    for (CXXBasePaths::paths_iterator Path = Paths->begin(), PathEnd = Paths->end(); Path != PathEnd; ++Path) {\n      if (DeclsPrinted.insert(D).second) {\n        if (const auto *TD = dyn_cast<TypedefNameDecl>(D->getUnderlyingDecl()))\n        else if (const auto *TD = dyn_cast<TypeDecl>(D->getUnderlyingDecl()))\n          Diag(D->getLocation(), diag::note_ambiguous_member_type_found) << Context.getTypeDeclType(TD);"}},
[o]={
["clang/test/SemaCXX/member-name-lookup.cpp"]={"clang/test/SemaCXX/member-name-lookup.cpp:23:8: note: member type \'B::E3\' found by ambiguous name lookup","clang/test/SemaCXX/member-name-lookup.cpp:30:8: note: member type \'C::E3\' found by ambiguous name lookup","clang/test/SemaCXX/member-name-lookup.cpp:23:8: note: member type \'B::E3\' found by ambiguous name lookup","clang/test/SemaCXX/member-name-lookup.cpp:30:8: note: member type \'C::E3\' found by ambiguous name lookup","clang/test/SemaCXX/member-name-lookup.cpp:74:8: note: member type \'B2::E3\' found by ambiguous name lookup","clang/test/SemaCXX/member-name-lookup.cpp:81:8: note: member type \'C2::E3\' found by ambiguous name lookup","clang/test/SemaCXX/member-name-lookup.cpp:74:8: note: member type \'B2::E3\' found by ambiguous name lookup","clang/test/SemaCXX/member-name-lookup.cpp:81:8: note: member type \'C2::E3\' found by ambiguous name lookup","clang/test/SemaCXX/member-name-lookup.cpp:135:10: note: member type \'HasMemberType1::type\' found by ambiguous name lookup","clang/test/SemaCXX/member-name-lookup.cpp:139:10: note: member type \'HasMemberType2::type\' found by ambiguous name lookup"}
}
},
},
["note_ambiguous_type_conversion"]={
["note_ambiguous_type_conversion"]={
[f]="because of ambiguity in conversion of A to B",
[b]="because of ambiguity in conversion of A to B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="because of ambiguity in conversion %diff{of $ to $|between types}0,1",
[h]="because of ambiguity in conversion %diff{of $ to $|between types}0,1",
[g]=b,
[j]=i,
[e]="because of ambiguity in conversion (?:of (.*?) to (.*?)|between types)",
[k]="because of ambiguity in conversion (?:of (.*?) to (.*?)|between types)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"574de2c5a4f0",1255369879,"If built-in operators could not be selected because of ambiguity in"},
[m]={"574de2c5a4f0",1255369879,"If built-in operators could not be selected because of ambiguity in"},
[n]={{P,11697,"static void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc, OverloadCandidate *Cand) {\n  for (const ImplicitConversionSequence &ICS : Cand->Conversions) {\n    ICS.DiagnoseAmbiguousConversion(S, OpLoc, S.PDiag(diag::note_ambiguous_type_conversion));"}}
[n]={{X,11697,"static void NoteAmbiguousUserConversions(Sema &S, SourceLocation OpLoc, OverloadCandidate *Cand) {\n  for (const ImplicitConversionSequence &ICS : Cand->Conversions) {\n    ICS.DiagnoseAmbiguousConversion(S, OpLoc, S.PDiag(diag::note_ambiguous_type_conversion));"}},
[o]={
["clang/test/SemaCXX/builtin-ptrtomember-overload-1.cpp"]={"clang/test/SemaCXX/builtin-ptrtomember-overload-1.cpp:43:19: note: because of ambiguity in conversion of \'C1\' to \'E *\'"}
}
},
},
["note_anonymous_namespace"]={
["note_anonymous_namespace"]={
[f]="anonymous namespace begins here",
[b]="anonymous namespace begins here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="anonymous namespace begins here",
[h]="anonymous namespace begins here",
[g]=b,
[j]=i,
[e]="anonymous namespace begins here",
[k]="anonymous namespace begins here",
[d]=a,
[l]=a,
[c]=Sb,
[c]=fc,
[m]={"e181de7f4fe9",1555973411,"[c++2a] Implement semantic restrictions for \'export\' declarations."},
[m]={"e181de7f4fe9",1555973411,"[c++2a] Implement semantic restrictions for \'export\' declarations."},
[n]={{cb,790,"/// We have parsed the start of an export declaration, including the \'{\'\n/// (if present).\nDecl *Sema::ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc, SourceLocation LBraceLoc) {\n  for (const DeclContext *DC = CurContext; DC; DC = DC->getLexicalParent()) {\n    if (const auto *ND = dyn_cast<NamespaceDecl>(DC)) {\n      //  An export-declaration shall not appear directly or indirectly within\n      //  an unnamed namespace [...]\n      if (ND->isAnonymousNamespace()) {\n        Diag(ND->getLocation(), diag::note_anonymous_namespace);"}}
[n]={{ib,790,"/// We have parsed the start of an export declaration, including the \'{\'\n/// (if present).\nDecl *Sema::ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc, SourceLocation LBraceLoc) {\n  for (const DeclContext *DC = CurContext; DC; DC = DC->getLexicalParent()) {\n    if (const auto *ND = dyn_cast<NamespaceDecl>(DC)) {\n      //  An export-declaration shall not appear directly or indirectly within\n      //  an unnamed namespace [...]\n      if (ND->isAnonymousNamespace()) {\n        Diag(ND->getLocation(), diag::note_anonymous_namespace);"}},
[o]={
["clang/test/CXX/module/module.interface/p3.cpp"]={"clang/test/CXX/module/module.interface/p3.cpp:50:11: note: anonymous namespace begins here"}
}
},
},
["note_arc_bridge"]={
["note_arc_bridge"]={
[f]="use __bridge to convert directly (no change in ownership)",
[b]="use __bridge to convert directly (no change in ownership)",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use __bridge to convert directly (no change in ownership)",
[h]="use __bridge to convert directly (no change in ownership)",
[g]=b,
[j]=i,
[e]="use __bridge to convert directly \\(no change in ownership\\)",
[k]="use __bridge to convert directly \\(no change in ownership\\)",
[d]=a,
[l]=a,
[c]=Xb,
[c]=gc,
[m]={Ib,1308178962,Hb},
[m]={Sb,1308178962,Rb},
[n]={{s,3933,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from an ARC type to a CF type.\n  if (castACTC == ACTC_retainable && isAnyRetainable(exprACTC)) {\n    if (CreateRule != ACC_plusOne) {\n      auto DiagB = (CCK != Sema::CCK_OtherCast) ? S.Diag(noteLoc, diag::note_arc_bridge) : S.Diag(noteLoc, diag::note_arc_cstyle_bridge);"},{s,3974,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from a CF type to an ARC type.\n  if (exprACTC == ACTC_retainable && isAnyRetainable(castACTC)) {\n    if (CreateRule != ACC_plusOne) {\n      auto DiagB = (CCK != Sema::CCK_OtherCast) ? S.Diag(noteLoc, diag::note_arc_bridge) : S.Diag(noteLoc, diag::note_arc_cstyle_bridge);"},{s,4672,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n    case OBC_BridgeRetained: {\n      Diag(BridgeKeywordLoc, diag::note_arc_bridge) << FixItHint::CreateReplacement(BridgeKeywordLoc, \"__bridge\");"},{s,4716,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n  } else if (T->isCARCBridgableType() && FromType->isObjCARCBridgableType()) {\n    case OBC_BridgeTransfer: {\n      Diag(BridgeKeywordLoc, diag::note_arc_bridge) << FixItHint::CreateReplacement(BridgeKeywordLoc, \"__bridge \");"}}
[n]={{t,3933,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from an ARC type to a CF type.\n  if (castACTC == ACTC_retainable && isAnyRetainable(exprACTC)) {\n    if (CreateRule != ACC_plusOne) {\n      auto DiagB = (CCK != Sema::CCK_OtherCast) ? S.Diag(noteLoc, diag::note_arc_bridge) : S.Diag(noteLoc, diag::note_arc_cstyle_bridge);"},{t,3974,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from a CF type to an ARC type.\n  if (exprACTC == ACTC_retainable && isAnyRetainable(castACTC)) {\n    if (CreateRule != ACC_plusOne) {\n      auto DiagB = (CCK != Sema::CCK_OtherCast) ? S.Diag(noteLoc, diag::note_arc_bridge) : S.Diag(noteLoc, diag::note_arc_cstyle_bridge);"},{t,4672,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n    case OBC_BridgeRetained: {\n      Diag(BridgeKeywordLoc, diag::note_arc_bridge) << FixItHint::CreateReplacement(BridgeKeywordLoc, \"__bridge\");"},{t,4716,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n  } else if (T->isCARCBridgableType() && FromType->isObjCARCBridgableType()) {\n    case OBC_BridgeTransfer: {\n      Diag(BridgeKeywordLoc, diag::note_arc_bridge) << FixItHint::CreateReplacement(BridgeKeywordLoc, \"__bridge \");"}},
[o]={
["clang/test/SemaObjC/arc-cf.m"]={"clang/test/SemaObjC/arc-cf.m:18:8: note: use __bridge to convert directly (no change in ownership)"}
}
},
},
["note_arc_bridge_retained"]={
["note_arc_bridge_retained"]={
[f]="use ... to make an ARC object available as a +1 A",
[b]="use ... to make an ARC object available as a +1 A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use %select{__bridge_retained|CFBridgingRetain call}1 to make an ARC object available as a +1 %0",
[h]="use %select{__bridge_retained|CFBridgingRetain call}1 to make an ARC object available as a +1 %0",
[g]=b,
[j]=i,
[e]="use (?:__bridge_retained|CFBridgingRetain call) to make an ARC object available as a \\+1 (.*?)",
[k]="use (?:__bridge_retained|CFBridgingRetain call) to make an ARC object available as a \\+1 (.*?)",
[d]=a,
[l]=a,
[c]=Xb,
[c]=gc,
[m]={Ib,1308178962,Hb},
[m]={Sb,1308178962,Rb},
[n]={{s,3986,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from a CF type to an ARC type.\n  if (exprACTC == ACTC_retainable && isAnyRetainable(castACTC)) {\n    if (CreateRule != ACC_plusZero) {\n      auto DiagB = (CCK == Sema::CCK_OtherCast && !br) ? S.Diag(noteLoc, diag::note_arc_cstyle_bridge_retained) << castType : S.Diag(br ? castExpr->getExprLoc() : noteLoc, diag::note_arc_bridge_retained) << castType << br;"},{s,4718,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n  } else if (T->isCARCBridgableType() && FromType->isObjCARCBridgableType()) {\n    case OBC_BridgeTransfer: {\n      Diag(BridgeKeywordLoc, diag::note_arc_bridge_retained) << T << br << FixItHint::CreateReplacement(BridgeKeywordLoc, br ? \"CFBridgingRetain \" : \"__bridge_retained\");"}}
[n]={{t,3986,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from a CF type to an ARC type.\n  if (exprACTC == ACTC_retainable && isAnyRetainable(castACTC)) {\n    if (CreateRule != ACC_plusZero) {\n      auto DiagB = (CCK == Sema::CCK_OtherCast && !br) ? S.Diag(noteLoc, diag::note_arc_cstyle_bridge_retained) << castType : S.Diag(br ? castExpr->getExprLoc() : noteLoc, diag::note_arc_bridge_retained) << castType << br;"},{t,4718,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n  } else if (T->isCARCBridgableType() && FromType->isObjCARCBridgableType()) {\n    case OBC_BridgeTransfer: {\n      Diag(BridgeKeywordLoc, diag::note_arc_bridge_retained) << T << br << FixItHint::CreateReplacement(BridgeKeywordLoc, br ? \"CFBridgingRetain \" : \"__bridge_retained\");"}},
[o]={
["clang/test/ARCMT/nonobjc-to-objc-cast-2.m"]={"clang/test/ARCMT/nonobjc-to-objc-cast-2.m:41:14: note: use CFBridgingRetain call to make an ARC object available as a +1 \'void *\'","clang/test/ARCMT/nonobjc-to-objc-cast-2.m:46:23: note: use CFBridgingRetain call to make an ARC object available as a +1 \'CFStringRef\' (aka \'const struct __CFString *\')","clang/test/ARCMT/nonobjc-to-objc-cast-2.m:61:29: note: use CFBridgingRetain call to make an ARC object available as a +1 \'CFStringRef\' (aka \'const struct __CFString *\')"}
}
},
},
["note_arc_bridge_transfer"]={
["note_arc_bridge_transfer"]={
[f]="use ... to transfer ownership of a +1 A into ARC",
[b]="use ... to transfer ownership of a +1 A into ARC",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use %select{__bridge_transfer|CFBridgingRelease call}1 to transfer ownership of a +1 %0 into ARC",
[h]="use %select{__bridge_transfer|CFBridgingRelease call}1 to transfer ownership of a +1 %0 into ARC",
[g]=b,
[j]=i,
[e]="use (?:__bridge_transfer|CFBridgingRelease call) to transfer ownership of a \\+1 (.*?) into ARC",
[k]="use (?:__bridge_transfer|CFBridgingRelease call) to transfer ownership of a \\+1 (.*?) into ARC",
[d]=a,
[l]=a,
[c]=Xb,
[c]=gc,
[m]={Ib,1308178962,Hb},
[m]={Sb,1308178962,Rb},
[n]={{s,3946,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from an ARC type to a CF type.\n  if (castACTC == ACTC_retainable && isAnyRetainable(exprACTC)) {\n    if (CreateRule != ACC_plusZero) {\n      auto DiagB = (CCK == Sema::CCK_OtherCast && !br) ? S.Diag(noteLoc, diag::note_arc_cstyle_bridge_transfer) << castExprType : S.Diag(br ? castExpr->getExprLoc() : noteLoc, diag::note_arc_bridge_transfer) << castExprType << br;"},{s,4674,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n    case OBC_BridgeRetained: {\n      Diag(BridgeKeywordLoc, diag::note_arc_bridge_transfer) << FromType << br << FixItHint::CreateReplacement(BridgeKeywordLoc, br ? \"CFBridgingRelease \" : \"__bridge_transfer \");"}}
[n]={{t,3946,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from an ARC type to a CF type.\n  if (castACTC == ACTC_retainable && isAnyRetainable(exprACTC)) {\n    if (CreateRule != ACC_plusZero) {\n      auto DiagB = (CCK == Sema::CCK_OtherCast && !br) ? S.Diag(noteLoc, diag::note_arc_cstyle_bridge_transfer) << castExprType : S.Diag(br ? castExpr->getExprLoc() : noteLoc, diag::note_arc_bridge_transfer) << castExprType << br;"},{t,4674,"ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *SubExpr) {\n  if (T->isDependentType() || SubExpr->isTypeDependent()) {\n  } else if (T->isObjCARCBridgableType() && FromType->isCARCBridgableType()) {\n    case OBC_BridgeRetained: {\n      Diag(BridgeKeywordLoc, diag::note_arc_bridge_transfer) << FromType << br << FixItHint::CreateReplacement(BridgeKeywordLoc, br ? \"CFBridgingRelease \" : \"__bridge_transfer \");"}},
[o]={
["clang/test/SemaObjC/arc-cf.m"]={"clang/test/SemaObjC/arc-cf.m:18:12: note: use CFBridgingRelease call to transfer ownership of a +1 \'CFStringRef\' (aka \'const struct __CFString *\') into ARC","clang/test/SemaObjC/arc-cf.m:19:12: note: use CFBridgingRelease call to transfer ownership of a +1 \'CFStringRef\' (aka \'const struct __CFString *\') into ARC","clang/test/SemaObjC/arc-cf.m:27:12: note: use CFBridgingRelease call to transfer ownership of a +1 \'CFStringRef\' (aka \'const struct __CFString *\') into ARC","clang/test/SemaObjC/arc-cf.m:45:12: note: use CFBridgingRelease call to transfer ownership of a +1 \'CFStringRef\' (aka \'const struct __CFString *\') into ARC","clang/test/SemaObjC/arc-cf.m:46:12: note: use CFBridgingRelease call to transfer ownership of a +1 \'CFStringRef\' (aka \'const struct __CFString *\') into ARC"}
}
},
},
["note_arc_cstyle_bridge"]={
["note_arc_cstyle_bridge"]={
[f]="use __bridge with C-style cast to convert directly (no change in ownership)",
[b]="use __bridge with C-style cast to convert directly (no change in ownership)",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use __bridge with C-style cast to convert directly (no change in ownership)",
[h]="use __bridge with C-style cast to convert directly (no change in ownership)",
[g]=b,
[j]=i,
[e]="use __bridge with C\\-style cast to convert directly \\(no change in ownership\\)",
[k]="use __bridge with C\\-style cast to convert directly \\(no change in ownership\\)",
[d]=a,
[l]=a,
[c]=Xb,
[c]=gc,
[m]={"ac2d082f58e6",1361496168,"objective-C arc: Diagnostic can not say to use bridge"},
[m]={"ac2d082f58e6",1361496168,"objective-C arc: Diagnostic can not say to use bridge"},
[n]={{s,3934,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from an ARC type to a CF type.\n  if (castACTC == ACTC_retainable && isAnyRetainable(exprACTC)) {\n    if (CreateRule != ACC_plusOne) {\n      auto DiagB = (CCK != Sema::CCK_OtherCast) ? S.Diag(noteLoc, diag::note_arc_bridge) : S.Diag(noteLoc, diag::note_arc_cstyle_bridge);"},{s,3975,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from a CF type to an ARC type.\n  if (exprACTC == ACTC_retainable && isAnyRetainable(castACTC)) {\n    if (CreateRule != ACC_plusOne) {\n      auto DiagB = (CCK != Sema::CCK_OtherCast) ? S.Diag(noteLoc, diag::note_arc_bridge) : S.Diag(noteLoc, diag::note_arc_cstyle_bridge);"}}
[n]={{t,3934,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from an ARC type to a CF type.\n  if (castACTC == ACTC_retainable && isAnyRetainable(exprACTC)) {\n    if (CreateRule != ACC_plusOne) {\n      auto DiagB = (CCK != Sema::CCK_OtherCast) ? S.Diag(noteLoc, diag::note_arc_bridge) : S.Diag(noteLoc, diag::note_arc_cstyle_bridge);"},{t,3975,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from a CF type to an ARC type.\n  if (exprACTC == ACTC_retainable && isAnyRetainable(castACTC)) {\n    if (CreateRule != ACC_plusOne) {\n      auto DiagB = (CCK != Sema::CCK_OtherCast) ? S.Diag(noteLoc, diag::note_arc_bridge) : S.Diag(noteLoc, diag::note_arc_cstyle_bridge);"}},
[o]={
["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:30:21: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:56:20: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:60:20: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:63:20: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:67:20: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:70:31: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:73:31: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:77:20: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:81:31: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:89:20: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:92:19: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:95:19: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:102:21: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:105:19: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:108:19: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:111:19: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:114:19: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:121:30: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:124:30: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:127:30: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:130:30: note: use __bridge with C-style cast to convert directly (no change in ownership)","clang/test/SemaObjCXX/objcbridge-static-cast.mm:133:30: note: use __bridge with C-style cast to convert directly (no change in ownership)"}
}
},
},
["note_arc_cstyle_bridge_retained"]={
["note_arc_cstyle_bridge_retained"]={
[f]="use __bridge_retained with C-style cast to make an ARC object available as a +1 A",
[b]="use __bridge_retained with C-style cast to make an ARC object available as a +1 A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use __bridge_retained with C-style cast to make an ARC object available as a +1 %0",
[h]="use __bridge_retained with C-style cast to make an ARC object available as a +1 %0",
[g]=b,
[j]=i,
[e]="use __bridge_retained with C\\-style cast to make an ARC object available as a \\+1 (.*?)",
[k]="use __bridge_retained with C\\-style cast to make an ARC object available as a \\+1 (.*?)",
[d]=a,
[l]=a,
[c]=Xb,
[c]=gc,
[m]={"ac2d082f58e6",1361496168,"objective-C arc: Diagnostic can not say to use bridge"},
[m]={"ac2d082f58e6",1361496168,"objective-C arc: Diagnostic can not say to use bridge"},
[n]={{s,3983,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from a CF type to an ARC type.\n  if (exprACTC == ACTC_retainable && isAnyRetainable(castACTC)) {\n    if (CreateRule != ACC_plusZero) {\n      auto DiagB = (CCK == Sema::CCK_OtherCast && !br) ? S.Diag(noteLoc, diag::note_arc_cstyle_bridge_retained) << castType : S.Diag(br ? castExpr->getExprLoc() : noteLoc, diag::note_arc_bridge_retained) << castType << br;"}}
[n]={{t,3983,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from a CF type to an ARC type.\n  if (exprACTC == ACTC_retainable && isAnyRetainable(castACTC)) {\n    if (CreateRule != ACC_plusZero) {\n      auto DiagB = (CCK == Sema::CCK_OtherCast && !br) ? S.Diag(noteLoc, diag::note_arc_cstyle_bridge_retained) << castType : S.Diag(br ? castExpr->getExprLoc() : noteLoc, diag::note_arc_bridge_retained) << castType << br;"}},
[o]={
["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:70:31: note: use __bridge_retained with C-style cast to make an ARC object available as a +1 \'CFErrorRef\' (aka \'__CFErrorRef *\')","clang/test/SemaObjCXX/objcbridge-static-cast.mm:73:31: note: use __bridge_retained with C-style cast to make an ARC object available as a +1 \'CFErrorRef\' (aka \'__CFErrorRef *\')","clang/test/SemaObjCXX/objcbridge-static-cast.mm:81:31: note: use __bridge_retained with C-style cast to make an ARC object available as a +1 \'CFErrorRef\' (aka \'__CFErrorRef *\')","clang/test/SemaObjCXX/objcbridge-static-cast.mm:121:30: note: use __bridge_retained with C-style cast to make an ARC object available as a +1 \'CFErrorRef\' (aka \'__CFErrorRef *\')","clang/test/SemaObjCXX/objcbridge-static-cast.mm:124:30: note: use __bridge_retained with C-style cast to make an ARC object available as a +1 \'CFErrorRef\' (aka \'__CFErrorRef *\')","clang/test/SemaObjCXX/objcbridge-static-cast.mm:127:30: note: use __bridge_retained with C-style cast to make an ARC object available as a +1 \'CFErrorRef\' (aka \'__CFErrorRef *\')","clang/test/SemaObjCXX/objcbridge-static-cast.mm:130:30: note: use __bridge_retained with C-style cast to make an ARC object available as a +1 \'CFErrorRef\' (aka \'__CFErrorRef *\')","clang/test/SemaObjCXX/objcbridge-static-cast.mm:133:30: note: use __bridge_retained with C-style cast to make an ARC object available as a +1 \'CFErrorRef\' (aka \'__CFErrorRef *\')"}
}
},
},
["note_arc_cstyle_bridge_transfer"]={
["note_arc_cstyle_bridge_transfer"]={
[f]="use __bridge_transfer with C-style cast to transfer ownership of a +1 A into ARC",
[b]="use __bridge_transfer with C-style cast to transfer ownership of a +1 A into ARC",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use __bridge_transfer with C-style cast to transfer ownership of a +1 %0 into ARC",
[h]="use __bridge_transfer with C-style cast to transfer ownership of a +1 %0 into ARC",
[g]=b,
[j]=i,
[e]="use __bridge_transfer with C\\-style cast to transfer ownership of a \\+1 (.*?) into ARC",
[k]="use __bridge_transfer with C\\-style cast to transfer ownership of a \\+1 (.*?) into ARC",
[d]=a,
[l]=a,
[c]=Xb,
[c]=gc,
[m]={"ac2d082f58e6",1361496168,"objective-C arc: Diagnostic can not say to use bridge"},
[m]={"ac2d082f58e6",1361496168,"objective-C arc: Diagnostic can not say to use bridge"},
[n]={{s,3943,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from an ARC type to a CF type.\n  if (castACTC == ACTC_retainable && isAnyRetainable(exprACTC)) {\n    if (CreateRule != ACC_plusZero) {\n      auto DiagB = (CCK == Sema::CCK_OtherCast && !br) ? S.Diag(noteLoc, diag::note_arc_cstyle_bridge_transfer) << castExprType : S.Diag(br ? castExpr->getExprLoc() : noteLoc, diag::note_arc_bridge_transfer) << castExprType << br;"}}
[n]={{t,3943,"static void diagnoseObjCARCConversion(Sema &S, SourceRange castRange, QualType castType, ARCConversionTypeClass castACTC, Expr *castExpr, Expr *realCast, ARCConversionTypeClass exprACTC, Sema::CheckedConversionKind CCK) {\n  // Bridge from an ARC type to a CF type.\n  if (castACTC == ACTC_retainable && isAnyRetainable(exprACTC)) {\n    if (CreateRule != ACC_plusZero) {\n      auto DiagB = (CCK == Sema::CCK_OtherCast && !br) ? S.Diag(noteLoc, diag::note_arc_cstyle_bridge_transfer) << castExprType : S.Diag(br ? castExpr->getExprLoc() : noteLoc, diag::note_arc_bridge_transfer) << castExprType << br;"}},
[o]={
["clang/test/SemaObjCXX/objcbridge-static-cast.mm"]={"clang/test/SemaObjCXX/objcbridge-static-cast.mm:30:21: note: use __bridge_transfer with C-style cast to transfer ownership of a +1 \'CFTestingRef\' (aka \'__CFError *\') into ARC","clang/test/SemaObjCXX/objcbridge-static-cast.mm:56:20: note: use __bridge_transfer with C-style cast to transfer ownership of a +1 \'CFErrorRef2\' (aka \'__CFErrorRef *\') into ARC","clang/test/SemaObjCXX/objcbridge-static-cast.mm:60:20: note: use __bridge_transfer with C-style cast to transfer ownership of a +1 \'CFErrorRef2\' (aka \'__CFErrorRef *\') into ARC","clang/test/SemaObjCXX/objcbridge-static-cast.mm:63:20: note: use __bridge_transfer with C-style cast to transfer ownership of a +1 \'CFErrorRef2\' (aka \'__CFErrorRef *\') into ARC","clang/test/SemaObjCXX/objcbridge-static-cast.mm:67:20: note: use __bridge_transfer with C-style cast to transfer ownership of a +1 \'CFUColor2Ref\' (aka \'__CFUPrimeColor *\') into ARC","clang/test/SemaObjCXX/objcbridge-static-cast.mm:77:20: note: use __bridge_transfer with C-style cast to transfer ownership of a +1 \'CFErrorRef2\' (aka \'__CFErrorRef *\') into ARC","clang/test/SemaObjCXX/objcbridge-static-cast.mm:89:20: note: use __bridge_transfer with C-style cast to transfer ownership of a +1 \'CFErrorRef\' (aka \'__CFErrorRef *\') into ARC","clang/test/SemaObjCXX/objcbridge-static-cast.mm:92:19: note: use __bridge_transfer with C-style cast to transfer ownership of a +1 \'CFErrorRef\' (aka \'__CFErrorRef *\') into ARC","clang/test/SemaObjCXX/objcbridge-static-cast.mm:95:19: note: use __bridge_transfer with C-style cast to transfer ownership of a +1 \'CFErrorRef\' (aka \'__CFErrorRef *\') into ARC","clang/test/SemaObjCXX/objcbridge-static-cast.mm:102:21: note: use __bridge_transfer with C-style cast to transfer ownership of a +1 \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') into ARC","clang/test/SemaObjCXX/objcbridge-static-cast.mm:105:19: note: use __bridge_transfer with C-style cast to transfer ownership of a +1 \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') into ARC","clang/test/SemaObjCXX/objcbridge-static-cast.mm:108:19: note: use __bridge_transfer with C-style cast to transfer ownership of a +1 \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') into ARC","clang/test/SemaObjCXX/objcbridge-static-cast.mm:111:19: note: use __bridge_transfer with C-style cast to transfer ownership of a +1 \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') into ARC","clang/test/SemaObjCXX/objcbridge-static-cast.mm:114:19: note: use __bridge_transfer with C-style cast to transfer ownership of a +1 \'CFMyErrorRef\' (aka \'__CFMyErrorRef *\') into ARC"}
}
},
},
["note_arc_field_with_ownership"]={
["note_arc_field_with_ownership"]={
[f]="field has non-trivial ownership qualification",
[b]="field has non-trivial ownership qualification",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="field has non-trivial ownership qualification",
[h]="field has non-trivial ownership qualification",
[g]=b,
[j]=i,
[e]="field has non\\-trivial ownership qualification",
[k]="field has non\\-trivial ownership qualification",
[d]=a,
[l]=a,
[c]=mc,
[c]=Pc,
[m]={lc,1446008599,kc},
[m]={Oc,1446008599,Nc},
[n]={{V,492,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n      if (AL->isImplicit() && AL->getImplicitReason()) {\n        case UnavailableAttr::IR_ARCFieldWithOwnership:\n          diag_available_here = diag::note_arc_field_with_ownership;"}}
[n]={{gb,492,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n      if (AL->isImplicit() && AL->getImplicitReason()) {\n        case UnavailableAttr::IR_ARCFieldWithOwnership:\n          diag_available_here = diag::note_arc_field_with_ownership;"}},
[o]={
["clang/test/SemaObjCXX/arc-system-header.mm"]={"clang/test/SemaObjCXX/Inputs/arc-system-header.h:10:7: note: field has non-trivial ownership qualification"}
}
},
},
["note_arc_forbidden_type"]={
["note_arc_forbidden_type"]={
[f]="declaration uses type that is ill-formed in ARC",
[b]="declaration uses type that is ill-formed in ARC",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declaration uses type that is ill-formed in ARC",
[h]="declaration uses type that is ill-formed in ARC",
[g]=b,
[j]=i,
[e]="declaration uses type that is ill\\-formed in ARC",
[k]="declaration uses type that is ill\\-formed in ARC",
[d]=a,
[l]=a,
[c]=mc,
[c]=Pc,
[m]={lc,1446008599,kc},
[m]={Oc,1446008599,Nc},
[n]={{V,470,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n      if (AL->isImplicit() && AL->getImplicitReason()) {\n        case UnavailableAttr::IR_ARCForbiddenType:\n          diag_available_here = diag::note_arc_forbidden_type;"}}
[n]={{gb,470,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n      if (AL->isImplicit() && AL->getImplicitReason()) {\n        case UnavailableAttr::IR_ARCForbiddenType:\n          diag_available_here = diag::note_arc_forbidden_type;"}},
[o]={
["clang/test/SemaObjC/arc-unavailable-system-function.m"]={"/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:1:6: note: declaration uses type that is ill-formed in ARC"}
}
},
},
["note_arc_gained_method_convention"]={
["note_arc_gained_method_convention"]={
[f]="declaration in interface is not in the \'...\' family because ...",
[b]="declaration in interface is not in the \'...\' family because ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declaration in interface is not in the \'%select{alloc|copy|init|new}0\' family because %select{its result type is not an object pointer|its result type is unrelated to its receiver type}1",
[h]="declaration in interface is not in the \'%select{alloc|copy|init|new}0\' family because %select{its result type is not an object pointer|its result type is unrelated to its receiver type}1",
[g]=b,
[j]=i,
[e]="declaration in interface is not in the \'(?:alloc|copy|init|new)\' family because (?:its result type is not an object pointer|its result type is unrelated to its receiver type)",
[k]="declaration in interface is not in the \'(?:alloc|copy|init|new)\' family because (?:its result type is not an object pointer|its result type is unrelated to its receiver type)",
[d]=a,
[l]=a,
[c]="ARC Semantic Issue",
[c]="ARC Semantic Issue",
[m]={Ib,1308178962,Hb},
[m]={Sb,1308178962,Rb},
[n]={{E,2531,"/// In ARC, check whether the conventional meanings of the two methods\n/// match.  If they don\'t, it\'s a hard error.\nstatic bool checkMethodFamilyMismatch(Sema &S, ObjCMethodDecl *impl, ObjCMethodDecl *decl) {\n  if (declFamily == OMF_None) {\n    noteID = diag::note_arc_gained_method_convention;"}}
[n]={{M,2531,"/// In ARC, check whether the conventional meanings of the two methods\n/// match.  If they don\'t, it\'s a hard error.\nstatic bool checkMethodFamilyMismatch(Sema &S, ObjCMethodDecl *impl, ObjCMethodDecl *decl) {\n  if (declFamily == OMF_None) {\n    noteID = diag::note_arc_gained_method_convention;"}},
[o]={
["clang/test/ARCMT/checking.m"]={"clang/test/ARCMT/checking.m:202:1: note: declaration in interface is not in the \'init\' family because its result type is not an object pointer","clang/test/ARCMT/checking.m:205:1: note: declaration in interface is not in the \'init\' family because its result type is not an object pointer","clang/test/ARCMT/checking.m:206:1: note: declaration in interface is not in the \'init\' family because its result type is not an object pointer"}
}
},
},
["note_arc_init_returns_unrelated"]={
["note_arc_init_returns_unrelated"]={
[f]="init method must return a type related to its receiver type",
[b]="init method must return a type related to its receiver type",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="init method must return a type related to its receiver type",
[h]="init method must return a type related to its receiver type",
[g]=b,
[j]=i,
[e]="init method must return a type related to its receiver type",
[k]="init method must return a type related to its receiver type",
[d]=a,
[l]=a,
[c]=mc,
[c]=Pc,
[m]={lc,1446008599,kc},
[m]={Oc,1446008599,Nc},
[n]={{V,487,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n      if (AL->isImplicit() && AL->getImplicitReason()) {\n        case UnavailableAttr::IR_ARCInitReturnsUnrelated:\n          diag_available_here = diag::note_arc_init_returns_unrelated;"}}
[n]={{gb,487,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n      if (AL->isImplicit() && AL->getImplicitReason()) {\n        case UnavailableAttr::IR_ARCInitReturnsUnrelated:\n          diag_available_here = diag::note_arc_init_returns_unrelated;"}}
},
},
["note_arc_lost_method_convention"]={
["note_arc_lost_method_convention"]={
[f]="declaration in interface",
[b]="declaration in interface",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declaration in interface",
[h]="declaration in interface",
[g]=b,
[j]=i,
[e]="declaration in interface",
[k]="declaration in interface",
[d]=a,
[l]=a,
[c]="ARC Semantic Issue",
[c]="ARC Semantic Issue",
[m]={Ib,1308178962,Hb},
[m]={Sb,1308178962,Rb},
[n]={{E,2526,"/// In ARC, check whether the conventional meanings of the two methods\n/// match.  If they don\'t, it\'s a hard error.\nstatic bool checkMethodFamilyMismatch(Sema &S, ObjCMethodDecl *impl, ObjCMethodDecl *decl) {\n  unsigned noteID = diag::note_arc_lost_method_convention;"}}
[n]={{M,2526,"/// In ARC, check whether the conventional meanings of the two methods\n/// match.  If they don\'t, it\'s a hard error.\nstatic bool checkMethodFamilyMismatch(Sema &S, ObjCMethodDecl *impl, ObjCMethodDecl *decl) {\n  unsigned noteID = diag::note_arc_lost_method_convention;"}},
[o]={
["clang/test/ARCMT/checking.m"]={"clang/test/ARCMT/checking.m:196:1: note: declaration in interface","clang/test/ARCMT/checking.m:211:1: note: declaration in interface","clang/test/ARCMT/checking.m:218:1: note: declaration in interface","clang/test/ARCMT/checking.m:225:1: note: declaration in interface"}
}
},
},
["note_arc_retain_cycle_owner"]={
["note_arc_retain_cycle_owner"]={
[f]="block will be retained by ...",
[b]="block will be retained by ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="block will be retained by %select{the captured object|an object strongly retained by the captured object}0",
[h]="block will be retained by %select{the captured object|an object strongly retained by the captured object}0",
[g]=b,
[j]=i,
[e]="block will be retained by (?:the captured object|an object strongly retained by the captured object)",
[k]="block will be retained by (?:the captured object|an object strongly retained by the captured object)",
[d]=a,
[l]=a,
[c]="ARC Retain Cycle",
[c]="ARC Retain Cycle",
[m]={Ib,1308178962,Hb},
[m]={Sb,1308178962,Rb},
[n]={{y,17475,"static void diagnoseRetainCycle(Sema &S, Expr *capturer, RetainCycleOwner &owner) {\n  S.Diag(owner.Loc, diag::note_arc_retain_cycle_owner) << owner.Indirect << owner.Range;"}}
[n]={{D,17475,"static void diagnoseRetainCycle(Sema &S, Expr *capturer, RetainCycleOwner &owner) {\n  S.Diag(owner.Loc, diag::note_arc_retain_cycle_owner) << owner.Indirect << owner.Range;"}},
[o]={
["clang/test/SemaObjC/warn-retain-cycle.m"]={"clang/test/SemaObjC/warn-retain-cycle.m:11:4: note: block will be retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:13:3: note: block will be retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:16:4: note: block will be retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:31:3: note: block will be retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:48:3: note: block will be retained by an object strongly retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:49:3: note: block will be retained by an object strongly retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:63:3: note: block will be retained by an object strongly retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:69:3: note: block will be retained by an object strongly retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:71:3: note: block will be retained by an object strongly retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:73:3: note: block will be retained by an object strongly retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:81:3: note: block will be retained by an object strongly retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:93:3: note: block will be retained by an object strongly retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:124:4: note: block will be retained by an object strongly retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:148:19: note: block will be retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:153:3: note: block will be retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:169:4: note: block will be retained by the captured object","clang/test/SemaObjC/warn-retain-cycle.m:173:4: note: block will be retained by the captured object"}
}
},
},
["note_arc_weak_also_accessed_here"]={
["note_arc_weak_also_accessed_here"]={
[f]="also accessed here",
[b]="also accessed here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="also accessed here",
[h]="also accessed here",
[g]=b,
[j]=i,
[e]="also accessed here",
[k]="also accessed here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"d393458c3316",1348870890,"Add a warning (off by default) for repeated use of the same weak property."},
[m]={"d393458c3316",1348870890,"Add a warning (off by default) for repeated use of the same weak property."},
[n]={{Z,1512,"static void diagnoseRepeatedUseOfWeak(Sema &S, const sema::FunctionScopeInfo *CurFn, const Decl *D, const ParentMap &PM) {\n  // Iterate through the sorted problems and emit warnings for each.\n  for (const auto &P : UsesByStmt) {\n    // Print all the other accesses as notes.\n    for (const auto &Use : Uses) {\n      S.Diag(Use.getUseExpr()->getBeginLoc(), diag::note_arc_weak_also_accessed_here) << Use.getUseExpr()->getSourceRange();"}}
[n]={{eb,1512,"static void diagnoseRepeatedUseOfWeak(Sema &S, const sema::FunctionScopeInfo *CurFn, const Decl *D, const ParentMap &PM) {\n  // Iterate through the sorted problems and emit warnings for each.\n  for (const auto &P : UsesByStmt) {\n    // Print all the other accesses as notes.\n    for (const auto &Use : Uses) {\n      S.Diag(Use.getUseExpr()->getBeginLoc(), diag::note_arc_weak_also_accessed_here) << Use.getUseExpr()->getSourceRange();"}},
[o]={
["clang/test/SemaObjC/arc-repeated-weak.mm"]={"clang/test/SemaObjC/arc-repeated-weak.mm:24:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:29:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:57:3: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:68:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:73:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:78:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:83:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:94:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:100:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:105:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:114:3: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:120:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:123:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:128:12: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:134:9: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:139:3: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:145:3: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:170:9: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:211:3: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:213:5: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:220:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:221:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:227:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:228:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:234:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:235:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:241:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:242:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:249:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:250:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:312:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:317:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:322:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:325:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:328:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:376:9: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:387:9: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:400:5: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:409:9: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:414:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:421:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:472:7: note: also accessed here","clang/test/SemaObjC/arc-repeated-weak.mm:476:7: note: also accessed here"}
}
},
},
["note_arc_weak_disabled"]={
["note_arc_weak_disabled"]={
[f]="declaration uses __weak, but ARC is disabled",
[b]="declaration uses __weak, but ARC is disabled",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declaration uses __weak, but ARC is disabled",
[h]="declaration uses __weak, but ARC is disabled",
[g]=b,
[j]=i,
[e]="declaration uses __weak, but ARC is disabled",
[k]="declaration uses __weak, but ARC is disabled",
[d]=a,
[l]=a,
[c]=mc,
[c]=Pc,
[m]={lc,1446008599,kc},
[m]={Oc,1446008599,Nc},
[n]={{V,475,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n      if (AL->isImplicit() && AL->getImplicitReason()) {\n        case UnavailableAttr::IR_ForbiddenWeak:\n          if (S.getLangOpts().ObjCWeakRuntime)\n            diag_available_here = diag::note_arc_weak_disabled;"}}
[n]={{gb,475,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n      if (AL->isImplicit() && AL->getImplicitReason()) {\n        case UnavailableAttr::IR_ForbiddenWeak:\n          if (S.getLangOpts().ObjCWeakRuntime)\n            diag_available_here = diag::note_arc_weak_disabled;"}},
[o]={
["clang/test/SemaObjC/mrc-no-weak.m"]={"clang/test/SemaObjC/mrc-no-weak.m:39:13: note: declaration uses __weak, but ARC is disabled","clang/test/SemaObjC/mrc-no-weak.m:39:13: note: declaration uses __weak, but ARC is disabled"}
}
},
},
["note_arc_weak_no_runtime"]={
["note_arc_weak_no_runtime"]={
[f]="declaration uses __weak, which the current deployment target does not support",
[b]="declaration uses __weak, which the current deployment target does not support",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declaration uses __weak, which the current deployment target does not support",
[h]="declaration uses __weak, which the current deployment target does not support",
[g]=b,
[j]=i,
[e]="declaration uses __weak, which the current deployment target does not support",
[k]="declaration uses __weak, which the current deployment target does not support",
[d]=a,
[l]=a,
[c]=mc,
[c]=Pc,
[m]={lc,1446008599,kc},
[m]={Oc,1446008599,Nc},
[n]={{V,477,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n      if (AL->isImplicit() && AL->getImplicitReason()) {\n        case UnavailableAttr::IR_ForbiddenWeak:\n          if (S.getLangOpts().ObjCWeakRuntime)\n          else\n            diag_available_here = diag::note_arc_weak_no_runtime;"}}
[n]={{gb,477,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_Unavailable:\n    if (auto AL = OffendingDecl->getAttr<UnavailableAttr>()) {\n      if (AL->isImplicit() && AL->getImplicitReason()) {\n        case UnavailableAttr::IR_ForbiddenWeak:\n          if (S.getLangOpts().ObjCWeakRuntime)\n          else\n            diag_available_here = diag::note_arc_weak_no_runtime;"}}
},
},
["note_array_declared_here"]={
["note_array_declared_here"]={
[f]="array A declared here",
[b]="array A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="array %0 declared here",
[h]="array %0 declared here",
[g]=b,
[j]=i,
[e]="array (.*?) declared here",
[k]="array (.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Ab,1567434909,Cb},
[m]={Zb,1567434909,Yb},
[n]={{y,17103,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (IsUnboundedArray) {\n    if (index.isUnsigned() || !index.isNegative()) {\n      if (ND)\n        DiagRuntimeBehavior(ND->getBeginLoc(), BaseExpr, PDiag(diag::note_array_declared_here) << ND);"},{y,17200,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (ND)\n    DiagRuntimeBehavior(ND->getBeginLoc(), BaseExpr, PDiag(diag::note_array_declared_here) << ND);"},{r,11333,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n  } else if (const auto *ArrayTy = S.Context.getAsArrayType(LHSTy)) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(LHSArg)) {\n      if (const ValueDecl *LHSArgDecl = DRE->getDecl())\n        S.Diag(LHSArgDecl->getLocation(), diag::note_array_declared_here) << LHSArgDecl;"}}
[n]={{D,17103,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (IsUnboundedArray) {\n    if (index.isUnsigned() || !index.isNegative()) {\n      if (ND)\n        DiagRuntimeBehavior(ND->getBeginLoc(), BaseExpr, PDiag(diag::note_array_declared_here) << ND);"},{D,17200,"void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr, const ArraySubscriptExpr *ASE, bool AllowOnePastEnd, bool IndexNegated) {\n  if (ND)\n    DiagRuntimeBehavior(ND->getBeginLoc(), BaseExpr, PDiag(diag::note_array_declared_here) << ND);"},{s,11333,"static void DiagnoseDivisionSizeofPointerOrArray(Sema &S, Expr *LHS, Expr *RHS, SourceLocation Loc) {\n  if (LHSTy->isPointerType() && !RHSTy->isPointerType()) {\n  } else if (const auto *ArrayTy = S.Context.getAsArrayType(LHSTy)) {\n    if (const auto *DRE = dyn_cast<DeclRefExpr>(LHSArg)) {\n      if (const ValueDecl *LHSArgDecl = DRE->getDecl())\n        S.Diag(LHSArgDecl->getLocation(), diag::note_array_declared_here) << LHSArgDecl;"}},
[o]={
["clang/test/SemaCXX/array-bounds-system-header.cpp"]={"clang/test/SemaCXX/array-bounds-system-header.cpp:5:3: note: array \'a\' declared here","clang/test/SemaCXX/array-bounds-system-header.cpp:5:3: note: array \'a\' declared here"}
}
},
},
["note_array_init_plain_string_into_char8_t"]={
["note_array_init_plain_string_into_char8_t"]={
[f]="add \'u8\' prefix to form a \'char8_t\' string literal",
[b]="add \'u8\' prefix to form a \'char8_t\' string literal",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add \'u8\' prefix to form a \'char8_t\' string literal",
[h]="add \'u8\' prefix to form a \'char8_t\' string literal",
[g]=b,
[j]=i,
[e]="add \'u8\' prefix to form a \'char8_t\' string literal",
[k]="add \'u8\' prefix to form a \'char8_t\' string literal",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type."},
[m]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type."},
[n]={{D,9600,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_PlainStringIntoUTF8Char:\n    S.Diag(Args.front()->getBeginLoc(), diag::note_array_init_plain_string_into_char8_t) << FixItHint::CreateInsertion(Args.front()->getBeginLoc(), \"u8\");"}}
[n]={{K,9600,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_PlainStringIntoUTF8Char:\n    S.Diag(Args.front()->getBeginLoc(), diag::note_array_init_plain_string_into_char8_t) << FixItHint::CreateInsertion(Args.front()->getBeginLoc(), \"u8\");"}},
[o]={
["clang/test/SemaCXX/char8_t.cpp"]={"clang/test/SemaCXX/char8_t.cpp:9:15: note: add \'u8\' prefix to form a \'char8_t\' string literal"}
}
},
},
["note_array_size_conversion"]={
["note_array_size_conversion"]={
[f]="conversion to ... type A declared here",
[b]="conversion to ... type A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="conversion to %select{integral|enumeration}0 type %1 declared here",
[h]="conversion to %select{integral|enumeration}0 type %1 declared here",
[g]=b,
[j]=i,
[e]="conversion to (?:integral|enumeration) type (.*?) declared here",
[k]="conversion to (?:integral|enumeration) type (.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class"},
[m]={"4799d03ce841",1277857243,"Implement C++ DR299, which allows an implicit conversion from a class"},
[n]={{K,2166,"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  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_array_size_conversion) << ConvTy->isEnumeralType() << ConvTy; }"},{K,2177,"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  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_array_size_conversion) << ConvTy->isEnumeralType() << ConvTy; }"}}
[n]={{S,2166,"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  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_array_size_conversion) << ConvTy->isEnumeralType() << ConvTy; }"},{S,2177,"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  if (ArraySize && *ArraySize && !(*ArraySize)->isTypeDependent()) {\n    if (getLangOpts().CPlusPlus14) {\n    } else {\n      class SizeConvertDiagnoser : public ICEConvertDiagnoser {\n        SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_array_size_conversion) << ConvTy->isEnumeralType() << ConvTy; }"}}
},
},
["note_asm_input_duplicate_first"]={
["note_asm_input_duplicate_first"]={
[f]="constraint \'A\' is already present here",
[b]="constraint \'A\' is already present here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="constraint \'%0\' is already present here",
[h]="constraint \'%0\' is already present here",
[g]=b,
[j]=i,
[e]="constraint \'(.*?)\' is already present here",
[k]="constraint \'(.*?)\' is already present here",
[d]=a,
[l]=a,
[c]="Inline Assembly Issue",
[c]="Inline Assembly Issue",
[m]={"8e261be91106",1442846460,"Fix assertion in inline assembler IR gen"},
[m]={"8e261be91106",1442846460,"Fix assertion in inline assembler IR gen"},
[n]={{Tb,609,"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  for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n    if (InputMatchedToOutput[TiedTo] != ~0U) {\n      targetDiag(NS->getInputExpr(InputMatchedToOutput[TiedTo])->getBeginLoc(), diag::note_asm_input_duplicate_first) << TiedTo;"}}
[n]={{mc,609,"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  for (unsigned i = 0, e = InputConstraintInfos.size(); i != e; ++i) {\n    if (InputMatchedToOutput[TiedTo] != ~0U) {\n      targetDiag(NS->getInputExpr(InputMatchedToOutput[TiedTo])->getBeginLoc(), diag::note_asm_input_duplicate_first) << TiedTo;"}},
[o]={
["clang/test/Sema/asm.c"]={"clang/test/Sema/asm.c:291:17: note: constraint \'1\' is already present here"}
}
},
},
["note_asm_missing_constraint_modifier"]={
["note_asm_missing_constraint_modifier"]={
[f]="use constraint modifier \"A\"",
[b]="use constraint modifier \"A\"",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use constraint modifier \"%0\"",
[h]="use constraint modifier \"%0\"",
[g]=b,
[j]=i,
[e]="use constraint modifier \"(.*?)\"",
[k]="use constraint modifier \"(.*?)\"",
[d]=a,
[l]=a,
[c]="Inline Assembly Issue",
[c]="Inline Assembly Issue",
[m]={"987f1864caeb",1408687521,"[AArch64, inline-asm] Improve diagnostic that is printed when the size of a"},
[m]={"987f1864caeb",1408687521,"[AArch64, inline-asm] Improve diagnostic that is printed when the size of a"},
[n]={{Tb,554,"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  // Validate constraints and modifiers.\n  for (unsigned i = 0, e = Pieces.size(); i != e; ++i) {\n    if (!Context.getTargetInfo().validateConstraintModifier(Literal->getString(), Piece.getModifier(), Size, SuggestedModifier)) {\n      if (!SuggestedModifier.empty()) {\n        auto B = targetDiag(Piece.getRange().getBegin(), diag::note_asm_missing_constraint_modifier) << SuggestedModifier;"}}
[n]={{mc,554,"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  // Validate constraints and modifiers.\n  for (unsigned i = 0, e = Pieces.size(); i != e; ++i) {\n    if (!Context.getTargetInfo().validateConstraintModifier(Literal->getString(), Piece.getModifier(), Size, SuggestedModifier)) {\n      if (!SuggestedModifier.empty()) {\n        auto B = targetDiag(Piece.getRange().getBegin(), diag::note_asm_missing_constraint_modifier) << SuggestedModifier;"}},
[o]={
["clang/test/Sema/arm64-inline-asm.c"]={"clang/test/Sema/arm64-inline-asm.c:8:21: note: use constraint modifier \"w\""}
}
},
},
["note_assign_lhs_incomplete"]={
["note_assign_lhs_incomplete"]={
[f]="type A is incomplete",
[b]="type A is incomplete",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="type %0 is incomplete",
[h]="type %0 is incomplete",
[g]=b,
[j]=i,
[e]="type (.*?) is incomplete",
[k]="type (.*?) is incomplete",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"a31efa07ff70",1377722135,"Improve error for assignment to incomplete class."},
[m]={"a31efa07ff70",1377722135,"Improve error for assignment to incomplete class."},
[n]={{P,14260,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  case OR_No_Viable_Function: {\n    if (Args[0]->getType()->isRecordType() && Opc >= BO_Assign && Opc <= BO_OrAssign) {\n      if (Args[0]->getType()->isIncompleteType()) {\n        Diag(OpLoc, diag::note_assign_lhs_incomplete) << Args[0]->getType() << Args[0]->getSourceRange() << Args[1]->getSourceRange();"}}
[n]={{X,14260,"/// Create a binary operation that may resolve to an overloaded\n/// operator.\n///\n/// \\param OpLoc The location of the operator itself (e.g., \'+\').\n///\n/// \\param Opc The BinaryOperatorKind that describes this operator.\n///\n/// \\param Fns The set of non-member functions that will be\n/// considered by overload resolution. The caller needs to build this\n/// set based on the context using, e.g.,\n/// LookupOverloadedOperatorName() and ArgumentDependentLookup(). This\n/// set should not contain any member functions; those will be added\n/// by CreateOverloadedBinOp().\n///\n/// \\param LHS Left-hand argument.\n/// \\param RHS Right-hand argument.\n/// \\param PerformADL Whether to consider operator candidates found by ADL.\n/// \\param AllowRewrittenCandidates Whether to consider candidates found by\n///        C++20 operator rewrites.\n/// \\param DefaultedFn If we are synthesizing a defaulted operator function,\n///        the function in question. Such a function is never a candidate in\n///        our overload resolution. This also enables synthesizing a three-way\n///        comparison from < and == as described in C++20 [class.spaceship]p1.\nExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc, BinaryOperatorKind Opc, const UnresolvedSetImpl &Fns, Expr *LHS, Expr *RHS, bool PerformADL, bool AllowRewrittenCandidates, FunctionDecl *DefaultedFn) {\n  case OR_No_Viable_Function: {\n    if (Args[0]->getType()->isRecordType() && Opc >= BO_Assign && Opc <= BO_OrAssign) {\n      if (Args[0]->getType()->isIncompleteType()) {\n        Diag(OpLoc, diag::note_assign_lhs_incomplete) << Args[0]->getType() << Args[0]->getSourceRange() << Args[1]->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/overloaded-operator.cpp"]={"clang/test/SemaCXX/overloaded-operator.cpp:452:12: note: type \'PointerUnion<int *, float *>\' is incomplete"}
}
},
},
["note_atomic_constraint_evaluated_to_false"]={
["note_atomic_constraint_evaluated_to_false"]={
[f]="... \'A\' evaluated to false",
[b]="... \'A\' evaluated to false",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{and|because}0 \'%1\' evaluated to false",
[h]="%select{and|because}0 \'%1\' evaluated to false",
[g]=b,
[j]=i,
[e]="(?:and|because) \'(.*?)\' evaluated to false",
[k]="(?:and|because) \'(.*?)\' evaluated to false",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Rb,1569403888,Nb},
[m]={pc,1569403888,rc},
[n]={{O,1134,"static void diagnoseWellFormedUnsatisfiedConstraintExpr(Sema &S, Expr *SubstExpr, bool First) {\n  S.Diag(SubstExpr->getSourceRange().getBegin(), diag::note_atomic_constraint_evaluated_to_false) << (int)First << SubstExpr;"}}
[n]={{W,1134,"static void diagnoseWellFormedUnsatisfiedConstraintExpr(Sema &S, Expr *SubstExpr, bool First) {\n  S.Diag(SubstExpr->getSourceRange().getBegin(), diag::note_atomic_constraint_evaluated_to_false) << (int)First << SubstExpr;"}},
[o]={
["clang/test/SemaTemplate/instantiate-expanded-type-constraint.cpp"]={"clang/test/SemaTemplate/instantiate-expanded-type-constraint.cpp:18:14: note: because \'same_as<int, _Bool>\' evaluated to false","clang/test/SemaTemplate/instantiate-expanded-type-constraint.cpp:10:19: note: because \'is_same_v<int, _Bool>\' evaluated to false"}
}
},
},
["note_atomic_constraint_evaluated_to_false_elaborated"]={
["note_atomic_constraint_evaluated_to_false_elaborated"]={
[f]="... \'A\' (B C D) evaluated to false",
[b]="... \'A\' (B C D) evaluated to false",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{and|because}0 \'%1\' (%2 %3 %4) evaluated to false",
[h]="%select{and|because}0 \'%1\' (%2 %3 %4) evaluated to false",
[g]=b,
[j]=i,
[e]="(?:and|because) \'(.*?)\' \\((.*?) (.*?) (.*?)\\) evaluated to false",
[k]="(?:and|because) \'(.*?)\' \\((.*?) (.*?) (.*?)\\) evaluated to false",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Rb,1569403888,Nb},
[m]={pc,1569403888,rc},
[n]={{O,1078,"static void diagnoseWellFormedUnsatisfiedConstraintExpr(Sema &S, Expr *SubstExpr, bool First) {\n  if (BinaryOperator *BO = dyn_cast<BinaryOperator>(SubstExpr)) {\n    case BO_NE:\n      if (BO->getLHS()->getType()->isIntegerType() && BO->getRHS()->getType()->isIntegerType()) {\n        if (!SimplifiedLHS.Diag && !SimplifiedRHS.Diag) {\n          S.Diag(SubstExpr->getBeginLoc(), diag::note_atomic_constraint_evaluated_to_false_elaborated) << (int)First << SubstExpr << toString(SimplifiedLHS.Val.getInt(), 10) << BinaryOperator::getOpcodeStr(BO->getOpcode()) << toString(SimplifiedRHS.Val.getInt(), 10);"}}
[n]={{W,1078,"static void diagnoseWellFormedUnsatisfiedConstraintExpr(Sema &S, Expr *SubstExpr, bool First) {\n  if (BinaryOperator *BO = dyn_cast<BinaryOperator>(SubstExpr)) {\n    case BO_NE:\n      if (BO->getLHS()->getType()->isIntegerType() && BO->getRHS()->getType()->isIntegerType()) {\n        if (!SimplifiedLHS.Diag && !SimplifiedRHS.Diag) {\n          S.Diag(SubstExpr->getBeginLoc(), diag::note_atomic_constraint_evaluated_to_false_elaborated) << (int)First << SubstExpr << toString(SimplifiedLHS.Val.getInt(), 10) << BinaryOperator::getOpcodeStr(BO->getOpcode()) << toString(SimplifiedRHS.Val.getInt(), 10);"}},
[o]={
["clang/test/SemaTemplate/concepts-PR54629.cpp"]={"clang/test/SemaTemplate/concepts-PR54629.cpp:31:38: note: because \'sizeof (t) < 4\' (4 < 4) evaluated to false","clang/test/SemaTemplate/concepts-PR54629.cpp:36:38: note: because \'sizeof (t) > 4\' (4 > 4) evaluated to false","clang/test/SemaTemplate/concepts-PR54629.cpp:41:38: note: because \'sizeof (t) > 8\' (4 > 8) evaluated to false"}
}
},
},
["note_atomic_property_fixup_suggest"]={
["note_atomic_property_fixup_suggest"]={
[f]="setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic",
[b]="setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic",
[h]="setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic",
[g]=b,
[j]=i,
[e]="setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic",
[k]="setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"9cd57a7061c8",1317944878,"objc: Improve on diagnostic when atomic proeprty is synthesized"},
[m]={"9cd57a7061c8",1317944878,"objc: Improve on diagnostic when atomic proeprty is synthesized"},
[n]={{N,2240,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n      if ((bool)GetterMethod ^ (bool)SetterMethod) {\n        // fixit stuff.\n        if (Property->getLParenLoc().isValid() && !(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic)) {\n          Diag(Property->getLocation(), diag::note_atomic_property_fixup_suggest) << FixItHint::CreateInsertion(AfterLParen, NonatomicStr);"},{N,2247,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n      if ((bool)GetterMethod ^ (bool)SetterMethod) {\n        // fixit stuff.\n        if (Property->getLParenLoc().isValid() && !(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic)) {\n        } else if (Property->getLParenLoc().isInvalid()) {\n          Diag(Property->getLocation(), diag::note_atomic_property_fixup_suggest) << FixItHint::CreateInsertion(startLoc, \"(nonatomic) \");"},{N,2250,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n      if ((bool)GetterMethod ^ (bool)SetterMethod) {\n        // fixit stuff.\n        if (Property->getLParenLoc().isValid() && !(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic)) {\n        } else if (Property->getLParenLoc().isInvalid()) {\n        } else\n          Diag(MethodLoc, diag::note_atomic_property_fixup_suggest);"}}
[n]={{V,2240,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n      if ((bool)GetterMethod ^ (bool)SetterMethod) {\n        // fixit stuff.\n        if (Property->getLParenLoc().isValid() && !(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic)) {\n          Diag(Property->getLocation(), diag::note_atomic_property_fixup_suggest) << FixItHint::CreateInsertion(AfterLParen, NonatomicStr);"},{V,2247,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n      if ((bool)GetterMethod ^ (bool)SetterMethod) {\n        // fixit stuff.\n        if (Property->getLParenLoc().isValid() && !(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic)) {\n        } else if (Property->getLParenLoc().isInvalid()) {\n          Diag(Property->getLocation(), diag::note_atomic_property_fixup_suggest) << FixItHint::CreateInsertion(startLoc, \"(nonatomic) \");"},{V,2250,"void Sema::AtomicPropertySetterGetterRules(ObjCImplDecl *IMPDecl, ObjCInterfaceDecl *IDecl) {\n  for (ObjCContainerDecl::PropertyMap::iterator I = PM.begin(), E = PM.end(); I != E; ++I) {\n    if (const ObjCPropertyImplDecl *PIDecl = IMPDecl->FindPropertyImplDecl(Property->getIdentifier(), Property->getQueryKind())) {\n      if ((bool)GetterMethod ^ (bool)SetterMethod) {\n        // fixit stuff.\n        if (Property->getLParenLoc().isValid() && !(AttributesAsWritten & ObjCPropertyAttribute::kind_atomic)) {\n        } else if (Property->getLParenLoc().isInvalid()) {\n        } else\n          Diag(MethodLoc, diag::note_atomic_property_fixup_suggest);"}},
[o]={
["clang/test/SemaObjC/atomic-property-synthesis-rules.m"]={"clang/test/SemaObjC/atomic-property-synthesis-rules.m:110:15: note: setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic","clang/test/SemaObjC/atomic-property-synthesis-rules.m:112:15: note: setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic","clang/test/SemaObjC/atomic-property-synthesis-rules.m:206:26: note: setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic","clang/test/SemaObjC/atomic-property-synthesis-rules.m:208:26: note: setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic","clang/test/SemaObjC/atomic-property-synthesis-rules.m:143:15: note: setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic","clang/test/SemaObjC/atomic-property-synthesis-rules.m:145:15: note: setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic","clang/test/SemaObjC/atomic-property-synthesis-rules.m:217:26: note: setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic","clang/test/SemaObjC/atomic-property-synthesis-rules.m:219:26: note: setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic"}
}
},
},
["note_attribute"]={
["note_attribute"]={
[f]="attribute is here",
[b]="attribute is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="attribute is here",
[h]="attribute is here",
[g]=b,
[j]=i,
[e]="attribute is here",
[k]="attribute is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"078d2f89cd6a",1401382220,"Sema: Check dll attributes on static data members"},
[m]={"078d2f89cd6a",1401382220,"Sema: Check dll attributes on static data members"},
[n]={{t,7131,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n    if (IsMicrosoftABI && IsDefinition) {\n      if (IsSpecialization) {\n        S.Diag(OldImportAttr->getLocation(), diag::note_attribute);"},{t,14447,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  // Imported static data members cannot be defined out-of-line.\n  if (const auto *IA = dyn_cast_or_null<DLLImportAttr>(DLLAttr)) {\n    if (VD->isStaticDataMember() && VD->isOutOfLine() && VD->isThisDeclarationADefinition()) {\n      Diag(IA->getLocation(), diag::note_attribute);"},{t,15936,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    // Verify and clean out per-function state.\n    if (Body && (!FD || !FD->isDefaulted())) {\n      if (FD && FD->hasAttr<NakedAttr>()) {\n        for (const Stmt *S : Body->children()) {\n          if (!isa<AsmStmt>(S) && !isa<NullStmt>(S)) {\n            Diag(FD->getAttr<NakedAttr>()->getLocation(), diag::note_attribute);"},{q,6658,"/// Perform propagation of DLL attributes from a derived class to a\n/// templated base class for MS compatibility.\nvoid Sema::propagateDLLAttrToBaseClassTemplate(CXXRecordDecl *Class, Attr *ClassAttr, ClassTemplateSpecializationDecl *BaseTemplateSpec, SourceLocation BaseLoc) {\n  Diag(ClassAttr->getLocation(), diag::note_attribute);"},{Tb,144,"static bool CheckNakedParmReference(Expr *E, Sema &S) {\n  while (WorkList.size()) {\n    if (isa<CXXThisExpr>(E)) {\n      S.Diag(Func->getAttr<NakedAttr>()->getLocation(), diag::note_attribute);"},{Tb,150,"static bool CheckNakedParmReference(Expr *E, Sema &S) {\n  while (WorkList.size()) {\n    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n      if (isa<ParmVarDecl>(DRE->getDecl())) {\n        S.Diag(Func->getAttr<NakedAttr>()->getLocation(), diag::note_attribute);"},{u,9996,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (TSK == TSK_ExplicitInstantiationDeclaration && !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n    // Check for dllexport class template instantiation declarations,\n    // except for MinGW mode.\n    for (const ParsedAttr &AL : Attr) {\n      if (AL.getKind() == ParsedAttr::AT_DLLExport) {\n        Diag(AL.getLoc(), diag::note_attribute);"},{u,10004,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (TSK == TSK_ExplicitInstantiationDeclaration && !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n    if (auto *A = ClassTemplate->getTemplatedDecl()->getAttr<DLLExportAttr>()) {\n      Diag(A->getLocation(), diag::note_attribute);"}}
[n]={{u,7131,"static void checkDLLAttributeRedeclaration(Sema &S, NamedDecl *OldDecl, NamedDecl *NewDecl, bool IsSpecialization, bool IsDefinition) {\n  if (OldImportAttr && !HasNewAttr && (!IsInline || (IsMicrosoftABI && IsTemplate)) && !IsStaticDataMember && !NewDecl->isLocalExternDecl() && !IsQualifiedFriend) {\n    if (IsMicrosoftABI && IsDefinition) {\n      if (IsSpecialization) {\n        S.Diag(OldImportAttr->getLocation(), diag::note_attribute);"},{u,14447,"/// FinalizeDeclaration - called by ParseDeclarationAfterDeclarator to perform\n/// any semantic actions necessary after any initializer has been attached.\nvoid Sema::FinalizeDeclaration(Decl *ThisDecl) {\n  // Imported static data members cannot be defined out-of-line.\n  if (const auto *IA = dyn_cast_or_null<DLLImportAttr>(DLLAttr)) {\n    if (VD->isStaticDataMember() && VD->isOutOfLine() && VD->isThisDeclarationADefinition()) {\n      Diag(IA->getLocation(), diag::note_attribute);"},{u,15936,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    // Verify and clean out per-function state.\n    if (Body && (!FD || !FD->isDefaulted())) {\n      if (FD && FD->hasAttr<NakedAttr>()) {\n        for (const Stmt *S : Body->children()) {\n          if (!isa<AsmStmt>(S) && !isa<NullStmt>(S)) {\n            Diag(FD->getAttr<NakedAttr>()->getLocation(), diag::note_attribute);"},{r,6658,"/// Perform propagation of DLL attributes from a derived class to a\n/// templated base class for MS compatibility.\nvoid Sema::propagateDLLAttrToBaseClassTemplate(CXXRecordDecl *Class, Attr *ClassAttr, ClassTemplateSpecializationDecl *BaseTemplateSpec, SourceLocation BaseLoc) {\n  Diag(ClassAttr->getLocation(), diag::note_attribute);"},{mc,144,"static bool CheckNakedParmReference(Expr *E, Sema &S) {\n  while (WorkList.size()) {\n    if (isa<CXXThisExpr>(E)) {\n      S.Diag(Func->getAttr<NakedAttr>()->getLocation(), diag::note_attribute);"},{mc,150,"static bool CheckNakedParmReference(Expr *E, Sema &S) {\n  while (WorkList.size()) {\n    if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {\n      if (isa<ParmVarDecl>(DRE->getDecl())) {\n        S.Diag(Func->getAttr<NakedAttr>()->getLocation(), diag::note_attribute);"},{v,9996,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (TSK == TSK_ExplicitInstantiationDeclaration && !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n    // Check for dllexport class template instantiation declarations,\n    // except for MinGW mode.\n    for (const ParsedAttr &AL : Attr) {\n      if (AL.getKind() == ParsedAttr::AT_DLLExport) {\n        Diag(AL.getLoc(), diag::note_attribute);"},{v,10004,"// Explicit instantiation of a class template specialization\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, SourceLocation TemplateNameLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc, const ParsedAttributesView &Attr) {\n  if (TSK == TSK_ExplicitInstantiationDeclaration && !Context.getTargetInfo().getTriple().isWindowsGNUEnvironment()) {\n    if (auto *A = ClassTemplate->getTemplatedDecl()->getAttr<DLLExportAttr>()) {\n      Diag(A->getLocation(), diag::note_attribute);"}},
[o]={
["clang/test/Sema/attr-naked.c"]={"clang/test/Sema/attr-naked.c:13:16: note: attribute is here","clang/test/Sema/attr-naked.c:38:16: note: attribute is here","clang/test/Sema/attr-naked.c:45:16: note: attribute is here","clang/test/Sema/attr-naked.c:52:16: note: attribute is here","clang/test/Sema/attr-naked.c:56:16: note: attribute is here","clang/test/Sema/attr-naked.c:60:16: note: attribute is here"}
}
},
},
["note_attribute_has_no_effect_on_compile_time_if_here"]={
["note_attribute_has_no_effect_on_compile_time_if_here"]={
[f]="annotating the \'if ...\' statement here",
[b]="annotating the \'if ...\' statement here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="annotating the \'if %select{constexpr|consteval}0\' statement here",
[h]="annotating the \'if %select{constexpr|consteval}0\' statement here",
[g]=b,
[j]=i,
[e]="annotating the \'if (?:constexpr|consteval)\' statement here",
[k]="annotating the \'if (?:constexpr|consteval)\' statement here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Pb,1615397021,Ob},
[m]={lc,1615397021,vc},
[n]={{A,912,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval || StatementKind == IfStatementKind::Constexpr) {\n    auto DiagnoseLikelihood = [&](const Stmt *S) {\n      if (const Attr *A = Stmt::getLikelihoodAttr(S)) {\n        Diags.Report(IfLoc, diag::note_attribute_has_no_effect_on_compile_time_if_here) << ConstevalOrNegatedConsteval << SourceRange(IfLoc, (ConstevalOrNegatedConsteval ? thenStmt->getBeginLoc() : LParenLoc).getLocWithOffset(-1));"}}
[n]={{H,912,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval || StatementKind == IfStatementKind::Constexpr) {\n    auto DiagnoseLikelihood = [&](const Stmt *S) {\n      if (const Attr *A = Stmt::getLikelihoodAttr(S)) {\n        Diags.Report(IfLoc, diag::note_attribute_has_no_effect_on_compile_time_if_here) << ConstevalOrNegatedConsteval << SourceRange(IfLoc, (ConstevalOrNegatedConsteval ? thenStmt->getBeginLoc() : LParenLoc).getLocWithOffset(-1));"}},
[o]={
["clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp"]={"clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp:40:3: note: annotating the \'if consteval\' statement here","clang/test/CXX/stmt.stmt/stmt.select/stmt.if/p4.cpp:40:3: note: annotating the \'if consteval\' statement here"}
}
},
},
["note_attribute_has_no_effect_on_infinite_loop_here"]={
["note_attribute_has_no_effect_on_infinite_loop_here"]={
[f]="annotating the infinite loop here",
[b]="annotating the infinite loop here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="annotating the infinite loop here",
[h]="annotating the infinite loop here",
[g]=b,
[j]=i,
[e]="annotating the infinite loop here",
[k]="annotating the infinite loop here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={T,1590001902,S},
[m]={pb,1590001902,qb},
[n]={{"clang/lib/CodeGen/CGStmt.cpp",937,"void CodeGenFunction::EmitWhileStmt(const WhileStmt &S, ArrayRef<const Attr *> WhileAttrs) {\n  if (EmitBoolCondBranch) {\n  } else if (const Attr *A = Stmt::getLikelihoodAttr(S.getBody())) {\n    CGM.getDiags().Report(S.getWhileLoc(), diag::note_attribute_has_no_effect_on_infinite_loop_here) << SourceRange(S.getWhileLoc(), S.getRParenLoc());"}}
[n]={{"clang/lib/CodeGen/CGStmt.cpp",937,"void CodeGenFunction::EmitWhileStmt(const WhileStmt &S, ArrayRef<const Attr *> WhileAttrs) {\n  if (EmitBoolCondBranch) {\n  } else if (const Attr *A = Stmt::getLikelihoodAttr(S.getBody())) {\n    CGM.getDiags().Report(S.getWhileLoc(), diag::note_attribute_has_no_effect_on_infinite_loop_here) << SourceRange(S.getWhileLoc(), S.getRParenLoc());"}},
[o]={
["clang/test/CodeGenCXX/attr-likelihood-iteration-stmt.cpp"]={"clang/test/CodeGenCXX/attr-likelihood-iteration-stmt.cpp:63:3: note: annotating the infinite loop here"}
}
},
},
["note_attribute_overloadable_prev_overload"]={
["note_attribute_overloadable_prev_overload"]={
[f]="previous ...overload of function is here",
[b]="previous ...overload of function is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="previous %select{unmarked |}0overload of function is here",
[h]="previous %select{unmarked |}0overload of function is here",
[g]=b,
[j]=i,
[e]="previous (?:unmarked |)overload of function is here",
[k]="previous (?:unmarked |)overload of function is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={wb,1236199783,vb},
[m]={Jb,1236199783,Kb},
[n]={{t,3752,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (!getLangOpts().CPlusPlus) {\n    if (OldOvl != New->hasAttr<OverloadableAttr>() && !Old->isImplicit()) {\n      if (DiagOld)\n        Diag(DiagOld->getLocation(), diag::note_attribute_overloadable_prev_overload) << OldOvl;"},{t,11889,"/// 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  if (Redeclaration) {\n  } else if (!getLangOpts().CPlusPlus && MayNeedOverloadableChecks && !NewFD->getAttr<OverloadableAttr>()) {\n    if (OtherUnmarkedIter != Previous.end()) {\n      Diag((*OtherUnmarkedIter)->getLocation(), diag::note_attribute_overloadable_prev_overload) << false;"}}
[n]={{u,3752,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (!getLangOpts().CPlusPlus) {\n    if (OldOvl != New->hasAttr<OverloadableAttr>() && !Old->isImplicit()) {\n      if (DiagOld)\n        Diag(DiagOld->getLocation(), diag::note_attribute_overloadable_prev_overload) << OldOvl;"},{u,11889,"/// 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  if (Redeclaration) {\n  } else if (!getLangOpts().CPlusPlus && MayNeedOverloadableChecks && !NewFD->getAttr<OverloadableAttr>()) {\n    if (OtherUnmarkedIter != Previous.end()) {\n      Diag((*OtherUnmarkedIter)->getLocation(), diag::note_attribute_overloadable_prev_overload) << false;"}},
[o]={
["clang/test/Sema/overloadable.c"]={"clang/test/Sema/overloadable.c:7:6: note: previous overload of function is here","clang/test/Sema/overloadable.c:78:35: note: previous unmarked overload of function is here","clang/test/Sema/overloadable.c:180:6: note: previous overload of function is here","clang/test/Sema/overloadable.c:185:6: note: previous overload of function is here","clang/test/Sema/overloadable.c:185:6: note: previous overload of function is here","clang/test/Sema/overloadable.c:191:6: note: previous unmarked overload of function is here","clang/test/Sema/overloadable.c:192:6: note: previous overload of function is here","clang/test/Sema/overloadable.c:192:6: note: previous overload of function is here","clang/test/Sema/overloadable.c:200:6: note: previous overload of function is here","clang/test/Sema/overloadable.c:204:6: note: previous overload of function is here","clang/test/Sema/overloadable.c:209:6: note: previous unmarked overload of function is here","clang/test/Sema/overloadable.c:209:6: note: previous unmarked overload of function is here","clang/test/Sema/overloadable.c:209:6: note: previous unmarked overload of function is here","clang/test/Sema/overloadable.c:217:6: note: previous overload of function is here","clang/test/Sema/overloadable.c:221:6: note: previous unmarked overload of function is here","clang/test/Sema/overloadable.c:230:6: note: previous unmarked overload of function is here","clang/test/Sema/overloadable.c:233:6: note: previous unmarked overload of function is here","clang/test/Sema/overloadable.c:240:6: note: previous unmarked overload of function is here"}
}
},
},
["note_auto_readonly_iboutlet_fixup_suggest"]={
["note_auto_readonly_iboutlet_fixup_suggest"]={
[f]="property should be changed to be readwrite",
[b]="property should be changed to be readwrite",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="property should be changed to be readwrite",
[h]="property should be changed to be readwrite",
[g]=b,
[j]=i,
[e]="property should be changed to be readwrite",
[k]="property should be changed to be readwrite",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"199a9b57a6bb",1337451437,"objective-c: Warn if default synthesizing readonly IBOutlet properties"},
[m]={"199a9b57a6bb",1337451437,"objective-c: Warn if default synthesizing readonly IBOutlet properties"},
[n]={{N,1165,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if (Synthesize && (PIkind & ObjCPropertyAttribute::kind_readonly) && property->hasAttr<IBOutletAttr>() && !AtLoc.isValid()) {\n      if (!ReadWriteProperty) {\n        if (LocPropertyAttribute(Context, \"readonly\", property->getLParenLoc(), readonlyLoc)) {\n          Diag(property->getLocation(), diag::note_auto_readonly_iboutlet_fixup_suggest) << FixItHint::CreateReplacement(ReadonlySourceRange, \"readwrite\");"}}
[n]={{V,1165,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if ((IC = dyn_cast<ObjCImplementationDecl>(ClassImpDecl))) {\n    if (Synthesize && (PIkind & ObjCPropertyAttribute::kind_readonly) && property->hasAttr<IBOutletAttr>() && !AtLoc.isValid()) {\n      if (!ReadWriteProperty) {\n        if (LocPropertyAttribute(Context, \"readonly\", property->getLParenLoc(), readonlyLoc)) {\n          Diag(property->getLocation(), diag::note_auto_readonly_iboutlet_fixup_suggest) << FixItHint::CreateReplacement(ReadonlySourceRange, \"readwrite\");"}},
[o]={
["clang/test/SemaObjC/iboutlet.m"]={"clang/test/SemaObjC/iboutlet.m:10:66: note: property should be changed to be readwrite","clang/test/SemaObjC/iboutlet.m:12:53: note: property should be changed to be readwrite","clang/test/SemaObjC/iboutlet.m:28:58: note: property should be changed to be readwrite"}
}
},
},
["note_availability_specified_here"]={
["note_availability_specified_here"]={
[f]="A has been explicitly marked ... here",
[b]="A has been explicitly marked ... here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 has been explicitly marked %select{unavailable|deleted|deprecated}1 here",
[h]="%0 has been explicitly marked %select{unavailable|deleted|deprecated}1 here",
[g]=b,
[j]=i,
[e]="(.*?) has been explicitly marked (?:unavailable|deleted|deprecated) here",
[k]="(.*?) has been explicitly marked (?:unavailable|deleted|deprecated) here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"b79ee57080fa",1387409406,"Implemented delayed processing of \'unavailable\' checking, just like with \'deprecated\'."},
[m]={"b79ee57080fa",1387409406,"Implemented delayed processing of \'unavailable\' checking, just like with \'deprecated\'."},
[n]={{V,337,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  unsigned diag_available_here = diag::note_availability_specified_here;"},{V,343,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // Matches diag::note_availability_specified_here."},{r,135,"/// Emit a note explaining that this function is deleted.\nvoid Sema::NoteDeletedFunction(FunctionDecl *Decl) {\n  Diag(Decl->getLocation(), diag::note_availability_specified_here) << Decl << 1;"}}
[n]={{gb,337,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  unsigned diag_available_here = diag::note_availability_specified_here;"},{gb,343,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  // Matches diag::note_availability_specified_here."},{s,135,"/// Emit a note explaining that this function is deleted.\nvoid Sema::NoteDeletedFunction(FunctionDecl *Decl) {\n  Diag(Decl->getLocation(), diag::note_availability_specified_here) << Decl << 1;"}},
[o]={
["clang/test/SemaCXX/cxx0x-delegating-ctors.cpp"]={"clang/test/SemaCXX/cxx0x-delegating-ctors.cpp:46:3: note: \'~deleted_dtor\' has been explicitly marked deleted here"}
}
},
},
["note_await_ready_no_bool_conversion"]={
["note_await_ready_no_bool_conversion"]={
[f]="return type of \'await_ready\' is required to be contextually convertible to \'bool\'",
[b]="return type of \'await_ready\' is required to be contextually convertible to \'bool\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="return type of \'await_ready\' is required to be contextually convertible to \'bool\'",
[h]="return type of \'await_ready\' is required to be contextually convertible to \'bool\'",
[g]=b,
[j]=i,
[e]="return type of \'await_ready\' is required to be contextually convertible to \'bool\'",
[k]="return type of \'await_ready\' is required to be contextually convertible to \'bool\'",
[d]=a,
[l]=a,
[c]=Zb,
[c]=Bc,
[m]={"d978e53c6d70",1495995672,"[coroutines] Diagnose invalid result  types for `await_resume` and `await_suspend` and add missing c..."},
[m]={"d978e53c6d70",1495995672,"[coroutines] Diagnose invalid result  types for `await_resume` and `await_suspend` and add missing c..."},
[n]={{L,408,"/// Build calls to await_ready, await_suspend, and await_resume for a co_await\n/// expression.\n/// The generated AST tries to clean up temporary objects as early as\n/// possible so that they don\'t live across suspension points if possible.\n/// Having temporary objects living across suspension points unnecessarily can\n/// lead to large frame size, and also lead to memory corruptions if the\n/// coroutine frame is destroyed after coming back from suspension. This is done\n/// by wrapping both the await_ready call and the await_suspend call with\n/// ExprWithCleanups. In the end of this function, we also need to explicitly\n/// set cleanup state so that the CoawaitExpr is also wrapped with an\n/// ExprWithCleanups to clean up the awaiter associated with the co_await\n/// expression.\nstatic ReadySuspendResumeResult buildCoawaitCalls(Sema &S, VarDecl *CoroPromise, SourceLocation Loc, Expr *E) {\n  if (!AwaitReady->getType()->isDependentType()) {\n    if (Conv.isInvalid()) {\n      S.Diag(AwaitReady->getDirectCallee()->getBeginLoc(), diag::note_await_ready_no_bool_conversion);"}}
[n]={{T,408,"/// Build calls to await_ready, await_suspend, and await_resume for a co_await\n/// expression.\n/// The generated AST tries to clean up temporary objects as early as\n/// possible so that they don\'t live across suspension points if possible.\n/// Having temporary objects living across suspension points unnecessarily can\n/// lead to large frame size, and also lead to memory corruptions if the\n/// coroutine frame is destroyed after coming back from suspension. This is done\n/// by wrapping both the await_ready call and the await_suspend call with\n/// ExprWithCleanups. In the end of this function, we also need to explicitly\n/// set cleanup state so that the CoawaitExpr is also wrapped with an\n/// ExprWithCleanups to clean up the awaiter associated with the co_await\n/// expression.\nstatic ReadySuspendResumeResult buildCoawaitCalls(Sema &S, VarDecl *CoroPromise, SourceLocation Loc, Expr *E) {\n  if (!AwaitReady->getType()->isDependentType()) {\n    if (Conv.isInvalid()) {\n      S.Diag(AwaitReady->getDirectCallee()->getBeginLoc(), diag::note_await_ready_no_bool_conversion);"}},
[o]={
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:1016:3: note: return type of \'await_ready\' is required to be contextually convertible to \'bool\'"}
}
},
},
["note_bad_memaccess_silence"]={
["note_bad_memaccess_silence"]={
[f]="explicitly cast the pointer to silence this warning",
[b]="explicitly cast the pointer to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="explicitly cast the pointer to silence this warning",
[h]="explicitly cast the pointer to silence this warning",
[g]=b,
[j]=i,
[e]="explicitly cast the pointer to silence this warning",
[k]="explicitly cast the pointer to silence this warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"ac6872655bc6",1307082237,"Clean up the \"non-POD memaccess\" stuff some. This adds a properly named"},
[m]={"ac6872655bc6",1307082237,"Clean up the \"non-POD memaccess\" stuff some. This adds a properly named"},
[n]={{y,12604,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::note_bad_memaccess_silence) << FixItHint::CreateInsertion(ArgRange.getBegin(), \"(void*)\"));"}}
[n]={{D,12604,"/// Check for dangerous or invalid arguments to memset().\n///\n/// This issues warnings on known problematic, dangerous or unspecified\n/// arguments to the standard \'memset\', \'memcpy\', \'memmove\', and \'memcmp\'\n/// function calls.\n///\n/// \\param Call The call expression to diagnose.\nvoid Sema::CheckMemaccessArguments(const CallExpr *Call, unsigned BId, IdentifierInfo *FnName) {\n  for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {\n    DiagRuntimeBehavior(Dest->getExprLoc(), Dest, PDiag(diag::note_bad_memaccess_silence) << FixItHint::CreateInsertion(ArgRange.getBegin(), \"(void*)\"));"}},
[o]={
["clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m"]={"clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:34:10: note: explicitly cast the pointer to silence this warning","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:36:9: note: explicitly cast the pointer to silence this warning","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:37:10: note: explicitly cast the pointer to silence this warning","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:38:11: note: explicitly cast the pointer to silence this warning"}
}
},
},
["note_base_class_specified_here"]={
["note_base_class_specified_here"]={
[f]="base class A specified here",
[b]="base class A specified here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="base class %0 specified here",
[h]="base class %0 specified here",
[g]=b,
[j]=i,
[e]="base class (.*?) specified here",
[k]="base class (.*?) specified here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"43a0857631ab",1262823985,"When we typo-correct a base class initializer, point to the base class"},
[m]={"43a0857631ab",1262823985,"When we typo-correct a base class initializer, point to the base class"},
[n]={{q,2759,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  if ((DerivedCSA || BaseCSA) && (!BaseCSA || !DerivedCSA || BaseCSA->getName() != DerivedCSA->getName())) {\n    Diag(CXXBaseDecl->getLocation(), diag::note_base_class_specified_here) << CXXBaseDecl;"},{q,4500,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n  if (TemplateTypeTy) {\n  } else if (DS.getTypeSpecType() == TST_decltype) {\n  } else if (DS.getTypeSpecType() == TST_decltype_auto) {\n  } else {\n    if (!TyD) {\n      if (R.empty() && BaseType.isNull() && (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery, ClassDecl))) {\n        if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {\n        } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {\n          if (FindBaseInitializer(*this, ClassDecl, Context.getTypeDeclType(Type), DirectBaseSpec, VirtualBaseSpec)) {\n            Diag(BaseSpec->getBeginLoc(), diag::note_base_class_specified_here) << BaseSpec->getType() << BaseSpec->getSourceRange();"}}
[n]={{r,2759,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  if ((DerivedCSA || BaseCSA) && (!BaseCSA || !DerivedCSA || BaseCSA->getName() != DerivedCSA->getName())) {\n    Diag(CXXBaseDecl->getLocation(), diag::note_base_class_specified_here) << CXXBaseDecl;"},{r,4500,"/// Handle a C++ member initializer.\nMemInitResult Sema::BuildMemInitializer(Decl *ConstructorD, Scope *S, CXXScopeSpec &SS, IdentifierInfo *MemberOrBase, ParsedType TemplateTypeTy, const DeclSpec &DS, SourceLocation IdLoc, Expr *Init, SourceLocation EllipsisLoc) {\n  if (TemplateTypeTy) {\n  } else if (DS.getTypeSpecType() == TST_decltype) {\n  } else if (DS.getTypeSpecType() == TST_decltype_auto) {\n  } else {\n    if (!TyD) {\n      if (R.empty() && BaseType.isNull() && (Corr = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery, ClassDecl))) {\n        if (FieldDecl *Member = Corr.getCorrectionDeclAs<FieldDecl>()) {\n        } else if (TypeDecl *Type = Corr.getCorrectionDeclAs<TypeDecl>()) {\n          if (FindBaseInitializer(*this, ClassDecl, Context.getTypeDeclType(Type), DirectBaseSpec, VirtualBaseSpec)) {\n            Diag(BaseSpec->getBeginLoc(), diag::note_base_class_specified_here) << BaseSpec->getType() << BaseSpec->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/code-seg.cpp"]={"clang/test/SemaCXX/code-seg.cpp:24:40: note: base class \'Base1\' specified here","clang/test/SemaCXX/code-seg.cpp:24:40: note: base class \'Base1\' specified here","clang/test/SemaCXX/code-seg.cpp:25:8: note: base class \'Base2\' specified here","clang/test/SemaCXX/code-seg.cpp:25:8: note: base class \'Base2\' specified here","clang/test/SemaCXX/code-seg.cpp:24:40: note: base class \'Base1\' specified here","clang/test/SemaCXX/code-seg.cpp:25:8: note: base class \'Base2\' specified here"}
}
},
},
["note_bitfield_decl"]={
["note_bitfield_decl"]={
[f]="bit-field is declared here",
[b]="bit-field is declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="bit-field is declared here",
[h]="bit-field is declared here",
[g]=b,
[j]=i,
[e]="bit\\-field is declared here",
[k]="bit\\-field is declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"3e1e52782604",1260399737,"Reimplement reference initialization (C++ [dcl.init.ref]) using the"},
[m]={"3e1e52782604",1260399737,"Reimplement reference initialization (C++ [dcl.init.ref]) using the"},
[n]={{r,16704,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  for (const OffsetOfComponent &OC : Components) {\n    // C99 7.17p3:\n    //  (If the specified member is a bit-field, the behavior is undefined.)\n    //\n    // We diagnose this as an error.\n    if (MemberDecl->isBitField()) {\n      Diag(MemberDecl->getLocation(), diag::note_bitfield_decl);"},{D,9722,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstLValueReferenceBindingToBitfield: {\n    if (BitField)\n      S.Diag(BitField->getLocation(), diag::note_bitfield_decl);"},{Tb,956,"StmtResult Sema::ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc, ArrayRef<Token> AsmToks, StringRef AsmString, unsigned NumOutputs, unsigned NumInputs, ArrayRef<StringRef> Constraints, ArrayRef<StringRef> Clobbers, ArrayRef<Expr *> Exprs, SourceLocation EndLoc) {\n  for (uint64_t I = 0; I < NumOutputs + NumInputs; ++I) {\n    if (E->getType()->isBitIntType()) {\n    } else if (E->refersToBitField()) {\n      Diag(BitField->getLocation(), diag::note_bitfield_decl);"}}
[n]={{s,16704,"ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, TypeSourceInfo *TInfo, ArrayRef<OffsetOfComponent> Components, SourceLocation RParenLoc) {\n  for (const OffsetOfComponent &OC : Components) {\n    // C99 7.17p3:\n    //  (If the specified member is a bit-field, the behavior is undefined.)\n    //\n    // We diagnose this as an error.\n    if (MemberDecl->isBitField()) {\n      Diag(MemberDecl->getLocation(), diag::note_bitfield_decl);"},{K,9722,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_NonConstLValueReferenceBindingToBitfield: {\n    if (BitField)\n      S.Diag(BitField->getLocation(), diag::note_bitfield_decl);"},{mc,956,"StmtResult Sema::ActOnMSAsmStmt(SourceLocation AsmLoc, SourceLocation LBraceLoc, ArrayRef<Token> AsmToks, StringRef AsmString, unsigned NumOutputs, unsigned NumInputs, ArrayRef<StringRef> Constraints, ArrayRef<StringRef> Clobbers, ArrayRef<Expr *> Exprs, SourceLocation EndLoc) {\n  for (uint64_t I = 0; I < NumOutputs + NumInputs; ++I) {\n    if (E->getType()->isBitIntType()) {\n    } else if (E->refersToBitField()) {\n      Diag(BitField->getLocation(), diag::note_bitfield_decl);"}},
[o]={
["clang/test/SemaObjCXX/references.mm"]={"clang/test/SemaObjCXX/references.mm:70:12: note: bit-field is declared here"}
}
},
},
["note_block_var_fixit_add_initialization"]={
["note_block_var_fixit_add_initialization"]={
[f]="did you mean to use __block A?",
[b]="did you mean to use __block A?",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="did you mean to use __block %0?",
[h]="did you mean to use __block %0?",
[g]=b,
[j]=i,
[e]="did you mean to use __block (.*?)\\?",
[k]="did you mean to use __block (.*?)\\?",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"429fadb8e262",1331166170,"improve on diagnostic and provide a fixit hint when"},
[m]={"429fadb8e262",1331166170,"improve on diagnostic and provide a fixit hint when"},
[n]={{Z,776,"static bool SuggestInitializationFixit(Sema &S, const VarDecl *VD) {\n  if (VariableTy->isBlockPointerType() && !VD->hasAttr<BlocksAttr>()) {\n    S.Diag(VD->getLocation(), diag::note_block_var_fixit_add_initialization) << VD->getDeclName() << FixItHint::CreateInsertion(VD->getLocation(), \"__block \");"}}
[n]={{eb,776,"static bool SuggestInitializationFixit(Sema &S, const VarDecl *VD) {\n  if (VariableTy->isBlockPointerType() && !VD->hasAttr<BlocksAttr>()) {\n    S.Diag(VD->getLocation(), diag::note_block_var_fixit_add_initialization) << VD->getDeclName() << FixItHint::CreateInsertion(VD->getLocation(), \"__block \");"}},
[o]={
["clang/test/FixIt/fixit-recursive-block.c"]={"clang/test/FixIt/fixit-recursive-block.c:8:12: note: did you mean to use __block \'arc_fail\'?"}
}
},
},
["note_bracket_depth"]={
["note_bracket_depth"]={
[f]="use -fbracket-depth=N to increase maximum nesting level",
[b]="use -fbracket-depth=N to increase maximum nesting level",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use -fbracket-depth=N to increase maximum nesting level",
[h]="use -fbracket-depth=N to increase maximum nesting level",
[g]=b,
[j]=i,
[e]="use \\-fbracket\\-depth\\=N to increase maximum nesting level",
[k]="use \\-fbracket\\-depth\\=N to increase maximum nesting level",
[d]=a,
[l]=a,
[c]=Q,
[c]=Z,
[m]={"b3a145293dc8",1361498391,"Add -fbracket-depth=N, analogous to -ftemplate-depth= and -fconstexpr-depth=,"},
[m]={"b3a145293dc8",1361498391,"Add -fbracket-depth=N, analogous to -ftemplate-depth= and -fconstexpr-depth=,"},
[n]={{"clang/lib/Parse/Parser.cpp",2698,"bool BalancedDelimiterTracker::diagnoseOverflow() {\n  P.Diag(P.Tok, diag::note_bracket_depth);"}}
[n]={{"clang/lib/Parse/Parser.cpp",2698,"bool BalancedDelimiterTracker::diagnoseOverflow() {\n  P.Diag(P.Tok, diag::note_bracket_depth);"}},
[o]={
["clang/test/SemaCXX/fold_expr_expansion_limit.cpp"]={"clang/test/SemaCXX/fold_expr_expansion_limit.cpp:4:43: note: use -fbracket-depth=N to increase maximum nesting level"}
}
},
},
["note_building_builtin_dump_struct_call"]={
["note_building_builtin_dump_struct_call"]={
[f]="in call to printing function with arguments \'(A)\' while dumping struct",
[b]="in call to printing function with arguments \'(A)\' while dumping struct",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in call to printing function with arguments \'(%0)\' while dumping struct",
[h]="in call to printing function with arguments \'(%0)\' while dumping struct",
[g]=b,
[j]=i,
[e]="in call to printing function with arguments \'\\((.*?)\\)\' while dumping struct",
[k]="in call to printing function with arguments \'\\((.*?)\\)\' while dumping struct",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[m]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[n]={{z,1009,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::BuildingBuiltinDumpStructCall:\n      Diags.Report(Active->PointOfInstantiation, diag::note_building_builtin_dump_struct_call) << convertCallArgsToString(*this, llvm::ArrayRef(Active->CallArgs, Active->NumCallArgs));"}}
[n]={{G,1009,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::BuildingBuiltinDumpStructCall:\n      Diags.Report(Active->PointOfInstantiation, diag::note_building_builtin_dump_struct_call) << convertCallArgsToString(*this, llvm::ArrayRef(Active->CallArgs, Active->NumCallArgs));"}},
[o]={
["clang/test/Sema/builtin-dump-struct.c"]={"clang/test/Sema/builtin-dump-struct.c:18:3: note: in call to printing function with arguments \'(\"%s\", \"struct A\")\' while dumping struct","clang/test/Sema/builtin-dump-struct.c:19:3: note: in call to printing function with arguments \'(\"%s\", \"struct A\")\' while dumping struct","clang/test/Sema/builtin-dump-struct.c:21:3: note: in call to printing function with arguments \'(\"%s\", \"struct A\")\' while dumping struct"}
}
},
},
["note_called_by"]={
["note_called_by"]={
[f]="called by A",
[b]="called by A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="called by %0",
[h]="called by %0",
[g]=b,
[j]=i,
[e]="called by (.*?)",
[k]="called by (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"6c86e9160d9b",1476911701,"[CUDA] When we emit an error that might have been deferred, also print a callstack."},
[m]={"6c86e9160d9b",1476911701,"[CUDA] When we emit an error that might have been deferred, also print a callstack."},
[n]={{"clang/lib/Sema/Sema.cpp",1629,"// Print notes showing how we can reach FD starting from an a priori\n// known-callable function.\nstatic void emitCallStackNotes(Sema &S, const FunctionDecl *FD) {\n  while (FnIt != S.DeviceKnownEmittedFns.end()) {\n    DiagnosticBuilder Builder(S.Diags.Report(FnIt->second.Loc, diag::note_called_by));"}}
[n]={{"clang/lib/Sema/Sema.cpp",1629,"// Print notes showing how we can reach FD starting from an a priori\n// known-callable function.\nstatic void emitCallStackNotes(Sema &S, const FunctionDecl *FD) {\n  while (FnIt != S.DeviceKnownEmittedFns.end()) {\n    DiagnosticBuilder Builder(S.Diags.Report(FnIt->second.Loc, diag::note_called_by));"}},
[o]={
["clang/test/SemaSYCL/prohibit-thread-local.cpp"]={"clang/test/SemaSYCL/prohibit-thread-local.cpp:46:48: note: called by \'operator()\'","clang/test/SemaSYCL/prohibit-thread-local.cpp:42:39: note: called by \'kernel_single_task<fake_kernel, (lambda at clang/test/SemaSYCL/prohibit-thread-local.cpp:46:41)>\'","clang/test/SemaSYCL/prohibit-thread-local.cpp:27:3: note: called by \'usage\'","clang/test/SemaSYCL/prohibit-thread-local.cpp:46:48: note: called by \'operator()\'","clang/test/SemaSYCL/prohibit-thread-local.cpp:42:39: note: called by \'kernel_single_task<fake_kernel, (lambda at clang/test/SemaSYCL/prohibit-thread-local.cpp:46:41)>\'"}
}
},
},
["note_called_once_gets_called_twice"]={
["note_called_once_gets_called_twice"]={
[f]="previous call is here...",
[b]="previous call is here...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="previous call is here%select{; set to nil to indicate it cannot be called afterwards|}0",
[h]="previous call is here%select{; set to nil to indicate it cannot be called afterwards|}0",
[g]=b,
[j]=i,
[e]="previous call is here(?:; set to nil to indicate it cannot be called afterwards|)",
[k]="previous call is here(?:; set to nil to indicate it cannot be called afterwards|)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={T,1590001902,S},
[m]={pb,1590001902,qb},
[n]={{Z,1692,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleDoubleCall(const ParmVarDecl *Parameter, const Expr *Call, const Expr *PrevCall, bool IsCompletionHandler, bool Poised) override {\n    S.Diag(PrevCall->getBeginLoc(), diag::note_called_once_gets_called_twice) << Poised;"}}
[n]={{eb,1692,"class CalledOnceCheckReporter : public CalledOnceCheckHandler {\n  void handleDoubleCall(const ParmVarDecl *Parameter, const Expr *Call, const Expr *PrevCall, bool IsCompletionHandler, bool Poised) override {\n    S.Diag(PrevCall->getBeginLoc(), diag::note_called_once_gets_called_twice) << Poised;"}},
[o]={
["clang/test/SemaObjC/warn-called-once.m"]={"clang/test/SemaObjC/warn-called-once.m:53:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:58:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:63:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:68:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:77:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:83:5: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:91:3: note: previous call is here; set to nil to indicate it cannot be called afterwards","clang/test/SemaObjC/warn-called-once.m:114:5: note: previous call is here; set to nil to indicate it cannot be called afterwards","clang/test/SemaObjC/warn-called-once.m:128:5: note: previous call is here; set to nil to indicate it cannot be called afterwards","clang/test/SemaObjC/warn-called-once.m:181:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:187:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:195:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:224:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:239:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:257:7: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:280:5: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:283:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:306:7: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:535:3: note: previous call is here; set to nil to indicate it cannot be called afterwards","clang/test/SemaObjC/warn-called-once.m:792:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:797:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:804:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:811:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:818:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:825:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:832:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:862:3: note: previous call is here","clang/test/SemaObjC/warn-called-once.m:1118:5: note: previous call is here; set to nil to indicate it cannot be called afterwards","clang/test/SemaObjC/warn-called-once.m:1232:5: note: previous call is here"}
}
},
},
["note_callee_decl"]={
["note_callee_decl"]={
[f]="A declared here",
[b]="A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 declared here",
[h]="%0 declared here",
[g]=b,
[j]=i,
[e]="(.*?) declared here",
[k]="(.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"3bc84ca376a2",1311899082,"Fix an inconsistency in Sema::ConvertArgumentsForCall in that"},
[m]={"3bc84ca376a2",1311899082,"Fix an inconsistency in Sema::ConvertArgumentsForCall in that"},
[n]={{r,6496,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      // Emit the location of the prototype.\n      if (!TC && FDecl && !FDecl->getBuiltinID() && !IsExecConfig)\n        Diag(FDecl->getLocation(), diag::note_callee_decl) << FDecl << FDecl->getParametersSourceRange();"},{r,6565,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      // Emit the location of the prototype.\n      if (!TC && FDecl && !FDecl->getBuiltinID() && !IsExecConfig)\n        Diag(FDecl->getLocation(), diag::note_callee_decl) << FDecl << FDecl->getParametersSourceRange();"},{r,7363,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  // Interrupt handlers don\'t save off the VFP regs automatically on ARM,\n  // so there\'s some risk when calling out to non-interrupt handler functions\n  // that the callee might not preserve them. This is easy to diagnose here,\n  // but can be very challenging to debug.\n  // Likewise, X86 interrupt handlers may only call routines with attribute\n  // no_caller_saved_registers since there is no efficient way to\n  // save and restore the non-GPR state.\n  if (auto *Caller = getCurFunctionDecl()) {\n    if (Caller->hasAttr<ARMInterruptAttr>()) {\n      if (VFP && (!FDecl || !FDecl->hasAttr<ARMInterruptAttr>())) {\n        if (FDecl)\n          Diag(FDecl->getLocation(), diag::note_callee_decl) << FDecl;"},{r,7402,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  // Interrupt handlers don\'t save off the VFP regs automatically on ARM,\n  // so there\'s some risk when calling out to non-interrupt handler functions\n  // that the callee might not preserve them. This is easy to diagnose here,\n  // but can be very challenging to debug.\n  // Likewise, X86 interrupt handlers may only call routines with attribute\n  // no_caller_saved_registers since there is no efficient way to\n  // save and restore the non-GPR state.\n  if (auto *Caller = getCurFunctionDecl()) {\n    if (Caller->hasAttr<AnyX86InterruptAttr>() && ((!FDecl || !FDecl->hasAttr<AnyX86NoCallerSavedRegistersAttr>()))) {\n      if (FDecl)\n        Diag(FDecl->getLocation(), diag::note_callee_decl) << FDecl;"},{N,1549,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if (ObjCMethodDecl *setterMethod = property->getSetterMethodDecl()) {\n    if (getLangOpts().CPlusPlus && Synthesize && !CompleteTypeErr && Ivar->getType()->isRecordType()) {\n      if (property->getPropertyAttributes() & ObjCPropertyAttribute::kind_atomic) {\n        if (const CXXOperatorCallExpr *CXXCE = dyn_cast_or_null<CXXOperatorCallExpr>(callExpr))\n          if (const FunctionDecl *FuncDecl = CXXCE->getDirectCallee())\n            if (!FuncDecl->isTrivial())\n              if (property->getType()->isReferenceType()) {\n                Diag(FuncDecl->getBeginLoc(), diag::note_callee_decl) << FuncDecl;"},{"clang/lib/Sema/SemaTemplateDeduction.cpp",5039,"bool Sema::DeduceReturnType(FunctionDecl *FD, SourceLocation Loc, bool Diagnose) {\n  if (StillUndeduced && Diagnose && !FD->isInvalidDecl()) {\n    Diag(FD->getLocation(), diag::note_callee_decl) << FD;"}}
[n]={{s,6496,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too few arguments are available (and we don\'t have default\n  // arguments for the remaining parameters), don\'t make the call.\n  if (Args.size() < NumParams) {\n    if (Args.size() < MinArgs) {\n      // Emit the location of the prototype.\n      if (!TC && FDecl && !FDecl->getBuiltinID() && !IsExecConfig)\n        Diag(FDecl->getLocation(), diag::note_callee_decl) << FDecl << FDecl->getParametersSourceRange();"},{s,6565,"/// ConvertArgumentsForCall - Converts the arguments specified in\n/// Args/NumArgs to the parameter types of the function FDecl with\n/// function prototype Proto. Call is the call expression itself, and\n/// Fn is the function expression. For a C++ member function, this\n/// routine does not attempt to convert the object argument. Returns\n/// true if the call is ill-formed.\nbool Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, FunctionDecl *FDecl, const FunctionProtoType *Proto, ArrayRef<Expr *> Args, SourceLocation RParenLoc, bool IsExecConfig) {\n  // If too many are passed and not variadic, error on the extras and drop\n  // them.\n  if (Args.size() > NumParams) {\n    if (!Proto->isVariadic()) {\n      // Emit the location of the prototype.\n      if (!TC && FDecl && !FDecl->getBuiltinID() && !IsExecConfig)\n        Diag(FDecl->getLocation(), diag::note_callee_decl) << FDecl << FDecl->getParametersSourceRange();"},{s,7363,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  // Interrupt handlers don\'t save off the VFP regs automatically on ARM,\n  // so there\'s some risk when calling out to non-interrupt handler functions\n  // that the callee might not preserve them. This is easy to diagnose here,\n  // but can be very challenging to debug.\n  // Likewise, X86 interrupt handlers may only call routines with attribute\n  // no_caller_saved_registers since there is no efficient way to\n  // save and restore the non-GPR state.\n  if (auto *Caller = getCurFunctionDecl()) {\n    if (Caller->hasAttr<ARMInterruptAttr>()) {\n      if (VFP && (!FDecl || !FDecl->hasAttr<ARMInterruptAttr>())) {\n        if (FDecl)\n          Diag(FDecl->getLocation(), diag::note_callee_decl) << FDecl;"},{s,7402,"/// BuildResolvedCallExpr - Build a call to a resolved expression,\n/// i.e. an expression not of \\p OverloadTy.  The expression should\n/// unary-convert to an expression of function-pointer or\n/// block-pointer type.\n///\n/// \\param NDecl the declaration being called, if available\nExprResult Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, SourceLocation LParenLoc, ArrayRef<Expr *> Args, SourceLocation RParenLoc, Expr *Config, bool IsExecConfig, ADLCallKind UsesADL) {\n  // Interrupt handlers don\'t save off the VFP regs automatically on ARM,\n  // so there\'s some risk when calling out to non-interrupt handler functions\n  // that the callee might not preserve them. This is easy to diagnose here,\n  // but can be very challenging to debug.\n  // Likewise, X86 interrupt handlers may only call routines with attribute\n  // no_caller_saved_registers since there is no efficient way to\n  // save and restore the non-GPR state.\n  if (auto *Caller = getCurFunctionDecl()) {\n    if (Caller->hasAttr<AnyX86InterruptAttr>() && ((!FDecl || !FDecl->hasAttr<AnyX86NoCallerSavedRegistersAttr>()))) {\n      if (FDecl)\n        Diag(FDecl->getLocation(), diag::note_callee_decl) << FDecl;"},{V,1549,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  if (ObjCMethodDecl *setterMethod = property->getSetterMethodDecl()) {\n    if (getLangOpts().CPlusPlus && Synthesize && !CompleteTypeErr && Ivar->getType()->isRecordType()) {\n      if (property->getPropertyAttributes() & ObjCPropertyAttribute::kind_atomic) {\n        if (const CXXOperatorCallExpr *CXXCE = dyn_cast_or_null<CXXOperatorCallExpr>(callExpr))\n          if (const FunctionDecl *FuncDecl = CXXCE->getDirectCallee())\n            if (!FuncDecl->isTrivial())\n              if (property->getType()->isReferenceType()) {\n                Diag(FuncDecl->getBeginLoc(), diag::note_callee_decl) << FuncDecl;"},{"clang/lib/Sema/SemaTemplateDeduction.cpp",5039,"bool Sema::DeduceReturnType(FunctionDecl *FD, SourceLocation Loc, bool Diagnose) {\n  if (StillUndeduced && Diagnose && !FD->isInvalidDecl()) {\n    Diag(FD->getLocation(), diag::note_callee_decl) << FD;"}}
},
},
["note_callee_static_array"]={
["note_callee_static_array"]={
[f]="callee declares array parameter as static here",
[b]="callee declares array parameter as static here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="callee declares array parameter as static here",
[h]="callee declares array parameter as static here",
[g]=b,
[j]=i,
[e]="callee declares array parameter as static here",
[k]="callee declares array parameter as static here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5aa6ecb619bc",1318799852,"Add sema checks for calls to functions taking static array parameters"},
[m]={"5aa6ecb619bc",1318799852,"Add sema checks for calls to functions taking static array parameters"},
[n]={{r,6683,"static void DiagnoseCalleeStaticArrayParam(Sema &S, ParmVarDecl *PVD) {\n  if (ArrayTypeLoc ATL = TL.getAs<ArrayTypeLoc>())\n    S.Diag(PVD->getLocation(), diag::note_callee_static_array) << ATL.getLocalSourceRange();"}}
[n]={{s,6683,"static void DiagnoseCalleeStaticArrayParam(Sema &S, ParmVarDecl *PVD) {\n  if (ArrayTypeLoc ATL = TL.getAs<ArrayTypeLoc>())\n    S.Diag(PVD->getLocation(), diag::note_callee_static_array) << ATL.getLocalSourceRange();"}},
[o]={
["clang/test/Sema/static-array.c"]={"clang/test/Sema/static-array.c:3:15: note: callee declares array parameter as static here","clang/test/Sema/static-array.c:6:14: note: callee declares array parameter as static here","clang/test/Sema/static-array.c:6:14: note: callee declares array parameter as static here","clang/test/Sema/static-array.c:8:21: note: callee declares array parameter as static here","clang/test/Sema/static-array.c:6:14: note: callee declares array parameter as static here","clang/test/Sema/static-array.c:6:14: note: callee declares array parameter as static here"}
}
},
},
["note_cannot_use_trivial_abi_reason"]={
["note_cannot_use_trivial_abi_reason"]={
[f]="\'trivial_abi\' is disallowed on A because ...",
[b]="\'trivial_abi\' is disallowed on A because ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="\'trivial_abi\' is disallowed on %0 because %select{its copy constructors and move constructors are all deleted|it is polymorphic|it has a base of a non-trivial class type|it has a virtual base|it has a __weak field|it has a field of a non-trivial class type}1",
[h]="\'trivial_abi\' is disallowed on %0 because %select{its copy constructors and move constructors are all deleted|it is polymorphic|it has a base of a non-trivial class type|it has a virtual base|it has a __weak field|it has a field of a non-trivial class type}1",
[g]=b,
[j]=i,
[e]="\'trivial_abi\' is disallowed on (.*?) because (?:its copy constructors and move constructors are all deleted|it is polymorphic|it has a base of a non\\-trivial class type|it has a virtual base|it has a __weak field|it has a field of a non\\-trivial class type)",
[k]="\'trivial_abi\' is disallowed on (.*?) because (?:its copy constructors and move constructors are all deleted|it is polymorphic|it has a base of a non\\-trivial class type|it has a virtual base|it has a __weak field|it has a field of a non\\-trivial class type)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Y,1582847864,W},
[m]={mb,1582847864,jb},
[n]={{q,10304,"void Sema::checkIllFormedTrivialABIStruct(CXXRecordDecl &RD) {\n  auto PrintDiagAndRemoveAttr = [&](unsigned N) {\n    // No diagnostics if this is a template instantiation.\n    if (!isTemplateInstantiation(RD.getTemplateSpecializationKind())) {\n      Diag(RD.getAttr<TrivialABIAttr>()->getLocation(), diag::note_cannot_use_trivial_abi_reason) << &RD << N;"}}
[n]={{r,10304,"void Sema::checkIllFormedTrivialABIStruct(CXXRecordDecl &RD) {\n  auto PrintDiagAndRemoveAttr = [&](unsigned N) {\n    // No diagnostics if this is a template instantiation.\n    if (!isTemplateInstantiation(RD.getTemplateSpecializationKind())) {\n      Diag(RD.getAttr<TrivialABIAttr>()->getLocation(), diag::note_cannot_use_trivial_abi_reason) << &RD << N;"}},
[o]={
["clang/test/SemaCXX/attr-trivial-abi.cpp"]={"clang/test/SemaCXX/attr-trivial-abi.cpp:28:23: note: \'trivial_abi\' is disallowed on \'S3\' because it is polymorphic","clang/test/SemaCXX/attr-trivial-abi.cpp:35:18: note: \'trivial_abi\' is disallowed on \'S3_2\' because it is polymorphic","clang/test/SemaCXX/attr-trivial-abi.cpp:38:23: note: \'trivial_abi\' is disallowed on \'S3_3\' because it has a field of a non-trivial class type","clang/test/SemaCXX/attr-trivial-abi.cpp:53:23: note: \'trivial_abi\' is disallowed on \'S3_4\' because it has a field of a non-trivial class type","clang/test/SemaCXX/attr-trivial-abi.cpp:64:23: note: \'trivial_abi\' is disallowed on \'S5\' because it has a virtual base","clang/test/SemaCXX/attr-trivial-abi.cpp:117:23: note: \'trivial_abi\' is disallowed on \'CopyMoveDeleted\' because its copy constructors and move constructors are all deleted","clang/test/SemaCXX/attr-trivial-abi.cpp:127:23: note: \'trivial_abi\' is disallowed on \'S18\' because its copy constructors and move constructors are all deleted","clang/test/SemaCXX/attr-trivial-abi.cpp:152:23: note: \'trivial_abi\' is disallowed on \'S19\' because its copy constructors and move constructors are all deleted"}
}
},
},
["note_carries_dependency_missing_first_decl"]={
["note_carries_dependency_missing_first_decl"]={
[f]="declaration missing \'[[carries_dependency]]\' attribute is here",
[b]="declaration missing \'[[carries_dependency]]\' attribute is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declaration missing \'[[carries_dependency]]\' attribute is here",
[h]="declaration missing \'[[carries_dependency]]\' attribute is here",
[g]=b,
[j]=i,
[e]="declaration missing \'\\[\\[carries_dependency\\]\\]\' attribute is here",
[k]="declaration missing \'\\[\\[carries_dependency\\]\\]\' attribute is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute."},
[m]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute."},
[n]={{t,3349,"/// mergeParamDeclAttributes - Copy attributes from the old parameter\n/// to the new one.\nstatic void mergeParamDeclAttributes(ParmVarDecl *newDecl, const ParmVarDecl *oldDecl, Sema &S) {\n  if (CDA && !oldDecl->hasAttr<CarriesDependencyAttr>()) {\n    S.Diag(FirstVD->getLocation(), diag::note_carries_dependency_missing_first_decl) << 1 /*Param*/;"},{t,4057,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (getLangOpts().CPlusPlus) {\n    if (CDA && !Old->hasAttr<CarriesDependencyAttr>()) {\n      Diag(Old->getFirstDecl()->getLocation(), diag::note_carries_dependency_missing_first_decl) << 0 /*Function*/;"}}
[n]={{u,3349,"/// mergeParamDeclAttributes - Copy attributes from the old parameter\n/// to the new one.\nstatic void mergeParamDeclAttributes(ParmVarDecl *newDecl, const ParmVarDecl *oldDecl, Sema &S) {\n  if (CDA && !oldDecl->hasAttr<CarriesDependencyAttr>()) {\n    S.Diag(FirstVD->getLocation(), diag::note_carries_dependency_missing_first_decl) << 1 /*Param*/;"},{u,4057,"/// MergeFunctionDecl - We just parsed a function \'New\' from\n/// declarator D which has the same name and scope as a previous\n/// declaration \'Old\'.  Figure out how to resolve this situation,\n/// merging decls or emitting diagnostics as appropriate.\n///\n/// In C++, New and Old must be declarations that are not\n/// overloaded. Use IsOverload to determine whether New and Old are\n/// overloaded, and to select the Old declaration that New should be\n/// merged with.\n///\n/// Returns true if there was an error, false otherwise.\nbool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, bool MergeTypeWithOld, bool NewDeclIsDefn) {\n  if (getLangOpts().CPlusPlus) {\n    if (CDA && !Old->hasAttr<CarriesDependencyAttr>()) {\n      Diag(Old->getFirstDecl()->getLocation(), diag::note_carries_dependency_missing_first_decl) << 0 /*Function*/;"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp"]={"clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:3:5: note: declaration missing \'[[carries_dependency]]\' attribute is here","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:3:10: note: declaration missing \'[[carries_dependency]]\' attribute is here","clang/test/CXX/dcl.dcl/dcl.attr/dcl.attr.depend/p2.cpp:7:5: note: declaration missing \'[[carries_dependency]]\' attribute is here"}
}
},
},
["note_cast_operand_to_int"]={
["note_cast_operand_to_int"]={
[f]="cast one or both operands to int to silence this warning",
[b]="cast one or both operands to int to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cast one or both operands to int to silence this warning",
[h]="cast one or both operands to int to silence this warning",
[g]=b,
[j]=i,
[e]="cast one or both operands to int to silence this warning",
[k]="cast one or both operands to int to silence this warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Pb,1615397021,Ob},
[m]={lc,1615397021,vc},
[n]={{y,15253,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  if (const auto *BO = dyn_cast<BinaryOperator>(SourceExpr))\n    if ((BO->getOpcode() == BO_And || BO->getOpcode() == BO_Or) && BO->getLHS()->isKnownToHaveBooleanValue() && BO->getRHS()->isKnownToHaveBooleanValue() && BO->getLHS()->HasSideEffects(S.Context) && BO->getRHS()->HasSideEffects(S.Context)) {\n      S.Diag(BO->getBeginLoc(), diag::note_cast_operand_to_int);"}}
[n]={{D,15253,"/// Data recursive variant of AnalyzeImplicitConversions. Subexpressions\n/// that should be visited are added to WorkList.\nstatic void AnalyzeImplicitConversions(Sema &S, AnalyzeImplicitConversionsWorkItem Item, llvm::SmallVectorImpl<AnalyzeImplicitConversionsWorkItem> &WorkList) {\n  if (const auto *BO = dyn_cast<BinaryOperator>(SourceExpr))\n    if ((BO->getOpcode() == BO_And || BO->getOpcode() == BO_Or) && BO->getLHS()->isKnownToHaveBooleanValue() && BO->getRHS()->isKnownToHaveBooleanValue() && BO->getLHS()->HasSideEffects(S.Context) && BO->getRHS()->HasSideEffects(S.Context)) {\n      S.Diag(BO->getBeginLoc(), diag::note_cast_operand_to_int);"}},
[o]={
["clang/test/Sema/warn-bitwise-or-bool.c"]={"clang/test/Sema/warn-bitwise-or-bool.c:27:7: note: cast one or both operands to int to silence this warning","clang/test/Sema/warn-bitwise-or-bool.c:32:7: note: cast one or both operands to int to silence this warning","clang/test/Sema/warn-bitwise-or-bool.c:35:7: note: cast one or both operands to int to silence this warning","clang/test/Sema/warn-bitwise-or-bool.c:40:7: note: cast one or both operands to int to silence this warning","clang/test/Sema/warn-bitwise-or-bool.c:48:7: note: cast one or both operands to int to silence this warning","clang/test/Sema/warn-bitwise-or-bool.c:52:7: note: cast one or both operands to int to silence this warning","clang/test/Sema/warn-bitwise-or-bool.c:58:8: note: cast one or both operands to int to silence this warning"}
}
},
},
["note_cast_to_void"]={
["note_cast_to_void"]={
[f]="cast expression to void to silence warning",
[b]="cast expression to void to silence warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cast expression to void to silence warning",
[h]="cast expression to void to silence warning",
[g]=b,
[j]=i,
[e]="cast expression to void to silence warning",
[k]="cast expression to void to silence warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"faca2d83b13e",1455839920,"Add -Wcomma warning to Clang."},
[m]={"faca2d83b13e",1455839920,"Add -Wcomma warning to Clang."},
[n]={{r,14659,"// Look for instances where it is likely the comma operator is confused with\n// another operator.  There is an explicit list of acceptable expressions for\n// the left hand side of the comma operator, otherwise emit a warning.\nvoid Sema::DiagnoseCommaOperator(const Expr *LHS, SourceLocation Loc) {\n  Diag(LHS->getBeginLoc(), diag::note_cast_to_void) << LHS->getSourceRange() << FixItHint::CreateInsertion(LHS->getBeginLoc(), LangOpts.CPlusPlus ? \"static_cast<void>(\" : \"(void)(\") << FixItHint::CreateInsertion(PP.getLocForEndOfToken(LHS->getEndLoc()), \")\");"}}
[n]={{s,14659,"// Look for instances where it is likely the comma operator is confused with\n// another operator.  There is an explicit list of acceptable expressions for\n// the left hand side of the comma operator, otherwise emit a warning.\nvoid Sema::DiagnoseCommaOperator(const Expr *LHS, SourceLocation Loc) {\n  Diag(LHS->getBeginLoc(), diag::note_cast_to_void) << LHS->getSourceRange() << FixItHint::CreateInsertion(LHS->getBeginLoc(), LangOpts.CPlusPlus ? \"static_cast<void>(\" : \"(void)(\") << FixItHint::CreateInsertion(PP.getLocForEndOfToken(LHS->getEndLoc()), \")\");"}},
[o]={
["clang/test/SemaCXX/warn-comma-operator.cpp"]={"clang/test/SemaCXX/warn-comma-operator.cpp:46:7: note: cast expression to void to silence warning","clang/test/SemaCXX/warn-comma-operator.cpp:57:10: note: cast expression to void to silence warning","clang/test/SemaCXX/warn-comma-operator.cpp:69:15: note: cast expression to void to silence warning","clang/test/SemaCXX/warn-comma-operator.cpp:75:15: note: cast expression to void to silence warning","clang/test/SemaCXX/warn-comma-operator.cpp:84:3: note: cast expression to void to silence warning","clang/test/SemaCXX/warn-comma-operator.cpp:93:8: note: cast expression to void to silence warning","clang/test/SemaCXX/warn-comma-operator.cpp:99:12: note: cast expression to void to silence warning","clang/test/SemaCXX/warn-comma-operator.cpp:105:10: note: cast expression to void to silence warning","clang/test/SemaCXX/warn-comma-operator.cpp:111:10: note: cast expression to void to silence warning","clang/test/SemaCXX/warn-comma-operator.cpp:117:7: note: cast expression to void to silence warning","clang/test/SemaCXX/warn-comma-operator.cpp:123:17: note: cast expression to void to silence warning","clang/test/SemaCXX/warn-comma-operator.cpp:132:3: note: cast expression to void to silence warning","clang/test/SemaCXX/warn-comma-operator.cpp:132:18: note: cast expression to void to silence warning","clang/test/SemaCXX/warn-comma-operator.cpp:132:33: note: cast expression to void to silence warning"}
}
},
},
["note_cat_conform_to_noescape_prot"]={
["note_cat_conform_to_noescape_prot"]={
[f]="... conforms to protocol A which defines method B",
[b]="... conforms to protocol A which defines method B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{category|class extension}0 conforms to protocol %1 which defines method %2",
[h]="%select{category|class extension}0 conforms to protocol %1 which defines method %2",
[g]=b,
[j]=i,
[e]="(?:category|class extension) conforms to protocol (.*?) which defines method (.*?)",
[k]="(?:category|class extension) conforms to protocol (.*?) which defines method (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"a6b5e0036128",1532750773,"[Sema][ObjC] Warn when a method declared in a protocol takes a"},
[m]={"a6b5e0036128",1532750773,"[Sema][ObjC] Warn when a method declared in a protocol takes a"},
[n]={{E,132,"/// Produce additional diagnostics if a category conforms to a protocol that\n/// defines a method taking a non-escaping parameter.\nstatic void diagnoseNoescape(const ParmVarDecl *NewD, const ParmVarDecl *OldD, const ObjCCategoryDecl *CD, const ObjCProtocolDecl *PD, Sema &S) {\n  if (!diagnoseNoescape(NewD, OldD, S))\n    S.Diag(CD->getLocation(), diag::note_cat_conform_to_noescape_prot) << CD->IsClassExtension() << PD << cast<ObjCMethodDecl>(NewD->getDeclContext());"}}
[n]={{M,132,"/// Produce additional diagnostics if a category conforms to a protocol that\n/// defines a method taking a non-escaping parameter.\nstatic void diagnoseNoescape(const ParmVarDecl *NewD, const ParmVarDecl *OldD, const ObjCCategoryDecl *CD, const ObjCProtocolDecl *PD, Sema &S) {\n  if (!diagnoseNoescape(NewD, OldD, S))\n    S.Diag(CD->getLocation(), diag::note_cat_conform_to_noescape_prot) << CD->IsClassExtension() << PD << cast<ObjCMethodDecl>(NewD->getDeclContext());"}},
[o]={
["clang/test/SemaObjCXX/noescape.mm"]={"clang/test/SemaObjCXX/noescape.mm:119:12: note: class extension conforms to protocol \'NoescapeProt\' which defines method \'m0:\'"}
}
},
},
["note_cc1_round_trip_generated"]={
["note_cc1_round_trip_generated"]={
[f]="generated arguments #A in round-trip: B",
[b]="generated arguments #A in round-trip: B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="generated arguments #%0 in round-trip: %1",
[h]="generated arguments #%0 in round-trip: %1",
[g]=b,
[j]=i,
[e]="generated arguments \\#(.*?) in round\\-trip\\: (.*?)",
[k]="generated arguments \\#(.*?) in round\\-trip\\: (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[m]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[n]={{bc,756,"#endif\n  // The first parse on original arguments succeeded, but second parse of\n  // generated arguments failed. Something must be wrong with the generator.\n  if (!Success2) {\n    Diags.Report(diag::note_cc1_round_trip_generated) << 1 << SerializeArgs(GeneratedArgs);"},{bc,784,"#endif\n  // If we generated different arguments from what we assume are two\n  // semantically equivalent CompilerInvocations, the Generate function may\n  // be non-deterministic.\n  if (!Equal(GeneratedArgs, ComparisonArgs)) {\n    Diags.Report(diag::note_cc1_round_trip_generated) << 1 << SerializeArgs(GeneratedArgs);"},{bc,786,"#endif\n  // If we generated different arguments from what we assume are two\n  // semantically equivalent CompilerInvocations, the Generate function may\n  // be non-deterministic.\n  if (!Equal(GeneratedArgs, ComparisonArgs)) {\n    Diags.Report(diag::note_cc1_round_trip_generated) << 2 << SerializeArgs(ComparisonArgs);"}}
[n]={{sc,756,"#endif\n  // The first parse on original arguments succeeded, but second parse of\n  // generated arguments failed. Something must be wrong with the generator.\n  if (!Success2) {\n    Diags.Report(diag::note_cc1_round_trip_generated) << 1 << SerializeArgs(GeneratedArgs);"},{sc,784,"#endif\n  // If we generated different arguments from what we assume are two\n  // semantically equivalent CompilerInvocations, the Generate function may\n  // be non-deterministic.\n  if (!Equal(GeneratedArgs, ComparisonArgs)) {\n    Diags.Report(diag::note_cc1_round_trip_generated) << 1 << SerializeArgs(GeneratedArgs);"},{sc,786,"#endif\n  // If we generated different arguments from what we assume are two\n  // semantically equivalent CompilerInvocations, the Generate function may\n  // be non-deterministic.\n  if (!Equal(GeneratedArgs, ComparisonArgs)) {\n    Diags.Report(diag::note_cc1_round_trip_generated) << 2 << SerializeArgs(ComparisonArgs);"}}
},
},
["note_cc1_round_trip_original"]={
["note_cc1_round_trip_original"]={
[f]="original arguments in round-trip: A",
[b]="original arguments in round-trip: A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="original arguments in round-trip: %0",
[h]="original arguments in round-trip: %0",
[g]=b,
[j]=i,
[e]="original arguments in round\\-trip\\: (.*?)",
[k]="original arguments in round\\-trip\\: (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[m]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[n]={{bc,728,"#endif\n  // Run the first parse on the original arguments with the dummy invocation and\n  // diagnostics.\n  if (!Parse(DummyInvocation, CommandLineArgs, DummyDiags, Argv0) || DummyDiags.getNumWarnings() != 0) {\n    Diags.Report(diag::note_cc1_round_trip_original) << SerializeArgs(CommandLineArgs);"}}
[n]={{sc,728,"#endif\n  // Run the first parse on the original arguments with the dummy invocation and\n  // diagnostics.\n  if (!Parse(DummyInvocation, CommandLineArgs, DummyDiags, Argv0) || DummyDiags.getNumWarnings() != 0) {\n    Diags.Report(diag::note_cc1_round_trip_original) << SerializeArgs(CommandLineArgs);"}}
},
},
["note_change_bitfield_sign"]={
["note_change_bitfield_sign"]={
[f]="consider making the bitfield type ...",
[b]="consider making the bitfield type ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="consider making the bitfield type %select{unsigned|signed}0",
[h]="consider making the bitfield type %select{unsigned|signed}0",
[g]=b,
[j]=i,
[e]="consider making the bitfield type (?:unsigned|signed)",
[k]="consider making the bitfield type (?:unsigned|signed)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values"},
[m]={"329f24d6f6e7",1489514462,"Warn on enum assignment to bitfields that can\'t fit all values"},
[n]={{y,14095,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  if (!OriginalInit->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n    // The RHS is not constant.  If the RHS has an enum type, make sure the\n    // bitfield is wide enough to hold all the values of the enum without\n    // truncation.\n    if (const auto *EnumTy = OriginalInit->getType()->getAs<EnumType>()) {\n      if (DiagID) {\n        S.Diag(Bitfield->getTypeSpecStartLoc(), diag::note_change_bitfield_sign) << SignedEnum << TypeRange;"}}
[n]={{D,14095,"/// Analyzes an attempt to assign the given value to a bitfield.\n///\n/// Returns true if there was something fishy about the attempt.\nstatic bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init, SourceLocation InitLoc) {\n  if (!OriginalInit->EvaluateAsInt(Result, S.Context, Expr::SE_AllowSideEffects)) {\n    // The RHS is not constant.  If the RHS has an enum type, make sure the\n    // bitfield is wide enough to hold all the values of the enum without\n    // truncation.\n    if (const auto *EnumTy = OriginalInit->getType()->getAs<EnumType>()) {\n      if (DiagID) {\n        S.Diag(Bitfield->getTypeSpecStartLoc(), diag::note_change_bitfield_sign) << SignedEnum << TypeRange;"}},
[o]={
["clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp"]={"clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:11:3: note: consider making the bitfield type signed","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:11:3: note: consider making the bitfield type signed","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:12:3: note: consider making the bitfield type unsigned","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:13:3: note: consider making the bitfield type signed","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:13:3: note: consider making the bitfield type signed","clang/test/SemaCXX/warn-bitfield-enum-conversion.cpp:14:3: note: consider making the bitfield type unsigned"}
}
},
},
["note_change_calling_conv_fixit"]={
["note_change_calling_conv_fixit"]={
[f]="consider defining A with the \'B\' calling convention",
[b]="consider defining A with the \'B\' calling convention",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="consider defining %0 with the \'%1\' calling convention",
[h]="consider defining %0 with the \'%1\' calling convention",
[g]=b,
[j]=i,
[e]="consider defining (.*?) with the \'(.*?)\' calling convention",
[k]="consider defining (.*?) with the \'(.*?)\' calling convention",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"9f49733c65b0",1462914003,"Add -Wcast-calling-convention to warn when casting away calling conventions"},
[m]={"9f49733c65b0",1462914003,"Add -Wcast-calling-convention to warn when casting away calling conventions"},
[n]={{"clang/lib/Sema/SemaCast.cpp",2188,"/// Diagnose casts that change the calling convention of a pointer to a function\n/// defined in the current TU.\nstatic void DiagnoseCallingConvCast(Sema &Self, const ExprResult &SrcExpr, QualType DstType, SourceRange OpRange) {\n  Self.Diag(NameLoc, diag::note_change_calling_conv_fixit) << FD << DstCCName << FixItHint::CreateInsertion(NameLoc, CCAttrText);"}}
[n]={{"clang/lib/Sema/SemaCast.cpp",2188,"/// Diagnose casts that change the calling convention of a pointer to a function\n/// defined in the current TU.\nstatic void DiagnoseCallingConvCast(Sema &Self, const ExprResult &SrcExpr, QualType DstType, SourceRange OpRange) {\n  Self.Diag(NameLoc, diag::note_change_calling_conv_fixit) << FD << DstCCName << FixItHint::CreateInsertion(NameLoc, CCAttrText);"}},
[o]={
["clang/test/Sema/callingconv-cast.c"]={"clang/test/Sema/callingconv-cast.c:16:6: note: consider defining \'mismatched\' with the \'stdcall\' calling convention","clang/test/Sema/callingconv-cast.c:16:6: note: consider defining \'mismatched\' with the \'stdcall\' calling convention","clang/test/Sema/callingconv-cast.c:16:6: note: consider defining \'mismatched\' with the \'stdcall\' calling convention","clang/test/Sema/callingconv-cast.c:7:6: note: consider defining \'mismatched_before_winapi\' with the \'stdcall\' calling convention","clang/test/Sema/callingconv-cast.c:19:6: note: consider defining \'mismatched_declaration\' with the \'stdcall\' calling convention","clang/test/Sema/callingconv-cast.c:22:6: note: consider defining \'suggest_fix_first_redecl\' with the \'stdcall\' calling convention"}
}
},
},
["note_checking_constraints_for_class_spec_id_here"]={
["note_checking_constraints_for_class_spec_id_here"]={
[f]="while checking constraint satisfaction for class template partial specialization \'A\' required here",
[b]="while checking constraint satisfaction for class template partial specialization \'A\' required here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="while checking constraint satisfaction for class template partial specialization \'%0\' required here",
[h]="while checking constraint satisfaction for class template partial specialization \'%0\' required here",
[g]=b,
[j]=i,
[e]="while checking constraint satisfaction for class template partial specialization \'(.*?)\' required here",
[k]="while checking constraint satisfaction for class template partial specialization \'(.*?)\' required here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Rb,1569403888,Nb},
[m]={pc,1569403888,rc},
[n]={{z,1036,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintsCheck: {\n      if (isa<ConceptDecl>(Active->Entity))\n      else if (isa<TemplateDecl>(Active->Entity))\n      else if (isa<VarTemplatePartialSpecializationDecl>(Active->Entity))\n      else if (isa<ClassTemplatePartialSpecializationDecl>(Active->Entity))\n        DiagID = diag::note_checking_constraints_for_class_spec_id_here;"}}
[n]={{G,1036,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintsCheck: {\n      if (isa<ConceptDecl>(Active->Entity))\n      else if (isa<TemplateDecl>(Active->Entity))\n      else if (isa<VarTemplatePartialSpecializationDecl>(Active->Entity))\n      else if (isa<ClassTemplatePartialSpecializationDecl>(Active->Entity))\n        DiagID = diag::note_checking_constraints_for_class_spec_id_here;"}},
[o]={
["clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:29:24: note: while checking constraint satisfaction for class template partial specialization \'B<int *>\' required here","clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:29:24: note: while checking constraint satisfaction for class template partial specialization \'B<int>\' required here"}
}
},
},
["note_checking_constraints_for_function_here"]={
["note_checking_constraints_for_function_here"]={
[f]="while checking constraint satisfaction for function \'A\' required here",
[b]="while checking constraint satisfaction for function \'A\' required here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="while checking constraint satisfaction for function \'%0\' required here",
[h]="while checking constraint satisfaction for function \'%0\' required here",
[g]=b,
[j]=i,
[e]="while checking constraint satisfaction for function \'(.*?)\' required here",
[k]="while checking constraint satisfaction for function \'(.*?)\' required here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling"},
[m]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling"},
[n]={{z,1039,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintsCheck: {\n      if (isa<ConceptDecl>(Active->Entity))\n      else if (isa<TemplateDecl>(Active->Entity))\n      else if (isa<VarTemplatePartialSpecializationDecl>(Active->Entity))\n      else if (isa<ClassTemplatePartialSpecializationDecl>(Active->Entity))\n      else {\n        DiagID = diag::note_checking_constraints_for_function_here;"}}
[n]={{G,1039,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintsCheck: {\n      if (isa<ConceptDecl>(Active->Entity))\n      else if (isa<TemplateDecl>(Active->Entity))\n      else if (isa<VarTemplatePartialSpecializationDecl>(Active->Entity))\n      else if (isa<ClassTemplatePartialSpecializationDecl>(Active->Entity))\n      else {\n        DiagID = diag::note_checking_constraints_for_function_here;"}},
[o]={
["clang/test/SemaTemplate/cxx2a-constraint-exprs.cpp"]={"clang/test/SemaTemplate/cxx2a-constraint-exprs.cpp:45:20: note: while checking constraint satisfaction for function \'foo\' required here"}
}
},
},
["note_checking_constraints_for_template_id_here"]={
["note_checking_constraints_for_template_id_here"]={
[f]="while checking constraint satisfaction for template \'A\' required here",
[b]="while checking constraint satisfaction for template \'A\' required here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="while checking constraint satisfaction for template \'%0\' required here",
[h]="while checking constraint satisfaction for template \'%0\' required here",
[g]=b,
[j]=i,
[e]="while checking constraint satisfaction for template \'(.*?)\' required here",
[k]="while checking constraint satisfaction for template \'(.*?)\' required here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Rb,1569403888,Nb},
[m]={pc,1569403888,rc},
[n]={{z,1032,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintsCheck: {\n      if (isa<ConceptDecl>(Active->Entity))\n      else if (isa<TemplateDecl>(Active->Entity))\n        DiagID = diag::note_checking_constraints_for_template_id_here;"}}
[n]={{G,1032,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintsCheck: {\n      if (isa<ConceptDecl>(Active->Entity))\n      else if (isa<TemplateDecl>(Active->Entity))\n        DiagID = diag::note_checking_constraints_for_template_id_here;"}},
[o]={
["clang/test/SemaCXX/concept-crash-on-diagnostic.cpp"]={"clang/test/SemaCXX/concept-crash-on-diagnostic.cpp:25:3: note: while checking constraint satisfaction for template \'compare<Object *, Object *>\' required here"}
}
},
},
["note_checking_constraints_for_var_spec_id_here"]={
["note_checking_constraints_for_var_spec_id_here"]={
[f]="while checking constraint satisfaction for variable template partial specialization \'A\' required here",
[b]="while checking constraint satisfaction for variable template partial specialization \'A\' required here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="while checking constraint satisfaction for variable template partial specialization \'%0\' required here",
[h]="while checking constraint satisfaction for variable template partial specialization \'%0\' required here",
[g]=b,
[j]=i,
[e]="while checking constraint satisfaction for variable template partial specialization \'(.*?)\' required here",
[k]="while checking constraint satisfaction for variable template partial specialization \'(.*?)\' required here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Rb,1569403888,Nb},
[m]={pc,1569403888,rc},
[n]={{z,1034,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintsCheck: {\n      if (isa<ConceptDecl>(Active->Entity))\n      else if (isa<TemplateDecl>(Active->Entity))\n      else if (isa<VarTemplatePartialSpecializationDecl>(Active->Entity))\n        DiagID = diag::note_checking_constraints_for_var_spec_id_here;"}}
[n]={{G,1034,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintsCheck: {\n      if (isa<ConceptDecl>(Active->Entity))\n      else if (isa<TemplateDecl>(Active->Entity))\n      else if (isa<VarTemplatePartialSpecializationDecl>(Active->Entity))\n        DiagID = diag::note_checking_constraints_for_var_spec_id_here;"}},
[o]={
["clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:78:17: note: while checking constraint satisfaction for variable template partial specialization \'v1<int *>\' required here","clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:78:17: note: while checking constraint satisfaction for variable template partial specialization \'v1<int>\' required here"}
}
},
},
["note_class_declared"]={
["note_class_declared"]={
[f]="class is declared here",
[b]="class is declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="class is declared here",
[h]="class is declared here",
[g]=b,
[j]=i,
[e]="class is declared here",
[k]="class is declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"1f626d6fd1ca",1309980245,"objc-arc: Support objc_arc_weak_unavailable on those"},
[m]={"1f626d6fd1ca",1309980245,"objc-arc: Support objc_arc_weak_unavailable on those"},
[n]={{E,4166,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      if (const ObjCInterfaceDecl *Super = IDecl->getSuperClass()) {\n        // An interface can subclass another interface with a\n        // objc_subclassing_restricted attribute when it has that attribute as\n        // well (because of interfaces imported from Swift). Therefore we have\n        // to check if we can subclass in the implementation as well.\n        if (IDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n          Diag(Super->getLocation(), diag::note_class_declared);"},{E,4198,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n  } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n  } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n    if (const ObjCInterfaceDecl *Super = IntfDecl->getSuperClass()) {\n      if (!IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n        Diag(Super->getLocation(), diag::note_class_declared);"},{B,7076,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Forbid __weak for class objects marked as\n  // objc_arc_weak_reference_unavailable\n  if (lifetime == Qualifiers::OCL_Weak) {\n    if (const ObjCObjectPointerType *ObjT = type->getAs<ObjCObjectPointerType>()) {\n      if (ObjCInterfaceDecl *Class = ObjT->getInterfaceDecl()) {\n        if (Class->isArcWeakrefUnavailable()) {\n          S.Diag(ObjT->getInterfaceDecl()->getLocation(), diag::note_class_declared);"}}
[n]={{M,4166,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      if (const ObjCInterfaceDecl *Super = IDecl->getSuperClass()) {\n        // An interface can subclass another interface with a\n        // objc_subclassing_restricted attribute when it has that attribute as\n        // well (because of interfaces imported from Swift). Therefore we have\n        // to check if we can subclass in the implementation as well.\n        if (IDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n          Diag(Super->getLocation(), diag::note_class_declared);"},{M,4198,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n  } else if (ObjCCategoryImplDecl *CatImplClass = dyn_cast<ObjCCategoryImplDecl>(ClassDecl)) {\n  } else if (const auto *IntfDecl = dyn_cast<ObjCInterfaceDecl>(ClassDecl)) {\n    if (const ObjCInterfaceDecl *Super = IntfDecl->getSuperClass()) {\n      if (!IntfDecl->hasAttr<ObjCSubclassingRestrictedAttr>() && Super->hasAttr<ObjCSubclassingRestrictedAttr>()) {\n        Diag(Super->getLocation(), diag::note_class_declared);"},{I,7076,"/// handleObjCOwnershipTypeAttr - Process an objc_ownership\n/// attribute on the specified type.\n///\n/// Returns \'true\' if the attribute was handled.\nstatic bool handleObjCOwnershipTypeAttr(TypeProcessingState &state, ParsedAttr &attr, QualType &type) {\n  // Forbid __weak for class objects marked as\n  // objc_arc_weak_reference_unavailable\n  if (lifetime == Qualifiers::OCL_Weak) {\n    if (const ObjCObjectPointerType *ObjT = type->getAs<ObjCObjectPointerType>()) {\n      if (ObjCInterfaceDecl *Class = ObjT->getInterfaceDecl()) {\n        if (Class->isArcWeakrefUnavailable()) {\n          S.Diag(ObjT->getInterfaceDecl()->getLocation(), diag::note_class_declared);"}},
[o]={
["clang/test/SemaObjCXX/objc-weak.mm"]={"clang/test/SemaObjCXX/objc-weak.mm:8:12: note: class is declared here","clang/test/SemaObjCXX/objc-weak.mm:8:12: note: class is declared here"}
}
},
},
["note_cocoa_naming_declare_family"]={
["note_cocoa_naming_declare_family"]={
[f]="explicitly declare getter A with \'B\' to return an \'unowned\' object",
[b]="explicitly declare getter A with \'B\' to return an \'unowned\' object",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="explicitly declare getter %objcinstance0 with \'%1\' to return an \'unowned\' object",
[h]="explicitly declare getter %objcinstance0 with \'%1\' to return an \'unowned\' object",
[g]=b,
[j]=i,
[e]="explicitly declare getter (.*?) with \'(.*?)\' to return an \'unowned\' object",
[k]="explicitly declare getter (.*?) with \'(.*?)\' to return an \'unowned\' object",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"a34d04d35e72",1421449471,"Suggest objc_method_family(none) for a property named -newFoo or similar."},
[m]={"a34d04d35e72",1421449471,"Suggest objc_method_family(none) for a property named -newFoo or similar."},
[n]={{N,2304,"void Sema::DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D) {\n  for (const auto *PID : D->property_impls()) {\n    if (PD && !PD->hasAttr<NSReturnsNotRetainedAttr>() && !PD->isClassProperty()) {\n      if (family == OMF_alloc || family == OMF_copy || family == OMF_mutableCopy || family == OMF_new) {\n        auto noteDiag = Diag(noteLoc, diag::note_cocoa_naming_declare_family) << method->getDeclName() << spelling;"}}
[n]={{V,2304,"void Sema::DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D) {\n  for (const auto *PID : D->property_impls()) {\n    if (PD && !PD->hasAttr<NSReturnsNotRetainedAttr>() && !PD->isClassProperty()) {\n      if (family == OMF_alloc || family == OMF_copy || family == OMF_mutableCopy || family == OMF_new) {\n        auto noteDiag = Diag(noteLoc, diag::note_cocoa_naming_declare_family) << method->getDeclName() << spelling;"}},
[o]={
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:70:23: note: explicitly declare getter \'-newFoo\' with \'__attribute__((objc_method_family(none)))\' to return an \'unowned\' object","clang/test/SemaObjC/arc-decls.m:71:23: note: explicitly declare getter \'-copyBar\' with \'__attribute__((objc_method_family(none)))\' to return an \'unowned\' object","clang/test/SemaObjC/arc-decls.m:72:21: note: explicitly declare getter \'-allocBaz\' with \'__attribute__((objc_method_family(none)))\' to return an \'unowned\' object","clang/test/SemaObjC/arc-decls.m:74:23: note: explicitly declare getter \'-newDFoo\' with \'__attribute__((objc_method_family(none)))\' to return an \'unowned\' object","clang/test/SemaObjC/arc-decls.m:75:23: note: explicitly declare getter \'-copyDBar\' with \'__attribute__((objc_method_family(none)))\' to return an \'unowned\' object","clang/test/SemaObjC/arc-decls.m:76:21: note: explicitly declare getter \'-allocDBaz\' with \'__attribute__((objc_method_family(none)))\' to return an \'unowned\' object","clang/test/SemaObjC/arc-decls.m:103:33: note: explicitly declare getter \'-newGarply\' with \'__attribute__((objc_method_family(none)))\' to return an \'unowned\' object","clang/test/SemaObjC/arc-decls.m:94:1: note: explicitly declare getter \'-newFoo\' with \'__attribute__((objc_method_family(none)))\' to return an \'unowned\' object","clang/test/SemaObjC/arc-decls.m:97:1: note: explicitly declare getter \'-newBar\' with \'OBJC_METHOD_FAMILY_NONE\' to return an \'unowned\' object","clang/test/SemaObjC/arc-decls.m:100:23: note: explicitly declare getter \'-newBaz\' with \'OBJC_METHOD_FAMILY_NONE\' to return an \'unowned\' object"}
}
},
},
["note_collapse_loop_count"]={
["note_collapse_loop_count"]={
[f]="parameter of the \'collapse\' clause",
[b]="parameter of the \'collapse\' clause",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="parameter of the \'collapse\' clause",
[h]="parameter of the \'collapse\' clause",
[g]=b,
[j]=i,
[e]="parameter of the \'collapse\' clause",
[k]="parameter of the \'collapse\' clause",
[d]=a,
[l]=a,
[c]="OpenMP Issue",
[c]="OpenMP Issue",
[m]={"7b6bc88c5aaf",1448524239,"[OPENMP 4.5] Fixed rules for \'ordered\' clause."},
[m]={"7b6bc88c5aaf",1448524239,"[OPENMP 4.5] Fixed rules for \'ordered\' clause."},
[n]={{C,9607,"/// Called on a for stmt to check itself and nested loops (if any).\n/// \\return Returns 0 if one of the collapsed stmts is not canonical for loop,\n/// number of collapsed loops otherwise.\nstatic unsigned checkOpenMPLoop(OpenMPDirectiveKind DKind, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Stmt *AStmt, Sema &SemaRef, DSAStackTy &DSA, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, OMPLoopBasedDirective::HelperExprs &Built) {\n  if (OrderedLoopCountExpr) {\n    if (!OrderedLoopCountExpr->isValueDependent() && OrderedLoopCountExpr->EvaluateAsInt(EVResult, SemaRef.getASTContext())) {\n      if (Result.getLimitedValue() < NestedLoopCount) {\n        SemaRef.Diag(CollapseLoopCountExpr->getExprLoc(), diag::note_collapse_loop_count) << CollapseLoopCountExpr->getSourceRange();"}}
[n]={{J,9607,"/// Called on a for stmt to check itself and nested loops (if any).\n/// \\return Returns 0 if one of the collapsed stmts is not canonical for loop,\n/// number of collapsed loops otherwise.\nstatic unsigned checkOpenMPLoop(OpenMPDirectiveKind DKind, Expr *CollapseLoopCountExpr, Expr *OrderedLoopCountExpr, Stmt *AStmt, Sema &SemaRef, DSAStackTy &DSA, Sema::VarsWithInheritedDSAType &VarsWithImplicitDSA, OMPLoopBasedDirective::HelperExprs &Built) {\n  if (OrderedLoopCountExpr) {\n    if (!OrderedLoopCountExpr->isValueDependent() && OrderedLoopCountExpr->EvaluateAsInt(EVResult, SemaRef.getASTContext())) {\n      if (Result.getLimitedValue() < NestedLoopCount) {\n        SemaRef.Diag(CollapseLoopCountExpr->getExprLoc(), diag::note_collapse_loop_count) << CollapseLoopCountExpr->getSourceRange();"}},
[o]={
["clang/test/OpenMP/for_ordered_clause.cpp"]={"clang/test/OpenMP/for_ordered_clause.cpp:129:37: note: parameter of the \'collapse\' clause","clang/test/OpenMP/for_ordered_clause.cpp:75:37: note: parameter of the \'collapse\' clause"}
}
},
},
["note_comparison_synthesized_at"]={
["note_comparison_synthesized_at"]={
[f]="in defaulted ... comparison operator for A first required here",
[b]="in defaulted ... comparison operator for A first required here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in defaulted %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator for %1 first required here",
[h]="in defaulted %select{<ERROR>|equality|three-way|equality|relational}0 comparison operator for %1 first required here",
[g]=b,
[j]=i,
[e]="in defaulted (?:equality|three\\-way|equality|relational) comparison operator for (.*?) first required here",
[k]="in defaulted (?:equality|three\\-way|equality|relational) comparison operator for (.*?) first required here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"cafc7416baf7",1575501927,"[c++20] Synthesis of defaulted comparison functions."},
[m]={"cafc7416baf7",1575501927,"[c++20] Synthesis of defaulted comparison functions."},
[n]={{z,984,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DefiningSynthesizedFunction: {\n      if (DFK.isSpecialMember()) {\n      } else if (DFK.isComparison()) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_comparison_synthesized_at) << (int)DFK.asComparison() << RecordType;"}}
[n]={{G,984,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DefiningSynthesizedFunction: {\n      if (DFK.isSpecialMember()) {\n      } else if (DFK.isComparison()) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_comparison_synthesized_at) << (int)DFK.asComparison() << RecordType;"}},
[o]={
["clang/test/SemaCXX/cxx20-default-compare.cpp"]={"clang/test/SemaCXX/cxx20-default-compare.cpp:11:43: note: in defaulted equality comparison operator for \'Foo\' first required here","clang/test/SemaCXX/cxx20-default-compare.cpp:14:45: note: in defaulted equality comparison operator for \'Foo\' first required here","clang/test/SemaCXX/cxx20-default-compare.cpp:17:29: note: in defaulted equality comparison operator for \'Foo\' first required here"}
}
},
},
["note_compat_assoc"]={
["note_compat_assoc"]={
[f]="compatible type A specified here",
[b]="compatible type A specified here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="compatible type %0 specified here",
[h]="compatible type %0 specified here",
[g]=b,
[j]=i,
[e]="compatible type (.*?) specified here",
[k]="compatible type (.*?) specified here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"91147596414d",1302827748,"C1X: implement generic selections"},
[m]={"91147596414d",1302827748,"C1X: implement generic selections"},
[n]={{r,1783,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    if (Types[i]) {\n      if (Types[i]->getType()->isDependentType()) {\n      } else {\n        // C11 6.5.1.1p2 \"No two generic associations in the same generic\n        // selection shall specify compatible types.\"\n        for (unsigned j = i + 1; j < NumAssocs; ++j)\n          if (Types[j] && !Types[j]->getType()->isDependentType() && Context.typesAreCompatible(Types[i]->getType(), Types[j]->getType())) {\n            Diag(Types[i]->getTypeLoc().getBeginLoc(), diag::note_compat_assoc) << Types[i]->getTypeLoc().getSourceRange() << Types[i]->getType();"},{r,1852,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // C11 6.5.1.1p2 \"The controlling expression of a generic selection shall have\n  // type compatible with at most one of the types named in its generic\n  // association list.\"\n  if (CompatIndices.size() > 1) {\n    for (unsigned I : CompatIndices) {\n      Diag(Types[I]->getTypeLoc().getBeginLoc(), diag::note_compat_assoc) << Types[I]->getTypeLoc().getSourceRange() << Types[I]->getType();"}}
[n]={{s,1783,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  for (unsigned i = 0; i < NumAssocs; ++i) {\n    if (Types[i]) {\n      if (Types[i]->getType()->isDependentType()) {\n      } else {\n        // C11 6.5.1.1p2 \"No two generic associations in the same generic\n        // selection shall specify compatible types.\"\n        for (unsigned j = i + 1; j < NumAssocs; ++j)\n          if (Types[j] && !Types[j]->getType()->isDependentType() && Context.typesAreCompatible(Types[i]->getType(), Types[j]->getType())) {\n            Diag(Types[i]->getTypeLoc().getBeginLoc(), diag::note_compat_assoc) << Types[i]->getTypeLoc().getSourceRange() << Types[i]->getType();"},{s,1852,"ExprResult Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, SourceLocation DefaultLoc, SourceLocation RParenLoc, bool PredicateIsExpr, void *ControllingExprOrType, ArrayRef<TypeSourceInfo *> Types, ArrayRef<Expr *> Exprs) {\n  // C11 6.5.1.1p2 \"The controlling expression of a generic selection shall have\n  // type compatible with at most one of the types named in its generic\n  // association list.\"\n  if (CompatIndices.size() > 1) {\n    for (unsigned I : CompatIndices) {\n      Diag(Types[I]->getTypeLoc().getBeginLoc(), diag::note_compat_assoc) << Types[I]->getTypeLoc().getSourceRange() << Types[I]->getType();"}},
[o]={
["clang/test/Sema/attr-btf_type_tag.c"]={"clang/test/Sema/attr-btf_type_tag.c:31:19: note: compatible type \'int  __attribute__((btf_type_tag(\"tag1\")))*\' (aka \'int *\') specified here"}
}
},
},
["note_compound_token_split_second_token_here"]={
["note_compound_token_split_second_token_here"]={
[f]="...A token is here",
[b]="...A token is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{|second }0%1 token is here",
[h]="%select{|second }0%1 token is here",
[g]=b,
[j]=i,
[e]="(?:|second )(.*?) token is here",
[k]="(?:|second )(.*?) token is here",
[d]=a,
[l]=a,
[c]=Q,
[c]=Z,
[m]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"},
[m]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"},
[n]={{"clang/lib/Parse/Parser.cpp",246,"void Parser::checkCompoundToken(SourceLocation FirstTokLoc, tok::TokenKind FirstTokKind, CompoundToken Op) {\n  // If either token is in a macro, we expect both tokens to come from the same\n  // macro expansion.\n  if ((FirstTokLoc.isMacroID() || SecondTokLoc.isMacroID()) && PP.getSourceManager().getFileID(FirstTokLoc) != PP.getSourceManager().getFileID(SecondTokLoc)) {\n    Diag(SecondTokLoc, diag::note_compound_token_split_second_token_here) << (FirstTokKind == Tok.getKind()) << Tok.getKind() << SourceRange(SecondTokLoc);"}}
[n]={{"clang/lib/Parse/Parser.cpp",246,"void Parser::checkCompoundToken(SourceLocation FirstTokLoc, tok::TokenKind FirstTokKind, CompoundToken Op) {\n  // If either token is in a macro, we expect both tokens to come from the same\n  // macro expansion.\n  if ((FirstTokLoc.isMacroID() || SecondTokLoc.isMacroID()) && PP.getSourceManager().getFileID(FirstTokLoc) != PP.getSourceManager().getFileID(SecondTokLoc)) {\n    Diag(SecondTokLoc, diag::note_compound_token_split_second_token_here) << (FirstTokKind == Tok.getKind()) << Tok.getKind() << SourceRange(SecondTokLoc);"}},
[o]={
["clang/test/Parser/compound-token-split.cpp"]={"clang/test/Parser/compound-token-split.cpp:15:15: note: \'{\' token is here","clang/test/Parser/compound-token-split.cpp:15:3: note: \')\' token is here","clang/test/Parser/compound-token-split.cpp:29:18: note: \')\' token is here"}
}
},
},
["note_concatenated_string_literal_silence"]={
["note_concatenated_string_literal_silence"]={
[f]="place parentheses around the string literal to silence warning",
[b]="place parentheses around the string literal to silence warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="place parentheses around the string literal to silence warning",
[h]="place parentheses around the string literal to silence warning",
[g]=b,
[j]=i,
[e]="place parentheses around the string literal to silence warning",
[k]="place parentheses around the string literal to silence warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Y,1582847864,W},
[m]={mb,1582847864,jb},
[n]={{t,14157,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (!var->getType()->isStructureType() && var->hasInit() && isa<InitListExpr>(var->getInit())) {\n    if (NumInits > 2)\n      for (unsigned I = 0; I < NumInits; ++I) {\n        // Diagnose missing comma in string array initialization.\n        // Do not warn when all the elements in the initializer are concatenated\n        // together. Do not warn for macros too.\n        if (NumConcat == 2 && !SL->getBeginLoc().isMacroID()) {\n          if (OnlyOneMissingComma) {\n            Diag(SL->getBeginLoc(), diag::note_concatenated_string_literal_silence);"}}
[n]={{u,14157,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  if (!var->getType()->isStructureType() && var->hasInit() && isa<InitListExpr>(var->getInit())) {\n    if (NumInits > 2)\n      for (unsigned I = 0; I < NumInits; ++I) {\n        // Diagnose missing comma in string array initialization.\n        // Do not warn when all the elements in the initializer are concatenated\n        // together. Do not warn for macros too.\n        if (NumConcat == 2 && !SL->getBeginLoc().isMacroID()) {\n          if (OnlyOneMissingComma) {\n            Diag(SL->getBeginLoc(), diag::note_concatenated_string_literal_silence);"}},
[o]={
["clang/test/Sema/string-concat.c"]={"clang/test/Sema/string-concat.c:10:5: note: place parentheses around the string literal to silence warning","clang/test/Sema/string-concat.c:21:5: note: place parentheses around the string literal to silence warning","clang/test/Sema/string-concat.c:29:5: note: place parentheses around the string literal to silence warning","clang/test/Sema/string-concat.c:36:24: note: place parentheses around the string literal to silence warning","clang/test/Sema/string-concat.c:39:65: note: place parentheses around the string literal to silence warning","clang/test/Sema/string-concat.c:43:72: note: place parentheses around the string literal to silence warning","clang/test/Sema/string-concat.c:49:5: note: place parentheses around the string literal to silence warning","clang/test/Sema/string-concat.c:53:40: note: place parentheses around the string literal to silence warning","clang/test/Sema/string-concat.c:66:30: note: place parentheses around the string literal to silence warning"}
}
},
},
["note_concept_specialization_constraint_evaluated_to_false"]={
["note_concept_specialization_constraint_evaluated_to_false"]={
[f]="... \'A\' evaluated to false",
[b]="... \'A\' evaluated to false",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{and|because}0 \'%1\' evaluated to false",
[h]="%select{and|because}0 \'%1\' evaluated to false",
[g]=b,
[j]=i,
[e]="(?:and|because) \'(.*?)\' evaluated to false",
[k]="(?:and|because) \'(.*?)\' evaluated to false",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Rb,1569403888,Nb},
[m]={pc,1569403888,rc},
[n]={{O,1124,"static void diagnoseWellFormedUnsatisfiedConstraintExpr(Sema &S, Expr *SubstExpr, bool First) {\n  if (BinaryOperator *BO = dyn_cast<BinaryOperator>(SubstExpr)) {\n  } else if (auto *CSE = dyn_cast<ConceptSpecializationExpr>(SubstExpr)) {\n    if (CSE->getTemplateArgsAsWritten()->NumTemplateArgs == 1) {\n    } else {\n      S.Diag(SubstExpr->getSourceRange().getBegin(), diag::note_concept_specialization_constraint_evaluated_to_false) << (int)First << CSE;"}}
[n]={{W,1124,"static void diagnoseWellFormedUnsatisfiedConstraintExpr(Sema &S, Expr *SubstExpr, bool First) {\n  if (BinaryOperator *BO = dyn_cast<BinaryOperator>(SubstExpr)) {\n  } else if (auto *CSE = dyn_cast<ConceptSpecializationExpr>(SubstExpr)) {\n    if (CSE->getTemplateArgsAsWritten()->NumTemplateArgs == 1) {\n    } else {\n      S.Diag(SubstExpr->getSourceRange().getBegin(), diag::note_concept_specialization_constraint_evaluated_to_false) << (int)First << CSE;"}}
},
},
["note_concept_specialization_here"]={
["note_concept_specialization_here"]={
[f]="while checking the satisfaction of concept \'A\' requested here",
[b]="while checking the satisfaction of concept \'A\' requested here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="while checking the satisfaction of concept \'%0\' requested here",
[h]="while checking the satisfaction of concept \'%0\' requested here",
[g]=b,
[j]=i,
[e]="while checking the satisfaction of concept \'(.*?)\' requested here",
[k]="while checking the satisfaction of concept \'(.*?)\' requested here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Ab,1567434909,Cb},
[m]={Zb,1567434909,Yb},
[n]={{z,1030,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintsCheck: {\n      if (isa<ConceptDecl>(Active->Entity))\n        DiagID = diag::note_concept_specialization_here;"}}
[n]={{G,1030,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintsCheck: {\n      if (isa<ConceptDecl>(Active->Entity))\n        DiagID = diag::note_concept_specialization_here;"}},
[o]={
["clang/test/SemaCXX/concept-crash-on-diagnostic.cpp"]={"clang/test/SemaCXX/concept-crash-on-diagnostic.cpp:15:23: note: while checking the satisfaction of concept \'convertible_to<bool, bool>\' requested here"}
}
},
},
["note_condition_assign_silence"]={
["note_condition_assign_silence"]={
[f]="place parentheses around the assignment to silence this warning",
[b]="place parentheses around the assignment to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="place parentheses around the assignment to silence this warning",
[h]="place parentheses around the assignment to silence this warning",
[g]=b,
[j]=i,
[e]="place parentheses around the assignment to silence this warning",
[k]="place parentheses around the assignment to silence this warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"2bf2d3d0165f",1271261392,"When diagnosing suspicious precedence or assignments, move the fix-it"},
[m]={"2bf2d3d0165f",1271261392,"When diagnosing suspicious precedence or assignments, move the fix-it"},
[n]={{r,20883,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  Diag(Loc, diag::note_condition_assign_silence) << FixItHint::CreateInsertion(Open, \"(\") << FixItHint::CreateInsertion(Close, \")\");"}}
[n]={{s,20883,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  Diag(Loc, diag::note_condition_assign_silence) << FixItHint::CreateInsertion(Open, \"(\") << FixItHint::CreateInsertion(Close, \")\");"}},
[o]={
["clang/test/CodeCompletion/crash-skipped-bodies-template-inst.cpp"]={"clang/test/CodeCompletion/crash-skipped-bodies-template-inst.cpp:15:9: note: place parentheses around the assignment to silence this warning","clang/test/CodeCompletion/crash-skipped-bodies-template-inst.cpp:15:9: note: place parentheses around the assignment to silence this warning"}
}
},
},
["note_condition_assign_to_comparison"]={
["note_condition_assign_to_comparison"]={
[f]="use \'==\' to turn this assignment into an equality comparison",
[b]="use \'==\' to turn this assignment into an equality comparison",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use \'==\' to turn this assignment into an equality comparison",
[h]="use \'==\' to turn this assignment into an equality comparison",
[g]=b,
[j]=i,
[e]="use \'\\=\\=\' to turn this assignment into an equality comparison",
[k]="use \'\\=\\=\' to turn this assignment into an equality comparison",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"fa1e36d0de87",1262910023,"Improve the fix-its for -Wparentheses to ensure that the fix-it"},
[m]={"fa1e36d0de87",1262910023,"Improve the fix-its for -Wparentheses to ensure that the fix-it"},
[n]={{r,20909,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  if (IsOrAssign)\n  else\n    Diag(Loc, diag::note_condition_assign_to_comparison) << FixItHint::CreateReplacement(Loc, \"==\");"}}
[n]={{s,20909,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  if (IsOrAssign)\n  else\n    Diag(Loc, diag::note_condition_assign_to_comparison) << FixItHint::CreateReplacement(Loc, \"==\");"}},
[o]={
["clang/test/CodeCompletion/crash-skipped-bodies-template-inst.cpp"]={"clang/test/CodeCompletion/crash-skipped-bodies-template-inst.cpp:15:9: note: use \'==\' to turn this assignment into an equality comparison","clang/test/CodeCompletion/crash-skipped-bodies-template-inst.cpp:15:9: note: use \'==\' to turn this assignment into an equality comparison"}
}
},
},
["note_condition_or_assign_to_comparison"]={
["note_condition_or_assign_to_comparison"]={
[f]="use \'!=\' to turn this compound assignment into an inequality comparison",
[b]="use \'!=\' to turn this compound assignment into an inequality comparison",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use \'!=\' to turn this compound assignment into an inequality comparison",
[h]="use \'!=\' to turn this compound assignment into an inequality comparison",
[g]=b,
[j]=i,
[e]="use \'\\!\\=\' to turn this compound assignment into an inequality comparison",
[k]="use \'\\!\\=\' to turn this compound assignment into an inequality comparison",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"2d4f64f441ce",1295455808,"Warn about the use of unparenthesized |= in conditionals (which may be"},
[m]={"2d4f64f441ce",1295455808,"Warn about the use of unparenthesized |= in conditionals (which may be"},
[n]={{r,20886,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  if (IsOrAssign)\n    Diag(Loc, diag::note_condition_or_assign_to_comparison) << FixItHint::CreateReplacement(Loc, \"!=\");"}}
[n]={{s,20886,"// Diagnose the s/=/==/ and s/\\|=/!=/ typos. Note that adding parentheses\n// will prevent this condition from triggering, which is what we want.\nvoid Sema::DiagnoseAssignmentAsCondition(Expr *E) {\n  if (IsOrAssign)\n    Diag(Loc, diag::note_condition_or_assign_to_comparison) << FixItHint::CreateReplacement(Loc, \"!=\");"}},
[o]={
["clang/test/SemaCXX/warn-assignment-condition.cpp"]={"clang/test/SemaCXX/warn-assignment-condition.cpp:101:9: note: use \'!=\' to turn this compound assignment into an inequality comparison","clang/test/SemaCXX/warn-assignment-condition.cpp:105:9: note: use \'!=\' to turn this compound assignment into an inequality comparison"}
}
},
},
["note_conflicting_attribute"]={
["note_conflicting_attribute"]={
[f]="conflicting attribute is here",
[b]="conflicting attribute is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="conflicting attribute is here",
[h]="conflicting attribute is here",
[g]=b,
[j]=i,
[e]="conflicting attribute is here",
[k]="conflicting attribute is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"30e41fb4da68",1418669848,"Warn when attribute \'optnone\' conflicts with attributes on a"},
[m]={"30e41fb4da68",1418669848,"Warn when attribute \'optnone\' conflicts with attributes on a"},
[n]={{I,280,"/// Diagnose mutually exclusive attributes when present on a given\n/// declaration. Returns true if diagnosed.\ntemplate <typename AttrTy> static bool checkAttrMutualExclusion(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *A = D->getAttr<AttrTy>()) {\n    S.Diag(A->getLocation(), diag::note_conflicting_attribute);"},{I,292,"template <typename AttrTy> static bool checkAttrMutualExclusion(Sema &S, Decl *D, const Attr &AL) {\n  if (const auto *A = D->getAttr<AttrTy>()) {\n    S.Diag(A->getLocation(), diag::note_conflicting_attribute);"},{I,2071,"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    if (const auto *Other = D->getAttr<CPUDispatchAttr>()) {\n      S.Diag(Other->getLocation(), diag::note_conflicting_attribute);"},{I,2080,"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  } else if (AL.getParsedKind() == ParsedAttr::AT_CPUSpecific) {\n    if (const auto *Other = D->getAttr<CPUSpecificAttr>()) {\n      S.Diag(Other->getLocation(), diag::note_conflicting_attribute);"},{I,3621,"static void handleTargetClonesAttr(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 (const auto *Other = D->getAttr<TargetClonesAttr>()) {\n    S.Diag(Other->getLocation(), diag::note_conflicting_attribute);"},{I,3902,"ErrorAttr *Sema::mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI, StringRef NewUserDiagnostic) {\n  if (const auto *EA = D->getAttr<ErrorAttr>()) {\n    if (!Match) {\n      Diag(CI.getLoc(), diag::note_conflicting_attribute);"},{I,4888,"AlwaysInlineAttr *Sema::mergeAlwaysInlineAttr(Decl *D, const AttributeCommonInfo &CI, const IdentifierInfo *Ident) {\n  if (OptimizeNoneAttr *Optnone = D->getAttr<OptimizeNoneAttr>()) {\n    Diag(Optnone->getLocation(), diag::note_conflicting_attribute);"},{I,4944,"MinSizeAttr *Sema::mergeMinSizeAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (OptimizeNoneAttr *Optnone = D->getAttr<OptimizeNoneAttr>()) {\n    Diag(Optnone->getLocation(), diag::note_conflicting_attribute);"},{I,4962,"SwiftNameAttr *Sema::mergeSwiftNameAttr(Decl *D, const SwiftNameAttr &SNA, StringRef Name) {\n  if (const auto *PrevSNA = D->getAttr<SwiftNameAttr>()) {\n    if (PrevSNA->getName() != Name && !PrevSNA->isImplicit()) {\n      Diag(SNA.getLoc(), diag::note_conflicting_attribute);"},{I,4974,"OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (AlwaysInlineAttr *Inline = D->getAttr<AlwaysInlineAttr>()) {\n    Diag(CI.getLoc(), diag::note_conflicting_attribute);"},{I,4979,"OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (MinSizeAttr *MinSize = D->getAttr<MinSizeAttr>()) {\n    Diag(CI.getLoc(), diag::note_conflicting_attribute);"},{I,5260,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getKind() == ParsedAttr::AT_Owner) {\n    if (const auto *OAttr = D->getAttr<OwnerAttr>()) {\n      if (ExistingDerefType != ParmType.getTypePtrOrNull()) {\n        S.Diag(OAttr->getLocation(), diag::note_conflicting_attribute);"},{I,5279,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getKind() == ParsedAttr::AT_Owner) {\n  } else {\n    if (const auto *PAttr = D->getAttr<PointerAttr>()) {\n      if (ExistingDerefType != ParmType.getTypePtrOrNull()) {\n        S.Diag(PAttr->getLocation(), diag::note_conflicting_attribute);"},{I,5516,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  if (auto existingAttr = D->getAttr<ParameterABIAttr>()) {\n    if (existingAttr->getABI() != abi) {\n      Diag(existingAttr->getLocation(), diag::note_conflicting_attribute);"},{I,7113,"HLSLNumThreadsAttr *Sema::mergeHLSLNumThreadsAttr(Decl *D, const AttributeCommonInfo &AL, int X, int Y, int Z) {\n  if (HLSLNumThreadsAttr *NT = D->getAttr<HLSLNumThreadsAttr>()) {\n    if (NT->getX() != X || NT->getY() != Y || NT->getZ() != Z) {\n      Diag(AL.getLoc(), diag::note_conflicting_attribute);"},{I,7210,"HLSLShaderAttr *Sema::mergeHLSLShaderAttr(Decl *D, const AttributeCommonInfo &AL, HLSLShaderAttr::ShaderType ShaderType) {\n  if (HLSLShaderAttr *NT = D->getAttr<HLSLShaderAttr>()) {\n    if (NT->getType() != ShaderType) {\n      Diag(AL.getLoc(), diag::note_conflicting_attribute);"},{I,8654,"template <typename AttrTy, typename ConflictingAttrTy> static AttrTy *mergeEnforceTCBAttrImpl(Sema &S, Decl *D, const AttrTy &AL) {\n  if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, TCBName)) {\n    S.Diag(AL.getLoc(), diag::note_conflicting_attribute);"},{A,931,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval || StatementKind == IfStatementKind::Constexpr) {\n  } else {\n    if (std::get<0>(LHC)) {\n      Diags.Report(ElseAttr->getLocation(), diag::note_conflicting_attribute) << ElseAttr << ElseAttr->getRange();"},{"clang/lib/Sema/SemaStmtAttr.cpp",254,"template <typename OtherAttr, int DiagIdx> static bool CheckStmtInlineAttr(Sema &SemaRef, const Stmt *OrigSt, const Stmt *CurSt, const AttributeCommonInfo &A) {\n  for (const auto &Tup : llvm::zip_longest(OrigCEF.getCallExprs(), CEF.getCallExprs())) {\n    // If the original call expression already had a callee, we already\n    // diagnosed this, so skip it here. We can\'t skip if there isn\'t a 1:1\n    // relationship between the two lists of call expressions.\n    if (!CanSuppressDiag || !(*std::get<0>(Tup))->getCalleeDecl()) {\n      if (Callee && (Callee->hasAttr<OtherAttr>() || Callee->hasAttr<FlattenAttr>())) {\n        SemaRef.Diag(Callee->getBeginLoc(), diag::note_conflicting_attribute);"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4025,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // If we discovered any decl or stmt attributes to test for, generate the\n  // predicates for them now.\n  if (!DeclAttrs.empty()) {\n    for (const std::string &A : DeclAttrs) {\n      OS << \"      S.Diag(A->getLocation(), diag::note_conflicting_attribute);\";"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4048,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // If we discovered any decl or stmt attributes to test for, generate the\n  // predicates for them now.\n  if (!DeclAttrs.empty()) {\n    // Also generate the declaration attribute merging logic if the current\n    // attribute is one that can be inheritted on a declaration. It is assumed\n    // this code will be executed in the context of a function with parameters:\n    // Sema &S, Decl *D, Attr *A and that returns a bool (false on diagnostic,\n    // true on success).\n    if (Attr.isSubClassOf(\"InheritableAttr\")) {\n      for (const std::string &A : DeclAttrs) {\n        MergeDeclOS << \"      S.Diag(Second->getLocation(), \"\n                    << \"diag::note_conflicting_attribute);\\n\";"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4089,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // Statement attributes are a bit different from declarations. With\n  // declarations, each attribute is added to the declaration as it is\n  // processed, and so you can look on the Decl * itself to see if there is a\n  // conflicting attribute. Statement attributes are processed as a group\n  // because AttributedStmt needs to tail-allocate all of the attribute nodes\n  // at once. This means we cannot check whether the statement already contains\n  // an attribute to check for the conflict. Instead, we need to check whether\n  // the given list of semantic attributes contain any conflicts. It is assumed\n  // this code will be executed in the context of a function with parameters:\n  // Sema &S, const SmallVectorImpl<const Attr *> &C. The code will be within a\n  // loop which loops over the container C with a loop variable named A to\n  // represent the current attribute to check for conflicts.\n  //\n  // FIXME: it would be nice not to walk over the list of potential attributes\n  // to apply to the statement more than once, but statements typically don\'t\n  // have long lists of attributes on them, so re-walking the list should not\n  // be an expensive operation.\n  if (!StmtAttrs.empty()) {\n    MergeStmtOS << \"        S.Diag(Second->getLocation(), \"\n                << \"diag::note_conflicting_attribute);\\n\";"}}
[n]={{P,280,"/// Diagnose mutually exclusive attributes when present on a given\n/// declaration. Returns true if diagnosed.\ntemplate <typename AttrTy> static bool checkAttrMutualExclusion(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *A = D->getAttr<AttrTy>()) {\n    S.Diag(A->getLocation(), diag::note_conflicting_attribute);"},{P,292,"template <typename AttrTy> static bool checkAttrMutualExclusion(Sema &S, Decl *D, const Attr &AL) {\n  if (const auto *A = D->getAttr<AttrTy>()) {\n    S.Diag(A->getLocation(), diag::note_conflicting_attribute);"},{P,2071,"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    if (const auto *Other = D->getAttr<CPUDispatchAttr>()) {\n      S.Diag(Other->getLocation(), diag::note_conflicting_attribute);"},{P,2080,"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  } else if (AL.getParsedKind() == ParsedAttr::AT_CPUSpecific) {\n    if (const auto *Other = D->getAttr<CPUSpecificAttr>()) {\n      S.Diag(Other->getLocation(), diag::note_conflicting_attribute);"},{P,3621,"static void handleTargetClonesAttr(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 (const auto *Other = D->getAttr<TargetClonesAttr>()) {\n    S.Diag(Other->getLocation(), diag::note_conflicting_attribute);"},{P,3902,"ErrorAttr *Sema::mergeErrorAttr(Decl *D, const AttributeCommonInfo &CI, StringRef NewUserDiagnostic) {\n  if (const auto *EA = D->getAttr<ErrorAttr>()) {\n    if (!Match) {\n      Diag(CI.getLoc(), diag::note_conflicting_attribute);"},{P,4888,"AlwaysInlineAttr *Sema::mergeAlwaysInlineAttr(Decl *D, const AttributeCommonInfo &CI, const IdentifierInfo *Ident) {\n  if (OptimizeNoneAttr *Optnone = D->getAttr<OptimizeNoneAttr>()) {\n    Diag(Optnone->getLocation(), diag::note_conflicting_attribute);"},{P,4944,"MinSizeAttr *Sema::mergeMinSizeAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (OptimizeNoneAttr *Optnone = D->getAttr<OptimizeNoneAttr>()) {\n    Diag(Optnone->getLocation(), diag::note_conflicting_attribute);"},{P,4962,"SwiftNameAttr *Sema::mergeSwiftNameAttr(Decl *D, const SwiftNameAttr &SNA, StringRef Name) {\n  if (const auto *PrevSNA = D->getAttr<SwiftNameAttr>()) {\n    if (PrevSNA->getName() != Name && !PrevSNA->isImplicit()) {\n      Diag(SNA.getLoc(), diag::note_conflicting_attribute);"},{P,4974,"OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (AlwaysInlineAttr *Inline = D->getAttr<AlwaysInlineAttr>()) {\n    Diag(CI.getLoc(), diag::note_conflicting_attribute);"},{P,4979,"OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (MinSizeAttr *MinSize = D->getAttr<MinSizeAttr>()) {\n    Diag(CI.getLoc(), diag::note_conflicting_attribute);"},{P,5260,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getKind() == ParsedAttr::AT_Owner) {\n    if (const auto *OAttr = D->getAttr<OwnerAttr>()) {\n      if (ExistingDerefType != ParmType.getTypePtrOrNull()) {\n        S.Diag(OAttr->getLocation(), diag::note_conflicting_attribute);"},{P,5279,"static void handleLifetimeCategoryAttr(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (AL.getKind() == ParsedAttr::AT_Owner) {\n  } else {\n    if (const auto *PAttr = D->getAttr<PointerAttr>()) {\n      if (ExistingDerefType != ParmType.getTypePtrOrNull()) {\n        S.Diag(PAttr->getLocation(), diag::note_conflicting_attribute);"},{P,5516,"void Sema::AddParameterABIAttr(Decl *D, const AttributeCommonInfo &CI, ParameterABI abi) {\n  if (auto existingAttr = D->getAttr<ParameterABIAttr>()) {\n    if (existingAttr->getABI() != abi) {\n      Diag(existingAttr->getLocation(), diag::note_conflicting_attribute);"},{P,7113,"HLSLNumThreadsAttr *Sema::mergeHLSLNumThreadsAttr(Decl *D, const AttributeCommonInfo &AL, int X, int Y, int Z) {\n  if (HLSLNumThreadsAttr *NT = D->getAttr<HLSLNumThreadsAttr>()) {\n    if (NT->getX() != X || NT->getY() != Y || NT->getZ() != Z) {\n      Diag(AL.getLoc(), diag::note_conflicting_attribute);"},{P,7210,"HLSLShaderAttr *Sema::mergeHLSLShaderAttr(Decl *D, const AttributeCommonInfo &AL, HLSLShaderAttr::ShaderType ShaderType) {\n  if (HLSLShaderAttr *NT = D->getAttr<HLSLShaderAttr>()) {\n    if (NT->getType() != ShaderType) {\n      Diag(AL.getLoc(), diag::note_conflicting_attribute);"},{P,8654,"template <typename AttrTy, typename ConflictingAttrTy> static AttrTy *mergeEnforceTCBAttrImpl(Sema &S, Decl *D, const AttrTy &AL) {\n  if (const ConflictingAttrTy *ConflictingAttr = findEnforceTCBAttrByName<ConflictingAttrTy>(D, TCBName)) {\n    S.Diag(AL.getLoc(), diag::note_conflicting_attribute);"},{H,931,"StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, IfStatementKind StatementKind, SourceLocation LParenLoc, Stmt *InitStmt, ConditionResult Cond, SourceLocation RParenLoc, Stmt *thenStmt, SourceLocation ElseLoc, Stmt *elseStmt) {\n  if (ConstevalOrNegatedConsteval || StatementKind == IfStatementKind::Constexpr) {\n  } else {\n    if (std::get<0>(LHC)) {\n      Diags.Report(ElseAttr->getLocation(), diag::note_conflicting_attribute) << ElseAttr << ElseAttr->getRange();"},{"clang/lib/Sema/SemaStmtAttr.cpp",254,"template <typename OtherAttr, int DiagIdx> static bool CheckStmtInlineAttr(Sema &SemaRef, const Stmt *OrigSt, const Stmt *CurSt, const AttributeCommonInfo &A) {\n  for (const auto &Tup : llvm::zip_longest(OrigCEF.getCallExprs(), CEF.getCallExprs())) {\n    // If the original call expression already had a callee, we already\n    // diagnosed this, so skip it here. We can\'t skip if there isn\'t a 1:1\n    // relationship between the two lists of call expressions.\n    if (!CanSuppressDiag || !(*std::get<0>(Tup))->getCalleeDecl()) {\n      if (Callee && (Callee->hasAttr<OtherAttr>() || Callee->hasAttr<FlattenAttr>())) {\n        SemaRef.Diag(Callee->getBeginLoc(), diag::note_conflicting_attribute);"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4025,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // If we discovered any decl or stmt attributes to test for, generate the\n  // predicates for them now.\n  if (!DeclAttrs.empty()) {\n    for (const std::string &A : DeclAttrs) {\n      OS << \"      S.Diag(A->getLocation(), diag::note_conflicting_attribute);\";"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4048,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // If we discovered any decl or stmt attributes to test for, generate the\n  // predicates for them now.\n  if (!DeclAttrs.empty()) {\n    // Also generate the declaration attribute merging logic if the current\n    // attribute is one that can be inheritted on a declaration. It is assumed\n    // this code will be executed in the context of a function with parameters:\n    // Sema &S, Decl *D, Attr *A and that returns a bool (false on diagnostic,\n    // true on success).\n    if (Attr.isSubClassOf(\"InheritableAttr\")) {\n      for (const std::string &A : DeclAttrs) {\n        MergeDeclOS << \"      S.Diag(Second->getLocation(), \"\n                    << \"diag::note_conflicting_attribute);\\n\";"},{"clang/utils/TableGen/ClangAttrEmitter.cpp",4089,"// Generates the mutual exclusion checks. The checks for parsed attributes are\n// written into OS and the checks for merging declaration attributes are\n// written into MergeOS.\nstatic void GenerateMutualExclusionsChecks(const Record &Attr, const RecordKeeper &Records, raw_ostream &OS, raw_ostream &MergeDeclOS, raw_ostream &MergeStmtOS) {\n  // Statement attributes are a bit different from declarations. With\n  // declarations, each attribute is added to the declaration as it is\n  // processed, and so you can look on the Decl * itself to see if there is a\n  // conflicting attribute. Statement attributes are processed as a group\n  // because AttributedStmt needs to tail-allocate all of the attribute nodes\n  // at once. This means we cannot check whether the statement already contains\n  // an attribute to check for the conflict. Instead, we need to check whether\n  // the given list of semantic attributes contain any conflicts. It is assumed\n  // this code will be executed in the context of a function with parameters:\n  // Sema &S, const SmallVectorImpl<const Attr *> &C. The code will be within a\n  // loop which loops over the container C with a loop variable named A to\n  // represent the current attribute to check for conflicts.\n  //\n  // FIXME: it would be nice not to walk over the list of potential attributes\n  // to apply to the statement more than once, but statements typically don\'t\n  // have long lists of attributes on them, so re-walking the list should not\n  // be an expensive operation.\n  if (!StmtAttrs.empty()) {\n    MergeStmtOS << \"        S.Diag(Second->getLocation(), \"\n                << \"diag::note_conflicting_attribute);\\n\";"}},
[o]={
["clang/test/Sema/mips-interrupt-attr.c"]={"clang/test/Sema/mips-interrupt-attr.c:22:16: note: conflicting attribute is here","clang/test/Sema/mips-interrupt-attr.c:24:16: note: conflicting attribute is here","clang/test/Sema/mips-interrupt-attr.c:26:16: note: conflicting attribute is here","clang/test/Sema/mips-interrupt-attr.c:28:16: note: conflicting attribute is here"}
}
},
},
["note_conflicting_prototype"]={
["note_conflicting_prototype"]={
[f]="conflicting prototype is here",
[b]="conflicting prototype is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="conflicting prototype is here",
[h]="conflicting prototype is here",
[g]=b,
[j]=i,
[e]="conflicting prototype is here",
[k]="conflicting prototype is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[m]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[n]={{t,4179,"/// 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  // C: Function types need to be compatible, not identical. This handles\n  // duplicate function decls like \"void f(int); void f(enum X);\" properly.\n  if (!getLangOpts().CPlusPlus) {\n    // If we are merging two functions where only one of them has a prototype,\n    // we may have enough information to decide to issue a diagnostic that the\n    // function without a protoype will change behavior in C2x. This handles\n    // cases like:\n    //  void i(); void i(int j);\n    //  void i(int j); void i();\n    //  void i(); void i(int j) {}\n    // See ActOnFinishFunctionBody() for other cases of the behavior change\n    // diagnostic. See GetFullTypeForDeclarator() for handling of a function\n    // type without a prototype.\n    if (New->hasWrittenPrototype() != Old->hasWrittenPrototype() && !New->isImplicit() && !Old->isImplicit()) {\n      if (WithProto->getNumParams() != 0) {\n        if (WithoutProto->getBuiltinID() == 0 && !WithoutProto->isImplicit()) {\n          // The reason the one without the prototype will be changing behavior\n          // is because of the one with the prototype, so note that so long as\n          // it\'s a user-visible declaration. There is one exception to this:\n          // when the new declaration is a definition without a prototype, the\n          // old declaration with a prototype is not the cause of the issue,\n          // and that does not need to be noted because the one with a\n          // prototype will not change behavior in C2x.\n          if (WithProto->getBuiltinID() == 0 && !WithProto->isImplicit() && !IsWithoutProtoADef)\n            Diag(WithProto->getLocation(), diag::note_conflicting_prototype);"}}
[n]={{u,4179,"/// 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  // C: Function types need to be compatible, not identical. This handles\n  // duplicate function decls like \"void f(int); void f(enum X);\" properly.\n  if (!getLangOpts().CPlusPlus) {\n    // If we are merging two functions where only one of them has a prototype,\n    // we may have enough information to decide to issue a diagnostic that the\n    // function without a protoype will change behavior in C2x. This handles\n    // cases like:\n    //  void i(); void i(int j);\n    //  void i(int j); void i();\n    //  void i(); void i(int j) {}\n    // See ActOnFinishFunctionBody() for other cases of the behavior change\n    // diagnostic. See GetFullTypeForDeclarator() for handling of a function\n    // type without a prototype.\n    if (New->hasWrittenPrototype() != Old->hasWrittenPrototype() && !New->isImplicit() && !Old->isImplicit()) {\n      if (WithProto->getNumParams() != 0) {\n        if (WithoutProto->getBuiltinID() == 0 && !WithoutProto->isImplicit()) {\n          // The reason the one without the prototype will be changing behavior\n          // is because of the one with the prototype, so note that so long as\n          // it\'s a user-visible declaration. There is one exception to this:\n          // when the new declaration is a definition without a prototype, the\n          // old declaration with a prototype is not the cause of the issue,\n          // and that does not need to be noted because the one with a\n          // prototype will not change behavior in C2x.\n          if (WithProto->getBuiltinID() == 0 && !WithProto->isImplicit() && !IsWithoutProtoADef)\n            Diag(WithProto->getLocation(), diag::note_conflicting_prototype);"}},
[o]={
["clang/test/SemaObjC/nonnull.m"]={"clang/test/SemaObjC/nonnull.m:63:6: note: conflicting prototype is here"}
}
},
},
["note_conflicting_try_here"]={
["note_conflicting_try_here"]={
[f]="conflicting A here",
[b]="conflicting A here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="conflicting %0 here",
[h]="conflicting %0 here",
[g]=b,
[j]=i,
[e]="conflicting (.*?) here",
[k]="conflicting (.*?) here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"e71759103e72",1422915331,"SEH: Diagnose use of C++ EH and SEH in the same function"},
[m]={"e71759103e72",1422915331,"SEH: Diagnose use of C++ EH and SEH in the same function"},
[n]={{A,4245,"StmtResult Sema::ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try, MultiStmtArg CatchStmts, Stmt *Finally) {\n  if (FSI->FirstSEHTryLoc.isValid()) {\n    Diag(FSI->FirstSEHTryLoc, diag::note_conflicting_try_here) << \"\'__try\'\";"},{A,4495,"/// 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  // C++ try is incompatible with SEH __try.\n  if (!getLangOpts().Borland && FSI->FirstSEHTryLoc.isValid()) {\n    Diag(FSI->FirstSEHTryLoc, diag::note_conflicting_try_here) << \"\'__try\'\";"},{A,4588,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  // SEH __try is incompatible with C++ try. Borland appears to support this,\n  // however.\n  if (!getLangOpts().Borland) {\n    if (FSI->FirstCXXOrObjCTryLoc.isValid()) {\n      Diag(FSI->FirstCXXOrObjCTryLoc, diag::note_conflicting_try_here) << (FSI->FirstTryType == sema::FunctionScopeInfo::TryLocIsCXX ? \"\'try\'\" : \"\'@try\'\");"}}
[n]={{H,4245,"StmtResult Sema::ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try, MultiStmtArg CatchStmts, Stmt *Finally) {\n  if (FSI->FirstSEHTryLoc.isValid()) {\n    Diag(FSI->FirstSEHTryLoc, diag::note_conflicting_try_here) << \"\'__try\'\";"},{H,4495,"/// 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  // C++ try is incompatible with SEH __try.\n  if (!getLangOpts().Borland && FSI->FirstSEHTryLoc.isValid()) {\n    Diag(FSI->FirstSEHTryLoc, diag::note_conflicting_try_here) << \"\'__try\'\";"},{H,4588,"StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock, Stmt *Handler) {\n  // SEH __try is incompatible with C++ try. Borland appears to support this,\n  // however.\n  if (!getLangOpts().Borland) {\n    if (FSI->FirstCXXOrObjCTryLoc.isValid()) {\n      Diag(FSI->FirstCXXOrObjCTryLoc, diag::note_conflicting_try_here) << (FSI->FirstTryType == sema::FunctionScopeInfo::TryLocIsCXX ? \"\'try\'\" : \"\'@try\'\");"}},
[o]={
["clang/test/SemaCXX/exceptions-seh.mm"]={"clang/test/SemaCXX/exceptions-seh.mm:6:3: note: conflicting \'@try\' here","clang/test/SemaCXX/exceptions-seh.mm:17:3: note: conflicting \'__try\' here"}
}
},
},
["note_consteval_address_accessible"]={
["note_consteval_address_accessible"]={
[f]="... to a consteval declaration is not a constant expression",
[b]="... to a consteval declaration is not a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{pointer|reference}0 to a consteval declaration is not a constant expression",
[h]="%select{pointer|reference}0 to a consteval declaration is not a constant expression",
[g]=b,
[j]=i,
[e]="(?:pointer|reference) to a consteval declaration is not a constant expression",
[k]="(?:pointer|reference) to a consteval declaration is not a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={fc,1579695612,nc},
[m]={Fc,1579695612,Qc},
[n]={{p,2196,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  if (auto *FD = dyn_cast_or_null<FunctionDecl>(BaseVD); FD && FD->isImmediateFunction()) {\n    Info.FFDiag(Loc, diag::note_consteval_address_accessible) << !Type->isAnyPointerType();"},{p,2336,"/// Member pointers are constant expressions unless they point to a\n/// non-virtual dllimport member function.\nstatic bool CheckMemberPointerConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const APValue &Value, ConstantExprKind Kind) {\n  if (FD->isImmediateFunction()) {\n    Info.FFDiag(Loc, diag::note_consteval_address_accessible) << /*pointer*/ 0;"}}
[n]={{q,2196,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  if (auto *FD = dyn_cast_or_null<FunctionDecl>(BaseVD); FD && FD->isImmediateFunction()) {\n    Info.FFDiag(Loc, diag::note_consteval_address_accessible) << !Type->isAnyPointerType();"},{q,2336,"/// Member pointers are constant expressions unless they point to a\n/// non-virtual dllimport member function.\nstatic bool CheckMemberPointerConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const APValue &Value, ConstantExprKind Kind) {\n  if (FD->isImmediateFunction()) {\n    Info.FFDiag(Loc, diag::note_consteval_address_accessible) << /*pointer*/ 0;"}},
[o]={
["clang/test/CXX/expr/expr.const/p6-2a.cpp"]={"clang/test/CXX/expr/expr.const/p6-2a.cpp:50:20: note: pointer to a consteval declaration is not a constant expression","clang/test/CXX/expr/expr.const/p6-2a.cpp:50:16: note: pointer to a consteval declaration is not a constant expression"}
}
},
},
["note_constexpr_access_deleted_object"]={
["note_constexpr_access_deleted_object"]={
[f]="... heap allocated object that has been deleted",
[b]="... heap allocated object that has been deleted",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of}0 heap allocated object that has been deleted",
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of}0 heap allocated object that has been deleted",
[g]=b,
[j]=i,
[e]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of) heap allocated object that has been deleted",
[k]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of) heap allocated object that has been deleted",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,4174,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n  } else if (DynamicAllocLValue DA = LVal.Base.dyn_cast<DynamicAllocLValue>()) {\n    if (!Alloc) {\n      Info.FFDiag(E, diag::note_constexpr_access_deleted_object) << AK;"}}
[n]={{q,4174,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n  } else if (DynamicAllocLValue DA = LVal.Base.dyn_cast<DynamicAllocLValue>()) {\n    if (!Alloc) {\n      Info.FFDiag(E, diag::note_constexpr_access_deleted_object) << AK;"}},
[o]={
[zb]={"clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:111:5: note: construction of heap allocated object that has been deleted"}
}
},
},
["note_constexpr_access_inactive_union_member"]={
["note_constexpr_access_inactive_union_member"]={
[f]="... member A of union with ... is not allowed in a constant expression",
[b]="... member A of union with ... is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of subobject of|destruction of}0 member %1 of union with %select{active member %3|no active member}2 is not allowed in a constant expression",
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of subobject of|destruction of}0 member %1 of union with %select{active member %3|no active member}2 is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of subobject of|destruction of) member (.*?) of union with (?:active member (.*?)|no active member) is not allowed in a constant expression",
[k]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of subobject of|destruction of) member (.*?) of union with (?:active member (.*?)|no active member) is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={xb,1366986990,sb},
[m]={Gb,1366986990,Fb},
[n]={{p,3824,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    if (ObjType->isArrayType()) {\n    } else if (ObjType->isAnyComplexType()) {\n    } else if (const FieldDecl *Field = getAsField(Sub.Entries[I])) {\n      if (RD->isUnion()) {\n        if (!UnionField || UnionField->getCanonicalDecl() != Field->getCanonicalDecl()) {\n          if (I == N - 1 && handler.AccessKind == AK_Construct) {\n          } else {\n            Info.FFDiag(E, diag::note_constexpr_access_inactive_union_member) << handler.AccessKind << Field << !UnionField << UnionField;"},{w,84,"static bool CheckActive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  S.FFDiag(Loc, diag::note_constexpr_access_inactive_union_member) << AK << InactiveField << !ActiveField << ActiveField;"}}
[n]={{q,3824,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    if (ObjType->isArrayType()) {\n    } else if (ObjType->isAnyComplexType()) {\n    } else if (const FieldDecl *Field = getAsField(Sub.Entries[I])) {\n      if (RD->isUnion()) {\n        if (!UnionField || UnionField->getCanonicalDecl() != Field->getCanonicalDecl()) {\n          if (I == N - 1 && handler.AccessKind == AK_Construct) {\n          } else {\n            Info.FFDiag(E, diag::note_constexpr_access_inactive_union_member) << handler.AccessKind << Field << !UnionField << UnionField;"},{A,84,"static bool CheckActive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  S.FFDiag(Loc, diag::note_constexpr_access_inactive_union_member) << AK << InactiveField << !ActiveField << ActiveField;"}},
[o]={
["clang/test/SemaCXX/cxx1y-initializer-aggregates.cpp"]={"clang/test/SemaCXX/cxx1y-initializer-aggregates.cpp:28:17: note: read of member \'d\' of union with active member \'c\' is not allowed in a constant expression"}
}
},
},
["note_constexpr_access_mutable"]={
["note_constexpr_access_mutable"]={
[f]="... mutable member A is not allowed in a constant expression",
[b]="... mutable member A is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of}0 mutable member %1 is not allowed in a constant expression",
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of}0 mutable member %1 is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of) mutable member (.*?) is not allowed in a constant expression",
[k]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of) mutable member (.*?) is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"2b4fa5348ee1",1569733726,"For P0784R7: compute whether a variable has constant destruction if it"},
[m]={"2b4fa5348ee1",1569733726,"For P0784R7: compute whether a variable has constant destruction if it"},
[n]={{p,3542,"/// Diagnose an attempt to read from any unreadable field within the specified\n/// type, which might be a class type.\nstatic bool diagnoseMutableFields(EvalInfo &Info, const Expr *E, AccessKinds AK, QualType T) {\n  for (auto *Field : RD->fields()) {\n    // If we\'re actually going to read this field in some way, then it can\'t\n    // be mutable. If we\'re in a union, then assigning to a mutable field\n    // (even an empty one) can change the active member, so that\'s not OK.\n    // FIXME: Add core issue number for the union case.\n    if (Field->isMutable() && (RD->isUnion() || isReadByLvalueToRvalueConversion(Field->getType()))) {\n      Info.FFDiag(E, diag::note_constexpr_access_mutable, 1) << AK << Field;"},{p,3804,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    if (ObjType->isArrayType()) {\n    } else if (ObjType->isAnyComplexType()) {\n    } else if (const FieldDecl *Field = getAsField(Sub.Entries[I])) {\n      if (Field->isMutable() && !Obj.mayAccessMutableMembers(Info, handler.AccessKind)) {\n        Info.FFDiag(E, diag::note_constexpr_access_mutable, 1) << handler.AccessKind << Field;"},{w,231,"bool CheckMutable(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  S.FFDiag(Loc, diag::note_constexpr_access_mutable, 1) << AK_Read << Field;"}}
[n]={{q,3542,"/// Diagnose an attempt to read from any unreadable field within the specified\n/// type, which might be a class type.\nstatic bool diagnoseMutableFields(EvalInfo &Info, const Expr *E, AccessKinds AK, QualType T) {\n  for (auto *Field : RD->fields()) {\n    // If we\'re actually going to read this field in some way, then it can\'t\n    // be mutable. If we\'re in a union, then assigning to a mutable field\n    // (even an empty one) can change the active member, so that\'s not OK.\n    // FIXME: Add core issue number for the union case.\n    if (Field->isMutable() && (RD->isUnion() || isReadByLvalueToRvalueConversion(Field->getType()))) {\n      Info.FFDiag(E, diag::note_constexpr_access_mutable, 1) << AK << Field;"},{q,3804,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    if (ObjType->isArrayType()) {\n    } else if (ObjType->isAnyComplexType()) {\n    } else if (const FieldDecl *Field = getAsField(Sub.Entries[I])) {\n      if (Field->isMutable() && !Obj.mayAccessMutableMembers(Info, handler.AccessKind)) {\n        Info.FFDiag(E, diag::note_constexpr_access_mutable, 1) << handler.AccessKind << Field;"},{A,231,"bool CheckMutable(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  S.FFDiag(Loc, diag::note_constexpr_access_mutable, 1) << AK_Read << Field;"}},
[o]={
["clang/test/CXX/expr/expr.const/p6-2a.cpp"]={"clang/test/CXX/expr/expr.const/p6-2a.cpp:15:35: note: read of mutable member \'member\' is not allowed in a constant expression","clang/test/CXX/expr/expr.const/p6-2a.cpp:21:38: note: assignment to mutable member \'member\' is not allowed in a constant expression","clang/test/CXX/expr/expr.const/p6-2a.cpp:32:13: note: read of mutable member \'hcm\' is not allowed in a constant expression"}
}
},
},
["note_constexpr_access_null"]={
["note_constexpr_access_null"]={
[f]="... dereferenced null pointer is not allowed in a constant expression",
[b]="... dereferenced null pointer is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of}0 dereferenced null pointer is not allowed in a constant expression",
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of}0 dereferenced null pointer is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of) dereferenced null pointer is not allowed in a constant expression",
[k]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of) dereferenced null pointer is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={xb,1366986990,sb},
[m]={Gb,1366986990,Fb},
[n]={{p,1654,"#endif\n  bool checkNullPointerForFoldAccess(EvalInfo &Info, const Expr *E, AccessKinds AK) {\n    return checkNullPointerDiagnosingWith([&Info, E, AK] { Info.FFDiag(E, diag::note_constexpr_access_null) << AK; });"},{p,4009,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (!LVal.Base) {\n    Info.FFDiag(E, diag::note_constexpr_access_null) << AK;"},{w,155,"bool CheckLive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (Ptr.isZero()) {\n    if (Ptr.isField())\n    else\n      S.FFDiag(Src, diag::note_constexpr_access_null) << AK;"}}
[n]={{q,1654,"#endif\n  bool checkNullPointerForFoldAccess(EvalInfo &Info, const Expr *E, AccessKinds AK) {\n    return checkNullPointerDiagnosingWith([&Info, E, AK] { Info.FFDiag(E, diag::note_constexpr_access_null) << AK; });"},{q,4009,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (!LVal.Base) {\n    Info.FFDiag(E, diag::note_constexpr_access_null) << AK;"},{A,155,"bool CheckLive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (Ptr.isZero()) {\n    if (Ptr.isField())\n    else\n      S.FFDiag(Src, diag::note_constexpr_access_null) << AK;"}},
[o]={
["clang/test/AST/Interp/builtin-functions.cpp"]={"clang/test/AST/Interp/builtin-functions.cpp:19:17: note: read of dereferenced null pointer is not allowed in a constant expression","clang/test/AST/Interp/builtin-functions.cpp:24:17: note: read of dereferenced null pointer is not allowed in a constant expression"}
}
},
},
["note_constexpr_access_past_end"]={
["note_constexpr_access_past_end"]={
[f]="... dereferenced one-past-the-end pointer is not allowed in a constant expression",
[b]="... dereferenced one-past-the-end pointer is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of}0 dereferenced one-past-the-end pointer is not allowed in a constant expression",
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of}0 dereferenced one-past-the-end pointer is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of) dereferenced one\\-past\\-the\\-end pointer is not allowed in a constant expression",
[k]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of) dereferenced one\\-past\\-the\\-end pointer is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={xb,1366986990,sb},
[m]={Gb,1366986990,Fb},
[n]={{p,3659,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  if (Sub.isOnePastTheEnd() || Sub.isMostDerivedAnUnsizedArray()) {\n    if (Info.getLangOpts().CPlusPlus11)\n      Info.FFDiag(E, Sub.isOnePastTheEnd() ? diag::note_constexpr_access_past_end : diag::note_constexpr_access_unsized_array) << handler.AccessKind;"},{p,3761,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    if (ObjType->isArrayType()) {\n      if (CAT->getSize().ule(Index)) {\n        // Note, it should not be possible to form a pointer with a valid\n        // designator which points more than one past the end of the array.\n        if (Info.getLangOpts().CPlusPlus11)\n          Info.FFDiag(E, diag::note_constexpr_access_past_end) << handler.AccessKind;"},{p,3782,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    if (ObjType->isArrayType()) {\n    } else if (ObjType->isAnyComplexType()) {\n      if (Index > 1) {\n        if (Info.getLangOpts().CPlusPlus11)\n          Info.FFDiag(E, diag::note_constexpr_access_past_end) << handler.AccessKind;"},{p,4340,"/// Perform an lvalue-to-rvalue conversion on the given glvalue. This\n/// can also be used for \'lvalue-to-lvalue\' conversions for looking up the\n/// glvalue referred to by an entity of reference type.\n///\n/// \\param Info - Information about the ongoing evaluation.\n/// \\param Conv - The expression for which we are performing the conversion.\n///              Used for diagnostics.\n/// \\param Type - The type of the glvalue (before stripping cv-qualifiers in the\n///              case of a non-class type).\n/// \\param LVal - The glvalue on which we are attempting to perform this action.\n/// \\param RVal - The produced value will be placed here.\n/// \\param WantObjectRepresentation - If true, we\'re looking for the object\n///              representation rather than the value, and in particular,\n///              there is no requirement that the result be fully initialized.\nstatic bool handleLValueToRValueConversion(EvalInfo &Info, const Expr *Conv, QualType Type, const LValue &LVal, APValue &RVal, bool WantObjectRepresentation = false) {\n  if (Base && !LVal.getLValueCallIndex() && !Type.isVolatileQualified()) {\n    if (const CompoundLiteralExpr *CLE = dyn_cast<CompoundLiteralExpr>(Base)) {\n    } else if (isa<StringLiteral>(Base) || isa<PredefinedExpr>(Base)) {\n      if (LVal.Designator.isOnePastTheEnd()) {\n        if (Info.getLangOpts().CPlusPlus11)\n          Info.FFDiag(Conv, diag::note_constexpr_access_past_end) << AK;"},{p,5661,"/// Check that we can access the notional vptr of an object / determine its\n/// dynamic type.\nstatic bool checkDynamicType(EvalInfo &Info, const Expr *E, const LValue &This, AccessKinds AK, bool Polymorphic) {\n  if (!Obj.Value) {\n    // The object is not usable in constant expressions, so we can\'t inspect\n    // its value to see if it\'s in-lifetime or what the active union members\n    // are. We can still check for a one-past-the-end lvalue.\n    if (This.Designator.isOnePastTheEnd() || This.Designator.isMostDerivedAnUnsizedArray()) {\n      Info.FFDiag(E, This.Designator.isOnePastTheEnd() ? diag::note_constexpr_access_past_end : diag::note_constexpr_access_unsized_array) << AK;"},{w,191,"bool CheckRange(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  S.FFDiag(Loc, diag::note_constexpr_access_past_end) << AK;"}}
[n]={{q,3659,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  if (Sub.isOnePastTheEnd() || Sub.isMostDerivedAnUnsizedArray()) {\n    if (Info.getLangOpts().CPlusPlus11)\n      Info.FFDiag(E, Sub.isOnePastTheEnd() ? diag::note_constexpr_access_past_end : diag::note_constexpr_access_unsized_array) << handler.AccessKind;"},{q,3761,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    if (ObjType->isArrayType()) {\n      if (CAT->getSize().ule(Index)) {\n        // Note, it should not be possible to form a pointer with a valid\n        // designator which points more than one past the end of the array.\n        if (Info.getLangOpts().CPlusPlus11)\n          Info.FFDiag(E, diag::note_constexpr_access_past_end) << handler.AccessKind;"},{q,3782,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    if (ObjType->isArrayType()) {\n    } else if (ObjType->isAnyComplexType()) {\n      if (Index > 1) {\n        if (Info.getLangOpts().CPlusPlus11)\n          Info.FFDiag(E, diag::note_constexpr_access_past_end) << handler.AccessKind;"},{q,4340,"/// Perform an lvalue-to-rvalue conversion on the given glvalue. This\n/// can also be used for \'lvalue-to-lvalue\' conversions for looking up the\n/// glvalue referred to by an entity of reference type.\n///\n/// \\param Info - Information about the ongoing evaluation.\n/// \\param Conv - The expression for which we are performing the conversion.\n///              Used for diagnostics.\n/// \\param Type - The type of the glvalue (before stripping cv-qualifiers in the\n///              case of a non-class type).\n/// \\param LVal - The glvalue on which we are attempting to perform this action.\n/// \\param RVal - The produced value will be placed here.\n/// \\param WantObjectRepresentation - If true, we\'re looking for the object\n///              representation rather than the value, and in particular,\n///              there is no requirement that the result be fully initialized.\nstatic bool handleLValueToRValueConversion(EvalInfo &Info, const Expr *Conv, QualType Type, const LValue &LVal, APValue &RVal, bool WantObjectRepresentation = false) {\n  if (Base && !LVal.getLValueCallIndex() && !Type.isVolatileQualified()) {\n    if (const CompoundLiteralExpr *CLE = dyn_cast<CompoundLiteralExpr>(Base)) {\n    } else if (isa<StringLiteral>(Base) || isa<PredefinedExpr>(Base)) {\n      if (LVal.Designator.isOnePastTheEnd()) {\n        if (Info.getLangOpts().CPlusPlus11)\n          Info.FFDiag(Conv, diag::note_constexpr_access_past_end) << AK;"},{q,5661,"/// Check that we can access the notional vptr of an object / determine its\n/// dynamic type.\nstatic bool checkDynamicType(EvalInfo &Info, const Expr *E, const LValue &This, AccessKinds AK, bool Polymorphic) {\n  if (!Obj.Value) {\n    // The object is not usable in constant expressions, so we can\'t inspect\n    // its value to see if it\'s in-lifetime or what the active union members\n    // are. We can still check for a one-past-the-end lvalue.\n    if (This.Designator.isOnePastTheEnd() || This.Designator.isMostDerivedAnUnsizedArray()) {\n      Info.FFDiag(E, This.Designator.isOnePastTheEnd() ? diag::note_constexpr_access_past_end : diag::note_constexpr_access_unsized_array) << AK;"},{A,191,"bool CheckRange(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  S.FFDiag(Loc, diag::note_constexpr_access_past_end) << AK;"}},
[o]={
["clang/test/SemaCXX/constexpr-array-unknown-bound.cpp"]={"clang/test/SemaCXX/constexpr-array-unknown-bound.cpp:5:32: note: read of dereferenced one-past-the-end pointer is not allowed in a constant expression"}
}
},
},
["note_constexpr_access_static_temporary"]={
["note_constexpr_access_static_temporary"]={
[f]="... temporary is not allowed in a constant expression outside the expression that created the temporary",
[b]="... temporary is not allowed in a constant expression outside the expression that created the temporary",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|reconstruction of|destruction of}0 temporary is not allowed in a constant expression outside the expression that created the temporary",
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|reconstruction of|destruction of}0 temporary is not allowed in a constant expression outside the expression that created the temporary",
[g]=b,
[j]=i,
[e]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|reconstruction of|destruction of) temporary is not allowed in a constant expression outside the expression that created the temporary",
[k]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|reconstruction of|destruction of) temporary is not allowed in a constant expression outside the expression that created the temporary",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"e6c0144208a4",1370393174,"Model temporary lifetime-extension explicitly in the AST. Use this model to"},
[m]={"e6c0144208a4",1370393174,"Model temporary lifetime-extension explicitly in the AST. Use this model to"},
[n]={{p,4217,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n  } else if (DynamicAllocLValue DA = LVal.Base.dyn_cast<DynamicAllocLValue>()) {\n  } else {\n    if (!Frame) {\n      if (const MaterializeTemporaryExpr *MTE = dyn_cast_or_null<MaterializeTemporaryExpr>(Base)) {\n        // C++20 [expr.const]p4: [DR2126]\n        //  An object or reference is usable in constant expressions if it is\n        //  - a temporary object of non-volatile const-qualified literal type\n        //    whose lifetime is extended to that of a variable that is usable\n        //    in constant expressions\n        //\n        // C++20 [expr.const]p5:\n        //  an lvalue-to-rvalue conversion [is not allowed unless it applies to]\n        //  - a non-volatile glvalue that refers to an object that is usable\n        //    in constant expressions, or\n        //  - a non-volatile glvalue of literal type that refers to a\n        //    non-volatile object whose lifetime began within the evaluation\n        //    of E;\n        //\n        // C++11 misses the \'began within the evaluation of e\' check and\n        // instead allows all temporaries, including things like:\n        //  int &&r = 1;\n        //  int x = ++r;\n        //  constexpr int k = r;\n        // Therefore we use the C++14-onwards rules in C++11 too.\n        //\n        // Note that temporaries whose lifetimes began while evaluating a\n        // variable\'s constructor are not usable while evaluating the\n        // corresponding destructor, not even if they\'re of const-qualified\n        // types.\n        if (!MTE->isUsableInConstantExpressions(Info.Ctx) && !lifetimeStartedInEvaluation(Info, LVal.Base)) {\n          Info.FFDiag(E, diag::note_constexpr_access_static_temporary, 1) << AK;"},{w,102,"static bool CheckTemporary(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (auto ID = Ptr.getDeclID()) {\n    S.FFDiag(E, diag::note_constexpr_access_static_temporary, 1) << AK;"}}
[n]={{q,4217,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n  } else if (DynamicAllocLValue DA = LVal.Base.dyn_cast<DynamicAllocLValue>()) {\n  } else {\n    if (!Frame) {\n      if (const MaterializeTemporaryExpr *MTE = dyn_cast_or_null<MaterializeTemporaryExpr>(Base)) {\n        // C++20 [expr.const]p4: [DR2126]\n        //  An object or reference is usable in constant expressions if it is\n        //  - a temporary object of non-volatile const-qualified literal type\n        //    whose lifetime is extended to that of a variable that is usable\n        //    in constant expressions\n        //\n        // C++20 [expr.const]p5:\n        //  an lvalue-to-rvalue conversion [is not allowed unless it applies to]\n        //  - a non-volatile glvalue that refers to an object that is usable\n        //    in constant expressions, or\n        //  - a non-volatile glvalue of literal type that refers to a\n        //    non-volatile object whose lifetime began within the evaluation\n        //    of E;\n        //\n        // C++11 misses the \'began within the evaluation of e\' check and\n        // instead allows all temporaries, including things like:\n        //  int &&r = 1;\n        //  int x = ++r;\n        //  constexpr int k = r;\n        // Therefore we use the C++14-onwards rules in C++11 too.\n        //\n        // Note that temporaries whose lifetimes began while evaluating a\n        // variable\'s constructor are not usable while evaluating the\n        // corresponding destructor, not even if they\'re of const-qualified\n        // types.\n        if (!MTE->isUsableInConstantExpressions(Info.Ctx) && !lifetimeStartedInEvaluation(Info, LVal.Base)) {\n          Info.FFDiag(E, diag::note_constexpr_access_static_temporary, 1) << AK;"},{A,102,"static bool CheckTemporary(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (auto ID = Ptr.getDeclID()) {\n    S.FFDiag(E, diag::note_constexpr_access_static_temporary, 1) << AK;"}},
[o]={
["clang/test/CXX/expr/expr.const/p6-2a.cpp"]={"clang/test/CXX/expr/expr.const/p6-2a.cpp:40:13: note: read of temporary is not allowed in a constant expression outside the expression that created the temporary"}
}
},
},
["note_constexpr_access_uninit"]={
["note_constexpr_access_uninit"]={
[f]="... ... is not allowed in a constant expression",
[b]="... ... is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of subobject of|destruction of}0 %select{object outside its lifetime|uninitialized object}1 is not allowed in a constant expression",
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of subobject of|destruction of}0 %select{object outside its lifetime|uninitialized object}1 is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of subobject of|destruction of) (?:object outside its lifetime|uninitialized object) is not allowed in a constant expression",
[k]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of subobject of|destruction of) (?:object outside its lifetime|uninitialized object) is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={xb,1366986990,sb},
[m]={Gb,1366986990,Fb},
[n]={{p,3679,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    // Reading an indeterminate value is undefined, but assigning over one is OK.\n    if ((O->isAbsent() && !(handler.AccessKind == AK_Construct && I == N)) || (O->isIndeterminate() && !isValidIndeterminateAccess(handler.AccessKind))) {\n      if (!Info.checkingPotentialConstantExpression())\n        Info.FFDiag(E, diag::note_constexpr_access_uninit) << handler.AccessKind << O->isIndeterminate();"},{w,243,"bool CheckInitialized(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (!S.checkingPotentialConstantExpression()) {\n    S.FFDiag(Loc, diag::note_constexpr_access_uninit) << AK << /*uninitialized=*/true;"}}
[n]={{q,3679,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    // Reading an indeterminate value is undefined, but assigning over one is OK.\n    if ((O->isAbsent() && !(handler.AccessKind == AK_Construct && I == N)) || (O->isIndeterminate() && !isValidIndeterminateAccess(handler.AccessKind))) {\n      if (!Info.checkingPotentialConstantExpression())\n        Info.FFDiag(E, diag::note_constexpr_access_uninit) << handler.AccessKind << O->isIndeterminate();"},{A,243,"bool CheckInitialized(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (!S.checkingPotentialConstantExpression()) {\n    S.FFDiag(Loc, diag::note_constexpr_access_uninit) << AK << /*uninitialized=*/true;"}},
[o]={
["clang/test/SemaCXX/constexpr-value-init.cpp"]={Gc,Gc,Gc,Gc,Gc}
}
},
},
["note_constexpr_access_unreadable_object"]={
["note_constexpr_access_unreadable_object"]={
[f]="... object \'A\' whose value is not known",
[b]="... object \'A\' whose value is not known",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of}0 object \'%1\' whose value is not known",
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of}0 object \'%1\' whose value is not known",
[g]=b,
[j]=i,
[e]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of) object \'(.*?)\' whose value is not known",
[k]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of) object \'(.*?)\' whose value is not known",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"7ee4307bd445",1558057565,"Refactor constant evaluation of typeid(T) to track a symbolic type_info"},
[m]={"7ee4307bd445",1558057565,"Refactor constant evaluation of typeid(T) to track a symbolic type_info"},
[n]={{p,4229,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n  } else if (DynamicAllocLValue DA = LVal.Base.dyn_cast<DynamicAllocLValue>()) {\n  } else {\n    if (!Frame) {\n      if (const MaterializeTemporaryExpr *MTE = dyn_cast_or_null<MaterializeTemporaryExpr>(Base)) {\n      } else {\n        Info.FFDiag(E, diag::note_constexpr_access_unreadable_object) << AK << Val.getAsString(Info.Ctx, Info.Ctx.getLValueReferenceType(LValType));"}}
[n]={{q,4229,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n  } else if (DynamicAllocLValue DA = LVal.Base.dyn_cast<DynamicAllocLValue>()) {\n  } else {\n    if (!Frame) {\n      if (const MaterializeTemporaryExpr *MTE = dyn_cast_or_null<MaterializeTemporaryExpr>(Base)) {\n      } else {\n        Info.FFDiag(E, diag::note_constexpr_access_unreadable_object) << AK << Val.getAsString(Info.Ctx, Info.Ctx.getLValueReferenceType(LValType));"}},
[o]={
["clang/test/SemaCXX/typeid.cpp"]={"clang/test/SemaCXX/typeid.cpp:32:30: note: read of object \'typeid(int).name\' whose value is not known"}
}
},
},
["note_constexpr_access_unsized_array"]={
["note_constexpr_access_unsized_array"]={
[f]="... element of array without known bound is not allowed in a constant expression",
[b]="... element of array without known bound is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of}0 element of array without known bound is not allowed in a constant expression",
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of}0 element of array without known bound is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of) element of array without known bound is not allowed in a constant expression",
[k]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of) element of array without known bound is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"2cd56048239f",1503971533,"Improve constant expression evaluation of arrays of unknown bound."},
[m]={"2cd56048239f",1503971533,"Improve constant expression evaluation of arrays of unknown bound."},
[n]={{p,3660,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  if (Sub.isOnePastTheEnd() || Sub.isMostDerivedAnUnsizedArray()) {\n    if (Info.getLangOpts().CPlusPlus11)\n      Info.FFDiag(E, Sub.isOnePastTheEnd() ? diag::note_constexpr_access_past_end : diag::note_constexpr_access_unsized_array) << handler.AccessKind;"},{p,5662,"/// Check that we can access the notional vptr of an object / determine its\n/// dynamic type.\nstatic bool checkDynamicType(EvalInfo &Info, const Expr *E, const LValue &This, AccessKinds AK, bool Polymorphic) {\n  if (!Obj.Value) {\n    // The object is not usable in constant expressions, so we can\'t inspect\n    // its value to see if it\'s in-lifetime or what the active union members\n    // are. We can still check for a one-past-the-end lvalue.\n    if (This.Designator.isOnePastTheEnd() || This.Designator.isMostDerivedAnUnsizedArray()) {\n      Info.FFDiag(E, This.Designator.isOnePastTheEnd() ? diag::note_constexpr_access_past_end : diag::note_constexpr_access_unsized_array) << AK;"}}
[n]={{q,3660,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  if (Sub.isOnePastTheEnd() || Sub.isMostDerivedAnUnsizedArray()) {\n    if (Info.getLangOpts().CPlusPlus11)\n      Info.FFDiag(E, Sub.isOnePastTheEnd() ? diag::note_constexpr_access_past_end : diag::note_constexpr_access_unsized_array) << handler.AccessKind;"},{q,5662,"/// Check that we can access the notional vptr of an object / determine its\n/// dynamic type.\nstatic bool checkDynamicType(EvalInfo &Info, const Expr *E, const LValue &This, AccessKinds AK, bool Polymorphic) {\n  if (!Obj.Value) {\n    // The object is not usable in constant expressions, so we can\'t inspect\n    // its value to see if it\'s in-lifetime or what the active union members\n    // are. We can still check for a one-past-the-end lvalue.\n    if (This.Designator.isOnePastTheEnd() || This.Designator.isMostDerivedAnUnsizedArray()) {\n      Info.FFDiag(E, This.Designator.isOnePastTheEnd() ? diag::note_constexpr_access_past_end : diag::note_constexpr_access_unsized_array) << AK;"}}
},
},
["note_constexpr_access_volatile_obj"]={
["note_constexpr_access_volatile_obj"]={
[f]="... volatile ... is not allowed in a constant expression",
[b]="... volatile ... is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{read of|read of|assignment to|increment of|decrement of|<ERROR>|<ERROR>|<ERROR>|<ERROR>}0 volatile %select{temporary|object %2|member %2}1 is not allowed in a constant expression",
[h]="%select{read of|read of|assignment to|increment of|decrement of|<ERROR>|<ERROR>|<ERROR>|<ERROR>}0 volatile %select{temporary|object %2|member %2}1 is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="(?:read of|read of|assignment to|increment of|decrement of) volatile (?:temporary|object (.*?)|member (.*?)) is not allowed in a constant expression",
[k]="(?:read of|read of|assignment to|increment of|decrement of) volatile (?:temporary|object (.*?)|member (.*?)) is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={xb,1366986990,sb},
[m]={Gb,1366986990,Fb},
[n]={{p,3719,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    // If this is our last pass, check that the final object type is OK.\n    if (I == N || (I == N - 1 && ObjType->isAnyComplexType())) {\n      // Accesses to volatile objects are prohibited.\n      if (ObjType.isVolatileQualified() && isFormalAccess(handler.AccessKind)) {\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.FFDiag(E, diag::note_constexpr_access_volatile_obj, 1) << handler.AccessKind << DiagKind << Decl;"}}
[n]={{q,3719,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    // If this is our last pass, check that the final object type is OK.\n    if (I == N || (I == N - 1 && ObjType->isAnyComplexType())) {\n      // Accesses to volatile objects are prohibited.\n      if (ObjType.isVolatileQualified() && isFormalAccess(handler.AccessKind)) {\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.FFDiag(E, diag::note_constexpr_access_volatile_obj, 1) << handler.AccessKind << DiagKind << Decl;"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:328:17: note: read of volatile object \'vi\' is not allowed in a constant expression","clang/test/CXX/expr/expr.const/p2-0x.cpp:350:17: note: read of volatile object \'vi\' is not allowed in a constant expression","clang/test/CXX/expr/expr.const/p2-0x.cpp:352:17: note: read of volatile object \'vs\' is not allowed in a constant expression"}
}
},
},
["note_constexpr_access_volatile_type"]={
["note_constexpr_access_volatile_type"]={
[f]="... volatile-qualified type A is not allowed in a constant expression",
[b]="... volatile-qualified type A is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{read of|read of|assignment to|increment of|decrement of|<ERROR>|<ERROR>|<ERROR>|<ERROR>}0 volatile-qualified type %1 is not allowed in a constant expression",
[h]="%select{read of|read of|assignment to|increment of|decrement of|<ERROR>|<ERROR>|<ERROR>|<ERROR>}0 volatile-qualified type %1 is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="(?:read of|read of|assignment to|increment of|decrement of) volatile\\-qualified type (.*?) is not allowed in a constant expression",
[k]="(?:read of|read of|assignment to|increment of|decrement of) volatile\\-qualified type (.*?) is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={xb,1366986990,sb},
[m]={Gb,1366986990,Fb},
[n]={{p,4034,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  // C++11 DR1311: An lvalue-to-rvalue conversion on a volatile-qualified type\n  // is not a constant expression (even if the object is non-volatile). We also\n  // apply this rule to C++98, in order to conform to the expected \'volatile\'\n  // semantics.\n  if (isFormalAccess(AK) && LValType.isVolatileQualified()) {\n    if (Info.getLangOpts().CPlusPlus)\n      Info.FFDiag(E, diag::note_constexpr_access_volatile_type) << AK << LValType;"}}
[n]={{q,4034,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  // C++11 DR1311: An lvalue-to-rvalue conversion on a volatile-qualified type\n  // is not a constant expression (even if the object is non-volatile). We also\n  // apply this rule to C++98, in order to conform to the expected \'volatile\'\n  // semantics.\n  if (isFormalAccess(AK) && LValType.isVolatileQualified()) {\n    if (Info.getLangOpts().CPlusPlus)\n      Info.FFDiag(E, diag::note_constexpr_access_volatile_type) << AK << LValType;"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:327:17: note: read of volatile-qualified type \'const volatile int\' is not allowed in a constant expression","clang/test/CXX/expr/expr.const/p2-0x.cpp:329:17: note: read of volatile-qualified type \'const volatile int\' is not allowed in a constant expression","clang/test/CXX/expr/expr.const/p2-0x.cpp:349:17: note: read of volatile-qualified type \'volatile int\' is not allowed in a constant expression","clang/test/CXX/expr/expr.const/p2-0x.cpp:351:17: note: read of volatile-qualified type \'const volatile int\' is not allowed in a constant expression","clang/test/CXX/expr/expr.const/p2-0x.cpp:353:17: note: read of volatile-qualified type \'const volatile int\' is not allowed in a constant expression","clang/test/CXX/expr/expr.const/p2-0x.cpp:359:17: note: read of volatile-qualified type \'volatile int\' is not allowed in a constant expression","clang/test/CXX/expr/expr.const/p2-0x.cpp:360:17: note: read of volatile-qualified type \'const volatile int\' is not allowed in a constant expression"}
}
},
},
["note_constexpr_alignment_adjust"]={
["note_constexpr_alignment_adjust"]={
[f]="cannot constant evaluate the result of adjusting alignment to A",
[b]="cannot constant evaluate the result of adjusting alignment to A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot constant evaluate the result of adjusting alignment to %0",
[h]="cannot constant evaluate the result of adjusting alignment to %0",
[g]=b,
[j]=i,
[e]="cannot constant evaluate the result of adjusting alignment to (.*?)",
[k]="cannot constant evaluate the result of adjusting alignment to (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"8c387cbea76b",1578602886,"Add builtins for aligning and checking alignment of pointers and integers"},
[m]={"8c387cbea76b",1578602886,"Add builtins for aligning and checking alignment of pointers and integers"},
[n]={{p,9287,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_align_down: {\n    Info.FFDiag(E->getArg(0), diag::note_constexpr_alignment_adjust) << Alignment;"}}
[n]={{q,9287,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_align_down: {\n    Info.FFDiag(E->getArg(0), diag::note_constexpr_alignment_adjust) << Alignment;"}},
[o]={
["clang/test/SemaCXX/builtin-align-cxx.cpp"]={"clang/test/SemaCXX/builtin-align-cxx.cpp:176:54: note: cannot constant evaluate the result of adjusting alignment to 64","clang/test/SemaCXX/builtin-align-cxx.cpp:178:34: note: cannot constant evaluate the result of adjusting alignment to 64","clang/test/SemaCXX/builtin-align-cxx.cpp:207:36: note: cannot constant evaluate the result of adjusting alignment to 64","clang/test/SemaCXX/builtin-align-cxx.cpp:228:55: note: cannot constant evaluate the result of adjusting alignment to 64"}
}
},
},
["note_constexpr_alignment_compute"]={
["note_constexpr_alignment_compute"]={
[f]="cannot constant evaluate whether run-time alignment is at least A",
[b]="cannot constant evaluate whether run-time alignment is at least A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot constant evaluate whether run-time alignment is at least %0",
[h]="cannot constant evaluate whether run-time alignment is at least %0",
[g]=b,
[j]=i,
[e]="cannot constant evaluate whether run\\-time alignment is at least (.*?)",
[k]="cannot constant evaluate whether run\\-time alignment is at least (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"8c387cbea76b",1578602886,"Add builtins for aligning and checking alignment of pointers and integers"},
[m]={"8c387cbea76b",1578602886,"Add builtins for aligning and checking alignment of pointers and integers"},
[n]={{p,12026,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_is_aligned: {\n    if (Src.isLValue()) {\n      Info.FFDiag(E->getArg(0), diag::note_constexpr_alignment_compute) << Alignment;"}}
[n]={{q,12026,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_is_aligned: {\n    if (Src.isLValue()) {\n      Info.FFDiag(E->getArg(0), diag::note_constexpr_alignment_compute) << Alignment;"}},
[o]={
["clang/test/SemaCXX/builtin-align-cxx.cpp"]={"clang/test/SemaCXX/builtin-align-cxx.cpp:215:37: note: cannot constant evaluate whether run-time alignment is at least 64"}
}
},
},
["note_constexpr_alignment_too_big"]={
["note_constexpr_alignment_too_big"]={
[f]="requested alignment must be A or less for type B; C is invalid",
[b]="requested alignment must be A or less for type B; C is invalid",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="requested alignment must be %0 or less for type %1; %2 is invalid",
[h]="requested alignment must be %0 or less for type %1; %2 is invalid",
[g]=b,
[j]=i,
[e]="requested alignment must be (.*?) or less for type (.*?); (.*?) is invalid",
[k]="requested alignment must be (.*?) or less for type (.*?); (.*?) is invalid",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"8c387cbea76b",1578602886,"Add builtins for aligning and checking alignment of pointers and integers"},
[m]={"8c387cbea76b",1578602886,"Add builtins for aligning and checking alignment of pointers and integers"},
[n]={{p,9149,"/// Evaluate the value of the alignment argument to __builtin_align_{up,down},\n/// __builtin_is_aligned and __builtin_assume_aligned.\nstatic bool getAlignmentArgument(const Expr *E, QualType ForType, EvalInfo &Info, APSInt &Alignment) {\n  if (APSInt::compareValues(Alignment, MaxValue) > 0) {\n    Info.FFDiag(E, diag::note_constexpr_alignment_too_big) << MaxValue << ForType << Alignment;"}}
[n]={{q,9149,"/// Evaluate the value of the alignment argument to __builtin_align_{up,down},\n/// __builtin_is_aligned and __builtin_assume_aligned.\nstatic bool getAlignmentArgument(const Expr *E, QualType ForType, EvalInfo &Info, APSInt &Alignment) {\n  if (APSInt::compareValues(Alignment, MaxValue) > 0) {\n    Info.FFDiag(E, diag::note_constexpr_alignment_too_big) << MaxValue << ForType << Alignment;"}},
[o]={
["clang/test/SemaCXX/builtin-align-cxx.cpp"]={"clang/test/SemaCXX/builtin-align-cxx.cpp:121:36: note: requested alignment must be 32768 or less for type \'short\'; 1048576 is invalid","clang/test/SemaCXX/builtin-align-cxx.cpp:112:34: note: requested alignment must be 2147483648 or less for type \'int\'; 8589934592 is invalid","clang/test/SemaCXX/builtin-align-cxx.cpp:105:36: note: requested alignment must be 128 or less for type \'char\'; 4194304 is invalid"}
}
},
},
["note_constexpr_array_index"]={
["note_constexpr_array_index"]={
[f]="cannot refer to element A of ... in a constant expression",
[b]="cannot refer to element A of ... in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot refer to element %0 of %select{array of %2 element%plural{1:|:s}2|non-array object}1 in a constant expression",
[h]="cannot refer to element %0 of %select{array of %2 element%plural{1:|:s}2|non-array object}1 in a constant expression",
[g]=b,
[j]=i,
[e]="cannot refer to element (.*?) of (?:array of (.*?) element(?:|s)|non\\-array object) in a constant expression",
[k]="cannot refer to element (.*?) of (?:array of (.*?) element(?:|s)|non\\-array object) in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"a8105bc9cecb",1325867940,"C++11 generalized constant expressions: implement checking and diagnostics for"},
[m]={"a8105bc9cecb",1325867940,"C++11 generalized constant expressions: implement checking and diagnostics for"},
[n]={{p,1435,"void SubobjectDesignator::diagnosePointerArithmetic(EvalInfo &Info, const Expr *E, const APSInt &N) {\n  // If we\'re complaining, we must be able to statically determine the size of\n  // the most derived array.\n  if (MostDerivedPathLength == Entries.size() && MostDerivedIsArrayElement)\n    Info.CCEDiag(E, diag::note_constexpr_array_index) << N << /*array*/ 0 << static_cast<unsigned>(getMostDerivedArraySize());"},{p,1439,"void SubobjectDesignator::diagnosePointerArithmetic(EvalInfo &Info, const Expr *E, const APSInt &N) {\n  // If we\'re complaining, we must be able to statically determine the size of\n  // the most derived array.\n  if (MostDerivedPathLength == Entries.size() && MostDerivedIsArrayElement)\n  else\n    Info.CCEDiag(E, diag::note_constexpr_array_index) << N << /*non-array*/ 1;"}}
[n]={{q,1435,"void SubobjectDesignator::diagnosePointerArithmetic(EvalInfo &Info, const Expr *E, const APSInt &N) {\n  // If we\'re complaining, we must be able to statically determine the size of\n  // the most derived array.\n  if (MostDerivedPathLength == Entries.size() && MostDerivedIsArrayElement)\n    Info.CCEDiag(E, diag::note_constexpr_array_index) << N << /*array*/ 0 << static_cast<unsigned>(getMostDerivedArraySize());"},{q,1439,"void SubobjectDesignator::diagnosePointerArithmetic(EvalInfo &Info, const Expr *E, const APSInt &N) {\n  // If we\'re complaining, we must be able to statically determine the size of\n  // the most derived array.\n  if (MostDerivedPathLength == Entries.size() && MostDerivedIsArrayElement)\n  else\n    Info.CCEDiag(E, diag::note_constexpr_array_index) << N << /*non-array*/ 1;"}},
[o]={
["clang/test/SemaCXX/constexpr-printing.cpp"]={"clang/test/SemaCXX/constexpr-printing.cpp:73:46: note: cannot refer to element -1 of array of 12 elements in a constant expression","clang/test/SemaCXX/constexpr-printing.cpp:73:46: note: cannot refer to element -1 of array of 12 elements in a constant expression","clang/test/SemaCXX/constexpr-printing.cpp:73:46: note: cannot refer to element -1 of array of 13 elements in a constant expression","clang/test/SemaCXX/constexpr-printing.cpp:73:46: note: cannot refer to element -1 of array of 14 elements in a constant expression","clang/test/SemaCXX/constexpr-printing.cpp:73:46: note: cannot refer to element -1 of array of 14 elements in a constant expression"}
}
},
},
["note_constexpr_baa_insufficient_alignment"]={
["note_constexpr_baa_insufficient_alignment"]={
[f]="... the base pointee object (A byte) is ... the asserted B byte",
[b]="... the base pointee object (A byte) is ... the asserted B byte",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{alignment of|offset of the aligned pointer from}0 the base pointee object (%1 %plural{1:byte|:bytes}1) is %select{less than|not a multiple of}0 the asserted %2 %plural{1:byte|:bytes}2",
[h]="%select{alignment of|offset of the aligned pointer from}0 the base pointee object (%1 %plural{1:byte|:bytes}1) is %select{less than|not a multiple of}0 the asserted %2 %plural{1:byte|:bytes}2",
[g]=b,
[j]=i,
[e]="(?:alignment of|offset of the aligned pointer from) the base pointee object \\((.*?) (?:byte|bytes)\\) is (?:less than|not a multiple of) the asserted (.*?) (?:byte|bytes)",
[k]="(?:alignment of|offset of the aligned pointer from) the base pointee object \\((.*?) (?:byte|bytes)\\) is (?:less than|not a multiple of) the asserted (.*?) (?:byte|bytes)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"0dd05d4b5936",1412356717,"constexpr evaluation for __builtin_assume_aligned"},
[m]={"0dd05d4b5936",1412356717,"constexpr evaluation for __builtin_assume_aligned"},
[n]={{p,9231,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_assume_aligned: {\n    // If there is a base object, then it must have the correct alignment.\n    if (OffsetResult.Base) {\n      if (BaseAlignment < Align) {\n        CCEDiag(E->getArg(0), diag::note_constexpr_baa_insufficient_alignment) << 0 << (unsigned)BaseAlignment.getQuantity() << (unsigned)Align.getQuantity();"},{p,9244,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_assume_aligned: {\n    // The offset must also have the correct alignment.\n    if (OffsetResult.Offset.alignTo(Align) != OffsetResult.Offset) {\n      (OffsetResult.Base ? CCEDiag(E->getArg(0), diag::note_constexpr_baa_insufficient_alignment) << 1 : CCEDiag(E->getArg(0), diag::note_constexpr_baa_value_insufficient_alignment)) << (int)OffsetResult.Offset.getQuantity() << (unsigned)Align.getQuantity();"}}
[n]={{q,9231,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_assume_aligned: {\n    // If there is a base object, then it must have the correct alignment.\n    if (OffsetResult.Base) {\n      if (BaseAlignment < Align) {\n        CCEDiag(E->getArg(0), diag::note_constexpr_baa_insufficient_alignment) << 0 << (unsigned)BaseAlignment.getQuantity() << (unsigned)Align.getQuantity();"},{q,9244,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_assume_aligned: {\n    // The offset must also have the correct alignment.\n    if (OffsetResult.Offset.alignTo(Align) != OffsetResult.Offset) {\n      (OffsetResult.Base ? CCEDiag(E->getArg(0), diag::note_constexpr_baa_insufficient_alignment) << 1 : CCEDiag(E->getArg(0), diag::note_constexpr_baa_value_insufficient_alignment)) << (int)OffsetResult.Offset.getQuantity() << (unsigned)Align.getQuantity();"}},
[o]={
["clang/test/SemaCXX/builtin-assume-aligned.cpp"]={"clang/test/SemaCXX/builtin-assume-aligned.cpp:16:46: note: alignment of the base pointee object (4 bytes) is less than the asserted 16 bytes","clang/test/SemaCXX/builtin-assume-aligned.cpp:20:47: note: offset of the aligned pointer from the base pointee object (-2 bytes) is not a multiple of the asserted 4 bytes","clang/test/SemaCXX/builtin-assume-aligned.cpp:23:47: note: offset of the aligned pointer from the base pointee object (2 bytes) is not a multiple of the asserted 4 bytes","clang/test/SemaCXX/builtin-assume-aligned.cpp:30:47: note: alignment of the base pointee object (1 byte) is less than the asserted 16 bytes","clang/test/SemaCXX/builtin-assume-aligned.cpp:35:47: note: offset of the aligned pointer from the base pointee object (2 bytes) is not a multiple of the asserted 16 bytes","clang/test/SemaCXX/builtin-assume-aligned.cpp:39:47: note: offset of the aligned pointer from the base pointee object (1 byte) is not a multiple of the asserted 16 bytes"}
}
},
},
["note_constexpr_baa_value_insufficient_alignment"]={
["note_constexpr_baa_value_insufficient_alignment"]={
[f]="value of the aligned pointer (A) is not a multiple of the asserted B byte",
[b]="value of the aligned pointer (A) is not a multiple of the asserted B byte",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="value of the aligned pointer (%0) is not a multiple of the asserted %1 %plural{1:byte|:bytes}1",
[h]="value of the aligned pointer (%0) is not a multiple of the asserted %1 %plural{1:byte|:bytes}1",
[g]=b,
[j]=i,
[e]="value of the aligned pointer \\((.*?)\\) is not a multiple of the asserted (.*?) (?:byte|bytes)",
[k]="value of the aligned pointer \\((.*?)\\) is not a multiple of the asserted (.*?) (?:byte|bytes)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"0dd05d4b5936",1412356717,"constexpr evaluation for __builtin_assume_aligned"},
[m]={"0dd05d4b5936",1412356717,"constexpr evaluation for __builtin_assume_aligned"},
[n]={{p,9246,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_assume_aligned: {\n    // The offset must also have the correct alignment.\n    if (OffsetResult.Offset.alignTo(Align) != OffsetResult.Offset) {\n      (OffsetResult.Base ? CCEDiag(E->getArg(0), diag::note_constexpr_baa_insufficient_alignment) << 1 : CCEDiag(E->getArg(0), diag::note_constexpr_baa_value_insufficient_alignment)) << (int)OffsetResult.Offset.getQuantity() << (unsigned)Align.getQuantity();"}}
[n]={{q,9246,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_assume_aligned: {\n    // The offset must also have the correct alignment.\n    if (OffsetResult.Offset.alignTo(Align) != OffsetResult.Offset) {\n      (OffsetResult.Base ? CCEDiag(E->getArg(0), diag::note_constexpr_baa_insufficient_alignment) << 1 : CCEDiag(E->getArg(0), diag::note_constexpr_baa_value_insufficient_alignment)) << (int)OffsetResult.Offset.getQuantity() << (unsigned)Align.getQuantity();"}},
[o]={
["clang/test/SemaCXX/builtin-assume-aligned.cpp"]={"clang/test/SemaCXX/builtin-assume-aligned.cpp:44:47: note: value of the aligned pointer (255) is not a multiple of the asserted 32 bytes","clang/test/SemaCXX/builtin-assume-aligned.cpp:47:47: note: value of the aligned pointer (250) is not a multiple of the asserted 32 bytes"}
}
},
},
["note_constexpr_bit_cast_indet_dest"]={
["note_constexpr_bit_cast_indet_dest"]={
[f]="indeterminate value can only initialize an object of type \'unsigned char\'... or \'std::byte\'; A is invalid",
[b]="indeterminate value can only initialize an object of type \'unsigned char\'... or \'std::byte\'; A is invalid",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="indeterminate value can only initialize an object of type \'unsigned char\'%select{, \'char\',|}1 or \'std::byte\'; %0 is invalid",
[h]="indeterminate value can only initialize an object of type \'unsigned char\'%select{, \'char\',|}1 or \'std::byte\'; %0 is invalid",
[g]=b,
[j]=i,
[e]="indeterminate value can only initialize an object of type \'unsigned char\'(?:, \'char\',|) or \'std\\:\\:byte\'; (.*?) is invalid",
[k]="indeterminate value can only initialize an object of type \'unsigned char\'(?:, \'char\',|) or \'std\\:\\:byte\'; (.*?) is invalid",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={gc,1562092093,hc},
[m]={Kc,1562092093,Lc},
[n]={{p,7142,"/// Write an BitCastBuffer into an APValue.\nclass BufferToAPValueConverter {\n  std::optional<APValue> visit(const BuiltinType *T, CharUnits Offset, const EnumType *EnumSugar = nullptr) {\n    if (!Buffer.readObject(Offset, SizeOf, Bytes)) {\n      if (!IsStdByte && !IsUChar) {\n        Info.FFDiag(BCE->getExprLoc(), diag::note_constexpr_bit_cast_indet_dest) << DisplayType << Info.Ctx.getLangOpts().CharIsSigned;"}}
[n]={{q,7142,"/// Write an BitCastBuffer into an APValue.\nclass BufferToAPValueConverter {\n  std::optional<APValue> visit(const BuiltinType *T, CharUnits Offset, const EnumType *EnumSugar = nullptr) {\n    if (!Buffer.readObject(Offset, SizeOf, Bytes)) {\n      if (!IsStdByte && !IsUChar) {\n        Info.FFDiag(BCE->getExprLoc(), diag::note_constexpr_bit_cast_indet_dest) << DisplayType << Info.Ctx.getLangOpts().CharIsSigned;"}},
[o]={
["clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp"]={"clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:35:10: note: indeterminate value can only initialize an object of type \'unsigned char\' or \'std::byte\'; \'signed char\' is invalid","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:35:10: note: indeterminate value can only initialize an object of type \'unsigned char\' or \'std::byte\'; \'signed char\' is invalid","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:238:45: note: indeterminate value can only initialize an object of type \'unsigned char\' or \'std::byte\'; \'unsigned long\' is invalid","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:373:30: note: indeterminate value can only initialize an object of type \'unsigned char\' or \'std::byte\'; \'my_byte\' is invalid","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:378:28: note: indeterminate value can only initialize an object of type \'unsigned char\' or \'std::byte\'; \'char\' is invalid"}
}
},
},
["note_constexpr_bit_cast_invalid_subtype"]={
["note_constexpr_bit_cast_invalid_subtype"]={
[f]="invalid type A is a ... of B",
[b]="invalid type A is a ... of B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="invalid type %0 is a %select{member|base}1 of %2",
[h]="invalid type %0 is a %select{member|base}1 of %2",
[g]=b,
[j]=i,
[e]="invalid type (.*?) is a (?:member|base) of (.*?)",
[k]="invalid type (.*?) is a (?:member|base) of (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={gc,1562092093,hc},
[m]={Kc,1562092093,Lc},
[n]={{p,7309,"static bool checkBitCastConstexprEligibilityType(SourceLocation Loc, QualType Ty, EvalInfo *Info, const ASTContext &Ctx, bool CheckingDest) {\n  auto note = [&](int Construct, QualType NoteTy, SourceLocation NoteLoc) {\n    if (Info)\n      Info->Note(NoteLoc, diag::note_constexpr_bit_cast_invalid_subtype) << NoteTy << Construct << Ty;"}}
[n]={{q,7309,"static bool checkBitCastConstexprEligibilityType(SourceLocation Loc, QualType Ty, EvalInfo *Info, const ASTContext &Ctx, bool CheckingDest) {\n  auto note = [&](int Construct, QualType NoteTy, SourceLocation NoteLoc) {\n    if (Info)\n      Info->Note(NoteLoc, diag::note_constexpr_bit_cast_invalid_subtype) << NoteTy << Construct << Ty;"}},
[o]={
["clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp"]={"clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:189:5: note: invalid type \'int *\' is a member of \'has_pointer\'","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:189:5: note: invalid type \'int *\' is a member of \'has_pointer\'","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:203:5: note: invalid type \'int *\' is a member of \'A\'","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:208:5: note: invalid type \'A[10]\' is a member of \'B\'","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:212:14: note: invalid type \'B\' is a base of \'C\'","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:326:3: note: invalid type \'int vol_mem::*\' is a member of \'mem_ptr\'"}
}
},
},
["note_constexpr_bit_cast_invalid_type"]={
["note_constexpr_bit_cast_invalid_type"]={
[f]="bit_cast ... a ...... ... is not allowed in a constant expression",
[b]="bit_cast ... a ...... ... is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="bit_cast %select{from|to}0 a %select{|type with a }1%select{union|pointer|member pointer|volatile|reference}2 %select{type|member}1 is not allowed in a constant expression",
[h]="bit_cast %select{from|to}0 a %select{|type with a }1%select{union|pointer|member pointer|volatile|reference}2 %select{type|member}1 is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="bit_cast (?:from|to) a (?:|type with a )(?:union|pointer|member pointer|volatile|reference) (?:type|member) is not allowed in a constant expression",
[k]="bit_cast (?:from|to) a (?:|type with a )(?:union|pointer|member pointer|volatile|reference) (?:type|member) is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={gc,1562092093,hc},
[m]={Kc,1562092093,Lc},
[n]={{p,7303,"static bool checkBitCastConstexprEligibilityType(SourceLocation Loc, QualType Ty, EvalInfo *Info, const ASTContext &Ctx, bool CheckingDest) {\n  auto diag = [&](int Reason) {\n    if (Info)\n      Info->FFDiag(Loc, diag::note_constexpr_bit_cast_invalid_type) << CheckingDest << (Reason == 4) << Reason;"}}
[n]={{q,7303,"static bool checkBitCastConstexprEligibilityType(SourceLocation Loc, QualType Ty, EvalInfo *Info, const ASTContext &Ctx, bool CheckingDest) {\n  auto diag = [&](int Reason) {\n    if (Info)\n      Info->FFDiag(Loc, diag::note_constexpr_bit_cast_invalid_type) << CheckingDest << (Reason == 4) << Reason;"}},
[o]={
["clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp"]={"clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:182:19: note: bit_cast from a union type is not allowed in a constant expression","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:185:19: note: bit_cast to a union type is not allowed in a constant expression","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:194:33: note: bit_cast from a pointer type is not allowed in a constant expression","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:197:33: note: bit_cast to a pointer type is not allowed in a constant expression","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:221:19: note: bit_cast from a pointer type is not allowed in a constant expression","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:306:39: note: bit_cast from a type with a reference member is not allowed in a constant expression","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:315:23: note: bit_cast from a union type is not allowed in a constant expression","clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:330:29: note: bit_cast from a member pointer type is not allowed in a constant expression"}
}
},
},
["note_constexpr_bit_cast_unrepresentable_value"]={
["note_constexpr_bit_cast_unrepresentable_value"]={
[f]="value A cannot be represented in type B",
[b]="value A cannot be represented in type B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="value %1 cannot be represented in type %0",
[h]="value %1 cannot be represented in type %0",
[g]=b,
[j]=i,
[e]="value (.*?) cannot be represented in type (.*?)",
[k]="value (.*?) cannot be represented in type (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"9523cf02c22a",1599063797,"[AST] Fix handling of long double and bool in __builtin_bit_cast"},
[m]={"9523cf02c22a",1599063797,"[AST] Fix handling of long double and bool in __builtin_bit_cast"},
[n]={{p,7102,"/// Write an BitCastBuffer into an APValue.\nclass BufferToAPValueConverter {\n  std::nullopt_t unrepresentableValue(QualType Ty, const APSInt &Val) {\n    Info.FFDiag(BCE->getBeginLoc(), diag::note_constexpr_bit_cast_unrepresentable_value) << Ty << toString(Val, /*Radix=*/10);"}}
[n]={{q,7102,"/// Write an BitCastBuffer into an APValue.\nclass BufferToAPValueConverter {\n  std::nullopt_t unrepresentableValue(QualType Ty, const APSInt &Val) {\n    Info.FFDiag(BCE->getBeginLoc(), diag::note_constexpr_bit_cast_unrepresentable_value) << Ty << toString(Val, /*Radix=*/10);"}},
[o]={
["clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp"]={"clang/test/SemaCXX/constexpr-builtin-bit-cast.cpp:35:10: note: value 65 cannot be represented in type \'bool\'"}
}
},
},
["note_constexpr_bit_cast_unsupported_bitfield"]={
["note_constexpr_bit_cast_unsupported_bitfield"]={
[f]="constexpr bit_cast involving bit-field is not yet supported",
[b]="constexpr bit_cast involving bit-field is not yet supported",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="constexpr bit_cast involving bit-field is not yet supported",
[h]="constexpr bit_cast involving bit-field is not yet supported",
[g]=b,
[j]=i,
[e]="constexpr bit_cast involving bit\\-field is not yet supported",
[k]="constexpr bit_cast involving bit\\-field is not yet supported",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={gc,1562092093,hc},
[m]={Kc,1562092093,Lc},
[n]={{p,7003,"/// Traverse an APValue to produce an BitCastBuffer, emulating how the current\n/// target would represent the value at runtime.\nclass APValueToBufferConverter {\n  bool visitRecord(const APValue &Val, QualType Ty, CharUnits Offset) {\n    for (FieldDecl *FD : RD->fields()) {\n      if (FD->isBitField()) {\n        Info.FFDiag(BCE->getBeginLoc(), diag::note_constexpr_bit_cast_unsupported_bitfield);"},{p,7211,"/// Write an BitCastBuffer into an APValue.\nclass BufferToAPValueConverter {\n  std::optional<APValue> visit(const RecordType *RTy, CharUnits Offset) {\n    for (FieldDecl *FD : RD->fields()) {\n      // FIXME: We don\'t currently support bit-fields. A lot of the logic for\n      // this is in CodeGen, so we need to factor it around.\n      if (FD->isBitField()) {\n        Info.FFDiag(BCE->getBeginLoc(), diag::note_constexpr_bit_cast_unsupported_bitfield);"}}
[n]={{q,7003,"/// Traverse an APValue to produce an BitCastBuffer, emulating how the current\n/// target would represent the value at runtime.\nclass APValueToBufferConverter {\n  bool visitRecord(const APValue &Val, QualType Ty, CharUnits Offset) {\n    for (FieldDecl *FD : RD->fields()) {\n      if (FD->isBitField()) {\n        Info.FFDiag(BCE->getBeginLoc(), diag::note_constexpr_bit_cast_unsupported_bitfield);"},{q,7211,"/// Write an BitCastBuffer into an APValue.\nclass BufferToAPValueConverter {\n  std::optional<APValue> visit(const RecordType *RTy, CharUnits Offset) {\n    for (FieldDecl *FD : RD->fields()) {\n      // FIXME: We don\'t currently support bit-fields. A lot of the logic for\n      // this is in CodeGen, so we need to factor it around.\n      if (FD->isBitField()) {\n        Info.FFDiag(BCE->getBeginLoc(), diag::note_constexpr_bit_cast_unsupported_bitfield);"}},
[o]={
["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:226:15: note: constexpr bit_cast involving bit-field is not yet supported"}
}
},
},
["note_constexpr_bit_cast_unsupported_type"]={
["note_constexpr_bit_cast_unsupported_type"]={
[f]="constexpr bit_cast involving type A is not yet supported",
[b]="constexpr bit_cast involving type A is not yet supported",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="constexpr bit_cast involving type %0 is not yet supported",
[h]="constexpr bit_cast involving type %0 is not yet supported",
[g]=b,
[j]=i,
[e]="constexpr bit_cast involving type (.*?) is not yet supported",
[k]="constexpr bit_cast involving type (.*?) is not yet supported",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={gc,1562092093,hc},
[m]={Kc,1562092093,Lc},
[n]={{p,6971,"/// Traverse an APValue to produce an BitCastBuffer, emulating how the current\n/// target would represent the value at runtime.\nclass APValueToBufferConverter {\n  // Write out Val with type Ty into Buffer starting at Offset.\n  bool visit(const APValue &Val, QualType Ty, CharUnits Offset) {\n    case APValue::AddrLabelDiff: {\n      Info.FFDiag(BCE->getBeginLoc(), diag::note_constexpr_bit_cast_unsupported_type) << Ty;"},{p,7095,"/// Write an BitCastBuffer into an APValue.\nclass BufferToAPValueConverter {\n  // Emit an unsupported bit_cast type error. Sema refuses to build a bit_cast\n  // with an invalid type, so anything left is a deficiency on our part (FIXME).\n  // Ideally this will be unreachable.\n  std::nullopt_t unsupportedType(QualType Ty) {\n    Info.FFDiag(BCE->getBeginLoc(), diag::note_constexpr_bit_cast_unsupported_type) << Ty;"}}
[n]={{q,6971,"/// Traverse an APValue to produce an BitCastBuffer, emulating how the current\n/// target would represent the value at runtime.\nclass APValueToBufferConverter {\n  // Write out Val with type Ty into Buffer starting at Offset.\n  bool visit(const APValue &Val, QualType Ty, CharUnits Offset) {\n    case APValue::AddrLabelDiff: {\n      Info.FFDiag(BCE->getBeginLoc(), diag::note_constexpr_bit_cast_unsupported_type) << Ty;"},{q,7095,"/// Write an BitCastBuffer into an APValue.\nclass BufferToAPValueConverter {\n  // Emit an unsupported bit_cast type error. Sema refuses to build a bit_cast\n  // with an invalid type, so anything left is a deficiency on our part (FIXME).\n  // Ideally this will be unreachable.\n  std::nullopt_t unsupportedType(QualType Ty) {\n    Info.FFDiag(BCE->getBeginLoc(), diag::note_constexpr_bit_cast_unsupported_type) << Ty;"}}
},
},
["note_constexpr_body_previous_return"]={
["note_constexpr_body_previous_return"]={
[f]="previous return statement is here",
[b]="previous return statement is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="previous return statement is here",
[h]="previous return statement is here",
[g]=b,
[j]=i,
[e]="previous return statement is here",
[k]="previous return statement is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={fb,1317436288,mb},
[m]={Ab,1317436288,ub},
[n]={{q,2403,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  } else {\n    if (ReturnStmts.empty()) {\n    } else if (ReturnStmts.size() > 1) {\n      case Sema::CheckConstexprKind::Diagnose:\n        for (unsigned I = 0; I < ReturnStmts.size() - 1; ++I)\n          SemaRef.Diag(ReturnStmts[I], diag::note_constexpr_body_previous_return);"}}
[n]={{r,2403,"/// Check the body for the given constexpr function declaration only contains\n/// the permitted types of statement. C++11 [dcl.constexpr]p3,p4.\n///\n/// \\return true if the body is OK, false if we have found or diagnosed a\n/// problem.\nstatic bool CheckConstexprFunctionBody(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind) {\n  if (const CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(Dcl)) {\n  } else {\n    if (ReturnStmts.empty()) {\n    } else if (ReturnStmts.size() > 1) {\n      case Sema::CheckConstexprKind::Diagnose:\n        for (unsigned I = 0; I < ReturnStmts.size() - 1; ++I)\n          SemaRef.Diag(ReturnStmts[I], diag::note_constexpr_body_previous_return);"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp:128:3: note: previous return statement is here","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp:217:3: note: previous return statement is here"}
}
},
},
["note_constexpr_call_here"]={
["note_constexpr_call_here"]={
[f]="in call to \'A\'",
[b]="in call to \'A\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in call to \'%0\'",
[h]="in call to \'%0\'",
[g]=b,
[j]=i,
[e]="in call to \'(.*?)\'",
[k]="in call to \'(.*?)\'",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"f6f003af6a91",1324062367,"C++11 constexpr: Add note stacks containing backtraces if constant evaluation"},
[m]={"f6f003af6a91",1324062367,"C++11 constexpr: Add note stacks containing backtraces if constant evaluation"},
[n]={{"clang/lib/AST/Interp/State.cpp",158,"void State::addCallStack(unsigned Limit) {\n  for (const Frame *F = Top; F != Bottom; F = F->getCaller(), ++CallIdx) {\n    addDiag(CallLocation, diag::note_constexpr_call_here) << Out.str();"}}
[n]={{"clang/lib/AST/Interp/State.cpp",158,"void State::addCallStack(unsigned Limit) {\n  for (const Frame *F = Top; F != Bottom; F = F->getCaller(), ++CallIdx) {\n    addDiag(CallLocation, diag::note_constexpr_call_here) << Out.str();"}},
[o]={
["clang/test/SemaCXX/crash-lambda-weak-attr.cpp"]={"clang/test/SemaCXX/crash-lambda-weak-attr.cpp:6:15: note: in call to \'[]() {"}
}
},
},
["note_constexpr_call_limit_exceeded"]={
["note_constexpr_call_limit_exceeded"]={
[f]="constexpr evaluation hit maximum call limit",
[b]="constexpr evaluation hit maximum call limit",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="constexpr evaluation hit maximum call limit",
[h]="constexpr evaluation hit maximum call limit",
[g]=b,
[j]=i,
[e]="constexpr evaluation hit maximum call limit",
[k]="constexpr evaluation hit maximum call limit",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"b228a86fcfd1",1329272293,"Implement DR1454. This allows all intermediate results in constant expressions"},
[m]={"b228a86fcfd1",1329272293,"Implement DR1454. This allows all intermediate results in constant expressions"},
[n]={{p,1013,"/// EvalInfo - This is a private struct used by the evaluator to capture\n/// information about a subexpression as it is folded.  It retains information\n/// about the AST context, but also maintains information about the folded\n/// expression.\n///\n/// If an expression could be evaluated, it is still possible it is not a C\n/// \"integer constant expression\" or constant expression.  If not, this struct\n/// captures information about how and why not.\n///\n/// One bit of information passed *into* the request for constant folding\n/// indicates whether the subexpression is \"evaluated\" or not according to C\n/// rules.  For example, the RHS of (0 && foo()) is not evaluated.  We can\n/// evaluate the expression regardless of what the RHS is, but C only allows\n/// certain things in certain situations.\nclass EvalInfo : public interp::State {\n  bool CheckCallLimit(SourceLocation Loc) {\n    if (NextCallIndex == 0) {\n      FFDiag(Loc, diag::note_constexpr_call_limit_exceeded);"}}
[n]={{q,1013,"/// EvalInfo - This is a private struct used by the evaluator to capture\n/// information about a subexpression as it is folded.  It retains information\n/// about the AST context, but also maintains information about the folded\n/// expression.\n///\n/// If an expression could be evaluated, it is still possible it is not a C\n/// \"integer constant expression\" or constant expression.  If not, this struct\n/// captures information about how and why not.\n///\n/// One bit of information passed *into* the request for constant folding\n/// indicates whether the subexpression is \"evaluated\" or not according to C\n/// rules.  For example, the RHS of (0 && foo()) is not evaluated.  We can\n/// evaluate the expression regardless of what the RHS is, but C only allows\n/// certain things in certain situations.\nclass EvalInfo : public interp::State {\n  bool CheckCallLimit(SourceLocation Loc) {\n    if (NextCallIndex == 0) {\n      FFDiag(Loc, diag::note_constexpr_call_limit_exceeded);"}}
},
},
["note_constexpr_calls_suppressed"]={
["note_constexpr_calls_suppressed"]={
[f]="(skipping A callB in backtrace; use -fconstexpr-backtrace-limit=0 to see all)",
[b]="(skipping A callB in backtrace; use -fconstexpr-backtrace-limit=0 to see all)",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="(skipping %0 call%s0 in backtrace; use -fconstexpr-backtrace-limit=0 to see all)",
[h]="(skipping %0 call%s0 in backtrace; use -fconstexpr-backtrace-limit=0 to see all)",
[g]=b,
[j]=i,
[e]="\\(skipping (.*?) call(.*?) in backtrace; use \\-fconstexpr\\-backtrace\\-limit\\=0 to see all\\)",
[k]="\\(skipping (.*?) call(.*?) in backtrace; use \\-fconstexpr\\-backtrace\\-limit\\=0 to see all\\)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"f6f003af6a91",1324062367,"C++11 constexpr: Add note stacks containing backtraces if constant evaluation"},
[m]={"f6f003af6a91",1324062367,"C++11 constexpr: Add note stacks containing backtraces if constant evaluation"},
[n]={{"clang/lib/AST/Interp/State.cpp",139,"void State::addCallStack(unsigned Limit) {\n  for (const Frame *F = Top; F != Bottom; F = F->getCaller(), ++CallIdx) {\n    // Skip this call?\n    if (CallIdx >= SkipStart && CallIdx < SkipEnd) {\n      if (CallIdx == SkipStart) {\n        addDiag(CallLocation, diag::note_constexpr_calls_suppressed) << unsigned(ActiveCalls - Limit);"}}
[n]={{"clang/lib/AST/Interp/State.cpp",139,"void State::addCallStack(unsigned Limit) {\n  for (const Frame *F = Top; F != Bottom; F = F->getCaller(), ++CallIdx) {\n    // Skip this call?\n    if (CallIdx >= SkipStart && CallIdx < SkipEnd) {\n      if (CallIdx == SkipStart) {\n        addDiag(CallLocation, diag::note_constexpr_calls_suppressed) << unsigned(ActiveCalls - Limit);"}},
[o]={
["clang/test/AST/Interp/depth-limit.cpp"]={"clang/test/AST/Interp/depth-limit.cpp:9:10: note: (skipping 90 calls in backtrace; use -fconstexpr-backtrace-limit=0 to see all)"}
}
},
},
["note_constexpr_compare_virtual_mem_ptr"]={
["note_constexpr_compare_virtual_mem_ptr"]={
[f]="comparison of pointer to virtual member function A has unspecified value",
[b]="comparison of pointer to virtual member function A has unspecified value",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="comparison of pointer to virtual member function %0 has unspecified value",
[h]="comparison of pointer to virtual member function %0 has unspecified value",
[g]=b,
[j]=i,
[e]="comparison of pointer to virtual member function (.*?) has unspecified value",
[k]="comparison of pointer to virtual member function (.*?) has unspecified value",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"7bb0067c06ef",1328060564,"constexpr: add support for comparisons of pointer-to-members."},
[m]={"7bb0067c06ef",1328060564,"constexpr: add support for comparisons of pointer-to-members."},
[n]={{p,13246,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isMemberPointerType()) {\n    //  Otherwise if either is a pointer to a virtual member function, the\n    //  result is unspecified.\n    if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(LHSValue.getDecl()))\n      if (MD->isVirtual())\n        Info.CCEDiag(E, diag::note_constexpr_compare_virtual_mem_ptr) << MD;"},{p,13249,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isMemberPointerType()) {\n    if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(RHSValue.getDecl()))\n      if (MD->isVirtual())\n        Info.CCEDiag(E, diag::note_constexpr_compare_virtual_mem_ptr) << MD;"}}
[n]={{q,13246,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isMemberPointerType()) {\n    //  Otherwise if either is a pointer to a virtual member function, the\n    //  result is unspecified.\n    if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(LHSValue.getDecl()))\n      if (MD->isVirtual())\n        Info.CCEDiag(E, diag::note_constexpr_compare_virtual_mem_ptr) << MD;"},{q,13249,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isMemberPointerType()) {\n    if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(RHSValue.getDecl()))\n      if (MD->isVirtual())\n        Info.CCEDiag(E, diag::note_constexpr_compare_virtual_mem_ptr) << MD;"}},
[o]={
[Ob]={"clang/test/SemaCXX/constant-expression-cxx11.cpp:1113:20: note: comparison of pointer to virtual member function \'g\' has unspecified value","clang/test/SemaCXX/constant-expression-cxx11.cpp:1114:20: note: comparison of pointer to virtual member function \'g\' has unspecified value"}
}
},
},
["note_constexpr_conditional_never_const"]={
["note_constexpr_conditional_never_const"]={
[f]="both arms of conditional operator are unable to produce a constant expression",
[b]="both arms of conditional operator are unable to produce a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="both arms of conditional operator are unable to produce a constant expression",
[h]="both arms of conditional operator are unable to produce a constant expression",
[g]=b,
[j]=i,
[e]="both arms of conditional operator are unable to produce a constant expression",
[k]="both arms of conditional operator are unable to produce a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"17100bad0ac1",1329360394,"constexpr tidyups:"},
[m]={"17100bad0ac1",1329360394,"constexpr tidyups:"},
[n]={{p,7429,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  // Check whether a conditional operator with a non-constant condition is a\n  // potential constant expression. If neither arm is a potential constant\n  // expression, then the conditional operator is not either.\n  template <typename ConditionalOperator> void CheckPotentialConstantConditional(const ConditionalOperator *E) {\n    Error(E, diag::note_constexpr_conditional_never_const);"}}
[n]={{q,7429,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  // Check whether a conditional operator with a non-constant condition is a\n  // potential constant expression. If neither arm is a potential constant\n  // expression, then the conditional operator is not either.\n  template <typename ConditionalOperator> void CheckPotentialConstantConditional(const ConditionalOperator *E) {\n    Error(E, diag::note_constexpr_conditional_never_const);"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p5.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p5.cpp:80:52: note: both arms of conditional operator are unable to produce a constant expression"}
}
},
},
["note_constexpr_construct_complex_elem"]={
["note_constexpr_construct_complex_elem"]={
[f]="construction of individual component of complex number is not yet supported in constant expressions",
[b]="construction of individual component of complex number is not yet supported in constant expressions",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="construction of individual component of complex number is not yet supported in constant expressions",
[h]="construction of individual component of complex number is not yet supported in constant expressions",
[g]=b,
[j]=i,
[e]="construction of individual component of complex number is not yet supported in constant expressions",
[k]="construction of individual component of complex number is not yet supported in constant expressions",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"b542602c5f35",1570063175,"For P0784R7: support placement new-expressions in constant evaluation."},
[m]={"b542602c5f35",1570063175,"For P0784R7: support placement new-expressions in constant evaluation."},
[n]={{p,9717,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (IsPlacement) {\n    struct FindObjectHandler {\n      bool found(APSInt &Value, QualType SubobjType) {\n        Info.FFDiag(E, diag::note_constexpr_construct_complex_elem);"},{p,9721,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (IsPlacement) {\n    struct FindObjectHandler {\n      bool found(APFloat &Value, QualType SubobjType) {\n        Info.FFDiag(E, diag::note_constexpr_construct_complex_elem);"}}
[n]={{q,9717,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (IsPlacement) {\n    struct FindObjectHandler {\n      bool found(APSInt &Value, QualType SubobjType) {\n        Info.FFDiag(E, diag::note_constexpr_construct_complex_elem);"},{q,9721,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (IsPlacement) {\n    struct FindObjectHandler {\n      bool found(APFloat &Value, QualType SubobjType) {\n        Info.FFDiag(E, diag::note_constexpr_construct_complex_elem);"}}
},
},
["note_constexpr_ctor_missing_init"]={
["note_constexpr_ctor_missing_init"]={
[f]="member not initialized by constructor",
[b]="member not initialized by constructor",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="member not initialized by constructor",
[h]="member not initialized by constructor",
[g]=b,
[j]=i,
[e]="member not initialized by constructor",
[k]="member not initialized by constructor",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={fb,1317436288,mb},
[m]={Ab,1317436288,ub},
[n]={{q,2049,"/// Check that the given field is initialized within a constexpr constructor.\n///\n/// \\param Dcl The constexpr constructor being checked.\n/// \\param Field The field being checked. This may be a member of an anonymous\n///        struct or union nested within the class being checked.\n/// \\param Inits All declarations, including anonymous struct/union members and\n///        indirect members, for which any initialization was provided.\n/// \\param Diagnosed Whether we\'ve emitted the error message yet. Used to attach\n///        multiple notes for different members to the same error.\n/// \\param Kind Whether we\'re diagnosing a constructor as written or determining\n///        whether the formal requirements are satisfied.\n/// \\return \\c false if we\'re checking for validity and the constructor does\n///        not satisfy the requirements on a constexpr constructor.\nstatic bool CheckConstexprCtorInitializer(Sema &SemaRef, const FunctionDecl *Dcl, FieldDecl *Field, llvm::SmallSet<Decl *, 16> &Inits, bool &Diagnosed, Sema::CheckConstexprKind Kind) {\n  if (!Inits.count(Field)) {\n    if (Kind == Sema::CheckConstexprKind::Diagnose) {\n      SemaRef.Diag(Field->getLocation(), diag::note_constexpr_ctor_missing_init);"}}
[n]={{r,2049,"/// Check that the given field is initialized within a constexpr constructor.\n///\n/// \\param Dcl The constexpr constructor being checked.\n/// \\param Field The field being checked. This may be a member of an anonymous\n///        struct or union nested within the class being checked.\n/// \\param Inits All declarations, including anonymous struct/union members and\n///        indirect members, for which any initialization was provided.\n/// \\param Diagnosed Whether we\'ve emitted the error message yet. Used to attach\n///        multiple notes for different members to the same error.\n/// \\param Kind Whether we\'re diagnosing a constructor as written or determining\n///        whether the formal requirements are satisfied.\n/// \\return \\c false if we\'re checking for validity and the constructor does\n///        not satisfy the requirements on a constexpr constructor.\nstatic bool CheckConstexprCtorInitializer(Sema &SemaRef, const FunctionDecl *Dcl, FieldDecl *Field, llvm::SmallSet<Decl *, 16> &Inits, bool &Diagnosed, Sema::CheckConstexprKind Kind) {\n  if (!Inits.count(Field)) {\n    if (Kind == Sema::CheckConstexprKind::Diagnose) {\n      SemaRef.Diag(Field->getLocation(), diag::note_constexpr_ctor_missing_init);"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:139:7: note: member not initialized by constructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:152:12: note: member not initialized by constructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:163:14: note: member not initialized by constructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:165:5: note: member not initialized by constructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:162:11: note: member not initialized by constructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:165:5: note: member not initialized by constructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:148:3: note: member not initialized by constructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:147:7: note: member not initialized by constructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:148:3: note: member not initialized by constructor","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p4.cpp:159:3: note: member not initialized by constructor"}
}
},
},
["note_constexpr_deallocate_null"]={
["note_constexpr_deallocate_null"]={
[f]="\'std::allocator<...>::deallocate\' used to delete a null pointer",
[b]="\'std::allocator<...>::deallocate\' used to delete a null pointer",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="\'std::allocator<...>::deallocate\' used to delete a null pointer",
[h]="\'std::allocator<...>::deallocate\' used to delete a null pointer",
[g]=b,
[j]=i,
[e]="\'std\\:\\:allocator\\<\\.\\.\\.\\>\\:\\:deallocate\' used to delete a null pointer",
[k]="\'std\\:\\:allocator\\<\\.\\.\\.\\>\\:\\:deallocate\' used to delete a null pointer",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"a892b0015ed6",1615331091,"PR49465: Disallow constant evaluation of a call to operator delete(nullptr)."},
[m]={"a892b0015ed6",1615331091,"PR49465: Disallow constant evaluation of a call to operator delete(nullptr)."},
[n]={{p,6858,"// Perform a call to \'operator delete\' or \'__builtin_operator_delete\'.\nbool HandleOperatorDeleteCall(EvalInfo &Info, const CallExpr *E) {\n  // Deleting a null pointer would have no effect, but it\'s not permitted by\n  // std::allocator<T>::deallocate\'s contract.\n  if (Pointer.isNullPointer()) {\n    Info.CCEDiag(E->getExprLoc(), diag::note_constexpr_deallocate_null);"}}
[n]={{q,6858,"// Perform a call to \'operator delete\' or \'__builtin_operator_delete\'.\nbool HandleOperatorDeleteCall(EvalInfo &Info, const CallExpr *E) {\n  // Deleting a null pointer would have no effect, but it\'s not permitted by\n  // std::allocator<T>::deallocate\'s contract.\n  if (Pointer.isNullPointer()) {\n    Info.CCEDiag(E->getExprLoc(), diag::note_constexpr_deallocate_null);"}},
[o]={
[zb]={"clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:20:7: note: \'std::allocator<...>::deallocate\' used to delete a null pointer"}
}
},
},
["note_constexpr_delete_base_nonvirt_dtor"]={
["note_constexpr_delete_base_nonvirt_dtor"]={
[f]="delete of object with dynamic type A through pointer to base class type B with non-virtual destructor",
[b]="delete of object with dynamic type A through pointer to base class type B with non-virtual destructor",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="delete of object with dynamic type %1 through pointer to base class type %0 with non-virtual destructor",
[h]="delete of object with dynamic type %1 through pointer to base class type %0 with non-virtual destructor",
[g]=b,
[j]=i,
[e]="delete of object with dynamic type (.*?) through pointer to base class type (.*?) with non\\-virtual destructor",
[k]="delete of object with dynamic type (.*?) through pointer to base class type (.*?) with non\\-virtual destructor",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,15029,"bool VoidExprEvaluator::VisitCXXDeleteExpr(const CXXDeleteExpr *E) {\n  // For the non-array case, the designator must be empty if the static type\n  // does not have a virtual destructor.\n  if (!E->isArrayForm() && Pointer.Designator.Entries.size() != 0 && !hasVirtualDestructor(Arg->getType()->getPointeeType())) {\n    Info.FFDiag(E, diag::note_constexpr_delete_base_nonvirt_dtor) << Arg->getType()->getPointeeType() << AllocType;"}}
[n]={{q,15029,"bool VoidExprEvaluator::VisitCXXDeleteExpr(const CXXDeleteExpr *E) {\n  // For the non-array case, the designator must be empty if the static type\n  // does not have a virtual destructor.\n  if (!E->isArrayForm() && Pointer.Designator.Entries.size() != 0 && !hasVirtualDestructor(Arg->getType()->getPointeeType())) {\n    Info.FFDiag(E, diag::note_constexpr_delete_base_nonvirt_dtor) << Arg->getType()->getPointeeType() << AllocType;"}},
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:774:5: note: delete of object with dynamic type \'T\' through pointer to base class type \'S\' with non-virtual destructor"}
}
},
},
["note_constexpr_delete_not_heap_alloc"]={
["note_constexpr_delete_not_heap_alloc"]={
[f]="delete of pointer \'A\' that does not point to a heap-allocated object",
[b]="delete of pointer \'A\' that does not point to a heap-allocated object",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="delete of pointer \'%0\' that does not point to a heap-allocated object",
[h]="delete of pointer \'%0\' that does not point to a heap-allocated object",
[g]=b,
[j]=i,
[e]="delete of pointer \'(.*?)\' that does not point to a heap\\-allocated object",
[k]="delete of pointer \'(.*?)\' that does not point to a heap\\-allocated object",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,6796,"/// Check that the given object is a suitable pointer to a heap allocation that\n/// still exists and is of the right kind for the purpose of a deletion.\n///\n/// On success, returns the heap allocation to deallocate. On failure, produces\n/// a diagnostic and returns std::nullopt.\nstatic std::optional<DynAlloc *> CheckDeleteKind(EvalInfo &Info, const Expr *E, const LValue &Pointer, DynAlloc::Kind DeallocKind) {\n  if (!DA) {\n    Info.FFDiag(E, diag::note_constexpr_delete_not_heap_alloc) << PointerAsString();"}}
[n]={{q,6796,"/// Check that the given object is a suitable pointer to a heap allocation that\n/// still exists and is of the right kind for the purpose of a deletion.\n///\n/// On success, returns the heap allocation to deallocate. On failure, produces\n/// a diagnostic and returns std::nullopt.\nstatic std::optional<DynAlloc *> CheckDeleteKind(EvalInfo &Info, const Expr *E, const LValue &Pointer, DynAlloc::Kind DeallocKind) {\n  if (!DA) {\n    Info.FFDiag(E, diag::note_constexpr_delete_not_heap_alloc) << PointerAsString();"}},
[o]={
[zb]={"clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:20:7: note: delete of pointer \'&no_deallocate_nonalloc\' that does not point to a heap-allocated object"}
}
},
},
["note_constexpr_delete_subobject"]={
["note_constexpr_delete_subobject"]={
[f]="delete of pointer... \'A\' ...",
[b]="delete of pointer... \'A\' ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="delete of pointer%select{ to subobject|}1 \'%0\' %select{|that does not point to complete object}1",
[h]="delete of pointer%select{ to subobject|}1 \'%0\' %select{|that does not point to complete object}1",
[g]=b,
[j]=i,
[e]="delete of pointer(?: to subobject|) \'(.*?)\' (?:|that does not point to complete object)",
[k]="delete of pointer(?: to subobject|) \'(.*?)\' (?:|that does not point to complete object)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,6826,"/// Check that the given object is a suitable pointer to a heap allocation that\n/// still exists and is of the right kind for the purpose of a deletion.\n///\n/// On success, returns the heap allocation to deallocate. On failure, produces\n/// a diagnostic and returns std::nullopt.\nstatic std::optional<DynAlloc *> CheckDeleteKind(EvalInfo &Info, const Expr *E, const LValue &Pointer, DynAlloc::Kind DeallocKind) {\n  if (Subobject) {\n    Info.FFDiag(E, diag::note_constexpr_delete_subobject) << PointerAsString() << Pointer.Designator.isOnePastTheEnd();"}}
[n]={{q,6826,"/// Check that the given object is a suitable pointer to a heap allocation that\n/// still exists and is of the right kind for the purpose of a deletion.\n///\n/// On success, returns the heap allocation to deallocate. On failure, produces\n/// a diagnostic and returns std::nullopt.\nstatic std::optional<DynAlloc *> CheckDeleteKind(EvalInfo &Info, const Expr *E, const LValue &Pointer, DynAlloc::Kind DeallocKind) {\n  if (Subobject) {\n    Info.FFDiag(E, diag::note_constexpr_delete_subobject) << PointerAsString() << Pointer.Designator.isOnePastTheEnd();"}},
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:824:7: note: delete of pointer to subobject \'&{*new T[3]#0}[0]\' ","clang/test/SemaCXX/constant-expression-cxx2a.cpp:1034:18: note: delete of pointer to subobject \'&{*new A#0}.n\' ","clang/test/SemaCXX/constant-expression-cxx2a.cpp:1035:18: note: delete of pointer \'&{*new int#0} + 1\' that does not point to complete object","clang/test/SemaCXX/constant-expression-cxx2a.cpp:1036:18: note: delete of pointer to subobject \'&{*new int[3]#0}[1]\' "}
}
},
},
["note_constexpr_depth_limit_exceeded"]={
["note_constexpr_depth_limit_exceeded"]={
[f]="constexpr evaluation exceeded maximum depth of A calls",
[b]="constexpr evaluation exceeded maximum depth of A calls",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="constexpr evaluation exceeded maximum depth of %0 calls",
[h]="constexpr evaluation exceeded maximum depth of %0 calls",
[g]=b,
[j]=i,
[e]="constexpr evaluation exceeded maximum depth of (.*?) calls",
[k]="constexpr evaluation exceeded maximum depth of (.*?) calls",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={Bb,1323758398,Eb},
[m]={ac,1323758398,Qb},
[n]={{p,1018,"/// EvalInfo - This is a private struct used by the evaluator to capture\n/// information about a subexpression as it is folded.  It retains information\n/// about the AST context, but also maintains information about the folded\n/// expression.\n///\n/// If an expression could be evaluated, it is still possible it is not a C\n/// \"integer constant expression\" or constant expression.  If not, this struct\n/// captures information about how and why not.\n///\n/// One bit of information passed *into* the request for constant folding\n/// indicates whether the subexpression is \"evaluated\" or not according to C\n/// rules.  For example, the RHS of (0 && foo()) is not evaluated.  We can\n/// evaluate the expression regardless of what the RHS is, but C only allows\n/// certain things in certain situations.\nclass EvalInfo : public interp::State {\n  bool CheckCallLimit(SourceLocation Loc) {\n    FFDiag(Loc, diag::note_constexpr_depth_limit_exceeded) << getLangOpts().ConstexprCallDepth;"},{w,348,"bool CheckCallDepth(InterpState &S, CodePtr OpPC) {\n  if ((S.Current->getDepth() + 1) > S.getLangOpts().ConstexprCallDepth) {\n    S.FFDiag(S.Current->getSource(OpPC), diag::note_constexpr_depth_limit_exceeded) << S.getLangOpts().ConstexprCallDepth;"}}
[n]={{q,1018,"/// EvalInfo - This is a private struct used by the evaluator to capture\n/// information about a subexpression as it is folded.  It retains information\n/// about the AST context, but also maintains information about the folded\n/// expression.\n///\n/// If an expression could be evaluated, it is still possible it is not a C\n/// \"integer constant expression\" or constant expression.  If not, this struct\n/// captures information about how and why not.\n///\n/// One bit of information passed *into* the request for constant folding\n/// indicates whether the subexpression is \"evaluated\" or not according to C\n/// rules.  For example, the RHS of (0 && foo()) is not evaluated.  We can\n/// evaluate the expression regardless of what the RHS is, but C only allows\n/// certain things in certain situations.\nclass EvalInfo : public interp::State {\n  bool CheckCallLimit(SourceLocation Loc) {\n    FFDiag(Loc, diag::note_constexpr_depth_limit_exceeded) << getLangOpts().ConstexprCallDepth;"},{A,348,"bool CheckCallDepth(InterpState &S, CodePtr OpPC) {\n  if ((S.Current->getDepth() + 1) > S.getLangOpts().ConstexprCallDepth) {\n    S.FFDiag(S.Current->getSource(OpPC), diag::note_constexpr_depth_limit_exceeded) << S.getLangOpts().ConstexprCallDepth;"}},
[o]={
["clang/test/AST/Interp/depth-limit.cpp"]={"clang/test/AST/Interp/depth-limit.cpp:9:10: note: constexpr evaluation exceeded maximum depth of 100 calls"}
}
},
},
["note_constexpr_destroy_complex_elem"]={
["note_constexpr_destroy_complex_elem"]={
[f]="destruction of individual component of complex number is not yet supported in constant expressions",
[b]="destruction of individual component of complex number is not yet supported in constant expressions",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="destruction of individual component of complex number is not yet supported in constant expressions",
[h]="destruction of individual component of complex number is not yet supported in constant expressions",
[g]=b,
[j]=i,
[e]="destruction of individual component of complex number is not yet supported in constant expressions",
[k]="destruction of individual component of complex number is not yet supported in constant expressions",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"61422f96653f",1569615876,"For P0784R7: add support for explicit destructor calls and"},
[m]={"61422f96653f",1569615876,"For P0784R7: add support for explicit destructor calls and"},
[n]={{p,6671,"struct DestroyObjectHandler {\n  bool found(APSInt &Value, QualType SubobjType) {\n    Info.FFDiag(E, diag::note_constexpr_destroy_complex_elem);"},{p,6675,"struct DestroyObjectHandler {\n  bool found(APFloat &Value, QualType SubobjType) {\n    Info.FFDiag(E, diag::note_constexpr_destroy_complex_elem);"}}
[n]={{q,6671,"struct DestroyObjectHandler {\n  bool found(APSInt &Value, QualType SubobjType) {\n    Info.FFDiag(E, diag::note_constexpr_destroy_complex_elem);"},{q,6675,"struct DestroyObjectHandler {\n  bool found(APFloat &Value, QualType SubobjType) {\n    Info.FFDiag(E, diag::note_constexpr_destroy_complex_elem);"}}
},
},
["note_constexpr_destroy_out_of_lifetime"]={
["note_constexpr_destroy_out_of_lifetime"]={
[f]="destroying object \'A\' whose lifetime has already ended",
[b]="destroying object \'A\' whose lifetime has already ended",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="destroying object \'%0\' whose lifetime has already ended",
[h]="destroying object \'%0\' whose lifetime has already ended",
[g]=b,
[j]=i,
[e]="destroying object \'(.*?)\' whose lifetime has already ended",
[k]="destroying object \'(.*?)\' whose lifetime has already ended",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,6500,"static bool HandleDestructionImpl(EvalInfo &Info, SourceLocation CallLoc, const LValue &This, APValue &Value, QualType T) {\n  // Objects can only be destroyed while they\'re within their lifetimes.\n  // FIXME: We have no representation for whether an object of type nullptr_t\n  // is in its lifetime; it usually doesn\'t matter. Perhaps we should model it\n  // as indeterminate instead?\n  if (Value.isAbsent() && !T->isNullPtrType()) {\n    Info.FFDiag(CallLoc, diag::note_constexpr_destroy_out_of_lifetime) << Printable.getAsString(Info.Ctx, Info.Ctx.getLValueReferenceType(T));"}}
[n]={{q,6500,"static bool HandleDestructionImpl(EvalInfo &Info, SourceLocation CallLoc, const LValue &This, APValue &Value, QualType T) {\n  // Objects can only be destroyed while they\'re within their lifetimes.\n  // FIXME: We have no representation for whether an object of type nullptr_t\n  // is in its lifetime; it usually doesn\'t matter. Perhaps we should model it\n  // as indeterminate instead?\n  if (Value.isAbsent() && !T->isNullPtrType()) {\n    Info.FFDiag(CallLoc, diag::note_constexpr_destroy_out_of_lifetime) << Printable.getAsString(Info.Ctx, Info.Ctx.getLValueReferenceType(T));"}},
[o]={
["clang/test/AST/Interp/cxx20.cpp"]={"clang/test/AST/Interp/cxx20.cpp:442:11: note: destroying object \'I\' whose lifetime has already ended"}
}
},
},
["note_constexpr_double_delete"]={
["note_constexpr_double_delete"]={
[f]="delete of pointer that has already been deleted",
[b]="delete of pointer that has already been deleted",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="delete of pointer that has already been deleted",
[h]="delete of pointer that has already been deleted",
[g]=b,
[j]=i,
[e]="delete of pointer that has already been deleted",
[k]="delete of pointer that has already been deleted",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,6805,"/// Check that the given object is a suitable pointer to a heap allocation that\n/// still exists and is of the right kind for the purpose of a deletion.\n///\n/// On success, returns the heap allocation to deallocate. On failure, produces\n/// a diagnostic and returns std::nullopt.\nstatic std::optional<DynAlloc *> CheckDeleteKind(EvalInfo &Info, const Expr *E, const LValue &Pointer, DynAlloc::Kind DeallocKind) {\n  if (!Alloc) {\n    Info.FFDiag(E, diag::note_constexpr_double_delete);"},{p,15055,"bool VoidExprEvaluator::VisitCXXDeleteExpr(const CXXDeleteExpr *E) {\n  if (!Info.HeapAllocs.erase(Pointer.Base.dyn_cast<DynamicAllocLValue>())) {\n    Info.FFDiag(E, diag::note_constexpr_double_delete);"}}
[n]={{q,6805,"/// Check that the given object is a suitable pointer to a heap allocation that\n/// still exists and is of the right kind for the purpose of a deletion.\n///\n/// On success, returns the heap allocation to deallocate. On failure, produces\n/// a diagnostic and returns std::nullopt.\nstatic std::optional<DynAlloc *> CheckDeleteKind(EvalInfo &Info, const Expr *E, const LValue &Pointer, DynAlloc::Kind DeallocKind) {\n  if (!Alloc) {\n    Info.FFDiag(E, diag::note_constexpr_double_delete);"},{q,15055,"bool VoidExprEvaluator::VisitCXXDeleteExpr(const CXXDeleteExpr *E) {\n  if (!Info.HeapAllocs.erase(Pointer.Base.dyn_cast<DynamicAllocLValue>())) {\n    Info.FFDiag(E, diag::note_constexpr_double_delete);"}},
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:917:5: note: delete of pointer that has already been deleted"}
}
},
},
["note_constexpr_double_destroy"]={
["note_constexpr_double_destroy"]={
[f]="destruction of object that is already being destroyed",
[b]="destruction of object that is already being destroyed",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="destruction of object that is already being destroyed",
[h]="destruction of object that is already being destroyed",
[g]=b,
[j]=i,
[e]="destruction of object that is already being destroyed",
[k]="destruction of object that is already being destroyed",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,6598,"static bool HandleDestructionImpl(EvalInfo &Info, SourceLocation CallLoc, const LValue &This, APValue &Value, QualType T) {\n  if (!EvalObj.DidInsert) {\n    Info.FFDiag(CallLoc, diag::note_constexpr_double_destroy);"}}
[n]={{q,6598,"static bool HandleDestructionImpl(EvalInfo &Info, SourceLocation CallLoc, const LValue &This, APValue &Value, QualType T) {\n  if (!EvalObj.DidInsert) {\n    Info.FFDiag(CallLoc, diag::note_constexpr_double_destroy);"}},
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:921:24: note: destruction of object that is already being destroyed"}
}
},
},
["note_constexpr_dtor_subobject"]={
["note_constexpr_dtor_subobject"]={
[f]="... declared here",
[b]="... declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{data member %1|base class %2}0 declared here",
[h]="%select{data member %1|base class %2}0 declared here",
[g]=b,
[j]=i,
[e]="(?:data member (.*?)|base class (.*?)) declared here",
[k]="(?:data member (.*?)|base class (.*?)) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Ab,1567434909,Cb},
[m]={Zb,1567434909,Yb},
[n]={{q,1700,"/// Determine whether a destructor cannot be constexpr due to\nstatic bool CheckConstexprDestructorSubobjects(Sema &SemaRef, const CXXDestructorDecl *DD, Sema::CheckConstexprKind Kind) {\n  auto Check = [&](SourceLocation Loc, QualType T, const FieldDecl *FD) {\n    if (Kind == Sema::CheckConstexprKind::Diagnose) {\n      SemaRef.Diag(Loc, diag::note_constexpr_dtor_subobject) << !FD << (FD ? FD->getDeclName() : DeclarationName()) << T;"}}
[n]={{r,1700,"/// Determine whether a destructor cannot be constexpr due to\nstatic bool CheckConstexprDestructorSubobjects(Sema &SemaRef, const CXXDestructorDecl *DD, Sema::CheckConstexprKind Kind) {\n  auto Check = [&](SourceLocation Loc, QualType T, const FieldDecl *FD) {\n    if (Kind == Sema::CheckConstexprKind::Diagnose) {\n      SemaRef.Diag(Loc, diag::note_constexpr_dtor_subobject) << !FD << (FD ? FD->getDeclName() : DeclarationName()) << T;"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:61:14: note: base class \'A\' declared here","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp:65:7: note: data member \'a\' declared here"}
}
},
},
["note_constexpr_dynamic_alloc"]={
["note_constexpr_dynamic_alloc"]={
[f]="... to ...heap-allocated object is not a constant expression",
[b]="... to ...heap-allocated object is not a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{pointer|reference}0 to %select{|subobject of }1heap-allocated object is not a constant expression",
[h]="%select{pointer|reference}0 to %select{|subobject of }1heap-allocated object is not a constant expression",
[g]=b,
[j]=i,
[e]="(?:pointer|reference) to (?:|subobject of )heap\\-allocated object is not a constant expression",
[k]="(?:pointer|reference) to (?:|subobject of )heap\\-allocated object is not a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,2234,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  if (Base.is<DynamicAllocLValue>()) {\n    Info.FFDiag(Loc, diag::note_constexpr_dynamic_alloc) << IsReferenceType << !Designator.Entries.empty();"}}
[n]={{q,2234,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  if (Base.is<DynamicAllocLValue>()) {\n    Info.FFDiag(Loc, diag::note_constexpr_dynamic_alloc) << IsReferenceType << !Designator.Entries.empty();"}},
[o]={
["clang/test/CXX/basic/basic.def.odr/p2-typeid.cpp"]={"clang/test/CXX/basic/basic.def.odr/p2-typeid.cpp:59:17: note: pointer to heap-allocated object is not a constant expression"}
}
},
},
["note_constexpr_dynamic_alloc_here"]={
["note_constexpr_dynamic_alloc_here"]={
[f]="heap allocation performed here",
[b]="heap allocation performed here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="heap allocation performed here",
[h]="heap allocation performed here",
[g]=b,
[j]=i,
[e]="heap allocation performed here",
[k]="heap allocation performed here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,2130,"static void NoteLValueLocation(EvalInfo &Info, APValue::LValueBase Base) {\n  if (VD)\n  else if (const Expr *E = Base.dyn_cast<const Expr *>())\n  else if (DynamicAllocLValue DA = Base.dyn_cast<DynamicAllocLValue>()) {\n    // FIXME: Produce a note for dangling pointers too.\n    if (std::optional<DynAlloc *> Alloc = Info.lookupDynamicAlloc(DA))\n      Info.Note((*Alloc)->AllocExpr->getExprLoc(), diag::note_constexpr_dynamic_alloc_here);"}}
[n]={{q,2130,"static void NoteLValueLocation(EvalInfo &Info, APValue::LValueBase Base) {\n  if (VD)\n  else if (const Expr *E = Base.dyn_cast<const Expr *>())\n  else if (DynamicAllocLValue DA = Base.dyn_cast<DynamicAllocLValue>()) {\n    // FIXME: Produce a note for dangling pointers too.\n    if (std::optional<DynAlloc *> Alloc = Info.lookupDynamicAlloc(DA))\n      Info.Note((*Alloc)->AllocExpr->getExprLoc(), diag::note_constexpr_dynamic_alloc_here);"}},
[o]={
["clang/test/CXX/basic/basic.def.odr/p2-typeid.cpp"]={"clang/test/CXX/basic/basic.def.odr/p2-typeid.cpp:53:32: note: heap allocation performed here"}
}
},
},
["note_constexpr_dynamic_cast_to_reference_failed"]={
["note_constexpr_dynamic_cast_to_reference_failed"]={
[f]="reference dynamic_cast failed: ...",
[b]="reference dynamic_cast failed: ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="reference dynamic_cast failed: %select{static type %1 of operand is a non-public base class of dynamic type %2|dynamic type %2 of operand does not have a base class of type %3|%3 is an ambiguous base class of dynamic type %2 of operand|%3 is a non-public base class of dynamic type %2 of operand}0",
[h]="reference dynamic_cast failed: %select{static type %1 of operand is a non-public base class of dynamic type %2|dynamic type %2 of operand does not have a base class of type %3|%3 is an ambiguous base class of dynamic type %2 of operand|%3 is a non-public base class of dynamic type %2 of operand}0",
[g]=b,
[j]=i,
[e]="reference dynamic_cast failed\\: (?:static type (.*?) of operand is a non\\-public base class of dynamic type (.*?)|dynamic type (.*?) of operand does not have a base class of type (.*?)|(.*?) is an ambiguous base class of dynamic type (.*?) of operand|(.*?) is a non\\-public base class of dynamic type (.*?) of operand)",
[k]="reference dynamic_cast failed\\: (?:static type (.*?) of operand is a non\\-public base class of dynamic type (.*?)|dynamic type (.*?) of operand does not have a base class of type (.*?)|(.*?) is an ambiguous base class of dynamic type (.*?) of operand|(.*?) is a non\\-public base class of dynamic type (.*?) of operand)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"7bd54ab58665",1557951741,"[c++20] For P1327R1: support dynamic_cast in constant expression"},
[m]={"7bd54ab58665",1557951741,"[c++20] For P1327R1: support dynamic_cast in constant expression"},
[n]={{p,5926,"/// Apply the given dynamic cast operation on the provided lvalue.\n///\n/// This implements the hard case of dynamic_cast, requiring a \"runtime check\"\n/// to find a suitable target subobject.\nstatic bool HandleDynamicCast(EvalInfo &Info, const ExplicitCastExpr *E, LValue &Ptr) {\n  auto RuntimeCheckFailed = [&](CXXBasePaths *Paths) {\n    Info.FFDiag(E, diag::note_constexpr_dynamic_cast_to_reference_failed) << DiagKind << Ptr.Designator.getType(Info.Ctx) << Info.Ctx.getRecordType(DynType->Type) << E->getType().getUnqualifiedType();"}}
[n]={{q,5926,"/// Apply the given dynamic cast operation on the provided lvalue.\n///\n/// This implements the hard case of dynamic_cast, requiring a \"runtime check\"\n/// to find a suitable target subobject.\nstatic bool HandleDynamicCast(EvalInfo &Info, const ExplicitCastExpr *E, LValue &Ptr) {\n  auto RuntimeCheckFailed = [&](CXXBasePaths *Paths) {\n    Info.FFDiag(E, diag::note_constexpr_dynamic_cast_to_reference_failed) << DiagKind << Ptr.Designator.getType(Info.Ctx) << Info.Ctx.getRecordType(DynType->Type) << E->getType().getUnqualifiedType();"}},
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:259:24: note: reference dynamic_cast failed: \'A\' is an ambiguous base class of dynamic type \'DynamicCast::G\' of operand","clang/test/SemaCXX/constant-expression-cxx2a.cpp:267:18: note: reference dynamic_cast failed: \'A\' is an ambiguous base class of dynamic type \'DynamicCast::G\' of operand","clang/test/SemaCXX/constant-expression-cxx2a.cpp:274:24: note: reference dynamic_cast failed: static type \'DynamicCast::E\' of operand is a non-public base class of dynamic type \'DynamicCast::G\'","clang/test/SemaCXX/constant-expression-cxx2a.cpp:278:24: note: reference dynamic_cast failed: \'E\' is a non-public base class of dynamic type \'DynamicCast::G\' of operand","clang/test/SemaCXX/constant-expression-cxx2a.cpp:282:32: note: reference dynamic_cast failed: dynamic type \'DynamicCast::G\' of operand does not have a base class of type \'Unrelated\'","clang/test/SemaCXX/constant-expression-cxx2a.cpp:284:32: note: reference dynamic_cast failed: dynamic type \'DynamicCast::G\' of operand does not have a base class of type \'Unrelated\'"}
}
},
},
["note_constexpr_dynamic_rounding"]={
["note_constexpr_dynamic_rounding"]={
[f]="cannot evaluate this expression if rounding mode is dynamic",
[b]="cannot evaluate this expression if rounding mode is dynamic",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot evaluate this expression if rounding mode is dynamic",
[h]="cannot evaluate this expression if rounding mode is dynamic",
[g]=b,
[j]=i,
[e]="cannot evaluate this expression if rounding mode is dynamic",
[k]="cannot evaluate this expression if rounding mode is dynamic",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"6314f412a83d",1600326607,"[FPEnv] Evaluate constant expressions under non-default rounding modes"},
[m]={"6314f412a83d",1600326607,"[FPEnv] Evaluate constant expressions under non-default rounding modes"},
[n]={{p,2625,"/// Check if the given evaluation result is allowed for constant evaluation.\nstatic bool checkFloatingPointResult(EvalInfo &Info, const Expr *E, APFloat::opStatus St) {\n  if ((St & APFloat::opInexact) && FPO.getRoundingMode() == llvm::RoundingMode::Dynamic) {\n    Info.FFDiag(E, diag::note_constexpr_dynamic_rounding);"},{w,480,"bool CheckFloatResult(InterpState &S, CodePtr OpPC, APFloat::opStatus Status) {\n  if ((Status & APFloat::opInexact) && FPO.getRoundingMode() == llvm::RoundingMode::Dynamic) {\n    S.FFDiag(E, diag::note_constexpr_dynamic_rounding);"}}
[n]={{q,2625,"/// Check if the given evaluation result is allowed for constant evaluation.\nstatic bool checkFloatingPointResult(EvalInfo &Info, const Expr *E, APFloat::opStatus St) {\n  if ((St & APFloat::opInexact) && FPO.getRoundingMode() == llvm::RoundingMode::Dynamic) {\n    Info.FFDiag(E, diag::note_constexpr_dynamic_rounding);"},{A,480,"bool CheckFloatResult(InterpState &S, CodePtr OpPC, APFloat::opStatus Status) {\n  if ((Status & APFloat::opInexact) && FPO.getRoundingMode() == llvm::RoundingMode::Dynamic) {\n    S.FFDiag(E, diag::note_constexpr_dynamic_rounding);"}}
},
},
["note_constexpr_float_arithmetic"]={
["note_constexpr_float_arithmetic"]={
[f]="floating point arithmetic produces ...",
[b]="floating point arithmetic produces ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="floating point arithmetic produces %select{an infinity|a NaN}0",
[h]="floating point arithmetic produces %select{an infinity|a NaN}0",
[g]=b,
[j]=i,
[e]="floating point arithmetic produces (?:an infinity|a NaN)",
[k]="floating point arithmetic produces (?:an infinity|a NaN)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"c8042323e1b2",1328075592,"constexpr: overflow checking for integral and floating-point arithmetic."},
[m]={"c8042323e1b2",1328075592,"constexpr: overflow checking for integral and floating-point arithmetic."},
[n]={{p,2917,"/// Perform the given binary floating-point operation, in-place, on LHS.\nstatic bool handleFloatFloatBinOp(EvalInfo &Info, const BinaryOperator *E, APFloat &LHS, BinaryOperatorKind Opcode, const APFloat &RHS) {\n  // [expr.pre]p4:\n  //  If during the evaluation of an expression, the result is not\n  //  mathematically defined [...], the behavior is undefined.\n  // FIXME: C++ rules require us to not conform to IEEE 754 here.\n  if (LHS.isNaN()) {\n    Info.CCEDiag(E, diag::note_constexpr_float_arithmetic) << LHS.isNaN();"}}
[n]={{q,2917,"/// Perform the given binary floating-point operation, in-place, on LHS.\nstatic bool handleFloatFloatBinOp(EvalInfo &Info, const BinaryOperator *E, APFloat &LHS, BinaryOperatorKind Opcode, const APFloat &RHS) {\n  // [expr.pre]p4:\n  //  If during the evaluation of an expression, the result is not\n  //  mathematically defined [...], the behavior is undefined.\n  // FIXME: C++ rules require us to not conform to IEEE 754 here.\n  if (LHS.isNaN()) {\n    Info.CCEDiag(E, diag::note_constexpr_float_arithmetic) << LHS.isNaN();"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:281:30: note: floating point arithmetic produces a NaN","clang/test/CXX/expr/expr.const/p2-0x.cpp:282:30: note: floating point arithmetic produces a NaN","clang/test/CXX/expr/expr.const/p2-0x.cpp:283:30: note: floating point arithmetic produces a NaN"}
}
},
},
["note_constexpr_float_arithmetic_strict"]={
["note_constexpr_float_arithmetic_strict"]={
[f]="compile time floating point arithmetic suppressed in strict evaluation modes",
[b]="compile time floating point arithmetic suppressed in strict evaluation modes",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="compile time floating point arithmetic suppressed in strict evaluation modes",
[h]="compile time floating point arithmetic suppressed in strict evaluation modes",
[g]=b,
[j]=i,
[e]="compile time floating point arithmetic suppressed in strict evaluation modes",
[k]="compile time floating point arithmetic suppressed in strict evaluation modes",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"2e204e23911b",1601401476,"[clang] Enable support for #pragma STDC FENV_ACCESS"},
[m]={"2e204e23911b",1601401476,"[clang] Enable support for #pragma STDC FENV_ACCESS"},
[n]={{p,2633,"/// Check if the given evaluation result is allowed for constant evaluation.\nstatic bool checkFloatingPointResult(EvalInfo &Info, const Expr *E, APFloat::opStatus St) {\n  if ((St != APFloat::opOK) && (FPO.getRoundingMode() == llvm::RoundingMode::Dynamic || FPO.getExceptionMode() != LangOptions::FPE_Ignore || FPO.getAllowFEnvAccess())) {\n    Info.FFDiag(E, diag::note_constexpr_float_arithmetic_strict);"},{p,13037,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isRealFloatingType() && RHSTy->isRealFloatingType()) {\n    if (!Info.InConstantContext && APFloatCmpResult == APFloat::cmpUnordered && E->getFPFeaturesInEffect(Info.Ctx.getLangOpts()).isFPConstrained()) {\n      Info.FFDiag(E, diag::note_constexpr_float_arithmetic_strict);"},{w,488,"bool CheckFloatResult(InterpState &S, CodePtr OpPC, APFloat::opStatus Status) {\n  if ((Status != APFloat::opOK) && (FPO.getRoundingMode() == llvm::RoundingMode::Dynamic || FPO.getExceptionMode() != LangOptions::FPE_Ignore || FPO.getAllowFEnvAccess())) {\n    S.FFDiag(E, diag::note_constexpr_float_arithmetic_strict);"}}
[n]={{q,2633,"/// Check if the given evaluation result is allowed for constant evaluation.\nstatic bool checkFloatingPointResult(EvalInfo &Info, const Expr *E, APFloat::opStatus St) {\n  if ((St != APFloat::opOK) && (FPO.getRoundingMode() == llvm::RoundingMode::Dynamic || FPO.getExceptionMode() != LangOptions::FPE_Ignore || FPO.getAllowFEnvAccess())) {\n    Info.FFDiag(E, diag::note_constexpr_float_arithmetic_strict);"},{q,13037,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isRealFloatingType() && RHSTy->isRealFloatingType()) {\n    if (!Info.InConstantContext && APFloatCmpResult == APFloat::cmpUnordered && E->getFPFeaturesInEffect(Info.Ctx.getLangOpts()).isFPConstrained()) {\n      Info.FFDiag(E, diag::note_constexpr_float_arithmetic_strict);"},{A,488,"bool CheckFloatResult(InterpState &S, CodePtr OpPC, APFloat::opStatus Status) {\n  if ((Status != APFloat::opOK) && (FPO.getRoundingMode() == llvm::RoundingMode::Dynamic || FPO.getExceptionMode() != LangOptions::FPE_Ignore || FPO.getAllowFEnvAccess())) {\n    S.FFDiag(E, diag::note_constexpr_float_arithmetic_strict);"}}
},
},
["note_constexpr_function_param_value_unknown"]={
["note_constexpr_function_param_value_unknown"]={
[f]="function parameter A with unknown value cannot be used in a constant expression",
[b]="function parameter A with unknown value cannot be used in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="function parameter %0 with unknown value cannot be used in a constant expression",
[h]="function parameter %0 with unknown value cannot be used in a constant expression",
[g]=b,
[j]=i,
[e]="function parameter (.*?) with unknown value cannot be used in a constant expression",
[k]="function parameter (.*?) with unknown value cannot be used in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"00068c452a59",1594250761,"Improve diagnostics for constant evaluation that fails because a"},
[m]={"00068c452a59",1594250761,"Improve diagnostics for constant evaluation that fails because a"},
[n]={{p,3323,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  if (isa<ParmVarDecl>(VD)) {\n    // Assume parameters of a potential constant expression are usable in\n    // constant expressions.\n    if (!Info.checkingPotentialConstantExpression() || !Info.CurrentCall->Callee || !Info.CurrentCall->Callee->Equals(VD->getDeclContext())) {\n      if (Info.getLangOpts().CPlusPlus11) {\n        Info.FFDiag(E, diag::note_constexpr_function_param_value_unknown) << VD;"}}
[n]={{q,3323,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  if (isa<ParmVarDecl>(VD)) {\n    // Assume parameters of a potential constant expression are usable in\n    // constant expressions.\n    if (!Info.checkingPotentialConstantExpression() || !Info.CurrentCall->Callee || !Info.CurrentCall->Callee->Equals(VD->getDeclContext())) {\n      if (Info.getLangOpts().CPlusPlus11) {\n        Info.FFDiag(E, diag::note_constexpr_function_param_value_unknown) << VD;"}},
[o]={
["clang/test/SemaCXX/warn-vla.cpp"]={"clang/test/SemaCXX/warn-vla.cpp:4:9: note: function parameter \'n\' with unknown value cannot be used in a constant expression","clang/test/SemaCXX/warn-vla.cpp:7:25: note: function parameter \'n\' with unknown value cannot be used in a constant expression","clang/test/SemaCXX/warn-vla.cpp:10:25: note: function parameter \'n\' with unknown value cannot be used in a constant expression","clang/test/SemaCXX/warn-vla.cpp:14:9: note: function parameter \'n\' with unknown value cannot be used in a constant expression","clang/test/SemaCXX/warn-vla.cpp:18:25: note: function parameter \'n\' with unknown value cannot be used in a constant expression","clang/test/SemaCXX/warn-vla.cpp:22:25: note: function parameter \'n\' with unknown value cannot be used in a constant expression","clang/test/SemaCXX/warn-vla.cpp:25:23: note: function parameter \'n\' with unknown value cannot be used in a constant expression"}
}
},
},
["note_constexpr_heap_alloc_limit_exceeded"]={
["note_constexpr_heap_alloc_limit_exceeded"]={
[f]="constexpr evaluation hit maximum heap allocation limit",
[b]="constexpr evaluation hit maximum heap allocation limit",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="constexpr evaluation hit maximum heap allocation limit",
[h]="constexpr evaluation hit maximum heap allocation limit",
[g]=b,
[j]=i,
[e]="constexpr evaluation hit maximum heap allocation limit",
[k]="constexpr evaluation hit maximum heap allocation limit",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,1905,"APValue *EvalInfo::createHeapAlloc(const Expr *E, QualType T, LValue &LV) {\n  if (NumHeapAllocs > DynamicAllocLValue::getMaxIndex()) {\n    FFDiag(E, diag::note_constexpr_heap_alloc_limit_exceeded);"}}
[n]={{q,1905,"APValue *EvalInfo::createHeapAlloc(const Expr *E, QualType T, LValue &LV) {\n  if (NumHeapAllocs > DynamicAllocLValue::getMaxIndex()) {\n    FFDiag(E, diag::note_constexpr_heap_alloc_limit_exceeded);"}}
},
},
["note_constexpr_inherited_ctor_call_here"]={
["note_constexpr_inherited_ctor_call_here"]={
[f]="in implicit initialization for inherited constructor of A",
[b]="in implicit initialization for inherited constructor of A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in implicit initialization for inherited constructor of %0",
[h]="in implicit initialization for inherited constructor of %0",
[g]=b,
[j]=i,
[e]="in implicit initialization for inherited constructor of (.*?)",
[k]="in implicit initialization for inherited constructor of (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"5179eb78210a",1467140637,"P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:"},
[m]={"5179eb78210a",1467140637,"P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:"},
Line 1,812: Line 2,218:
},
},
["note_constexpr_invalid_alignment"]={
["note_constexpr_invalid_alignment"]={
[f]="requested alignment A is not a positive power of two",
[b]="requested alignment A is not a positive power of two",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="requested alignment %0 is not a positive power of two",
[h]="requested alignment %0 is not a positive power of two",
[g]=b,
[j]=i,
[e]="requested alignment (.*?) is not a positive power of two",
[k]="requested alignment (.*?) is not a positive power of two",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"8c387cbea76b",1578602886,"Add builtins for aligning and checking alignment of pointers and integers"},
[m]={"8c387cbea76b",1578602886,"Add builtins for aligning and checking alignment of pointers and integers"},
[n]={{p,9143,"/// Evaluate the value of the alignment argument to __builtin_align_{up,down},\n/// __builtin_is_aligned and __builtin_assume_aligned.\nstatic bool getAlignmentArgument(const Expr *E, QualType ForType, EvalInfo &Info, APSInt &Alignment) {\n  if (Alignment < 0 || !Alignment.isPowerOf2()) {\n    Info.FFDiag(E, diag::note_constexpr_invalid_alignment) << Alignment;"}}
[n]={{q,9143,"/// Evaluate the value of the alignment argument to __builtin_align_{up,down},\n/// __builtin_is_aligned and __builtin_assume_aligned.\nstatic bool getAlignmentArgument(const Expr *E, QualType ForType, EvalInfo &Info, APSInt &Alignment) {\n  if (Alignment < 0 || !Alignment.isPowerOf2()) {\n    Info.FFDiag(E, diag::note_constexpr_invalid_alignment) << Alignment;"}},
[o]={
["clang/test/SemaCXX/builtin-align-cxx.cpp"]={"clang/test/SemaCXX/builtin-align-cxx.cpp:121:36: note: requested alignment -1 is not a positive power of two","clang/test/SemaCXX/builtin-align-cxx.cpp:112:34: note: requested alignment -2 is not a positive power of two","clang/test/SemaCXX/builtin-align-cxx.cpp:105:36: note: requested alignment -3 is not a positive power of two","clang/test/SemaCXX/builtin-align-cxx.cpp:121:36: note: requested alignment 17 is not a positive power of two","clang/test/SemaCXX/builtin-align-cxx.cpp:112:34: note: requested alignment 18 is not a positive power of two","clang/test/SemaCXX/builtin-align-cxx.cpp:105:36: note: requested alignment 19 is not a positive power of two"}
}
},
},
["note_constexpr_invalid_cast"]={
["note_constexpr_invalid_cast"]={
[f]="... is not allowed in a constant expression...",
[b]="... is not allowed in a constant expression...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{reinterpret_cast|dynamic_cast|%select{this conversion|cast that performs the conversions of a reinterpret_cast}1|cast from %1}0 is not allowed in a constant expression%select{| in C++ standards before C++20||}0",
[h]="%select{reinterpret_cast|dynamic_cast|%select{this conversion|cast that performs the conversions of a reinterpret_cast}1|cast from %1}0 is not allowed in a constant expression%select{| in C++ standards before C++20||}0",
[g]=b,
[j]=i,
[e]="(?:reinterpret_cast|dynamic_cast|(?:this conversion|cast that performs the conversions of a reinterpret_cast)|cast from (.*?)) is not allowed in a constant expression(?:| in C\\+\\+ standards before C\\+\\+20||)",
[k]="(?:reinterpret_cast|dynamic_cast|(?:this conversion|cast that performs the conversions of a reinterpret_cast)|cast from (.*?)) is not allowed in a constant expression(?:| in C\\+\\+ standards before C\\+\\+20||)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"6d6ecc34f841",1323693976,"Implement C++11 constant expression cast restrictions."},
[m]={"6d6ecc34f841",1323693976,"Implement C++11 constant expression cast restrictions."},
[n]={{p,7536,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  bool VisitCXXReinterpretCastExpr(const CXXReinterpretCastExpr *E) {\n    CCEDiag(E, diag::note_constexpr_invalid_cast) << 0;"},{p,7541,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  bool VisitCXXDynamicCastExpr(const CXXDynamicCastExpr *E) {\n    if (!Info.Ctx.getLangOpts().CPlusPlus20)\n      CCEDiag(E, diag::note_constexpr_invalid_cast) << 1;"},{p,8247,"class LValueExprEvaluator : public LValueExprEvaluatorBase<LValueExprEvaluator> {\n  bool VisitCastExpr(const CastExpr *E) {\n    case CK_LValueBitCast:\n      this->CCEDiag(E, diag::note_constexpr_invalid_cast) << 2 << Info.Ctx.getLangOpts().CPlusPlus;"},{p,8976,"bool PointerExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_AddressSpaceConversion:\n    // Bitcasts to cv void* are static_casts, not reinterpret_casts, so are\n    // permitted in constant expressions in C++11. Bitcasts from cv void* are\n    // also static_casts, but we disallow them as a resolution to DR1312.\n    if (!E->getType()->isVoidPointerType()) {\n      // 1. We\'ll allow it in std::allocator::allocate, and anything which that\n      //    calls.\n      // 2. HACK 2022-03-28: Work around an issue with libstdc++\'s\n      //    <source_location> header. Fixed in GCC 12 and later (2022-04-??).\n      //    We\'ll allow it in the body of std::source_location::current.  GCC\'s\n      //    implementation had a parameter of type `void*`, and casts from\n      //    that back to `const __impl*` in its body.\n      if (VoidPtrCastMaybeOK && (Info.getStdAllocatorCaller(\"allocate\") || IsDeclSourceLocationCurrent(Info.CurrentCall->Callee) || Info.getLangOpts().CPlusPlus26)) {\n      } else {\n        if (SubExpr->getType()->isVoidPointerType()) {\n          if (HasValidResult)\n          else\n            CCEDiag(E, diag::note_constexpr_invalid_cast) << 3 << SubExpr->getType();"},{p,8979,"bool PointerExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_AddressSpaceConversion:\n    // Bitcasts to cv void* are static_casts, not reinterpret_casts, so are\n    // permitted in constant expressions in C++11. Bitcasts from cv void* are\n    // also static_casts, but we disallow them as a resolution to DR1312.\n    if (!E->getType()->isVoidPointerType()) {\n      // 1. We\'ll allow it in std::allocator::allocate, and anything which that\n      //    calls.\n      // 2. HACK 2022-03-28: Work around an issue with libstdc++\'s\n      //    <source_location> header. Fixed in GCC 12 and later (2022-04-??).\n      //    We\'ll allow it in the body of std::source_location::current.  GCC\'s\n      //    implementation had a parameter of type `void*`, and casts from\n      //    that back to `const __impl*` in its body.\n      if (VoidPtrCastMaybeOK && (Info.getStdAllocatorCaller(\"allocate\") || IsDeclSourceLocationCurrent(Info.CurrentCall->Callee) || Info.getLangOpts().CPlusPlus26)) {\n      } else {\n        if (SubExpr->getType()->isVoidPointerType()) {\n        } else\n          CCEDiag(E, diag::note_constexpr_invalid_cast) << 2 << Info.Ctx.getLangOpts().CPlusPlus;"},{p,9018,"bool PointerExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_IntegralToPointer: {\n    CCEDiag(E, diag::note_constexpr_invalid_cast) << 2 << Info.Ctx.getLangOpts().CPlusPlus;"},{p,13795,"/// HandleCast - This is used to evaluate implicit or explicit casts where the\n/// result type is integer.\nbool IntExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_PointerToIntegral: {\n    CCEDiag(E, diag::note_constexpr_invalid_cast) << 2 << Info.Ctx.getLangOpts().CPlusPlus;"}}
[n]={{q,7536,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  bool VisitCXXReinterpretCastExpr(const CXXReinterpretCastExpr *E) {\n    CCEDiag(E, diag::note_constexpr_invalid_cast) << 0;"},{q,7541,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  bool VisitCXXDynamicCastExpr(const CXXDynamicCastExpr *E) {\n    if (!Info.Ctx.getLangOpts().CPlusPlus20)\n      CCEDiag(E, diag::note_constexpr_invalid_cast) << 1;"},{q,8247,"class LValueExprEvaluator : public LValueExprEvaluatorBase<LValueExprEvaluator> {\n  bool VisitCastExpr(const CastExpr *E) {\n    case CK_LValueBitCast:\n      this->CCEDiag(E, diag::note_constexpr_invalid_cast) << 2 << Info.Ctx.getLangOpts().CPlusPlus;"},{q,8976,"bool PointerExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_AddressSpaceConversion:\n    // Bitcasts to cv void* are static_casts, not reinterpret_casts, so are\n    // permitted in constant expressions in C++11. Bitcasts from cv void* are\n    // also static_casts, but we disallow them as a resolution to DR1312.\n    if (!E->getType()->isVoidPointerType()) {\n      // 1. We\'ll allow it in std::allocator::allocate, and anything which that\n      //    calls.\n      // 2. HACK 2022-03-28: Work around an issue with libstdc++\'s\n      //    <source_location> header. Fixed in GCC 12 and later (2022-04-??).\n      //    We\'ll allow it in the body of std::source_location::current.  GCC\'s\n      //    implementation had a parameter of type `void*`, and casts from\n      //    that back to `const __impl*` in its body.\n      if (VoidPtrCastMaybeOK && (Info.getStdAllocatorCaller(\"allocate\") || IsDeclSourceLocationCurrent(Info.CurrentCall->Callee) || Info.getLangOpts().CPlusPlus26)) {\n      } else {\n        if (SubExpr->getType()->isVoidPointerType()) {\n          if (HasValidResult)\n          else\n            CCEDiag(E, diag::note_constexpr_invalid_cast) << 3 << SubExpr->getType();"},{q,8979,"bool PointerExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_AddressSpaceConversion:\n    // Bitcasts to cv void* are static_casts, not reinterpret_casts, so are\n    // permitted in constant expressions in C++11. Bitcasts from cv void* are\n    // also static_casts, but we disallow them as a resolution to DR1312.\n    if (!E->getType()->isVoidPointerType()) {\n      // 1. We\'ll allow it in std::allocator::allocate, and anything which that\n      //    calls.\n      // 2. HACK 2022-03-28: Work around an issue with libstdc++\'s\n      //    <source_location> header. Fixed in GCC 12 and later (2022-04-??).\n      //    We\'ll allow it in the body of std::source_location::current.  GCC\'s\n      //    implementation had a parameter of type `void*`, and casts from\n      //    that back to `const __impl*` in its body.\n      if (VoidPtrCastMaybeOK && (Info.getStdAllocatorCaller(\"allocate\") || IsDeclSourceLocationCurrent(Info.CurrentCall->Callee) || Info.getLangOpts().CPlusPlus26)) {\n      } else {\n        if (SubExpr->getType()->isVoidPointerType()) {\n        } else\n          CCEDiag(E, diag::note_constexpr_invalid_cast) << 2 << Info.Ctx.getLangOpts().CPlusPlus;"},{q,9018,"bool PointerExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_IntegralToPointer: {\n    CCEDiag(E, diag::note_constexpr_invalid_cast) << 2 << Info.Ctx.getLangOpts().CPlusPlus;"},{q,13795,"/// HandleCast - This is used to evaluate implicit or explicit casts where the\n/// result type is integer.\nbool IntExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_PointerToIntegral: {\n    CCEDiag(E, diag::note_constexpr_invalid_cast) << 2 << Info.Ctx.getLangOpts().CPlusPlus;"}},
[o]={
["clang/test/Sema/cast.c"]={"clang/test/Sema/cast.c:3:11: note: this conversion is not allowed in a constant expression"}
}
},
},
["note_constexpr_invalid_downcast"]={
["note_constexpr_invalid_downcast"]={
[f]="cannot cast object of dynamic type A to type B",
[b]="cannot cast object of dynamic type A to type B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot cast object of dynamic type %0 to type %1",
[h]="cannot cast object of dynamic type %0 to type %1",
[g]=b,
[j]=i,
[e]="cannot cast object of dynamic type (.*?) to type (.*?)",
[k]="cannot cast object of dynamic type (.*?) to type (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"a8105bc9cecb",1325867940,"C++11 generalized constant expressions: implement checking and diagnostics for"},
[m]={"a8105bc9cecb",1325867940,"C++11 generalized constant expressions: implement checking and diagnostics for"},
[n]={{p,4800,"/// HandleBaseToDerivedCast - Apply the given base-to-derived cast operation on\n/// the provided lvalue, which currently refers to the base object.\nstatic bool HandleBaseToDerivedCast(EvalInfo &Info, const CastExpr *E, LValue &Result) {\n  // Check this cast lands within the final derived-to-base subobject path.\n  if (D.MostDerivedPathLength + E->path_size() > D.Entries.size()) {\n    Info.CCEDiag(E, diag::note_constexpr_invalid_downcast) << D.MostDerivedType << TargetQT;"},{p,4815,"/// HandleBaseToDerivedCast - Apply the given base-to-derived cast operation on\n/// the provided lvalue, which currently refers to the base object.\nstatic bool HandleBaseToDerivedCast(EvalInfo &Info, const CastExpr *E, LValue &Result) {\n  if (FinalType->getCanonicalDecl() != TargetType->getCanonicalDecl()) {\n    Info.CCEDiag(E, diag::note_constexpr_invalid_downcast) << D.MostDerivedType << TargetQT;"}}
[n]={{q,4800,"/// HandleBaseToDerivedCast - Apply the given base-to-derived cast operation on\n/// the provided lvalue, which currently refers to the base object.\nstatic bool HandleBaseToDerivedCast(EvalInfo &Info, const CastExpr *E, LValue &Result) {\n  // Check this cast lands within the final derived-to-base subobject path.\n  if (D.MostDerivedPathLength + E->path_size() > D.Entries.size()) {\n    Info.CCEDiag(E, diag::note_constexpr_invalid_downcast) << D.MostDerivedType << TargetQT;"},{q,4815,"/// HandleBaseToDerivedCast - Apply the given base-to-derived cast operation on\n/// the provided lvalue, which currently refers to the base object.\nstatic bool HandleBaseToDerivedCast(EvalInfo &Info, const CastExpr *E, LValue &Result) {\n  if (FinalType->getCanonicalDecl() != TargetType->getCanonicalDecl()) {\n    Info.CCEDiag(E, diag::note_constexpr_invalid_downcast) << D.MostDerivedType << TargetQT;"}},
[o]={
[Ob]={"clang/test/SemaCXX/constant-expression-cxx11.cpp:889:25: note: cannot cast object of dynamic type \'const Derived\' to type \'Base2\'","clang/test/SemaCXX/constant-expression-cxx11.cpp:890:25: note: cannot cast object of dynamic type \'const Derived\' to type \'Base\'","clang/test/SemaCXX/constant-expression-cxx11.cpp:894:26: note: cannot cast object of dynamic type \'const Derived\' to type \'Base2\'","clang/test/SemaCXX/constant-expression-cxx11.cpp:895:26: note: cannot cast object of dynamic type \'const Derived\' to type \'Base\'","clang/test/SemaCXX/constant-expression-cxx11.cpp:978:10: note: cannot cast object of dynamic type \'S\' to type \'const T\'","clang/test/SemaCXX/constant-expression-cxx11.cpp:978:10: note: cannot cast object of dynamic type \'const S\' to type \'const T\'","clang/test/SemaCXX/constant-expression-cxx11.cpp:978:10: note: cannot cast object of dynamic type \'const S\' to type \'const T\'","clang/test/SemaCXX/constant-expression-cxx11.cpp:978:10: note: cannot cast object of dynamic type \'const S\' to type \'const T\'","clang/test/SemaCXX/constant-expression-cxx11.cpp:978:10: note: cannot cast object of dynamic type \'const S\' to type \'const T\'","clang/test/SemaCXX/constant-expression-cxx11.cpp:1135:29: note: cannot cast object of dynamic type \'T<17>\' to type \'T<23>\'"}
}
},
},
["note_constexpr_invalid_function"]={
["note_constexpr_invalid_function"]={
[f]="... ... A cannot be used in a constant expression",
[b]="... ... A cannot be used in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{non-constexpr|undefined}0 %select{function|constructor}1 %2 cannot be used in a constant expression",
[h]="%select{non-constexpr|undefined}0 %select{function|constructor}1 %2 cannot be used in a constant expression",
[g]=b,
[j]=i,
[e]="(?:non\\-constexpr|undefined) (?:function|constructor) (.*?) cannot be used in a constant expression",
[k]="(?:non\\-constexpr|undefined) (?:function|constructor) (.*?) cannot be used in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={Bb,1323758398,Eb},
[m]={ac,1323758398,Qb},
[n]={{p,5557,"/// CheckTrivialDefaultConstructor - Check whether a constructor is a trivial\n/// default constructor. If so, we\'ll fold it whether or not it\'s marked as\n/// constexpr. If it is marked as constexpr, we will never implicitly define it,\n/// so we need special handling.\nstatic bool CheckTrivialDefaultConstructor(EvalInfo &Info, SourceLocation Loc, const CXXConstructorDecl *CD, bool IsValueInitialization) {\n  // Value-initialization does not call a trivial default constructor, so such a\n  // call is a core constant expression whether or not the constructor is\n  // constexpr.\n  if (!CD->isConstexpr() && !IsValueInitialization) {\n    if (Info.getLangOpts().CPlusPlus11) {\n      Info.CCEDiag(Loc, diag::note_constexpr_invalid_function, 1) << /*IsConstexpr*/ 0 << /*IsConstructor*/ 1 << CD;"},{p,5622,"/// CheckConstexprFunction - Check that a function can be called in a constant\n/// expression.\nstatic bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body) {\n  if (Info.getLangOpts().CPlusPlus11) {\n    // FIXME: If DiagDecl is an implicitly-declared special member function\n    // or an inheriting constructor, we should be much more explicit about why\n    // it\'s not constexpr.\n    if (CD && CD->isInheritingConstructor())\n    else\n      Info.FFDiag(CallLoc, diag::note_constexpr_invalid_function, 1) << DiagDecl->isConstexpr() << (bool)CD << DiagDecl;"},{p,9300,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwmemchr:\n    if (Info.getLangOpts().CPlusPlus11)\n      Info.CCEDiag(E, diag::note_constexpr_invalid_function) << /*isConstexpr*/ 0 << /*isConstructor*/ 0 << (\"\'\" + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + \"\'\").str();"},{p,9408,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwmemmove:\n    if (Info.getLangOpts().CPlusPlus11)\n      Info.CCEDiag(E, diag::note_constexpr_invalid_function) << /*isConstexpr*/ 0 << /*isConstructor*/ 0 << (\"\'\" + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + \"\'\").str();"},{p,12285,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwcslen:\n    // A call to strlen is not a constant expression.\n    if (Info.getLangOpts().CPlusPlus11)\n      Info.CCEDiag(E, diag::note_constexpr_invalid_function) << /*isConstexpr*/ 0 << /*isConstructor*/ 0 << (\"\'\" + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + \"\'\").str();"},{p,12310,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwmemcmp:\n    // A call to strlen is not a constant expression.\n    if (Info.getLangOpts().CPlusPlus11)\n      Info.CCEDiag(E, diag::note_constexpr_invalid_function) << /*isConstexpr*/ 0 << /*isConstructor*/ 0 << (\"\'\" + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + \"\'\").str();"},{w,333,"bool CheckCallable(InterpState &S, CodePtr OpPC, const Function *F) {\n  if (!F->isConstexpr()) {\n    if (S.getLangOpts().CPlusPlus11) {\n      // FIXME: If DiagDecl is an implicitly-declared special member function\n      // or an inheriting constructor, we should be much more explicit about why\n      // it\'s not constexpr.\n      if (CD && CD->isInheritingConstructor())\n      else\n        S.FFDiag(Loc, diag::note_constexpr_invalid_function, 1) << DiagDecl->isConstexpr() << (bool)CD << DiagDecl;"}}
[n]={{q,5557,"/// CheckTrivialDefaultConstructor - Check whether a constructor is a trivial\n/// default constructor. If so, we\'ll fold it whether or not it\'s marked as\n/// constexpr. If it is marked as constexpr, we will never implicitly define it,\n/// so we need special handling.\nstatic bool CheckTrivialDefaultConstructor(EvalInfo &Info, SourceLocation Loc, const CXXConstructorDecl *CD, bool IsValueInitialization) {\n  // Value-initialization does not call a trivial default constructor, so such a\n  // call is a core constant expression whether or not the constructor is\n  // constexpr.\n  if (!CD->isConstexpr() && !IsValueInitialization) {\n    if (Info.getLangOpts().CPlusPlus11) {\n      Info.CCEDiag(Loc, diag::note_constexpr_invalid_function, 1) << /*IsConstexpr*/ 0 << /*IsConstructor*/ 1 << CD;"},{q,5622,"/// CheckConstexprFunction - Check that a function can be called in a constant\n/// expression.\nstatic bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body) {\n  if (Info.getLangOpts().CPlusPlus11) {\n    // FIXME: If DiagDecl is an implicitly-declared special member function\n    // or an inheriting constructor, we should be much more explicit about why\n    // it\'s not constexpr.\n    if (CD && CD->isInheritingConstructor())\n    else\n      Info.FFDiag(CallLoc, diag::note_constexpr_invalid_function, 1) << DiagDecl->isConstexpr() << (bool)CD << DiagDecl;"},{q,9300,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwmemchr:\n    if (Info.getLangOpts().CPlusPlus11)\n      Info.CCEDiag(E, diag::note_constexpr_invalid_function) << /*isConstexpr*/ 0 << /*isConstructor*/ 0 << (\"\'\" + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + \"\'\").str();"},{q,9408,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwmemmove:\n    if (Info.getLangOpts().CPlusPlus11)\n      Info.CCEDiag(E, diag::note_constexpr_invalid_function) << /*isConstexpr*/ 0 << /*isConstructor*/ 0 << (\"\'\" + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + \"\'\").str();"},{q,12285,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwcslen:\n    // A call to strlen is not a constant expression.\n    if (Info.getLangOpts().CPlusPlus11)\n      Info.CCEDiag(E, diag::note_constexpr_invalid_function) << /*isConstexpr*/ 0 << /*isConstructor*/ 0 << (\"\'\" + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + \"\'\").str();"},{q,12310,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwmemcmp:\n    // A call to strlen is not a constant expression.\n    if (Info.getLangOpts().CPlusPlus11)\n      Info.CCEDiag(E, diag::note_constexpr_invalid_function) << /*isConstexpr*/ 0 << /*isConstructor*/ 0 << (\"\'\" + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + \"\'\").str();"},{A,333,"bool CheckCallable(InterpState &S, CodePtr OpPC, const Function *F) {\n  if (!F->isConstexpr()) {\n    if (S.getLangOpts().CPlusPlus11) {\n      // FIXME: If DiagDecl is an implicitly-declared special member function\n      // or an inheriting constructor, we should be much more explicit about why\n      // it\'s not constexpr.\n      if (CD && CD->isInheritingConstructor())\n      else\n        S.FFDiag(Loc, diag::note_constexpr_invalid_function, 1) << DiagDecl->isConstexpr() << (bool)CD << DiagDecl;"}},
[o]={
["clang/test/SemaCXX/cxx0x-class.cpp"]={"clang/test/SemaCXX/cxx0x-class.cpp:26:33: note: non-constexpr function \'foo\' cannot be used in a constant expression"}
}
},
},
["note_constexpr_invalid_inhctor"]={
["note_constexpr_invalid_inhctor"]={
[f]="constructor inherited from base class A cannot be used in a constant expression; derived class cannot be implicitly initialized",
[b]="constructor inherited from base class A cannot be used in a constant expression; derived class cannot be implicitly initialized",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="constructor inherited from base class %0 cannot be used in a constant expression; derived class cannot be implicitly initialized",
[h]="constructor inherited from base class %0 cannot be used in a constant expression; derived class cannot be implicitly initialized",
[g]=b,
[j]=i,
[e]="constructor inherited from base class (.*?) cannot be used in a constant expression; derived class cannot be implicitly initialized",
[k]="constructor inherited from base class (.*?) cannot be used in a constant expression; derived class cannot be implicitly initialized",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"5179eb78210a",1467140637,"P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:"},
[m]={"5179eb78210a",1467140637,"P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:"},
[n]={{p,5619,"/// CheckConstexprFunction - Check that a function can be called in a constant\n/// expression.\nstatic bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body) {\n  if (Info.getLangOpts().CPlusPlus11) {\n    // FIXME: If DiagDecl is an implicitly-declared special member function\n    // or an inheriting constructor, we should be much more explicit about why\n    // it\'s not constexpr.\n    if (CD && CD->isInheritingConstructor())\n      Info.FFDiag(CallLoc, diag::note_constexpr_invalid_inhctor, 1) << CD->getInheritedConstructor().getConstructor()->getParent();"},{w,330,"bool CheckCallable(InterpState &S, CodePtr OpPC, const Function *F) {\n  if (!F->isConstexpr()) {\n    if (S.getLangOpts().CPlusPlus11) {\n      // FIXME: If DiagDecl is an implicitly-declared special member function\n      // or an inheriting constructor, we should be much more explicit about why\n      // it\'s not constexpr.\n      if (CD && CD->isInheritingConstructor())\n        S.FFDiag(Loc, diag::note_constexpr_invalid_inhctor, 1) << CD->getInheritedConstructor().getConstructor()->getParent();"}}
[n]={{q,5619,"/// CheckConstexprFunction - Check that a function can be called in a constant\n/// expression.\nstatic bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body) {\n  if (Info.getLangOpts().CPlusPlus11) {\n    // FIXME: If DiagDecl is an implicitly-declared special member function\n    // or an inheriting constructor, we should be much more explicit about why\n    // it\'s not constexpr.\n    if (CD && CD->isInheritingConstructor())\n      Info.FFDiag(CallLoc, diag::note_constexpr_invalid_inhctor, 1) << CD->getInheritedConstructor().getConstructor()->getParent();"},{A,330,"bool CheckCallable(InterpState &S, CodePtr OpPC, const Function *F) {\n  if (!F->isConstexpr()) {\n    if (S.getLangOpts().CPlusPlus11) {\n      // FIXME: If DiagDecl is an implicitly-declared special member function\n      // or an inheriting constructor, we should be much more explicit about why\n      // it\'s not constexpr.\n      if (CD && CD->isInheritingConstructor())\n        S.FFDiag(Loc, diag::note_constexpr_invalid_inhctor, 1) << CD->getInheritedConstructor().getConstructor()->getParent();"}},
[o]={
["clang/test/CXX/special/class.inhctor/p2.cpp"]={"clang/test/CXX/special/class.inhctor/p2.cpp:80:28: note: constructor inherited from base class \'Constexpr\' cannot be used in a constant expression; derived class cannot be implicitly initialized"}
}
},
},
["note_constexpr_invalid_template_arg"]={
["note_constexpr_invalid_template_arg"]={
[f]="... to ...... is not allowed in a template argument",
[b]="... to ...... is not allowed in a template argument",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{pointer|reference}0 to %select{|subobject of }1%select{type_info object|string literal|temporary object|predefined \'%3\' variable}2 is not allowed in a template argument",
[h]="%select{pointer|reference}0 to %select{|subobject of }1%select{type_info object|string literal|temporary object|predefined \'%3\' variable}2 is not allowed in a template argument",
[g]=b,
[j]=i,
[e]="(?:pointer|reference) to (?:|subobject of )(?:type_info object|string literal|temporary object|predefined \'(.*?)\' variable) is not allowed in a template argument",
[k]="(?:pointer|reference) to (?:|subobject of )(?:type_info object|string literal|temporary object|predefined \'(.*?)\' variable) is not allowed in a template argument",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"7b3515880c22",1603602504,"For P0732R2, P1907R1: ensure that template parameter objects don\'t refer"},
[m]={"7b3515880c22",1603602504,"For P0732R2, P1907R1: ensure that template parameter objects don\'t refer"},
[n]={{p,2187,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  // Additional restrictions apply in a template argument. We only enforce the\n  // C++20 restrictions here; additional syntactic and semantic restrictions\n  // are applied elsewhere.\n  if (isTemplateArgument(Kind)) {\n    if (InvalidBaseKind != -1) {\n      Info.FFDiag(Loc, diag::note_constexpr_invalid_template_arg) << IsReferenceType << !Designator.Entries.empty() << InvalidBaseKind << Ident;"},{P,5989,"/// EvaluateConvertedConstantExpression - Evaluate an Expression\n/// That is a converted constant expression\n/// (which was built with BuildConvertedConstantExpression)\nstatic ExprResult EvaluateConvertedConstantExpression(Sema &S, Expr *E, QualType T, APValue &Value, Sema::CCEKind CCE, bool RequireInt, const APValue &PreNarrowingValue) {\n  } else if (!Notes.empty() && Notes[0].second.getDiagID() == diag::note_constexpr_invalid_template_arg) {"}}
[n]={{q,2187,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  // Additional restrictions apply in a template argument. We only enforce the\n  // C++20 restrictions here; additional syntactic and semantic restrictions\n  // are applied elsewhere.\n  if (isTemplateArgument(Kind)) {\n    if (InvalidBaseKind != -1) {\n      Info.FFDiag(Loc, diag::note_constexpr_invalid_template_arg) << IsReferenceType << !Designator.Entries.empty() << InvalidBaseKind << Ident;"},{X,5989,"/// EvaluateConvertedConstantExpression - Evaluate an Expression\n/// That is a converted constant expression\n/// (which was built with BuildConvertedConstantExpression)\nstatic ExprResult EvaluateConvertedConstantExpression(Sema &S, Expr *E, QualType T, APValue &Value, Sema::CCEKind CCE, bool RequireInt, const APValue &PreNarrowingValue) {\n  } else if (!Notes.empty() && Notes[0].second.getDiagID() == diag::note_constexpr_invalid_template_arg) {"}}
},
},
["note_constexpr_invalid_void_star_cast"]={
["note_constexpr_invalid_void_star_cast"]={
[f]="cast from A is not allowed in a constant expression ...",
[b]="cast from A is not allowed in a constant expression ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cast from %0 is not allowed in a constant expression %select{in C++ standards before C++2c|because the pointed object type %2 is not similar to the target type %3}1",
[h]="cast from %0 is not allowed in a constant expression %select{in C++ standards before C++2c|because the pointed object type %2 is not similar to the target type %3}1",
[g]=b,
[j]=i,
[e]="cast from (.*?) is not allowed in a constant expression (?:in C\\+\\+ standards before C\\+\\+2c|because the pointed object type (.*?) is not similar to the target type (.*?))",
[k]="cast from (.*?) is not allowed in a constant expression (?:in C\\+\\+ standards before C\\+\\+2c|because the pointed object type (.*?) is not similar to the target type (.*?))",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={lb,1662843785,kb},
[m]={rb,1662843785,sb},
[n]={{p,8971,"bool PointerExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_AddressSpaceConversion:\n    // Bitcasts to cv void* are static_casts, not reinterpret_casts, so are\n    // permitted in constant expressions in C++11. Bitcasts from cv void* are\n    // also static_casts, but we disallow them as a resolution to DR1312.\n    if (!E->getType()->isVoidPointerType()) {\n      // 1. We\'ll allow it in std::allocator::allocate, and anything which that\n      //    calls.\n      // 2. HACK 2022-03-28: Work around an issue with libstdc++\'s\n      //    <source_location> header. Fixed in GCC 12 and later (2022-04-??).\n      //    We\'ll allow it in the body of std::source_location::current.  GCC\'s\n      //    implementation had a parameter of type `void*`, and casts from\n      //    that back to `const __impl*` in its body.\n      if (VoidPtrCastMaybeOK && (Info.getStdAllocatorCaller(\"allocate\") || IsDeclSourceLocationCurrent(Info.CurrentCall->Callee) || Info.getLangOpts().CPlusPlus26)) {\n      } else {\n        if (SubExpr->getType()->isVoidPointerType()) {\n          if (HasValidResult)\n            CCEDiag(E, diag::note_constexpr_invalid_void_star_cast) << SubExpr->getType() << Info.getLangOpts().CPlusPlus26 << Result.Designator.getType(Info.Ctx).getCanonicalType() << E->getType()->getPointeeType();"}}
[n]={{q,8971,"bool PointerExprEvaluator::VisitCastExpr(const CastExpr *E) {\n  case CK_AddressSpaceConversion:\n    // Bitcasts to cv void* are static_casts, not reinterpret_casts, so are\n    // permitted in constant expressions in C++11. Bitcasts from cv void* are\n    // also static_casts, but we disallow them as a resolution to DR1312.\n    if (!E->getType()->isVoidPointerType()) {\n      // 1. We\'ll allow it in std::allocator::allocate, and anything which that\n      //    calls.\n      // 2. HACK 2022-03-28: Work around an issue with libstdc++\'s\n      //    <source_location> header. Fixed in GCC 12 and later (2022-04-??).\n      //    We\'ll allow it in the body of std::source_location::current.  GCC\'s\n      //    implementation had a parameter of type `void*`, and casts from\n      //    that back to `const __impl*` in its body.\n      if (VoidPtrCastMaybeOK && (Info.getStdAllocatorCaller(\"allocate\") || IsDeclSourceLocationCurrent(Info.CurrentCall->Callee) || Info.getLangOpts().CPlusPlus26)) {\n      } else {\n        if (SubExpr->getType()->isVoidPointerType()) {\n          if (HasValidResult)\n            CCEDiag(E, diag::note_constexpr_invalid_void_star_cast) << SubExpr->getType() << Info.getLangOpts().CPlusPlus26 << Result.Designator.getType(Info.Ctx).getCanonicalType() << E->getType()->getPointeeType();"}},
[o]={
["clang/test/CXX/expr/expr.const/p5-26.cpp"]={"clang/test/CXX/expr/expr.const/p5-26.cpp:12:11: note: cast from \'void *\' is not allowed in a constant expression in C++ standards before C++2c","clang/test/CXX/expr/expr.const/p5-26.cpp:33:27: note: cast from \'void *\' is not allowed in a constant expression in C++ standards before C++2c","clang/test/CXX/expr/expr.const/p5-26.cpp:36:27: note: cast from \'void *\' is not allowed in a constant expression in C++ standards before C++2c"}
}
},
},
["note_constexpr_large_shift"]={
["note_constexpr_large_shift"]={
[f]="shift count A >= width of type B (C bitD)",
[b]="shift count A >= width of type B (C bitD)",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="shift count %0 >= width of type %1 (%2 bit%s2)",
[h]="shift count %0 >= width of type %1 (%2 bit%s2)",
[g]=b,
[j]=i,
[e]="shift count (.*?) \\>\\= width of type (.*?) \\((.*?) bit(.*?)\\)",
[k]="shift count (.*?) \\>\\= width of type (.*?) \\((.*?) bit(.*?)\\)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"fe800031ec14",1327982900,"constexpr: catch a collection of integral undefined behaviors:"},
[m]={"fe800031ec14",1327982900,"constexpr: catch a collection of integral undefined behaviors:"},
[n]={{p,2834,"/// Perform the given binary integer operation.\nstatic bool handleIntIntBinOp(EvalInfo &Info, const Expr *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result) {\n  shift_left:\n    if (SA != RHS) {\n      Info.CCEDiag(E, diag::note_constexpr_large_shift) << RHS << E->getType() << LHS.getBitWidth();"},{p,2867,"/// Perform the given binary integer operation.\nstatic bool handleIntIntBinOp(EvalInfo &Info, const Expr *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result) {\n  shift_right:\n    if (SA != RHS)\n      Info.CCEDiag(E, diag::note_constexpr_large_shift) << RHS << E->getType() << LHS.getBitWidth();"},{p,14046,"bool FixedPointExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  case BO_Shr: {\n    // Embedded-C 4.1.6.2.2:\n    //  The right operand must be nonnegative and less than the total number\n    //  of (nonpadding) bits of the fixed-point operand ...\n    if (RHSVal.isNegative())\n    else if (Amt != RHSVal)\n      Info.CCEDiag(E, diag::note_constexpr_large_shift) << RHSVal << E->getType() << ShiftBW;"}}
[n]={{q,2834,"/// Perform the given binary integer operation.\nstatic bool handleIntIntBinOp(EvalInfo &Info, const Expr *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result) {\n  shift_left:\n    if (SA != RHS) {\n      Info.CCEDiag(E, diag::note_constexpr_large_shift) << RHS << E->getType() << LHS.getBitWidth();"},{q,2867,"/// Perform the given binary integer operation.\nstatic bool handleIntIntBinOp(EvalInfo &Info, const Expr *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result) {\n  shift_right:\n    if (SA != RHS)\n      Info.CCEDiag(E, diag::note_constexpr_large_shift) << RHS << E->getType() << LHS.getBitWidth();"},{q,14046,"bool FixedPointExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  case BO_Shr: {\n    // Embedded-C 4.1.6.2.2:\n    //  The right operand must be nonnegative and less than the total number\n    //  of (nonpadding) bits of the fixed-point operand ...\n    if (RHSVal.isNegative())\n    else if (Amt != RHSVal)\n      Info.CCEDiag(E, diag::note_constexpr_large_shift) << RHSVal << E->getType() << ShiftBW;"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:158:28: note: shift count 32 >= width of type \'int\' (32 bits)","clang/test/CXX/expr/expr.const/p2-0x.cpp:174:28: note: shift count 32 >= width of type \'int\' (32 bits)"}
}
},
},
["note_constexpr_lifetime_ended"]={
["note_constexpr_lifetime_ended"]={
[f]="... ... whose storage duration has ended",
[b]="... ... whose storage duration has ended",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of}0 %select{temporary|variable}1 whose %plural{8:storage duration|:lifetime}0 has ended",
[h]="%select{read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of}0 %select{temporary|variable}1 whose %plural{8:storage duration|:lifetime}0 has ended",
[g]=b,
[j]=i,
[e]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of) (?:temporary|variable) whose (?:storage duration|lifetime) has ended",
[k]="(?:read of|read of|assignment to|increment of|decrement of|member call on|dynamic_cast of|typeid applied to|construction of|destruction of) (?:temporary|variable) whose (?:storage duration|lifetime) has ended",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"b228a86fcfd1",1329272293,"Implement DR1454. This allows all intermediate results in constant expressions"},
[m]={"b228a86fcfd1",1329272293,"Implement DR1454. This allows all intermediate results in constant expressions"},
[n]={{p,4019,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (LVal.getLValueCallIndex()) {\n    if (!Frame) {\n      Info.FFDiag(E, diag::note_constexpr_lifetime_ended, 1) << AK << LVal.Base.is<const ValueDecl *>();"},{w,164,"bool CheckLive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (!Ptr.isLive()) {\n    S.FFDiag(Src, diag::note_constexpr_lifetime_ended, 1) << AK << !IsTemp;"}}
[n]={{q,4019,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (LVal.getLValueCallIndex()) {\n    if (!Frame) {\n      Info.FFDiag(E, diag::note_constexpr_lifetime_ended, 1) << AK << LVal.Base.is<const ValueDecl *>();"},{A,164,"bool CheckLive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (!Ptr.isLive()) {\n    S.FFDiag(Src, diag::note_constexpr_lifetime_ended, 1) << AK << !IsTemp;"}},
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:1199:8: note: destruction of variable whose lifetime has ended","clang/test/SemaCXX/constant-expression-cxx2a.cpp:1205:8: note: destruction of temporary whose lifetime has ended"}
}
},
},
["note_constexpr_literal_comparison"]={
["note_constexpr_literal_comparison"]={
[f]="comparison of addresses of literals has unspecified value",
[b]="comparison of addresses of literals has unspecified value",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="comparison of addresses of literals has unspecified value",
[h]="comparison of addresses of literals has unspecified value",
[g]=b,
[j]=i,
[e]="comparison of addresses of literals has unspecified value",
[k]="comparison of addresses of literals has unspecified value",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={lb,1662843785,kb},
[m]={rb,1662843785,sb},
[n]={{p,13096,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // Reject differing bases from the normal codepath; we special-case\n    // comparisons to null.\n    if (!HasSameBase(LHSValue, RHSValue)) {\n      // It\'s implementation-defined whether distinct literals will have\n      // distinct addresses. In clang, the result of such a comparison is\n      // unspecified, so it is not a constant expression. However, we do know\n      // that the address of a literal will be non-null.\n      if ((IsLiteralLValue(LHSValue) || IsLiteralLValue(RHSValue)) && LHSValue.Base && RHSValue.Base)\n        return DiagComparison(diag::note_constexpr_literal_comparison);"}}
[n]={{q,13096,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // Reject differing bases from the normal codepath; we special-case\n    // comparisons to null.\n    if (!HasSameBase(LHSValue, RHSValue)) {\n      // It\'s implementation-defined whether distinct literals will have\n      // distinct addresses. In clang, the result of such a comparison is\n      // unspecified, so it is not a constant expression. However, we do know\n      // that the address of a literal will be non-null.\n      if ((IsLiteralLValue(LHSValue) || IsLiteralLValue(RHSValue)) && LHSValue.Base && RHSValue.Base)\n        return DiagComparison(diag::note_constexpr_literal_comparison);"}},
[o]={
["clang/test/SemaCXX/builtins.cpp"]={"clang/test/SemaCXX/builtins.cpp:50:43: note: comparison of addresses of literals has unspecified value"}
}
},
},
["note_constexpr_lshift_discards"]={
["note_constexpr_lshift_discards"]={
[f]="signed left shift discards bits",
[b]="signed left shift discards bits",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="signed left shift discards bits",
[h]="signed left shift discards bits",
[g]=b,
[j]=i,
[e]="signed left shift discards bits",
[k]="signed left shift discards bits",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"da7c4ba1af98",1328681693,"Implement the agreed resolution to DR1457: a signed left shift of a 1 bit into"},
[m]={"da7c4ba1af98",1328681693,"Implement the agreed resolution to DR1457: a signed left shift of a 1 bit into"},
[n]={{p,2844,"/// Perform the given binary integer operation.\nstatic bool handleIntIntBinOp(EvalInfo &Info, const Expr *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result) {\n  shift_left:\n    if (SA != RHS) {\n    } else if (LHS.isSigned() && !Info.getLangOpts().CPlusPlus20) {\n      // C++11 [expr.shift]p2: A signed left shift must have a non-negative\n      // operand, and must not overflow the corresponding unsigned type.\n      // C++2a [expr.shift]p2: E1 << E2 is the unique value congruent to\n      // E1 x 2^E2 module 2^N.\n      if (LHS.isNegative())\n      else if (LHS.countl_zero() < SA)\n        Info.CCEDiag(E, diag::note_constexpr_lshift_discards);"}}
[n]={{q,2844,"/// Perform the given binary integer operation.\nstatic bool handleIntIntBinOp(EvalInfo &Info, const Expr *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result) {\n  shift_left:\n    if (SA != RHS) {\n    } else if (LHS.isSigned() && !Info.getLangOpts().CPlusPlus20) {\n      // C++11 [expr.shift]p2: A signed left shift must have a non-negative\n      // operand, and must not overflow the corresponding unsigned type.\n      // C++2a [expr.shift]p2: E1 << E2 is the unique value congruent to\n      // E1 x 2^E2 module 2^N.\n      if (LHS.isNegative())\n      else if (LHS.countl_zero() < SA)\n        Info.CCEDiag(E, diag::note_constexpr_lshift_discards);"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:166:40: note: signed left shift discards bits","clang/test/CXX/expr/expr.const/p2-0x.cpp:167:51: note: signed left shift discards bits","clang/test/CXX/expr/expr.const/p2-0x.cpp:168:44: note: signed left shift discards bits"}
}
},
},
["note_constexpr_lshift_of_negative"]={
["note_constexpr_lshift_of_negative"]={
[f]="left shift of negative value A",
[b]="left shift of negative value A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="left shift of negative value %0",
[h]="left shift of negative value %0",
[g]=b,
[j]=i,
[e]="left shift of negative value (.*?)",
[k]="left shift of negative value (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"fe800031ec14",1327982900,"constexpr: catch a collection of integral undefined behaviors:"},
[m]={"fe800031ec14",1327982900,"constexpr: catch a collection of integral undefined behaviors:"},
[n]={{p,2842,"/// Perform the given binary integer operation.\nstatic bool handleIntIntBinOp(EvalInfo &Info, const Expr *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result) {\n  shift_left:\n    if (SA != RHS) {\n    } else if (LHS.isSigned() && !Info.getLangOpts().CPlusPlus20) {\n      // C++11 [expr.shift]p2: A signed left shift must have a non-negative\n      // operand, and must not overflow the corresponding unsigned type.\n      // C++2a [expr.shift]p2: E1 << E2 is the unique value congruent to\n      // E1 x 2^E2 module 2^N.\n      if (LHS.isNegative())\n        Info.CCEDiag(E, diag::note_constexpr_lshift_of_negative) << LHS;"}}
[n]={{q,2842,"/// Perform the given binary integer operation.\nstatic bool handleIntIntBinOp(EvalInfo &Info, const Expr *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result) {\n  shift_left:\n    if (SA != RHS) {\n    } else if (LHS.isSigned() && !Info.getLangOpts().CPlusPlus20) {\n      // C++11 [expr.shift]p2: A signed left shift must have a non-negative\n      // operand, and must not overflow the corresponding unsigned type.\n      // C++2a [expr.shift]p2: E1 << E2 is the unique value congruent to\n      // E1 x 2^E2 module 2^N.\n      if (LHS.isNegative())\n        Info.CCEDiag(E, diag::note_constexpr_lshift_of_negative) << LHS;"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:162:44: note: left shift of negative value -3"}
}
},
},
["note_constexpr_ltor_incomplete_type"]={
["note_constexpr_ltor_incomplete_type"]={
[f]="read of incomplete type A is not allowed in a constant expression",
[b]="read of incomplete type A is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="read of incomplete type %0 is not allowed in a constant expression",
[h]="read of incomplete type %0 is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="read of incomplete type (.*?) is not allowed in a constant expression",
[k]="read of incomplete type (.*?) is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"147b743602e4",1544633623,"[ExprConstant] Improve memchr/memcmp for type mismatch and multibyte element types"},
[m]={"147b743602e4",1544633623,"[ExprConstant] Improve memchr/memcmp for type mismatch and multibyte element types"},
[n]={{p,9340,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemchr: {\n    // Pointers to const void may point to objects of incomplete type.\n    if (IsRawByte && CharTy->isIncompleteType()) {\n      Info.FFDiag(E, diag::note_constexpr_ltor_incomplete_type) << CharTy;"}}
[n]={{q,9340,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemchr: {\n    // Pointers to const void may point to objects of incomplete type.\n    if (IsRawByte && CharTy->isIncompleteType()) {\n      Info.FFDiag(E, diag::note_constexpr_ltor_incomplete_type) << CharTy;"}},
[o]={
[xb]={"SemaCXX/constexpr-string.cpp:406:17: note: read of incomplete type \'struct Incomplete\' is not allowed in a constant expression"}
}
},
},
["note_constexpr_ltor_non_const_int"]={
["note_constexpr_ltor_non_const_int"]={
[f]="read of non-const variable A is not allowed in a constant expression",
[b]="read of non-const variable A is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="read of non-const variable %0 is not allowed in a constant expression",
[h]="read of non-const variable %0 is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="read of non\\-const variable (.*?) is not allowed in a constant expression",
[k]="read of non\\-const variable (.*?) is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"f2b681b4d819",1324443886,"constexpr: diagnostic improvements for invalid lvalue-to-rvalue conversions in"},
[m]={"f2b681b4d819",1324443886,"constexpr: diagnostic improvements for invalid lvalue-to-rvalue conversions in"},
[n]={{p,4129,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n        if (!IsConstant) {\n          if (Info.getLangOpts().CPlusPlus) {\n            Info.FFDiag(E, diag::note_constexpr_ltor_non_const_int, 1) << VD;"}}
[n]={{q,4129,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n        if (!IsConstant) {\n          if (Info.getLangOpts().CPlusPlus) {\n            Info.FFDiag(E, diag::note_constexpr_ltor_non_const_int, 1) << VD;"}},
[o]={
["clang/test/SemaCXX/c99-variable-length-array.cpp"]={"clang/test/SemaCXX/c99-variable-length-array.cpp:43:14: note: read of non-const variable \'value\' is not allowed in a constant expression","clang/test/SemaCXX/c99-variable-length-array.cpp:60:25: note: read of non-const variable \'value\' is not allowed in a constant expression","clang/test/SemaCXX/c99-variable-length-array.cpp:118:16: note: read of non-const variable \'M\' is not allowed in a constant expression"}
}
},
},
["note_constexpr_ltor_non_constexpr"]={
["note_constexpr_ltor_non_constexpr"]={
[f]="read of non-constexpr variable A is not allowed in a constant expression",
[b]="read of non-constexpr variable A is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="read of non-constexpr variable %0 is not allowed in a constant expression",
[h]="read of non-constexpr variable %0 is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="read of non\\-constexpr variable (.*?) is not allowed in a constant expression",
[k]="read of non\\-constexpr variable (.*?) is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"f2b681b4d819",1324443886,"constexpr: diagnostic improvements for invalid lvalue-to-rvalue conversions in"},
[m]={"f2b681b4d819",1324443886,"constexpr: diagnostic improvements for invalid lvalue-to-rvalue conversions in"},
[n]={{p,3357,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  if (Init->isValueDependent()) {\n    if (!Info.checkingPotentialConstantExpression()) {\n      Info.FFDiag(E, Info.getLangOpts().CPlusPlus11 ? diag::note_constexpr_ltor_non_constexpr : diag::note_constexpr_ltor_non_integral, 1) << VD << VD->getType();"},{p,4147,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n      } else if (!IsAccess) {\n      } else if (IsConstant && Info.checkingPotentialConstantExpression() && BaseType->isLiteralType(Info.Ctx) && !VD->hasDefinition()) {\n      } else if (IsConstant) {\n        // Keep evaluating to see what we can do. In particular, we support\n        // folding of const floating-point types, in order to make static const\n        // data members of such types (supported as an extension) more useful.\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.CCEDiag(E, Info.getLangOpts().CPlusPlus11 ? diag::note_constexpr_ltor_non_constexpr : diag::note_constexpr_ltor_non_integral, 1) << VD << BaseType;"},{p,4158,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n      } else if (!IsAccess) {\n      } else if (IsConstant && Info.checkingPotentialConstantExpression() && BaseType->isLiteralType(Info.Ctx) && !VD->hasDefinition()) {\n      } else if (IsConstant) {\n      } else {\n        // Never allow reading a non-const value.\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.FFDiag(E, Info.getLangOpts().CPlusPlus11 ? diag::note_constexpr_ltor_non_constexpr : diag::note_constexpr_ltor_non_integral, 1) << VD << BaseType;"},{w,133,"bool CheckExtern(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  if (!S.checkingPotentialConstantExpression()) {\n    S.FFDiag(Loc, diag::note_constexpr_ltor_non_constexpr, 1) << VD;"}}
[n]={{q,3357,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  if (Init->isValueDependent()) {\n    if (!Info.checkingPotentialConstantExpression()) {\n      Info.FFDiag(E, Info.getLangOpts().CPlusPlus11 ? diag::note_constexpr_ltor_non_constexpr : diag::note_constexpr_ltor_non_integral, 1) << VD << VD->getType();"},{q,4147,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n      } else if (!IsAccess) {\n      } else if (IsConstant && Info.checkingPotentialConstantExpression() && BaseType->isLiteralType(Info.Ctx) && !VD->hasDefinition()) {\n      } else if (IsConstant) {\n        // Keep evaluating to see what we can do. In particular, we support\n        // folding of const floating-point types, in order to make static const\n        // data members of such types (supported as an extension) more useful.\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.CCEDiag(E, Info.getLangOpts().CPlusPlus11 ? diag::note_constexpr_ltor_non_constexpr : diag::note_constexpr_ltor_non_integral, 1) << VD << BaseType;"},{q,4158,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n      } else if (!IsAccess) {\n      } else if (IsConstant && Info.checkingPotentialConstantExpression() && BaseType->isLiteralType(Info.Ctx) && !VD->hasDefinition()) {\n      } else if (IsConstant) {\n      } else {\n        // Never allow reading a non-const value.\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.FFDiag(E, Info.getLangOpts().CPlusPlus11 ? diag::note_constexpr_ltor_non_constexpr : diag::note_constexpr_ltor_non_integral, 1) << VD << BaseType;"},{A,133,"bool CheckExtern(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  if (!S.checkingPotentialConstantExpression()) {\n    S.FFDiag(Loc, diag::note_constexpr_ltor_non_constexpr, 1) << VD;"}},
[o]={
["clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp"]={"clang/test/CXX/temp/temp.arg/temp.arg.nontype/p1-11.cpp:27:4: note: read of non-constexpr variable \'nonconst_np\' is not allowed in a constant expression"}
}
},
},
["note_constexpr_ltor_non_integral"]={
["note_constexpr_ltor_non_integral"]={
[f]="read of variable A of non-integral, non-enumeration type B is not allowed in a constant expression",
[b]="read of variable A of non-integral, non-enumeration type B is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="read of variable %0 of non-integral, non-enumeration type %1 is not allowed in a constant expression",
[h]="read of variable %0 of non-integral, non-enumeration type %1 is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="read of variable (.*?) of non\\-integral, non\\-enumeration type (.*?) is not allowed in a constant expression",
[k]="read of variable (.*?) of non\\-integral, non\\-enumeration type (.*?) is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"00068c452a59",1594250761,"Improve diagnostics for constant evaluation that fails because a"},
[m]={"00068c452a59",1594250761,"Improve diagnostics for constant evaluation that fails because a"},
[n]={{p,3358,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  if (Init->isValueDependent()) {\n    if (!Info.checkingPotentialConstantExpression()) {\n      Info.FFDiag(E, Info.getLangOpts().CPlusPlus11 ? diag::note_constexpr_ltor_non_constexpr : diag::note_constexpr_ltor_non_integral, 1) << VD << VD->getType();"},{p,4148,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n      } else if (!IsAccess) {\n      } else if (IsConstant && Info.checkingPotentialConstantExpression() && BaseType->isLiteralType(Info.Ctx) && !VD->hasDefinition()) {\n      } else if (IsConstant) {\n        // Keep evaluating to see what we can do. In particular, we support\n        // folding of const floating-point types, in order to make static const\n        // data members of such types (supported as an extension) more useful.\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.CCEDiag(E, Info.getLangOpts().CPlusPlus11 ? diag::note_constexpr_ltor_non_constexpr : diag::note_constexpr_ltor_non_integral, 1) << VD << BaseType;"},{p,4159,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n      } else if (!IsAccess) {\n      } else if (IsConstant && Info.checkingPotentialConstantExpression() && BaseType->isLiteralType(Info.Ctx) && !VD->hasDefinition()) {\n      } else if (IsConstant) {\n      } else {\n        // Never allow reading a non-const value.\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.FFDiag(E, Info.getLangOpts().CPlusPlus11 ? diag::note_constexpr_ltor_non_constexpr : diag::note_constexpr_ltor_non_integral, 1) << VD << BaseType;"},{p,8367,"bool LValueExprEvaluator::VisitVarDecl(const Expr *E, const VarDecl *VD) {\n  if (!Info.getLangOpts().CPlusPlus11) {\n    Info.CCEDiag(E, diag::note_constexpr_ltor_non_integral, 1) << VD << VD->getType();"}}
[n]={{q,3358,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  if (Init->isValueDependent()) {\n    if (!Info.checkingPotentialConstantExpression()) {\n      Info.FFDiag(E, Info.getLangOpts().CPlusPlus11 ? diag::note_constexpr_ltor_non_constexpr : diag::note_constexpr_ltor_non_integral, 1) << VD << VD->getType();"},{q,4148,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n      } else if (!IsAccess) {\n      } else if (IsConstant && Info.checkingPotentialConstantExpression() && BaseType->isLiteralType(Info.Ctx) && !VD->hasDefinition()) {\n      } else if (IsConstant) {\n        // Keep evaluating to see what we can do. In particular, we support\n        // folding of const floating-point types, in order to make static const\n        // data members of such types (supported as an extension) more useful.\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.CCEDiag(E, Info.getLangOpts().CPlusPlus11 ? diag::note_constexpr_ltor_non_constexpr : diag::note_constexpr_ltor_non_integral, 1) << VD << BaseType;"},{q,4159,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n      } else if (!IsAccess) {\n      } else if (IsConstant && Info.checkingPotentialConstantExpression() && BaseType->isLiteralType(Info.Ctx) && !VD->hasDefinition()) {\n      } else if (IsConstant) {\n      } else {\n        // Never allow reading a non-const value.\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.FFDiag(E, Info.getLangOpts().CPlusPlus11 ? diag::note_constexpr_ltor_non_constexpr : diag::note_constexpr_ltor_non_integral, 1) << VD << BaseType;"},{q,8367,"bool LValueExprEvaluator::VisitVarDecl(const Expr *E, const VarDecl *VD) {\n  if (!Info.getLangOpts().CPlusPlus11) {\n    Info.CCEDiag(E, diag::note_constexpr_ltor_non_integral, 1) << VD << VD->getType();"}},
[o]={
["clang/test/SemaCXX/constant-expression.cpp"]={"clang/test/SemaCXX/constant-expression.cpp:103:5: note: read of variable \'p\' of non-integral, non-enumeration type \'const int &\' is not allowed in a constant expression"}
}
},
},
["note_constexpr_mem_pointer_weak_comparison"]={
["note_constexpr_mem_pointer_weak_comparison"]={
[f]="comparison against pointer to weak member A can only be performed at runtime",
[b]="comparison against pointer to weak member A can only be performed at runtime",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="comparison against pointer to weak member %q0 can only be performed at runtime",
[h]="comparison against pointer to weak member %q0 can only be performed at runtime",
[g]=b,
[j]=i,
[e]="comparison against pointer to weak member (.*?) can only be performed at runtime",
[k]="comparison against pointer to weak member (.*?) can only be performed at runtime",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={lb,1662843785,kb},
[m]={rb,1662843785,sb},
[n]={{p,13224,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isMemberPointerType()) {\n    // If either operand is a pointer to a weak function, the comparison is not\n    // constant.\n    if (LHSValue.getDecl() && LHSValue.getDecl()->isWeak()) {\n      Info.FFDiag(E, diag::note_constexpr_mem_pointer_weak_comparison) << LHSValue.getDecl();"},{p,13229,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isMemberPointerType()) {\n    if (RHSValue.getDecl() && RHSValue.getDecl()->isWeak()) {\n      Info.FFDiag(E, diag::note_constexpr_mem_pointer_weak_comparison) << RHSValue.getDecl();"}}
[n]={{q,13224,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isMemberPointerType()) {\n    // If either operand is a pointer to a weak function, the comparison is not\n    // constant.\n    if (LHSValue.getDecl() && LHSValue.getDecl()->isWeak()) {\n      Info.FFDiag(E, diag::note_constexpr_mem_pointer_weak_comparison) << LHSValue.getDecl();"},{q,13229,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isMemberPointerType()) {\n    if (RHSValue.getDecl() && RHSValue.getDecl()->isWeak()) {\n      Info.FFDiag(E, diag::note_constexpr_mem_pointer_weak_comparison) << RHSValue.getDecl();"}},
[o]={
["clang/test/SemaCXX/attr-weak.cpp"]={"clang/test/SemaCXX/attr-weak.cpp:49:71: note: comparison against pointer to weak member \'WithWeakMember::weak_method\' can only be performed at runtime","clang/test/SemaCXX/attr-weak.cpp:56:87: note: comparison against pointer to weak member \'WithWeakMember::virtual_weak_method\' can only be performed at runtime"}
}
},
},
["note_constexpr_memchr_unsupported"]={
["note_constexpr_memchr_unsupported"]={
[f]="constant evaluation of A on array of type B is not supported; only arrays of narrow character types can be searched",
[b]="constant evaluation of A on array of type B is not supported; only arrays of narrow character types can be searched",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="constant evaluation of %0 on array of type %1 is not supported; only arrays of narrow character types can be searched",
[h]="constant evaluation of %0 on array of type %1 is not supported; only arrays of narrow character types can be searched",
[g]=b,
[j]=i,
[e]="constant evaluation of (.*?) on array of type (.*?) is not supported; only arrays of narrow character types can be searched",
[k]="constant evaluation of (.*?) on array of type (.*?) is not supported; only arrays of narrow character types can be searched",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={fc,1579695612,nc},
[m]={Fc,1579695612,Qc},
[n]={{p,9346,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemchr: {\n    // Give up on byte-oriented matching against multibyte elements.\n    // FIXME: We can compare the bytes in the correct order.\n    if (IsRawByte && !isOneByteCharacterType(CharTy)) {\n      Info.FFDiag(E, diag::note_constexpr_memchr_unsupported) << (\"\'\" + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + \"\'\").str() << CharTy;"}}
[n]={{q,9346,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemchr: {\n    // Give up on byte-oriented matching against multibyte elements.\n    // FIXME: We can compare the bytes in the correct order.\n    if (IsRawByte && !isOneByteCharacterType(CharTy)) {\n      Info.FFDiag(E, diag::note_constexpr_memchr_unsupported) << (\"\'\" + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + \"\'\").str() << CharTy;"}},
[o]={
[xb]={"SemaCXX/constexpr-string.cpp:416:17: note: constant evaluation of \'__builtin_memchr\' on array of type \'E\' is not supported; only arrays of narrow character types can be searched","SemaCXX/constexpr-string.cpp:420:39: note: constant evaluation of \'__builtin_memchr\' on array of type \'const bool\' is not supported; only arrays of narrow character types can be searched","SemaCXX/constexpr-string.cpp:421:39: note: constant evaluation of \'__builtin_memchr\' on array of type \'const bool\' is not supported; only arrays of narrow character types can be searched","SemaCXX/constexpr-string.cpp:422:39: note: constant evaluation of \'__builtin_memchr\' on array of type \'const bool\' is not supported; only arrays of narrow character types can be searched","SemaCXX/constexpr-string.cpp:423:39: note: constant evaluation of \'__builtin_memchr\' on array of type \'const bool\' is not supported; only arrays of narrow character types can be searched"}
}
},
},
["note_constexpr_memcmp_unsupported"]={
["note_constexpr_memcmp_unsupported"]={
[f]="constant evaluation of A between arrays of types B and C is not supported; only arrays of narrow character types can be compared",
[b]="constant evaluation of A between arrays of types B and C is not supported; only arrays of narrow character types can be compared",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="constant evaluation of %0 between arrays of types %1 and %2 is not supported; only arrays of narrow character types can be compared",
[h]="constant evaluation of %0 between arrays of types %1 and %2 is not supported; only arrays of narrow character types can be compared",
[g]=b,
[j]=i,
[e]="constant evaluation of (.*?) between arrays of types (.*?) and (.*?) is not supported; only arrays of narrow character types can be compared",
[k]="constant evaluation of (.*?) between arrays of types (.*?) and (.*?) is not supported; only arrays of narrow character types can be compared",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={fc,1579695612,nc},
[m]={Fc,1579695612,Qc},
[n]={{p,12366,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemcmp: {\n    // For memcmp, allow comparing any arrays of \'[[un]signed] char\' or\n    // \'char8_t\', but no other types.\n    if (IsRawByte && !(isOneByteCharacterType(CharTy1) && isOneByteCharacterType(CharTy2))) {\n      Info.FFDiag(E, diag::note_constexpr_memcmp_unsupported) << (\"\'\" + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + \"\'\").str() << CharTy1 << CharTy2;"}}
[n]={{q,12366,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemcmp: {\n    // For memcmp, allow comparing any arrays of \'[[un]signed] char\' or\n    // \'char8_t\', but no other types.\n    if (IsRawByte && !(isOneByteCharacterType(CharTy1) && isOneByteCharacterType(CharTy2))) {\n      Info.FFDiag(E, diag::note_constexpr_memcmp_unsupported) << (\"\'\" + Info.Ctx.BuiltinInfo.getName(BuiltinOp) + \"\'\").str() << CharTy1 << CharTy2;"}},
[o]={
[xb]={"SemaCXX/constexpr-string.cpp:138:17: note: constant evaluation of \'__builtin_memcmp\' between arrays of types \'struct Incomplete\' and \'const char\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:139:17: note: constant evaluation of \'__builtin_memcmp\' between arrays of types \'const char\' and \'struct Incomplete\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:143:17: note: constant evaluation of \'__builtin_bcmp\' between arrays of types \'struct Incomplete\' and \'const char\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:144:17: note: constant evaluation of \'__builtin_bcmp\' between arrays of types \'const char\' and \'struct Incomplete\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:172:39: note: constant evaluation of \'__builtin_memcmp\' between arrays of types \'const signed char\' and \'const bool\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:173:39: note: constant evaluation of \'__builtin_memcmp\' between arrays of types \'const signed char\' and \'const bool\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:175:39: note: constant evaluation of \'__builtin_bcmp\' between arrays of types \'const signed char\' and \'const bool\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:176:39: note: constant evaluation of \'__builtin_bcmp\' between arrays of types \'const signed char\' and \'const bool\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:190:17: note: constant evaluation of \'__builtin_memcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:191:17: note: constant evaluation of \'__builtin_memcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:192:17: note: constant evaluation of \'__builtin_memcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:193:17: note: constant evaluation of \'__builtin_memcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:194:17: note: constant evaluation of \'__builtin_memcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:195:17: note: constant evaluation of \'__builtin_memcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:196:17: note: constant evaluation of \'__builtin_memcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:197:17: note: constant evaluation of \'__builtin_memcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:198:17: note: constant evaluation of \'__builtin_memcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:200:17: note: constant evaluation of \'__builtin_bcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:201:17: note: constant evaluation of \'__builtin_bcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:202:17: note: constant evaluation of \'__builtin_bcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:203:17: note: constant evaluation of \'__builtin_bcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:204:17: note: constant evaluation of \'__builtin_bcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:205:17: note: constant evaluation of \'__builtin_bcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:206:17: note: constant evaluation of \'__builtin_bcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:207:17: note: constant evaluation of \'__builtin_bcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared","SemaCXX/constexpr-string.cpp:208:17: note: constant evaluation of \'__builtin_bcmp\' between arrays of types \'const long\' and \'const unsigned int\' is not supported; only arrays of narrow character types can be compared"}
}
},
},
["note_constexpr_memcpy_incomplete_type"]={
["note_constexpr_memcpy_incomplete_type"]={
[f]="cannot constant evaluate \'...\' between objects of incomplete type A",
[b]="cannot constant evaluate \'...\' between objects of incomplete type A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot constant evaluate \'%select{memcpy|memmove}0\' between objects of incomplete type %1",
[h]="cannot constant evaluate \'%select{memcpy|memmove}0\' between objects of incomplete type %1",
[g]=b,
[j]=i,
[e]="cannot constant evaluate \'(?:memcpy|memmove)\' between objects of incomplete type (.*?)",
[k]="cannot constant evaluate \'(?:memcpy|memmove)\' between objects of incomplete type (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"ed083f2c1f56",1538645144,"[constexpr] Fix ICE when memcpy() is given a pointer to an incomplete array"},
[m]={"ed083f2c1f56",1538645144,"[constexpr] Fix ICE when memcpy() is given a pointer to an incomplete array"},
[n]={{p,9471,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    if (T->isIncompleteType()) {\n      Info.FFDiag(E, diag::note_constexpr_memcpy_incomplete_type) << Move << T;"}}
[n]={{q,9471,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    if (T->isIncompleteType()) {\n      Info.FFDiag(E, diag::note_constexpr_memcpy_incomplete_type) << Move << T;"}},
[o]={
[xb]={"SemaCXX/constexpr-string.cpp:663:5: note: cannot constant evaluate \'memmove\' between objects of incomplete type \'int[]\'","SemaCXX/constexpr-string.cpp:663:5: note: cannot constant evaluate \'memmove\' between objects of incomplete type \'int[]\'","SemaCXX/constexpr-string.cpp:673:5: note: cannot constant evaluate \'memcpy\' between objects of incomplete type \'Incomplete\'","SemaCXX/constexpr-string.cpp:673:5: note: cannot constant evaluate \'memcpy\' between objects of incomplete type \'Incomplete\'"}
}
},
},
["note_constexpr_memcpy_nontrivial"]={
["note_constexpr_memcpy_nontrivial"]={
[f]="cannot constant evaluate \'...\' between objects of non-trivially-copyable type A",
[b]="cannot constant evaluate \'...\' between objects of non-trivially-copyable type A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot constant evaluate \'%select{memcpy|memmove}0\' between objects of non-trivially-copyable type %1",
[h]="cannot constant evaluate \'%select{memcpy|memmove}0\' between objects of non-trivially-copyable type %1",
[g]=b,
[j]=i,
[e]="cannot constant evaluate \'(?:memcpy|memmove)\' between objects of non\\-trivially\\-copyable type (.*?)",
[k]="cannot constant evaluate \'(?:memcpy|memmove)\' between objects of non\\-trivially\\-copyable type (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"96beffba15bc",1533080109,"[constexpr] Support for constant evaluation of __builtin_memcpy and"},
[m]={"96beffba15bc",1533080109,"[constexpr] Support for constant evaluation of __builtin_memcpy and"},
[n]={{p,9475,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    if (!T.isTriviallyCopyableType(Info.Ctx)) {\n      Info.FFDiag(E, diag::note_constexpr_memcpy_nontrivial) << Move << T;"}}
[n]={{q,9475,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    if (!T.isTriviallyCopyableType(Info.Ctx)) {\n      Info.FFDiag(E, diag::note_constexpr_memcpy_nontrivial) << Move << T;"}},
[o]={
[xb]={"SemaCXX/constexpr-string.cpp:606:5: note: cannot constant evaluate \'memcpy\' between objects of non-trivially-copyable type \'NonTrivial\'","SemaCXX/constexpr-string.cpp:606:5: note: cannot constant evaluate \'memcpy\' between objects of non-trivially-copyable type \'NonTrivial\'","SemaCXX/constexpr-string.cpp:612:5: note: cannot constant evaluate \'memcpy\' between objects of non-trivially-copyable type \'NonTrivial\'","SemaCXX/constexpr-string.cpp:612:5: note: cannot constant evaluate \'memcpy\' between objects of non-trivially-copyable type \'NonTrivial\'"}
}
},
},
["note_constexpr_memcpy_null"]={
["note_constexpr_memcpy_null"]={
[f]="... of \'...\' is A",
[b]="... of \'...\' is A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{source|destination}2 of \'%select{%select{memcpy|wmemcpy}1|%select{memmove|wmemmove}1}0\' is %3",
[h]="%select{source|destination}2 of \'%select{%select{memcpy|wmemcpy}1|%select{memmove|wmemmove}1}0\' is %3",
[g]=b,
[j]=i,
[e]="(?:source|destination) of \'(?:(?:memcpy|wmemcpy)|(?:memmove|wmemmove))\' is (.*?)",
[k]="(?:source|destination) of \'(?:(?:memcpy|wmemcpy)|(?:memmove|wmemmove))\' is (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"128719c4fe7c",1536878853,"Fix crash on call to __builtin_memcpy with a null pointer to an"},
[m]={"128719c4fe7c",1536878853,"Fix crash on call to __builtin_memcpy with a null pointer to an"},
[n]={{p,9452,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    // Otherwise, if either of the operands is null, we can\'t proceed. Don\'t\n    // try to determine the type of the copied objects, because there aren\'t\n    // any.\n    if (!Src.Base || !Dest.Base) {\n      Info.FFDiag(E, diag::note_constexpr_memcpy_null) << Move << WChar << !!Src.Base << Val.getAsString(Info.Ctx, E->getArg(0)->getType());"}}
[n]={{q,9452,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    // Otherwise, if either of the operands is null, we can\'t proceed. Don\'t\n    // try to determine the type of the copied objects, because there aren\'t\n    // any.\n    if (!Src.Base || !Dest.Base) {\n      Info.FFDiag(E, diag::note_constexpr_memcpy_null) << Move << WChar << !!Src.Base << Val.getAsString(Info.Ctx, E->getArg(0)->getType());"}},
[o]={
[xb]={"SemaCXX/constexpr-string.cpp:575:17: note: source of \'memcpy\' is nullptr","SemaCXX/constexpr-string.cpp:576:17: note: source of \'memmove\' is nullptr","SemaCXX/constexpr-string.cpp:577:17: note: source of \'wmemcpy\' is nullptr","SemaCXX/constexpr-string.cpp:578:17: note: source of \'wmemmove\' is nullptr","SemaCXX/constexpr-string.cpp:579:17: note: destination of \'memcpy\' is nullptr","SemaCXX/constexpr-string.cpp:580:17: note: destination of \'memmove\' is nullptr","SemaCXX/constexpr-string.cpp:581:17: note: destination of \'wmemcpy\' is nullptr","SemaCXX/constexpr-string.cpp:582:17: note: destination of \'wmemmove\' is nullptr","SemaCXX/constexpr-string.cpp:583:17: note: source of \'memcpy\' is (void *)123","SemaCXX/constexpr-string.cpp:584:17: note: destination of \'memcpy\' is (void *)123","SemaCXX/constexpr-string.cpp:586:17: note: source of \'memcpy\' is nullptr"}
}
},
},
["note_constexpr_memcpy_overlap"]={
["note_constexpr_memcpy_overlap"]={
[f]="\'...\' between overlapping memory regions",
[b]="\'...\' between overlapping memory regions",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="\'%select{memcpy|wmemcpy}0\' between overlapping memory regions",
[h]="\'%select{memcpy|wmemcpy}0\' between overlapping memory regions",
[g]=b,
[j]=i,
[e]="\'(?:memcpy|wmemcpy)\' between overlapping memory regions",
[k]="\'(?:memcpy|wmemcpy)\' between overlapping memory regions",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"96beffba15bc",1533080109,"[constexpr] Support for constant evaluation of __builtin_memcpy and"},
[m]={"96beffba15bc",1533080109,"[constexpr] Support for constant evaluation of __builtin_memcpy and"},
[n]={{p,9515,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    if (HasSameBase(Src, Dest)) {\n      if (DestOffset >= SrcOffset && DestOffset - SrcOffset < NBytes) {\n        // Dest is inside the source region.\n        if (!Move) {\n          Info.FFDiag(E, diag::note_constexpr_memcpy_overlap) << WChar;"},{p,9526,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    if (HasSameBase(Src, Dest)) {\n      if (DestOffset >= SrcOffset && DestOffset - SrcOffset < NBytes) {\n      } else if (!Move && SrcOffset >= DestOffset && SrcOffset - DestOffset < NBytes) {\n        Info.FFDiag(E, diag::note_constexpr_memcpy_overlap) << WChar;"}}
[n]={{q,9515,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    if (HasSameBase(Src, Dest)) {\n      if (DestOffset >= SrcOffset && DestOffset - SrcOffset < NBytes) {\n        // Dest is inside the source region.\n        if (!Move) {\n          Info.FFDiag(E, diag::note_constexpr_memcpy_overlap) << WChar;"},{q,9526,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    if (HasSameBase(Src, Dest)) {\n      if (DestOffset >= SrcOffset && DestOffset - SrcOffset < NBytes) {\n      } else if (!Move && SrcOffset >= DestOffset && SrcOffset - DestOffset < NBytes) {\n        Info.FFDiag(E, diag::note_constexpr_memcpy_overlap) << WChar;"}},
[o]={
[xb]={"SemaCXX/constexpr-string.cpp:504:5: note: \'memcpy\' between overlapping memory regions","SemaCXX/constexpr-string.cpp:504:5: note: \'memcpy\' between overlapping memory regions","SemaCXX/constexpr-string.cpp:521:5: note: \'wmemcpy\' between overlapping memory regions","SemaCXX/constexpr-string.cpp:521:5: note: \'wmemcpy\' between overlapping memory regions"}
}
},
},
["note_constexpr_memcpy_type_pun"]={
["note_constexpr_memcpy_type_pun"]={
[f]="cannot constant evaluate \'...\' from object of type A to object of type B",
[b]="cannot constant evaluate \'...\' from object of type A to object of type B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot constant evaluate \'%select{memcpy|memmove}0\' from object of type %1 to object of type %2",
[h]="cannot constant evaluate \'%select{memcpy|memmove}0\' from object of type %1 to object of type %2",
[g]=b,
[j]=i,
[e]="cannot constant evaluate \'(?:memcpy|memmove)\' from object of type (.*?) to object of type (.*?)",
[k]="cannot constant evaluate \'(?:memcpy|memmove)\' from object of type (.*?) to object of type (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"96beffba15bc",1533080109,"[constexpr] Support for constant evaluation of __builtin_memcpy and"},
[m]={"96beffba15bc",1533080109,"[constexpr] Support for constant evaluation of __builtin_memcpy and"},
[n]={{p,9467,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    if (!Info.Ctx.hasSameUnqualifiedType(T, SrcT)) {\n      Info.FFDiag(E, diag::note_constexpr_memcpy_type_pun) << Move << SrcT << T;"}}
[n]={{q,9467,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    if (!Info.Ctx.hasSameUnqualifiedType(T, SrcT)) {\n      Info.FFDiag(E, diag::note_constexpr_memcpy_type_pun) << Move << SrcT << T;"}},
[o]={
[xb]={"SemaCXX/constexpr-string.cpp:620:5: note: cannot constant evaluate \'memcpy\' from object of type \'const unsigned int\' to object of type \'float\'"}
}
},
},
["note_constexpr_memcpy_unsupported"]={
["note_constexpr_memcpy_unsupported"]={
[f]="\'...\' not supported: ...",
[b]="\'...\' not supported: ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="\'%select{%select{memcpy|wmemcpy}1|%select{memmove|wmemmove}1}0\' not supported: %select{size to copy (%4) is not a multiple of size of element type %3 (%5)|source is not a contiguous array of at least %4 elements of type %3|destination is not a contiguous array of at least %4 elements of type %3}2",
[h]="\'%select{%select{memcpy|wmemcpy}1|%select{memmove|wmemmove}1}0\' not supported: %select{size to copy (%4) is not a multiple of size of element type %3 (%5)|source is not a contiguous array of at least %4 elements of type %3|destination is not a contiguous array of at least %4 elements of type %3}2",
[g]=b,
[j]=i,
[e]="\'(?:(?:memcpy|wmemcpy)|(?:memmove|wmemmove))\' not supported\\: (?:size to copy \\((.*?)\\) is not a multiple of size of element type (.*?) \\((.*?)\\)|source is not a contiguous array of at least (.*?) elements of type (.*?)|destination is not a contiguous array of at least (.*?) elements of type (.*?))",
[k]="\'(?:(?:memcpy|wmemcpy)|(?:memmove|wmemmove))\' not supported\\: (?:size to copy \\((.*?)\\) is not a multiple of size of element type (.*?) \\((.*?)\\)|source is not a contiguous array of at least (.*?) elements of type (.*?)|destination is not a contiguous array of at least (.*?) elements of type (.*?))",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"96beffba15bc",1533080109,"[constexpr] Support for constant evaluation of __builtin_memcpy and"},
[m]={"96beffba15bc",1533080109,"[constexpr] Support for constant evaluation of __builtin_memcpy and"},
[n]={{p,9486,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    if (!WChar) {\n      if (Remainder) {\n        Info.FFDiag(E, diag::note_constexpr_memcpy_unsupported) << Move << WChar << 0 << T << toString(OrigN, 10, /*Signed*/ false) << (unsigned)TSize;"},{p,9499,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    if (N.ugt(RemainingSrcSize) || N.ugt(RemainingDestSize)) {\n      Info.FFDiag(E, diag::note_constexpr_memcpy_unsupported) << Move << WChar << (N.ugt(RemainingSrcSize) ? 1 : 2) << T << toString(N, 10, /*Signed*/ false);"}}
[n]={{q,9486,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    if (!WChar) {\n      if (Remainder) {\n        Info.FFDiag(E, diag::note_constexpr_memcpy_unsupported) << Move << WChar << 0 << T << toString(OrigN, 10, /*Signed*/ false) << (unsigned)TSize;"},{q,9499,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_wmemmove: {\n    if (N.ugt(RemainingSrcSize) || N.ugt(RemainingDestSize)) {\n      Info.FFDiag(E, diag::note_constexpr_memcpy_unsupported) << Move << WChar << (N.ugt(RemainingSrcSize) ? 1 : 2) << T << toString(N, 10, /*Signed*/ false);"}},
[o]={
[xb]={"SemaCXX/constexpr-string.cpp:504:5: note: \'memcpy\' not supported: size to copy (1) is not a multiple of size of element type \'int\' (4)","SemaCXX/constexpr-string.cpp:504:5: note: \'memcpy\' not supported: source is not a contiguous array of at least 2 elements of type \'int\'","SemaCXX/constexpr-string.cpp:504:5: note: \'memcpy\' not supported: destination is not a contiguous array of at least 3 elements of type \'int\'","SemaCXX/constexpr-string.cpp:513:5: note: \'memmove\' not supported: size to copy (1) is not a multiple of size of element type \'int\' (4)","SemaCXX/constexpr-string.cpp:513:5: note: \'memmove\' not supported: source is not a contiguous array of at least 2 elements of type \'int\'","SemaCXX/constexpr-string.cpp:513:5: note: \'memmove\' not supported: destination is not a contiguous array of at least 3 elements of type \'int\'","SemaCXX/constexpr-string.cpp:521:5: note: \'wmemcpy\' not supported: source is not a contiguous array of at least 2 elements of type \'wchar_t\' (aka \'unsigned int\')","SemaCXX/constexpr-string.cpp:521:5: note: \'wmemcpy\' not supported: destination is not a contiguous array of at least 3 elements of type \'wchar_t\' (aka \'unsigned int\')","SemaCXX/constexpr-string.cpp:529:5: note: \'wmemmove\' not supported: source is not a contiguous array of at least 2 elements of type \'wchar_t\' (aka \'unsigned int\')","SemaCXX/constexpr-string.cpp:529:5: note: \'wmemmove\' not supported: destination is not a contiguous array of at least 3 elements of type \'wchar_t\' (aka \'unsigned int\')","SemaCXX/constexpr-string.cpp:632:5: note: \'memcpy\' not supported: source is not a contiguous array of at least 2 elements of type \'MemcpyEtc::Base\'","SemaCXX/constexpr-string.cpp:654:5: note: \'memmove\' not supported: source is not a contiguous array of at least 4 elements of type \'int\'","SemaCXX/constexpr-string.cpp:654:5: note: \'memmove\' not supported: source is not a contiguous array of at least 4 elements of type \'int\'"}
}
},
},
["note_constexpr_memory_leak"]={
["note_constexpr_memory_leak"]={
[f]="allocation performed here was not deallocated",
[b]="allocation performed here was not deallocated",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="allocation performed here was not deallocated%plural{0:|: (along with %0 other memory leak%s0)}0",
[h]="allocation performed here was not deallocated%plural{0:|: (along with %0 other memory leak%s0)}0",
[g]=b,
[j]=i,
[e]="allocation performed here was not deallocated(?:| \\(along with (.*?) other memory leak(.*?)\\))",
[k]="allocation performed here was not deallocated(?:| \\(along with (.*?) other memory leak(.*?)\\))",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,2502,"/// Enforce C++2a [expr.const]/4.17, which disallows new-expressions unless\n/// \"the allocated storage is deallocated within the evaluation\".\nstatic bool CheckMemoryLeaks(EvalInfo &Info) {\n  if (!Info.HeapAllocs.empty()) {\n    Info.CCEDiag(Info.HeapAllocs.begin()->second.AllocExpr, diag::note_constexpr_memory_leak) << unsigned(Info.HeapAllocs.size() - 1);"}}
[n]={{q,2502,"/// Enforce C++2a [expr.const]/4.17, which disallows new-expressions unless\n/// \"the allocated storage is deallocated within the evaluation\".\nstatic bool CheckMemoryLeaks(EvalInfo &Info) {\n  if (!Info.HeapAllocs.empty()) {\n    Info.CCEDiag(Info.HeapAllocs.begin()->second.AllocExpr, diag::note_constexpr_memory_leak) << unsigned(Info.HeapAllocs.size() - 1);"}},
[o]={
["clang/test/SemaCXX/static-assert-cxx26.cpp"]={"clang/test/SemaCXX/static-assert-cxx26.cpp:121:16: note: allocation performed here was not deallocated"}
}
},
},
["note_constexpr_modify_const_type"]={
["note_constexpr_modify_const_type"]={
[f]="modification of object of const-qualified type A is not allowed in a constant expression",
[b]="modification of object of const-qualified type A is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="modification of object of const-qualified type %0 is not allowed in a constant expression",
[h]="modification of object of const-qualified type %0 is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="modification of object of const\\-qualified type (.*?) is not allowed in a constant expression",
[k]="modification of object of const\\-qualified type (.*?) is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={xb,1366986990,sb},
[m]={Gb,1366986990,Fb},
[n]={{p,3896,"struct ModifySubobjectHandler {\n  bool checkConst(QualType QT) {\n    // Assigning to a const object has undefined behavior.\n    if (QT.isConstQualified()) {\n      Info.FFDiag(E, diag::note_constexpr_modify_const_type) << QT;"},{p,4385,"struct CompoundAssignSubobjectHandler {\n  bool checkConst(QualType QT) {\n    // Assigning to a const object has undefined behavior.\n    if (QT.isConstQualified()) {\n      Info.FFDiag(E, diag::note_constexpr_modify_const_type) << QT;"},{p,4527,"struct IncDecSubobjectHandler {\n  bool checkConst(QualType QT) {\n    // Assigning to a const object has undefined behavior.\n    if (QT.isConstQualified()) {\n      Info.FFDiag(E, diag::note_constexpr_modify_const_type) << QT;"},{w,219,"bool CheckConst(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  S.FFDiag(Loc, diag::note_constexpr_modify_const_type) << Ty;"}}
[n]={{q,3896,"struct ModifySubobjectHandler {\n  bool checkConst(QualType QT) {\n    // Assigning to a const object has undefined behavior.\n    if (QT.isConstQualified()) {\n      Info.FFDiag(E, diag::note_constexpr_modify_const_type) << QT;"},{q,4385,"struct CompoundAssignSubobjectHandler {\n  bool checkConst(QualType QT) {\n    // Assigning to a const object has undefined behavior.\n    if (QT.isConstQualified()) {\n      Info.FFDiag(E, diag::note_constexpr_modify_const_type) << QT;"},{q,4527,"struct IncDecSubobjectHandler {\n  bool checkConst(QualType QT) {\n    // Assigning to a const object has undefined behavior.\n    if (QT.isConstQualified()) {\n      Info.FFDiag(E, diag::note_constexpr_modify_const_type) << QT;"},{A,219,"bool CheckConst(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  S.FFDiag(Loc, diag::note_constexpr_modify_const_type) << Ty;"}},
[o]={
["clang/test/SemaCXX/constant-expression-cxx14.cpp"]={"clang/test/SemaCXX/constant-expression-cxx14.cpp:257:43: note: modification of object of const-qualified type \'const int\' is not allowed in a constant expression","clang/test/SemaCXX/constant-expression-cxx14.cpp:257:43: note: modification of object of const-qualified type \'const int\' is not allowed in a constant expression","clang/test/SemaCXX/constant-expression-cxx14.cpp:1212:30: note: modification of object of const-qualified type \'const int\' is not allowed in a constant expression"}
}
},
},
["note_constexpr_modify_global"]={
["note_constexpr_modify_global"]={
[f]="a constant expression cannot modify an object that is visible outside that expression",
[b]="a constant expression cannot modify an object that is visible outside that expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="a constant expression cannot modify an object that is visible outside that expression",
[h]="a constant expression cannot modify an object that is visible outside that expression",
[g]=b,
[j]=i,
[e]="a constant expression cannot modify an object that is visible outside that expression",
[k]="a constant expression cannot modify an object that is visible outside that expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={xb,1366986990,sb},
[m]={Gb,1366986990,Fb},
[n]={{p,4055,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Allow reading from a GUID declaration.\n    if (auto *GD = dyn_cast<MSGuidDecl>(D)) {\n      if (isModification(AK)) {\n        Info.FFDiag(E, diag::note_constexpr_modify_global);"},{p,4070,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Allow reading the APValue from an UnnamedGlobalConstantDecl.\n    if (auto *GCD = dyn_cast<UnnamedGlobalConstantDecl>(D)) {\n      if (isModification(AK)) {\n        Info.FFDiag(E, diag::note_constexpr_modify_global);"},{p,4080,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Allow reading from template parameter objects.\n    if (auto *TPO = dyn_cast<TemplateParamObjectDecl>(D)) {\n      if (isModification(AK)) {\n        Info.FFDiag(E, diag::note_constexpr_modify_global);"},{p,4120,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n        Info.FFDiag(E, diag::note_constexpr_modify_global);"},{w,117,"static bool CheckGlobal(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  if (auto ID = Ptr.getDeclID()) {\n    S.FFDiag(S.Current->getLocation(OpPC), diag::note_constexpr_modify_global);"}}
[n]={{q,4055,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Allow reading from a GUID declaration.\n    if (auto *GD = dyn_cast<MSGuidDecl>(D)) {\n      if (isModification(AK)) {\n        Info.FFDiag(E, diag::note_constexpr_modify_global);"},{q,4070,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Allow reading the APValue from an UnnamedGlobalConstantDecl.\n    if (auto *GCD = dyn_cast<UnnamedGlobalConstantDecl>(D)) {\n      if (isModification(AK)) {\n        Info.FFDiag(E, diag::note_constexpr_modify_global);"},{q,4080,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Allow reading from template parameter objects.\n    if (auto *TPO = dyn_cast<TemplateParamObjectDecl>(D)) {\n      if (isModification(AK)) {\n        Info.FFDiag(E, diag::note_constexpr_modify_global);"},{q,4120,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n        Info.FFDiag(E, diag::note_constexpr_modify_global);"},{A,117,"static bool CheckGlobal(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  if (auto ID = Ptr.getDeclID()) {\n    S.FFDiag(S.Current->getLocation(OpPC), diag::note_constexpr_modify_global);"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:447:14: note: a constant expression cannot modify an object that is visible outside that expression","clang/test/CXX/expr/expr.const/p2-0x.cpp:472:13: note: a constant expression cannot modify an object that is visible outside that expression","clang/test/CXX/expr/expr.const/p2-0x.cpp:473:13: note: a constant expression cannot modify an object that is visible outside that expression","clang/test/CXX/expr/expr.const/p2-0x.cpp:592:16: note: a constant expression cannot modify an object that is visible outside that expression","clang/test/CXX/expr/expr.const/p2-0x.cpp:593:16: note: a constant expression cannot modify an object that is visible outside that expression"}
}
},
},
["note_constexpr_negative_shift"]={
["note_constexpr_negative_shift"]={
[f]="negative shift count A",
[b]="negative shift count A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="negative shift count %0",
[h]="negative shift count %0",
[g]=b,
[j]=i,
[e]="negative shift count (.*?)",
[k]="negative shift count (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"fe800031ec14",1327982900,"constexpr: catch a collection of integral undefined behaviors:"},
[m]={"fe800031ec14",1327982900,"constexpr: catch a collection of integral undefined behaviors:"},
[n]={{p,2825,"/// Perform the given binary integer operation.\nstatic bool handleIntIntBinOp(EvalInfo &Info, const Expr *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result) {\n  case BO_Shl: {\n    if (Info.getLangOpts().OpenCL)\n    else if (RHS.isSigned() && RHS.isNegative()) {\n      Info.CCEDiag(E, diag::note_constexpr_negative_shift) << RHS;"},{p,2858,"/// Perform the given binary integer operation.\nstatic bool handleIntIntBinOp(EvalInfo &Info, const Expr *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result) {\n  case BO_Shr: {\n    if (Info.getLangOpts().OpenCL)\n    else if (RHS.isSigned() && RHS.isNegative()) {\n      Info.CCEDiag(E, diag::note_constexpr_negative_shift) << RHS;"},{p,14044,"bool FixedPointExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  case BO_Shr: {\n    // Embedded-C 4.1.6.2.2:\n    //  The right operand must be nonnegative and less than the total number\n    //  of (nonpadding) bits of the fixed-point operand ...\n    if (RHSVal.isNegative())\n      Info.CCEDiag(E, diag::note_constexpr_negative_shift) << RHSVal;"}}
[n]={{q,2825,"/// Perform the given binary integer operation.\nstatic bool handleIntIntBinOp(EvalInfo &Info, const Expr *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result) {\n  case BO_Shl: {\n    if (Info.getLangOpts().OpenCL)\n    else if (RHS.isSigned() && RHS.isNegative()) {\n      Info.CCEDiag(E, diag::note_constexpr_negative_shift) << RHS;"},{q,2858,"/// Perform the given binary integer operation.\nstatic bool handleIntIntBinOp(EvalInfo &Info, const Expr *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result) {\n  case BO_Shr: {\n    if (Info.getLangOpts().OpenCL)\n    else if (RHS.isSigned() && RHS.isNegative()) {\n      Info.CCEDiag(E, diag::note_constexpr_negative_shift) << RHS;"},{q,14044,"bool FixedPointExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  case BO_Shr: {\n    // Embedded-C 4.1.6.2.2:\n    //  The right operand must be nonnegative and less than the total number\n    //  of (nonpadding) bits of the fixed-point operand ...\n    if (RHSVal.isNegative())\n      Info.CCEDiag(E, diag::note_constexpr_negative_shift) << RHSVal;"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:155:28: note: negative shift count -1","clang/test/CXX/expr/expr.const/p2-0x.cpp:171:28: note: negative shift count -1"}
}
},
},
["note_constexpr_new"]={
["note_constexpr_new"]={
[f]="dynamic memory allocation is not permitted in constant expressions until C++20",
[b]="dynamic memory allocation is not permitted in constant expressions until C++20",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="dynamic memory allocation is not permitted in constant expressions until C++20",
[h]="dynamic memory allocation is not permitted in constant expressions until C++20",
[g]=b,
[j]=i,
[e]="dynamic memory allocation is not permitted in constant expressions until C\\+\\+20",
[k]="dynamic memory allocation is not permitted in constant expressions until C\\+\\+20",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,6716,"/// Perform a call to \'perator new\' or to `__builtin_operator_new\'.\nstatic bool HandleOperatorNewCall(EvalInfo &Info, const CallExpr *E, LValue &Result) {\n  if (!Caller) {\n    Info.FFDiag(E->getExprLoc(), Info.getLangOpts().CPlusPlus20 ? diag::note_constexpr_new_untyped : diag::note_constexpr_new);"},{p,9563,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (!Info.getLangOpts().CPlusPlus20)\n    Info.CCEDiag(E, diag::note_constexpr_new);"},{p,15015,"bool VoidExprEvaluator::VisitCXXDeleteExpr(const CXXDeleteExpr *E) {\n  // Deleting a null pointer has no effect.\n  if (Pointer.isNullPointer()) {\n    // This is the only case where we need to produce an extension warning:\n    // the only other way we can succeed is if we find a dynamic allocation,\n    // and we will have warned when we allocated it in that case.\n    if (!Info.getLangOpts().CPlusPlus20)\n      Info.CCEDiag(E, diag::note_constexpr_new);"}}
[n]={{q,6716,"/// Perform a call to \'perator new\' or to `__builtin_operator_new\'.\nstatic bool HandleOperatorNewCall(EvalInfo &Info, const CallExpr *E, LValue &Result) {\n  if (!Caller) {\n    Info.FFDiag(E->getExprLoc(), Info.getLangOpts().CPlusPlus20 ? diag::note_constexpr_new_untyped : diag::note_constexpr_new);"},{q,9563,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (!Info.getLangOpts().CPlusPlus20)\n    Info.CCEDiag(E, diag::note_constexpr_new);"},{q,15015,"bool VoidExprEvaluator::VisitCXXDeleteExpr(const CXXDeleteExpr *E) {\n  // Deleting a null pointer has no effect.\n  if (Pointer.isNullPointer()) {\n    // This is the only case where we need to produce an extension warning:\n    // the only other way we can succeed is if we find a dynamic allocation,\n    // and we will have warned when we allocated it in that case.\n    if (!Info.getLangOpts().CPlusPlus20)\n      Info.CCEDiag(E, diag::note_constexpr_new);"}},
[o]={
["clang/test/SemaCXX/builtin-object-size-cxx14.cpp"]={"clang/test/SemaCXX/builtin-object-size-cxx14.cpp:119:13: note: dynamic memory allocation is not permitted in constant expressions until C++20"}
}
},
},
["note_constexpr_new_delete_mismatch"]={
["note_constexpr_new_delete_mismatch"]={
[f]="\'delete\' used to delete pointer to object allocated with \'std::allocator<...>::allocate\'",
[b]="\'delete\' used to delete pointer to object allocated with \'std::allocator<...>::allocate\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%plural{2:\'delete\' used to delete pointer to object allocated with \'std::allocator<...>::allocate\'|:%select{non-array delete|array delete|\'std::allocator<...>::deallocate\'}0 used to delete pointer to %select{array object of type %2|non-array object of type %2|object allocated with \'new\'}0}1",
[h]="%plural{2:\'delete\' used to delete pointer to object allocated with \'std::allocator<...>::allocate\'|:%select{non-array delete|array delete|\'std::allocator<...>::deallocate\'}0 used to delete pointer to %select{array object of type %2|non-array object of type %2|object allocated with \'new\'}0}1",
[g]=b,
[j]=i,
[e]="(?:\'delete\' used to delete pointer to object allocated with \'std\\:\\:allocator\\<\\.\\.\\.\\>\\:\\:allocate\'|(?:non\\-array delete|array delete|\'std\\:\\:allocator\\<\\.\\.\\.\\>\\:\\:deallocate\') used to delete pointer to (?:array object of type (.*?)|non\\-array object of type (.*?)|object allocated with \'new\'))",
[k]="(?:\'delete\' used to delete pointer to object allocated with \'std\\:\\:allocator\\<\\.\\.\\.\\>\\:\\:allocate\'|(?:non\\-array delete|array delete|\'std\\:\\:allocator\\<\\.\\.\\.\\>\\:\\:deallocate\') used to delete pointer to (?:array object of type (.*?)|non\\-array object of type (.*?)|object allocated with \'new\'))",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,6811,"/// Check that the given object is a suitable pointer to a heap allocation that\n/// still exists and is of the right kind for the purpose of a deletion.\n///\n/// On success, returns the heap allocation to deallocate. On failure, produces\n/// a diagnostic and returns std::nullopt.\nstatic std::optional<DynAlloc *> CheckDeleteKind(EvalInfo &Info, const Expr *E, const LValue &Pointer, DynAlloc::Kind DeallocKind) {\n  if (DeallocKind != (*Alloc)->getKind()) {\n    Info.FFDiag(E, diag::note_constexpr_new_delete_mismatch) << DeallocKind << (*Alloc)->getKind() << AllocType;"}}
[n]={{q,6811,"/// Check that the given object is a suitable pointer to a heap allocation that\n/// still exists and is of the right kind for the purpose of a deletion.\n///\n/// On success, returns the heap allocation to deallocate. On failure, produces\n/// a diagnostic and returns std::nullopt.\nstatic std::optional<DynAlloc *> CheckDeleteKind(EvalInfo &Info, const Expr *E, const LValue &Pointer, DynAlloc::Kind DeallocKind) {\n  if (DeallocKind != (*Alloc)->getKind()) {\n    Info.FFDiag(E, diag::note_constexpr_new_delete_mismatch) << DeallocKind << (*Alloc)->getKind() << AllocType;"}},
[o]={
[zb]={"clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:20:7: note: \'std::allocator<...>::deallocate\' used to delete pointer to object allocated with \'new\'","clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:20:7: note: \'std::allocator<...>::deallocate\' used to delete pointer to object allocated with \'new\'","clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:66:5: note: \'delete\' used to delete pointer to object allocated with \'std::allocator<...>::allocate\'","clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:69:5: note: \'delete\' used to delete pointer to object allocated with \'std::allocator<...>::allocate\'"}
}
},
},
["note_constexpr_new_negative"]={
["note_constexpr_new_negative"]={
[f]="cannot allocate array; evaluated array bound A is negative",
[b]="cannot allocate array; evaluated array bound A is negative",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot allocate array; evaluated array bound %0 is negative",
[h]="cannot allocate array; evaluated array bound %0 is negative",
[g]=b,
[j]=i,
[e]="cannot allocate array; evaluated array bound (.*?) is negative",
[k]="cannot allocate array; evaluated array bound (.*?) is negative",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,9633,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (std::optional<const Expr *> ArraySize = E->getArraySize()) {\n    // C++ [expr.new]p9:\n    //  The expression is erroneous if:\n    //  -- [...] its value before converting to size_t [or] applying the\n    //      second standard conversion sequence is less than zero\n    if (ArrayBound.isSigned() && ArrayBound.isNegative()) {\n      Info.FFDiag(*ArraySize, diag::note_constexpr_new_negative) << ArrayBound << (*ArraySize)->getSourceRange();"}}
[n]={{q,9633,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (std::optional<const Expr *> ArraySize = E->getArraySize()) {\n    // C++ [expr.new]p9:\n    //  The expression is erroneous if:\n    //  -- [...] its value before converting to size_t [or] applying the\n    //      second standard conversion sequence is less than zero\n    if (ArrayBound.isSigned() && ArrayBound.isNegative()) {\n      Info.FFDiag(*ArraySize, diag::note_constexpr_new_negative) << ArrayBound << (*ArraySize)->getSourceRange();"}},
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:888:22: note: cannot allocate array; evaluated array bound -1 is negative"}
}
},
},
["note_constexpr_new_non_replaceable"]={
["note_constexpr_new_non_replaceable"]={
[f]="call to ... A",
[b]="call to ... A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="call to %select{placement|class-specific}0 %1",
[h]="call to %select{placement|class-specific}0 %1",
[g]=b,
[j]=i,
[e]="call to (?:placement|class\\-specific) (.*?)",
[k]="call to (?:placement|class\\-specific) (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,9583,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (OperatorNew->isReservedGlobalPlacementOperator() && Info.CurrentCall->isStdFunction() && !E->isArray()) {\n  } else if (!OperatorNew->isReplaceableGlobalAllocationFunction()) {\n    Info.FFDiag(E, diag::note_constexpr_new_non_replaceable) << isa<CXXMethodDecl>(OperatorNew) << OperatorNew;"},{p,14996,"bool VoidExprEvaluator::VisitCXXDeleteExpr(const CXXDeleteExpr *E) {\n  if (!OperatorDelete->isReplaceableGlobalAllocationFunction()) {\n    Info.FFDiag(E, diag::note_constexpr_new_non_replaceable) << isa<CXXMethodDecl>(OperatorDelete) << OperatorDelete;"},{p,15040,"bool VoidExprEvaluator::VisitCXXDeleteExpr(const CXXDeleteExpr *E) {\n  // For a class type with a virtual destructor, the selected operator delete\n  // is the one looked up when building the destructor.\n  if (!E->isArrayForm() && !E->isGlobalDelete()) {\n    if (VirtualDelete && !VirtualDelete->isReplaceableGlobalAllocationFunction()) {\n      Info.FFDiag(E, diag::note_constexpr_new_non_replaceable) << isa<CXXMethodDecl>(VirtualDelete) << VirtualDelete;"}}
[n]={{q,9583,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (OperatorNew->isReservedGlobalPlacementOperator() && Info.CurrentCall->isStdFunction() && !E->isArray()) {\n  } else if (!OperatorNew->isReplaceableGlobalAllocationFunction()) {\n    Info.FFDiag(E, diag::note_constexpr_new_non_replaceable) << isa<CXXMethodDecl>(OperatorNew) << OperatorNew;"},{q,14996,"bool VoidExprEvaluator::VisitCXXDeleteExpr(const CXXDeleteExpr *E) {\n  if (!OperatorDelete->isReplaceableGlobalAllocationFunction()) {\n    Info.FFDiag(E, diag::note_constexpr_new_non_replaceable) << isa<CXXMethodDecl>(OperatorDelete) << OperatorDelete;"},{q,15040,"bool VoidExprEvaluator::VisitCXXDeleteExpr(const CXXDeleteExpr *E) {\n  // For a class type with a virtual destructor, the selected operator delete\n  // is the one looked up when building the destructor.\n  if (!E->isArrayForm() && !E->isGlobalDelete()) {\n    if (VirtualDelete && !VirtualDelete->isReplaceableGlobalAllocationFunction()) {\n      Info.FFDiag(E, diag::note_constexpr_new_non_replaceable) << isa<CXXMethodDecl>(VirtualDelete) << VirtualDelete;"}},
[o]={
[zb]={"clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:95:3: note: call to placement \'operator new\'"}
}
},
},
["note_constexpr_new_not_complete_object_type"]={
["note_constexpr_new_not_complete_object_type"]={
[f]="cannot allocate memory of ... type A",
[b]="cannot allocate memory of ... type A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot allocate memory of %select{incomplete|function}0 type %1",
[h]="cannot allocate memory of %select{incomplete|function}0 type %1",
[g]=b,
[j]=i,
[e]="cannot allocate memory of (?:incomplete|function) type (.*?)",
[k]="cannot allocate memory of (?:incomplete|function) type (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"19ad5239713c",1570063173,"For P0784R7: allow direct calls to operator new / operator delete from"},
[m]={"19ad5239713c",1570063173,"For P0784R7: allow direct calls to operator new / operator delete from"},
[n]={{p,6723,"/// Perform a call to \'perator new\' or to `__builtin_operator_new\'.\nstatic bool HandleOperatorNewCall(EvalInfo &Info, const CallExpr *E, LValue &Result) {\n  if (ElemType->isIncompleteType() || ElemType->isFunctionType()) {\n    Info.FFDiag(E->getExprLoc(), diag::note_constexpr_new_not_complete_object_type) << (ElemType->isIncompleteType() ? 0 : 1) << ElemType;"}}
[n]={{q,6723,"/// Perform a call to \'perator new\' or to `__builtin_operator_new\'.\nstatic bool HandleOperatorNewCall(EvalInfo &Info, const CallExpr *E, LValue &Result) {\n  if (ElemType->isIncompleteType() || ElemType->isFunctionType()) {\n    Info.FFDiag(E->getExprLoc(), diag::note_constexpr_new_not_complete_object_type) << (ElemType->isIncompleteType() ? 0 : 1) << ElemType;"}},
[o]={
[zb]={"clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:34:39: note: cannot allocate memory of function type \'void ()\'","clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:40:39: note: cannot allocate memory of incomplete type \'Incomplete\'"}
}
},
},
["note_constexpr_new_placement"]={
["note_constexpr_new_placement"]={
[f]="this placement new expression is not yet supported in constant expressions",
[b]="this placement new expression is not yet supported in constant expressions",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="this placement new expression is not yet supported in constant expressions",
[h]="this placement new expression is not yet supported in constant expressions",
[g]=b,
[j]=i,
[e]="this placement new expression is not yet supported in constant expressions",
[k]="this placement new expression is not yet supported in constant expressions",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,9599,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (OperatorNew->isReservedGlobalPlacementOperator() && Info.CurrentCall->isStdFunction() && !E->isArray()) {\n  } else if (!OperatorNew->isReplaceableGlobalAllocationFunction()) {\n  } else if (E->getNumPlacementArgs()) {\n    // The only new-placement list we support is of the form (std::nothrow).\n    //\n    // FIXME: There is no restriction on this, but it\'s not clear that any\n    // other form makes any sense. We get here for cases such as:\n    //\n    //  new (std::align_val_t{N}) X(int)\n    //\n    // (which should presumably be valid only if N is a multiple of\n    // alignof(int), and in any case can\'t be deallocated unless N is\n    // alignof(X) and X has new-extended alignment).\n    if (E->getNumPlacementArgs() != 1 || !E->getPlacementArg(0)->getType()->isNothrowT())\n      return Error(E, diag::note_constexpr_new_placement);"}}
[n]={{q,9599,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (OperatorNew->isReservedGlobalPlacementOperator() && Info.CurrentCall->isStdFunction() && !E->isArray()) {\n  } else if (!OperatorNew->isReplaceableGlobalAllocationFunction()) {\n  } else if (E->getNumPlacementArgs()) {\n    // The only new-placement list we support is of the form (std::nothrow).\n    //\n    // FIXME: There is no restriction on this, but it\'s not clear that any\n    // other form makes any sense. We get here for cases such as:\n    //\n    //  new (std::align_val_t{N}) X(int)\n    //\n    // (which should presumably be valid only if N is a multiple of\n    // alignof(int), and in any case can\'t be deallocated unless N is\n    // alignof(X) and X has new-extended alignment).\n    if (E->getNumPlacementArgs() != 1 || !E->getPlacementArg(0)->getType()->isNothrowT())\n      return Error(E, diag::note_constexpr_new_placement);"}},
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:1015:14: note: this placement new expression is not yet supported in constant expressions"}
}
},
},
["note_constexpr_new_too_large"]={
["note_constexpr_new_too_large"]={
[f]="cannot allocate array; evaluated array bound A is too large",
[b]="cannot allocate array; evaluated array bound A is too large",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot allocate array; evaluated array bound %0 is too large",
[h]="cannot allocate array; evaluated array bound %0 is too large",
[g]=b,
[j]=i,
[e]="cannot allocate array; evaluated array bound (.*?) is too large",
[k]="cannot allocate array; evaluated array bound (.*?) is too large",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,6756,"/// Perform a call to \'perator new\' or to `__builtin_operator_new\'.\nstatic bool HandleOperatorNewCall(EvalInfo &Info, const CallExpr *E, LValue &Result) {\n  if (ByteSize.getActiveBits() > ConstantArrayType::getMaxSizeBits(Info.Ctx)) {\n    Info.FFDiag(E, diag::note_constexpr_new_too_large) << APSInt(Size, true);"},{p,9646,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (std::optional<const Expr *> ArraySize = E->getArraySize()) {\n    //  -- its value is such that the size of the allocated object would\n    //      exceed the implementation-defined limit\n    if (ConstantArrayType::getNumAddressingBits(Info.Ctx, AllocType, ArrayBound) > ConstantArrayType::getMaxSizeBits(Info.Ctx)) {\n      Info.FFDiag(*ArraySize, diag::note_constexpr_new_too_large) << ArrayBound << (*ArraySize)->getSourceRange();"}}
[n]={{q,6756,"/// Perform a call to \'perator new\' or to `__builtin_operator_new\'.\nstatic bool HandleOperatorNewCall(EvalInfo &Info, const CallExpr *E, LValue &Result) {\n  if (ByteSize.getActiveBits() > ConstantArrayType::getMaxSizeBits(Info.Ctx)) {\n    Info.FFDiag(E, diag::note_constexpr_new_too_large) << APSInt(Size, true);"},{q,9646,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (std::optional<const Expr *> ArraySize = E->getArraySize()) {\n    //  -- its value is such that the size of the allocated object would\n    //      exceed the implementation-defined limit\n    if (ConstantArrayType::getNumAddressingBits(Info.Ctx, AllocType, ArrayBound) > ConstantArrayType::getMaxSizeBits(Info.Ctx)) {\n      Info.FFDiag(*ArraySize, diag::note_constexpr_new_too_large) << ArrayBound << (*ArraySize)->getSourceRange();"}},
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:888:22: note: cannot allocate array; evaluated array bound 4611686018427387904 is too large"}
}
},
},
["note_constexpr_new_too_small"]={
["note_constexpr_new_too_small"]={
[f]="cannot allocate array; evaluated array bound A is too small to hold B explicitly initialized elements",
[b]="cannot allocate array; evaluated array bound A is too small to hold B explicitly initialized elements",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot allocate array; evaluated array bound %0 is too small to hold %1 explicitly initialized elements",
[h]="cannot allocate array; evaluated array bound %0 is too small to hold %1 explicitly initialized elements",
[g]=b,
[j]=i,
[e]="cannot allocate array; evaluated array bound (.*?) is too small to hold (.*?) explicitly initialized elements",
[k]="cannot allocate array; evaluated array bound (.*?) is too small to hold (.*?) explicitly initialized elements",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={M,1569547607,J},
[m]={Q,1569547607,R},
[n]={{p,9673,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (std::optional<const Expr *> ArraySize = E->getArraySize()) {\n    //  -- the new-initializer is a braced-init-list and the number of\n    //      array elements for which initializers are provided [...]\n    //      exceeds the number of elements to initialize\n    if (!Init) {\n    } else if (isa<CXXScalarValueInitExpr>(Init) || isa<ImplicitValueInitExpr>(Init)) {\n    } else if (auto *CCE = dyn_cast<CXXConstructExpr>(Init)) {\n    } else {\n      if (InitBound.ugt(AllocBound)) {\n        Info.FFDiag(*ArraySize, diag::note_constexpr_new_too_small) << toString(AllocBound, 10, /*Signed=*/false) << toString(InitBound, 10, /*Signed=*/false) << (*ArraySize)->getSourceRange();"}}
[n]={{q,9673,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (std::optional<const Expr *> ArraySize = E->getArraySize()) {\n    //  -- the new-initializer is a braced-init-list and the number of\n    //      array elements for which initializers are provided [...]\n    //      exceeds the number of elements to initialize\n    if (!Init) {\n    } else if (isa<CXXScalarValueInitExpr>(Init) || isa<ImplicitValueInitExpr>(Init)) {\n    } else if (auto *CCE = dyn_cast<CXXConstructExpr>(Init)) {\n    } else {\n      if (InitBound.ugt(AllocBound)) {\n        Info.FFDiag(*ArraySize, diag::note_constexpr_new_too_small) << toString(AllocBound, 10, /*Signed=*/false) << toString(InitBound, 10, /*Signed=*/false) << (*ArraySize)->getSourceRange();"}},
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:851:17: note: cannot allocate array; evaluated array bound 2 is too small to hold 3 explicitly initialized elements","clang/test/SemaCXX/constant-expression-cxx2a.cpp:849:17: note: cannot allocate array; evaluated array bound 3 is too small to hold 4 explicitly initialized elements"}
}
},
},
["note_constexpr_new_untyped"]={
["note_constexpr_new_untyped"]={
[f]="cannot allocate untyped memory in a constant expression; use \'std::allocator<T>::allocate\' to allocate memory of type \'T\'",
[b]="cannot allocate untyped memory in a constant expression; use \'std::allocator<T>::allocate\' to allocate memory of type \'T\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot allocate untyped memory in a constant expression; use \'std::allocator<T>::allocate\' to allocate memory of type \'T\'",
[h]="cannot allocate untyped memory in a constant expression; use \'std::allocator<T>::allocate\' to allocate memory of type \'T\'",
[g]=b,
[j]=i,
[e]="cannot allocate untyped memory in a constant expression; use \'std\\:\\:allocator\\<T\\>\\:\\:allocate\' to allocate memory of type \'T\'",
[k]="cannot allocate untyped memory in a constant expression; use \'std\\:\\:allocator\\<T\\>\\:\\:allocate\' to allocate memory of type \'T\'",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"19ad5239713c",1570063173,"For P0784R7: allow direct calls to operator new / operator delete from"},
[m]={"19ad5239713c",1570063173,"For P0784R7: allow direct calls to operator new / operator delete from"},
[n]={{p,6715,"/// Perform a call to \'perator new\' or to `__builtin_operator_new\'.\nstatic bool HandleOperatorNewCall(EvalInfo &Info, const CallExpr *E, LValue &Result) {\n  if (!Caller) {\n    Info.FFDiag(E->getExprLoc(), Info.getLangOpts().CPlusPlus20 ? diag::note_constexpr_new_untyped : diag::note_constexpr_new);"}}
[n]={{q,6715,"/// Perform a call to \'perator new\' or to `__builtin_operator_new\'.\nstatic bool HandleOperatorNewCall(EvalInfo &Info, const CallExpr *E, LValue &Result) {\n  if (!Caller) {\n    Info.FFDiag(E->getExprLoc(), Info.getLangOpts().CPlusPlus20 ? diag::note_constexpr_new_untyped : diag::note_constexpr_new);"}},
[o]={
[zb]={"clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:6:13: note: cannot allocate untyped memory in a constant expression; use \'std::allocator<T>::allocate\' to allocate memory of type \'T\'"}
}
},
},
["note_constexpr_no_return"]={
["note_constexpr_no_return"]={
[f]="control reached end of constexpr function",
[b]="control reached end of constexpr function",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="control reached end of constexpr function",
[h]="control reached end of constexpr function",
[g]=b,
[j]=i,
[e]="control reached end of constexpr function",
[k]="control reached end of constexpr function",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and"},
[m]={"d9f663b510c4",1366644711,"C++1y constexpr extensions, round 1: Allow most forms of declaration and"},
[n]={{p,6258,"/// Evaluate a function call.\nstatic bool HandleFunctionCall(SourceLocation CallLoc, const FunctionDecl *Callee, const LValue *This, const Expr *E, ArrayRef<const Expr *> Args, CallRef Call, const Stmt *Body, EvalInfo &Info, APValue &Result, const LValue *ResultSlot) {\n  if (ESR == ESR_Succeeded) {\n    Info.FFDiag(Callee->getEndLoc(), diag::note_constexpr_no_return);"}}
[n]={{q,6258,"/// Evaluate a function call.\nstatic bool HandleFunctionCall(SourceLocation CallLoc, const FunctionDecl *Callee, const LValue *This, const Expr *E, ArrayRef<const Expr *> Args, CallRef Call, const Stmt *Body, EvalInfo &Info, APValue &Result, const LValue *ResultSlot) {\n  if (ESR == ESR_Succeeded) {\n    Info.FFDiag(Callee->getEndLoc(), diag::note_constexpr_no_return);"}},
[o]={
["clang/test/SemaCXX/constant-expression-cxx14.cpp"]={"clang/test/SemaCXX/constant-expression-cxx14.cpp:70:1: note: control reached end of constexpr function","clang/test/SemaCXX/constant-expression-cxx14.cpp:70:1: note: control reached end of constexpr function"}
}
},
},
["note_constexpr_non_global"]={
["note_constexpr_non_global"]={
[f]="... to ...... is not a constant expression",
[b]="... to ...... is not a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{pointer|reference}0 to %select{|subobject of }1%select{temporary|%3}2 is not a constant expression",
[h]="%select{pointer|reference}0 to %select{|subobject of }1%select{temporary|%3}2 is not a constant expression",
[g]=b,
[j]=i,
[e]="(?:pointer|reference) to (?:|subobject of )(?:temporary|(.*?)) is not a constant expression",
[k]="(?:pointer|reference) to (?:|subobject of )(?:temporary|(.*?)) is not a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={Bb,1323758398,Eb},
[m]={ac,1323758398,Qb},
[n]={{p,2207,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  // Check that the object is a global. Note that the fake \'this\' object we\n  // manufacture when checking potential constant expressions is conservatively\n  // assumed to be global here.\n  if (!IsGlobalLValue(Base)) {\n    if (Info.getLangOpts().CPlusPlus11) {\n      Info.FFDiag(Loc, diag::note_constexpr_non_global, 1) << IsReferenceType << !Designator.Entries.empty() << !!BaseVD << BaseVD;"}}
[n]={{q,2207,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  // Check that the object is a global. Note that the fake \'this\' object we\n  // manufacture when checking potential constant expressions is conservatively\n  // assumed to be global here.\n  if (!IsGlobalLValue(Base)) {\n    if (Info.getLangOpts().CPlusPlus11) {\n      Info.FFDiag(Loc, diag::note_constexpr_non_global, 1) << IsReferenceType << !Designator.Entries.empty() << !!BaseVD << BaseVD;"}},
[o]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:302:11: note: reference to temporary is not a constant expression","clang/test/SemaCXX/cxx2a-consteval.cpp:304:11: note: reference to temporary is not a constant expression","clang/test/SemaCXX/cxx2a-consteval.cpp:360:11: note: reference to temporary is not a constant expression","clang/test/SemaCXX/cxx2a-consteval.cpp:362:11: note: reference to temporary is not a constant expression","clang/test/SemaCXX/cxx2a-consteval.cpp:412:7: note: pointer to temporary is not a constant expression","clang/test/SemaCXX/cxx2a-consteval.cpp:428:7: note: pointer to temporary is not a constant expression"}
}
},
},
["note_constexpr_nonliteral"]={
["note_constexpr_nonliteral"]={
[f]="non-literal type A cannot be used in a constant expression",
[b]="non-literal type A cannot be used in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="non-literal type %0 cannot be used in a constant expression",
[h]="non-literal type %0 cannot be used in a constant expression",
[g]=b,
[j]=i,
[e]="non\\-literal type (.*?) cannot be used in a constant expression",
[k]="non\\-literal type (.*?) cannot be used in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={Bb,1323758398,Eb},
[m]={ac,1323758398,Qb},
[n]={{p,2369,"/// Check that this core constant expression is of literal type, and if not,\n/// produce an appropriate diagnostic.\nstatic bool CheckLiteralType(EvalInfo &Info, const Expr *E, const LValue *This = nullptr) {\n  // Prvalue constant expressions must be of literal types.\n  if (Info.getLangOpts().CPlusPlus11)\n    Info.FFDiag(E, diag::note_constexpr_nonliteral) << E->getType();"},{p,4671,"/// Build an lvalue for the object argument of a member function call.\nstatic bool EvaluateObjectArgument(EvalInfo &Info, const Expr *Object, LValue &This) {\n  Info.FFDiag(Object, diag::note_constexpr_nonliteral) << Object->getType();"},{p,15127,"static bool Evaluate(APValue &Result, EvalInfo &Info, const Expr *E) {\n  if (E->isGLValue() || T->isFunctionType()) {\n  } else if (T->isVectorType()) {\n  } else if (T->isIntegralOrEnumerationType()) {\n  } else if (T->hasPointerRepresentation()) {\n  } else if (T->isRealFloatingType()) {\n  } else if (T->isAnyComplexType()) {\n  } else if (T->isFixedPointType()) {\n  } else if (T->isMemberPointerType()) {\n  } else if (T->isArrayType()) {\n  } else if (T->isRecordType()) {\n  } else if (T->isVoidType()) {\n    if (!Info.getLangOpts().CPlusPlus11)\n      Info.CCEDiag(E, diag::note_constexpr_nonliteral) << E->getType();"},{p,15145,"static bool Evaluate(APValue &Result, EvalInfo &Info, const Expr *E) {\n  if (E->isGLValue() || T->isFunctionType()) {\n  } else if (T->isVectorType()) {\n  } else if (T->isIntegralOrEnumerationType()) {\n  } else if (T->hasPointerRepresentation()) {\n  } else if (T->isRealFloatingType()) {\n  } else if (T->isAnyComplexType()) {\n  } else if (T->isFixedPointType()) {\n  } else if (T->isMemberPointerType()) {\n  } else if (T->isArrayType()) {\n  } else if (T->isRecordType()) {\n  } else if (T->isVoidType()) {\n  } else if (T->isAtomicType()) {\n  } else if (Info.getLangOpts().CPlusPlus11) {\n    Info.FFDiag(E, diag::note_constexpr_nonliteral) << E->getType();"}}
[n]={{q,2369,"/// Check that this core constant expression is of literal type, and if not,\n/// produce an appropriate diagnostic.\nstatic bool CheckLiteralType(EvalInfo &Info, const Expr *E, const LValue *This = nullptr) {\n  // Prvalue constant expressions must be of literal types.\n  if (Info.getLangOpts().CPlusPlus11)\n    Info.FFDiag(E, diag::note_constexpr_nonliteral) << E->getType();"},{q,4671,"/// Build an lvalue for the object argument of a member function call.\nstatic bool EvaluateObjectArgument(EvalInfo &Info, const Expr *Object, LValue &This) {\n  Info.FFDiag(Object, diag::note_constexpr_nonliteral) << Object->getType();"},{q,15127,"static bool Evaluate(APValue &Result, EvalInfo &Info, const Expr *E) {\n  if (E->isGLValue() || T->isFunctionType()) {\n  } else if (T->isVectorType()) {\n  } else if (T->isIntegralOrEnumerationType()) {\n  } else if (T->hasPointerRepresentation()) {\n  } else if (T->isRealFloatingType()) {\n  } else if (T->isAnyComplexType()) {\n  } else if (T->isFixedPointType()) {\n  } else if (T->isMemberPointerType()) {\n  } else if (T->isArrayType()) {\n  } else if (T->isRecordType()) {\n  } else if (T->isVoidType()) {\n    if (!Info.getLangOpts().CPlusPlus11)\n      Info.CCEDiag(E, diag::note_constexpr_nonliteral) << E->getType();"},{q,15145,"static bool Evaluate(APValue &Result, EvalInfo &Info, const Expr *E) {\n  if (E->isGLValue() || T->isFunctionType()) {\n  } else if (T->isVectorType()) {\n  } else if (T->isIntegralOrEnumerationType()) {\n  } else if (T->hasPointerRepresentation()) {\n  } else if (T->isRealFloatingType()) {\n  } else if (T->isAnyComplexType()) {\n  } else if (T->isFixedPointType()) {\n  } else if (T->isMemberPointerType()) {\n  } else if (T->isArrayType()) {\n  } else if (T->isRecordType()) {\n  } else if (T->isVoidType()) {\n  } else if (T->isAtomicType()) {\n  } else if (Info.getLangOpts().CPlusPlus11) {\n    Info.FFDiag(E, diag::note_constexpr_nonliteral) << E->getType();"}},
[o]={
["clang/test/SemaCXX/constexpr-value-init.cpp"]={"clang/test/SemaCXX/constexpr-value-init.cpp:38:19: note: non-literal type \'Z<V>\' cannot be used in a constant expression"}
}
},
},
["note_constexpr_not_static"]={
["note_constexpr_not_static"]={
[f]="address of non-static constexpr variable A may differ on each invocation of the enclosing function; add \'static\' to give it a constant address",
[b]="address of non-static constexpr variable A may differ on each invocation of the enclosing function; add \'static\' to give it a constant address",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="address of non-static constexpr variable %0 may differ on each invocation of the enclosing function; add \'static\' to give it a constant address",
[h]="address of non-static constexpr variable %0 may differ on each invocation of the enclosing function; add \'static\' to give it a constant address",
[g]=b,
[j]=i,
[e]="address of non\\-static constexpr variable (.*?) may differ on each invocation of the enclosing function; add \'static\' to give it a constant address",
[k]="address of non\\-static constexpr variable (.*?) may differ on each invocation of the enclosing function; add \'static\' to give it a constant address",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"0fd3d379e26d",1597104144,"Improve diagnostic for an expression that\'s not constant because it uses"},
[m]={"0fd3d379e26d",1597104144,"Improve diagnostic for an expression that\'s not constant because it uses"},
[n]={{p,2217,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  // Check that the object is a global. Note that the fake \'this\' object we\n  // manufacture when checking potential constant expressions is conservatively\n  // assumed to be global here.\n  if (!IsGlobalLValue(Base)) {\n    if (Info.getLangOpts().CPlusPlus11) {\n      if (VarD && VarD->isConstexpr()) {\n        Info.Note(VarD->getLocation(), diag::note_constexpr_not_static) << VarD << FixItHint::CreateInsertion(VarD->getBeginLoc(), \"static \");"}}
[n]={{q,2217,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  // Check that the object is a global. Note that the fake \'this\' object we\n  // manufacture when checking potential constant expressions is conservatively\n  // assumed to be global here.\n  if (!IsGlobalLValue(Base)) {\n    if (Info.getLangOpts().CPlusPlus11) {\n      if (VarD && VarD->isConstexpr()) {\n        Info.Note(VarD->getLocation(), diag::note_constexpr_not_static) << VarD << FixItHint::CreateInsertion(VarD->getBeginLoc(), \"static \");"}},
[o]={
["clang/test/SemaCXX/builtins.cpp"]={"clang/test/SemaCXX/builtins.cpp:128:17: note: address of non-static constexpr variable \'i\' may differ on each invocation of the enclosing function; add \'static\' to give it a constant address"}
}
},
},
["note_constexpr_null_callee"]={
["note_constexpr_null_callee"]={
[f]="\'A\' evaluates to a null function pointer",
[b]="\'A\' evaluates to a null function pointer",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="\'%0\' evaluates to a null function pointer",
[h]="\'%0\' evaluates to a null function pointer",
[g]=b,
[j]=i,
[e]="\'(.*?)\' evaluates to a null function pointer",
[k]="\'(.*?)\' evaluates to a null function pointer",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={lb,1662843785,kb},
[m]={rb,1662843785,sb},
[n]={{p,7719,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  bool handleCallExpr(const CallExpr *E, APValue &Result, const LValue *ResultSlot) {\n    // Extract function decl and \'this\' pointer from the callee.\n    if (CalleeType->isSpecificBuiltinType(BuiltinType::BoundMember)) {\n    } else if (CalleeType->isFunctionPointerType()) {\n      if (CalleeLV.isNullPointer()) {\n        Info.FFDiag(Callee, diag::note_constexpr_null_callee) << const_cast<Expr *>(Callee);"}}
[n]={{q,7719,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  bool handleCallExpr(const CallExpr *E, APValue &Result, const LValue *ResultSlot) {\n    // Extract function decl and \'this\' pointer from the callee.\n    if (CalleeType->isSpecificBuiltinType(BuiltinType::BoundMember)) {\n    } else if (CalleeType->isFunctionPointerType()) {\n      if (CalleeLV.isNullPointer()) {\n        Info.FFDiag(Callee, diag::note_constexpr_null_callee) << const_cast<Expr *>(Callee);"}},
[o]={
[Ob]={"clang/test/SemaCXX/constant-expression-cxx11.cpp:282:54: note: \'F\' evaluates to a null function pointer"}
}
},
},
["note_constexpr_null_subobject"]={
["note_constexpr_null_subobject"]={
[f]="cannot ... null pointer",
[b]="cannot ... null pointer",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot %select{access base class of|access derived class of|access field of|access array element of|perform pointer arithmetic on|access real component of|access imaginary component of}0 null pointer",
[h]="cannot %select{access base class of|access derived class of|access field of|access array element of|perform pointer arithmetic on|access real component of|access imaginary component of}0 null pointer",
[g]=b,
[j]=i,
[e]="cannot (?:access base class of|access derived class of|access field of|access array element of|perform pointer arithmetic on|access real component of|access imaginary component of) null pointer",
[k]="cannot (?:access base class of|access derived class of|access field of|access array element of|perform pointer arithmetic on|access real component of|access imaginary component of) null pointer",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"a8105bc9cecb",1325867940,"C++11 generalized constant expressions: implement checking and diagnostics for"},
[m]={"a8105bc9cecb",1325867940,"C++11 generalized constant expressions: implement checking and diagnostics for"},
[n]={{p,1647,"#endif\n  bool checkNullPointer(EvalInfo &Info, const Expr *E, CheckSubobjectKind CSK) {\n    return checkNullPointerDiagnosingWith([&Info, E, CSK] { Info.CCEDiag(E, diag::note_constexpr_null_subobject) << CSK; });"},{w,153,"bool CheckLive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (Ptr.isZero()) {\n    if (Ptr.isField())\n      S.FFDiag(Src, diag::note_constexpr_null_subobject) << CSK_Field;"},{w,182,"bool CheckNull(InterpState &S, CodePtr OpPC, const Pointer &Ptr, CheckSubobjectKind CSK) {\n  S.FFDiag(Loc, diag::note_constexpr_null_subobject) << CSK;"}}
[n]={{q,1647,"#endif\n  bool checkNullPointer(EvalInfo &Info, const Expr *E, CheckSubobjectKind CSK) {\n    return checkNullPointerDiagnosingWith([&Info, E, CSK] { Info.CCEDiag(E, diag::note_constexpr_null_subobject) << CSK; });"},{A,153,"bool CheckLive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (Ptr.isZero()) {\n    if (Ptr.isField())\n      S.FFDiag(Src, diag::note_constexpr_null_subobject) << CSK_Field;"},{A,182,"bool CheckNull(InterpState &S, CodePtr OpPC, const Pointer &Ptr, CheckSubobjectKind CSK) {\n  S.FFDiag(Loc, diag::note_constexpr_null_subobject) << CSK;"}},
[o]={
["clang/test/AST/Interp/arrays.cpp"]={"clang/test/AST/Interp/arrays.cpp:73:24: note: cannot perform pointer arithmetic on null pointer"}
}
},
},
["note_constexpr_operator_new_bad_size"]={
["note_constexpr_operator_new_bad_size"]={
[f]="allocated size A is not a multiple of size B of element type C",
[b]="allocated size A is not a multiple of size B of element type C",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="allocated size %0 is not a multiple of size %1 of element type %2",
[h]="allocated size %0 is not a multiple of size %1 of element type %2",
[g]=b,
[j]=i,
[e]="allocated size (.*?) is not a multiple of size (.*?) of element type (.*?)",
[k]="allocated size (.*?) is not a multiple of size (.*?) of element type (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"19ad5239713c",1570063173,"For P0784R7: allow direct calls to operator new / operator delete from"},
[m]={"19ad5239713c",1570063173,"For P0784R7: allow direct calls to operator new / operator delete from"},
[n]={{p,6745,"/// Perform a call to \'perator new\' or to `__builtin_operator_new\'.\nstatic bool HandleOperatorNewCall(EvalInfo &Info, const CallExpr *E, LValue &Result) {\n  if (Remainder != 0) {\n    Info.FFDiag(E->getExprLoc(), diag::note_constexpr_operator_new_bad_size) << ByteSize << APSInt(ElemSizeAP, true) << ElemType;"}}
[n]={{q,6745,"/// Perform a call to \'perator new\' or to `__builtin_operator_new\'.\nstatic bool HandleOperatorNewCall(EvalInfo &Info, const CallExpr *E, LValue &Result) {\n  if (Remainder != 0) {\n    Info.FFDiag(E->getExprLoc(), diag::note_constexpr_operator_new_bad_size) << ByteSize << APSInt(ElemSizeAP, true) << ElemType;"}},
[o]={
[zb]={"clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:47:39: note: allocated size 7 is not a multiple of size 5 of element type \'WrongSize\'"}
}
},
},
["note_constexpr_overflow"]={
["note_constexpr_overflow"]={
[f]="value A is outside the range of representable values of type B",
[b]="value A is outside the range of representable values of type B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="value %0 is outside the range of representable values of type %1",
[h]="value %0 is outside the range of representable values of type %1",
[g]=b,
[j]=i,
[e]="value (.*?) is outside the range of representable values of type (.*?)",
[k]="value (.*?) is outside the range of representable values of type (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={Bb,1323758398,Eb},
[m]={ac,1323758398,Qb},
[n]={{p,2579,"template <typename T> static bool HandleOverflow(EvalInfo &Info, const Expr *E, const T &SrcValue, QualType DestType) {\n  Info.CCEDiag(E, diag::note_constexpr_overflow) << SrcValue << DestType;"},{"clang/lib/AST/Interp/InterpState.cpp",45,"bool InterpState::reportOverflow(const Expr *E, const llvm::APSInt &Value) {\n  CCEDiag(E, diag::note_constexpr_overflow) << Value << Type;"}}
[n]={{q,2579,"template <typename T> static bool HandleOverflow(EvalInfo &Info, const Expr *E, const T &SrcValue, QualType DestType) {\n  Info.CCEDiag(E, diag::note_constexpr_overflow) << SrcValue << DestType;"},{"clang/lib/AST/Interp/InterpState.cpp",45,"bool InterpState::reportOverflow(const Expr *E, const llvm::APSInt &Value) {\n  CCEDiag(E, diag::note_constexpr_overflow) << Value << Type;"}},
[o]={
["clang/test/SemaCXX/constant-expression-cxx1z.cpp"]={"clang/test/SemaCXX/constant-expression-cxx1z.cpp:6:36: note: value 6442450941 is outside the range of representable values of type \'int\'"}
}
},
},
["note_constexpr_past_end"]={
["note_constexpr_past_end"]={
[f]="dereferenced pointer past the end of ...... is not a constant expression",
[b]="dereferenced pointer past the end of ...... is not a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="dereferenced pointer past the end of %select{|subobject of }0%select{temporary|%2}1 is not a constant expression",
[h]="dereferenced pointer past the end of %select{|subobject of }0%select{temporary|%2}1 is not a constant expression",
[g]=b,
[j]=i,
[e]="dereferenced pointer past the end of (?:|subobject of )(?:temporary|(.*?)) is not a constant expression",
[k]="dereferenced pointer past the end of (?:|subobject of )(?:temporary|(.*?)) is not a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={Bb,1323758398,Eb},
[m]={ac,1323758398,Qb},
[n]={{p,2316,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  // Does this refer one past the end of some object?\n  if (!Designator.Invalid && Designator.isOnePastTheEnd()) {\n    Info.FFDiag(Loc, diag::note_constexpr_past_end, 1) << !Designator.Entries.empty() << !!BaseVD << BaseVD;"}}
[n]={{q,2316,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  // Does this refer one past the end of some object?\n  if (!Designator.Invalid && Designator.isOnePastTheEnd()) {\n    Info.FFDiag(Loc, diag::note_constexpr_past_end, 1) << !Designator.Entries.empty() << !!BaseVD << BaseVD;"}},
[o]={
["clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:30:20: note: dereferenced pointer past the end of \'n\' is not a constant expression","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:31:20: note: dereferenced pointer past the end of \'n\' is not a constant expression","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:36:20: note: dereferenced pointer past the end of subobject of \'s\' is not a constant expression","clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp:37:20: note: dereferenced pointer past the end of subobject of \'s\' is not a constant expression"}
}
},
},
["note_constexpr_past_end_subobject"]={
["note_constexpr_past_end_subobject"]={
[f]="cannot ... pointer past the end of object",
[b]="cannot ... pointer past the end of object",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot %select{access base class of|access derived class of|access field of|access array element of|ERROR|access real component of|access imaginary component of}0 pointer past the end of object",
[h]="cannot %select{access base class of|access derived class of|access field of|access array element of|ERROR|access real component of|access imaginary component of}0 pointer past the end of object",
[g]=b,
[j]=i,
[e]="cannot (?:access base class of|access derived class of|access field of|access array element of|ERROR|access real component of|access imaginary component of) pointer past the end of object",
[k]="cannot (?:access base class of|access derived class of|access field of|access array element of|ERROR|access real component of|access imaginary component of) pointer past the end of object",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"a8105bc9cecb",1325867940,"C++11 generalized constant expressions: implement checking and diagnostics for"},
[m]={"a8105bc9cecb",1325867940,"C++11 generalized constant expressions: implement checking and diagnostics for"},
[n]={{p,1411,"bool SubobjectDesignator::checkSubobject(EvalInfo &Info, const Expr *E, CheckSubobjectKind CSK) {\n  if (isOnePastTheEnd()) {\n    Info.CCEDiag(E, diag::note_constexpr_past_end_subobject) << CSK;"},{w,200,"bool CheckRange(InterpState &S, CodePtr OpPC, const Pointer &Ptr, CheckSubobjectKind CSK) {\n  S.FFDiag(Loc, diag::note_constexpr_past_end_subobject) << CSK;"}}
[n]={{q,1411,"bool SubobjectDesignator::checkSubobject(EvalInfo &Info, const Expr *E, CheckSubobjectKind CSK) {\n  if (isOnePastTheEnd()) {\n    Info.CCEDiag(E, diag::note_constexpr_past_end_subobject) << CSK;"},{A,200,"bool CheckRange(InterpState &S, CodePtr OpPC, const Pointer &Ptr, CheckSubobjectKind CSK) {\n  S.FFDiag(Loc, diag::note_constexpr_past_end_subobject) << CSK;"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:195:23: note: cannot access base class of pointer past the end of object","clang/test/CXX/expr/expr.const/p2-0x.cpp:196:23: note: cannot access derived class of pointer past the end of object","clang/test/CXX/expr/expr.const/p2-0x.cpp:197:42: note: cannot access field of pointer past the end of object","clang/test/CXX/expr/expr.const/p2-0x.cpp:198:26: note: cannot access array element of pointer past the end of object"}
}
},
},
["note_constexpr_placement_new_wrong_type"]={
["note_constexpr_placement_new_wrong_type"]={
[f]="placement new would change type of storage from A to B",
[b]="placement new would change type of storage from A to B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="placement new would change type of storage from %0 to %1",
[h]="placement new would change type of storage from %0 to %1",
[g]=b,
[j]=i,
[e]="placement new would change type of storage from (.*?) to (.*?)",
[k]="placement new would change type of storage from (.*?) to (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"b542602c5f35",1570063175,"For P0784R7: support placement new-expressions in constant evaluation."},
[m]={"b542602c5f35",1570063175,"For P0784R7: support placement new-expressions in constant evaluation."},
[n]={{p,9709,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (IsPlacement) {\n    struct FindObjectHandler {\n      bool found(APValue &Subobj, QualType SubobjType) {\n        // FIXME: Reject the cases where [basic.life]p8 would not permit the\n        // old name of the object to be used to name the new object.\n        if (!Info.Ctx.hasSameUnqualifiedType(SubobjType, AllocType)) {\n          Info.FFDiag(E, diag::note_constexpr_placement_new_wrong_type) << SubobjType << AllocType;"}}
[n]={{q,9709,"bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {\n  if (IsPlacement) {\n    struct FindObjectHandler {\n      bool found(APValue &Subobj, QualType SubobjType) {\n        // FIXME: Reject the cases where [basic.life]p8 would not permit the\n        // old name of the object to be used to name the new object.\n        if (!Info.Ctx.hasSameUnqualifiedType(SubobjType, AllocType)) {\n          Info.FFDiag(E, diag::note_constexpr_placement_new_wrong_type) << SubobjType << AllocType;"}},
[o]={
[zb]={"clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:111:5: note: placement new would change type of storage from \'int\' to \'float\'"}
}
},
},
["note_constexpr_pointer_comparison_base_classes"]={
["note_constexpr_pointer_comparison_base_classes"]={
[f]="comparison of addresses of subobjects of different base classes has unspecified value",
[b]="comparison of addresses of subobjects of different base classes has unspecified value",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="comparison of addresses of subobjects of different base classes has unspecified value",
[h]="comparison of addresses of subobjects of different base classes has unspecified value",
[g]=b,
[j]=i,
[e]="comparison of addresses of subobjects of different base classes has unspecified value",
[k]="comparison of addresses of subobjects of different base classes has unspecified value",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"84f6dcf2b52c",1328145417,"constexpr:"},
[m]={"84f6dcf2b52c",1328145417,"constexpr:"},
[n]={{p,13160,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // C++11 [expr.rel]p2:\n    // - If two pointers point to non-static data members of the same object,\n    //  or to subobjects or array elements fo such members, recursively, the\n    //  pointer to the later declared member compares greater provided the\n    //  two members have the same access control and provided their class is\n    //  not a union.\n    //  [...]\n    // - Otherwise pointer comparisons are unspecified.\n    if (!LHSDesignator.Invalid && !RHSDesignator.Invalid && IsRelational) {\n      // At the point where the designators diverge, the comparison has a\n      // specified value if:\n      //  - we are comparing array indices\n      //  - we are comparing fields of a union, or fields with the same access\n      // Otherwise, the result is unspecified and thus the comparison is not a\n      // constant expression.\n      if (!WasArrayIndex && Mismatch < LHSDesignator.Entries.size() && Mismatch < RHSDesignator.Entries.size()) {\n        if (!LF && !RF)\n          Info.CCEDiag(E, diag::note_constexpr_pointer_comparison_base_classes);"}}
[n]={{q,13160,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // C++11 [expr.rel]p2:\n    // - If two pointers point to non-static data members of the same object,\n    //  or to subobjects or array elements fo such members, recursively, the\n    //  pointer to the later declared member compares greater provided the\n    //  two members have the same access control and provided their class is\n    //  not a union.\n    //  [...]\n    // - Otherwise pointer comparisons are unspecified.\n    if (!LHSDesignator.Invalid && !RHSDesignator.Invalid && IsRelational) {\n      // At the point where the designators diverge, the comparison has a\n      // specified value if:\n      //  - we are comparing array indices\n      //  - we are comparing fields of a union, or fields with the same access\n      // Otherwise, the result is unspecified and thus the comparison is not a\n      // constant expression.\n      if (!WasArrayIndex && Mismatch < LHSDesignator.Entries.size() && Mismatch < RHSDesignator.Entries.size()) {\n        if (!LF && !RF)\n          Info.CCEDiag(E, diag::note_constexpr_pointer_comparison_base_classes);"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:567:34: note: comparison of addresses of subobjects of different base classes has unspecified value"}
}
},
},
["note_constexpr_pointer_comparison_base_field"]={
["note_constexpr_pointer_comparison_base_field"]={
[f]="comparison of address of base class subobject A of class B to field C has unspecified value",
[b]="comparison of address of base class subobject A of class B to field C has unspecified value",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="comparison of address of base class subobject %0 of class %1 to field %2 has unspecified value",
[h]="comparison of address of base class subobject %0 of class %1 to field %2 has unspecified value",
[g]=b,
[j]=i,
[e]="comparison of address of base class subobject (.*?) of class (.*?) to field (.*?) has unspecified value",
[k]="comparison of address of base class subobject (.*?) of class (.*?) to field (.*?) has unspecified value",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"84f6dcf2b52c",1328145417,"constexpr:"},
[m]={"84f6dcf2b52c",1328145417,"constexpr:"},
[n]={{p,13162,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // C++11 [expr.rel]p2:\n    // - If two pointers point to non-static data members of the same object,\n    //  or to subobjects or array elements fo such members, recursively, the\n    //  pointer to the later declared member compares greater provided the\n    //  two members have the same access control and provided their class is\n    //  not a union.\n    //  [...]\n    // - Otherwise pointer comparisons are unspecified.\n    if (!LHSDesignator.Invalid && !RHSDesignator.Invalid && IsRelational) {\n      // At the point where the designators diverge, the comparison has a\n      // specified value if:\n      //  - we are comparing array indices\n      //  - we are comparing fields of a union, or fields with the same access\n      // Otherwise, the result is unspecified and thus the comparison is not a\n      // constant expression.\n      if (!WasArrayIndex && Mismatch < LHSDesignator.Entries.size() && Mismatch < RHSDesignator.Entries.size()) {\n        if (!LF && !RF)\n        else if (!LF)\n          Info.CCEDiag(E, diag::note_constexpr_pointer_comparison_base_field) << getAsBaseClass(LHSDesignator.Entries[Mismatch]) << RF->getParent() << RF;"},{p,13166,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // C++11 [expr.rel]p2:\n    // - If two pointers point to non-static data members of the same object,\n    //  or to subobjects or array elements fo such members, recursively, the\n    //  pointer to the later declared member compares greater provided the\n    //  two members have the same access control and provided their class is\n    //  not a union.\n    //  [...]\n    // - Otherwise pointer comparisons are unspecified.\n    if (!LHSDesignator.Invalid && !RHSDesignator.Invalid && IsRelational) {\n      // At the point where the designators diverge, the comparison has a\n      // specified value if:\n      //  - we are comparing array indices\n      //  - we are comparing fields of a union, or fields with the same access\n      // Otherwise, the result is unspecified and thus the comparison is not a\n      // constant expression.\n      if (!WasArrayIndex && Mismatch < LHSDesignator.Entries.size() && Mismatch < RHSDesignator.Entries.size()) {\n        if (!LF && !RF)\n        else if (!LF)\n        else if (!RF)\n          Info.CCEDiag(E, diag::note_constexpr_pointer_comparison_base_field) << getAsBaseClass(RHSDesignator.Entries[Mismatch]) << LF->getParent() << LF;"}}
[n]={{q,13162,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // C++11 [expr.rel]p2:\n    // - If two pointers point to non-static data members of the same object,\n    //  or to subobjects or array elements fo such members, recursively, the\n    //  pointer to the later declared member compares greater provided the\n    //  two members have the same access control and provided their class is\n    //  not a union.\n    //  [...]\n    // - Otherwise pointer comparisons are unspecified.\n    if (!LHSDesignator.Invalid && !RHSDesignator.Invalid && IsRelational) {\n      // At the point where the designators diverge, the comparison has a\n      // specified value if:\n      //  - we are comparing array indices\n      //  - we are comparing fields of a union, or fields with the same access\n      // Otherwise, the result is unspecified and thus the comparison is not a\n      // constant expression.\n      if (!WasArrayIndex && Mismatch < LHSDesignator.Entries.size() && Mismatch < RHSDesignator.Entries.size()) {\n        if (!LF && !RF)\n        else if (!LF)\n          Info.CCEDiag(E, diag::note_constexpr_pointer_comparison_base_field) << getAsBaseClass(LHSDesignator.Entries[Mismatch]) << RF->getParent() << RF;"},{q,13166,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // C++11 [expr.rel]p2:\n    // - If two pointers point to non-static data members of the same object,\n    //  or to subobjects or array elements fo such members, recursively, the\n    //  pointer to the later declared member compares greater provided the\n    //  two members have the same access control and provided their class is\n    //  not a union.\n    //  [...]\n    // - Otherwise pointer comparisons are unspecified.\n    if (!LHSDesignator.Invalid && !RHSDesignator.Invalid && IsRelational) {\n      // At the point where the designators diverge, the comparison has a\n      // specified value if:\n      //  - we are comparing array indices\n      //  - we are comparing fields of a union, or fields with the same access\n      // Otherwise, the result is unspecified and thus the comparison is not a\n      // constant expression.\n      if (!WasArrayIndex && Mismatch < LHSDesignator.Entries.size() && Mismatch < RHSDesignator.Entries.size()) {\n        if (!LF && !RF)\n        else if (!LF)\n        else if (!RF)\n          Info.CCEDiag(E, diag::note_constexpr_pointer_comparison_base_field) << getAsBaseClass(RHSDesignator.Entries[Mismatch]) << LF->getParent() << LF;"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:568:34: note: comparison of address of base class subobject \'C\' of class \'E\' to field \'e\' has unspecified value","clang/test/CXX/expr/expr.const/p2-0x.cpp:569:33: note: comparison of address of base class subobject \'D\' of class \'E\' to field \'e\' has unspecified value"}
}
},
},
["note_constexpr_pointer_comparison_differing_access"]={
["note_constexpr_pointer_comparison_differing_access"]={
[f]="comparison of address of fields A and B of C with differing access specifiers (D vs E) has unspecified value",
[b]="comparison of address of fields A and B of C with differing access specifiers (D vs E) has unspecified value",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="comparison of address of fields %0 and %2 of %4 with differing access specifiers (%1 vs %3) has unspecified value",
[h]="comparison of address of fields %0 and %2 of %4 with differing access specifiers (%1 vs %3) has unspecified value",
[g]=b,
[j]=i,
[e]="comparison of address of fields (.*?) and (.*?) of (.*?) with differing access specifiers \\((.*?) vs (.*?)\\) has unspecified value",
[k]="comparison of address of fields (.*?) and (.*?) of (.*?) with differing access specifiers \\((.*?) vs (.*?)\\) has unspecified value",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"84f6dcf2b52c",1328145417,"constexpr:"},
[m]={"84f6dcf2b52c",1328145417,"constexpr:"},
[n]={{p,13172,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // C++11 [expr.rel]p2:\n    // - If two pointers point to non-static data members of the same object,\n    //  or to subobjects or array elements fo such members, recursively, the\n    //  pointer to the later declared member compares greater provided the\n    //  two members have the same access control and provided their class is\n    //  not a union.\n    //  [...]\n    // - Otherwise pointer comparisons are unspecified.\n    if (!LHSDesignator.Invalid && !RHSDesignator.Invalid && IsRelational) {\n      // At the point where the designators diverge, the comparison has a\n      // specified value if:\n      //  - we are comparing array indices\n      //  - we are comparing fields of a union, or fields with the same access\n      // Otherwise, the result is unspecified and thus the comparison is not a\n      // constant expression.\n      if (!WasArrayIndex && Mismatch < LHSDesignator.Entries.size() && Mismatch < RHSDesignator.Entries.size()) {\n        if (!LF && !RF)\n        else if (!LF)\n        else if (!RF)\n        else if (!LF->getParent()->isUnion() && LF->getAccess() != RF->getAccess())\n          Info.CCEDiag(E, diag::note_constexpr_pointer_comparison_differing_access) << LF << LF->getAccess() << RF << RF->getAccess() << LF->getParent();"}}
[n]={{q,13172,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // C++11 [expr.rel]p2:\n    // - If two pointers point to non-static data members of the same object,\n    //  or to subobjects or array elements fo such members, recursively, the\n    //  pointer to the later declared member compares greater provided the\n    //  two members have the same access control and provided their class is\n    //  not a union.\n    //  [...]\n    // - Otherwise pointer comparisons are unspecified.\n    if (!LHSDesignator.Invalid && !RHSDesignator.Invalid && IsRelational) {\n      // At the point where the designators diverge, the comparison has a\n      // specified value if:\n      //  - we are comparing array indices\n      //  - we are comparing fields of a union, or fields with the same access\n      // Otherwise, the result is unspecified and thus the comparison is not a\n      // constant expression.\n      if (!WasArrayIndex && Mismatch < LHSDesignator.Entries.size() && Mismatch < RHSDesignator.Entries.size()) {\n        if (!LF && !RF)\n        else if (!LF)\n        else if (!RF)\n        else if (!LF->getParent()->isUnion() && LF->getAccess() != RF->getAccess())\n          Info.CCEDiag(E, diag::note_constexpr_pointer_comparison_differing_access) << LF << LF->getAccess() << RF << RF->getAccess() << LF->getParent();"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:537:44: note: comparison of address of fields \'a\' and \'b\' of \'A\' with differing access specifiers (public vs private) has unspecified value","clang/test/CXX/expr/expr.const/p2-0x.cpp:545:46: note: comparison of address of fields \'a\' and \'b\' of \'B\' with differing access specifiers (public vs protected) has unspecified value"}
}
},
},
["note_constexpr_pointer_comparison_past_end"]={
["note_constexpr_pointer_comparison_past_end"]={
[f]="comparison against pointer \'A\' that points past the end of a complete object has unspecified value",
[b]="comparison against pointer \'A\' that points past the end of a complete object has unspecified value",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="comparison against pointer \'%0\' that points past the end of a complete object has unspecified value",
[h]="comparison against pointer \'%0\' that points past the end of a complete object has unspecified value",
[g]=b,
[j]=i,
[e]="comparison against pointer \'(.*?)\' that points past the end of a complete object has unspecified value",
[k]="comparison against pointer \'(.*?)\' that points past the end of a complete object has unspecified value",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={lb,1662843785,kb},
[m]={rb,1662843785,sb},
[n]={{p,13106,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // Reject differing bases from the normal codepath; we special-case\n    // comparisons to null.\n    if (!HasSameBase(LHSValue, RHSValue)) {\n      // We can\'t compare the address of the start of one object with the\n      // past-the-end address of another object, per C++ DR1652.\n      if (LHSValue.Base && LHSValue.Offset.isZero() && isOnePastTheEndOfCompleteObject(Info.Ctx, RHSValue))\n        return DiagComparison(diag::note_constexpr_pointer_comparison_past_end, true);"},{p,13110,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // Reject differing bases from the normal codepath; we special-case\n    // comparisons to null.\n    if (!HasSameBase(LHSValue, RHSValue)) {\n      if (RHSValue.Base && RHSValue.Offset.isZero() && isOnePastTheEndOfCompleteObject(Info.Ctx, LHSValue))\n        return DiagComparison(diag::note_constexpr_pointer_comparison_past_end, false);"}}
[n]={{q,13106,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // Reject differing bases from the normal codepath; we special-case\n    // comparisons to null.\n    if (!HasSameBase(LHSValue, RHSValue)) {\n      // We can\'t compare the address of the start of one object with the\n      // past-the-end address of another object, per C++ DR1652.\n      if (LHSValue.Base && LHSValue.Offset.isZero() && isOnePastTheEndOfCompleteObject(Info.Ctx, RHSValue))\n        return DiagComparison(diag::note_constexpr_pointer_comparison_past_end, true);"},{q,13110,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // Reject differing bases from the normal codepath; we special-case\n    // comparisons to null.\n    if (!HasSameBase(LHSValue, RHSValue)) {\n      if (RHSValue.Base && RHSValue.Offset.isZero() && isOnePastTheEndOfCompleteObject(Info.Ctx, LHSValue))\n        return DiagComparison(diag::note_constexpr_pointer_comparison_past_end, false);"}},
[o]={
["clang/test/Sema/const-eval.c"]={"clang/test/Sema/const-eval.c:140:24: note: comparison against pointer \'&PR24622\' that points past the end of a complete object has unspecified value"}
}
},
},
["note_constexpr_pointer_comparison_unspecified"]={
["note_constexpr_pointer_comparison_unspecified"]={
[f]="comparison between \'A\' and \'B\' has unspecified value",
[b]="comparison between \'A\' and \'B\' has unspecified value",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="comparison between \'%0\' and \'%1\' has unspecified value",
[h]="comparison between \'%0\' and \'%1\' has unspecified value",
[g]=b,
[j]=i,
[e]="comparison between \'(.*?)\' and \'(.*?)\' has unspecified value",
[k]="comparison between \'(.*?)\' and \'(.*?)\' has unspecified value",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"4e9f1379b9cd",1576544926,"If constant evaluation fails due to an unspecified pointer comparison,"},
[m]={"4e9f1379b9cd",1576544926,"If constant evaluation fails due to an unspecified pointer comparison,"},
[n]={{p,13080,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // Reject differing bases from the normal codepath; we special-case\n    // comparisons to null.\n    if (!HasSameBase(LHSValue, RHSValue)) {\n      // Inequalities and subtractions between unrelated pointers have\n      // unspecified or undefined behavior.\n      if (!IsEquality)\n        return DiagComparison(diag::note_constexpr_pointer_comparison_unspecified);"}}
[n]={{q,13080,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // Reject differing bases from the normal codepath; we special-case\n    // comparisons to null.\n    if (!HasSameBase(LHSValue, RHSValue)) {\n      // Inequalities and subtractions between unrelated pointers have\n      // unspecified or undefined behavior.\n      if (!IsEquality)\n        return DiagComparison(diag::note_constexpr_pointer_comparison_unspecified);"}},
[o]={
["clang/test/AST/Interp/functions.cpp"]={"clang/test/AST/Interp/functions.cpp:185:27: note: comparison between \'&f\' and \'&g\' has unspecified value","clang/test/AST/Interp/functions.cpp:192:27: note: comparison between \'&f\' and \'nullptr\' has unspecified value"}
}
},
},
["note_constexpr_pointer_comparison_zero_sized"]={
["note_constexpr_pointer_comparison_zero_sized"]={
[f]="comparison of pointers \'A\' and \'B\' to unrelated zero-sized objects",
[b]="comparison of pointers \'A\' and \'B\' to unrelated zero-sized objects",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="comparison of pointers \'%0\' and \'%1\' to unrelated zero-sized objects",
[h]="comparison of pointers \'%0\' and \'%1\' to unrelated zero-sized objects",
[g]=b,
[j]=i,
[e]="comparison of pointers \'(.*?)\' and \'(.*?)\' to unrelated zero\\-sized objects",
[k]="comparison of pointers \'(.*?)\' and \'(.*?)\' to unrelated zero\\-sized objects",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={lb,1662843785,kb},
[m]={rb,1662843785,sb},
[n]={{p,13117,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // Reject differing bases from the normal codepath; we special-case\n    // comparisons to null.\n    if (!HasSameBase(LHSValue, RHSValue)) {\n      // We can\'t tell whether an object is at the same address as another\n      // zero sized object.\n      if ((RHSValue.Base && isZeroSized(LHSValue)) || (LHSValue.Base && isZeroSized(RHSValue)))\n        return DiagComparison(diag::note_constexpr_pointer_comparison_zero_sized);"}}
[n]={{q,13117,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // Reject differing bases from the normal codepath; we special-case\n    // comparisons to null.\n    if (!HasSameBase(LHSValue, RHSValue)) {\n      // We can\'t tell whether an object is at the same address as another\n      // zero sized object.\n      if ((RHSValue.Base && isZeroSized(LHSValue)) || (LHSValue.Base && isZeroSized(RHSValue)))\n        return DiagComparison(diag::note_constexpr_pointer_comparison_zero_sized);"}},
[o]={
[Ob]={"clang/test/SemaCXX/constant-expression-cxx11.cpp:2216:24: note: comparison of pointers \'&start\' and \'&end\' to unrelated zero-sized objects"}
}
},
},
["note_constexpr_pointer_constant_comparison"]={
["note_constexpr_pointer_constant_comparison"]={
[f]="comparison of numeric address \'A\' with pointer \'B\' can only be performed at runtime",
[b]="comparison of numeric address \'A\' with pointer \'B\' can only be performed at runtime",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="comparison of numeric address \'%0\' with pointer \'%1\' can only be performed at runtime",
[h]="comparison of numeric address \'%0\' with pointer \'%1\' can only be performed at runtime",
[g]=b,
[j]=i,
[e]="comparison of numeric address \'(.*?)\' with pointer \'(.*?)\' can only be performed at runtime",
[k]="comparison of numeric address \'(.*?)\' with pointer \'(.*?)\' can only be performed at runtime",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={lb,1662843785,kb},
[m]={rb,1662843785,sb},
[n]={{p,13088,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // Reject differing bases from the normal codepath; we special-case\n    // comparisons to null.\n    if (!HasSameBase(LHSValue, RHSValue)) {\n      // A constant address may compare equal to the address of a symbol.\n      // The one exception is that address of an object cannot compare equal\n      // to a null pointer constant.\n      // TODO: Should we restrict this to actual null pointers, and exclude the\n      // case of zero cast to pointer type?\n      if ((!LHSValue.Base && !LHSValue.Offset.isZero()) || (!RHSValue.Base && !RHSValue.Offset.isZero()))\n        return DiagComparison(diag::note_constexpr_pointer_constant_comparison, !RHSValue.Base);"}}
[n]={{q,13088,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // Reject differing bases from the normal codepath; we special-case\n    // comparisons to null.\n    if (!HasSameBase(LHSValue, RHSValue)) {\n      // A constant address may compare equal to the address of a symbol.\n      // The one exception is that address of an object cannot compare equal\n      // to a null pointer constant.\n      // TODO: Should we restrict this to actual null pointers, and exclude the\n      // case of zero cast to pointer type?\n      if ((!LHSValue.Base && !LHSValue.Offset.isZero()) || (!RHSValue.Base && !RHSValue.Offset.isZero()))\n        return DiagComparison(diag::note_constexpr_pointer_constant_comparison, !RHSValue.Base);"}}
},
},
["note_constexpr_pointer_subtraction_not_same_array"]={
["note_constexpr_pointer_subtraction_not_same_array"]={
[f]="subtracted pointers are not elements of the same array",
[b]="subtracted pointers are not elements of the same array",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="subtracted pointers are not elements of the same array",
[h]="subtracted pointers are not elements of the same array",
[g]=b,
[j]=i,
[e]="subtracted pointers are not elements of the same array",
[k]="subtracted pointers are not elements of the same array",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"84f6dcf2b52c",1328145417,"constexpr:"},
[m]={"84f6dcf2b52c",1328145417,"constexpr:"},
[n]={{p,13410,"bool IntExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType() && E->getOpcode() == BO_Sub) {\n    // C++11 [expr.add]p6:\n    //  Unless both pointers point to elements of the same array object, or\n    //  one past the last element of the array object, the behavior is\n    //  undefined.\n    if (!LHSDesignator.Invalid && !RHSDesignator.Invalid && !AreElementsOfSameArray(getType(LHSValue.Base), LHSDesignator, RHSDesignator))\n      Info.CCEDiag(E, diag::note_constexpr_pointer_subtraction_not_same_array);"}}
[n]={{q,13410,"bool IntExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType() && E->getOpcode() == BO_Sub) {\n    // C++11 [expr.add]p6:\n    //  Unless both pointers point to elements of the same array object, or\n    //  one past the last element of the array object, the behavior is\n    //  undefined.\n    if (!LHSDesignator.Invalid && !RHSDesignator.Invalid && !AreElementsOfSameArray(getType(LHSValue.Base), LHSDesignator, RHSDesignator))\n      Info.CCEDiag(E, diag::note_constexpr_pointer_subtraction_not_same_array);"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:222:36: note: subtracted pointers are not elements of the same array","clang/test/CXX/expr/expr.const/p2-0x.cpp:225:38: note: subtracted pointers are not elements of the same array","clang/test/CXX/expr/expr.const/p2-0x.cpp:227:40: note: subtracted pointers are not elements of the same array"}
}
},
},
["note_constexpr_pointer_subtraction_zero_size"]={
["note_constexpr_pointer_subtraction_zero_size"]={
[f]="subtraction of pointers to type A of zero size",
[b]="subtraction of pointers to type A of zero size",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="subtraction of pointers to type %0 of zero size",
[h]="subtraction of pointers to type %0 of zero size",
[g]=b,
[j]=i,
[e]="subtraction of pointers to type (.*?) of zero size",
[k]="subtraction of pointers to type (.*?) of zero size",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"84c6b3d293d9",1378848854,"PR5683: Issue a warning when subtracting pointers to types of zero size, and"},
[m]={"84c6b3d293d9",1378848854,"PR5683: Issue a warning when subtracting pointers to types of zero size, and"},
[n]={{p,13423,"bool IntExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType() && E->getOpcode() == BO_Sub) {\n    // As an extension, a type may have zero size (empty struct or union in\n    // C, array of zero length). Pointer subtraction in such cases has\n    // undefined behavior, so is not constant.\n    if (ElementSize.isZero()) {\n      Info.FFDiag(E, diag::note_constexpr_pointer_subtraction_zero_size) << ElementType;"}}
[n]={{q,13423,"bool IntExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType() && E->getOpcode() == BO_Sub) {\n    // As an extension, a type may have zero size (empty struct or union in\n    // C, array of zero length). Pointer subtraction in such cases has\n    // undefined behavior, so is not constant.\n    if (ElementSize.isZero()) {\n      Info.FFDiag(E, diag::note_constexpr_pointer_subtraction_zero_size) << ElementType;"}},
[o]={
[Ob]={"clang/test/SemaCXX/constant-expression-cxx11.cpp:2091:24: note: subtraction of pointers to type \'int[0]\' of zero size","clang/test/SemaCXX/constant-expression-cxx11.cpp:2097:20: note: subtraction of pointers to type \'int[0]\' of zero size"}
}
},
},
["note_constexpr_pointer_weak_comparison"]={
["note_constexpr_pointer_weak_comparison"]={
[f]="comparison against address of weak declaration \'A\' can only be performed at runtime",
[b]="comparison against address of weak declaration \'A\' can only be performed at runtime",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="comparison against address of weak declaration \'%0\' can only be performed at runtime",
[h]="comparison against address of weak declaration \'%0\' can only be performed at runtime",
[g]=b,
[j]=i,
[e]="comparison against address of weak declaration \'(.*?)\' can only be performed at runtime",
[k]="comparison against address of weak declaration \'(.*?)\' can only be performed at runtime",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={lb,1662843785,kb},
[m]={rb,1662843785,sb},
[n]={{p,13100,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // Reject differing bases from the normal codepath; we special-case\n    // comparisons to null.\n    if (!HasSameBase(LHSValue, RHSValue)) {\n      // We can\'t tell whether weak symbols will end up pointing to the same\n      // object.\n      if (IsWeakLValue(LHSValue) || IsWeakLValue(RHSValue))\n        return DiagComparison(diag::note_constexpr_pointer_weak_comparison, !IsWeakLValue(LHSValue));"}}
[n]={{q,13100,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // Reject differing bases from the normal codepath; we special-case\n    // comparisons to null.\n    if (!HasSameBase(LHSValue, RHSValue)) {\n      // We can\'t tell whether weak symbols will end up pointing to the same\n      // object.\n      if (IsWeakLValue(LHSValue) || IsWeakLValue(RHSValue))\n        return DiagComparison(diag::note_constexpr_pointer_weak_comparison, !IsWeakLValue(LHSValue));"}},
[o]={
["clang/test/SemaCXX/attr-weak.cpp"]={"clang/test/SemaCXX/attr-weak.cpp:47:59: note: comparison against address of weak declaration \'&weak_function\' can only be performed at runtime"}
}
},
},
["note_constexpr_polymorphic_unknown_dynamic_type"]={
["note_constexpr_polymorphic_unknown_dynamic_type"]={
[f]="... object \'A\' whose dynamic type is not constant",
[b]="... object \'A\' whose dynamic type is not constant",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{|||||virtual function called on|dynamic_cast applied to|typeid applied to|construction of|destruction of}0 object \'%1\' whose dynamic type is not constant",
[h]="%select{|||||virtual function called on|dynamic_cast applied to|typeid applied to|construction of|destruction of}0 object \'%1\' whose dynamic type is not constant",
[g]=b,
[j]=i,
[e]="(?:|||||virtual function called on|dynamic_cast applied to|typeid applied to|construction of|destruction of) object \'(.*?)\' whose dynamic type is not constant",
[k]="(?:|||||virtual function called on|dynamic_cast applied to|typeid applied to|construction of|destruction of) object \'(.*?)\' whose dynamic type is not constant",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"7bd54ab58665",1557951741,"[c++20] For P1327R1: support dynamic_cast in constant expression"},
[m]={"7bd54ab58665",1557951741,"[c++20] For P1327R1: support dynamic_cast in constant expression"},
[n]={{p,5672,"/// Check that we can access the notional vptr of an object / determine its\n/// dynamic type.\nstatic bool checkDynamicType(EvalInfo &Info, const Expr *E, const LValue &This, AccessKinds AK, bool Polymorphic) {\n  if (!Obj.Value) {\n    // The object is not usable in constant expressions, so we can\'t inspect\n    // its value to see if it\'s in-lifetime or what the active union members\n    // are. We can still check for a one-past-the-end lvalue.\n    if (This.Designator.isOnePastTheEnd() || This.Designator.isMostDerivedAnUnsizedArray()) {\n    } else if (Polymorphic) {\n      Info.FFDiag(E, diag::note_constexpr_polymorphic_unknown_dynamic_type) << AK << Val.getAsString(Info.Ctx, StarThisType);"}}
[n]={{q,5672,"/// Check that we can access the notional vptr of an object / determine its\n/// dynamic type.\nstatic bool checkDynamicType(EvalInfo &Info, const Expr *E, const LValue &This, AccessKinds AK, bool Polymorphic) {\n  if (!Obj.Value) {\n    // The object is not usable in constant expressions, so we can\'t inspect\n    // its value to see if it\'s in-lifetime or what the active union members\n    // are. We can still check for a one-past-the-end lvalue.\n    if (This.Designator.isOnePastTheEnd() || This.Designator.isMostDerivedAnUnsizedArray()) {\n    } else if (Polymorphic) {\n      Info.FFDiag(E, diag::note_constexpr_polymorphic_unknown_dynamic_type) << AK << Val.getAsString(Info.Ctx, StarThisType);"}},
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:186:33: note: virtual function called on object \'d_not_constexpr\' whose dynamic type is not constant","clang/test/SemaCXX/constant-expression-cxx2a.cpp:312:18: note: typeid applied to object \'extern_b2\' whose dynamic type is not constant"}
}
},
},
["note_constexpr_pseudo_destructor"]={
["note_constexpr_pseudo_destructor"]={
[f]="pseudo-destructor call is not permitted in constant expressions until C++20",
[b]="pseudo-destructor call is not permitted in constant expressions until C++20",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="pseudo-destructor call is not permitted in constant expressions until C++20",
[h]="pseudo-destructor call is not permitted in constant expressions until C++20",
[g]=b,
[j]=i,
[e]="pseudo\\-destructor call is not permitted in constant expressions until C\\+\\+20",
[k]="pseudo\\-destructor call is not permitted in constant expressions until C\\+\\+20",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"61422f96653f",1569615876,"For P0784R7: add support for explicit destructor calls and"},
[m]={"61422f96653f",1569615876,"For P0784R7: add support for explicit destructor calls and"},
[n]={{p,7705,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  bool handleCallExpr(const CallExpr *E, APValue &Result, const LValue *ResultSlot) {\n    // Extract function decl and \'this\' pointer from the callee.\n    if (CalleeType->isSpecificBuiltinType(BuiltinType::BoundMember)) {\n      if (const MemberExpr *ME = dyn_cast<MemberExpr>(Callee)) {\n      } else if (const BinaryOperator *BE = dyn_cast<BinaryOperator>(Callee)) {\n      } else if (const auto *PDE = dyn_cast<CXXPseudoDestructorExpr>(Callee)) {\n        if (!Info.getLangOpts().CPlusPlus20)\n          Info.CCEDiag(PDE, diag::note_constexpr_pseudo_destructor);"}}
[n]={{q,7705,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  bool handleCallExpr(const CallExpr *E, APValue &Result, const LValue *ResultSlot) {\n    // Extract function decl and \'this\' pointer from the callee.\n    if (CalleeType->isSpecificBuiltinType(BuiltinType::BoundMember)) {\n      if (const MemberExpr *ME = dyn_cast<MemberExpr>(Callee)) {\n      } else if (const BinaryOperator *BE = dyn_cast<BinaryOperator>(Callee)) {\n      } else if (const auto *PDE = dyn_cast<CXXPseudoDestructorExpr>(Callee)) {\n        if (!Info.getLangOpts().CPlusPlus20)\n          Info.CCEDiag(PDE, diag::note_constexpr_pseudo_destructor);"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:452:9: note: pseudo-destructor call is not permitted in constant expressions until C++20","clang/test/CXX/expr/expr.const/p2-0x.cpp:462:9: note: pseudo-destructor call is not permitted in constant expressions until C++20","clang/test/CXX/expr/expr.const/p2-0x.cpp:462:9: note: pseudo-destructor call is not permitted in constant expressions until C++20"}
}
},
},
["note_constexpr_pure_virtual_call"]={
["note_constexpr_pure_virtual_call"]={
[f]="pure virtual function A called",
[b]="pure virtual function A called",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="pure virtual function %q0 called",
[h]="pure virtual function %q0 called",
[g]=b,
[j]=i,
[e]="pure virtual function (.*?) called",
[k]="pure virtual function (.*?) called",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"5c5be6b2f7fc",1557733330,"[c++20] P1064R0: Allow virtual function calls in constant expression"},
[m]={"5c5be6b2f7fc",1557733330,"[c++20] P1064R0: Allow virtual function calls in constant expression"},
[n]={{p,5797,"/// Perform virtual dispatch.\nstatic const CXXMethodDecl *HandleVirtualDispatch(EvalInfo &Info, const Expr *E, LValue &This, const CXXMethodDecl *Found, llvm::SmallVectorImpl<QualType> &CovariantAdjustmentPath) {\n  // C++2a [class.abstract]p6:\n  //  the effect of making a virtual call to a pure virtual function [...] is\n  //  undefined\n  if (Callee->isPure()) {\n    Info.FFDiag(E, diag::note_constexpr_pure_virtual_call, 1) << Callee;"},{w,378,"bool CheckPure(InterpState &S, CodePtr OpPC, const CXXMethodDecl *MD) {\n  S.FFDiag(E, diag::note_constexpr_pure_virtual_call, 1) << MD;"}}
[n]={{q,5797,"/// Perform virtual dispatch.\nstatic const CXXMethodDecl *HandleVirtualDispatch(EvalInfo &Info, const Expr *E, LValue &This, const CXXMethodDecl *Found, llvm::SmallVectorImpl<QualType> &CovariantAdjustmentPath) {\n  // C++2a [class.abstract]p6:\n  //  the effect of making a virtual call to a pure virtual function [...] is\n  //  undefined\n  if (Callee->isPure()) {\n    Info.FFDiag(E, diag::note_constexpr_pure_virtual_call, 1) << Callee;"},{A,378,"bool CheckPure(InterpState &S, CodePtr OpPC, const CXXMethodDecl *MD) {\n  S.FFDiag(E, diag::note_constexpr_pure_virtual_call, 1) << MD;"}},
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:229:30: note: pure virtual function \'Virtual::Abstract::f\' called"}
}
},
},
["note_constexpr_static_local"]={
["note_constexpr_static_local"]={
[f]="control flows through the definition of a ... variable",
[b]="control flows through the definition of a ... variable",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="control flows through the definition of a %select{static|thread_local}0 variable",
[h]="control flows through the definition of a %select{static|thread_local}0 variable",
[g]=b,
[j]=i,
[e]="control flows through the definition of a (?:static|thread_local) variable",
[k]="control flows through the definition of a (?:static|thread_local) variable",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"683e83c56f98",1633469611,"[Clang][C++2b] P2242R3: Non-literal variables [...] in constexpr"},
[m]={"683e83c56f98",1633469611,"[Clang][C++2b] P2242R3: Non-literal variables [...] in constexpr"},
[n]={{p,5090,"static bool CheckLocalVariableDeclaration(EvalInfo &Info, const VarDecl *VD) {\n  // An expression E is a core constant expression unless the evaluation of E\n  // would evaluate one of the following: [C++23] - a control flow that passes\n  // through a declaration of a variable with static or thread storage duration\n  // unless that variable is usable in constant expressions.\n  if (VD->isLocalVarDecl() && VD->isStaticLocal() && !VD->isUsableInConstantExpressions(Info.Ctx)) {\n    Info.CCEDiag(VD->getLocation(), diag::note_constexpr_static_local) << (VD->getTSCSpec() == TSCS_unspecified ? 0 : 1) << VD;"}}
[n]={{q,5090,"static bool CheckLocalVariableDeclaration(EvalInfo &Info, const VarDecl *VD) {\n  // An expression E is a core constant expression unless the evaluation of E\n  // would evaluate one of the following: [C++23] - a control flow that passes\n  // through a declaration of a variable with static or thread storage duration\n  // unless that variable is usable in constant expressions.\n  if (VD->isLocalVarDecl() && VD->isStaticLocal() && !VD->isUsableInConstantExpressions(Info.Ctx)) {\n    Info.CCEDiag(VD->getLocation(), diag::note_constexpr_static_local) << (VD->getTSCSpec() == TSCS_unspecified ? 0 : 1) << VD;"}},
[o]={
["clang/test/SemaCXX/constant-expression-cxx2b.cpp"]={"clang/test/SemaCXX/constant-expression-cxx2b.cpp:14:20: note: control flows through the definition of a static variable","clang/test/SemaCXX/constant-expression-cxx2b.cpp:19:26: note: control flows through the definition of a thread_local variable","clang/test/SemaCXX/constant-expression-cxx2b.cpp:25:28: note: control flows through the definition of a thread_local variable","clang/test/SemaCXX/constant-expression-cxx2b.cpp:31:23: note: control flows through the definition of a thread_local variable","clang/test/SemaCXX/constant-expression-cxx2b.cpp:37:20: note: control flows through the definition of a static variable","clang/test/SemaCXX/constant-expression-cxx2b.cpp:42:26: note: control flows through the definition of a thread_local variable","clang/test/SemaCXX/constant-expression-cxx2b.cpp:67:20: note: control flows through the definition of a static variable","clang/test/SemaCXX/constant-expression-cxx2b.cpp:78:26: note: control flows through the definition of a thread_local variable","clang/test/SemaCXX/constant-expression-cxx2b.cpp:190:22: note: control flows through the definition of a static variable"}
}
},
},
["note_constexpr_step_limit_exceeded"]={
["note_constexpr_step_limit_exceeded"]={
[f]="constexpr evaluation hit maximum step limit; possible infinite loop?",
[b]="constexpr evaluation hit maximum step limit; possible infinite loop?",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="constexpr evaluation hit maximum step limit; possible infinite loop?",
[h]="constexpr evaluation hit maximum step limit; possible infinite loop?",
[g]=b,
[j]=i,
[e]="constexpr evaluation hit maximum step limit; possible infinite loop\\?",
[k]="constexpr evaluation hit maximum step limit; possible infinite loop\\?",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"a3d3bd215bcd",1367979123,"C++1y: Add a step limit to constexpr evaluation, to catch runaway loops."},
[m]={"a3d3bd215bcd",1367979123,"C++1y: Add a step limit to constexpr evaluation, to catch runaway loops."},
[n]={{p,1041,"/// EvalInfo - This is a private struct used by the evaluator to capture\n/// information about a subexpression as it is folded.  It retains information\n/// about the AST context, but also maintains information about the folded\n/// expression.\n///\n/// If an expression could be evaluated, it is still possible it is not a C\n/// \"integer constant expression\" or constant expression.  If not, this struct\n/// captures information about how and why not.\n///\n/// One bit of information passed *into* the request for constant folding\n/// indicates whether the subexpression is \"evaluated\" or not according to C\n/// rules.  For example, the RHS of (0 && foo()) is not evaluated.  We can\n/// evaluate the expression regardless of what the RHS is, but C only allows\n/// certain things in certain situations.\nclass EvalInfo : public interp::State {\n  bool nextStep(const Stmt *S) {\n    if (!StepsLeft) {\n      FFDiag(S->getBeginLoc(), diag::note_constexpr_step_limit_exceeded);"}}
[n]={{q,1041,"/// EvalInfo - This is a private struct used by the evaluator to capture\n/// information about a subexpression as it is folded.  It retains information\n/// about the AST context, but also maintains information about the folded\n/// expression.\n///\n/// If an expression could be evaluated, it is still possible it is not a C\n/// \"integer constant expression\" or constant expression.  If not, this struct\n/// captures information about how and why not.\n///\n/// One bit of information passed *into* the request for constant folding\n/// indicates whether the subexpression is \"evaluated\" or not according to C\n/// rules.  For example, the RHS of (0 && foo()) is not evaluated.  We can\n/// evaluate the expression regardless of what the RHS is, but C only allows\n/// certain things in certain situations.\nclass EvalInfo : public interp::State {\n  bool nextStep(const Stmt *S) {\n    if (!StepsLeft) {\n      FFDiag(S->getBeginLoc(), diag::note_constexpr_step_limit_exceeded);"}},
[o]={
["clang/test/SemaCXX/constexpr-steps.cpp"]={"clang/test/SemaCXX/constexpr-steps.cpp:13:3: note: constexpr evaluation hit maximum step limit; possible infinite loop?"}
}
},
},
["note_constexpr_stmt_expr_unsupported"]={
["note_constexpr_stmt_expr_unsupported"]={
[f]="this use of statement expressions is not supported in a constant expression",
[b]="this use of statement expressions is not supported in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="this use of statement expressions is not supported in a constant expression",
[h]="this use of statement expressions is not supported in a constant expression",
[g]=b,
[j]=i,
[e]="this use of statement expressions is not supported in a constant expression",
[k]="this use of statement expressions is not supported in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"51f0317e527d",1371697205,"PR16377: Allow evaluation of statement expressions in constant evaluation,"},
[m]={"51f0317e527d",1371697205,"PR16377: Allow evaluation of statement expressions in constant evaluation,"},
[n]={{p,5077,"/// Evaluate a switch statement.\nstatic EvalStmtResult EvaluateSwitch(StmtResult &Result, EvalInfo &Info, const SwitchStmt *SS) {\n  case ESR_CaseNotFound:\n    Info.FFDiag(Found->getBeginLoc(), diag::note_constexpr_stmt_expr_unsupported);"},{p,8028,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  bool VisitStmtExpr(const StmtExpr *E) {\n    for (CompoundStmt::const_body_iterator BI = CS->body_begin(), BE = CS->body_end();\n      if (BI + 1 == BE) {\n        if (!FinalExpr) {\n          Info.FFDiag((*BI)->getBeginLoc(), diag::note_constexpr_stmt_expr_unsupported);"},{p,8043,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  bool VisitStmtExpr(const StmtExpr *E) {\n    for (CompoundStmt::const_body_iterator BI = CS->body_begin(), BE = CS->body_end();\n      if (ESR != ESR_Succeeded) {\n        // FIXME: If the statement-expression terminated due to \'return\',\n        // \'break\', or \'continue\', it would be nice to propagate that to\n        // the outer statement evaluation rather than bailing out.\n        if (ESR != ESR_Failed)\n          Info.FFDiag((*BI)->getBeginLoc(), diag::note_constexpr_stmt_expr_unsupported);"}}
[n]={{q,5077,"/// Evaluate a switch statement.\nstatic EvalStmtResult EvaluateSwitch(StmtResult &Result, EvalInfo &Info, const SwitchStmt *SS) {\n  case ESR_CaseNotFound:\n    Info.FFDiag(Found->getBeginLoc(), diag::note_constexpr_stmt_expr_unsupported);"},{q,8028,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  bool VisitStmtExpr(const StmtExpr *E) {\n    for (CompoundStmt::const_body_iterator BI = CS->body_begin(), BE = CS->body_end();\n      if (BI + 1 == BE) {\n        if (!FinalExpr) {\n          Info.FFDiag((*BI)->getBeginLoc(), diag::note_constexpr_stmt_expr_unsupported);"},{q,8043,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  bool VisitStmtExpr(const StmtExpr *E) {\n    for (CompoundStmt::const_body_iterator BI = CS->body_begin(), BE = CS->body_end();\n      if (ESR != ESR_Succeeded) {\n        // FIXME: If the statement-expression terminated due to \'return\',\n        // \'break\', or \'continue\', it would be nice to propagate that to\n        // the outer statement evaluation rather than bailing out.\n        if (ESR != ESR_Failed)\n          Info.FFDiag((*BI)->getBeginLoc(), diag::note_constexpr_stmt_expr_unsupported);"}},
[o]={
["clang/test/SemaCXX/constant-expression-cxx14.cpp"]={"clang/test/SemaCXX/constant-expression-cxx14.cpp:835:9: note: this use of statement expressions is not supported in a constant expression","clang/test/SemaCXX/constant-expression-cxx14.cpp:850:8: note: this use of statement expressions is not supported in a constant expression"}
}
},
},
["note_constexpr_subobject_declared_here"]={
["note_constexpr_subobject_declared_here"]={
[f]="subobject declared here",
[b]="subobject declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="subobject declared here",
[h]="subobject declared here",
[g]=b,
[j]=i,
[e]="subobject declared here",
[k]="subobject declared here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"31c69a3d6363",1558480520,"[c++20] P1330R0: permit simple-assignments that change the active member"},
[m]={"31c69a3d6363",1558480520,"[c++20] P1330R0: permit simple-assignments that change the active member"},
[n]={{p,2387,"static bool CheckEvaluationResult(CheckEvaluationResultKind CERK, EvalInfo &Info, SourceLocation DiagLoc, QualType Type, const APValue &Value, ConstantExprKind Kind, const FieldDecl *SubobjectDecl, CheckedTemporaries &CheckedTemps) {\n  if (!Value.hasValue()) {\n    if (SubobjectDecl) {\n      Info.Note(SubobjectDecl->getLocation(), diag::note_constexpr_subobject_declared_here);"},{w,389,"static void DiagnoseUninitializedSubobject(InterpState &S, const SourceInfo &SI, const FieldDecl *SubObjDecl) {\n  S.Note(SubObjDecl->getLocation(), diag::note_constexpr_subobject_declared_here);"}}
[n]={{q,2387,"static bool CheckEvaluationResult(CheckEvaluationResultKind CERK, EvalInfo &Info, SourceLocation DiagLoc, QualType Type, const APValue &Value, ConstantExprKind Kind, const FieldDecl *SubobjectDecl, CheckedTemporaries &CheckedTemps) {\n  if (!Value.hasValue()) {\n    if (SubobjectDecl) {\n      Info.Note(SubobjectDecl->getLocation(), diag::note_constexpr_subobject_declared_here);"},{A,389,"static void DiagnoseUninitializedSubobject(InterpState &S, const SourceInfo &SI, const FieldDecl *SubObjDecl) {\n  S.Note(SubObjDecl->getLocation(), diag::note_constexpr_subobject_declared_here);"}},
[o]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:759:7: note: subobject declared here","clang/test/SemaCXX/cxx2a-consteval.cpp:768:6: note: subobject declared here"}
}
},
},
["note_constexpr_temporary_here"]={
["note_constexpr_temporary_here"]={
[f]="temporary created here",
[b]="temporary created here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="temporary created here",
[h]="temporary created here",
[g]=b,
[j]=i,
[e]="temporary created here",
[k]="temporary created here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={Bb,1323758398,Eb},
[m]={ac,1323758398,Qb},
[n]={{p,2125,"static void NoteLValueLocation(EvalInfo &Info, APValue::LValueBase Base) {\n  if (VD)\n  else if (const Expr *E = Base.dyn_cast<const Expr *>())\n    Info.Note(E->getExprLoc(), diag::note_constexpr_temporary_here);"},{p,4218,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n  } else if (DynamicAllocLValue DA = LVal.Base.dyn_cast<DynamicAllocLValue>()) {\n  } else {\n    if (!Frame) {\n      if (const MaterializeTemporaryExpr *MTE = dyn_cast_or_null<MaterializeTemporaryExpr>(Base)) {\n        // C++20 [expr.const]p4: [DR2126]\n        //  An object or reference is usable in constant expressions if it is\n        //  - a temporary object of non-volatile const-qualified literal type\n        //    whose lifetime is extended to that of a variable that is usable\n        //    in constant expressions\n        //\n        // C++20 [expr.const]p5:\n        //  an lvalue-to-rvalue conversion [is not allowed unless it applies to]\n        //  - a non-volatile glvalue that refers to an object that is usable\n        //    in constant expressions, or\n        //  - a non-volatile glvalue of literal type that refers to a\n        //    non-volatile object whose lifetime began within the evaluation\n        //    of E;\n        //\n        // C++11 misses the \'began within the evaluation of e\' check and\n        // instead allows all temporaries, including things like:\n        //  int &&r = 1;\n        //  int x = ++r;\n        //  constexpr int k = r;\n        // Therefore we use the C++14-onwards rules in C++11 too.\n        //\n        // Note that temporaries whose lifetimes began while evaluating a\n        // variable\'s constructor are not usable while evaluating the\n        // corresponding destructor, not even if they\'re of const-qualified\n        // types.\n        if (!MTE->isUsableInConstantExpressions(Info.Ctx) && !lifetimeStartedInEvaluation(Info, LVal.Base)) {\n          Info.Note(MTE->getExprLoc(), diag::note_constexpr_temporary_here);"},{w,103,"static bool CheckTemporary(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (auto ID = Ptr.getDeclID()) {\n    S.Note(Ptr.getDeclLoc(), diag::note_constexpr_temporary_here);"},{w,167,"bool CheckLive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (!Ptr.isLive()) {\n    if (IsTemp)\n      S.Note(Ptr.getDeclLoc(), diag::note_constexpr_temporary_here);"}}
[n]={{q,2125,"static void NoteLValueLocation(EvalInfo &Info, APValue::LValueBase Base) {\n  if (VD)\n  else if (const Expr *E = Base.dyn_cast<const Expr *>())\n    Info.Note(E->getExprLoc(), diag::note_constexpr_temporary_here);"},{q,4218,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n  } else if (DynamicAllocLValue DA = LVal.Base.dyn_cast<DynamicAllocLValue>()) {\n  } else {\n    if (!Frame) {\n      if (const MaterializeTemporaryExpr *MTE = dyn_cast_or_null<MaterializeTemporaryExpr>(Base)) {\n        // C++20 [expr.const]p4: [DR2126]\n        //  An object or reference is usable in constant expressions if it is\n        //  - a temporary object of non-volatile const-qualified literal type\n        //    whose lifetime is extended to that of a variable that is usable\n        //    in constant expressions\n        //\n        // C++20 [expr.const]p5:\n        //  an lvalue-to-rvalue conversion [is not allowed unless it applies to]\n        //  - a non-volatile glvalue that refers to an object that is usable\n        //    in constant expressions, or\n        //  - a non-volatile glvalue of literal type that refers to a\n        //    non-volatile object whose lifetime began within the evaluation\n        //    of E;\n        //\n        // C++11 misses the \'began within the evaluation of e\' check and\n        // instead allows all temporaries, including things like:\n        //  int &&r = 1;\n        //  int x = ++r;\n        //  constexpr int k = r;\n        // Therefore we use the C++14-onwards rules in C++11 too.\n        //\n        // Note that temporaries whose lifetimes began while evaluating a\n        // variable\'s constructor are not usable while evaluating the\n        // corresponding destructor, not even if they\'re of const-qualified\n        // types.\n        if (!MTE->isUsableInConstantExpressions(Info.Ctx) && !lifetimeStartedInEvaluation(Info, LVal.Base)) {\n          Info.Note(MTE->getExprLoc(), diag::note_constexpr_temporary_here);"},{A,103,"static bool CheckTemporary(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (auto ID = Ptr.getDeclID()) {\n    S.Note(Ptr.getDeclLoc(), diag::note_constexpr_temporary_here);"},{A,167,"bool CheckLive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (!Ptr.isLive()) {\n    if (IsTemp)\n      S.Note(Ptr.getDeclLoc(), diag::note_constexpr_temporary_here);"}},
[o]={
["clang/test/CXX/expr/expr.const/p6-2a.cpp"]={"clang/test/CXX/expr/expr.const/p6-2a.cpp:43:26: note: temporary created here"}
}
},
},
["note_constexpr_this"]={
["note_constexpr_this"]={
[f]="...use of \'this\' pointer is only allowed within the evaluation of a call to a \'constexpr\' member function",
[b]="...use of \'this\' pointer is only allowed within the evaluation of a call to a \'constexpr\' member function",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{|implicit }0use of \'this\' pointer is only allowed within the evaluation of a call to a \'constexpr\' member function",
[h]="%select{|implicit }0use of \'this\' pointer is only allowed within the evaluation of a call to a \'constexpr\' member function",
[g]=b,
[j]=i,
[e]="(?:|implicit )use of \'this\' pointer is only allowed within the evaluation of a call to a \'constexpr\' member function",
[k]="(?:|implicit )use of \'this\' pointer is only allowed within the evaluation of a call to a \'constexpr\' member function",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"22a5d61b5d39",1404712813,"Add an explicit diagnostic for the case where an expression is not a constant"},
[m]={"22a5d61b5d39",1404712813,"Add an explicit diagnostic for the case where an expression is not a constant"},
[n]={{p,8809,"class PointerExprEvaluator : public ExprEvaluatorBase<PointerExprEvaluator> {\n  bool VisitCXXThisExpr(const CXXThisExpr *E) {\n    if (!Info.CurrentCall->This) {\n      if (Info.getLangOpts().CPlusPlus11)\n        Info.FFDiag(E, diag::note_constexpr_this) << E->isImplicit();"},{w,367,"bool CheckThis(InterpState &S, CodePtr OpPC, const Pointer &This) {\n  if (S.getLangOpts().CPlusPlus11)\n    S.FFDiag(Loc, diag::note_constexpr_this) << IsImplicit;"}}
[n]={{q,8809,"class PointerExprEvaluator : public ExprEvaluatorBase<PointerExprEvaluator> {\n  bool VisitCXXThisExpr(const CXXThisExpr *E) {\n    if (!Info.CurrentCall->This) {\n      if (Info.getLangOpts().CPlusPlus11)\n        Info.FFDiag(E, diag::note_constexpr_this) << E->isImplicit();"},{A,367,"bool CheckThis(InterpState &S, CodePtr OpPC, const Pointer &This) {\n  if (S.getLangOpts().CPlusPlus11)\n    S.FFDiag(Loc, diag::note_constexpr_this) << IsImplicit;"}},
[o]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:746:5: note: use of \'this\' pointer is only allowed within the evaluation of a call to a \'constexpr\' member function","clang/test/SemaCXX/cxx2a-consteval.cpp:751:5: note: implicit use of \'this\' pointer is only allowed within the evaluation of a call to a \'constexpr\' member function"}
}
},
},
["note_constexpr_typeid_polymorphic"]={
["note_constexpr_typeid_polymorphic"]={
[f]="typeid applied to expression of polymorphic type A is not allowed in a constant expression in C++ standards before C++20",
[b]="typeid applied to expression of polymorphic type A is not allowed in a constant expression in C++ standards before C++20",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="typeid applied to expression of polymorphic type %0 is not allowed in a constant expression in C++ standards before C++20",
[h]="typeid applied to expression of polymorphic type %0 is not allowed in a constant expression in C++ standards before C++20",
[g]=b,
[j]=i,
[e]="typeid applied to expression of polymorphic type (.*?) is not allowed in a constant expression in C\\+\\+ standards before C\\+\\+20",
[k]="typeid applied to expression of polymorphic type (.*?) is not allowed in a constant expression in C\\+\\+ standards before C\\+\\+20",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"6e52514c5deb",1324988308,"constexpr: support for evaluation and codegen of typeid constants."},
[m]={"6e52514c5deb",1324988308,"constexpr: support for evaluation and codegen of typeid constants."},
[n]={{p,8493,"bool LValueExprEvaluator::VisitCXXTypeidExpr(const CXXTypeidExpr *E) {\n  if (!E->isPotentiallyEvaluated()) {\n  } else {\n    if (!Info.Ctx.getLangOpts().CPlusPlus20) {\n      Info.CCEDiag(E, diag::note_constexpr_typeid_polymorphic) << E->getExprOperand()->getType() << E->getExprOperand()->getSourceRange();"}}
[n]={{q,8493,"bool LValueExprEvaluator::VisitCXXTypeidExpr(const CXXTypeidExpr *E) {\n  if (!E->isPotentiallyEvaluated()) {\n  } else {\n    if (!Info.Ctx.getLangOpts().CPlusPlus20) {\n      Info.CCEDiag(E, diag::note_constexpr_typeid_polymorphic) << E->getExprOperand()->getType() << E->getExprOperand()->getSourceRange();"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:487:41: note: typeid applied to expression of polymorphic type \'S\' is not allowed in a constant expression in C++ standards before C++20"}
}
},
},
["note_constexpr_uninitialized"]={
["note_constexpr_uninitialized"]={
[f]="subobject ...A is not initialized",
[b]="subobject ...A is not initialized",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="subobject %select{of type |}0%1 is not initialized",
[h]="subobject %select{of type |}0%1 is not initialized",
[g]=b,
[j]=i,
[e]="subobject (?:of type |)(.*?) is not initialized",
[k]="subobject (?:of type |)(.*?) is not initialized",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"1a90f5956d15",1371577911,"PR14503: Don\'t assert if a constexpr constructor temploid instantiates to a"},
[m]={"1a90f5956d15",1371577911,"PR14503: Don\'t assert if a constexpr constructor temploid instantiates to a"},
[n]={{p,2384,"static bool CheckEvaluationResult(CheckEvaluationResultKind CERK, EvalInfo &Info, SourceLocation DiagLoc, QualType Type, const APValue &Value, ConstantExprKind Kind, const FieldDecl *SubobjectDecl, CheckedTemporaries &CheckedTemps) {\n  if (!Value.hasValue()) {\n    if (SubobjectDecl) {\n      Info.FFDiag(DiagLoc, diag::note_constexpr_uninitialized) << /*(name)*/ 1 << SubobjectDecl;"},{p,2389,"static bool CheckEvaluationResult(CheckEvaluationResultKind CERK, EvalInfo &Info, SourceLocation DiagLoc, QualType Type, const APValue &Value, ConstantExprKind Kind, const FieldDecl *SubobjectDecl, CheckedTemporaries &CheckedTemps) {\n  if (!Value.hasValue()) {\n    if (SubobjectDecl) {\n    } else {\n      Info.FFDiag(DiagLoc, diag::note_constexpr_uninitialized) << /*of type*/ 0 << Type;"},{w,386,"static void DiagnoseUninitializedSubobject(InterpState &S, const SourceInfo &SI, const FieldDecl *SubObjDecl) {\n  S.FFDiag(SI, diag::note_constexpr_uninitialized) << /*(name)*/ 1 << SubObjDecl;"}}
[n]={{q,2384,"static bool CheckEvaluationResult(CheckEvaluationResultKind CERK, EvalInfo &Info, SourceLocation DiagLoc, QualType Type, const APValue &Value, ConstantExprKind Kind, const FieldDecl *SubobjectDecl, CheckedTemporaries &CheckedTemps) {\n  if (!Value.hasValue()) {\n    if (SubobjectDecl) {\n      Info.FFDiag(DiagLoc, diag::note_constexpr_uninitialized) << /*(name)*/ 1 << SubobjectDecl;"},{q,2389,"static bool CheckEvaluationResult(CheckEvaluationResultKind CERK, EvalInfo &Info, SourceLocation DiagLoc, QualType Type, const APValue &Value, ConstantExprKind Kind, const FieldDecl *SubobjectDecl, CheckedTemporaries &CheckedTemps) {\n  if (!Value.hasValue()) {\n    if (SubobjectDecl) {\n    } else {\n      Info.FFDiag(DiagLoc, diag::note_constexpr_uninitialized) << /*of type*/ 0 << Type;"},{A,386,"static void DiagnoseUninitializedSubobject(InterpState &S, const SourceInfo &SI, const FieldDecl *SubObjDecl) {\n  S.FFDiag(SI, diag::note_constexpr_uninitialized) << /*(name)*/ 1 << SubObjDecl;"}},
[o]={
["clang/test/SemaCXX/cxx2a-consteval.cpp"]={"clang/test/SemaCXX/cxx2a-consteval.cpp:763:3: note: subobject \'Val\' is not initialized","clang/test/SemaCXX/cxx2a-consteval.cpp:772:8: note: subobject \'Val\' is not initialized"}
}
},
},
["note_constexpr_uninitialized_base"]={
["note_constexpr_uninitialized_base"]={
[f]="constructor of base class A is not called",
[b]="constructor of base class A is not called",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="constructor of base class %0 is not called",
[h]="constructor of base class %0 is not called",
[g]=b,
[j]=i,
[e]="constructor of base class (.*?) is not called",
[k]="constructor of base class (.*?) is not called",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"8c5c652ed71b",1691496625,"[clang][ExprConstant] Fix crash on uninitialized base class subobject"},
[m]={"8c5c652ed71b",1691496625,"[clang][ExprConstant] Fix crash on uninitialized base class subobject"},
[n]={{p,2430,"static bool CheckEvaluationResult(CheckEvaluationResultKind CERK, EvalInfo &Info, SourceLocation DiagLoc, QualType Type, const APValue &Value, ConstantExprKind Kind, const FieldDecl *SubobjectDecl, CheckedTemporaries &CheckedTemps) {\n  if (Value.isStruct()) {\n    if (const CXXRecordDecl *CD = dyn_cast<CXXRecordDecl>(RD)) {\n      for (const CXXBaseSpecifier &BS : CD->bases()) {\n        if (!BaseValue.hasValue()) {\n          Info.FFDiag(TypeBeginLoc, diag::note_constexpr_uninitialized_base) << BS.getType() << SourceRange(TypeBeginLoc, BS.getEndLoc());"}}
[n]={{q,2430,"static bool CheckEvaluationResult(CheckEvaluationResultKind CERK, EvalInfo &Info, SourceLocation DiagLoc, QualType Type, const APValue &Value, ConstantExprKind Kind, const FieldDecl *SubobjectDecl, CheckedTemporaries &CheckedTemps) {\n  if (Value.isStruct()) {\n    if (const CXXRecordDecl *CD = dyn_cast<CXXRecordDecl>(RD)) {\n      for (const CXXBaseSpecifier &BS : CD->bases()) {\n        if (!BaseValue.hasValue()) {\n          Info.FFDiag(TypeBeginLoc, diag::note_constexpr_uninitialized_base) << BS.getType() << SourceRange(TypeBeginLoc, BS.getEndLoc());"}},
[o]={
["clang/test/SemaCXX/constexpr-subobj-initialization.cpp"]={"clang/test/SemaCXX/constexpr-subobj-initialization.cpp:8:14: note: constructor of base class \'DelBase\' is not called","clang/test/SemaCXX/constexpr-subobj-initialization.cpp:8:14: note: constructor of base class \'DelBase\' is not called","clang/test/SemaCXX/constexpr-subobj-initialization.cpp:18:12: note: constructor of base class \'Base\' is not called","clang/test/SemaCXX/constexpr-subobj-initialization.cpp:24:12: note: constructor of base class \'Base\' is not called"}
}
},
},
["note_constexpr_union_member_change_during_init"]={
["note_constexpr_union_member_change_during_init"]={
[f]="assignment would change active union member during the initialization of a different member of the same union",
[b]="assignment would change active union member during the initialization of a different member of the same union",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="assignment would change active union member during the initialization of a different member of the same union",
[h]="assignment would change active union member during the initialization of a different member of the same union",
[g]=b,
[j]=i,
[e]="assignment would change active union member during the initialization of a different member of the same union",
[k]="assignment would change active union member during the initialization of a different member of the same union",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={fc,1579695612,nc},
[m]={Fc,1579695612,Qc},
[n]={{p,5999,"struct StartLifetimeOfUnionMemberHandler {\n  bool found(APValue &Subobj, QualType SubobjType) {\n    if (declaresSameEntity(Subobj.getUnionField(), Field)) {\n    } else if (DuringInit) {\n      Info.FFDiag(LHSExpr, diag::note_constexpr_union_member_change_during_init);"}}
[n]={{q,5999,"struct StartLifetimeOfUnionMemberHandler {\n  bool found(APValue &Subobj, QualType SubobjType) {\n    if (declaresSameEntity(Subobj.getUnionField(), Field)) {\n    } else if (DuringInit) {\n      Info.FFDiag(LHSExpr, diag::note_constexpr_union_member_change_during_init);"}},
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:1377:9: note: assignment would change active union member during the initialization of a different member of the same union","clang/test/SemaCXX/constant-expression-cxx2a.cpp:1388:27: note: assignment would change active union member during the initialization of a different member of the same union","clang/test/SemaCXX/constant-expression-cxx2a.cpp:1392:28: note: assignment would change active union member during the initialization of a different member of the same union"}
}
},
},
["note_constexpr_unsized_array_indexed"]={
["note_constexpr_unsized_array_indexed"]={
[f]="indexing of array without known bound is not allowed in a constant expression",
[b]="indexing of array without known bound is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="indexing of array without known bound is not allowed in a constant expression",
[h]="indexing of array without known bound is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="indexing of array without known bound is not allowed in a constant expression",
[k]="indexing of array without known bound is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"2cd56048239f",1503971533,"Improve constant expression evaluation of arrays of unknown bound."},
[m]={"2cd56048239f",1503971533,"Improve constant expression evaluation of arrays of unknown bound."},
[n]={{p,1424,"void SubobjectDesignator::diagnoseUnsizedArrayPointerArithmetic(EvalInfo &Info, const Expr *E) {\n  Info.CCEDiag(E, diag::note_constexpr_unsized_array_indexed);"},{w,143,"bool CheckArray(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  S.FFDiag(E, diag::note_constexpr_unsized_array_indexed);"}}
[n]={{q,1424,"void SubobjectDesignator::diagnoseUnsizedArrayPointerArithmetic(EvalInfo &Info, const Expr *E) {\n  Info.CCEDiag(E, diag::note_constexpr_unsized_array_indexed);"},{A,143,"bool CheckArray(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  S.FFDiag(E, diag::note_constexpr_unsized_array_indexed);"}},
[o]={
["clang/test/SemaCXX/constexpr-array-unknown-bound.cpp"]={"clang/test/SemaCXX/constexpr-array-unknown-bound.cpp:20:27: note: indexing of array without known bound is not allowed in a constant expression"}
}
},
},
["note_constexpr_unsupported_destruction"]={
["note_constexpr_unsupported_destruction"]={
[f]="non-trivial destruction of type A in a constant expression is not supported",
[b]="non-trivial destruction of type A in a constant expression is not supported",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="non-trivial destruction of type %0 in a constant expression is not supported",
[h]="non-trivial destruction of type %0 in a constant expression is not supported",
[g]=b,
[j]=i,
[e]="non\\-trivial destruction of type (.*?) in a constant expression is not supported",
[k]="non\\-trivial destruction of type (.*?) in a constant expression is not supported",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"457226e02a6e",1569210524,"For P0784R7: add support for constexpr destructors, and call them as"},
[m]={"457226e02a6e",1569210524,"For P0784R7: add support for constexpr destructors, and call them as"},
[n]={{p,6540,"static bool HandleDestructionImpl(EvalInfo &Info, SourceLocation CallLoc, const LValue &This, APValue &Value, QualType T) {\n  if (!RD) {\n    if (T.isDestructedType()) {\n      Info.FFDiag(CallLoc, diag::note_constexpr_unsupported_destruction) << T;"}}
[n]={{q,6540,"static bool HandleDestructionImpl(EvalInfo &Info, SourceLocation CallLoc, const LValue &This, APValue &Value, QualType T) {\n  if (!RD) {\n    if (T.isDestructedType()) {\n      Info.FFDiag(CallLoc, diag::note_constexpr_unsupported_destruction) << T;"}}
},
},
["note_constexpr_unsupported_flexible_array"]={
["note_constexpr_unsupported_flexible_array"]={
[f]="flexible array initialization is not yet supported",
[b]="flexible array initialization is not yet supported",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="flexible array initialization is not yet supported",
[h]="flexible array initialization is not yet supported",
[g]=b,
[j]=i,
[e]="flexible array initialization is not yet supported",
[k]="flexible array initialization is not yet supported",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={qb,1643408541,rb},
[m]={Hb,1643408541,Eb},
[n]={{p,10128,"bool RecordExprEvaluator::VisitCXXParenListOrInitListExpr(const Expr *ExprToVisit, ArrayRef<Expr *> Args) {\n  // Initialize members.\n  for (const auto *Field : RD->fields()) {\n    if (Field->getType()->isIncompleteArrayType()) {\n      if (auto *CAT = Info.Ctx.getAsConstantArrayType(Init->getType())) {\n        if (!CAT->getSize().isZero()) {\n          Info.FFDiag(Init, diag::note_constexpr_unsupported_flexible_array);"}}
[n]={{q,10128,"bool RecordExprEvaluator::VisitCXXParenListOrInitListExpr(const Expr *ExprToVisit, ArrayRef<Expr *> Args) {\n  // Initialize members.\n  for (const auto *Field : RD->fields()) {\n    if (Field->getType()->isIncompleteArrayType()) {\n      if (auto *CAT = Info.Ctx.getAsConstantArrayType(Init->getType())) {\n        if (!CAT->getSize().isZero()) {\n          Info.FFDiag(Init, diag::note_constexpr_unsupported_flexible_array);"}},
[o]={
[Ob]={"clang/test/SemaCXX/constant-expression-cxx11.cpp:2419:23: note: flexible array initialization is not yet supported"}
}
},
},
["note_constexpr_unsupported_layout"]={
["note_constexpr_unsupported_layout"]={
[f]="type A has unexpected layout",
[b]="type A has unexpected layout",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="type %0 has unexpected layout",
[h]="type %0 has unexpected layout",
[g]=b,
[j]=i,
[e]="type (.*?) has unexpected layout",
[k]="type (.*?) has unexpected layout",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={fc,1579695612,nc},
[m]={Fc,1579695612,Qc},
[n]={{p,4060,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Allow reading from a GUID declaration.\n    if (auto *GD = dyn_cast<MSGuidDecl>(D)) {\n      if (V.isAbsent()) {\n        Info.FFDiag(E, diag::note_constexpr_unsupported_layout) << GD->getType();"},{p,10239,"bool RecordExprEvaluator::VisitCXXStdInitializerListExpr(const CXXStdInitializerListExpr *E) {\n  auto InvalidType = [&] {\n    Info.FFDiag(E, diag::note_constexpr_unsupported_layout) << E->getType();"}}
[n]={{q,4060,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Allow reading from a GUID declaration.\n    if (auto *GD = dyn_cast<MSGuidDecl>(D)) {\n      if (V.isAbsent()) {\n        Info.FFDiag(E, diag::note_constexpr_unsupported_layout) << GD->getType();"},{q,10239,"bool RecordExprEvaluator::VisitCXXStdInitializerListExpr(const CXXStdInitializerListExpr *E) {\n  auto InvalidType = [&] {\n    Info.FFDiag(E, diag::note_constexpr_unsupported_layout) << E->getType();"}},
[o]={
["clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-stdinitializerlist.cpp:377:22: note: type \'const std::initializer_list<weird>\' has unexpected layout"}
}
},
},
["note_constexpr_unsupported_temporary_nontrivial_dtor"]={
["note_constexpr_unsupported_temporary_nontrivial_dtor"]={
[f]="non-trivial destruction of lifetime-extended temporary with type A used in the result of a constant expression is not yet supported",
[b]="non-trivial destruction of lifetime-extended temporary with type A used in the result of a constant expression is not yet supported",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="non-trivial destruction of lifetime-extended temporary with type %0 used in the result of a constant expression is not yet supported",
[h]="non-trivial destruction of lifetime-extended temporary with type %0 used in the result of a constant expression is not yet supported",
[g]=b,
[j]=i,
[e]="non\\-trivial destruction of lifetime\\-extended temporary with type (.*?) used in the result of a constant expression is not yet supported",
[k]="non\\-trivial destruction of lifetime\\-extended temporary with type (.*?) used in the result of a constant expression is not yet supported",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"2e204e23911b",1601401476,"[clang] Enable support for #pragma STDC FENV_ACCESS"},
[m]={"2e204e23911b",1601401476,"[clang] Enable support for #pragma STDC FENV_ACCESS"},
[n]={{p,2288,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  if (BaseVD) {\n  } else if (const auto *MTE = dyn_cast_or_null<MaterializeTemporaryExpr>(BaseE)) {\n    if (CheckedTemps.insert(MTE).second) {\n      if (TempType.isDestructedType()) {\n        Info.FFDiag(MTE->getExprLoc(), diag::note_constexpr_unsupported_temporary_nontrivial_dtor) << TempType;"}}
[n]={{q,2288,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  if (BaseVD) {\n  } else if (const auto *MTE = dyn_cast_or_null<MaterializeTemporaryExpr>(BaseE)) {\n    if (CheckedTemps.insert(MTE).second) {\n      if (TempType.isDestructedType()) {\n        Info.FFDiag(MTE->getExprLoc(), diag::note_constexpr_unsupported_temporary_nontrivial_dtor) << TempType;"}},
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:1294:21: note: non-trivial destruction of lifetime-extended temporary with type \'A\' used in the result of a constant expression is not yet supported","clang/test/SemaCXX/constant-expression-cxx2a.cpp:1297:21: note: non-trivial destruction of lifetime-extended temporary with type \'A\' used in the result of a constant expression is not yet supported","clang/test/SemaCXX/constant-expression-cxx2a.cpp:1300:26: note: non-trivial destruction of lifetime-extended temporary with type \'const A\' used in the result of a constant expression is not yet supported"}
}
},
},
["note_constexpr_unsupported_unsized_array"]={
["note_constexpr_unsupported_unsized_array"]={
[f]="array-to-pointer decay of array member without known bound is not supported",
[b]="array-to-pointer decay of array member without known bound is not supported",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="array-to-pointer decay of array member without known bound is not supported",
[h]="array-to-pointer decay of array member without known bound is not supported",
[g]=b,
[j]=i,
[e]="array\\-to\\-pointer decay of array member without known bound is not supported",
[k]="array\\-to\\-pointer decay of array member without known bound is not supported",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"2cd56048239f",1503971533,"Improve constant expression evaluation of arrays of unknown bound."},
[m]={"2cd56048239f",1503971533,"Improve constant expression evaluation of arrays of unknown bound."},
[n]={{p,1672,"#endif\n  void addUnsizedArray(EvalInfo &Info, const Expr *E, QualType ElemTy) {\n    if (!Designator.Entries.empty()) {\n      Info.CCEDiag(E, diag::note_constexpr_unsupported_unsized_array);"}}
[n]={{q,1672,"#endif\n  void addUnsizedArray(EvalInfo &Info, const Expr *E, QualType ElemTy) {\n    if (!Designator.Entries.empty()) {\n      Info.CCEDiag(E, diag::note_constexpr_unsupported_unsized_array);"}},
[o]={
["clang/test/SemaCXX/constexpr-array-unknown-bound.cpp"]={"clang/test/SemaCXX/constexpr-array-unknown-bound.cpp:15:21: note: array-to-pointer decay of array member without known bound is not supported","clang/test/SemaCXX/constexpr-array-unknown-bound.cpp:16:21: note: array-to-pointer decay of array member without known bound is not supported"}
}
},
},
["note_constexpr_use_uninit_reference"]={
["note_constexpr_use_uninit_reference"]={
[f]="use of reference outside its lifetime is not allowed in a constant expression",
[b]="use of reference outside its lifetime is not allowed in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use of reference outside its lifetime is not allowed in a constant expression",
[h]="use of reference outside its lifetime is not allowed in a constant expression",
[g]=b,
[j]=i,
[e]="use of reference outside its lifetime is not allowed in a constant expression",
[k]="use of reference outside its lifetime is not allowed in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"08d6a2cc7a58",1374649917,"C++1y: track object lifetime during constexpr evaluation, and don\'t allow"},
[m]={"08d6a2cc7a58",1374649917,"C++1y: track object lifetime during constexpr evaluation, and don\'t allow"},
[n]={{p,8379,"bool LValueExprEvaluator::VisitVarDecl(const Expr *E, const VarDecl *VD) {\n  if (!V->hasValue()) {\n    // FIXME: Is it possible for V to be indeterminate here? If so, we should\n    // adjust the diagnostic to say that.\n    if (!Info.checkingPotentialConstantExpression())\n      Info.FFDiag(E, diag::note_constexpr_use_uninit_reference);"}}
[n]={{q,8379,"bool LValueExprEvaluator::VisitVarDecl(const Expr *E, const VarDecl *VD) {\n  if (!V->hasValue()) {\n    // FIXME: Is it possible for V to be indeterminate here? If so, we should\n    // adjust the diagnostic to say that.\n    if (!Info.checkingPotentialConstantExpression())\n      Info.FFDiag(E, diag::note_constexpr_use_uninit_reference);"}},
[o]={
[Ob]={"clang/test/SemaCXX/constant-expression-cxx11.cpp:1964:24: note: use of reference outside its lifetime is not allowed in a constant expression"}
}
},
},
["note_constexpr_var_init_non_constant"]={
["note_constexpr_var_init_non_constant"]={
[f]="initializer of A is not a constant expression",
[b]="initializer of A is not a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="initializer of %0 is not a constant expression",
[h]="initializer of %0 is not a constant expression",
[g]=b,
[j]=i,
[e]="initializer of (.*?) is not a constant expression",
[k]="initializer of (.*?) is not a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"d0b4dd656d11",1324275561,"constexpr handling improvements. Produce detailed diagnostics when a \'constexpr\'"},
[m]={"d0b4dd656d11",1324275561,"constexpr handling improvements. Produce detailed diagnostics when a \'constexpr\'"},
[n]={{p,3368,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  // Check that we can fold the initializer. In C++, we will have already done\n  // this in the cases where it matters for conformance.\n  if (!VD->evaluateValue()) {\n    Info.FFDiag(E, diag::note_constexpr_var_init_non_constant, 1) << VD;"},{p,3386,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  // Check that the variable is actually usable in constant expressions. For a\n  // const integral variable or a reference, we might have a non-constant\n  // initializer that we can nonetheless evaluate the initializer for. Such\n  // variables are not usable in constant expressions. In C++98, the\n  // initializer also syntactically needs to be an ICE.\n  //\n  // FIXME: We don\'t diagnose cases that aren\'t potentially usable in constant\n  // expressions here; doing so would regress diagnostics for things like\n  // reading from a volatile constexpr variable.\n  if ((Info.getLangOpts().CPlusPlus && !VD->hasConstantInitialization() && VD->mightBeUsableInConstantExpressions(Info.Ctx)) || ((Info.getLangOpts().CPlusPlus || Info.getLangOpts().OpenCL) && !Info.getLangOpts().CPlusPlus11 && !VD->hasICEInitializer(Info.Ctx))) {\n    Info.CCEDiag(E, diag::note_constexpr_var_init_non_constant, 1) << VD;"}}
[n]={{q,3368,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  // Check that we can fold the initializer. In C++, we will have already done\n  // this in the cases where it matters for conformance.\n  if (!VD->evaluateValue()) {\n    Info.FFDiag(E, diag::note_constexpr_var_init_non_constant, 1) << VD;"},{q,3386,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  // Check that the variable is actually usable in constant expressions. For a\n  // const integral variable or a reference, we might have a non-constant\n  // initializer that we can nonetheless evaluate the initializer for. Such\n  // variables are not usable in constant expressions. In C++98, the\n  // initializer also syntactically needs to be an ICE.\n  //\n  // FIXME: We don\'t diagnose cases that aren\'t potentially usable in constant\n  // expressions here; doing so would regress diagnostics for things like\n  // reading from a volatile constexpr variable.\n  if ((Info.getLangOpts().CPlusPlus && !VD->hasConstantInitialization() && VD->mightBeUsableInConstantExpressions(Info.Ctx)) || ((Info.getLangOpts().CPlusPlus || Info.getLangOpts().OpenCL) && !Info.getLangOpts().CPlusPlus11 && !VD->hasICEInitializer(Info.Ctx))) {\n    Info.CCEDiag(E, diag::note_constexpr_var_init_non_constant, 1) << VD;"}},
[o]={
["clang/test/SemaCXX/c99-variable-length-array.cpp"]={"clang/test/SemaCXX/c99-variable-length-array.cpp:104:15: note: initializer of \'value\' is not a constant expression","clang/test/SemaCXX/c99-variable-length-array.cpp:104:15: note: initializer of \'value\' is not a constant expression"}
}
},
},
["note_constexpr_var_init_unknown"]={
["note_constexpr_var_init_unknown"]={
[f]="initializer of A is unknown",
[b]="initializer of A is unknown",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="initializer of %0 is unknown",
[h]="initializer of %0 is unknown",
[g]=b,
[j]=i,
[e]="initializer of (.*?) is unknown",
[k]="initializer of (.*?) is unknown",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"00068c452a59",1594250761,"Improve diagnostics for constant evaluation that fails because a"},
[m]={"00068c452a59",1594250761,"Improve diagnostics for constant evaluation that fails because a"},
[n]={{p,3341,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  if (!Init) {\n    // Don\'t diagnose during potential constant expression checking; an\n    // initializer might be added later.\n    if (!Info.checkingPotentialConstantExpression()) {\n      Info.FFDiag(E, diag::note_constexpr_var_init_unknown, 1) << VD;"}}
[n]={{q,3341,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  if (!Init) {\n    // Don\'t diagnose during potential constant expression checking; an\n    // initializer might be added later.\n    if (!Info.checkingPotentialConstantExpression()) {\n      Info.FFDiag(E, diag::note_constexpr_var_init_unknown, 1) << VD;"}},
[o]={
["clang/test/SemaCXX/c99-variable-length-array.cpp"]={"clang/test/SemaCXX/c99-variable-length-array.cpp:156:13: note: initializer of \'sz\' is unknown"}
}
},
},
["note_constexpr_var_init_weak"]={
["note_constexpr_var_init_weak"]={
[f]="initializer of weak variable A is not considered constant because it may be different at runtime",
[b]="initializer of weak variable A is not considered constant because it may be different at runtime",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="initializer of weak variable %0 is not considered constant because it may be different at runtime",
[h]="initializer of weak variable %0 is not considered constant because it may be different at runtime",
[g]=b,
[j]=i,
[e]="initializer of weak variable (.*?) is not considered constant because it may be different at runtime",
[k]="initializer of weak variable (.*?) is not considered constant because it may be different at runtime",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"00068c452a59",1594250761,"Improve diagnostics for constant evaluation that fails because a"},
[m]={"00068c452a59",1594250761,"Improve diagnostics for constant evaluation that fails because a"},
[n]={{p,3393,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  // Never use the initializer of a weak variable, not even for constant\n  // folding. We can\'t be sure that this is the definition that will be used.\n  if (VD->isWeak()) {\n    Info.FFDiag(E, diag::note_constexpr_var_init_weak) << VD;"}}
[n]={{q,3393,"/// Try to evaluate the initializer for a variable declaration.\n///\n/// \\param Info  Information about the ongoing evaluation.\n/// \\param E      An expression to be used when printing diagnostics.\n/// \\param VD    The variable whose initializer should be obtained.\n/// \\param Version The version of the variable within the frame.\n/// \\param Frame  The frame in which the variable was created. Must be null\n///              if this variable is not local to the evaluation.\n/// \\param Result Filled in with a pointer to the value of the variable.\nstatic bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, const VarDecl *VD, CallStackFrame *Frame, unsigned Version, APValue *&Result) {\n  // Never use the initializer of a weak variable, not even for constant\n  // folding. We can\'t be sure that this is the definition that will be used.\n  if (VD->isWeak()) {\n    Info.FFDiag(E, diag::note_constexpr_var_init_weak) << VD;"}},
[o]={
["clang/test/SemaCXX/weak-init.cpp"]={"clang/test/SemaCXX/weak-init.cpp:5:15: note: initializer of weak variable \'W1\' is not considered constant because it may be different at runtime","clang/test/SemaCXX/weak-init.cpp:14:20: note: initializer of weak variable \'W3\' is not considered constant because it may be different at runtime"}
}
},
},
["note_constexpr_virtual_base"]={
["note_constexpr_virtual_base"]={
[f]="cannot construct object of type A with virtual base class in a constant expression",
[b]="cannot construct object of type A with virtual base class in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot construct object of type %0 with virtual base class in a constant expression",
[h]="cannot construct object of type %0 with virtual base class in a constant expression",
[g]=b,
[j]=i,
[e]="cannot construct object of type (.*?) with virtual base class in a constant expression",
[k]="cannot construct object of type (.*?) with virtual base class in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"3607ffee5cca",1329105243,"Update constexpr implementation to match CWG\'s chosen approach for core issues"},
[m]={"3607ffee5cca",1329105243,"Update constexpr implementation to match CWG\'s chosen approach for core issues"},
[n]={{p,6274,"/// Evaluate a constructor call.\nstatic bool HandleConstructorCall(const Expr *E, const LValue &This, CallRef Call, const CXXConstructorDecl *Definition, EvalInfo &Info, APValue &Result) {\n  if (RD->getNumVBases()) {\n    Info.FFDiag(CallLoc, diag::note_constexpr_virtual_base) << RD;"},{p,6549,"static bool HandleDestructionImpl(EvalInfo &Info, SourceLocation CallLoc, const LValue &This, APValue &Value, QualType T) {\n  if (RD->getNumVBases()) {\n    Info.FFDiag(CallLoc, diag::note_constexpr_virtual_base) << RD;"},{p,9974,"bool RecordExprEvaluator::ZeroInitialization(const Expr *E, QualType T) {\n  if (isa<CXXRecordDecl>(RD) && cast<CXXRecordDecl>(RD)->getNumVBases()) {\n    Info.FFDiag(E, diag::note_constexpr_virtual_base) << RD;"}}
[n]={{q,6274,"/// Evaluate a constructor call.\nstatic bool HandleConstructorCall(const Expr *E, const LValue &This, CallRef Call, const CXXConstructorDecl *Definition, EvalInfo &Info, APValue &Result) {\n  if (RD->getNumVBases()) {\n    Info.FFDiag(CallLoc, diag::note_constexpr_virtual_base) << RD;"},{q,6549,"static bool HandleDestructionImpl(EvalInfo &Info, SourceLocation CallLoc, const LValue &This, APValue &Value, QualType T) {\n  if (RD->getNumVBases()) {\n    Info.FFDiag(CallLoc, diag::note_constexpr_virtual_base) << RD;"},{q,9974,"bool RecordExprEvaluator::ZeroInitialization(const Expr *E, QualType T) {\n  if (isa<CXXRecordDecl>(RD) && cast<CXXRecordDecl>(RD)->getNumVBases()) {\n    Info.FFDiag(E, diag::note_constexpr_virtual_base) << RD;"}},
[o]={
[ic]={"clang/test/CXX/basic/basic.types/p10.cpp:102:25: note: cannot construct object of type \'DerivedFromVBase<HasVBase>\' with virtual base class in a constant expression"}
}
},
},
["note_constexpr_virtual_base_here"]={
["note_constexpr_virtual_base_here"]={
[f]="virtual base class declared here",
[b]="virtual base class declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="virtual base class declared here",
[h]="virtual base class declared here",
[g]=b,
[j]=i,
[e]="virtual base class declared here",
[k]="virtual base class declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={fb,1317436288,mb},
[m]={Ab,1317436288,ub},
[n]={{q,1793,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  if (MD && MD->isInstance()) {\n    if (RD->getNumVBases()) {\n      for (const auto &I : RD->vbases())\n        Diag(I.getBeginLoc(), diag::note_constexpr_virtual_base_here) << I.getSourceRange();"},{B,9342,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n    for (const auto &I : RD->vbases())\n      Diag(I.getBeginLoc(), diag::note_constexpr_virtual_base_here) << I.getSourceRange();"}}
[n]={{r,1793,"// Check whether a function declaration satisfies the requirements of a\n// constexpr function definition or a constexpr constructor definition. If so,\n// return true. If not, produce appropriate diagnostics (unless asked not to by\n// Kind) and return false.\n//\n// This implements C++11 [dcl.constexpr]p3,4, as amended by DR1360.\nbool Sema::CheckConstexprFunctionDefinition(const FunctionDecl *NewFD, CheckConstexprKind Kind) {\n  if (MD && MD->isInstance()) {\n    if (RD->getNumVBases()) {\n      for (const auto &I : RD->vbases())\n        Diag(I.getBeginLoc(), diag::note_constexpr_virtual_base_here) << I.getSourceRange();"},{I,9342,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n    for (const auto &I : RD->vbases())\n      Diag(I.getBeginLoc(), diag::note_constexpr_virtual_base_here) << I.getSourceRange();"}},
[o]={
["clang/test/CXX/special/class.ctor/p6-0x.cpp"]={"clang/test/CXX/special/class.ctor/p6-0x.cpp:24:24: note: virtual base class declared here"}
}
},
},
["note_constexpr_virtual_call"]={
["note_constexpr_virtual_call"]={
[f]="cannot evaluate call to virtual function in a constant expression in C++ standards before C++20",
[b]="cannot evaluate call to virtual function in a constant expression in C++ standards before C++20",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot evaluate call to virtual function in a constant expression in C++ standards before C++20",
[h]="cannot evaluate call to virtual function in a constant expression in C++ standards before C++20",
[g]=b,
[j]=i,
[e]="cannot evaluate call to virtual function in a constant expression in C\\+\\+ standards before C\\+\\+20",
[k]="cannot evaluate call to virtual function in a constant expression in C\\+\\+ standards before C\\+\\+20",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"3607ffee5cca",1329105243,"Update constexpr implementation to match CWG\'s chosen approach for core issues"},
[m]={"3607ffee5cca",1329105243,"Update constexpr implementation to match CWG\'s chosen approach for core issues"},
[n]={{p,5592,"/// CheckConstexprFunction - Check that a function can be called in a constant\n/// expression.\nstatic bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body) {\n  // DR1872: An instantiated virtual constexpr function can\'t be called in a\n  // constant expression (prior to C++20). We can still constant-fold such a\n  // call.\n  if (!Info.Ctx.getLangOpts().CPlusPlus20 && isa<CXXMethodDecl>(Declaration) && cast<CXXMethodDecl>(Declaration)->isVirtual())\n    Info.CCEDiag(CallLoc, diag::note_constexpr_virtual_call);"},{w,303,"bool CheckCallable(InterpState &S, CodePtr OpPC, const Function *F) {\n  if (F->isVirtual() && !S.getLangOpts().CPlusPlus20) {\n    S.CCEDiag(Loc, diag::note_constexpr_virtual_call);"}}
[n]={{q,5592,"/// CheckConstexprFunction - Check that a function can be called in a constant\n/// expression.\nstatic bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body) {\n  // DR1872: An instantiated virtual constexpr function can\'t be called in a\n  // constant expression (prior to C++20). We can still constant-fold such a\n  // call.\n  if (!Info.Ctx.getLangOpts().CPlusPlus20 && isa<CXXMethodDecl>(Declaration) && cast<CXXMethodDecl>(Declaration)->isVirtual())\n    Info.CCEDiag(CallLoc, diag::note_constexpr_virtual_call);"},{A,303,"bool CheckCallable(InterpState &S, CodePtr OpPC, const Function *F) {\n  if (F->isVirtual() && !S.getLangOpts().CPlusPlus20) {\n    S.CCEDiag(Loc, diag::note_constexpr_virtual_call);"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp:30:57: note: cannot evaluate call to virtual function in a constant expression in C++ standards before C++20","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p6.cpp:32:94: note: cannot evaluate call to virtual function in a constant expression in C++ standards before C++20"}
}
},
},
["note_constexpr_void_comparison"]={
["note_constexpr_void_comparison"]={
[f]="comparison between unequal pointers to void has unspecified result",
[b]="comparison between unequal pointers to void has unspecified result",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="comparison between unequal pointers to void has unspecified result",
[h]="comparison between unequal pointers to void has unspecified result",
[g]=b,
[j]=i,
[e]="comparison between unequal pointers to void has unspecified result",
[k]="comparison between unequal pointers to void has unspecified result",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"de21b245c664",1327992090,"constexpr: the result of a relational operator between pointers to void is"},
[m]={"de21b245c664",1327992090,"constexpr: the result of a relational operator between pointers to void is"},
[n]={{p,13135,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // C++11 [expr.rel]p3:\n    //  Pointers to void (after pointer conversions) can be compared, with a\n    //  result defined as follows: If both pointers represent the same\n    //  address or are both the null pointer value, the result is true if the\n    //  operator is <= or >= and false otherwise; otherwise the result is\n    //  unspecified.\n    // We interpret this as applying to pointers to *cv* void.\n    if (LHSTy->isVoidPointerType() && LHSOffset != RHSOffset && IsRelational)\n      Info.CCEDiag(E, diag::note_constexpr_void_comparison);"}}
[n]={{q,13135,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  if (LHSTy->isPointerType() && RHSTy->isPointerType()) {\n    // C++11 [expr.rel]p3:\n    //  Pointers to void (after pointer conversions) can be compared, with a\n    //  result defined as follows: If both pointers represent the same\n    //  address or are both the null pointer value, the result is true if the\n    //  operator is <= or >= and false otherwise; otherwise the result is\n    //  unspecified.\n    // We interpret this as applying to pointers to *cv* void.\n    if (LHSTy->isVoidPointerType() && LHSOffset != RHSOffset && IsRelational)\n      Info.CCEDiag(E, diag::note_constexpr_void_comparison);"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:582:26: note: comparison between unequal pointers to void has unspecified result","clang/test/CXX/expr/expr.const/p2-0x.cpp:585:26: note: comparison between unequal pointers to void has unspecified result"}
}
},
},
["note_constexpr_volatile_here"]={
["note_constexpr_volatile_here"]={
[f]="volatile ... here",
[b]="volatile ... here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="volatile %select{temporary created|object declared|member declared}0 here",
[h]="volatile %select{temporary created|object declared|member declared}0 here",
[g]=b,
[j]=i,
[e]="volatile (?:temporary created|object declared|member declared) here",
[k]="volatile (?:temporary created|object declared|member declared) here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"c0fe5eb39c85",1557518732,"Fix handling of objects under construction during constant expression"},
[m]={"c0fe5eb39c85",1557518732,"Fix handling of objects under construction during constant expression"},
[n]={{p,3721,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    // If this is our last pass, check that the final object type is OK.\n    if (I == N || (I == N - 1 && ObjType->isAnyComplexType())) {\n      // Accesses to volatile objects are prohibited.\n      if (ObjType.isVolatileQualified() && isFormalAccess(handler.AccessKind)) {\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.Note(Loc, diag::note_constexpr_volatile_here) << DiagKind;"}}
[n]={{q,3721,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    // If this is our last pass, check that the final object type is OK.\n    if (I == N || (I == N - 1 && ObjType->isAnyComplexType())) {\n      // Accesses to volatile objects are prohibited.\n      if (ObjType.isVolatileQualified() && isFormalAccess(handler.AccessKind)) {\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.Note(Loc, diag::note_constexpr_volatile_here) << DiagKind;"}},
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:324:22: note: volatile object declared here","clang/test/CXX/expr/expr.const/p2-0x.cpp:324:22: note: volatile object declared here","clang/test/CXX/expr/expr.const/p2-0x.cpp:346:24: note: volatile object declared here"}
}
},
},
["note_constinit_missing_here"]={
["note_constinit_missing_here"]={
[f]="add the ... to the initializing declaration here",
[b]="add the ... to the initializing declaration here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add the %select{\'require_constant_initialization\' attribute|\'constinit\' specifier}0 to the initializing declaration here",
[h]="add the %select{\'require_constant_initialization\' attribute|\'constinit\' specifier}0 to the initializing declaration here",
[g]=b,
[j]=i,
[e]="add the (?:\'require_constant_initialization\' attribute|\'constinit\' specifier) to the initializing declaration here",
[k]="add the (?:\'require_constant_initialization\' attribute|\'constinit\' specifier) to the initializing declaration here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Ab,1567434909,Cb},
[m]={Zb,1567434909,Yb},
[n]={{t,3175,"static void diagnoseMissingConstinit(Sema &S, const VarDecl *InitDecl, const ConstInitAttr *CIAttr, bool AttrBeforeInit) {\n  if (AttrBeforeInit) {\n  } else {\n    S.Diag(InitDecl->getLocation(), diag::note_constinit_missing_here) << CIAttr->isConstinit() << FixItHint::CreateInsertion(InsertLoc, SuitableSpelling);"}}
[n]={{u,3175,"static void diagnoseMissingConstinit(Sema &S, const VarDecl *InitDecl, const ConstInitAttr *CIAttr, bool AttrBeforeInit) {\n  if (AttrBeforeInit) {\n  } else {\n    S.Diag(InitDecl->getLocation(), diag::note_constinit_missing_here) << CIAttr->isConstinit() << FixItHint::CreateInsertion(InsertLoc, SuitableSpelling);"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:14:7: note: add the \'constinit\' specifier to the initializing declaration here","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:35:24: note: add the \'constinit\' specifier to the initializing declaration here","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:36:20: note: add the \'constinit\' specifier to the initializing declaration here","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp:37:20: note: add the \'constinit\' specifier to the initializing declaration here"}
}
},
},
["note_constinit_specified_here"]={
["note_constinit_specified_here"]={
[f]="variable declared constinit here",
[b]="variable declared constinit here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="variable declared constinit here",
[h]="variable declared constinit here",
[g]=b,
[j]=i,
[e]="variable declared constinit here",
[k]="variable declared constinit here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Ab,1567434909,Cb},
[m]={Zb,1567434909,Yb},
[n]={{t,3167,"static void diagnoseMissingConstinit(Sema &S, const VarDecl *InitDecl, const ConstInitAttr *CIAttr, bool AttrBeforeInit) {\n  if (AttrBeforeInit) {\n    S.Diag(CIAttr->getLocation(), diag::note_constinit_specified_here);"}}
[n]={{u,3167,"static void diagnoseMissingConstinit(Sema &S, const VarDecl *InitDecl, const ConstInitAttr *CIAttr, bool AttrBeforeInit) {\n  if (AttrBeforeInit) {\n    S.Diag(CIAttr->getLocation(), diag::note_constinit_specified_here);"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p2.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p2.cpp:7:8: note: variable declared constinit here"}
}
},
},
["note_constraint_normalization_here"]={
["note_constraint_normalization_here"]={
[f]="while calculating associated constraint of template \'A\' here",
[b]="while calculating associated constraint of template \'A\' here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="while calculating associated constraint of template \'%0\' here",
[h]="while calculating associated constraint of template \'%0\' here",
[g]=b,
[j]=i,
[e]="while calculating associated constraint of template \'(.*?)\' here",
[k]="while calculating associated constraint of template \'(.*?)\' here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[n]={{z,1059,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintNormalization:\n      Diags.Report(Active->PointOfInstantiation, diag::note_constraint_normalization_here) << cast<NamedDecl>(Active->Entity)->getName() << Active->InstantiationRange;"}}
[n]={{G,1059,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintNormalization:\n      Diags.Report(Active->PointOfInstantiation, diag::note_constraint_normalization_here) << cast<NamedDecl>(Active->Entity)->getName() << Active->InstantiationRange;"}},
[o]={
["clang/test/CXX/temp/temp.constr/temp.constr.normal/p1.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.normal/p1.cpp:16:31: note: while calculating associated constraint of template \'S2\' here"}
}
},
},
["note_constraint_references_error"]={
["note_constraint_references_error"]={
[f]="constraint depends on a previously diagnosed expression",
[b]="constraint depends on a previously diagnosed expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="constraint depends on a previously diagnosed expression",
[h]="constraint depends on a previously diagnosed expression",
[g]=b,
[j]=i,
[e]="constraint depends on a previously diagnosed expression",
[k]="constraint depends on a previously diagnosed expression",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={db,1625925174,eb},
[m]={fb,1625925174,nb},
[n]={{O,250,"template <typename AtomicEvaluator> static ExprResult calculateConstraintSatisfaction(Sema &S, const Expr *ConstraintExpr, ConstraintSatisfaction &Satisfaction, AtomicEvaluator &&Evaluator) {\n  // We don\'t have the ability to evaluate this, since it contains a\n  // RecoveryExpr, so we want to fail overload resolution.  Otherwise,\n  // we\'d potentially pick up a different overload, and cause confusing\n  // diagnostics. SO, add a failure detail that will cause us to make this\n  // overload set not viable.\n  if (SubstitutedAtomicExpr.get()->containsErrors()) {\n    PartialDiagnostic Msg = S.PDiag(diag::note_constraint_references_error);"}}
[n]={{W,250,"template <typename AtomicEvaluator> static ExprResult calculateConstraintSatisfaction(Sema &S, const Expr *ConstraintExpr, ConstraintSatisfaction &Satisfaction, AtomicEvaluator &&Evaluator) {\n  // We don\'t have the ability to evaluate this, since it contains a\n  // RecoveryExpr, so we want to fail overload resolution.  Otherwise,\n  // we\'d potentially pick up a different overload, and cause confusing\n  // diagnostics. SO, add a failure detail that will cause us to make this\n  // overload set not viable.\n  if (SubstitutedAtomicExpr.get()->containsErrors()) {\n    PartialDiagnostic Msg = S.PDiag(diag::note_constraint_references_error);"}}
},
},
["note_constraint_substitution_here"]={
["note_constraint_substitution_here"]={
[f]="while substituting template arguments into constraint expression here",
[b]="while substituting template arguments into constraint expression here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="while substituting template arguments into constraint expression here",
[h]="while substituting template arguments into constraint expression here",
[g]=b,
[j]=i,
[e]="while substituting template arguments into constraint expression here",
[k]="while substituting template arguments into constraint expression here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Ab,1567434909,Cb},
[m]={Zb,1567434909,Yb},
[n]={{z,1054,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintSubstitution:\n      Diags.Report(Active->PointOfInstantiation, diag::note_constraint_substitution_here) << Active->InstantiationRange;"}}
[n]={{G,1054,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintSubstitution:\n      Diags.Report(Active->PointOfInstantiation, diag::note_constraint_substitution_here) << Active->InstantiationRange;"}},
[o]={
["clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:22:33: note: while substituting template arguments into constraint expression here","clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:71:33: note: while substituting template arguments into constraint expression here"}
}
},
},
["note_conv_function_declared_at"]={
["note_conv_function_declared_at"]={
[f]="type conversion function declared here",
[b]="type conversion function declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="type conversion function declared here",
[h]="type conversion function declared here",
[g]=b,
[j]=i,
[e]="type conversion function declared here",
[k]="type conversion function declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"01d96986d843",1480719628,"More diagnostic name fixups: w_ -> warn_, warning_ -> warn_, not_ -> note_."},
[m]={"01d96986d843",1480719628,"More diagnostic name fixups: w_ -> warn_, warning_ -> warn_, not_ -> note_."},
[n]={{"clang/lib/Sema/SemaPseudoObject.cpp",1117,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  for (unsigned int i = 0; i < ConversionDecls.size(); i++)\n    Diag(ConversionDecls[i]->getLocation(), diag::note_conv_function_declared_at);"}}
[n]={{"clang/lib/Sema/SemaPseudoObject.cpp",1117,"/// CheckSubscriptingKind - This routine decide what type\n/// of indexing represented by \"FromE\" is being done.\nSema::ObjCSubscriptKind Sema::CheckSubscriptingKind(Expr *FromE) {\n  for (unsigned int i = 0; i < ConversionDecls.size(); i++)\n    Diag(ConversionDecls[i]->getLocation(), diag::note_conv_function_declared_at);"}},
[o]={
["clang/test/SemaObjCXX/objc-container-subscripting.mm"]={"clang/test/SemaObjCXX/objc-container-subscripting.mm:130:4: note: type conversion function declared here","clang/test/SemaObjCXX/objc-container-subscripting.mm:131:4: note: type conversion function declared here"}
}
},
},
["note_convert_inline_to_static"]={
["note_convert_inline_to_static"]={
[f]="use \'static\' to give inline function A internal linkage",
[b]="use \'static\' to give inline function A internal linkage",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use \'static\' to give inline function %0 internal linkage",
[h]="use \'static\' to give inline function %0 internal linkage",
[g]=b,
[j]=i,
[e]="use \'static\' to give inline function (.*?) internal linkage",
[k]="use \'static\' to give inline function (.*?) internal linkage",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"2684c68ddc2f",1339784388,"Warn when a static variable is referenced in a non-static inline function."},
[m]={"2684c68ddc2f",1339784388,"Warn when a static variable is referenced in a non-static inline function."},
[n]={{r,207,"void Sema::MaybeSuggestAddingStaticToDecl(const FunctionDecl *Cur) {\n  // Suggest \"static\" on the function, if possible.\n  if (!hasAnyExplicitStorageClass(First)) {\n    Diag(DeclBegin, diag::note_convert_inline_to_static) << Cur << FixItHint::CreateInsertion(DeclBegin, \"static \");"}}
[n]={{s,207,"void Sema::MaybeSuggestAddingStaticToDecl(const FunctionDecl *Cur) {\n  // Suggest \"static\" on the function, if possible.\n  if (!hasAnyExplicitStorageClass(First)) {\n    Diag(DeclBegin, diag::note_convert_inline_to_static) << Cur << FixItHint::CreateInsertion(DeclBegin, \"static \");"}},
[o]={
["clang/test/Sema/inline.c"]={"clang/test/Sema/inline.c:13:1: note: use \'static\' to give inline function \'useStatic\' internal linkage","clang/test/Sema/inline.c:13:1: note: use \'static\' to give inline function \'useStatic\' internal linkage","clang/test/Sema/inline.c:13:1: note: use \'static\' to give inline function \'useStatic\' internal linkage","clang/test/Sema/inline.c:69:1: note: use \'static\' to give inline function \'useStaticAgain\' internal linkage","clang/test/Sema/inline.c:69:1: note: use \'static\' to give inline function \'useStaticAgain\' internal linkage","clang/test/Sema/inline.c:76:1: note: use \'static\' to give inline function \'defineStaticVar\' internal linkage","XXX.h:1:1: note: use \'static\' to give inline function \'useStaticMainFileInLineMarker\' internal linkage","XXX.h:1:1: note: use \'static\' to give inline function \'useStaticMainFileInLineMarker\' internal linkage"}
}
},
},
["note_coroutine_function_declare_noexcept"]={
["note_coroutine_function_declare_noexcept"]={
[f]="must be declared with \'noexcept\'",
[b]="must be declared with \'noexcept\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="must be declared with \'noexcept\'",
[h]="must be declared with \'noexcept\'",
[g]=b,
[j]=i,
[e]="must be declared with \'noexcept\'",
[k]="must be declared with \'noexcept\'",
[d]=a,
[l]=a,
[c]=Zb,
[c]=Bc,
[m]={Y,1582847864,W},
[m]={mb,1582847864,jb},
[n]={{L,684,"bool Sema::checkFinalSuspendNoThrow(const Stmt *FinalSuspend) {\n  for (const auto *D : SortedDecls) {\n    Diag(D->getEndLoc(), diag::note_coroutine_function_declare_noexcept);"}}
[n]={{T,684,"bool Sema::checkFinalSuspendNoThrow(const Stmt *FinalSuspend) {\n  for (const auto *D : SortedDecls) {\n    Diag(D->getEndLoc(), diag::note_coroutine_function_declare_noexcept);"}},
[o]={
["clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp"]={"clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp:24:38: note: must be declared with \'noexcept\'","clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp:25:43: note: must be declared with \'noexcept\'","clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp:26:24: note: must be declared with \'noexcept\'","clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp:27:35: note: must be declared with \'noexcept\'","clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp:45:34: note: must be declared with \'noexcept\'","clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp:90:41: note: must be declared with \'noexcept\'","clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp:24:38: note: must be declared with \'noexcept\'","clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp:25:43: note: must be declared with \'noexcept\'","clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp:26:24: note: must be declared with \'noexcept\'","clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp:27:35: note: must be declared with \'noexcept\'","clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp:45:34: note: must be declared with \'noexcept\'"}
}
},
},
["note_coroutine_promise_call_implicitly_required"]={
["note_coroutine_promise_call_implicitly_required"]={
[f]="call to A implicitly required by coroutine function here",
[b]="call to A implicitly required by coroutine function here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="call to %0 implicitly required by coroutine function here",
[h]="call to %0 implicitly required by coroutine function here",
[g]=b,
[j]=i,
[e]="call to (.*?) implicitly required by coroutine function here",
[k]="call to (.*?) implicitly required by coroutine function here",
[d]=a,
[l]=a,
[c]=Zb,
[c]=Bc,
[m]={"20f25cb6dfb3",1488843495,"[coroutines] Add DependentCoawaitExpr and fix re-building CoroutineBodyStmt."},
[m]={"20f25cb6dfb3",1488843495,"[coroutines] Add DependentCoawaitExpr and fix re-building CoroutineBodyStmt."},
[n]={{L,409,"/// Build calls to await_ready, await_suspend, and await_resume for a co_await\n/// expression.\n/// The generated AST tries to clean up temporary objects as early as\n/// possible so that they don\'t live across suspension points if possible.\n/// Having temporary objects living across suspension points unnecessarily can\n/// lead to large frame size, and also lead to memory corruptions if the\n/// coroutine frame is destroyed after coming back from suspension. This is done\n/// by wrapping both the await_ready call and the await_suspend call with\n/// ExprWithCleanups. In the end of this function, we also need to explicitly\n/// set cleanup state so that the CoawaitExpr is also wrapped with an\n/// ExprWithCleanups to clean up the awaiter associated with the co_await\n/// expression.\nstatic ReadySuspendResumeResult buildCoawaitCalls(Sema &S, VarDecl *CoroPromise, SourceLocation Loc, Expr *E) {\n  if (!AwaitReady->getType()->isDependentType()) {\n    if (Conv.isInvalid()) {\n      S.Diag(Loc, diag::note_coroutine_promise_call_implicitly_required) << AwaitReady->getDirectCallee() << E->getSourceRange();"},{L,450,"/// Build calls to await_ready, await_suspend, and await_resume for a co_await\n/// expression.\n/// The generated AST tries to clean up temporary objects as early as\n/// possible so that they don\'t live across suspension points if possible.\n/// Having temporary objects living across suspension points unnecessarily can\n/// lead to large frame size, and also lead to memory corruptions if the\n/// coroutine frame is destroyed after coming back from suspension. This is done\n/// by wrapping both the await_ready call and the await_suspend call with\n/// ExprWithCleanups. In the end of this function, we also need to explicitly\n/// set cleanup state so that the CoawaitExpr is also wrapped with an\n/// ExprWithCleanups to clean up the awaiter associated with the co_await\n/// expression.\nstatic ReadySuspendResumeResult buildCoawaitCalls(Sema &S, VarDecl *CoroPromise, SourceLocation Loc, Expr *E) {\n  if (!AwaitSuspend->getType()->isDependentType()) {\n    // Support for coroutine_handle returning await_suspend.\n    if (Expr *TailCallSuspend = maybeTailCall(S, RetType, AwaitSuspend, Loc))\n    else {\n      // non-class prvalues always have cv-unqualified types\n      if (RetType->isReferenceType() || (!RetType->isBooleanType() && !RetType->isVoidType())) {\n        S.Diag(Loc, diag::note_coroutine_promise_call_implicitly_required) << AwaitSuspend->getDirectCallee();"},{L,1499,"bool CoroutineStmtBuilder::makeNewAndDeleteExpr() {\n  if (RequiresNoThrowAlloc) {\n    if (!FT->isNothrow(/*ResultIfDependent*/ false)) {\n      S.Diag(Loc, diag::note_coroutine_promise_call_implicitly_required) << OperatorNew;"}}
[n]={{T,409,"/// Build calls to await_ready, await_suspend, and await_resume for a co_await\n/// expression.\n/// The generated AST tries to clean up temporary objects as early as\n/// possible so that they don\'t live across suspension points if possible.\n/// Having temporary objects living across suspension points unnecessarily can\n/// lead to large frame size, and also lead to memory corruptions if the\n/// coroutine frame is destroyed after coming back from suspension. This is done\n/// by wrapping both the await_ready call and the await_suspend call with\n/// ExprWithCleanups. In the end of this function, we also need to explicitly\n/// set cleanup state so that the CoawaitExpr is also wrapped with an\n/// ExprWithCleanups to clean up the awaiter associated with the co_await\n/// expression.\nstatic ReadySuspendResumeResult buildCoawaitCalls(Sema &S, VarDecl *CoroPromise, SourceLocation Loc, Expr *E) {\n  if (!AwaitReady->getType()->isDependentType()) {\n    if (Conv.isInvalid()) {\n      S.Diag(Loc, diag::note_coroutine_promise_call_implicitly_required) << AwaitReady->getDirectCallee() << E->getSourceRange();"},{T,450,"/// Build calls to await_ready, await_suspend, and await_resume for a co_await\n/// expression.\n/// The generated AST tries to clean up temporary objects as early as\n/// possible so that they don\'t live across suspension points if possible.\n/// Having temporary objects living across suspension points unnecessarily can\n/// lead to large frame size, and also lead to memory corruptions if the\n/// coroutine frame is destroyed after coming back from suspension. This is done\n/// by wrapping both the await_ready call and the await_suspend call with\n/// ExprWithCleanups. In the end of this function, we also need to explicitly\n/// set cleanup state so that the CoawaitExpr is also wrapped with an\n/// ExprWithCleanups to clean up the awaiter associated with the co_await\n/// expression.\nstatic ReadySuspendResumeResult buildCoawaitCalls(Sema &S, VarDecl *CoroPromise, SourceLocation Loc, Expr *E) {\n  if (!AwaitSuspend->getType()->isDependentType()) {\n    // Support for coroutine_handle returning await_suspend.\n    if (Expr *TailCallSuspend = maybeTailCall(S, RetType, AwaitSuspend, Loc))\n    else {\n      // non-class prvalues always have cv-unqualified types\n      if (RetType->isReferenceType() || (!RetType->isBooleanType() && !RetType->isVoidType())) {\n        S.Diag(Loc, diag::note_coroutine_promise_call_implicitly_required) << AwaitSuspend->getDirectCallee();"},{T,1499,"bool CoroutineStmtBuilder::makeNewAndDeleteExpr() {\n  if (RequiresNoThrowAlloc) {\n    if (!FT->isNothrow(/*ResultIfDependent*/ false)) {\n      S.Diag(Loc, diag::note_coroutine_promise_call_implicitly_required) << OperatorNew;"}},
[o]={
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:837:22: note: call to \'operator new\' implicitly required by coroutine function here","clang/test/SemaCXX/coroutines.cpp:842:9: note: call to \'operator new\' implicitly required by coroutine function here","clang/test/SemaCXX/coroutines.cpp:1042:14: note: call to \'await_ready\' implicitly required by coroutine function here","clang/test/SemaCXX/coroutines.cpp:1046:14: note: call to \'await_suspend\' implicitly required by coroutine function here","clang/test/SemaCXX/coroutines.cpp:1057:14: note: call to \'await_suspend\' implicitly required by coroutine function here","clang/test/SemaCXX/coroutines.cpp:1058:14: note: call to \'await_suspend\' implicitly required by coroutine function here"}
}
},
},
["note_coroutine_promise_implicit_await_transform_required_here"]={
["note_coroutine_promise_implicit_await_transform_required_here"]={
[f]="call to \'await_transform\' implicitly required by \'co_await\' here",
[b]="call to \'await_transform\' implicitly required by \'co_await\' here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="call to \'await_transform\' implicitly required by \'co_await\' here",
[h]="call to \'await_transform\' implicitly required by \'co_await\' here",
[g]=b,
[j]=i,
[e]="call to \'await_transform\' implicitly required by \'co_await\' here",
[k]="call to \'await_transform\' implicitly required by \'co_await\' here",
[d]=a,
[l]=a,
[c]=Zb,
[c]=Bc,
[m]={"20f25cb6dfb3",1488843495,"[coroutines] Add DependentCoawaitExpr and fix re-building CoroutineBodyStmt."},
[m]={"20f25cb6dfb3",1488843495,"[coroutines] Add DependentCoawaitExpr and fix re-building CoroutineBodyStmt."},
[n]={{L,859,"// Attempts to resolve and build a CoawaitExpr from \"raw\" inputs, bailing out to\n// DependentCoawaitExpr if needed.\nExprResult Sema::BuildUnresolvedCoawaitExpr(SourceLocation Loc, Expr *Operand, UnresolvedLookupExpr *Lookup) {\n  if (lookupMember(*this, \"await_transform\", RD, Loc)) {\n    if (R.isInvalid()) {\n      Diag(Loc, diag::note_coroutine_promise_implicit_await_transform_required_here) << Operand->getSourceRange();"}}
[n]={{T,859,"// Attempts to resolve and build a CoawaitExpr from \"raw\" inputs, bailing out to\n// DependentCoawaitExpr if needed.\nExprResult Sema::BuildUnresolvedCoawaitExpr(SourceLocation Loc, Expr *Operand, UnresolvedLookupExpr *Lookup) {\n  if (lookupMember(*this, \"await_transform\", RD, Loc)) {\n    if (R.isInvalid()) {\n      Diag(Loc, diag::note_coroutine_promise_implicit_await_transform_required_here) << Operand->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/co_await-range-for.cpp"]={"clang/test/SemaCXX/co_await-range-for.cpp:53:23: note: call to \'await_transform\' implicitly required by \'co_await\' here","clang/test/SemaCXX/co_await-range-for.cpp:75:23: note: call to \'await_transform\' implicitly required by \'co_await\' here","clang/test/SemaCXX/co_await-range-for.cpp:82:23: note: call to \'await_transform\' implicitly required by \'co_await\' here"}
}
},
},
["note_coroutine_promise_suspend_implicitly_required"]={
["note_coroutine_promise_suspend_implicitly_required"]={
[f]="call to \'...\' implicitly required by the ...",
[b]="call to \'...\' implicitly required by the ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="call to \'%select{initial_suspend|final_suspend}0\' implicitly required by the %select{initial suspend point|final suspend point}0",
[h]="call to \'%select{initial_suspend|final_suspend}0\' implicitly required by the %select{initial suspend point|final suspend point}0",
[g]=b,
[j]=i,
[e]="call to \'(?:initial_suspend|final_suspend)\' implicitly required by the (?:initial suspend point|final suspend point)",
[k]="call to \'(?:initial_suspend|final_suspend)\' implicitly required by the (?:initial suspend point|final suspend point)",
[d]=a,
[l]=a,
[c]=Zb,
[c]=Bc,
[m]={"627a63cf5081",1492334399,"[coroutines] Fix building of new/delete expressions when get_return_object_on_allocation_failure() i..."},
[m]={"627a63cf5081",1492334399,"[coroutines] Fix building of new/delete expressions when get_return_object_on_allocation_failure() i..."},
[n]={{L,719,"bool Sema::ActOnCoroutineBodyStart(Scope *SC, SourceLocation KWLoc, StringRef Keyword) {\n  // Build the initial suspend point\n  auto buildSuspends = [&](StringRef Name) mutable -> StmtResult {\n    if (Suspend.isInvalid()) {\n      Diag(Loc, diag::note_coroutine_promise_suspend_implicitly_required) << ((Name == \"initial_suspend\") ? 0 : 1);"}}
[n]={{T,719,"bool Sema::ActOnCoroutineBodyStart(Scope *SC, SourceLocation KWLoc, StringRef Keyword) {\n  // Build the initial suspend point\n  auto buildSuspends = [&](StringRef Name) mutable -> StmtResult {\n    if (Suspend.isInvalid()) {\n      Diag(Loc, diag::note_coroutine_promise_suspend_implicitly_required) << ((Name == \"initial_suspend\") ? 0 : 1);"}},
[o]={
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:148:6: note: call to \'initial_suspend\' implicitly required by the initial suspend point","clang/test/SemaCXX/coroutines.cpp:483:29: note: call to \'initial_suspend\' implicitly required by the initial suspend point","clang/test/SemaCXX/coroutines.cpp:501:31: note: call to \'initial_suspend\' implicitly required by the initial suspend point","clang/test/SemaCXX/coroutines.cpp:610:21: note: call to \'initial_suspend\' implicitly required by the initial suspend point","clang/test/SemaCXX/coroutines.cpp:622:21: note: call to \'final_suspend\' implicitly required by the final suspend point","clang/test/SemaCXX/coroutines.cpp:768:7: note: call to \'initial_suspend\' implicitly required by the initial suspend point"}
}
},
},
["note_covariant_thunk"]={
["note_covariant_thunk"]={
[f]="covariant thunk required by A",
[b]="covariant thunk required by A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="covariant thunk required by %0",
[h]="covariant thunk required by %0",
[g]=b,
[j]=i,
[e]="covariant thunk required by (.*?)",
[k]="covariant thunk required by (.*?)",
[d]=a,
[l]=a,
[c]="VTable ABI Issue",
[c]="VTable ABI Issue",
[m]={"70e6a00170a4",1430516145,"[MS ABI] Detect and diagnose vftables which cannot be created"},
[m]={"70e6a00170a4",1430516145,"[MS ABI] Detect and diagnose vftables which cannot be created"},
Line 3,000: Line 3,688:
},
},
["note_cuda_conflicting_device_function_declared_here"]={
["note_cuda_conflicting_device_function_declared_here"]={
[f]="conflicting __device__ function declared here",
[b]="conflicting __device__ function declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="conflicting __device__ function declared here",
[h]="conflicting __device__ function declared here",
[g]=b,
[j]=i,
[e]="conflicting __device__ function declared here",
[k]="conflicting __device__ function declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"ba122ab42fe5",1459380621,"[CUDA] Make unattributed constexpr functions implicitly host+device."},
[m]={"ba122ab42fe5",1459380621,"[CUDA] Make unattributed constexpr functions implicitly host+device."},
[n]={{"clang/lib/Sema/SemaCUDA.cpp",700,"// 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  if (It != Previous.end()) {\n    if (!getSourceManager().isInSystemHeader(Match->getLocation())) {\n      Diag(Match->getLocation(), diag::note_cuda_conflicting_device_function_declared_here);"}}
[n]={{"clang/lib/Sema/SemaCUDA.cpp",700,"// 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  if (It != Previous.end()) {\n    if (!getSourceManager().isInSystemHeader(Match->getLocation())) {\n      Diag(Match->getLocation(), diag::note_cuda_conflicting_device_function_declared_here);"}},
[o]={
["clang/test/SemaCUDA/host-device-constexpr.cu"]={"clang/test/SemaCUDA/host-device-constexpr.cu:42:16: note: conflicting __device__ function declared here"}
}
},
},
["note_cuda_const_var_unpromoted"]={
["note_cuda_const_var_unpromoted"]={
[f]="const variable cannot be emitted on device side due to dynamic initialization",
[b]="const variable cannot be emitted on device side due to dynamic initialization",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="const variable cannot be emitted on device side due to dynamic initialization",
[h]="const variable cannot be emitted on device side due to dynamic initialization",
[g]=b,
[j]=i,
[e]="const variable cannot be emitted on device side due to dynamic initialization",
[k]="const variable cannot be emitted on device side due to dynamic initialization",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Pb,1615397021,Ob},
[m]={lc,1615397021,vc},
[n]={{r,19016,"/// Directly mark a variable odr-used. Given a choice, prefer to use\n/// MarkVariableReferenced since it does additional checks and then\n/// calls MarkVarDeclODRUsed.\n/// If the variable must be captured:\n///  - if FunctionScopeIndexToStopAt is null, capture it in the CurContext\n///  - else capture it in the DeclContext that maps to the\n///    *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.\nstatic void MarkVarDeclODRUsed(ValueDecl *V, SourceLocation Loc, Sema &SemaRef, const unsigned *const FunctionScopeIndexToStopAt = nullptr) {\n  if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n    if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n      // Diagnose ODR-use of host global variables in device functions.\n      // Reference of device global variables in host functions is allowed\n      // through shadow variables therefore it is not diagnosed.\n      if (SemaRef.LangOpts.CUDAIsDevice) {\n        SemaRef.targetDiag(Var->getLocation(), Var->getType().isConstQualified() ? diag::note_cuda_const_var_unpromoted : diag::note_cuda_host_var);"}}
[n]={{s,19016,"/// Directly mark a variable odr-used. Given a choice, prefer to use\n/// MarkVariableReferenced since it does additional checks and then\n/// calls MarkVarDeclODRUsed.\n/// If the variable must be captured:\n///  - if FunctionScopeIndexToStopAt is null, capture it in the CurContext\n///  - else capture it in the DeclContext that maps to the\n///    *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.\nstatic void MarkVarDeclODRUsed(ValueDecl *V, SourceLocation Loc, Sema &SemaRef, const unsigned *const FunctionScopeIndexToStopAt = nullptr) {\n  if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n    if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n      // Diagnose ODR-use of host global variables in device functions.\n      // Reference of device global variables in host functions is allowed\n      // through shadow variables therefore it is not diagnosed.\n      if (SemaRef.LangOpts.CUDAIsDevice) {\n        SemaRef.targetDiag(Var->getLocation(), Var->getType().isConstQualified() ? diag::note_cuda_const_var_unpromoted : diag::note_cuda_host_var);"}},
[o]={
["clang/test/SemaCUDA/const-var.cu"]={"clang/test/SemaCUDA/const-var.cu:43:15: note: const variable cannot be emitted on device side due to dynamic initialization"}
}
},
},
["note_cuda_device_builtin_surftex_cls_should_have_match_arg"]={
["note_cuda_device_builtin_surftex_cls_should_have_match_arg"]={
[f]="the ... template parameter of A needs to be ...",
[b]="the ... template parameter of A needs to be ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="the %select{1st|2nd|3rd}1 template parameter of %0 needs to be %select{a type|an integer or enum value}2",
[h]="the %select{1st|2nd|3rd}1 template parameter of %0 needs to be %select{a type|an integer or enum value}2",
[g]=b,
[j]=i,
[e]="the (?:1st|2nd|3rd) template parameter of (.*?) needs to be (?:a type|an integer or enum value)",
[k]="the (?:1st|2nd|3rd) template parameter of (.*?) needs to be (?:a type|an integer or enum value)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={yb,1576908663,Db},
[m]={cc,1576908663,bc},
[n]={{q,6348,"static void checkCUDADeviceBuiltinSurfaceClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (N > 0 && !isa<TemplateTypeParmDecl>(Params->getParam(0))) {\n    S.Diag(TD->getLocation(), diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) << TD << /*1st*/ 0 << /*type*/ 0;"},{q,6356,"static void checkCUDADeviceBuiltinSurfaceClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (N > 1) {\n    if (!NTTP || !NTTP->getType()->isIntegralOrEnumerationType()) {\n      S.Diag(TD->getLocation(), diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) << TD << /*2nd*/ 1 << /*integer*/ 1;"},{q,6402,"static void checkCUDADeviceBuiltinTextureClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (N > 0 && !isa<TemplateTypeParmDecl>(Params->getParam(0))) {\n    S.Diag(TD->getLocation(), diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) << TD << /*1st*/ 0 << /*type*/ 0;"},{q,6410,"static void checkCUDADeviceBuiltinTextureClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (N > 1) {\n    if (!NTTP || !NTTP->getType()->isIntegralOrEnumerationType()) {\n      S.Diag(TD->getLocation(), diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) << TD << /*2nd*/ 1 << /*integer*/ 1;"},{q,6419,"static void checkCUDADeviceBuiltinTextureClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (N > 2) {\n    if (!NTTP || !NTTP->getType()->isIntegralOrEnumerationType()) {\n      S.Diag(TD->getLocation(), diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) << TD << /*3rd*/ 2 << /*integer*/ 1;"}}
[n]={{r,6348,"static void checkCUDADeviceBuiltinSurfaceClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (N > 0 && !isa<TemplateTypeParmDecl>(Params->getParam(0))) {\n    S.Diag(TD->getLocation(), diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) << TD << /*1st*/ 0 << /*type*/ 0;"},{r,6356,"static void checkCUDADeviceBuiltinSurfaceClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (N > 1) {\n    if (!NTTP || !NTTP->getType()->isIntegralOrEnumerationType()) {\n      S.Diag(TD->getLocation(), diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) << TD << /*2nd*/ 1 << /*integer*/ 1;"},{r,6402,"static void checkCUDADeviceBuiltinTextureClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (N > 0 && !isa<TemplateTypeParmDecl>(Params->getParam(0))) {\n    S.Diag(TD->getLocation(), diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) << TD << /*1st*/ 0 << /*type*/ 0;"},{r,6410,"static void checkCUDADeviceBuiltinTextureClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (N > 1) {\n    if (!NTTP || !NTTP->getType()->isIntegralOrEnumerationType()) {\n      S.Diag(TD->getLocation(), diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) << TD << /*2nd*/ 1 << /*integer*/ 1;"},{r,6419,"static void checkCUDADeviceBuiltinTextureClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (N > 2) {\n    if (!NTTP || !NTTP->getType()->isIntegralOrEnumerationType()) {\n      S.Diag(TD->getLocation(), diag::note_cuda_device_builtin_surftex_cls_should_have_match_arg) << TD << /*3rd*/ 2 << /*integer*/ 1;"}},
[o]={
["clang/test/SemaCUDA/bad-attributes.cu"]={"clang/test/SemaCUDA/bad-attributes.cu:90:53: note: the 1st template parameter of \'s3_cls_template\' needs to be a type","clang/test/SemaCUDA/bad-attributes.cu:90:53: note: the 2nd template parameter of \'s3_cls_template\' needs to be an integer or enum value","clang/test/SemaCUDA/bad-attributes.cu:94:53: note: the 1st template parameter of \'t3_cls_template\' needs to be a type","clang/test/SemaCUDA/bad-attributes.cu:94:53: note: the 3rd template parameter of \'t3_cls_template\' needs to be an integer or enum value"}
}
},
},
["note_cuda_device_builtin_surftex_cls_should_have_n_args"]={
["note_cuda_device_builtin_surftex_cls_should_have_n_args"]={
[f]="A needs to have exactly B template parameters",
[b]="A needs to have exactly B template parameters",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 needs to have exactly %1 template parameters",
[h]="%0 needs to have exactly %1 template parameters",
[g]=b,
[j]=i,
[e]="(.*?) needs to have exactly (.*?) template parameters",
[k]="(.*?) needs to have exactly (.*?) template parameters",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={yb,1576908663,Db},
[m]={cc,1576908663,bc},
[n]={{q,6342,"static void checkCUDADeviceBuiltinSurfaceClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (N != 2) {\n    S.Diag(TD->getLocation(), diag::note_cuda_device_builtin_surftex_cls_should_have_n_args) << TD << 2;"},{q,6396,"static void checkCUDADeviceBuiltinTextureClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (N != 3) {\n    S.Diag(TD->getLocation(), diag::note_cuda_device_builtin_surftex_cls_should_have_n_args) << TD << 3;"}}
[n]={{r,6342,"static void checkCUDADeviceBuiltinSurfaceClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (N != 2) {\n    S.Diag(TD->getLocation(), diag::note_cuda_device_builtin_surftex_cls_should_have_n_args) << TD << 2;"},{r,6396,"static void checkCUDADeviceBuiltinTextureClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (N != 3) {\n    S.Diag(TD->getLocation(), diag::note_cuda_device_builtin_surftex_cls_should_have_n_args) << TD << 3;"}},
[o]={
["clang/test/SemaCUDA/bad-attributes.cu"]={"clang/test/SemaCUDA/bad-attributes.cu:83:53: note: \'s2_cls_template\' needs to have exactly 2 template parameters","clang/test/SemaCUDA/bad-attributes.cu:86:53: note: \'t2_cls_template\' needs to have exactly 3 template parameters"}
}
},
},
["note_cuda_device_builtin_surftex_should_be_template_class"]={
["note_cuda_device_builtin_surftex_should_be_template_class"]={
[f]="A needs to be instantiated from a class template with proper template arguments",
[b]="A needs to be instantiated from a class template with proper template arguments",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 needs to be instantiated from a class template with proper template arguments",
[h]="%0 needs to be instantiated from a class template with proper template arguments",
[g]=b,
[j]=i,
[e]="(.*?) needs to be instantiated from a class template with proper template arguments",
[k]="(.*?) needs to be instantiated from a class template with proper template arguments",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={yb,1576908663,Db},
[m]={cc,1576908663,bc},
[n]={{q,6329,"static void checkCUDADeviceBuiltinSurfaceClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (!TD) {\n    if (!SD) {\n      S.Diag(Class->getLocation(), diag::note_cuda_device_builtin_surftex_should_be_template_class) << Class;"},{q,6383,"static void checkCUDADeviceBuiltinTextureClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (!TD) {\n    if (!SD) {\n      S.Diag(Class->getLocation(), diag::note_cuda_device_builtin_surftex_should_be_template_class) << Class;"}}
[n]={{r,6329,"static void checkCUDADeviceBuiltinSurfaceClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (!TD) {\n    if (!SD) {\n      S.Diag(Class->getLocation(), diag::note_cuda_device_builtin_surftex_should_be_template_class) << Class;"},{r,6383,"static void checkCUDADeviceBuiltinTextureClassTemplate(Sema &S, CXXRecordDecl *Class) {\n  if (!TD) {\n    if (!SD) {\n      S.Diag(Class->getLocation(), diag::note_cuda_device_builtin_surftex_should_be_template_class) << Class;"}},
[o]={
["clang/test/SemaCUDA/bad-attributes.cu"]={"clang/test/SemaCUDA/bad-attributes.cu:77:53: note: \'s1_ref\' needs to be instantiated from a class template with proper template arguments","clang/test/SemaCUDA/bad-attributes.cu:79:53: note: \'t1_ref\' needs to be instantiated from a class template with proper template arguments"}
}
},
},
["note_cuda_host_var"]={
["note_cuda_host_var"]={
[f]="host variable declared here",
[b]="host variable declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="host variable declared here",
[h]="host variable declared here",
[g]=b,
[j]=i,
[e]="host variable declared here",
[k]="host variable declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Pb,1615397021,Ob},
[m]={lc,1615397021,vc},
[n]={{r,19079,"/// Directly mark a variable odr-used. Given a choice, prefer to use\n/// MarkVariableReferenced since it does additional checks and then\n/// calls MarkVarDeclODRUsed.\n/// If the variable must be captured:\n///  - if FunctionScopeIndexToStopAt is null, capture it in the CurContext\n///  - else capture it in the DeclContext that maps to the\n///    *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.\nstatic void MarkVarDeclODRUsed(ValueDecl *V, SourceLocation Loc, Sema &SemaRef, const unsigned *const FunctionScopeIndexToStopAt = nullptr) {\n  if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n    if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n      // Diagnose ODR-use of host global variables in device functions.\n      // Reference of device global variables in host functions is allowed\n      // through shadow variables therefore it is not diagnosed.\n      if (SemaRef.LangOpts.CUDAIsDevice) {\n        SemaRef.targetDiag(Var->getLocation(), Var->getType().isConstQualified() ? diag::note_cuda_const_var_unpromoted : diag::note_cuda_host_var);"}}
[n]={{s,19079,"/// Directly mark a variable odr-used. Given a choice, prefer to use\n/// MarkVariableReferenced since it does additional checks and then\n/// calls MarkVarDeclODRUsed.\n/// If the variable must be captured:\n///  - if FunctionScopeIndexToStopAt is null, capture it in the CurContext\n///  - else capture it in the DeclContext that maps to the\n///    *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.\nstatic void MarkVarDeclODRUsed(ValueDecl *V, SourceLocation Loc, Sema &SemaRef, const unsigned *const FunctionScopeIndexToStopAt = nullptr) {\n  if (SemaRef.LangOpts.CUDA && Var->hasGlobalStorage()) {\n    if (VarTarget == Sema::CVT_Host && (UserTarget == Sema::CFT_Device || UserTarget == Sema::CFT_HostDevice || UserTarget == Sema::CFT_Global)) {\n      // Diagnose ODR-use of host global variables in device functions.\n      // Reference of device global variables in host functions is allowed\n      // through shadow variables therefore it is not diagnosed.\n      if (SemaRef.LangOpts.CUDAIsDevice) {\n        SemaRef.targetDiag(Var->getLocation(), Var->getType().isConstQualified() ? diag::note_cuda_const_var_unpromoted : diag::note_cuda_host_var);"}},
[o]={
["clang/test/SemaCUDA/static-device-var.cu"]={"clang/test/SemaCUDA/static-device-var.cu:34:12: note: host variable declared here"}
}
},
},
["note_cuda_ovl_candidate_target_mismatch"]={
["note_cuda_ovl_candidate_target_mismatch"]={
[f]="candidate template ignored: target attributes do not match",
[b]="candidate template ignored: target attributes do not match",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="candidate template ignored: target attributes do not match",
[h]="candidate template ignored: target attributes do not match",
[g]=b,
[j]=i,
[e]="candidate template ignored\\: target attributes do not match",
[k]="candidate template ignored\\: target attributes do not match",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"13e9b4d76851",1481138836,"[CUDA] Improve target attribute checking for function templates."},
[m]={"13e9b4d76851",1481138836,"[CUDA] Improve target attribute checking for function templates."},
[n]={{P,11366,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_CUDATargetMismatch:\n    S.Diag(Templated->getLocation(), diag::note_cuda_ovl_candidate_target_mismatch);"}}
[n]={{X,11366,"/// Diagnose a failed template-argument deduction.\nstatic void DiagnoseBadDeduction(Sema &S, NamedDecl *Found, Decl *Templated, DeductionFailureInfo &DeductionFailure, unsigned NumArgs, bool TakingCandidateAddress) {\n  case Sema::TDK_CUDATargetMismatch:\n    S.Diag(Templated->getLocation(), diag::note_cuda_ovl_candidate_target_mismatch);"}},
[o]={
["clang/test/SemaCUDA/function-template-overload.cu"]={"clang/test/SemaCUDA/function-template-overload.cu:13:40: note: candidate template ignored: target attributes do not match","clang/test/SemaCUDA/function-template-overload.cu:10:38: note: candidate template ignored: target attributes do not match","clang/test/SemaCUDA/function-template-overload.cu:13:40: note: candidate template ignored: target attributes do not match","clang/test/SemaCUDA/function-template-overload.cu:10:38: note: candidate template ignored: target attributes do not match","clang/test/SemaCUDA/function-template-overload.cu:62:35: note: candidate template ignored: target attributes do not match","clang/test/SemaCUDA/function-template-overload.cu:62:35: note: candidate template ignored: target attributes do not match","clang/test/SemaCUDA/function-template-overload.cu:62:35: note: candidate template ignored: target attributes do not match"}
}
},
},
["note_cxx20_compat_utf8_string_remove_u8"]={
["note_cxx20_compat_utf8_string_remove_u8"]={
[f]="remove \'u8\' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF-8",
[b]="remove \'u8\' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF-8",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="remove \'u8\' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF-8",
[h]="remove \'u8\' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF-8",
[g]=b,
[j]=i,
[e]="remove \'u8\' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF\\-8",
[k]="remove \'u8\' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF\\-8",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={yb,1576908663,Db},
[m]={cc,1576908663,bc},
[n]={{r,1997,"/// ActOnStringLiteral - The specified tokens were lexed as pasted string\n/// fragments (e.g. \"foo\" \"bar\" L\"baz\").  The result string has to handle string\n/// concatenation ([C99 5.1.1.2, translation phase #6]), so it may come from\n/// multiple tokens.  However, the common case is that StringToks points to one\n/// string.\n///\nExprResult Sema::ActOnStringLiteral(ArrayRef<Token> StringToks, Scope *UDLScope) {\n  // Warn on initializing an array of char from a u8 string literal; this\n  // becomes ill-formed in C++2a.\n  if (getLangOpts().CPlusPlus && !getLangOpts().CPlusPlus20 && !getLangOpts().Char8 && Kind == StringLiteral::UTF8) {\n    auto RemovalDiag = PDiag(diag::note_cxx20_compat_utf8_string_remove_u8);"}}
[n]={{s,1997,"/// ActOnStringLiteral - The specified tokens were lexed as pasted string\n/// fragments (e.g. \"foo\" \"bar\" L\"baz\").  The result string has to handle string\n/// concatenation ([C99 5.1.1.2, translation phase #6]), so it may come from\n/// multiple tokens.  However, the common case is that StringToks points to one\n/// string.\n///\nExprResult Sema::ActOnStringLiteral(ArrayRef<Token> StringToks, Scope *UDLScope) {\n  // Warn on initializing an array of char from a u8 string literal; this\n  // becomes ill-formed in C++2a.\n  if (getLangOpts().CPlusPlus && !getLangOpts().CPlusPlus20 && !getLangOpts().Char8 && Kind == StringLiteral::UTF8) {\n    auto RemovalDiag = PDiag(diag::note_cxx20_compat_utf8_string_remove_u8);"}},
[o]={
["clang/test/SemaCXX/cxx2a-compat.cpp"]={"clang/test/SemaCXX/cxx2a-compat.cpp:28:16: note: remove \'u8\' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF-8","clang/test/SemaCXX/cxx2a-compat.cpp:29:26: note: remove \'u8\' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF-8","clang/test/SemaCXX/cxx2a-compat.cpp:30:16: note: remove \'u8\' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF-8"}
}
},
},
["note_decl_hiding_tag_type"]={
["note_decl_hiding_tag_type"]={
[f]="A B is hidden by a non-type declaration of C here",
[b]="A B is hidden by a non-type declaration of C here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%1 %0 is hidden by a non-type declaration of %0 here",
[h]="%1 %0 is hidden by a non-type declaration of %0 here",
[g]=b,
[j]=i,
[e]="(.*?) (.*?) is hidden by a non\\-type declaration of (.*?) here",
[k]="(.*?) (.*?) is hidden by a non\\-type declaration of (.*?) here",
[d]=a,
[l]=a,
[c]=Q,
[c]=Z,
[m]={"3fe3f857699f",1335551209,"Imrpove the note text for when a non-type decl hides a tag type"},
[m]={"3fe3f857699f",1335551209,"Imrpove the note text for when a non-type decl hides a tag type"},
[n]={{"clang/lib/Parse/ParseDecl.cpp",2830,"/// ParseImplicitInt - This method is called when we have an non-typename\n/// identifier in a declspec (which normally terminates the decl spec) when\n/// the declspec has no type specifier.  In this case, the declspec is either\n/// malformed or is \"implicit int\" (in K&R and C89).\n///\n/// This method handles diagnosing this prettily and returns false if the\n/// declspec is done being processed.  If it recovers and thinks there may be\n/// other pieces of declspec after it, it returns true.\n///\nbool Parser::ParseImplicitInt(DeclSpec &DS, CXXScopeSpec *SS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC, ParsedAttributes &Attrs) {\n  // Otherwise, if we don\'t consume this token, we are going to emit an\n  // error anyway.  Try to recover from various common problems.  Check\n  // to see if this was a reference to a tag name without a tag specified.\n  // This is a common problem in C (saying \'foo\' instead of \'struct foo\').\n  //\n  // C++ doesn\'t need this, and isTagName doesn\'t take SS.\n  if (SS == nullptr) {\n    if (TagName) {\n      if (Actions.LookupParsedName(R, getCurScope(), SS)) {\n        for (LookupResult::iterator I = R.begin(), IEnd = R.end(); I != IEnd; ++I)\n          Diag((*I)->getLocation(), diag::note_decl_hiding_tag_type) << TokenName << TagName;"},{t,889,"static bool isTagTypeWithMissingTag(Sema &SemaRef, LookupResult &Result, Scope *S, CXXScopeSpec &SS, IdentifierInfo *&Name, SourceLocation NameLoc) {\n  if (TagDecl *Tag = R.getAsSingle<TagDecl>()) {\n    for (LookupResult::iterator I = Result.begin(), IEnd = Result.end(); I != IEnd; ++I)\n      SemaRef.Diag((*I)->getLocation(), diag::note_decl_hiding_tag_type) << Name << TagName;"}}
[n]={{"clang/lib/Parse/ParseDecl.cpp",2830,"/// ParseImplicitInt - This method is called when we have an non-typename\n/// identifier in a declspec (which normally terminates the decl spec) when\n/// the declspec has no type specifier.  In this case, the declspec is either\n/// malformed or is \"implicit int\" (in K&R and C89).\n///\n/// This method handles diagnosing this prettily and returns false if the\n/// declspec is done being processed.  If it recovers and thinks there may be\n/// other pieces of declspec after it, it returns true.\n///\nbool Parser::ParseImplicitInt(DeclSpec &DS, CXXScopeSpec *SS, const ParsedTemplateInfo &TemplateInfo, AccessSpecifier AS, DeclSpecContext DSC, ParsedAttributes &Attrs) {\n  // Otherwise, if we don\'t consume this token, we are going to emit an\n  // error anyway.  Try to recover from various common problems.  Check\n  // to see if this was a reference to a tag name without a tag specified.\n  // This is a common problem in C (saying \'foo\' instead of \'struct foo\').\n  //\n  // C++ doesn\'t need this, and isTagName doesn\'t take SS.\n  if (SS == nullptr) {\n    if (TagName) {\n      if (Actions.LookupParsedName(R, getCurScope(), SS)) {\n        for (LookupResult::iterator I = R.begin(), IEnd = R.end(); I != IEnd; ++I)\n          Diag((*I)->getLocation(), diag::note_decl_hiding_tag_type) << TokenName << TagName;"},{u,889,"static bool isTagTypeWithMissingTag(Sema &SemaRef, LookupResult &Result, Scope *S, CXXScopeSpec &SS, IdentifierInfo *&Name, SourceLocation NameLoc) {\n  if (TagDecl *Tag = R.getAsSingle<TagDecl>()) {\n    for (LookupResult::iterator I = Result.begin(), IEnd = Result.end(); I != IEnd; ++I)\n      SemaRef.Diag((*I)->getLocation(), diag::note_decl_hiding_tag_type) << Name << TagName;"}},
[o]={
["clang/test/Parser/cxx-using-declaration.cpp"]={"clang/test/Parser/cxx-using-declaration.cpp:54:6: note: class \'Bar\' is hidden by a non-type declaration of \'Bar\' here"}
}
},
},
["note_decl_unguarded_availability_silence"]={
["note_decl_unguarded_availability_silence"]={
[f]="annotate ... with an availability attribute to silence this warning",
[b]="annotate ... with an availability attribute to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="annotate %select{%1|anonymous %1}0 with an availability attribute to silence this warning",
[h]="annotate %select{%1|anonymous %1}0 with an availability attribute to silence this warning",
[g]=b,
[j]=i,
[e]="annotate (?:(.*?)|anonymous (.*?)) with an availability attribute to silence this warning",
[k]="annotate (?:(.*?)|anonymous (.*?)) with an availability attribute to silence this warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"8b352c4d9d82",1502740152,"[Sema] Improve some -Wunguarded-availability diagnostics"},
[m]={"8b352c4d9d82",1502740152,"[Sema] Improve some -Wunguarded-availability diagnostics"},
[n]={{V,404,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_NotYetIntroduced: {\n    if (const auto *Enclosing = findEnclosingDeclToAnnotate(Ctx)) {\n      if (const auto *TD = dyn_cast<TagDecl>(Enclosing))\n        if (TD->getDeclName().isEmpty()) {\n          S.Diag(TD->getLocation(), diag::note_decl_unguarded_availability_silence) << /*Anonymous*/ 1 << TD->getKindName();"},{V,410,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_NotYetIntroduced: {\n    if (const auto *Enclosing = findEnclosingDeclToAnnotate(Ctx)) {\n      auto FixitNoteDiag = S.Diag(Enclosing->getLocation(), diag::note_decl_unguarded_availability_silence) << /*Named*/ 0 << Enclosing;"}}
[n]={{gb,404,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_NotYetIntroduced: {\n    if (const auto *Enclosing = findEnclosingDeclToAnnotate(Ctx)) {\n      if (const auto *TD = dyn_cast<TagDecl>(Enclosing))\n        if (TD->getDeclName().isEmpty()) {\n          S.Diag(TD->getLocation(), diag::note_decl_unguarded_availability_silence) << /*Anonymous*/ 1 << TD->getKindName();"},{gb,410,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  case AR_NotYetIntroduced: {\n    if (const auto *Enclosing = findEnclosingDeclToAnnotate(Ctx)) {\n      auto FixitNoteDiag = S.Diag(Enclosing->getLocation(), diag::note_decl_unguarded_availability_silence) << /*Named*/ 0 << Enclosing;"}},
[o]={
["clang/test/Parser/objc-implementation-attrs.m"]={"clang/test/Parser/objc-implementation-attrs.m:27:12: note: annotate \'I4\' with an availability attribute to silence this warning"}
}
},
},
["note_declaration_not_a_prototype"]={
["note_declaration_not_a_prototype"]={
[f]="this declaration is not a prototype; add ... to make it ...",
[b]="this declaration is not a prototype; add ... to make it ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="this declaration is not a prototype; add %select{\'void\'|parameter declarations}0 to make it %select{a prototype for a zero-parameter function|one}0",
[h]="this declaration is not a prototype; add %select{\'void\'|parameter declarations}0 to make it %select{a prototype for a zero-parameter function|one}0",
[g]=b,
[j]=i,
[e]="this declaration is not a prototype; add (?:\'void\'|parameter declarations) to make it (?:a prototype for a zero\\-parameter function|one)",
[k]="this declaration is not a prototype; add (?:\'void\'|parameter declarations) to make it (?:a prototype for a zero\\-parameter function|one)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"2a45e409a8ae",1355794160,"When warning about a missing prototype because a function declaration is missing \'void\', insert a fi..."},
[m]={"2a45e409a8ae",1355794160,"When warning about a missing prototype because a function declaration is missing \'void\', insert a fi..."},
[n]={{t,15671,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    if (FD) {\n      if (ShouldWarnAboutMissingPrototype(FD, PossiblePrototype)) {\n        if (PossiblePrototype) {\n          // We found a declaration that is not a prototype,\n          // but that could be a zero-parameter prototype\n          if (TypeSourceInfo *TI = PossiblePrototype->getTypeSourceInfo()) {\n            if (FunctionNoProtoTypeLoc FTL = TL.getAs<FunctionNoProtoTypeLoc>())\n              Diag(PossiblePrototype->getLocation(), diag::note_declaration_not_a_prototype) << (FD->getNumParams() != 0) << (FD->getNumParams() == 0 ? FixItHint::CreateInsertion(FTL.getRParenLoc(), \"void\") : FixItHint{});"}}
[n]={{u,15671,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    if (FD) {\n      if (ShouldWarnAboutMissingPrototype(FD, PossiblePrototype)) {\n        if (PossiblePrototype) {\n          // We found a declaration that is not a prototype,\n          // but that could be a zero-parameter prototype\n          if (TypeSourceInfo *TI = PossiblePrototype->getTypeSourceInfo()) {\n            if (FunctionNoProtoTypeLoc FTL = TL.getAs<FunctionNoProtoTypeLoc>())\n              Diag(PossiblePrototype->getLocation(), diag::note_declaration_not_a_prototype) << (FD->getNumParams() != 0) << (FD->getNumParams() == 0 ? FixItHint::CreateInsertion(FTL.getRParenLoc(), \"void\") : FixItHint{});"}},
[o]={
["clang/test/Sema/warn-missing-prototypes.c"]={"clang/test/Sema/warn-missing-prototypes.c:4:5: note: this declaration is not a prototype; add parameter declarations to make it one","clang/test/Sema/warn-missing-prototypes.c:25:5: note: this declaration is not a prototype; add parameter declarations to make it one","clang/test/Sema/warn-missing-prototypes.c:49:6: note: this declaration is not a prototype; add \'void\' to make it a prototype for a zero-parameter function"}
}
},
},
["note_declare_parameter_strong"]={
["note_declare_parameter_strong"]={
[f]="declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools",
[b]="declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools",
[h]="declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools",
[g]=b,
[j]=i,
[e]="declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools",
[k]="declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools",
[d]=a,
[l]=a,
[c]="ARC Semantic Issue",
[c]="ARC Semantic Issue",
[m]={"c81708e6ecf0",1477345554,"[Sema][ObjC] Warn about implicitly autoreleasing out-parameters captured"},
[m]={"c81708e6ecf0",1477345554,"[Sema][ObjC] Warn about implicitly autoreleasing out-parameters captured"},
[n]={{r,19346,"// Returns true if the capture by block was successful.\nstatic bool captureInBlock(BlockScopeInfo *BSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool Nested, Sema &S, bool Invalid) {\n  // Warn about implicitly autoreleasing indirect parameters captured by blocks.\n  if (const auto *PT = CaptureType->getAs<PointerType>()) {\n    if (!Invalid && PointeeTy->getAs<ObjCObjectPointerType>() && PointeeTy.getObjCLifetime() == Qualifiers::OCL_Autoreleasing && !S.Context.hasDirectOwnershipQualifier(PointeeTy)) {\n      if (BuildAndDiagnose) {\n        S.Diag(VarLoc, diag::note_declare_parameter_strong);"}}
[n]={{s,19346,"// Returns true if the capture by block was successful.\nstatic bool captureInBlock(BlockScopeInfo *BSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool Nested, Sema &S, bool Invalid) {\n  // Warn about implicitly autoreleasing indirect parameters captured by blocks.\n  if (const auto *PT = CaptureType->getAs<PointerType>()) {\n    if (!Invalid && PointeeTy->getAs<ObjCObjectPointerType>() && PointeeTy.getObjCLifetime() == Qualifiers::OCL_Autoreleasing && !S.Context.hasDirectOwnershipQualifier(PointeeTy)) {\n      if (BuildAndDiagnose) {\n        S.Diag(VarLoc, diag::note_declare_parameter_strong);"}},
[o]={
["clang/test/SemaObjC/arc.m"]={"clang/test/SemaObjC/arc.m:816:38: note: declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools","clang/test/SemaObjC/arc.m:817:49: note: declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools","clang/test/SemaObjC/arc.m:819:49: note: declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools","clang/test/SemaObjC/arc.m:822:38: note: declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools","clang/test/SemaObjC/arc.m:823:48: note: declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools","clang/test/SemaObjC/arc.m:825:49: note: declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools"}
}
},
},
["note_declared_at"]={
["note_declared_at"]={
[f]="declared here",
[b]="declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declared here",
[h]="declared here",
[g]=b,
[j]=i,
[e]="declared here",
[k]="declared here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={wb,1236199783,vb},
[m]={Jb,1236199783,Kb},
[n]={
[n]={
[1]={p,2123,"static void NoteLValueLocation(EvalInfo &Info, APValue::LValueBase Base) {\n  if (VD)\n    Info.Note(VD->getLocation(), diag::note_declared_at);"},
[1]={q,2123,"static void NoteLValueLocation(EvalInfo &Info, APValue::LValueBase Base) {\n  if (VD)\n    Info.Note(VD->getLocation(), diag::note_declared_at);"},
[2]={p,2198,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  if (auto *FD = dyn_cast_or_null<FunctionDecl>(BaseVD); FD && FD->isImmediateFunction()) {\n    Info.Note(FD->getLocation(), diag::note_declared_at);"},
[2]={q,2198,"/// Check that this reference or pointer core constant expression is a valid\n/// value for an address or reference constant expression. Return true if we\n/// can fold this expression, whether or not it\'s a constant expression.\nstatic bool CheckLValueConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const LValue &LVal, ConstantExprKind Kind, CheckedTemporaries &CheckedTemps) {\n  if (auto *FD = dyn_cast_or_null<FunctionDecl>(BaseVD); FD && FD->isImmediateFunction()) {\n    Info.Note(FD->getLocation(), diag::note_declared_at);"},
[3]={p,2337,"/// Member pointers are constant expressions unless they point to a\n/// non-virtual dllimport member function.\nstatic bool CheckMemberPointerConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const APValue &Value, ConstantExprKind Kind) {\n  if (FD->isImmediateFunction()) {\n    Info.Note(FD->getLocation(), diag::note_declared_at);"},
[3]={q,2337,"/// Member pointers are constant expressions unless they point to a\n/// non-virtual dllimport member function.\nstatic bool CheckMemberPointerConstantExpression(EvalInfo &Info, SourceLocation Loc, QualType Type, const APValue &Value, ConstantExprKind Kind) {\n  if (FD->isImmediateFunction()) {\n    Info.Note(FD->getLocation(), diag::note_declared_at);"},
[4]={p,3543,"/// Diagnose an attempt to read from any unreadable field within the specified\n/// type, which might be a class type.\nstatic bool diagnoseMutableFields(EvalInfo &Info, const Expr *E, AccessKinds AK, QualType T) {\n  for (auto *Field : RD->fields()) {\n    // If we\'re actually going to read this field in some way, then it can\'t\n    // be mutable. If we\'re in a union, then assigning to a mutable field\n    // (even an empty one) can change the active member, so that\'s not OK.\n    // FIXME: Add core issue number for the union case.\n    if (Field->isMutable() && (RD->isUnion() || isReadByLvalueToRvalueConversion(Field->getType()))) {\n      Info.Note(Field->getLocation(), diag::note_declared_at);"},
[4]={q,3543,"/// Diagnose an attempt to read from any unreadable field within the specified\n/// type, which might be a class type.\nstatic bool diagnoseMutableFields(EvalInfo &Info, const Expr *E, AccessKinds AK, QualType T) {\n  for (auto *Field : RD->fields()) {\n    // If we\'re actually going to read this field in some way, then it can\'t\n    // be mutable. If we\'re in a union, then assigning to a mutable field\n    // (even an empty one) can change the active member, so that\'s not OK.\n    // FIXME: Add core issue number for the union case.\n    if (Field->isMutable() && (RD->isUnion() || isReadByLvalueToRvalueConversion(Field->getType()))) {\n      Info.Note(Field->getLocation(), diag::note_declared_at);"},
[5]={p,3806,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    if (ObjType->isArrayType()) {\n    } else if (ObjType->isAnyComplexType()) {\n    } else if (const FieldDecl *Field = getAsField(Sub.Entries[I])) {\n      if (Field->isMutable() && !Obj.mayAccessMutableMembers(Info, handler.AccessKind)) {\n        Info.Note(Field->getLocation(), diag::note_declared_at);"},
[5]={q,3806,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    if (ObjType->isArrayType()) {\n    } else if (ObjType->isAnyComplexType()) {\n    } else if (const FieldDecl *Field = getAsField(Sub.Entries[I])) {\n      if (Field->isMutable() && !Obj.mayAccessMutableMembers(Info, handler.AccessKind)) {\n        Info.Note(Field->getLocation(), diag::note_declared_at);"},
[6]={p,4130,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n        if (!IsConstant) {\n          if (Info.getLangOpts().CPlusPlus) {\n            Info.Note(VD->getLocation(), diag::note_declared_at);"},
[6]={q,4130,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n        if (!IsConstant) {\n          if (Info.getLangOpts().CPlusPlus) {\n            Info.Note(VD->getLocation(), diag::note_declared_at);"},
[7]={p,4150,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n      } else if (!IsAccess) {\n      } else if (IsConstant && Info.checkingPotentialConstantExpression() && BaseType->isLiteralType(Info.Ctx) && !VD->hasDefinition()) {\n      } else if (IsConstant) {\n        // Keep evaluating to see what we can do. In particular, we support\n        // folding of const floating-point types, in order to make static const\n        // data members of such types (supported as an extension) more useful.\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.Note(VD->getLocation(), diag::note_declared_at);"},
[7]={q,4150,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n      } else if (!IsAccess) {\n      } else if (IsConstant && Info.checkingPotentialConstantExpression() && BaseType->isLiteralType(Info.Ctx) && !VD->hasDefinition()) {\n      } else if (IsConstant) {\n        // Keep evaluating to see what we can do. In particular, we support\n        // folding of const floating-point types, in order to make static const\n        // data members of such types (supported as an extension) more useful.\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.Note(VD->getLocation(), diag::note_declared_at);"},
[8]={p,4161,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n      } else if (!IsAccess) {\n      } else if (IsConstant && Info.checkingPotentialConstantExpression() && BaseType->isLiteralType(Info.Ctx) && !VD->hasDefinition()) {\n      } else if (IsConstant) {\n      } else {\n        // Never allow reading a non-const value.\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.Note(VD->getLocation(), diag::note_declared_at);"},
[8]={q,4161,"/// Find the complete object to which an LValue refers.\nstatic CompleteObject findCompleteObject(EvalInfo &Info, const Expr *E, AccessKinds AK, const LValue &LVal, QualType LValType) {\n  if (Info.getLangOpts().CPlusPlus14 && LVal.Base == Info.EvaluatingDecl && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n  } else if (const ValueDecl *D = LVal.Base.dyn_cast<const ValueDecl *>()) {\n    // Unless we\'re looking at a local variable or argument in a constexpr call,\n    // the variable we\'re reading must be const.\n    if (!Frame) {\n      if (IsAccess && isa<ParmVarDecl>(VD)) {\n      } else if (Info.getLangOpts().CPlusPlus14 && lifetimeStartedInEvaluation(Info, LVal.Base)) {\n      } else if (isModification(AK)) {\n      } else if (VD->isConstexpr()) {\n      } else if (BaseType->isIntegralOrEnumerationType()) {\n      } else if (!IsAccess) {\n      } else if (IsConstant && Info.checkingPotentialConstantExpression() && BaseType->isLiteralType(Info.Ctx) && !VD->hasDefinition()) {\n      } else if (IsConstant) {\n      } else {\n        // Never allow reading a non-const value.\n        if (Info.getLangOpts().CPlusPlus) {\n          Info.Note(VD->getLocation(), diag::note_declared_at);"},
[9]={p,4319,"/// Perform an lvalue-to-rvalue conversion on the given glvalue. This\n/// can also be used for \'lvalue-to-lvalue\' conversions for looking up the\n/// glvalue referred to by an entity of reference type.\n///\n/// \\param Info - Information about the ongoing evaluation.\n/// \\param Conv - The expression for which we are performing the conversion.\n///              Used for diagnostics.\n/// \\param Type - The type of the glvalue (before stripping cv-qualifiers in the\n///              case of a non-class type).\n/// \\param LVal - The glvalue on which we are attempting to perform this action.\n/// \\param RVal - The produced value will be placed here.\n/// \\param WantObjectRepresentation - If true, we\'re looking for the object\n///              representation rather than the value, and in particular,\n///              there is no requirement that the result be fully initialized.\nstatic bool handleLValueToRValueConversion(EvalInfo &Info, const Expr *Conv, QualType Type, const LValue &LVal, APValue &RVal, bool WantObjectRepresentation = false) {\n  if (Base && !LVal.getLValueCallIndex() && !Type.isVolatileQualified()) {\n    if (const CompoundLiteralExpr *CLE = dyn_cast<CompoundLiteralExpr>(Base)) {\n      if (CLETy->isArrayType() && !Type->isArrayType()) {\n        if (!CLETy.isConstant(Info.Ctx)) {\n          Info.Note(CLE->getExprLoc(), diag::note_declared_at);"},
[9]={q,4319,"/// Perform an lvalue-to-rvalue conversion on the given glvalue. This\n/// can also be used for \'lvalue-to-lvalue\' conversions for looking up the\n/// glvalue referred to by an entity of reference type.\n///\n/// \\param Info - Information about the ongoing evaluation.\n/// \\param Conv - The expression for which we are performing the conversion.\n///              Used for diagnostics.\n/// \\param Type - The type of the glvalue (before stripping cv-qualifiers in the\n///              case of a non-class type).\n/// \\param LVal - The glvalue on which we are attempting to perform this action.\n/// \\param RVal - The produced value will be placed here.\n/// \\param WantObjectRepresentation - If true, we\'re looking for the object\n///              representation rather than the value, and in particular,\n///              there is no requirement that the result be fully initialized.\nstatic bool handleLValueToRValueConversion(EvalInfo &Info, const Expr *Conv, QualType Type, const LValue &LVal, APValue &RVal, bool WantObjectRepresentation = false) {\n  if (Base && !LVal.getLValueCallIndex() && !Type.isVolatileQualified()) {\n    if (const CompoundLiteralExpr *CLE = dyn_cast<CompoundLiteralExpr>(Base)) {\n      if (CLETy->isArrayType() && !Type->isArrayType()) {\n        if (!CLETy.isConstant(Info.Ctx)) {\n          Info.Note(CLE->getExprLoc(), diag::note_declared_at);"},
[10]={p,5559,"/// CheckTrivialDefaultConstructor - Check whether a constructor is a trivial\n/// default constructor. If so, we\'ll fold it whether or not it\'s marked as\n/// constexpr. If it is marked as constexpr, we will never implicitly define it,\n/// so we need special handling.\nstatic bool CheckTrivialDefaultConstructor(EvalInfo &Info, SourceLocation Loc, const CXXConstructorDecl *CD, bool IsValueInitialization) {\n  // Value-initialization does not call a trivial default constructor, so such a\n  // call is a core constant expression whether or not the constructor is\n  // constexpr.\n  if (!CD->isConstexpr() && !IsValueInitialization) {\n    if (Info.getLangOpts().CPlusPlus11) {\n      Info.Note(CD->getLocation(), diag::note_declared_at);"},
[10]={q,5559,"/// CheckTrivialDefaultConstructor - Check whether a constructor is a trivial\n/// default constructor. If so, we\'ll fold it whether or not it\'s marked as\n/// constexpr. If it is marked as constexpr, we will never implicitly define it,\n/// so we need special handling.\nstatic bool CheckTrivialDefaultConstructor(EvalInfo &Info, SourceLocation Loc, const CXXConstructorDecl *CD, bool IsValueInitialization) {\n  // Value-initialization does not call a trivial default constructor, so such a\n  // call is a core constant expression whether or not the constructor is\n  // constexpr.\n  if (!CD->isConstexpr() && !IsValueInitialization) {\n    if (Info.getLangOpts().CPlusPlus11) {\n      Info.Note(CD->getLocation(), diag::note_declared_at);"},
[11]={p,5624,"/// CheckConstexprFunction - Check that a function can be called in a constant\n/// expression.\nstatic bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body) {\n  if (Info.getLangOpts().CPlusPlus11) {\n    Info.Note(DiagDecl->getLocation(), diag::note_declared_at);"},
[11]={q,5624,"/// CheckConstexprFunction - Check that a function can be called in a constant\n/// expression.\nstatic bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body) {\n  if (Info.getLangOpts().CPlusPlus11) {\n    Info.Note(DiagDecl->getLocation(), diag::note_declared_at);"},
[12]={p,5798,"/// Perform virtual dispatch.\nstatic const CXXMethodDecl *HandleVirtualDispatch(EvalInfo &Info, const Expr *E, LValue &This, const CXXMethodDecl *Found, llvm::SmallVectorImpl<QualType> &CovariantAdjustmentPath) {\n  // C++2a [class.abstract]p6:\n  //  the effect of making a virtual call to a pure virtual function [...] is\n  //  undefined\n  if (Callee->isPure()) {\n    Info.Note(Callee->getLocation(), diag::note_declared_at);"},
[12]={q,5798,"/// Perform virtual dispatch.\nstatic const CXXMethodDecl *HandleVirtualDispatch(EvalInfo &Info, const Expr *E, LValue &This, const CXXMethodDecl *Found, llvm::SmallVectorImpl<QualType> &CovariantAdjustmentPath) {\n  // C++2a [class.abstract]p6:\n  //  the effect of making a virtual call to a pure virtual function [...] is\n  //  undefined\n  if (Callee->isPure()) {\n    Info.Note(Callee->getLocation(), diag::note_declared_at);"},
[13]={p,8369,"bool LValueExprEvaluator::VisitVarDecl(const Expr *E, const VarDecl *VD) {\n  if (!Info.getLangOpts().CPlusPlus11) {\n    Info.Note(VD->getLocation(), diag::note_declared_at);"},
[13]={q,8369,"bool LValueExprEvaluator::VisitVarDecl(const Expr *E, const VarDecl *VD) {\n  if (!Info.getLangOpts().CPlusPlus11) {\n    Info.Note(VD->getLocation(), diag::note_declared_at);"},
[14]={w,134,"bool CheckExtern(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  if (!S.checkingPotentialConstantExpression()) {\n    S.Note(VD->getLocation(), diag::note_declared_at);"},
[14]={A,134,"bool CheckExtern(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  if (!S.checkingPotentialConstantExpression()) {\n    S.Note(VD->getLocation(), diag::note_declared_at);"},
[15]={w,169,"bool CheckLive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (!Ptr.isLive()) {\n    if (IsTemp)\n    else\n      S.Note(Ptr.getDeclLoc(), diag::note_declared_at);"},
[15]={A,169,"bool CheckLive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (!Ptr.isLive()) {\n    if (IsTemp)\n    else\n      S.Note(Ptr.getDeclLoc(), diag::note_declared_at);"},
[16]={w,232,"bool CheckMutable(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  S.Note(Field->getLocation(), diag::note_declared_at);"},
[16]={A,232,"bool CheckMutable(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  S.Note(Field->getLocation(), diag::note_declared_at);"},
[17]={w,335,"bool CheckCallable(InterpState &S, CodePtr OpPC, const Function *F) {\n  if (!F->isConstexpr()) {\n    if (S.getLangOpts().CPlusPlus11) {\n      S.Note(DiagDecl->getLocation(), diag::note_declared_at);"},
[17]={A,335,"bool CheckCallable(InterpState &S, CodePtr OpPC, const Function *F) {\n  if (!F->isConstexpr()) {\n    if (S.getLangOpts().CPlusPlus11) {\n      S.Note(DiagDecl->getLocation(), diag::note_declared_at);"},
[18]={w,379,"bool CheckPure(InterpState &S, CodePtr OpPC, const CXXMethodDecl *MD) {\n  S.Note(MD->getLocation(), diag::note_declared_at);"},
[18]={A,379,"bool CheckPure(InterpState &S, CodePtr OpPC, const CXXMethodDecl *MD) {\n  S.Note(MD->getLocation(), diag::note_declared_at);"},
[19]={"clang/lib/Sema/SemaAttr.cpp",702,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  if (Section.Decl)\n    Diag(Section.Decl->getLocation(), diag::note_declared_at) << Section.Decl->getName();"},
[19]={"clang/lib/Sema/SemaAttr.cpp",702,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, NamedDecl *Decl) {\n  if (Section.Decl)\n    Diag(Section.Decl->getLocation(), diag::note_declared_at) << Section.Decl->getName();"},
[20]={"clang/lib/Sema/SemaAttr.cpp",723,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n  if (SectionIt != Context.SectionInfos.end()) {\n    if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n      if (Section.Decl)\n        Diag(Section.Decl->getLocation(), diag::note_declared_at) << Section.Decl->getName();"},
[20]={"clang/lib/Sema/SemaAttr.cpp",723,"bool Sema::UnifySection(StringRef SectionName, int SectionFlags, SourceLocation PragmaSectionLocation) {\n  if (SectionIt != Context.SectionInfos.end()) {\n    if (!(Section.SectionFlags & ASTContext::PSF_Implicit)) {\n      if (Section.Decl)\n        Diag(Section.Decl->getLocation(), diag::note_declared_at) << Section.Decl->getName();"},
[21]={cc,300,"/// Require that the EnumDecl is completed with its enumerators defined or\n/// instantiated. SS, if provided, is the ScopeRef parsed.\
[21]={jc,300,"/// Require that the EnumDecl is completed with its enumerators defined or\n/// instantiated. SS, if provided, is the ScopeRef parsed.\
[64]={"clang/lib/Sema/SemaSYCL.cpp",66,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n  auto Check = [&](QualType TypeToCheck, const ValueDecl *D) {\n    // Checks for other types can also be done here.\n    if (ErrorFound) {\n      if (NeedToEmitNotes) {\n        if (auto *FD = dyn_cast<FieldDecl>(D))\n        else\n          SYCLDiagIfDeviceCode(D->getLocation(), diag::note_declared_at);"},
[64]={"clang/lib/Sema/SemaSYCL.cpp",66,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n  auto Check = [&](QualType TypeToCheck, const ValueDecl *D) {\n    // Checks for other types can also be done here.\n    if (ErrorFound) {\n      if (NeedToEmitNotes) {\n        if (auto *FD = dyn_cast<FieldDecl>(D))\n        else\n          SYCLDiagIfDeviceCode(D->getLocation(), diag::note_declared_at);"},
[65]={u,4286,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  if (TypeAliasTemplateDecl *TAT = dyn_cast_or_null<TypeAliasTemplateDecl>(Template.getAsTemplateDecl())) {\n    Diag(TAT->getLocation(), diag::note_declared_at);"}
[65]={v,4286,"TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, TypeSpecifierType TagSpec, SourceLocation TagLoc, CXXScopeSpec &SS, SourceLocation TemplateKWLoc, TemplateTy TemplateD, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgsIn, SourceLocation RAngleLoc) {\n  if (TypeAliasTemplateDecl *TAT = dyn_cast_or_null<TypeAliasTemplateDecl>(Template.getAsTemplateDecl())) {\n    Diag(TAT->getLocation(), diag::note_declared_at);"}
},
[o]={
["clang/test/SemaHLSL/cb_error.hlsl"]={"clang/test/SemaHLSL/cb_error.hlsl:4:9: note: declared here"}
}
}
},
},
["note_declared_coroutine_here"]={
["note_declared_coroutine_here"]={
[f]="function is a coroutine due to use of \'A\' here",
[b]="function is a coroutine due to use of \'A\' here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="function is a coroutine due to use of \'%0\' here",
[h]="function is a coroutine due to use of \'%0\' here",
[g]=b,
[j]=i,
[e]="function is a coroutine due to use of \'(.*?)\' here",
[k]="function is a coroutine due to use of \'(.*?)\' here",
[d]=a,
[l]=a,
[c]=Zb,
[c]=Bc,
[m]={"cfd53b4e9993",1445494430,"[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return."},
[m]={"cfd53b4e9993",1445494430,"[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return."},
[n]={{L,721,"bool Sema::ActOnCoroutineBodyStart(Scope *SC, SourceLocation KWLoc, StringRef Keyword) {\n  // Build the initial suspend point\n  auto buildSuspends = [&](StringRef Name) mutable -> StmtResult {\n    if (Suspend.isInvalid()) {\n      Diag(KWLoc, diag::note_declared_coroutine_here) << Keyword;"},{L,1124,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // [stmt.return.coroutine]p1:\n  //  A coroutine shall not enclose a return statement ([stmt.return]).\n  if (Fn->FirstReturnLoc.isValid()) {\n    Diag(Fn->FirstCoroutineStmtLoc, diag::note_declared_coroutine_here) << Fn->getFirstCoroutineStmtKeyword();"},{L,1229,"static bool diagReturnOnAllocFailure(Sema &S, Expr *E, CXXRecordDecl *PromiseRecordDecl, FunctionScopeInfo &Fn) {\n  S.Diag(Fn.FirstCoroutineStmtLoc, diag::note_declared_coroutine_here) << Fn.getFirstCoroutineStmtKeyword();"},{L,1272,"bool CoroutineStmtBuilder::makeReturnOnAllocFailure() {\n  if (ReturnStmt.isInvalid()) {\n    S.Diag(Fn.FirstCoroutineStmtLoc, diag::note_declared_coroutine_here) << Fn.getFirstCoroutineStmtKeyword();"},{L,1726,"bool CoroutineStmtBuilder::makeOnException() {\n  // Since the body of the coroutine will be wrapped in try-catch, it will\n  // be incompatible with SEH __try if present in a function.\n  if (!S.getLangOpts().Borland && Fn.FirstSEHTryLoc.isValid()) {\n    S.Diag(Fn.FirstCoroutineStmtLoc, diag::note_declared_coroutine_here) << Fn.getFirstCoroutineStmtKeyword();"},{L,1928,"static void noteMemberDeclaredHere(Sema &S, Expr *E, FunctionScopeInfo &Fn) {\n  S.Diag(Fn.FirstCoroutineStmtLoc, diag::note_declared_coroutine_here) << Fn.getFirstCoroutineStmtKeyword();"}}
[n]={{T,721,"bool Sema::ActOnCoroutineBodyStart(Scope *SC, SourceLocation KWLoc, StringRef Keyword) {\n  // Build the initial suspend point\n  auto buildSuspends = [&](StringRef Name) mutable -> StmtResult {\n    if (Suspend.isInvalid()) {\n      Diag(KWLoc, diag::note_declared_coroutine_here) << Keyword;"},{T,1124,"void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {\n  // [stmt.return.coroutine]p1:\n  //  A coroutine shall not enclose a return statement ([stmt.return]).\n  if (Fn->FirstReturnLoc.isValid()) {\n    Diag(Fn->FirstCoroutineStmtLoc, diag::note_declared_coroutine_here) << Fn->getFirstCoroutineStmtKeyword();"},{T,1229,"static bool diagReturnOnAllocFailure(Sema &S, Expr *E, CXXRecordDecl *PromiseRecordDecl, FunctionScopeInfo &Fn) {\n  S.Diag(Fn.FirstCoroutineStmtLoc, diag::note_declared_coroutine_here) << Fn.getFirstCoroutineStmtKeyword();"},{T,1272,"bool CoroutineStmtBuilder::makeReturnOnAllocFailure() {\n  if (ReturnStmt.isInvalid()) {\n    S.Diag(Fn.FirstCoroutineStmtLoc, diag::note_declared_coroutine_here) << Fn.getFirstCoroutineStmtKeyword();"},{T,1726,"bool CoroutineStmtBuilder::makeOnException() {\n  // Since the body of the coroutine will be wrapped in try-catch, it will\n  // be incompatible with SEH __try if present in a function.\n  if (!S.getLangOpts().Borland && Fn.FirstSEHTryLoc.isValid()) {\n    S.Diag(Fn.FirstCoroutineStmtLoc, diag::note_declared_coroutine_here) << Fn.getFirstCoroutineStmtKeyword();"},{T,1928,"static void noteMemberDeclaredHere(Sema &S, Expr *E, FunctionScopeInfo &Fn) {\n  S.Diag(Fn.FirstCoroutineStmtLoc, diag::note_declared_coroutine_here) << Fn.getFirstCoroutineStmtKeyword();"}},
[o]={
["clang/test/SemaCXX/coroutine-seh.cpp"]={"clang/test/SemaCXX/coroutine-seh.cpp:35:5: note: function is a coroutine due to use of \'co_return\' here"}
}
},
},
["note_declared_nonnull"]={
["note_declared_nonnull"]={
[f]="declared ... here",
[b]="declared ... here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declared %select{\'returns_nonnull\'|\'nonnull\'}0 here",
[h]="declared %select{\'returns_nonnull\'|\'nonnull\'}0 here",
[g]=b,
[j]=i,
[e]="declared (?:\'returns_nonnull\'|\'nonnull\') here",
[k]="declared (?:\'returns_nonnull\'|\'nonnull\') here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"bc85ec865606",1465967919,"Add a \"declared \'nonnull\' here\" note to warnings where an expression is checked against null."},
[m]={"bc85ec865606",1465967919,"Add a \"declared \'nonnull\' here\" note to warnings where an expression is checked against null."},
[n]={{y,15493,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  auto ComplainAboutNonnullParamOrCall = [&](const Attr *NonnullAttr) {\n    Diag(NonnullAttr->getLocation(), diag::note_declared_nonnull) << IsParam;"}}
[n]={{D,15493,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  auto ComplainAboutNonnullParamOrCall = [&](const Attr *NonnullAttr) {\n    Diag(NonnullAttr->getLocation(), diag::note_declared_nonnull) << IsParam;"}},
[o]={
["clang/test/Sema/nonnull.c"]={"clang/test/Sema/nonnull.c:93:16: note: declared \'nonnull\' here","clang/test/Sema/nonnull.c:93:16: note: declared \'nonnull\' here","clang/test/Sema/nonnull.c:112:80: note: declared \'nonnull\' here","clang/test/Sema/nonnull.c:112:80: note: declared \'nonnull\' here","clang/test/Sema/nonnull.c:134:16: note: declared \'nonnull\' here","clang/test/Sema/nonnull.c:148:31: note: declared \'nonnull\' here",uc,uc,uc,uc,uc,uc}
}
},
},
["note_declared_required_constant_init_here"]={
["note_declared_required_constant_init_here"]={
[f]="required by ... here",
[b]="required by ... here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="required by %select{\'require_constant_initialization\' attribute|\'constinit\' specifier}0 here",
[h]="required by %select{\'require_constant_initialization\' attribute|\'constinit\' specifier}0 here",
[g]=b,
[j]=i,
[e]="required by (?:\'require_constant_initialization\' attribute|\'constinit\' specifier) here",
[k]="required by (?:\'require_constant_initialization\' attribute|\'constinit\' specifier) here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization."},
[m]={"92f8935e63f0",1472840729,"Implement __attribute__((require_constant_initialization)) for safe static initialization."},
[n]={{t,14229,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    if (HasConstInit) {\n    } else if (var->isConstexpr()) {\n    } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n      Diag(Attr->getLocation(), diag::note_declared_required_constant_init_here) << Attr->getRange() << Attr->isConstinit();"}}
[n]={{u,14229,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    if (HasConstInit) {\n    } else if (var->isConstexpr()) {\n    } else if (GlobalStorage && var->hasAttr<ConstInitAttr>()) {\n      Diag(Attr->getLocation(), diag::note_declared_required_constant_init_here) << Attr->getRange() << Attr->isConstinit();"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p3.cpp:6:1: note: required by \'constinit\' specifier here"}
}
},
},
["note_deduced_non_type_template_arg_type_mismatch"]={
["note_deduced_non_type_template_arg_type_mismatch"]={
[f]="deduced non-type template argument does not have the same type as the corresponding template parameter (A vs B)",
[b]="deduced non-type template argument does not have the same type as the corresponding template parameter (A vs B)",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="deduced non-type template argument does not have the same type as the corresponding template parameter%diff{ ($ vs $)|}0,1",
[h]="deduced non-type template argument does not have the same type as the corresponding template parameter%diff{ ($ vs $)|}0,1",
[g]=b,
[j]=i,
[e]="deduced non\\-type template argument does not have the same type as the corresponding template parameter(?: \\((.*?) vs (.*?)\\)|)",
[k]="deduced non\\-type template argument does not have the same type as the corresponding template parameter(?: \\((.*?) vs (.*?)\\)|)",
[d]=a,
[l]=a,
[c]=a
[c]=a,
[o]={
["clang/test/SemaTemplate/temp_arg_nontype.cpp"]={"clang/test/SemaTemplate/temp_arg_nontype.cpp:414:38: note: deduced non-type template argument does not have the same type as the corresponding template parameter (\'const int\' vs \'int &\')","clang/test/SemaTemplate/temp_arg_nontype.cpp:420:32: note: deduced non-type template argument does not have the same type as the corresponding template parameter (\'int\' vs \'const int &\')","clang/test/SemaTemplate/temp_arg_nontype.cpp:426:31: note: deduced non-type template argument does not have the same type as the corresponding template parameter (\'int\' vs \'const int &\')"}
}
},
},
["note_deduced_template_arg_substitution_here"]={
["note_deduced_template_arg_substitution_here"]={
[f]="during template argument deduction for ... template ...A B",
[b]="during template argument deduction for ... template ...A B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="during template argument deduction for %select{class|variable}0 template %select{partial specialization |}1%2 %3",
[h]="during template argument deduction for %select{class|variable}0 template %select{partial specialization |}1%2 %3",
[g]=b,
[j]=i,
[e]="during template argument deduction for (?:class|variable) template (?:partial specialization |)(.*?) (.*?)",
[k]="during template argument deduction for (?:class|variable) template (?:partial specialization |)(.*?) (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"e68a38f0a8ab",1482553231,"Fix crash if substitution fails during deduction of variable template partial specialization argumen..."},
[m]={"e68a38f0a8ab",1482553231,"Fix crash if substitution fails during deduction of variable template partial specialization argumen..."},
[n]={{z,858,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DeducedTemplateArgumentSubstitution: {\n      if (FunctionTemplateDecl *FnTmpl = dyn_cast<FunctionTemplateDecl>(Active->Entity)) {\n      } else {\n        Diags.Report(Active->PointOfInstantiation, diag::note_deduced_template_arg_substitution_here) << IsVar << IsTemplate << cast<NamedDecl>(Active->Entity) << getTemplateArgumentBindingsText(Params, Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}}
[n]={{G,858,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DeducedTemplateArgumentSubstitution: {\n      if (FunctionTemplateDecl *FnTmpl = dyn_cast<FunctionTemplateDecl>(Active->Entity)) {\n      } else {\n        Diags.Report(Active->PointOfInstantiation, diag::note_deduced_template_arg_substitution_here) << IsVar << IsTemplate << cast<NamedDecl>(Active->Entity) << getTemplateArgumentBindingsText(Params, Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}},
[o]={
["clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:29:24: note: during template argument deduction for class template partial specialization \'B<T *>\' [with T = int *]","clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:29:24: note: during template argument deduction for class template partial specialization \'B<T **>\' [with T = int]","clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:78:17: note: during template argument deduction for variable template partial specialization \'v1<T *>\' [with T = int *]","clang/test/CXX/temp/temp.constr/temp.constr.constr/partial-specializations.cpp:78:17: note: during template argument deduction for variable template partial specialization \'v1<T **>\' [with T = int]"}
}
},
},
["note_deduction_guide_access"]={
["note_deduction_guide_access"]={
[f]="deduction guide declared A by intervening access specifier",
[b]="deduction guide declared A by intervening access specifier",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="deduction guide declared %0 by intervening access specifier",
[h]="deduction guide declared %0 by intervening access specifier",
[g]=b,
[j]=i,
[e]="deduction guide declared (.*?) by intervening access specifier",
[k]="deduction guide declared (.*?) by intervening access specifier",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"e4899c16480d",1527718423,"PR37631: verify that a member deduction guide has the same access as its template."},
[m]={"e4899c16480d",1527718423,"PR37631: verify that a member deduction guide has the same access as its template."},
[n]={{q,3676,"/// 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  if (isInstField) {\n  } else {\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      // 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(LastAccessSpec->getBeginLoc(), diag::note_deduction_guide_access) << AS;"}}
[n]={{r,3676,"/// 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  if (isInstField) {\n  } else {\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      // 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(LastAccessSpec->getBeginLoc(), diag::note_deduction_guide_access) << AS;"}},
[o]={
["clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp"]={"clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:365:3: note: deduction guide declared protected by intervening access specifier","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:369:3: note: deduction guide declared private by intervening access specifier","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:372:3: note: deduction guide declared public by intervening access specifier","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:372:3: note: deduction guide declared public by intervening access specifier"}
}
},
},
["note_deduction_guide_template_access"]={
["note_deduction_guide_template_access"]={
[f]="member template declared A here",
[b]="member template declared A here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="member template declared %0 here",
[h]="member template declared %0 here",
[g]=b,
[j]=i,
[e]="member template declared (.*?) here",
[k]="member template declared (.*?) here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"e4899c16480d",1527718423,"PR37631: verify that a member deduction guide has the same access as its template."},
[m]={"e4899c16480d",1527718423,"PR37631: verify that a member deduction guide has the same access as its template."},
[n]={{q,3668,"/// 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  if (isInstField) {\n  } else {\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      // 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(TD->getBeginLoc(), diag::note_deduction_guide_template_access) << TD->getAccess();"}}
[n]={{r,3668,"/// 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  if (isInstField) {\n  } else {\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      // 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(TD->getBeginLoc(), diag::note_deduction_guide_template_access) << TD->getAccess();"}},
[o]={
["clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp"]={"clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:363:5: note: member template declared public here","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:366:5: note: member template declared protected here","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:366:5: note: member template declared protected here","clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:370:5: note: member template declared private here"}
}
},
},
["note_default_arg_instantiation_here"]={
["note_default_arg_instantiation_here"]={
[f]="in instantiation of default argument for \'A\' required here",
[b]="in instantiation of default argument for \'A\' required here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in instantiation of default argument for \'%0\' required here",
[h]="in instantiation of default argument for \'%0\' required here",
[g]=b,
[j]=i,
[e]="in instantiation of default argument for \'(.*?)\' required here",
[k]="in instantiation of default argument for \'(.*?)\' required here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files."},
[m]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files."},
[n]={{z,811,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DefaultTemplateArgumentInstantiation: {\n      Diags.Report(Active->PointOfInstantiation, diag::note_default_arg_instantiation_here) << OS.str() << Active->InstantiationRange;"}}
[n]={{G,811,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DefaultTemplateArgumentInstantiation: {\n      Diags.Report(Active->PointOfInstantiation, diag::note_default_arg_instantiation_here) << OS.str() << Active->InstantiationRange;"}},
[o]={
["clang/test/SemaTemplate/instantiation-default-1.cpp"]={"clang/test/SemaTemplate/instantiation-default-1.cpp:36:1: note: in instantiation of default argument for \'Def2<int_ref_t>\' required here"}
}
},
},
["note_default_argument_declared_here"]={
["note_default_argument_declared_here"]={
[f]="default argument declared here",
[b]="default argument declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="default argument declared here",
[h]="default argument declared here",
[g]=b,
[j]=i,
[e]="default argument declared here",
[k]="default argument declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"84613c4eba08",1244825500,"It\'s an error to use a function declared in a class definition as a default argument before the func..."},
[m]={"84613c4eba08",1244825500,"It\'s an error to use a function declared in a class definition as a default argument before the func..."},
[n]={{r,6327,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n  if (Param->hasUnparsedDefaultArg()) {\n    Diag(UnparsedDefaultArgLocs[Param], diag::note_default_argument_declared_here);"}}
[n]={{s,6327,"bool Sema::CheckCXXDefaultArgExpr(SourceLocation CallLoc, FunctionDecl *FD, ParmVarDecl *Param, Expr *RewrittenInit, bool SkipImmediateInvocations) {\n  if (Param->hasUnparsedDefaultArg()) {\n    Diag(UnparsedDefaultArgLocs[Param], diag::note_default_argument_declared_here);"}},
[o]={
["clang/test/SemaCXX/default2.cpp"]={"clang/test/SemaCXX/default2.cpp:118:22: note: default argument declared here","clang/test/SemaCXX/default2.cpp:124:22: note: default argument declared here"}
}
},
},
["note_default_function_arg_instantiation_here"]={
["note_default_function_arg_instantiation_here"]={
[f]="in instantiation of default function argument expression for \'A\' required here",
[b]="in instantiation of default function argument expression for \'A\' required here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in instantiation of default function argument expression for \'%0\' required here",
[h]="in instantiation of default function argument expression for \'%0\' required here",
[g]=b,
[j]=i,
[e]="in instantiation of default function argument expression for \'(.*?)\' required here",
[k]="in instantiation of default function argument expression for \'(.*?)\' required here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"657bad441eda",1252127659,"Use a separate diagnostic for default function argument expressions."},
[m]={"657bad441eda",1252127659,"Use a separate diagnostic for default function argument expressions."},
[n]={{z,877,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DefaultFunctionArgumentInstantiation: {\n      Diags.Report(Active->PointOfInstantiation, diag::note_default_function_arg_instantiation_here) << OS.str() << Active->InstantiationRange;"}}
[n]={{G,877,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DefaultFunctionArgumentInstantiation: {\n      Diags.Report(Active->PointOfInstantiation, diag::note_default_function_arg_instantiation_here) << OS.str() << Active->InstantiationRange;"}},
[o]={
["clang/test/SemaCXX/attr-unavailable.cpp"]={"clang/test/SemaCXX/attr-unavailable.cpp:159:22: note: in instantiation of default function argument expression for \'has_default_arg_template<int>\' required here"}
}
},
},
["note_default_member_initializer_not_yet_parsed"]={
["note_default_member_initializer_not_yet_parsed"]={
[f]="default member initializer declared here",
[b]="default member initializer declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="default member initializer declared here",
[h]="default member initializer declared here",
[g]=b,
[j]=i,
[e]="default member initializer declared here",
[k]="default member initializer declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Y,1582847864,W},
[m]={mb,1582847864,jb},
[n]={{r,6457,"ExprResult Sema::BuildCXXDefaultInitExpr(SourceLocation Loc, FieldDecl *Field) {\n  Diag(Field->getEndLoc(), diag::note_default_member_initializer_not_yet_parsed);"},{z,3520,"/// 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  if (!OldInit) {\n    Diag(Pattern->getEndLoc(), diag::note_default_member_initializer_not_yet_parsed);"}}
[n]={{s,6457,"ExprResult Sema::BuildCXXDefaultInitExpr(SourceLocation Loc, FieldDecl *Field) {\n  Diag(Field->getEndLoc(), diag::note_default_member_initializer_not_yet_parsed);"},{G,3520,"/// 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  if (!OldInit) {\n    Diag(Pattern->getEndLoc(), diag::note_default_member_initializer_not_yet_parsed);"}},
[o]={
["clang/test/SemaCXX/cxx1y-initializer-aggregates.cpp"]={"clang/test/SemaCXX/cxx1y-initializer-aggregates.cpp:68:14: note: default member initializer declared here","clang/test/SemaCXX/cxx1y-initializer-aggregates.cpp:70:14: note: default member initializer declared here"}
}
},
},
["note_defaulted_comparison_ambiguous"]={
["note_defaulted_comparison_ambiguous"]={
[f]="defaulted A is implicitly deleted because implied ...comparison ...is ambiguous",
[b]="defaulted A is implicitly deleted because implied ...comparison ...is ambiguous",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="defaulted %0 is implicitly deleted because implied %select{|\'==\' |\'<\' }1comparison %select{|for member %3 |for base class %3 }2is ambiguous",
[h]="defaulted %0 is implicitly deleted because implied %select{|\'==\' |\'<\' }1comparison %select{|for member %3 |for base class %3 }2is ambiguous",
[g]=b,
[j]=i,
[e]="defaulted (.*?) is implicitly deleted because implied (?:|\'\\=\\=\' |\'\\<\' )comparison (?:|for member (.*?) |for base class (.*?) )is ambiguous",
[k]="defaulted (.*?) is implicitly deleted because implied (?:|\'\\=\\=\' |\'\\<\' )comparison (?:|for member (.*?) |for base class (.*?) )is ambiguous",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={jb,1573070592,gb},
[m]={tb,1573070592,Bb},
[n]={{q,8200,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Ambiguous:\n      if (Diagnose == ExplainDeleted) {\n        CandidateSet.NoteCandidates(PartialDiagnosticAt(Subobj.Loc, S.PDiag(diag::note_defaulted_comparison_ambiguous) << FD << Kind << Subobj.Kind << Subobj.Decl), S, OCD_AmbiguousCandidates, Args);"}}
[n]={{r,8200,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Ambiguous:\n      if (Diagnose == ExplainDeleted) {\n        CandidateSet.NoteCandidates(PartialDiagnosticAt(Subobj.Loc, S.PDiag(diag::note_defaulted_comparison_ambiguous) << FD << Kind << Subobj.Kind << Subobj.Decl), S, OCD_AmbiguousCandidates, Args);"}},
[o]={
["clang/test/CXX/class/class.compare/class.spaceship/p1.cpp"]={"clang/test/CXX/class/class.compare/class.spaceship/p1.cpp:87:37: note: defaulted \'operator<=>\' is implicitly deleted because implied comparison for base class \'F\' is ambiguous","clang/test/CXX/class/class.compare/class.spaceship/p1.cpp:120:7: note: defaulted \'operator<=>\' is implicitly deleted because implied comparison for member \'arr\' is ambiguous"}
}
},
},
["note_defaulted_comparison_calls_deleted"]={
["note_defaulted_comparison_calls_deleted"]={
[f]="defaulted A is implicitly deleted because it would invoke a deleted comparison function...",
[b]="defaulted A is implicitly deleted because it would invoke a deleted comparison function...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="defaulted %0 is implicitly deleted because it would invoke a deleted comparison function%select{| for member %2| for base class %2}1",
[h]="defaulted %0 is implicitly deleted because it would invoke a deleted comparison function%select{| for member %2| for base class %2}1",
[g]=b,
[j]=i,
[e]="defaulted (.*?) is implicitly deleted because it would invoke a deleted comparison function(?:| for member (.*?)| for base class (.*?))",
[k]="defaulted (.*?) is implicitly deleted because it would invoke a deleted comparison function(?:| for member (.*?)| for base class (.*?))",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={jb,1573070592,gb},
[m]={tb,1573070592,Bb},
[n]={{q,8217,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Deleted:\n      if (Diagnose == ExplainDeleted) {\n        if ((DCK == DefaultedComparisonKind::NotEqual || DCK == DefaultedComparisonKind::Relational) && !Best->RewriteKind) {\n        } else {\n          S.Diag(Subobj.Loc, diag::note_defaulted_comparison_calls_deleted) << FD << Subobj.Kind << Subobj.Decl;"}}
[n]={{r,8217,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Deleted:\n      if (Diagnose == ExplainDeleted) {\n        if ((DCK == DefaultedComparisonKind::NotEqual || DCK == DefaultedComparisonKind::Relational) && !Best->RewriteKind) {\n        } else {\n          S.Diag(Subobj.Loc, diag::note_defaulted_comparison_calls_deleted) << FD << Subobj.Kind << Subobj.Decl;"}},
[o]={
["clang/test/CXX/class/class.compare/class.rel/p2.cpp"]={"clang/test/CXX/class/class.compare/class.rel/p2.cpp:25:17: note: defaulted \'operator<\' is implicitly deleted because it would invoke a deleted comparison function","clang/test/CXX/class/class.compare/class.rel/p2.cpp:26:17: note: defaulted \'operator<=\' is implicitly deleted because it would invoke a deleted comparison function","clang/test/CXX/class/class.compare/class.rel/p2.cpp:27:17: note: defaulted \'operator>\' is implicitly deleted because it would invoke a deleted comparison function","clang/test/CXX/class/class.compare/class.rel/p2.cpp:28:17: note: defaulted \'operator>=\' is implicitly deleted because it would invoke a deleted comparison function","clang/test/CXX/class/class.compare/class.rel/p2.cpp:56:17: note: defaulted \'operator!=\' is implicitly deleted because it would invoke a deleted comparison function"}
}
},
},
["note_defaulted_comparison_cannot_deduce"]={
["note_defaulted_comparison_cannot_deduce"]={
[f]="return type of defaulted \'operator<=>\' cannot be deduced because return type A of three-way comparison for ... B is not a standard comparison category type",
[b]="return type of defaulted \'operator<=>\' cannot be deduced because return type A of three-way comparison for ... B is not a standard comparison category type",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="return type of defaulted \'operator<=>\' cannot be deduced because return type %2 of three-way comparison for %select{|member|base class}0 %1 is not a standard comparison category type",
[h]="return type of defaulted \'operator<=>\' cannot be deduced because return type %2 of three-way comparison for %select{|member|base class}0 %1 is not a standard comparison category type",
[g]=b,
[j]=i,
[e]="return type of defaulted \'operator\\<\\=\\>\' cannot be deduced because return type (.*?) of three\\-way comparison for (?:|member|base class) (.*?) is not a standard comparison category type",
[k]="return type of defaulted \'operator\\<\\=\\>\' cannot be deduced because return type (.*?) of three\\-way comparison for (?:|member|base class) (.*?) is not a standard comparison category type",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[n]={{q,8162,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      if (FunctionDecl *BestFD = Best->Function) {\n        if (NeedsDeducing) {\n          if (!Info) {\n            if (Diagnose == ExplainDeleted) {\n              S.Diag(Subobj.Loc, diag::note_defaulted_comparison_cannot_deduce) << Subobj.Kind << Subobj.Decl << BestFD->getCallResultType().withoutLocalFastQualifiers();"}}
[n]={{r,8162,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      if (FunctionDecl *BestFD = Best->Function) {\n        if (NeedsDeducing) {\n          if (!Info) {\n            if (Diagnose == ExplainDeleted) {\n              S.Diag(Subobj.Loc, diag::note_defaulted_comparison_cannot_deduce) << Subobj.Kind << Subobj.Decl << BestFD->getCallResultType().withoutLocalFastQualifiers();"}},
[o]={
["clang/test/CXX/class/class.compare/class.spaceship/p2.cpp"]={"clang/test/CXX/class/class.compare/class.spaceship/p2.cpp:44:7: note: return type of defaulted \'operator<=>\' cannot be deduced because return type \'A\' of three-way comparison for member \'a\' is not a standard comparison category type"}
}
},
},
["note_defaulted_comparison_cannot_deduce_callee"]={
["note_defaulted_comparison_cannot_deduce_callee"]={
[f]="selected \'operator<=>\' for ... A declared here",
[b]="selected \'operator<=>\' for ... A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="selected \'operator<=>\' for %select{|member|base class}0 %1 declared here",
[h]="selected \'operator<=>\' for %select{|member|base class}0 %1 declared here",
[g]=b,
[j]=i,
[e]="selected \'operator\\<\\=\\>\' for (?:|member|base class) (.*?) declared here",
[k]="selected \'operator\\<\\=\\>\' for (?:|member|base class) (.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[n]={{q,8153,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      if (FunctionDecl *BestFD = Best->Function) {\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            // 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(BestFD->getLocation(), diag::note_defaulted_comparison_cannot_deduce_callee) << Subobj.Kind << Subobj.Decl;"},{q,8166,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      if (FunctionDecl *BestFD = Best->Function) {\n        if (NeedsDeducing) {\n          if (!Info) {\n            if (Diagnose == ExplainDeleted) {\n              S.Diag(BestFD->getLocation(), diag::note_defaulted_comparison_cannot_deduce_callee) << Subobj.Kind << Subobj.Decl;"}}
[n]={{r,8153,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      if (FunctionDecl *BestFD = Best->Function) {\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            // 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(BestFD->getLocation(), diag::note_defaulted_comparison_cannot_deduce_callee) << Subobj.Kind << Subobj.Decl;"},{r,8166,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      if (FunctionDecl *BestFD = Best->Function) {\n        if (NeedsDeducing) {\n          if (!Info) {\n            if (Diagnose == ExplainDeleted) {\n              S.Diag(BestFD->getLocation(), diag::note_defaulted_comparison_cannot_deduce_callee) << Subobj.Kind << Subobj.Decl;"}},
[o]={
["clang/test/CXX/class/class.compare/class.spaceship/p2.cpp"]={"clang/test/CXX/class/class.compare/class.spaceship/p2.cpp:41:7: note: selected \'operator<=>\' for member \'a\' declared here","clang/test/CXX/class/class.compare/class.spaceship/p2.cpp:119:10: note: selected \'operator<=>\' for base class \'c\' declared here"}
}
},
},
["note_defaulted_comparison_cannot_deduce_undeduced_auto"]={
["note_defaulted_comparison_cannot_deduce_undeduced_auto"]={
[f]="... A declared here",
[b]="... A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{|member|base class}0 %1 declared here",
[h]="%select{|member|base class}0 %1 declared here",
[g]=b,
[j]=i,
[e]="(?:|member|base class) (.*?) declared here",
[k]="(?:|member|base class) (.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling"},
[m]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling"},
[n]={{q,8150,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      if (FunctionDecl *BestFD = Best->Function) {\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            // 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(Subobj.Loc, diag::note_defaulted_comparison_cannot_deduce_undeduced_auto) << Subobj.Kind << Subobj.Decl;"}}
[n]={{r,8150,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      if (FunctionDecl *BestFD = Best->Function) {\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            // 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(Subobj.Loc, diag::note_defaulted_comparison_cannot_deduce_undeduced_auto) << Subobj.Kind << Subobj.Decl;"}}
},
},
["note_defaulted_comparison_inaccessible"]={
["note_defaulted_comparison_inaccessible"]={
[f]="defaulted A is implicitly deleted because it would invoke a ... B...",
[b]="defaulted A is implicitly deleted because it would invoke a ... B...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="defaulted %0 is implicitly deleted because it would invoke a %select{private|protected}3 %4%select{ member of %6| member of %6 to compare member %2| to compare base class %2}1",
[h]="defaulted %0 is implicitly deleted because it would invoke a %select{private|protected}3 %4%select{ member of %6| member of %6 to compare member %2| to compare base class %2}1",
[g]=b,
[j]=i,
[e]="defaulted (.*?) is implicitly deleted because it would invoke a (?:private|protected) (.*?)(?: member of (.*?)| member of (.*?) to compare member (.*?)| to compare base class (.*?))",
[k]="defaulted (.*?) is implicitly deleted because it would invoke a (?:private|protected) (.*?)(?: member of (.*?)| member of (.*?) to compare member (.*?)| to compare base class (.*?))",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[n]={{q,8105,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      if (ArgClass && Best->FoundDecl.getDecl() && Best->FoundDecl.getDecl()->isCXXClassMember()) {\n        if (!S.isMemberAccessibleForDeletion(ArgClass, Best->FoundDecl, ObjectType, Subobj.Loc, Diagnose == ExplainDeleted ? S.PDiag(diag::note_defaulted_comparison_inaccessible) << FD << Subobj.Kind << Subobj.Decl : S.PDiag()))"}}
[n]={{r,8105,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      if (ArgClass && Best->FoundDecl.getDecl() && Best->FoundDecl.getDecl()->isCXXClassMember()) {\n        if (!S.isMemberAccessibleForDeletion(ArgClass, Best->FoundDecl, ObjectType, Subobj.Loc, Diagnose == ExplainDeleted ? S.PDiag(diag::note_defaulted_comparison_inaccessible) << FD << Subobj.Kind << Subobj.Decl : S.PDiag()))"}},
[o]={
["clang/test/CXX/class/class.compare/class.rel/p2.cpp"]={"clang/test/CXX/class/class.compare/class.rel/p2.cpp:81:17: note: defaulted \'operator<\' is implicitly deleted because it would invoke a private \'operator<=>\' member of \'Access::A\'"}
}
},
},
["note_defaulted_comparison_no_viable_function"]={
["note_defaulted_comparison_no_viable_function"]={
[f]="defaulted A is implicitly deleted because there is no viable ... for ...B",
[b]="defaulted A is implicitly deleted because there is no viable ... for ...B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="defaulted %0 is implicitly deleted because there is no viable %select{three-way comparison function|\'operator==\'}1 for %select{|member |base class }2%3",
[h]="defaulted %0 is implicitly deleted because there is no viable %select{three-way comparison function|\'operator==\'}1 for %select{|member |base class }2%3",
[g]=b,
[j]=i,
[e]="defaulted (.*?) is implicitly deleted because there is no viable (?:three\\-way comparison function|\'operator\\=\\=\') for (?:|member |base class )(.*?)",
[k]="defaulted (.*?) is implicitly deleted because there is no viable (?:three\\-way comparison function|\'operator\\=\\=\') for (?:|member |base class )(.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={jb,1573070592,gb},
[m]={tb,1573070592,Bb},
[n]={{q,8239,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_No_Viable_Function:\n      if (Diagnose == ExplainDeleted) {\n        S.Diag(Subobj.Loc, diag::note_defaulted_comparison_no_viable_function) << FD << (OO == OO_EqualEqual || OO == OO_ExclaimEqual) << Subobj.Kind << Subobj.Decl;"}}
[n]={{r,8239,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_No_Viable_Function:\n      if (Diagnose == ExplainDeleted) {\n        S.Diag(Subobj.Loc, diag::note_defaulted_comparison_no_viable_function) << FD << (OO == OO_EqualEqual || OO == OO_ExclaimEqual) << Subobj.Kind << Subobj.Decl;"}},
[o]={
["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:46:8: note: defaulted \'operator<\' is implicitly deleted because there is no viable three-way comparison function for \'A3\'"}
}
},
},
["note_defaulted_comparison_no_viable_function_synthesized"]={
["note_defaulted_comparison_no_viable_function_synthesized"]={
[f]="three-way comparison cannot be synthesized because there is no viable function for ... comparison",
[b]="three-way comparison cannot be synthesized because there is no viable function for ... comparison",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="three-way comparison cannot be synthesized because there is no viable function for %select{\'==\'|\'<\'}0 comparison",
[h]="three-way comparison cannot be synthesized because there is no viable function for %select{\'==\'|\'<\'}0 comparison",
[g]=b,
[j]=i,
[e]="three\\-way comparison cannot be synthesized because there is no viable function for (?:\'\\=\\=\'|\'\\<\') comparison",
[k]="three\\-way comparison cannot be synthesized because there is no viable function for (?:\'\\=\\=\'|\'\\<\') comparison",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={jb,1573070592,gb},
[m]={tb,1573070592,Bb},
[n]={{q,8251,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_No_Viable_Function:\n      if (Diagnose == ExplainDeleted) {\n        // For a three-way comparison, list both the candidates for the\n        // original operator and the candidates for the synthesized operator.\n        if (SpaceshipCandidates) {\n          S.Diag(Subobj.Loc, diag::note_defaulted_comparison_no_viable_function_synthesized) << (OO == OO_EqualEqual ? 0 : 1);"}}
[n]={{r,8251,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_No_Viable_Function:\n      if (Diagnose == ExplainDeleted) {\n        // For a three-way comparison, list both the candidates for the\n        // original operator and the candidates for the synthesized operator.\n        if (SpaceshipCandidates) {\n          S.Diag(Subobj.Loc, diag::note_defaulted_comparison_no_viable_function_synthesized) << (OO == OO_EqualEqual ? 0 : 1);"}},
[o]={
["clang/test/CXX/class/class.compare/class.spaceship/p1.cpp"]={"clang/test/CXX/class/class.compare/class.spaceship/p1.cpp:87:37: note: three-way comparison cannot be synthesized because there is no viable function for \'<\' comparison","clang/test/CXX/class/class.compare/class.spaceship/p1.cpp:87:37: note: three-way comparison cannot be synthesized because there is no viable function for \'==\' comparison","clang/test/CXX/class/class.compare/class.spaceship/p1.cpp:120:7: note: three-way comparison cannot be synthesized because there is no viable function for \'<\' comparison","clang/test/CXX/class/class.compare/class.spaceship/p1.cpp:120:7: note: three-way comparison cannot be synthesized because there is no viable function for \'==\' comparison"}
}
},
},
["note_defaulted_comparison_not_constexpr"]={
["note_defaulted_comparison_not_constexpr"]={
[f]="non-constexpr comparison function would be used to compare ...",
[b]="non-constexpr comparison function would be used to compare ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="non-constexpr comparison function would be used to compare %select{|member %1|base class %1}0",
[h]="non-constexpr comparison function would be used to compare %select{|member %1|base class %1}0",
[g]=b,
[j]=i,
[e]="non\\-constexpr comparison function would be used to compare (?:|member (.*?)|base class (.*?))",
[k]="non\\-constexpr comparison function would be used to compare (?:|member (.*?)|base class (.*?))",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={jb,1573070592,gb},
[m]={tb,1573070592,Bb},
[n]={{q,8123,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      if (FunctionDecl *BestFD = Best->Function) {\n        // If it\'s not constexpr, explain why not.\n        if (Diagnose == ExplainConstexpr && !BestFD->isConstexpr()) {\n          if (Subobj.Kind != Subobject::CompleteObject)\n            S.Diag(Subobj.Loc, diag::note_defaulted_comparison_not_constexpr) << Subobj.Kind << Subobj.Decl;"}}
[n]={{r,8123,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      if (FunctionDecl *BestFD = Best->Function) {\n        // If it\'s not constexpr, explain why not.\n        if (Diagnose == ExplainConstexpr && !BestFD->isConstexpr()) {\n          if (Subobj.Kind != Subobject::CompleteObject)\n            S.Diag(Subobj.Loc, diag::note_defaulted_comparison_not_constexpr) << Subobj.Kind << Subobj.Decl;"}},
[o]={
["clang/test/CXX/class/class.compare/class.compare.default/p4.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p4.cpp:86:5: note: non-constexpr comparison function would be used to compare member \'h\'","clang/test/CXX/class/class.compare/class.compare.default/p4.cpp:151:7: note: non-constexpr comparison function would be used to compare member \'value\'"}
}
},
},
["note_defaulted_comparison_not_constexpr_here"]={
["note_defaulted_comparison_not_constexpr_here"]={
[f]="non-constexpr comparison function declared here",
[b]="non-constexpr comparison function declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="non-constexpr comparison function declared here",
[h]="non-constexpr comparison function declared here",
[g]=b,
[j]=i,
[e]="non\\-constexpr comparison function declared here",
[k]="non\\-constexpr comparison function declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={jb,1573070592,gb},
[m]={tb,1573070592,Bb},
[n]={{q,8126,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      if (FunctionDecl *BestFD = Best->Function) {\n        // If it\'s not constexpr, explain why not.\n        if (Diagnose == ExplainConstexpr && !BestFD->isConstexpr()) {\n          S.Diag(BestFD->getLocation(), diag::note_defaulted_comparison_not_constexpr_here);"}}
[n]={{r,8126,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      if (FunctionDecl *BestFD = Best->Function) {\n        // If it\'s not constexpr, explain why not.\n        if (Diagnose == ExplainConstexpr && !BestFD->isConstexpr()) {\n          S.Diag(BestFD->getLocation(), diag::note_defaulted_comparison_not_constexpr_here);"}},
[o]={
["clang/test/CXX/class/class.compare/class.compare.default/p4.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p4.cpp:81:8: note: non-constexpr comparison function declared here","clang/test/CXX/class/class.compare/class.compare.default/p4.cpp:157:17: note: non-constexpr comparison function declared here"}
}
},
},
["note_defaulted_comparison_not_rewritten_callee"]={
["note_defaulted_comparison_not_rewritten_callee"]={
[f]="defaulted A is implicitly deleted because this non-rewritten comparison function would be the best match for the comparison",
[b]="defaulted A is implicitly deleted because this non-rewritten comparison function would be the best match for the comparison",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="defaulted %0 is implicitly deleted because this non-rewritten comparison function would be the best match for the comparison",
[h]="defaulted %0 is implicitly deleted because this non-rewritten comparison function would be the best match for the comparison",
[g]=b,
[j]=i,
[e]="defaulted (.*?) is implicitly deleted because this non\\-rewritten comparison function would be the best match for the comparison",
[k]="defaulted (.*?) is implicitly deleted because this non\\-rewritten comparison function would be the best match for the comparison",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={jb,1573070592,gb},
[m]={tb,1573070592,Bb},
[n]={{q,8072,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      // C++2a [class.compare.secondary]p2 [P2002R0]:\n      //  The operator function [...] is defined as deleted if [...] the\n      //  candidate selected by overload resolution is not a rewritten\n      //  candidate.\n      if ((DCK == DefaultedComparisonKind::NotEqual || DCK == DefaultedComparisonKind::Relational) && !Best->RewriteKind) {\n        if (Diagnose == ExplainDeleted) {\n          if (Best->Function) {\n            S.Diag(Best->Function->getLocation(), diag::note_defaulted_comparison_not_rewritten_callee) << FD;"},{q,8213,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Deleted:\n      if (Diagnose == ExplainDeleted) {\n        if ((DCK == DefaultedComparisonKind::NotEqual || DCK == DefaultedComparisonKind::Relational) && !Best->RewriteKind) {\n          S.Diag(Best->Function->getLocation(), diag::note_defaulted_comparison_not_rewritten_callee) << FD;"}}
[n]={{r,8072,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      // C++2a [class.compare.secondary]p2 [P2002R0]:\n      //  The operator function [...] is defined as deleted if [...] the\n      //  candidate selected by overload resolution is not a rewritten\n      //  candidate.\n      if ((DCK == DefaultedComparisonKind::NotEqual || DCK == DefaultedComparisonKind::Relational) && !Best->RewriteKind) {\n        if (Diagnose == ExplainDeleted) {\n          if (Best->Function) {\n            S.Diag(Best->Function->getLocation(), diag::note_defaulted_comparison_not_rewritten_callee) << FD;"},{r,8213,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Deleted:\n      if (Diagnose == ExplainDeleted) {\n        if ((DCK == DefaultedComparisonKind::NotEqual || DCK == DefaultedComparisonKind::Relational) && !Best->RewriteKind) {\n          S.Diag(Best->Function->getLocation(), diag::note_defaulted_comparison_not_rewritten_callee) << FD;"}},
[o]={
["clang/test/CXX/class/class.compare/class.rel/p2.cpp"]={"clang/test/CXX/class/class.compare/class.rel/p2.cpp:37:17: note: defaulted \'operator<\' is implicitly deleted because this non-rewritten comparison function would be the best match for the comparison","clang/test/CXX/class/class.compare/class.rel/p2.cpp:62:17: note: defaulted \'operator!=\' is implicitly deleted because this non-rewritten comparison function would be the best match for the comparison","clang/test/CXX/class/class.compare/class.rel/p2.cpp:72:10: note: defaulted \'operator!=\' is implicitly deleted because this non-rewritten comparison function would be the best match for the comparison","clang/test/CXX/class/class.compare/class.rel/p2.cpp:71:17: note: defaulted \'operator!=\' is implicitly deleted because this non-rewritten comparison function would be the best match for the comparison"}
}
},
},
["note_defaulted_comparison_not_rewritten_conversion"]={
["note_defaulted_comparison_not_rewritten_conversion"]={
[f]="defaulted A is implicitly deleted because a builtin comparison function using this conversion would be the best match for the comparison",
[b]="defaulted A is implicitly deleted because a builtin comparison function using this conversion would be the best match for the comparison",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="defaulted %0 is implicitly deleted because a builtin comparison function using this conversion would be the best match for the comparison",
[h]="defaulted %0 is implicitly deleted because a builtin comparison function using this conversion would be the best match for the comparison",
[g]=b,
[j]=i,
[e]="defaulted (.*?) is implicitly deleted because a builtin comparison function using this conversion would be the best match for the comparison",
[k]="defaulted (.*?) is implicitly deleted because a builtin comparison function using this conversion would be the best match for the comparison",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Pb,1615397021,Ob},
[m]={lc,1615397021,vc},
[n]={{q,8082,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      // C++2a [class.compare.secondary]p2 [P2002R0]:\n      //  The operator function [...] is defined as deleted if [...] the\n      //  candidate selected by overload resolution is not a rewritten\n      //  candidate.\n      if ((DCK == DefaultedComparisonKind::NotEqual || DCK == DefaultedComparisonKind::Relational) && !Best->RewriteKind) {\n        if (Diagnose == ExplainDeleted) {\n          if (Best->Function) {\n          } else {\n            S.Diag(Best->Conversions[0].UserDefined.FoundConversionFunction.getDecl()->getLocation(), diag::note_defaulted_comparison_not_rewritten_conversion) << FD;"}}
[n]={{r,8082,"/// 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  Result visitBinaryOperator(OverloadedOperatorKind OO, ArrayRef<Expr *> Args, Subobject Subobj, OverloadCandidateSet *SpaceshipCandidates = nullptr) {\n    case OR_Success: {\n      // C++2a [class.compare.secondary]p2 [P2002R0]:\n      //  The operator function [...] is defined as deleted if [...] the\n      //  candidate selected by overload resolution is not a rewritten\n      //  candidate.\n      if ((DCK == DefaultedComparisonKind::NotEqual || DCK == DefaultedComparisonKind::Relational) && !Best->RewriteKind) {\n        if (Diagnose == ExplainDeleted) {\n          if (Best->Function) {\n          } else {\n            S.Diag(Best->Conversions[0].UserDefined.FoundConversionFunction.getDecl()->getLocation(), diag::note_defaulted_comparison_not_rewritten_conversion) << FD;"}},
[o]={
["clang/test/CXX/class/class.compare/class.compare.secondary/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.secondary/p2.cpp:31:3: note: defaulted \'operator!=\' is implicitly deleted because a builtin comparison function using this conversion would be the best match for the comparison","clang/test/CXX/class/class.compare/class.compare.secondary/p2.cpp:53:3: note: defaulted \'operator<\' is implicitly deleted because a builtin comparison function using this conversion would be the best match for the comparison"}
}
},
},
["note_defaulted_comparison_reference_member"]={
["note_defaulted_comparison_reference_member"]={
[f]="defaulted A is implicitly deleted because class B has a reference member",
[b]="defaulted A is implicitly deleted because class B has a reference member",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="defaulted %0 is implicitly deleted because class %1 has a reference member",
[h]="defaulted %0 is implicitly deleted because class %1 has a reference member",
[g]=b,
[j]=i,
[e]="defaulted (.*?) is implicitly deleted because class (.*?) has a reference member",
[k]="defaulted (.*?) is implicitly deleted because class (.*?) has a reference member",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={jb,1573070592,gb},
[m]={tb,1573070592,Bb},
[n]={{q,8015,"/// 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  Result visitExpandedSubobject(QualType Type, Subobject Subobj) {\n    // C++2a [class.compare.default]p2 [P2002R0]:\n    //  A defaulted <=> or == operator function for class C is defined as\n    //  deleted if any non-static data member of C is of reference type\n    if (Type->isReferenceType()) {\n      if (Diagnose == ExplainDeleted) {\n        S.Diag(Subobj.Loc, diag::note_defaulted_comparison_reference_member) << FD << RD;"}}
[n]={{r,8015,"/// 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  Result visitExpandedSubobject(QualType Type, Subobject Subobj) {\n    // C++2a [class.compare.default]p2 [P2002R0]:\n    //  A defaulted <=> or == operator function for class C is defined as\n    //  deleted if any non-static data member of C is of reference type\n    if (Type->isReferenceType()) {\n      if (Diagnose == ExplainDeleted) {\n        S.Diag(Subobj.Loc, diag::note_defaulted_comparison_reference_member) << FD << RD;"}},
[o]={
["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:5:8: note: defaulted \'operator==\' is implicitly deleted because class \'A1\' has a reference member",Ac,"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:5:8: note: defaulted \'operator==\' is implicitly deleted because class \'A1\' has a reference member","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:5:8: note: defaulted \'operator==\' is implicitly deleted because class \'A1\' has a reference member",Ac,Ac,Ac,Ac,Ac,"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:43:8: note: defaulted \'operator==\' is implicitly deleted because class \'A3\' has a reference member","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:53:10: note: defaulted \'operator==\' is implicitly deleted because class \'B1\' has a reference member","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:53:10: note: defaulted \'operator<=>\' is implicitly deleted because class \'B1\' has a reference member"}
}
},
},
["note_defaulted_comparison_union"]={
["note_defaulted_comparison_union"]={
[f]="defaulted A is implicitly deleted because B is a ... with variant members",
[b]="defaulted A is implicitly deleted because B is a ... with variant members",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="defaulted %0 is implicitly deleted because %2 is a %select{union-like class|union}1 with variant members",
[h]="defaulted %0 is implicitly deleted because %2 is a %select{union-like class|union}1 with variant members",
[g]=b,
[j]=i,
[e]="defaulted (.*?) is implicitly deleted because (.*?) is a (?:union\\-like class|union) with variant members",
[k]="defaulted (.*?) is implicitly deleted because (.*?) is a (?:union\\-like class|union) with variant members",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={jb,1573070592,gb},
[m]={tb,1573070592,Bb},
[n]={{q,7986,"/// 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  Result visit() {\n    if ((DCK == DefaultedComparisonKind::Equal || DCK == DefaultedComparisonKind::ThreeWay) && RD->hasVariantMembers()) {\n      // C++2a [class.compare.default]p2 [P2002R0]:\n      //  A defaulted comparison operator function for class C is defined as\n      //  deleted if [...] C has variant members.\n      if (Diagnose == ExplainDeleted) {\n        S.Diag(FD->getLocation(), diag::note_defaulted_comparison_union) << FD << RD->isUnion() << RD;"}}
[n]={{r,7986,"/// 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  Result visit() {\n    if ((DCK == DefaultedComparisonKind::Equal || DCK == DefaultedComparisonKind::ThreeWay) && RD->hasVariantMembers()) {\n      // C++2a [class.compare.default]p2 [P2002R0]:\n      //  A defaulted comparison operator function for class C is defined as\n      //  deleted if [...] C has variant members.\n      if (Diagnose == ExplainDeleted) {\n        S.Diag(FD->getLocation(), diag::note_defaulted_comparison_union) << FD << RD->isUnion() << RD;"}},
[o]={
["clang/test/CXX/class/class.compare/class.compare.default/p2.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:79:8: note: defaulted \'operator==\' is implicitly deleted because \'C1\' is a union with variant members","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:80:8: note: defaulted \'operator<=>\' is implicitly deleted because \'C1\' is a union with variant members","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:101:8: note: defaulted \'operator==\' is implicitly deleted because \'D1\' is a union-like class with variant members","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:102:8: note: defaulted \'operator<=>\' is implicitly deleted because \'D1\' is a union-like class with variant members","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:147:15: note: defaulted \'operator==\' is implicitly deleted because \'F\' is a union-like class with variant members","clang/test/CXX/class/class.compare/class.compare.default/p2.cpp:149:15: note: defaulted \'operator<=>\' is implicitly deleted because \'F\' is a union-like class with variant members"}
}
},
},
["note_defined_here"]={
["note_defined_here"]={
[f]="A defined here",
[b]="A defined here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 defined here",
[h]="%0 defined here",
[g]=b,
[j]=i,
[e]="(.*?) defined here",
[k]="(.*?) defined here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"74f7d50f6a5b",1329334432,"When overload resolution picks an implicitly-deleted special member"},
[m]={"74f7d50f6a5b",1329334432,"When overload resolution picks an implicitly-deleted special member"},
[n]={{"clang/lib/Sema/Sema.cpp",2006,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckDeviceType = [&](QualType Ty) {\n    if ((Ty->isFloat16Type() && !Context.getTargetInfo().hasFloat16Type()) || (Ty->isFloat128Type() && !Context.getTargetInfo().hasFloat128Type()) || (Ty->isIbm128Type() && !Context.getTargetInfo().hasIbm128Type()) || (Ty->isIntegerType() && Context.getTypeSize(Ty) == 128 && !Context.getTargetInfo().hasInt128Type()) || (Ty->isBFloat16Type() && !Context.getTargetInfo().hasBFloat16Type() && !LangOpts.CUDAIsDevice) || LongDoubleMismatched) {\n      if (D)\n        targetDiag(D->getLocation(), diag::note_defined_here, FD) << D;"},{"clang/lib/Sema/Sema.cpp",2032,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    if (!TI.hasLongDoubleType() && UnqualTy == Context.LongDoubleTy) {\n      if (D)\n        targetDiag(D->getLocation(), diag::note_defined_here, FD) << D;"},{"clang/lib/Sema/Sema.cpp",2051,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    if (IsRetTy && !TI.hasFPReturn() && (IsDouble || IsFloat)) {\n      if (D)\n        targetDiag(D->getLocation(), diag::note_defined_here, FD) << D;"},{L,1700,"bool CoroutineStmtBuilder::makeOnException() {\n  if (!lookupMember(S, \"unhandled_exception\", PromiseRecordDecl, Loc)) {\n    S.Diag(PromiseRecordDecl->getLocation(), diag::note_defined_here) << PromiseRecordDecl;"},{t,4783,"void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {\n  auto noteFromModuleOrInclude = [&](Module *Mod, SourceLocation IncLoc) -> bool {\n    // Redefinition errors with modules are common with non modular mapped\n    // headers, example: a non-modular header H in module A that also gets\n    // included directly in a TU. Pointing twice to the same header/definition\n    // is confusing, try to get better diagnostics when modules is on.\n    if (IncLoc.isValid()) {\n      if (Mod) {\n        if (!Mod->DefinitionLoc.isInvalid())\n          Diag(Mod->DefinitionLoc, diag::note_defined_here) << Mod->getFullModuleName();"},{I,4645,"bool Sema::checkMSInheritanceAttrOnDefinition(CXXRecordDecl *RD, SourceRange Range, bool BestCase, MSInheritanceModel ExplicitModel) {\n  Diag(RD->getDefinition()->getLocation(), diag::note_defined_here) << RD;"},{q,2453,"bool Sema::CheckImmediateEscalatingFunctionDefinition(FunctionDecl *FD, const sema::FunctionScopeInfo *FSI) {\n  if (FSI->FoundImmediateEscalatingExpression) {\n    if (it != UndefinedButUsed.end()) {\n      Diag(FD->getLocation(), diag::note_defined_here) << FD;"},{E,3135,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  for (unsigned i = 0; i != NumElts; ++i) {\n    if (PrevIDecl && TypeParams) {\n      if (ObjCTypeParamList *PrevTypeParams = PrevIDecl->getTypeParamList()) {\n      } else if (ObjCInterfaceDecl *Def = PrevIDecl->getDefinition()) {\n        Diag(Def->getLocation(), diag::note_defined_here) << ClassName;"},{C,1720,"static bool rejectConstNotMutableType(Sema &SemaRef, const ValueDecl *D, QualType Type, OpenMPClauseKind CKind, SourceLocation ELoc, bool AcceptIfMutable = true, bool ListItemNotVar = false) {\n  if (isConstNotMutableType(SemaRef, Type, AcceptIfMutable, &IsClassType)) {\n    if (!ListItemNotVar && D) {\n      SemaRef.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{C,3073,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Syntax, C/C++]\n  //  Variables must be file-scope, namespace-scope, or static block-scope.\n  if (Kind == OMPD_threadprivate && !VD->hasGlobalStorage()) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{C,3090,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.2]\n  //  A threadprivate directive for file-scope variables must appear outside\n  //  any definition or declaration.\n  if (CanonicalVD->getDeclContext()->isTranslationUnit() && !getCurLexicalContext()->isTranslationUnit()) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{C,3105,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.3]\n  //  A threadprivate directive for static class member variables must appear\n  //  in the class definition, in the same scope in which the member\n  //  variables are declared.\n  if (CanonicalVD->isStaticDataMember() && !CanonicalVD->getDeclContext()->Equals(getCurLexicalContext())) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{C,3121,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.4]\n  //  A threadprivate directive for namespace-scope variables must appear\n  //  outside any definition or declaration other than the namespace\n  //  definition itself.\n  if (CanonicalVD->getDeclContext()->isNamespace() && (!getCurLexicalContext()->isFileContext() || !getCurLexicalContext()->Encloses(CanonicalVD->getDeclContext()))) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{C,3135,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.6]\n  //  A threadprivate directive for static block-scope variables must appear\n  //  in the scope of the variable and not in a nested scope.\n  if (CanonicalVD->isLocalVarDecl() && CurScope && !isDeclInScope(ND, getCurLexicalContext(), CurScope)) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{C,3179,"class LocalVarRefChecker final : public ConstStmtVisitor<LocalVarRefChecker, bool> {\n  bool VisitDeclRefExpr(const DeclRefExpr *E) {\n    if (const auto *VD = dyn_cast<VarDecl>(E->getDecl())) {\n      if (VD->hasLocalStorage()) {\n        SemaRef.Diag(VD->getLocation(), diag::note_defined_here) << VD << VD->getSourceRange();"},{C,3231,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.9.2, Restrictions, C/C++, p.10]\n    //  A threadprivate variable must not have a reference type.\n    if (VD->getType()->isReferenceType()) {\n      Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{C,3249,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n  for (Expr *RefExpr : VarList) {\n    // Check if this is a TLS variable. If TLS is not being supported, produce\n    // the corresponding diagnostic.\n    if ((VD->getTLSKind() != VarDecl::TLS_None && !(VD->hasAttr<OMPThreadPrivateDeclAttr>() && getLangOpts().OpenMPUseTLS && getASTContext().getTargetInfo().isTLSSupported())) || (VD->getStorageClass() == SC_Register && VD->hasAttr<AsmLabelAttr>() && !VD->isLocalVarDecl())) {\n      Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{C,3434,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPAllocateDirective(SourceLocation Loc, ArrayRef<Expr *> VarList, ArrayRef<OMPClause *> Clauses, DeclContext *Owner) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP, 2.11.3 allocate Directive, Restrictions, C / C++\n    // If a list item has a static storage type, the allocator expression in the\n    // allocator clause must be a constant expression that evaluates to one of\n    // the predefined memory allocator values.\n    if (Allocator && VD->hasGlobalStorage()) {\n      if (AllocatorKind == OMPAllocateDeclAttr::OMPUserDefinedMemAlloc) {\n        Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{C,18117,"OMPClause *Sema::ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // Variably modified types are not supported for tasks.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType() && isOpenMPTaskingDirective(CurrDir)) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{C,18390,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // Variably modified types are not supported for tasks.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType() && isOpenMPTaskingDirective(DSAStack->getCurrentDirective())) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{C,18547,"OMPClause *Sema::ActOnOpenMPLastprivateClause(ArrayRef<Expr *> VarList, OpenMPLastprivateModifier LPKind, SourceLocation LPKindLoc, SourceLocation ColonLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP 5.0 [2.19.4.5 lastprivate Clause, Restrictions]\n    // A list item that appears in a lastprivate clause with the conditional\n    // modifier must be a scalar variable.\n    if (LPKind == OMPC_LASTPRIVATE_conditional && !Type->isScalarType()) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{C,19346,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.9.3.6, Restrictions, C/C++, p.4]\n    //  If a list-item is a reference type then it must bind to the same object\n    //  for all threads of the team.\n    if (!ASE && !OASE) {\n      if (VD) {\n        if (VD->getType()->isReferenceType() && VDDef && VDDef->hasInit()) {\n          if (Check.Visit(VDDef->getInit())) {\n            S.Diag(VDDef->getLocation(), diag::note_defined_here) << VDDef;"},{C,19453,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.14.3.6, reduction clause, Restrictions]\n    // The type of a list item that appears in a reduction clause must be valid\n    // for the reduction-identifier. For a max or min reduction in C, the type\n    // of the list item must be an allowed arithmetic data type: char, int,\n    // float, double, or _Bool, possibly modified with long, short, signed, or\n    // unsigned. For a max or min reduction in C++, the type of the list item\n    // must be an allowed arithmetic data type: char, wchar_t, int, float,\n    // double, or bool, possibly modified with long, short, signed, or unsigned.\n    if (DeclareReductionRef.isUnset()) {\n      if ((BOK == BO_GT || BOK == BO_LT) && !(Type->isScalarType() || (S.getLangOpts().CPlusPlus && Type->isArithmeticType()))) {\n        if (!ASE && !OASE) {\n          S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{C,19466,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.14.3.6, reduction clause, Restrictions]\n    // The type of a list item that appears in a reduction clause must be valid\n    // for the reduction-identifier. For a max or min reduction in C, the type\n    // of the list item must be an allowed arithmetic data type: char, int,\n    // float, double, or _Bool, possibly modified with long, short, signed, or\n    // unsigned. For a max or min reduction in C++, the type of the list item\n    // must be an allowed arithmetic data type: char, wchar_t, int, float,\n    // double, or bool, possibly modified with long, short, signed, or unsigned.\n    if (DeclareReductionRef.isUnset()) {\n      if ((BOK == BO_OrAssign || BOK == BO_AndAssign || BOK == BO_XorAssign) && !S.getLangOpts().CPlusPlus && Type->isFloatingType()) {\n        if (!ASE && !OASE) {\n          S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{C,19664,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    if (!RHSVD->hasInit() && DeclareReductionRef.isUnset()) {\n      S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{C,20012,"bool Sema::CheckOpenMPLinearDecl(const ValueDecl *D, SourceLocation ELoc, OpenMPLinearClauseKind LinKind, QualType Type, bool IsDeclareSimd) {\n  if (!Ty || (LinKind != OMPC_LINEAR_ref && !Ty->isDependentType() && !Ty->isIntegralType(Context) && !Ty->isPointerType())) {\n    if (D) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{C,20289,"OMPClause *Sema::ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList, Expr *Alignment, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    if (!Ty || (!Ty->isArrayType() && !Ty->isPointerType())) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{C,20491,"OMPClause *Sema::ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // Variably modified types are not supported.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType()) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{C,23171,"void Sema::checkDeclIsAllowedInOpenMPTarget(Expr *E, Decl *D, SourceLocation IdLoc) {\n  if (auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (IdLoc.isValid() && Res && *Res == OMPDeclareTargetDeclAttr::MT_Link) {\n      Diag(FD->getLocation(), diag::note_defined_here) << FD;"}}
[n]={{"clang/lib/Sema/Sema.cpp",2006,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckDeviceType = [&](QualType Ty) {\n    if ((Ty->isFloat16Type() && !Context.getTargetInfo().hasFloat16Type()) || (Ty->isFloat128Type() && !Context.getTargetInfo().hasFloat128Type()) || (Ty->isIbm128Type() && !Context.getTargetInfo().hasIbm128Type()) || (Ty->isIntegerType() && Context.getTypeSize(Ty) == 128 && !Context.getTargetInfo().hasInt128Type()) || (Ty->isBFloat16Type() && !Context.getTargetInfo().hasBFloat16Type() && !LangOpts.CUDAIsDevice) || LongDoubleMismatched) {\n      if (D)\n        targetDiag(D->getLocation(), diag::note_defined_here, FD) << D;"},{"clang/lib/Sema/Sema.cpp",2032,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    if (!TI.hasLongDoubleType() && UnqualTy == Context.LongDoubleTy) {\n      if (D)\n        targetDiag(D->getLocation(), diag::note_defined_here, FD) << D;"},{"clang/lib/Sema/Sema.cpp",2051,"void Sema::checkTypeSupport(QualType Ty, SourceLocation Loc, ValueDecl *D) {\n  auto CheckType = [&](QualType Ty, bool IsRetTy = false) {\n    if (IsRetTy && !TI.hasFPReturn() && (IsDouble || IsFloat)) {\n      if (D)\n        targetDiag(D->getLocation(), diag::note_defined_here, FD) << D;"},{T,1700,"bool CoroutineStmtBuilder::makeOnException() {\n  if (!lookupMember(S, \"unhandled_exception\", PromiseRecordDecl, Loc)) {\n    S.Diag(PromiseRecordDecl->getLocation(), diag::note_defined_here) << PromiseRecordDecl;"},{u,4783,"void Sema::notePreviousDefinition(const NamedDecl *Old, SourceLocation New) {\n  auto noteFromModuleOrInclude = [&](Module *Mod, SourceLocation IncLoc) -> bool {\n    // Redefinition errors with modules are common with non modular mapped\n    // headers, example: a non-modular header H in module A that also gets\n    // included directly in a TU. Pointing twice to the same header/definition\n    // is confusing, try to get better diagnostics when modules is on.\n    if (IncLoc.isValid()) {\n      if (Mod) {\n        if (!Mod->DefinitionLoc.isInvalid())\n          Diag(Mod->DefinitionLoc, diag::note_defined_here) << Mod->getFullModuleName();"},{P,4645,"bool Sema::checkMSInheritanceAttrOnDefinition(CXXRecordDecl *RD, SourceRange Range, bool BestCase, MSInheritanceModel ExplicitModel) {\n  Diag(RD->getDefinition()->getLocation(), diag::note_defined_here) << RD;"},{r,2453,"bool Sema::CheckImmediateEscalatingFunctionDefinition(FunctionDecl *FD, const sema::FunctionScopeInfo *FSI) {\n  if (FSI->FoundImmediateEscalatingExpression) {\n    if (it != UndefinedButUsed.end()) {\n      Diag(FD->getLocation(), diag::note_defined_here) << FD;"},{M,3135,"Sema::DeclGroupPtrTy Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc, IdentifierInfo **IdentList, SourceLocation *IdentLocs, ArrayRef<ObjCTypeParamList *> TypeParamLists, unsigned NumElts) {\n  for (unsigned i = 0; i != NumElts; ++i) {\n    if (PrevIDecl && TypeParams) {\n      if (ObjCTypeParamList *PrevTypeParams = PrevIDecl->getTypeParamList()) {\n      } else if (ObjCInterfaceDecl *Def = PrevIDecl->getDefinition()) {\n        Diag(Def->getLocation(), diag::note_defined_here) << ClassName;"},{J,1720,"static bool rejectConstNotMutableType(Sema &SemaRef, const ValueDecl *D, QualType Type, OpenMPClauseKind CKind, SourceLocation ELoc, bool AcceptIfMutable = true, bool ListItemNotVar = false) {\n  if (isConstNotMutableType(SemaRef, Type, AcceptIfMutable, &IsClassType)) {\n    if (!ListItemNotVar && D) {\n      SemaRef.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{J,3073,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Syntax, C/C++]\n  //  Variables must be file-scope, namespace-scope, or static block-scope.\n  if (Kind == OMPD_threadprivate && !VD->hasGlobalStorage()) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{J,3090,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.2]\n  //  A threadprivate directive for file-scope variables must appear outside\n  //  any definition or declaration.\n  if (CanonicalVD->getDeclContext()->isTranslationUnit() && !getCurLexicalContext()->isTranslationUnit()) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{J,3105,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.3]\n  //  A threadprivate directive for static class member variables must appear\n  //  in the class definition, in the same scope in which the member\n  //  variables are declared.\n  if (CanonicalVD->isStaticDataMember() && !CanonicalVD->getDeclContext()->Equals(getCurLexicalContext())) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{J,3121,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.4]\n  //  A threadprivate directive for namespace-scope variables must appear\n  //  outside any definition or declaration other than the namespace\n  //  definition itself.\n  if (CanonicalVD->getDeclContext()->isNamespace() && (!getCurLexicalContext()->isFileContext() || !getCurLexicalContext()->Encloses(CanonicalVD->getDeclContext()))) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{J,3135,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  // OpenMP [2.9.2, Restrictions, C/C++, p.6]\n  //  A threadprivate directive for static block-scope variables must appear\n  //  in the scope of the variable and not in a nested scope.\n  if (CanonicalVD->isLocalVarDecl() && CurScope && !isDeclInScope(ND, getCurLexicalContext(), CurScope)) {\n    Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{J,3179,"class LocalVarRefChecker final : public ConstStmtVisitor<LocalVarRefChecker, bool> {\n  bool VisitDeclRefExpr(const DeclRefExpr *E) {\n    if (const auto *VD = dyn_cast<VarDecl>(E->getDecl())) {\n      if (VD->hasLocalStorage()) {\n        SemaRef.Diag(VD->getLocation(), diag::note_defined_here) << VD << VD->getSourceRange();"},{J,3231,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.9.2, Restrictions, C/C++, p.10]\n    //  A threadprivate variable must not have a reference type.\n    if (VD->getType()->isReferenceType()) {\n      Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{J,3249,"OMPThreadPrivateDecl *Sema::CheckOMPThreadPrivateDecl(SourceLocation Loc, ArrayRef<Expr *> VarList) {\n  for (Expr *RefExpr : VarList) {\n    // Check if this is a TLS variable. If TLS is not being supported, produce\n    // the corresponding diagnostic.\n    if ((VD->getTLSKind() != VarDecl::TLS_None && !(VD->hasAttr<OMPThreadPrivateDeclAttr>() && getLangOpts().OpenMPUseTLS && getASTContext().getTargetInfo().isTLSSupported())) || (VD->getStorageClass() == SC_Register && VD->hasAttr<AsmLabelAttr>() && !VD->isLocalVarDecl())) {\n      Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{J,3434,"Sema::DeclGroupPtrTy Sema::ActOnOpenMPAllocateDirective(SourceLocation Loc, ArrayRef<Expr *> VarList, ArrayRef<OMPClause *> Clauses, DeclContext *Owner) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP, 2.11.3 allocate Directive, Restrictions, C / C++\n    // If a list item has a static storage type, the allocator expression in the\n    // allocator clause must be a constant expression that evaluates to one of\n    // the predefined memory allocator values.\n    if (Allocator && VD->hasGlobalStorage()) {\n      if (AllocatorKind == OMPAllocateDeclAttr::OMPUserDefinedMemAlloc) {\n        Diag(VD->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << VD;"},{J,18117,"OMPClause *Sema::ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // Variably modified types are not supported for tasks.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType() && isOpenMPTaskingDirective(CurrDir)) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{J,18390,"OMPClause *Sema::ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // Variably modified types are not supported for tasks.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType() && isOpenMPTaskingDirective(DSAStack->getCurrentDirective())) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{J,18547,"OMPClause *Sema::ActOnOpenMPLastprivateClause(ArrayRef<Expr *> VarList, OpenMPLastprivateModifier LPKind, SourceLocation LPKindLoc, SourceLocation ColonLoc, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP 5.0 [2.19.4.5 lastprivate Clause, Restrictions]\n    // A list item that appears in a lastprivate clause with the conditional\n    // modifier must be a scalar variable.\n    if (LPKind == OMPC_LASTPRIVATE_conditional && !Type->isScalarType()) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{J,19346,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.9.3.6, Restrictions, C/C++, p.4]\n    //  If a list-item is a reference type then it must bind to the same object\n    //  for all threads of the team.\n    if (!ASE && !OASE) {\n      if (VD) {\n        if (VD->getType()->isReferenceType() && VDDef && VDDef->hasInit()) {\n          if (Check.Visit(VDDef->getInit())) {\n            S.Diag(VDDef->getLocation(), diag::note_defined_here) << VDDef;"},{J,19453,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.14.3.6, reduction clause, Restrictions]\n    // The type of a list item that appears in a reduction clause must be valid\n    // for the reduction-identifier. For a max or min reduction in C, the type\n    // of the list item must be an allowed arithmetic data type: char, int,\n    // float, double, or _Bool, possibly modified with long, short, signed, or\n    // unsigned. For a max or min reduction in C++, the type of the list item\n    // must be an allowed arithmetic data type: char, wchar_t, int, float,\n    // double, or bool, possibly modified with long, short, signed, or unsigned.\n    if (DeclareReductionRef.isUnset()) {\n      if ((BOK == BO_GT || BOK == BO_LT) && !(Type->isScalarType() || (S.getLangOpts().CPlusPlus && Type->isArithmeticType()))) {\n        if (!ASE && !OASE) {\n          S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{J,19466,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    // OpenMP [2.14.3.6, reduction clause, Restrictions]\n    // The type of a list item that appears in a reduction clause must be valid\n    // for the reduction-identifier. For a max or min reduction in C, the type\n    // of the list item must be an allowed arithmetic data type: char, int,\n    // float, double, or _Bool, possibly modified with long, short, signed, or\n    // unsigned. For a max or min reduction in C++, the type of the list item\n    // must be an allowed arithmetic data type: char, wchar_t, int, float,\n    // double, or bool, possibly modified with long, short, signed, or unsigned.\n    if (DeclareReductionRef.isUnset()) {\n      if ((BOK == BO_OrAssign || BOK == BO_AndAssign || BOK == BO_XorAssign) && !S.getLangOpts().CPlusPlus && Type->isFloatingType()) {\n        if (!ASE && !OASE) {\n          S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{J,19664,"static bool actOnOMPReductionKindClause(Sema &S, DSAStackTy *Stack, OpenMPClauseKind ClauseKind, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc, CXXScopeSpec &ReductionIdScopeSpec, const DeclarationNameInfo &ReductionId, ArrayRef<Expr *> UnresolvedReductions, ReductionData &RD) {\n  for (Expr *RefExpr : VarList) {\n    if (!RHSVD->hasInit() && DeclareReductionRef.isUnset()) {\n      S.Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{J,20012,"bool Sema::CheckOpenMPLinearDecl(const ValueDecl *D, SourceLocation ELoc, OpenMPLinearClauseKind LinKind, QualType Type, bool IsDeclareSimd) {\n  if (!Ty || (LinKind != OMPC_LINEAR_ref && !Ty->isDependentType() && !Ty->isIntegralType(Context) && !Ty->isPointerType())) {\n    if (D) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{J,20289,"OMPClause *Sema::ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList, Expr *Alignment, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    if (!Ty || (!Ty->isArrayType() && !Ty->isPointerType())) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{J,20491,"OMPClause *Sema::ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) {\n  for (Expr *RefExpr : VarList) {\n    // Variably modified types are not supported.\n    if (!Type->isAnyPointerType() && Type->isVariablyModifiedType()) {\n      Diag(D->getLocation(), IsDecl ? diag::note_previous_decl : diag::note_defined_here) << D;"},{J,23171,"void Sema::checkDeclIsAllowedInOpenMPTarget(Expr *E, Decl *D, SourceLocation IdLoc) {\n  if (auto *FD = dyn_cast<FunctionDecl>(D)) {\n    if (IdLoc.isValid() && Res && *Res == OMPDeclareTargetDeclAttr::MT_Link) {\n      Diag(FD->getLocation(), diag::note_defined_here) << FD;"}},
[o]={
["clang/test/SemaObjC/parameterized_classes.m"]={"clang/test/SemaObjC/parameterized_classes.m:18:12: note: \'NSObject\' defined here"}
}
},
},
["note_delete_conversion"]={
["note_delete_conversion"]={
[f]="conversion to pointer type A",
[b]="conversion to pointer type A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="conversion to pointer type %0",
[h]="conversion to pointer type %0",
[g]=b,
[j]=i,
[e]="conversion to pointer type (.*?)",
[k]="conversion to pointer type (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"ccc11811052d",1369163148,"Refactor places which perform contextual implicit conversions to go through a"},
[m]={"ccc11811052d",1369163148,"Refactor places which perform contextual implicit conversions to go through a"},
[n]={{K,3640,"/// 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  if (!Ex.get()->isTypeDependent()) {\n    class DeleteConverter : public ContextualImplicitConverter {\n      SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_delete_conversion) << ConvTy; }"},{K,3651,"/// 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  if (!Ex.get()->isTypeDependent()) {\n    class DeleteConverter : public ContextualImplicitConverter {\n      SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_delete_conversion) << ConvTy; }"}}
[n]={{S,3640,"/// 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  if (!Ex.get()->isTypeDependent()) {\n    class DeleteConverter : public ContextualImplicitConverter {\n      SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_delete_conversion) << ConvTy; }"},{S,3651,"/// 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  if (!Ex.get()->isTypeDependent()) {\n    class DeleteConverter : public ContextualImplicitConverter {\n      SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_delete_conversion) << ConvTy; }"}},
[o]={
["clang/test/SemaCXX/conversion-delete-expr.cpp"]={"clang/test/SemaCXX/conversion-delete-expr.cpp:9:3: note: conversion to pointer type \'int *\'","clang/test/SemaCXX/conversion-delete-expr.cpp:5:3: note: conversion to pointer type \'char *\'","clang/test/SemaCXX/conversion-delete-expr.cpp:37:3: note: conversion to pointer type \'int *\'","clang/test/SemaCXX/conversion-delete-expr.cpp:33:3: note: conversion to pointer type \'const int *\'","clang/test/SemaCXX/conversion-delete-expr.cpp:51:3: note: conversion to pointer type \'const int *\'","clang/test/SemaCXX/conversion-delete-expr.cpp:47:3: note: conversion to pointer type \'const int *\'"}
}
},
},
["note_delete_non_virtual"]={
["note_delete_non_virtual"]={
[f]="qualify call to silence this warning",
[b]="qualify call to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="qualify call to silence this warning",
[h]="qualify call to silence this warning",
[g]=b,
[j]=i,
[e]="qualify call to silence this warning",
[k]="qualify call to silence this warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5a9259caa9b7",1452894331,"Make -Wdelete-non-virtual-dtor warn on explicit `a->~A()` dtor calls too."},
[m]={"5a9259caa9b7",1452894331,"Make -Wdelete-non-virtual-dtor warn on explicit `a->~A()` dtor calls too."},
[n]={{K,3979,"void Sema::CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc, bool IsDelete, bool CallCanBeVirtual, bool WarnOnNonAbstractTypes, SourceLocation DtorLoc) {\n  if (!IsDelete) {\n    Diag(DtorLoc, diag::note_delete_non_virtual) << FixItHint::CreateInsertion(DtorLoc, TypeStr + \"::\");"}}
[n]={{S,3979,"void Sema::CheckVirtualDtorCall(CXXDestructorDecl *dtor, SourceLocation Loc, bool IsDelete, bool CallCanBeVirtual, bool WarnOnNonAbstractTypes, SourceLocation DtorLoc) {\n  if (!IsDelete) {\n    Diag(DtorLoc, diag::note_delete_non_virtual) << FixItHint::CreateInsertion(DtorLoc, TypeStr + \"::\");"}}
},
},
["note_deleted_assign_field"]={
["note_deleted_assign_field"]={
[f]="... assignment operator of A is implicitly deleted because field B is of ... type C",
[b]="... assignment operator of A is implicitly deleted because field B is of ... type C",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{copy|move}0 assignment operator of %1 is implicitly deleted because field %2 is of %select{reference|const-qualified}4 type %3",
[h]="%select{copy|move}0 assignment operator of %1 is implicitly deleted because field %2 is of %select{reference|const-qualified}4 type %3",
[g]=b,
[j]=i,
[e]="(?:copy|move) assignment operator of (.*?) is implicitly deleted because field (.*?) is of (?:reference|const\\-qualified) type (.*?)",
[k]="(?:copy|move) assignment operator of (.*?) is implicitly deleted because field (.*?) is of (?:reference|const\\-qualified) type (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Mb,1333140808,Jb},
[m]={Ub,1333140808,Vb},
[n]={{q,9495,"/// Check whether we should delete a special member function due to the class\n/// having a particular non-static data member.\nbool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {\n  if (CSM == Sema::CXXDefaultConstructor) {\n  } else if (CSM == Sema::CXXCopyConstructor) {\n  } else if (IsAssignment) {\n    // For an assignment operator, data members must not be of reference type.\n    if (FieldType->isReferenceType()) {\n      if (Diagnose)\n        S.Diag(FD->getLocation(), diag::note_deleted_assign_field) << isMove() << MD->getParent() << FD << FieldType << /*Reference*/ 0;"},{q,9503,"/// Check whether we should delete a special member function due to the class\n/// having a particular non-static data member.\nbool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {\n  if (CSM == Sema::CXXDefaultConstructor) {\n  } else if (CSM == Sema::CXXCopyConstructor) {\n  } else if (IsAssignment) {\n    if (!FieldRecord && FieldType.isConstQualified()) {\n      // C++11 [class.copy]p23:\n      // -- a non-static data member of const non-class type (or array thereof)\n      if (Diagnose)\n        S.Diag(FD->getLocation(), diag::note_deleted_assign_field) << isMove() << MD->getParent() << FD << FD->getType() << /*Const*/ 1;"}}
[n]={{r,9495,"/// Check whether we should delete a special member function due to the class\n/// having a particular non-static data member.\nbool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {\n  if (CSM == Sema::CXXDefaultConstructor) {\n  } else if (CSM == Sema::CXXCopyConstructor) {\n  } else if (IsAssignment) {\n    // For an assignment operator, data members must not be of reference type.\n    if (FieldType->isReferenceType()) {\n      if (Diagnose)\n        S.Diag(FD->getLocation(), diag::note_deleted_assign_field) << isMove() << MD->getParent() << FD << FieldType << /*Reference*/ 0;"},{r,9503,"/// Check whether we should delete a special member function due to the class\n/// having a particular non-static data member.\nbool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {\n  if (CSM == Sema::CXXDefaultConstructor) {\n  } else if (CSM == Sema::CXXCopyConstructor) {\n  } else if (IsAssignment) {\n    if (!FieldRecord && FieldType.isConstQualified()) {\n      // C++11 [class.copy]p23:\n      // -- a non-static data member of const non-class type (or array thereof)\n      if (Diagnose)\n        S.Diag(FD->getLocation(), diag::note_deleted_assign_field) << isMove() << MD->getParent() << FD << FD->getType() << /*Const*/ 1;"}},
[o]={
["clang/test/CXX/special/class.copy/p23-cxx11.cpp"]={"clang/test/CXX/special/class.copy/p23-cxx11.cpp:78:13: note: copy assignment operator of \'B1\' is implicitly deleted because field \'a\' is of const-qualified type \'const int\'","clang/test/CXX/special/class.copy/p23-cxx11.cpp:78:13: note: move assignment operator of \'B1\' is implicitly deleted because field \'a\' is of const-qualified type \'const int\'","clang/test/CXX/special/class.copy/p23-cxx11.cpp:81:21: note: copy assignment operator of \'B2\' is implicitly deleted because field \'a\' is of const-qualified type \'const void *const[3][9][2]\'","clang/test/CXX/special/class.copy/p23-cxx11.cpp:81:21: note: move assignment operator of \'B2\' is implicitly deleted because field \'a\' is of const-qualified type \'const void *const[3][9][2]\'","clang/test/CXX/special/class.copy/p23-cxx11.cpp:95:8: note: copy assignment operator of \'C1\' is implicitly deleted because field \'a\' is of reference type \'int &\'","clang/test/CXX/special/class.copy/p23-cxx11.cpp:95:8: note: move assignment operator of \'C1\' is implicitly deleted because field \'a\' is of reference type \'int &\'"}
}
},
},
["note_deleted_copy_ctor_rvalue_reference"]={
["note_deleted_copy_ctor_rvalue_reference"]={
[f]="copy constructor of A is implicitly deleted because field B is of rvalue reference type C",
[b]="copy constructor of A is implicitly deleted because field B is of rvalue reference type C",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="copy constructor of %0 is implicitly deleted because field %1 is of rvalue reference type %2",
[h]="copy constructor of %0 is implicitly deleted because field %1 is of rvalue reference type %2",
[g]=b,
[j]=i,
[e]="copy constructor of (.*?) is implicitly deleted because field (.*?) is of rvalue reference type (.*?)",
[k]="copy constructor of (.*?) is implicitly deleted because field (.*?) is of rvalue reference type (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Mb,1333140808,Jb},
[m]={Ub,1333140808,Vb},
[n]={{q,9487,"/// Check whether we should delete a special member function due to the class\n/// having a particular non-static data member.\nbool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {\n  if (CSM == Sema::CXXDefaultConstructor) {\n  } else if (CSM == Sema::CXXCopyConstructor) {\n    // For a copy constructor, data members must not be of rvalue reference\n    // type.\n    if (FieldType->isRValueReferenceType()) {\n      if (Diagnose)\n        S.Diag(FD->getLocation(), diag::note_deleted_copy_ctor_rvalue_reference) << MD->getParent() << FD << FieldType;"}}
[n]={{r,9487,"/// Check whether we should delete a special member function due to the class\n/// having a particular non-static data member.\nbool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {\n  if (CSM == Sema::CXXDefaultConstructor) {\n  } else if (CSM == Sema::CXXCopyConstructor) {\n    // For a copy constructor, data members must not be of rvalue reference\n    // type.\n    if (FieldType->isRValueReferenceType()) {\n      if (Diagnose)\n        S.Diag(FD->getLocation(), diag::note_deleted_copy_ctor_rvalue_reference) << MD->getParent() << FD << FieldType;"}},
[o]={
["clang/test/CXX/special/class.copy/p11.0x.copy.cpp"]={"clang/test/CXX/special/class.copy/p11.0x.copy.cpp:126:10: note: copy constructor of \'RValue\' is implicitly deleted because field \'ri\' is of rvalue reference type \'int &&\'","clang/test/CXX/special/class.copy/p11.0x.copy.cpp:134:10: note: copy constructor of \'RValueTmp\' is implicitly deleted because field \'ri\' is of rvalue reference type \'int &&\'"}
}
},
},
["note_deleted_copy_user_declared_move"]={
["note_deleted_copy_user_declared_move"]={
[f]="copy ... is implicitly deleted because A has a user-declared move ...",
[b]="copy ... is implicitly deleted because A has a user-declared move ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="copy %select{constructor|assignment operator}0 is implicitly deleted because %1 has a user-declared move %select{constructor|assignment operator}2",
[h]="copy %select{constructor|assignment operator}0 is implicitly deleted because %1 has a user-declared move %select{constructor|assignment operator}2",
[g]=b,
[j]=i,
[e]="copy (?:constructor|assignment operator) is implicitly deleted because (.*?) has a user\\-declared move (?:constructor|assignment operator)",
[k]="copy (?:constructor|assignment operator) is implicitly deleted because (.*?) has a user\\-declared move (?:constructor|assignment operator)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Mb,1333140808,Jb},
[m]={Ub,1333140808,Vb},
[n]={{q,9653,"/// Determine whether a defaulted special member function should be defined as\n/// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11,\n/// C++11 [class.copy]p23, and C++11 [class.dtor]p5.\nbool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, InheritedConstructorInfo *ICI, bool Diagnose) {\n  // C++11 [class.copy]p7, p18:\n  //  If the class definition declares a move constructor or move assignment\n  //  operator, an implicitly declared copy constructor or copy assignment\n  //  operator is defined as deleted.\n  if (MD->isImplicit() && (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)) {\n    if (UserDeclaredMove) {\n      Diag(UserDeclaredMove->getLocation(), diag::note_deleted_copy_user_declared_move) << (CSM == CXXCopyAssignment) << RD << UserDeclaredMove->isMoveAssignmentOperator();"}}
[n]={{r,9653,"/// Determine whether a defaulted special member function should be defined as\n/// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11,\n/// C++11 [class.copy]p23, and C++11 [class.dtor]p5.\nbool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, InheritedConstructorInfo *ICI, bool Diagnose) {\n  // C++11 [class.copy]p7, p18:\n  //  If the class definition declares a move constructor or move assignment\n  //  operator, an implicitly declared copy constructor or copy assignment\n  //  operator is defined as deleted.\n  if (MD->isImplicit() && (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)) {\n    if (UserDeclaredMove) {\n      Diag(UserDeclaredMove->getLocation(), diag::note_deleted_copy_user_declared_move) << (CSM == CXXCopyAssignment) << RD << UserDeclaredMove->isMoveAssignmentOperator();"}},
[o]={
["clang/test/SemaObjCXX/block-variable-move.mm"]={"clang/test/SemaObjCXX/block-variable-move.mm:17:3: note: copy constructor is implicitly deleted because \'MoveOnly\' has a user-declared move constructor","clang/test/SemaObjCXX/block-variable-move.mm:17:3: note: copy constructor is implicitly deleted because \'MoveOnly\' has a user-declared move constructor"}
}
},
},
["note_deleted_default_ctor_all_const"]={
["note_deleted_default_ctor_all_const"]={
[f]="... A is implicitly deleted because all ... are const-qualified",
[b]="... A is implicitly deleted because all ... are const-qualified",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{default constructor of|constructor inherited by}0 %1 is implicitly deleted because all %select{data members|data members of an anonymous union member}2 are const-qualified",
[h]="%select{default constructor of|constructor inherited by}0 %1 is implicitly deleted because all %select{data members|data members of an anonymous union member}2 are const-qualified",
[g]=b,
[j]=i,
[e]="(?:default constructor of|constructor inherited by) (.*?) is implicitly deleted because all (?:data members|data members of an anonymous union member) are const\\-qualified",
[k]="(?:default constructor of|constructor inherited by) (.*?) is implicitly deleted because all (?:data members|data members of an anonymous union member) are const\\-qualified",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Mb,1333140808,Jb},
[m]={Ub,1333140808,Vb},
[n]={{q,9537,"/// Check whether we should delete a special member function due to the class\n/// having a particular non-static data member.\nbool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {\n  if (FieldRecord) {\n    // Some additional restrictions exist on the variant members.\n    if (!inUnion() && FieldRecord->isUnion() && FieldRecord->isAnonymousStructOrUnion()) {\n      // At least one member in each anonymous union must be non-const\n      if (CSM == Sema::CXXDefaultConstructor && AllVariantFieldsAreConst && !FieldRecord->field_empty()) {\n        if (Diagnose)\n          S.Diag(FieldRecord->getLocation(), diag::note_deleted_default_ctor_all_const) << !!ICI << MD->getParent() << /*anonymous union*/ 1;"},{q,9571,"/// C++11 [class.ctor] p5:\n///  A defaulted default constructor for a class X is defined as deleted if\n/// X is a union and all of its variant members are of const-qualified type.\nbool SpecialMemberDeletionInfo::shouldDeleteForAllConstMembers() {\n  // This is a silly definition, because it gives an empty union a deleted\n  // default constructor. Don\'t do that.\n  if (CSM == Sema::CXXDefaultConstructor && inUnion() && AllFieldsAreConst) {\n    if (Diagnose)\n      S.Diag(MD->getParent()->getLocation(), diag::note_deleted_default_ctor_all_const) << !!ICI << MD->getParent() << /*not anonymous union*/ 0;"}}
[n]={{r,9537,"/// Check whether we should delete a special member function due to the class\n/// having a particular non-static data member.\nbool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {\n  if (FieldRecord) {\n    // Some additional restrictions exist on the variant members.\n    if (!inUnion() && FieldRecord->isUnion() && FieldRecord->isAnonymousStructOrUnion()) {\n      // At least one member in each anonymous union must be non-const\n      if (CSM == Sema::CXXDefaultConstructor && AllVariantFieldsAreConst && !FieldRecord->field_empty()) {\n        if (Diagnose)\n          S.Diag(FieldRecord->getLocation(), diag::note_deleted_default_ctor_all_const) << !!ICI << MD->getParent() << /*anonymous union*/ 1;"},{r,9571,"/// C++11 [class.ctor] p5:\n///  A defaulted default constructor for a class X is defined as deleted if\n/// X is a union and all of its variant members are of const-qualified type.\nbool SpecialMemberDeletionInfo::shouldDeleteForAllConstMembers() {\n  // This is a silly definition, because it gives an empty union a deleted\n  // default constructor. Don\'t do that.\n  if (CSM == Sema::CXXDefaultConstructor && inUnion() && AllFieldsAreConst) {\n    if (Diagnose)\n      S.Diag(MD->getParent()->getLocation(), diag::note_deleted_default_ctor_all_const) << !!ICI << MD->getParent() << /*not anonymous union*/ 0;"}},
[o]={
["clang/test/SemaCXX/cxx0x-deleted-default-ctor.cpp"]={"clang/test/SemaCXX/cxx0x-deleted-default-ctor.cpp:14:7: note: default constructor of \'bad_union2\' is implicitly deleted because all data members are const-qualified","clang/test/SemaCXX/cxx0x-deleted-default-ctor.cpp:26:3: note: default constructor of \'bad_anon2\' is implicitly deleted because all data members of an anonymous union member are const-qualified"}
}
},
},
["note_deleted_default_ctor_uninit_field"]={
["note_deleted_default_ctor_uninit_field"]={
[f]="... A is implicitly deleted because field B of ... type C would not be initialized",
[b]="... A is implicitly deleted because field B of ... type C would not be initialized",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{default constructor of|constructor inherited by}0 %1 is implicitly deleted because field %2 of %select{reference|const-qualified}4 type %3 would not be initialized",
[h]="%select{default constructor of|constructor inherited by}0 %1 is implicitly deleted because field %2 of %select{reference|const-qualified}4 type %3 would not be initialized",
[g]=b,
[j]=i,
[e]="(?:default constructor of|constructor inherited by) (.*?) is implicitly deleted because field (.*?) of (?:reference|const\\-qualified) type (.*?) would not be initialized",
[k]="(?:default constructor of|constructor inherited by) (.*?) is implicitly deleted because field (.*?) of (?:reference|const\\-qualified) type (.*?) would not be initialized",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Mb,1333140808,Jb},
[m]={Ub,1333140808,Vb},
[n]={{q,9464,"/// Check whether we should delete a special member function due to the class\n/// having a particular non-static data member.\nbool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {\n  if (CSM == Sema::CXXDefaultConstructor) {\n    // For a default constructor, all references must be initialized in-class\n    // and, if a union, it must have a non-const member.\n    if (FieldType->isReferenceType() && !FD->hasInClassInitializer()) {\n      if (Diagnose)\n        S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field) << !!ICI << MD->getParent() << FD << FieldType << /*Reference*/ 0;"},{q,9475,"/// Check whether we should delete a special member function due to the class\n/// having a particular non-static data member.\nbool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {\n  if (CSM == Sema::CXXDefaultConstructor) {\n    // C++11 [class.ctor]p5 (modified by DR2394): any non-variant non-static\n    // data member of const-qualified type (or array thereof) with no\n    // brace-or-equal-initializer is not const-default-constructible.\n    if (!inUnion() && FieldType.isConstQualified() && !FD->hasInClassInitializer() && (!FieldRecord || !FieldRecord->allowConstDefaultInit())) {\n      if (Diagnose)\n        S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field) << !!ICI << MD->getParent() << FD << FD->getType() << /*Const*/ 1;"}}
[n]={{r,9464,"/// Check whether we should delete a special member function due to the class\n/// having a particular non-static data member.\nbool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {\n  if (CSM == Sema::CXXDefaultConstructor) {\n    // For a default constructor, all references must be initialized in-class\n    // and, if a union, it must have a non-const member.\n    if (FieldType->isReferenceType() && !FD->hasInClassInitializer()) {\n      if (Diagnose)\n        S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field) << !!ICI << MD->getParent() << FD << FieldType << /*Reference*/ 0;"},{r,9475,"/// Check whether we should delete a special member function due to the class\n/// having a particular non-static data member.\nbool SpecialMemberDeletionInfo::shouldDeleteForField(FieldDecl *FD) {\n  if (CSM == Sema::CXXDefaultConstructor) {\n    // C++11 [class.ctor]p5 (modified by DR2394): any non-variant non-static\n    // data member of const-qualified type (or array thereof) with no\n    // brace-or-equal-initializer is not const-default-constructible.\n    if (!inUnion() && FieldType.isConstQualified() && !FD->hasInClassInitializer() && (!FieldRecord || !FieldRecord->allowConstDefaultInit())) {\n      if (Diagnose)\n        S.Diag(FD->getLocation(), diag::note_deleted_default_ctor_uninit_field) << !!ICI << MD->getParent() << FD << FD->getType() << /*Const*/ 1;"}},
[o]={
["clang/test/SemaCXX/value-initialization.cpp"]={"clang/test/SemaCXX/value-initialization.cpp:4:16: note: default constructor of \'A\' is implicitly deleted because field \'i\' of const-qualified type \'const int\' would not be initialized"}
}
},
},
["note_deleted_dtor_no_operator_delete"]={
["note_deleted_dtor_no_operator_delete"]={
[f]="virtual destructor requires an unambiguous, accessible \'operator delete\'",
[b]="virtual destructor requires an unambiguous, accessible \'operator delete\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="virtual destructor requires an unambiguous, accessible \'operator delete\'",
[h]="virtual destructor requires an unambiguous, accessible \'operator delete\'",
[g]=b,
[j]=i,
[e]="virtual destructor requires an unambiguous, accessible \'operator delete\'",
[k]="virtual destructor requires an unambiguous, accessible \'operator delete\'",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Mb,1333140808,Jb},
[m]={Ub,1333140808,Vb},
[n]={{q,9673,"/// Determine whether a defaulted special member function should be defined as\n/// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11,\n/// C++11 [class.copy]p23, and C++11 [class.dtor]p5.\nbool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, InheritedConstructorInfo *ICI, bool Diagnose) {\n  // C++11 [class.dtor]p5:\n  // -- for a virtual destructor, lookup of the non-array deallocation function\n  //    results in an ambiguity or in a function that is deleted or inaccessible\n  if (CSM == CXXDestructor && MD->isVirtual()) {\n    if (FindDeallocationFunction(MD->getLocation(), MD->getParent(), Name, OperatorDelete, /*Diagnose*/ false)) {\n      if (Diagnose)\n        Diag(RD->getLocation(), diag::note_deleted_dtor_no_operator_delete);"}}
[n]={{r,9673,"/// Determine whether a defaulted special member function should be defined as\n/// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11,\n/// C++11 [class.copy]p23, and C++11 [class.dtor]p5.\nbool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, InheritedConstructorInfo *ICI, bool Diagnose) {\n  // C++11 [class.dtor]p5:\n  // -- for a virtual destructor, lookup of the non-array deallocation function\n  //    results in an ambiguity or in a function that is deleted or inaccessible\n  if (CSM == CXXDestructor && MD->isVirtual()) {\n    if (FindDeallocationFunction(MD->getLocation(), MD->getParent(), Name, OperatorDelete, /*Diagnose*/ false)) {\n      if (Diagnose)\n        Diag(RD->getLocation(), diag::note_deleted_dtor_no_operator_delete);"}},
[o]={
["clang/test/CXX/special/class.dtor/p5-0x.cpp"]={"clang/test/CXX/special/class.dtor/p5-0x.cpp:93:8: note: virtual destructor requires an unambiguous, accessible \'operator delete\'","clang/test/CXX/special/class.dtor/p5-0x.cpp:93:8: note: virtual destructor requires an unambiguous, accessible \'operator delete\'","clang/test/CXX/special/class.dtor/p5-0x.cpp:97:8: note: virtual destructor requires an unambiguous, accessible \'operator delete\'","clang/test/CXX/special/class.dtor/p5-0x.cpp:102:8: note: virtual destructor requires an unambiguous, accessible \'operator delete\'"}
}
},
},
["note_deleted_special_member_class_subobject"]={
["note_deleted_special_member_class_subobject"]={
[f]="... A is implicitly deleted because ... ...",
[b]="... A is implicitly deleted because ... ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{default constructor of|copy constructor of|move constructor of|copy assignment operator of|move assignment operator of|destructor of|constructor inherited by}0 %1 is implicitly deleted because %select{base class %3|%select{||||variant }4field %3}2 %select{has %select{no|a deleted|multiple|an inaccessible|a non-trivial}4 %select{%select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|%select{default|corresponding|default|default|default}4 constructor}0|destructor}5%select{||s||}4|is an ObjC pointer}6",
[h]="%select{default constructor of|copy constructor of|move constructor of|copy assignment operator of|move assignment operator of|destructor of|constructor inherited by}0 %1 is implicitly deleted because %select{base class %3|%select{||||variant }4field %3}2 %select{has %select{no|a deleted|multiple|an inaccessible|a non-trivial}4 %select{%select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|%select{default|corresponding|default|default|default}4 constructor}0|destructor}5%select{||s||}4|is an ObjC pointer}6",
[g]=b,
[j]=i,
[e]="(?:default constructor of|copy constructor of|move constructor of|copy assignment operator of|move assignment operator of|destructor of|constructor inherited by) (.*?) is implicitly deleted because (?:base class (.*?)|(?:||||variant )field (.*?)) (?:has (?:no|a deleted|multiple|an inaccessible|a non\\-trivial) (?:(?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|(?:default|corresponding|default|default|default) constructor)|destructor)(?:||s||)|is an ObjC pointer)",
[k]="(?:default constructor of|copy constructor of|move constructor of|copy assignment operator of|move assignment operator of|destructor of|constructor inherited by) (.*?) is implicitly deleted because (?:base class (.*?)|(?:||||variant )field (.*?)) (?:has (?:no|a deleted|multiple|an inaccessible|a non\\-trivial) (?:(?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|(?:default|corresponding|default|default|default) constructor)|destructor)(?:||s||)|is an ObjC pointer)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Mb,1333140808,Jb},
[m]={Ub,1333140808,Vb},
[n]={{q,9336,"/// Check whether we should delete a special member due to the implicit\n/// definition containing a call to a special member of a subobject.\nbool SpecialMemberDeletionInfo::shouldDeleteForSubobjectCall(Subobject Subobj, Sema::SpecialMemberOverloadResult SMOR, bool IsDtorCallInCtor) {\n  if (Diagnose) {\n    if (Field) {\n      S.Diag(Field->getLocation(), diag::note_deleted_special_member_class_subobject) << getEffectiveCSM() << MD->getParent() << /*IsField*/ true << Field << DiagKind << IsDtorCallInCtor << /*IsObjCPtr*/ false;"},{q,9342,"/// Check whether we should delete a special member due to the implicit\n/// definition containing a call to a special member of a subobject.\nbool SpecialMemberDeletionInfo::shouldDeleteForSubobjectCall(Subobject Subobj, Sema::SpecialMemberOverloadResult SMOR, bool IsDtorCallInCtor) {\n  if (Diagnose) {\n    if (Field) {\n    } else {\n      S.Diag(Base->getBeginLoc(), diag::note_deleted_special_member_class_subobject) << getEffectiveCSM() << MD->getParent() << /*IsField*/ false << Base->getType() << DiagKind << IsDtorCallInCtor << /*IsObjCPtr*/ false;"},{q,9413,"bool SpecialMemberDeletionInfo::shouldDeleteForVariantObjCPtrMember(FieldDecl *FD, QualType FieldType) {\n  if (Diagnose) {\n    S.Diag(FD->getLocation(), diag::note_deleted_special_member_class_subobject) << getEffectiveCSM() << ParentClass << /*IsField*/ true << FD << 4 << /*IsDtorCallInCtor*/ false << /*IsObjCPtr*/ true;"},{q,9439,"/// Check whether we should delete a special member function due to the class\n/// having a particular direct or virtual base class.\nbool SpecialMemberDeletionInfo::shouldDeleteForBase(CXXBaseSpecifier *Base) {\n  if (auto *BaseCtor = SMOR.getMethod()) {\n    // Note that we do not check access along this path; other than that,\n    // this is the same as shouldDeleteForSubobjectCall(Base, BaseCtor, false);\n    // FIXME: Check that the base has a usable destructor! Sink this into\n    // shouldDeleteForClassSubobject.\n    if (BaseCtor->isDeleted() && Diagnose) {\n      S.Diag(Base->getBeginLoc(), diag::note_deleted_special_member_class_subobject) << getEffectiveCSM() << MD->getParent() << /*IsField*/ false << Base->getType() << /*Deleted*/ 1 << /*IsDtorCallInCtor*/ false << /*IsObjCPtr*/ false;"}}
[n]={{r,9336,"/// Check whether we should delete a special member due to the implicit\n/// definition containing a call to a special member of a subobject.\nbool SpecialMemberDeletionInfo::shouldDeleteForSubobjectCall(Subobject Subobj, Sema::SpecialMemberOverloadResult SMOR, bool IsDtorCallInCtor) {\n  if (Diagnose) {\n    if (Field) {\n      S.Diag(Field->getLocation(), diag::note_deleted_special_member_class_subobject) << getEffectiveCSM() << MD->getParent() << /*IsField*/ true << Field << DiagKind << IsDtorCallInCtor << /*IsObjCPtr*/ false;"},{r,9342,"/// Check whether we should delete a special member due to the implicit\n/// definition containing a call to a special member of a subobject.\nbool SpecialMemberDeletionInfo::shouldDeleteForSubobjectCall(Subobject Subobj, Sema::SpecialMemberOverloadResult SMOR, bool IsDtorCallInCtor) {\n  if (Diagnose) {\n    if (Field) {\n    } else {\n      S.Diag(Base->getBeginLoc(), diag::note_deleted_special_member_class_subobject) << getEffectiveCSM() << MD->getParent() << /*IsField*/ false << Base->getType() << DiagKind << IsDtorCallInCtor << /*IsObjCPtr*/ false;"},{r,9413,"bool SpecialMemberDeletionInfo::shouldDeleteForVariantObjCPtrMember(FieldDecl *FD, QualType FieldType) {\n  if (Diagnose) {\n    S.Diag(FD->getLocation(), diag::note_deleted_special_member_class_subobject) << getEffectiveCSM() << ParentClass << /*IsField*/ true << FD << 4 << /*IsDtorCallInCtor*/ false << /*IsObjCPtr*/ true;"},{r,9439,"/// Check whether we should delete a special member function due to the class\n/// having a particular direct or virtual base class.\nbool SpecialMemberDeletionInfo::shouldDeleteForBase(CXXBaseSpecifier *Base) {\n  if (auto *BaseCtor = SMOR.getMethod()) {\n    // Note that we do not check access along this path; other than that,\n    // this is the same as shouldDeleteForSubobjectCall(Base, BaseCtor, false);\n    // FIXME: Check that the base has a usable destructor! Sink this into\n    // shouldDeleteForClassSubobject.\n    if (BaseCtor->isDeleted() && Diagnose) {\n      S.Diag(Base->getBeginLoc(), diag::note_deleted_special_member_class_subobject) << getEffectiveCSM() << MD->getParent() << /*IsField*/ false << Base->getType() << /*Deleted*/ 1 << /*IsDtorCallInCtor*/ false << /*IsObjCPtr*/ false;"}},
[o]={
["clang/test/CXX/class.derived/class.abstract/p16.cpp"]={"clang/test/CXX/class.derived/class.abstract/p16.cpp:34:12: note: destructor of \'E\' is implicitly deleted because base class \'D\' has an inaccessible destructor","clang/test/CXX/class.derived/class.abstract/p16.cpp:34:12: note: copy assignment operator of \'E\' is implicitly deleted because base class \'D\' has an inaccessible copy assignment operator","clang/test/CXX/class.derived/class.abstract/p16.cpp:40:12: note: destructor of \'G\' is implicitly deleted because base class \'D\' has an inaccessible destructor","clang/test/CXX/class.derived/class.abstract/p16.cpp:40:12: note: move assignment operator of \'G\' is implicitly deleted because base class \'D\' has an inaccessible move assignment operator","clang/test/CXX/class.derived/class.abstract/p16.cpp:45:12: note: move assignment operator of \'H\' is implicitly deleted because base class \'D\' has an inaccessible move assignment operator","clang/test/CXX/class.derived/class.abstract/p16.cpp:45:12: note: move assignment operator of \'H\' is implicitly deleted because base class \'D\' has an inaccessible move assignment operator"}
}
},
},
["note_deleted_type_mismatch"]={
["note_deleted_type_mismatch"]={
[f]="function is implicitly deleted because its declared type does not match the type of an implicit ...",
[b]="function is implicitly deleted because its declared type does not match the type of an implicit ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="function is implicitly deleted because its declared type does not match the type of an implicit %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0",
[h]="function is implicitly deleted because its declared type does not match the type of an implicit %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0",
[g]=b,
[j]=i,
[e]="function is implicitly deleted because its declared type does not match the type of an implicit (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor)",
[k]="function is implicitly deleted because its declared type does not match the type of an implicit (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"9b2c5e7c44fd",1538097403,"[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only"},
[m]={"9b2c5e7c44fd",1538097403,"[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only"},
[n]={{q,7774,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n      if (!inTemplateInstantiation() && !HadError) {\n        if (ShouldDeleteForTypeMismatch) {\n          Diag(MD->getLocation(), diag::note_deleted_type_mismatch) << CSM;"}}
[n]={{r,7774,"bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, SourceLocation DefaultLoc) {\n  if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {\n    if (First) {\n      if (!inTemplateInstantiation() && !HadError) {\n        if (ShouldDeleteForTypeMismatch) {\n          Diag(MD->getLocation(), diag::note_deleted_type_mismatch) << CSM;"}},
[o]={
["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:30:3: note: function is implicitly deleted because its declared type does not match the type of an implicit default constructor","clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p1.cpp:31:3: note: function is implicitly deleted because its declared type does not match the type of an implicit copy constructor","clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p1.cpp:32:6: note: function is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator","clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p1.cpp:72:3: note: function is implicitly deleted because its declared type does not match the type of an implicit copy constructor","clang/test/CXX/dcl.decl/dcl.fct.def/dcl.fct.def.default/p1.cpp:73:6: note: function is implicitly deleted because its declared type does not match the type of an implicit copy assignment operator"}
}
},
},
["note_dependent_function_template_spec_discard_reason"]={
["note_dependent_function_template_spec_discard_reason"]={
[f]="candidate ignored: ...",
[b]="candidate ignored: ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="candidate ignored: %select{not a function template|not a member of the enclosing namespace; did you mean to explicitly qualify the specialization?}0",
[h]="candidate ignored: %select{not a function template|not a member of the enclosing namespace; did you mean to explicitly qualify the specialization?}0",
[g]=b,
[j]=i,
[e]="candidate ignored\\: (?:not a function template|not a member of the enclosing namespace; did you mean to explicitly qualify the specialization\\?)",
[k]="candidate ignored\\: (?:not a function template|not a member of the enclosing namespace; did you mean to explicitly qualify the specialization\\?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"0b75dc5fa2e0",1532032820,"[Sema] Diagnose an invalid dependent function template specialization"},
[m]={"0b75dc5fa2e0",1532032820,"[Sema] Diagnose an invalid dependent function template specialization"},
[n]={{u,9357,"/// 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  if (Previous.empty()) {\n    for (auto &P : DiscardedCandidates)\n      Diag(P.second->getLocation(), diag::note_dependent_function_template_spec_discard_reason) << P.first;"}}
[n]={{v,9357,"/// 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  if (Previous.empty()) {\n    for (auto &P : DiscardedCandidates)\n      Diag(P.second->getLocation(), diag::note_dependent_function_template_spec_discard_reason) << P.first;"}},
[o]={
["clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp"]={"clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp:364:27: note: candidate ignored: not a function template","clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp:372:25: note: candidate ignored: not a member of the enclosing namespace; did you mean to explicitly qualify the specialization?","clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp:381:43: note: candidate ignored: not a function template","clang/test/CXX/temp/temp.decls/temp.friend/p1.cpp:382:22: note: candidate ignored: not a function template"}
}
},
},
["note_dependent_member_use"]={
["note_dependent_member_use"]={
[f]="must qualify identifier to find this declaration in dependent base class",
[b]="must qualify identifier to find this declaration in dependent base class",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="must qualify identifier to find this declaration in dependent base class",
[h]="must qualify identifier to find this declaration in dependent base class",
[g]=b,
[j]=i,
[e]="must qualify identifier to find this declaration in dependent base class",
[k]="must qualify identifier to find this declaration in dependent base class",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={T,1590001902,S},
[m]={pb,1590001902,qb},
[n]={{r,2333,"/// Diagnose a lookup that found results in an enclosing class during error\n/// recovery. This usually indicates that the results were found in a dependent\n/// base class that could not be searched as part of a template definition.\n/// Always issues a diagnostic (though this may be only a warning in MS\n/// compatibility mode).\n///\n/// Return \\c true if the error is unrecoverable, or \\c false if the caller\n/// should attempt to recover using these lookup results.\nbool Sema::DiagnoseDependentMemberLookup(const LookupResult &R) {\n  if (R.getRepresentativeDecl()->getDeclContext()->Equals(R.getNamingClass())) {\n  } else if (getLangOpts().MSVCCompat) {\n    NoteID = diag::note_dependent_member_use;"}}
[n]={{s,2333,"/// Diagnose a lookup that found results in an enclosing class during error\n/// recovery. This usually indicates that the results were found in a dependent\n/// base class that could not be searched as part of a template definition.\n/// Always issues a diagnostic (though this may be only a warning in MS\n/// compatibility mode).\n///\n/// Return \\c true if the error is unrecoverable, or \\c false if the caller\n/// should attempt to recover using these lookup results.\nbool Sema::DiagnoseDependentMemberLookup(const LookupResult &R) {\n  if (R.getRepresentativeDecl()->getDeclContext()->Equals(R.getNamingClass())) {\n  } else if (getLangOpts().MSVCCompat) {\n    NoteID = diag::note_dependent_member_use;"}},
[o]={
["clang/test/CodeGenCXX/ms-lookup-template-base-classes.cpp"]={"clang/test/CodeGenCXX/ms-lookup-template-base-classes.cpp:5:8: note: must qualify identifier to find this declaration in dependent base class"}
}
},
},
["note_dependent_non_type_default_arg_in_partial_spec"]={
["note_dependent_non_type_default_arg_in_partial_spec"]={
[f]="template parameter is used in default argument declared here",
[b]="template parameter is used in default argument declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="template parameter is used in default argument declared here",
[h]="template parameter is used in default argument declared here",
[g]=b,
[j]=i,
[e]="template parameter is used in default argument declared here",
[k]="template parameter is used in default argument declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"6056d5e91886",1391907283,"PR16519, PR18009: When checking a partial specialization for uses of its own"},
[m]={"6056d5e91886",1391907283,"PR16519, PR18009: When checking a partial specialization for uses of its own"},
[n]={{u,8549,"/// 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    if (ParamUseRange.isValid()) {\n      if (IsDefaultArgument) {\n        S.Diag(ParamUseRange.getBegin(), diag::note_dependent_non_type_default_arg_in_partial_spec) << ParamUseRange;"}}
[n]={{v,8549,"/// 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    if (ParamUseRange.isValid()) {\n      if (IsDefaultArgument) {\n        S.Diag(ParamUseRange.getBegin(), diag::note_dependent_non_type_default_arg_in_partial_spec) << ParamUseRange;"}}
},
},
["note_deprecated_this_capture"]={
["note_deprecated_this_capture"]={
[f]="add an explicit capture of \'this\' to capture \'*this\' by reference",
[b]="add an explicit capture of \'this\' to capture \'*this\' by reference",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add an explicit capture of \'this\' to capture \'*this\' by reference",
[h]="add an explicit capture of \'this\' to capture \'*this\' by reference",
[g]=b,
[j]=i,
[e]="add an explicit capture of \'this\' to capture \'\\*this\' by reference",
[k]="add an explicit capture of \'this\' to capture \'\\*this\' by reference",
[d]=a,
[l]=a,
[c]=ac,
[c]=Cc,
[m]={"d82201e7c66b",1530943128,"P0806R2 Implicit capture of this with a capture-default of [=] is"},
[m]={"d82201e7c66b",1530943128,"P0806R2 Implicit capture of this with a capture-default of [=] is"},
[n]={{"clang/lib/Sema/SemaLambda.cpp",2038,"ExprResult Sema::BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc, LambdaScopeInfo *LSI) {\n  {\n    for (unsigned I = 0, N = LSI->Captures.size(); I != N; ++I) {\n      // Map the capture to our AST representation.\n      LambdaCapture Capture = [&] {\n        if (From.isThisCapture()) {\n          // Capturing \'this\' implicitly with a default of \'[=]\' is deprecated,\n          // because it results in a reference capture. Don\'t warn prior to\n          // C++2a; there\'s nothing that can be done about it before then.\n          if (getLangOpts().CPlusPlus20 && IsImplicit && CaptureDefault == LCD_ByCopy) {\n            Diag(CaptureDefaultLoc, diag::note_deprecated_this_capture) << FixItHint::CreateInsertion(getLocForEndOfToken(CaptureDefaultLoc), \", this\");"}}
[n]={{"clang/lib/Sema/SemaLambda.cpp",2038,"ExprResult Sema::BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc, LambdaScopeInfo *LSI) {\n  {\n    for (unsigned I = 0, N = LSI->Captures.size(); I != N; ++I) {\n      // Map the capture to our AST representation.\n      LambdaCapture Capture = [&] {\n        if (From.isThisCapture()) {\n          // Capturing \'this\' implicitly with a default of \'[=]\' is deprecated,\n          // because it results in a reference capture. Don\'t warn prior to\n          // C++2a; there\'s nothing that can be done about it before then.\n          if (getLangOpts().CPlusPlus20 && IsImplicit && CaptureDefault == LCD_ByCopy) {\n            Diag(CaptureDefaultLoc, diag::note_deprecated_this_capture) << FixItHint::CreateInsertion(getLocForEndOfToken(CaptureDefaultLoc), \", this\");"}},
[o]={
["clang/test/SemaCXX/lambda-implicit-this-capture.cpp"]={"clang/test/SemaCXX/lambda-implicit-this-capture.cpp:10:13: note: add an explicit capture of \'this\' to capture \'*this\' by reference"}
}
},
},
["note_designated_init_mixed"]={
["note_designated_init_mixed"]={
[f]="first non-designated initializer is here",
[b]="first non-designated initializer is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="first non-designated initializer is here",
[h]="first non-designated initializer is here",
[g]=b,
[j]=i,
[e]="first non\\-designated initializer is here",
[k]="first non\\-designated initializer is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated"},
[m]={"5030928d60a1",1567205575,"[c++20] Implement semantic restrictions for C++20 designated"},
[n]={{r,7817,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n  // Check that any designated initializers are syntactically valid in the\n  // current language mode.\n  for (unsigned I = 0, E = InitArgList.size(); I != E; ++I) {\n    if (auto *DIE = dyn_cast<DesignatedInitExpr>(InitArgList[I])) {\n      if (!DiagnosedMixedDesignator && !isa<DesignatedInitExpr>(InitArgList[0])) {\n        Diag(InitArgList[0]->getBeginLoc(), diag::note_designated_init_mixed) << InitArgList[0]->getSourceRange();"},{r,7830,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n  // Check that any designated initializers are syntactically valid in the\n  // current language mode.\n  for (unsigned I = 0, E = InitArgList.size(); I != E; ++I) {\n    if (auto *DIE = dyn_cast<DesignatedInitExpr>(InitArgList[I])) {\n    } else if (getLangOpts().CPlusPlus && !DiagnosedMixedDesignator && isa<DesignatedInitExpr>(InitArgList[0])) {\n      Diag(InitArgList[I]->getBeginLoc(), diag::note_designated_init_mixed) << InitArgList[I]->getSourceRange();"}}
[n]={{s,7817,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n  // Check that any designated initializers are syntactically valid in the\n  // current language mode.\n  for (unsigned I = 0, E = InitArgList.size(); I != E; ++I) {\n    if (auto *DIE = dyn_cast<DesignatedInitExpr>(InitArgList[I])) {\n      if (!DiagnosedMixedDesignator && !isa<DesignatedInitExpr>(InitArgList[0])) {\n        Diag(InitArgList[0]->getBeginLoc(), diag::note_designated_init_mixed) << InitArgList[0]->getSourceRange();"},{s,7830,"ExprResult Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, SourceLocation RBraceLoc) {\n  // Check that any designated initializers are syntactically valid in the\n  // current language mode.\n  for (unsigned I = 0, E = InitArgList.size(); I != E; ++I) {\n    if (auto *DIE = dyn_cast<DesignatedInitExpr>(InitArgList[I])) {\n    } else if (getLangOpts().CPlusPlus && !DiagnosedMixedDesignator && isa<DesignatedInitExpr>(InitArgList[0])) {\n      Diag(InitArgList[I]->getBeginLoc(), diag::note_designated_init_mixed) << InitArgList[I]->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/designated-initializers-base-class.cpp"]={"clang/test/SemaCXX/designated-initializers-base-class.cpp:11:22: note: first non-designated initializer is here"}
}
},
},
["note_destructor_nontype_here"]={
["note_destructor_nontype_here"]={
[f]="non-type declaration found by destructor name lookup",
[b]="non-type declaration found by destructor name lookup",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="non-type declaration found by destructor name lookup",
[h]="non-type declaration found by destructor name lookup",
[g]=b,
[j]=i,
[e]="non\\-type declaration found by destructor name lookup",
[k]="non\\-type declaration found by destructor name lookup",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling"},
[m]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling"},
[n]={{K,236,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n  auto CheckLookupResult = [&](LookupResult &Found) -> ParsedType {\n    // As an extension, attempt to \"fix\" an ambiguity by erasing all non-type\n    // results, and all non-matching results if we have a search type. It\'s not\n    // clear what the right behavior is if destructor lookup hits an ambiguity,\n    // but other compilers do generally accept at least some kinds of\n    // ambiguity.\n    if (Found.isAmbiguous() && NumAcceptableResults == 1) {\n      while (F.hasNext()) {\n        if (auto *TD = dyn_cast<TypeDecl>(D->getUnderlyingDecl()))\n        else\n          Diag(D->getLocation(), diag::note_destructor_nontype_here);"},{K,462,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n  for (NamedDecl *FoundD : FoundDecls) {\n    if (auto *TD = dyn_cast<TypeDecl>(FoundD->getUnderlyingDecl()))\n    else\n      Diag(FoundD->getLocation(), diag::note_destructor_nontype_here) << FoundD;"}}
[n]={{S,236,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n  auto CheckLookupResult = [&](LookupResult &Found) -> ParsedType {\n    // As an extension, attempt to \"fix\" an ambiguity by erasing all non-type\n    // results, and all non-matching results if we have a search type. It\'s not\n    // clear what the right behavior is if destructor lookup hits an ambiguity,\n    // but other compilers do generally accept at least some kinds of\n    // ambiguity.\n    if (Found.isAmbiguous() && NumAcceptableResults == 1) {\n      while (F.hasNext()) {\n        if (auto *TD = dyn_cast<TypeDecl>(D->getUnderlyingDecl()))\n        else\n          Diag(D->getLocation(), diag::note_destructor_nontype_here);"},{S,462,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n  for (NamedDecl *FoundD : FoundDecls) {\n    if (auto *TD = dyn_cast<TypeDecl>(FoundD->getUnderlyingDecl()))\n    else\n      Diag(FoundD->getLocation(), diag::note_destructor_nontype_here) << FoundD;"}},
[o]={
["clang/test/SemaCXX/GH59446.cpp"]={"clang/test/SemaCXX/GH59446.cpp:5:34: note: non-type declaration found by destructor name lookup"}
}
},
},
["note_destructor_type_here"]={
["note_destructor_type_here"]={
[f]="type A found by destructor name lookup",
[b]="type A found by destructor name lookup",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="type %0 found by destructor name lookup",
[h]="type %0 found by destructor name lookup",
[g]=b,
[j]=i,
[e]="type (.*?) found by destructor name lookup",
[k]="type (.*?) found by destructor name lookup",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"4cf85a725af0",1299277928,"When clearing a LookupResult structure, clear out the naming class,"},
[m]={"4cf85a725af0",1299277928,"When clearing a LookupResult structure, clear out the naming class,"},
[n]={{K,233,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n  auto CheckLookupResult = [&](LookupResult &Found) -> ParsedType {\n    // As an extension, attempt to \"fix\" an ambiguity by erasing all non-type\n    // results, and all non-matching results if we have a search type. It\'s not\n    // clear what the right behavior is if destructor lookup hits an ambiguity,\n    // but other compilers do generally accept at least some kinds of\n    // ambiguity.\n    if (Found.isAmbiguous() && NumAcceptableResults == 1) {\n      while (F.hasNext()) {\n        if (auto *TD = dyn_cast<TypeDecl>(D->getUnderlyingDecl()))\n          Diag(D->getLocation(), diag::note_destructor_type_here) << Context.getTypeDeclType(TD);"},{K,402,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n  if (SS.isSet()) {\n    // For compatibility with other compilers and older versions of Clang,\n    //\n    //  nested-name-specifier type-name :: ~ type-name\n    //\n    // also looks for type-name in the scope. Unfortunately, we can\'t\n    // reasonably apply this fallback for dependent nested-name-specifiers.\n    if (SS.isValid() && SS.getScopeRep()->getPrefix()) {\n      if (ParsedType T = LookupInScope()) {\n        Diag(FoundDecls.back()->getLocation(), diag::note_destructor_type_here) << GetTypeFromParser(T);"},{K,459,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n  for (NamedDecl *FoundD : FoundDecls) {\n    if (auto *TD = dyn_cast<TypeDecl>(FoundD->getUnderlyingDecl()))\n      Diag(FoundD->getLocation(), diag::note_destructor_type_here) << Context.getTypeDeclType(TD);"}}
[n]={{S,233,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n  auto CheckLookupResult = [&](LookupResult &Found) -> ParsedType {\n    // As an extension, attempt to \"fix\" an ambiguity by erasing all non-type\n    // results, and all non-matching results if we have a search type. It\'s not\n    // clear what the right behavior is if destructor lookup hits an ambiguity,\n    // but other compilers do generally accept at least some kinds of\n    // ambiguity.\n    if (Found.isAmbiguous() && NumAcceptableResults == 1) {\n      while (F.hasNext()) {\n        if (auto *TD = dyn_cast<TypeDecl>(D->getUnderlyingDecl()))\n          Diag(D->getLocation(), diag::note_destructor_type_here) << Context.getTypeDeclType(TD);"},{S,402,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n  if (SS.isSet()) {\n    // For compatibility with other compilers and older versions of Clang,\n    //\n    //  nested-name-specifier type-name :: ~ type-name\n    //\n    // also looks for type-name in the scope. Unfortunately, we can\'t\n    // reasonably apply this fallback for dependent nested-name-specifiers.\n    if (SS.isValid() && SS.getScopeRep()->getPrefix()) {\n      if (ParsedType T = LookupInScope()) {\n        Diag(FoundDecls.back()->getLocation(), diag::note_destructor_type_here) << GetTypeFromParser(T);"},{S,459,"ParsedType Sema::getDestructorName(SourceLocation TildeLoc, IdentifierInfo &II, SourceLocation NameLoc, Scope *S, CXXScopeSpec &SS, ParsedType ObjectTypePtr, bool EnteringContext) {\n  for (NamedDecl *FoundD : FoundDecls) {\n    if (auto *TD = dyn_cast<TypeDecl>(FoundD->getUnderlyingDecl()))\n      Diag(FoundD->getLocation(), diag::note_destructor_type_here) << Context.getTypeDeclType(TD);"}},
[o]={
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:5:13: note: type \'Bar\' (aka \'Foo\') found by destructor name lookup"}
}
},
},
["note_direct_member_here"]={
["note_direct_member_here"]={
[f]="direct member declared here",
[b]="direct member declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="direct member declared here",
[h]="direct member declared here",
[g]=b,
[j]=i,
[e]="direct member declared here",
[k]="direct member declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={T,1590001902,S},
[m]={pb,1590001902,qb},
[n]={{E,3972,"static void DiagnoseCategoryDirectMembersProtocolConformance(Sema &S, ObjCProtocolDecl *PDecl, ObjCCategoryDecl *CDecl) {\n  if (!DirectMembers.empty()) {\n    for (const auto *MD : DirectMembers)\n      S.Diag(MD->getLocation(), diag::note_direct_member_here);"}}
[n]={{M,3972,"static void DiagnoseCategoryDirectMembersProtocolConformance(Sema &S, ObjCProtocolDecl *PDecl, ObjCCategoryDecl *CDecl) {\n  if (!DirectMembers.empty()) {\n    for (const auto *MD : DirectMembers)\n      S.Diag(MD->getLocation(), diag::note_direct_member_here);"}},
[o]={
["clang/test/SemaObjC/category-direct-members-protocol-conformance.m"]={"clang/test/SemaObjC/category-direct-members-protocol-conformance.m:13:1: note: direct member declared here","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:48:1: note: direct member declared here","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:50:1: note: direct member declared here","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:77:36: note: direct member declared here","clang/test/SemaObjC/category-direct-members-protocol-conformance.m:93:51: note: direct member declared here"}
}
},
},
["note_direct_method_declared_at"]={
["note_direct_method_declared_at"]={
[f]="direct method A declared here",
[b]="direct method A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="direct method %0 declared here",
[h]="direct method %0 declared here",
[g]=b,
[j]=i,
[e]="direct method (.*?) declared here",
[k]="direct method (.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining"},
[m]={"c094e7dc4b3f",1573050950,"[SYCL] Add sycl_kernel attribute for accelerated code outlining"},
[n]={{s,1326,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n  if (!Method) {\n  } else {\n    if (onlyDirect) {\n      Diag(Method->getLocation(), diag::note_direct_method_declared_at) << Method->getDeclName();"},{s,1336,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n  if (!Method) {\n  } else {\n    if (onlyDirect) {\n    } else if (anyDirect) {\n      if (LikelyTargetMethod && LikelyTargetMethod->isDirectMethod()) {\n        Diag(LikelyTargetMethod->getLocation(), diag::note_direct_method_declared_at) << LikelyTargetMethod->getDeclName();"},{s,1344,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n  if (!Method) {\n  } else {\n    if (onlyDirect) {\n    } else if (anyDirect) {\n      if (LikelyTargetMethod && LikelyTargetMethod->isDirectMethod()) {\n      } else if (!LikelyTargetMethod) {\n        Diag(GlobalDirectMethod->getLocation(), diag::note_direct_method_declared_at) << GlobalDirectMethod->getDeclName();"},{s,2708,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (Method && Method->isDirectMethod() && SuperLoc.isValid()) {\n    Diag(Method->getLocation(), diag::note_direct_method_declared_at) << Method->getDeclName();"},{s,3144,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (Method && Method->isDirectMethod()) {\n    if (ReceiverType->isObjCIdType() && !isImplicit) {\n      Diag(Method->getLocation(), diag::note_direct_method_declared_at) << Method->getDeclName();"},{s,3161,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (Method && Method->isDirectMethod()) {\n    // Under ARC, self can\'t be assigned, and doing a direct call to `self`\n    // when it\'s a Class is hence safe.  For other cases, we can\'t trust `self`\n    // is what we think it is, so we reject it.\n    if (ReceiverType->isObjCClassType() && !isImplicit && !(Receiver->isObjCSelfExpr() && getLangOpts().ObjCAutoRefCount)) {\n      Diag(Method->getLocation(), diag::note_direct_method_declared_at) << Method->getDeclName();"},{s,3176,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (Method && Method->isDirectMethod()) {\n    if (SuperLoc.isValid()) {\n      Diag(Method->getLocation(), diag::note_direct_method_declared_at) << Method->getDeclName();"}}
[n]={{t,1326,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n  if (!Method) {\n  } else {\n    if (onlyDirect) {\n      Diag(Method->getLocation(), diag::note_direct_method_declared_at) << Method->getDeclName();"},{t,1336,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n  if (!Method) {\n  } else {\n    if (onlyDirect) {\n    } else if (anyDirect) {\n      if (LikelyTargetMethod && LikelyTargetMethod->isDirectMethod()) {\n        Diag(LikelyTargetMethod->getLocation(), diag::note_direct_method_declared_at) << LikelyTargetMethod->getDeclName();"},{t,1344,"ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, SourceLocation AtLoc, SourceLocation SelLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, bool WarnMultipleSelectors) {\n  if (!Method) {\n  } else {\n    if (onlyDirect) {\n    } else if (anyDirect) {\n      if (LikelyTargetMethod && LikelyTargetMethod->isDirectMethod()) {\n      } else if (!LikelyTargetMethod) {\n        Diag(GlobalDirectMethod->getLocation(), diag::note_direct_method_declared_at) << GlobalDirectMethod->getDeclName();"},{t,2708,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (Method && Method->isDirectMethod() && SuperLoc.isValid()) {\n    Diag(Method->getLocation(), diag::note_direct_method_declared_at) << Method->getDeclName();"},{t,3144,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (Method && Method->isDirectMethod()) {\n    if (ReceiverType->isObjCIdType() && !isImplicit) {\n      Diag(Method->getLocation(), diag::note_direct_method_declared_at) << Method->getDeclName();"},{t,3161,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (Method && Method->isDirectMethod()) {\n    // Under ARC, self can\'t be assigned, and doing a direct call to `self`\n    // when it\'s a Class is hence safe.  For other cases, we can\'t trust `self`\n    // is what we think it is, so we reject it.\n    if (ReceiverType->isObjCClassType() && !isImplicit && !(Receiver->isObjCSelfExpr() && getLangOpts().ObjCAutoRefCount)) {\n      Diag(Method->getLocation(), diag::note_direct_method_declared_at) << Method->getDeclName();"},{t,3176,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (Method && Method->isDirectMethod()) {\n    if (SuperLoc.isValid()) {\n      Diag(Method->getLocation(), diag::note_direct_method_declared_at) << Method->getDeclName();"}},
[o]={
["clang/test/SemaObjC/method-direct-arc.m"]={"clang/test/SemaObjC/method-direct-arc.m:8:1: note: direct method \'directMethod\' declared here"}
}
},
},
["note_doc_block_command_previous"]={
["note_doc_block_command_previous"]={
[f]="previous command \'...A\' here",
[b]="previous command \'...A\' here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="previous command \'%select{\\|@}0%1\' here",
[h]="previous command \'%select{\\|@}0%1\' here",
[g]=b,
[j]=i,
[e]="previous command \'(?:\\\\|@)(.*?)\' here",
[k]="previous command \'(?:\\\\|@)(.*?)\' here",
[d]=a,
[l]=a,
[c]=nb,
[c]=vb,
[m]={"5ec0c7536a98",1344272907,"Comment diagnostics: warn on duplicate \\brief and \\return commands."},
[m]={"5ec0c7536a98",1344272907,"Comment diagnostics: warn on duplicate \\brief and \\return commands."},
[n]={{ob,628,"void Sema::checkBlockCommandDuplicate(const BlockCommandComment *Command) {\n  if (CommandName == PrevCommandName)\n    Diag(PrevCommand->getLocation(), diag::note_doc_block_command_previous) << PrevCommand->getCommandMarker() << PrevCommandName << PrevCommand->getSourceRange();"}}
[n]={{Nb,628,"void Sema::checkBlockCommandDuplicate(const BlockCommandComment *Command) {\n  if (CommandName == PrevCommandName)\n    Diag(PrevCommand->getLocation(), diag::note_doc_block_command_previous) << PrevCommand->getCommandMarker() << PrevCommandName << PrevCommand->getSourceRange();"}},
[o]={
["clang/test/Sema/warn-documentation.cpp"]={"clang/test/Sema/warn-documentation.cpp:154:6: note: previous command \'\\brief\' here","clang/test/Sema/warn-documentation.cpp:162:6: note: previous command \'\\short\' here","clang/test/Sema/warn-documentation.cpp:731:6: note: previous command \'\\headerfile\' here"}
}
},
},
["note_doc_block_command_previous_alias"]={
["note_doc_block_command_previous_alias"]={
[f]="previous command \'...A\' (an alias of \'\\B\') here",
[b]="previous command \'...A\' (an alias of \'\\B\') here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="previous command \'%select{\\|@}0%1\' (an alias of \'\\%2\') here",
[h]="previous command \'%select{\\|@}0%1\' (an alias of \'\\%2\') here",
[g]=b,
[j]=i,
[e]="previous command \'(?:\\\\|@)(.*?)\' \\(an alias of \'\\\\(.*?)\'\\) here",
[k]="previous command \'(?:\\\\|@)(.*?)\' \\(an alias of \'\\\\(.*?)\'\\) here",
[d]=a,
[l]=a,
[c]=nb,
[c]=vb,
[m]={"5ec0c7536a98",1344272907,"Comment diagnostics: warn on duplicate \\brief and \\return commands."},
[m]={"5ec0c7536a98",1344272907,"Comment diagnostics: warn on duplicate \\brief and \\return commands."},
[n]={{ob,634,"void Sema::checkBlockCommandDuplicate(const BlockCommandComment *Command) {\n  if (CommandName == PrevCommandName)\n  else\n    Diag(PrevCommand->getLocation(), diag::note_doc_block_command_previous_alias) << PrevCommand->getCommandMarker() << PrevCommandName << CommandName;"}}
[n]={{Nb,634,"void Sema::checkBlockCommandDuplicate(const BlockCommandComment *Command) {\n  if (CommandName == PrevCommandName)\n  else\n    Diag(PrevCommand->getLocation(), diag::note_doc_block_command_previous_alias) << PrevCommand->getCommandMarker() << PrevCommandName << CommandName;"}},
[o]={
["clang/test/Sema/warn-documentation.cpp"]={"clang/test/Sema/warn-documentation.cpp:170:6: note: previous command \'\\short\' (an alias of \'\\brief\') here"}
}
},
},
["note_doc_html_end_tag"]={
["note_doc_html_end_tag"]={
[f]="end tag",
[b]="end tag",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="end tag",
[h]="end tag",
[g]=b,
[j]=i,
[e]="end tag",
[k]="end tag",
[d]=a,
[l]=a,
[c]=nb,
[c]=vb,
[m]={"e00ffc7bb836",1342140264,"Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close..."},
[m]={"e00ffc7bb836",1342140264,"Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close..."},
[n]={{ob,510,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  while (!HTMLOpenTags.empty()) {\n    if (OpenLineInvalid || CloseLineInvalid || OpenLine == CloseLine) {\n    } else {\n      Diag(HET->getLocation(), diag::note_doc_html_end_tag) << HET->getSourceRange();"}}
[n]={{Nb,510,"HTMLEndTagComment *Sema::actOnHTMLEndTag(SourceLocation LocBegin, SourceLocation LocEnd, StringRef TagName) {\n  while (!HTMLOpenTags.empty()) {\n    if (OpenLineInvalid || CloseLineInvalid || OpenLine == CloseLine) {\n    } else {\n      Diag(HET->getLocation(), diag::note_doc_html_end_tag) << HET->getSourceRange();"}}
},
},
["note_doc_html_tag_started_here"]={
["note_doc_html_tag_started_here"]={
[f]="HTML tag started here",
[b]="HTML tag started here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="HTML tag started here",
[h]="HTML tag started here",
[g]=b,
[j]=i,
[e]="HTML tag started here",
[k]="HTML tag started here",
[d]=a,
[l]=a,
[c]=nb,
[c]=vb,
[m]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[m]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[n]={{"clang/lib/AST/CommentParser.cpp",521,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  while (true) {\n    default:\n      if (StartLineInvalid || EndLineInvalid || StartLine == EndLine)\n      else {\n        Diag(HST->getLocation(), diag::note_doc_html_tag_started_here) << HST->getSourceRange();"}}
[n]={{"clang/lib/AST/CommentParser.cpp",521,"HTMLStartTagComment *Parser::parseHTMLStartTag() {\n  while (true) {\n    default:\n      if (StartLineInvalid || EndLineInvalid || StartLine == EndLine)\n      else {\n        Diag(HST->getLocation(), diag::note_doc_html_tag_started_here) << HST->getSourceRange();"}},
[o]={
["clang/test/Sema/warn-documentation.cpp"]={"clang/test/Sema/warn-documentation.cpp:50:13: note: HTML tag started here"}
}
},
},
["note_doc_param_name_suggestion"]={
["note_doc_param_name_suggestion"]={
[f]="did you mean \'A\'?",
[b]="did you mean \'A\'?",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="did you mean \'%0\'?",
[h]="did you mean \'%0\'?",
[g]=b,
[j]=i,
[e]="did you mean \'(.*?)\'\\?",
[k]="did you mean \'(.*?)\'\\?",
[d]=a,
[l]=a,
[c]=nb,
[c]=vb,
[m]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[m]={"f26054f0fb53",1342042719,"Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[n]={{ob,787,"void Sema::resolveParamCommandIndexes(const FullComment *FC) {\n  // Second pass over unresolved \\\\param commands: do typo correction.\n  // Suggest corrections from a set of parameter declarations that have no\n  // corresponding \\\\param.\n  for (unsigned i = 0, e = UnresolvedParamCommands.size(); i != e; ++i) {\n    if (CorrectedParamIndex != ParamCommandComment::InvalidParamIndex) {\n      if (const IdentifierInfo *CorrectedII = CorrectedPVD->getIdentifier())\n        Diag(ArgRange.getBegin(), diag::note_doc_param_name_suggestion) << CorrectedII->getName() << FixItHint::CreateReplacement(ArgRange, CorrectedII->getName());"}}
[n]={{Nb,787,"void Sema::resolveParamCommandIndexes(const FullComment *FC) {\n  // Second pass over unresolved \\\\param commands: do typo correction.\n  // Suggest corrections from a set of parameter declarations that have no\n  // corresponding \\\\param.\n  for (unsigned i = 0, e = UnresolvedParamCommands.size(); i != e; ++i) {\n    if (CorrectedParamIndex != ParamCommandComment::InvalidParamIndex) {\n      if (const IdentifierInfo *CorrectedII = CorrectedPVD->getIdentifier())\n        Diag(ArgRange.getBegin(), diag::note_doc_param_name_suggestion) << CorrectedII->getName() << FixItHint::CreateReplacement(ArgRange, CorrectedII->getName());"}},
[o]={
["clang/test/Sema/warn-documentation-crlf.c"]={"clang/test/Sema/warn-documentation-crlf.c:10:11: note: did you mean \'qwerty\'?"}
}
},
},
["note_doc_param_previous"]={
["note_doc_param_previous"]={
[f]=Yb,
[b]=xc,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]=Yb,
[h]=xc,
[g]=b,
[j]=i,
[e]=Yb,
[k]=xc,
[d]=a,
[l]=a,
[c]=nb,
[c]=vb,
[m]={"8f0f1b0c41cd",1343166256,"Comment diagnostics: add warning for multiple \\param commands with duplicate"},
[m]={"8f0f1b0c41cd",1343166256,"Comment diagnostics: add warning for multiple \\param commands with duplicate"},
[n]={{ob,746,"void Sema::resolveParamCommandIndexes(const FullComment *FC) {\n  // First pass over all \\\\param commands: resolve all parameter names.\n  for (Comment::child_iterator I = FC->child_begin(), E = FC->child_end(); I != E; ++I) {\n    if (ParamVarDocs[ResolvedParamIndex]) {\n      Diag(PrevCommand->getLocation(), diag::note_doc_param_previous) << PrevCommand->getParamNameRange();"}}
[n]={{Nb,746,"void Sema::resolveParamCommandIndexes(const FullComment *FC) {\n  // First pass over all \\\\param commands: resolve all parameter names.\n  for (Comment::child_iterator I = FC->child_begin(), E = FC->child_end(); I != E; ++I) {\n    if (ParamVarDocs[ResolvedParamIndex]) {\n      Diag(PrevCommand->getLocation(), diag::note_doc_param_previous) << PrevCommand->getParamNameRange();"}},
[o]={
["clang/test/Sema/warn-documentation.cpp"]={"clang/test/Sema/warn-documentation.cpp:314:6: note: previous documentation","clang/test/Sema/warn-documentation.cpp:321:6: note: previous documentation","clang/test/Sema/warn-documentation.cpp:585:6: note: previous documentation"}
}
},
},
["note_doc_tparam_name_suggestion"]={
["note_doc_tparam_name_suggestion"]={
[f]="did you mean \'A\'?",
[b]="did you mean \'A\'?",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="did you mean \'%0\'?",
[h]="did you mean \'%0\'?",
[g]=b,
[j]=i,
[e]="did you mean \'(.*?)\'\\?",
[k]="did you mean \'(.*?)\'\\?",
[d]=a,
[l]=a,
[c]=nb,
[c]=vb,
[m]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels."},
[m]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels."},
[n]={{ob,349,"void Sema::actOnTParamCommandParamNameArg(TParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  if (!CorrectedName.empty()) {\n    Diag(ArgLocBegin, diag::note_doc_tparam_name_suggestion) << CorrectedName << FixItHint::CreateReplacement(ArgRange, CorrectedName);"}}
[n]={{Nb,349,"void Sema::actOnTParamCommandParamNameArg(TParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  if (!CorrectedName.empty()) {\n    Diag(ArgLocBegin, diag::note_doc_tparam_name_suggestion) << CorrectedName << FixItHint::CreateReplacement(ArgRange, CorrectedName);"}}
},
},
["note_doc_tparam_previous"]={
["note_doc_tparam_previous"]={
[f]=Yb,
[b]=xc,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]=Yb,
[h]=xc,
[g]=b,
[j]=i,
[e]=Yb,
[k]=xc,
[d]=a,
[l]=a,
[c]=nb,
[c]=vb,
[m]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels."},
[m]={"34df220410b3",1343774226,"Comment parsing: add support for \\tparam command on all levels."},
[n]={{ob,324,"void Sema::actOnTParamCommandParamNameArg(TParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  if (resolveTParamReference(Arg, TemplateParameters, &Position)) {\n    if (PrevCommand) {\n      Diag(PrevCommand->getLocation(), diag::note_doc_tparam_previous) << PrevCommand->getParamNameRange();"}}
[n]={{Nb,324,"void Sema::actOnTParamCommandParamNameArg(TParamCommandComment *Command, SourceLocation ArgLocBegin, SourceLocation ArgLocEnd, StringRef Arg) {\n  if (resolveTParamReference(Arg, TemplateParameters, &Position)) {\n    if (PrevCommand) {\n      Diag(PrevCommand->getLocation(), diag::note_doc_tparam_previous) << PrevCommand->getParamNameRange();"}}
},
},
["note_drv_address_sanitizer_debug_runtime"]={
["note_drv_address_sanitizer_debug_runtime"]={
[f]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet",
[b]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet",
[h]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet",
[g]=b,
[j]=i,
[e]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet",
[k]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"e0db196556f2",1413328544,"clang-cl: Diagnose the usage of ASAN with a debug runtime library"},
[m]={"e0db196556f2",1413328544,"clang-cl: Diagnose the usage of ASAN with a debug runtime library"},
Line 3,868: Line 4,736:
},
},
["note_drv_available_multilibs"]={
["note_drv_available_multilibs"]={
[f]="available multilibs are:A",
[b]="available multilibs are:A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="available multilibs are:%0",
[h]="available multilibs are:%0",
[g]=b,
[j]=i,
[e]="available multilibs are\\:(.*?)",
[k]="available multilibs are\\:(.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"028c1033b1ed",1687186972,"[Driver][BareMetal] Error if no matching multilib"},
[m]={"028c1033b1ed",1687186972,"[Driver][BareMetal] Error if no matching multilib"},
Line 3,880: Line 4,748:
},
},
["note_drv_command_failed_diag_msg"]={
["note_drv_command_failed_diag_msg"]={
[f]="diagnostic msg: A",
[b]="diagnostic msg: A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="diagnostic msg: %0",
[h]="diagnostic msg: %0",
[g]=b,
[j]=i,
[e]="diagnostic msg\\: (.*?)",
[k]="diagnostic msg\\: (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"e3805fc11821",1311193592,"When the compiler crashes, the compiler driver now produces diagnostic information "},
[m]={"e3805fc11821",1311193592,"When the compiler crashes, the compiler driver now produces diagnostic information "},
[n]={{H,1694,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // If lld failed, rerun it again with --reproduce.\n  if (IsLLD) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << BugReporMsg;"},{H,1695,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // If lld failed, rerun it again with --reproduce.\n  if (IsLLD) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << TmpName;"},{H,1696,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // If lld failed, rerun it again with --reproduce.\n  if (IsLLD) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << \"\\n\\n********************\";"},{H,1715,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  for (InputList::iterator it = Inputs.begin(), ie = Inputs.end(); it != ie;) {\n    // Ignore input from stdin or any inputs that cannot be preprocessed.\n    // Check type first as not all linker inputs have a value.\n    if (types::getPreprocessedType(it->first) == types::TY_INVALID) {\n    } else if (!strcmp(it->second->getValue(), \"-\")) {\n      Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Error generating preprocessed source(s) - \""},{H,1730,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  if (Inputs.empty()) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Error generating preprocessed source(s) - \""},{H,1746,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  if (ArchNames.size() > 1) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Error generating preprocessed source(s) - cannot generate \""},{H,1764,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // If there were errors building the compilation, quit now.\n  if (Trap.hasErrorOccurred()) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Error generating preprocessed source(s).\";"},{H,1775,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // If any of the preprocessing commands failed, clean up and exit.\n  if (!FailingCommands.empty()) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Error generating preprocessed source(s).\";"},{H,1782,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  if (TempFiles.empty()) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Error generating preprocessed source(s).\";"},{H,1787,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  Diag(clang::diag::note_drv_command_failed_diag_msg) << BugReporMsg;"},{H,1792,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  for (const char *TempFile : TempFiles) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << TempFile;"},{H,1820,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  if (EC) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Error generating run script: \" << Script << \" \" << EC.message();"},{H,1834,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  if (EC) {\n  } else {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << Script;"},{H,1841,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // On darwin, provide information about the .crash diagnostic report.\n  if (llvm::Triple(llvm::sys::getProcessTriple()).isOSDarwin()) {\n    if (getCrashDiagnosticFile(ReproCrashFilename, CrashDiagDir)) {\n      Diag(clang::diag::note_drv_command_failed_diag_msg) << ReproCrashFilename.str();"},{H,1846,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // On darwin, provide information about the .crash diagnostic report.\n  if (llvm::Triple(llvm::sys::getProcessTriple()).isOSDarwin()) {\n    if (getCrashDiagnosticFile(ReproCrashFilename, CrashDiagDir)) {\n    } else { // Suggest a directory for the user to look for .crash files.\n      Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Crash backtrace is located in\";"},{H,1848,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // On darwin, provide information about the .crash diagnostic report.\n  if (llvm::Triple(llvm::sys::getProcessTriple()).isOSDarwin()) {\n    if (getCrashDiagnosticFile(ReproCrashFilename, CrashDiagDir)) {\n    } else { // Suggest a directory for the user to look for .crash files.\n      Diag(clang::diag::note_drv_command_failed_diag_msg) << CrashDiagDir.str();"},{H,1850,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // On darwin, provide information about the .crash diagnostic report.\n  if (llvm::Triple(llvm::sys::getProcessTriple()).isOSDarwin()) {\n    if (getCrashDiagnosticFile(ReproCrashFilename, CrashDiagDir)) {\n    } else { // Suggest a directory for the user to look for .crash files.\n      Diag(clang::diag::note_drv_command_failed_diag_msg) << \"(choose the .crash file that corresponds to your crash)\";"},{H,1855,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  Diag(clang::diag::note_drv_command_failed_diag_msg) << \"\\n\\n********************\";"}}
[n]={{L,1694,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // If lld failed, rerun it again with --reproduce.\n  if (IsLLD) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << BugReporMsg;"},{L,1695,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // If lld failed, rerun it again with --reproduce.\n  if (IsLLD) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << TmpName;"},{L,1696,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // If lld failed, rerun it again with --reproduce.\n  if (IsLLD) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << \"\\n\\n********************\";"},{L,1715,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  for (InputList::iterator it = Inputs.begin(), ie = Inputs.end(); it != ie;) {\n    // Ignore input from stdin or any inputs that cannot be preprocessed.\n    // Check type first as not all linker inputs have a value.\n    if (types::getPreprocessedType(it->first) == types::TY_INVALID) {\n    } else if (!strcmp(it->second->getValue(), \"-\")) {\n      Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Error generating preprocessed source(s) - \""},{L,1730,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  if (Inputs.empty()) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Error generating preprocessed source(s) - \""},{L,1746,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  if (ArchNames.size() > 1) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Error generating preprocessed source(s) - cannot generate \""},{L,1764,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // If there were errors building the compilation, quit now.\n  if (Trap.hasErrorOccurred()) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Error generating preprocessed source(s).\";"},{L,1775,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // If any of the preprocessing commands failed, clean up and exit.\n  if (!FailingCommands.empty()) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Error generating preprocessed source(s).\";"},{L,1782,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  if (TempFiles.empty()) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Error generating preprocessed source(s).\";"},{L,1787,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  Diag(clang::diag::note_drv_command_failed_diag_msg) << BugReporMsg;"},{L,1792,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  for (const char *TempFile : TempFiles) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << TempFile;"},{L,1820,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  if (EC) {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Error generating run script: \" << Script << \" \" << EC.message();"},{L,1834,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  if (EC) {\n  } else {\n    Diag(clang::diag::note_drv_command_failed_diag_msg) << Script;"},{L,1841,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // On darwin, provide information about the .crash diagnostic report.\n  if (llvm::Triple(llvm::sys::getProcessTriple()).isOSDarwin()) {\n    if (getCrashDiagnosticFile(ReproCrashFilename, CrashDiagDir)) {\n      Diag(clang::diag::note_drv_command_failed_diag_msg) << ReproCrashFilename.str();"},{L,1846,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // On darwin, provide information about the .crash diagnostic report.\n  if (llvm::Triple(llvm::sys::getProcessTriple()).isOSDarwin()) {\n    if (getCrashDiagnosticFile(ReproCrashFilename, CrashDiagDir)) {\n    } else { // Suggest a directory for the user to look for .crash files.\n      Diag(clang::diag::note_drv_command_failed_diag_msg) << \"Crash backtrace is located in\";"},{L,1848,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // On darwin, provide information about the .crash diagnostic report.\n  if (llvm::Triple(llvm::sys::getProcessTriple()).isOSDarwin()) {\n    if (getCrashDiagnosticFile(ReproCrashFilename, CrashDiagDir)) {\n    } else { // Suggest a directory for the user to look for .crash files.\n      Diag(clang::diag::note_drv_command_failed_diag_msg) << CrashDiagDir.str();"},{L,1850,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  // On darwin, provide information about the .crash diagnostic report.\n  if (llvm::Triple(llvm::sys::getProcessTriple()).isOSDarwin()) {\n    if (getCrashDiagnosticFile(ReproCrashFilename, CrashDiagDir)) {\n    } else { // Suggest a directory for the user to look for .crash files.\n      Diag(clang::diag::note_drv_command_failed_diag_msg) << \"(choose the .crash file that corresponds to your crash)\";"},{L,1855,"// When clang crashes, produce diagnostic information including the fully\n// preprocessed source file(s).  Request that the developer attach the\n// diagnostic information to a bug report.\nvoid Driver::generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand, StringRef AdditionalInformation, CompilationDiagnosticReport *Report) {\n  Diag(clang::diag::note_drv_command_failed_diag_msg) << \"\\n\\n********************\";"}}
},
},
["note_drv_config_file_searched_in"]={
["note_drv_config_file_searched_in"]={
[f]="was searched for in the directory: A",
[b]="was searched for in the directory: A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="was searched for in the directory: %0",
[h]="was searched for in the directory: %0",
[g]=b,
[j]=i,
[e]="was searched for in the directory\\: (.*?)",
[k]="was searched for in the directory\\: (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"c92ca91472b9",1514656766,"Enable configuration files in clang"},
[m]={"c92ca91472b9",1514656766,"Enable configuration files in clang"},
[n]={{H,1114,"bool Driver::loadConfigFiles() {\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      } else if (!ExpCtx.findConfigFile(CfgFileName, CfgFilePath)) {\n        for (const StringRef &SearchDir : CfgFileSearchDirs)\n          if (!SearchDir.empty())\n            Diag(diag::note_drv_config_file_searched_in) << SearchDir;"}}
[n]={{L,1114,"bool Driver::loadConfigFiles() {\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      } else if (!ExpCtx.findConfigFile(CfgFileName, CfgFilePath)) {\n        for (const StringRef &SearchDir : CfgFileSearchDirs)\n          if (!SearchDir.empty())\n            Diag(diag::note_drv_config_file_searched_in) << SearchDir;"}}
},
},
["note_drv_t_option_is_global"]={
["note_drv_t_option_is_global"]={
[f]="the last \'/TC\' or \'/TP\' option takes precedence over earlier instances",
[b]="the last \'/TC\' or \'/TP\' option takes precedence over earlier instances",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="the last \'/TC\' or \'/TP\' option takes precedence over earlier instances",
[h]="the last \'/TC\' or \'/TP\' option takes precedence over earlier instances",
[g]=b,
[j]=i,
[e]="the last \'\\/TC\' or \'\\/TP\' option takes precedence over earlier instances",
[k]="the last \'\\/TC\' or \'\\/TP\' option takes precedence over earlier instances",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"0d0b19cbe1e3",1376332457,"clang-cl: Expand warning about /TC and /TP override, and expand test"},
[m]={"0d0b19cbe1e3",1376332457,"clang-cl: Expand warning about /TC and /TP override, and expand test"},
[n]={{H,2629,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  // The last /TC or /TP option sets the input type to C or C++ globally.\n  if (Arg *TCTP = Args.getLastArgNoClaim(options::OPT__SLASH_TC, options::OPT__SLASH_TP)) {\n    if (ShowNote)\n      Diag(clang::diag::note_drv_t_option_is_global);"}}
[n]={{L,2629,"// Construct a the list of inputs and their types.\nvoid Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, InputList &Inputs) const {\n  // The last /TC or /TP option sets the input type to C or C++ globally.\n  if (Arg *TCTP = Args.getLastArgNoClaim(options::OPT__SLASH_TC, options::OPT__SLASH_TP)) {\n    if (ShowNote)\n      Diag(clang::diag::note_drv_t_option_is_global);"}}
},
},
["note_drv_use_standard"]={
["note_drv_use_standard"]={
[f]="use \'A\'... for \'B\' standard",
[b]="use \'A\'... for \'B\' standard",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use \'%0\'%select{| or \'%3\'|, \'%3\', or \'%4\'|, \'%3\', \'%4\', or \'%5\'}2 for \'%1\' standard",
[h]="use \'%0\'%select{| or \'%3\'|, \'%3\', or \'%4\'|, \'%3\', \'%4\', or \'%5\'}2 for \'%1\' standard",
[g]=b,
[j]=i,
[e]="use \'(.*?)\'(?:| or \'(.*?)\'|, \'(.*?)\', or \'(.*?)\'|, \'(.*?)\', \'(.*?)\', or \'(.*?)\') for \'(.*?)\' standard",
[k]="use \'(.*?)\'(?:| or \'(.*?)\'|, \'(.*?)\', or \'(.*?)\'|, \'(.*?)\', \'(.*?)\', or \'(.*?)\') for \'(.*?)\' standard",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"c91daf1cf9a4",1487112260,"[Driver] Report available language standards on user error"},
[m]={"c91daf1cf9a4",1487112260,"[Driver] Report available language standards on user error"},
[n]={{bc,3568,"bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, const llvm::Triple &T, std::vector<std::string> &Includes, DiagnosticsEngine &Diags) {\n  if (const Arg *A = Args.getLastArg(OPT_std_EQ)) {\n    if (LangStd == LangStandard::lang_unspecified) {\n      // Report supported standards with short description.\n      for (unsigned KindValue = 0; KindValue != LangStandard::lang_unspecified; ++KindValue) {\n        if (IsInputCompatibleWithStandard(IK, Std)) {\n          auto Diag = Diags.Report(diag::note_drv_use_standard);"}}
[n]={{sc,3568,"bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, const llvm::Triple &T, std::vector<std::string> &Includes, DiagnosticsEngine &Diags) {\n  if (const Arg *A = Args.getLastArg(OPT_std_EQ)) {\n    if (LangStd == LangStandard::lang_unspecified) {\n      // Report supported standards with short description.\n      for (unsigned KindValue = 0; KindValue != LangStandard::lang_unspecified; ++KindValue) {\n        if (IsInputCompatibleWithStandard(IK, Std)) {\n          auto Diag = Diags.Report(diag::note_drv_use_standard);"}}
},
},
["note_drv_verify_prefix_spelling"]={
["note_drv_verify_prefix_spelling"]={
[f]="-verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores",
[b]="-verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="-verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores",
[h]="-verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores",
[g]=b,
[j]=i,
[e]="\\-verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores",
[k]="\\-verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"05e46484825f",1513391002,"[VerifyDiagnosticConsumer] support -verify=<prefixes>"},
[m]={"05e46484825f",1513391002,"[VerifyDiagnosticConsumer] support -verify=<prefixes>"},
[n]={{bc,2217,"static bool checkVerifyPrefixes(const std::vector<std::string> &VerifyPrefixes, DiagnosticsEngine &Diags) {\n  for (const auto &Prefix : VerifyPrefixes) {\n    if (BadChar != Prefix.end() || !isLetter(Prefix[0])) {\n      Diags.Report(diag::note_drv_verify_prefix_spelling);"}}
[n]={{sc,2217,"static bool checkVerifyPrefixes(const std::vector<std::string> &VerifyPrefixes, DiagnosticsEngine &Diags) {\n  for (const auto &Prefix : VerifyPrefixes) {\n    if (BadChar != Prefix.end() || !isLetter(Prefix[0])) {\n      Diags.Report(diag::note_drv_verify_prefix_spelling);"}}
},
},
["note_due_to_dllexported_class"]={
["note_due_to_dllexported_class"]={
[f]="due to A being dllexported...",
[b]="due to A being dllexported...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="due to %0 being dllexported%select{|; try compiling in C++11 mode}1",
[h]="due to %0 being dllexported%select{|; try compiling in C++11 mode}1",
[g]=b,
[j]=i,
[e]="due to (.*?) being dllexported(?:|; try compiling in C\\+\\+11 mode)",
[k]="due to (.*?) being dllexported(?:|; try compiling in C\\+\\+11 mode)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5870373d1954",1424480844,"Improve diagnostic when failing to synthesize implicit member due to dllexport (PR22591)"},
[m]={"5870373d1954",1424480844,"Improve diagnostic when failing to synthesize implicit member due to dllexport (PR22591)"},
[n]={{z,1003,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::MarkingClassDllexported:\n      Diags.Report(Active->PointOfInstantiation, diag::note_due_to_dllexported_class) << cast<CXXRecordDecl>(Active->Entity) << !getLangOpts().CPlusPlus11;"}}
[n]={{G,1003,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::MarkingClassDllexported:\n      Diags.Report(Active->PointOfInstantiation, diag::note_due_to_dllexported_class) << cast<CXXRecordDecl>(Active->Entity) << !getLangOpts().CPlusPlus11;"}},
[o]={
["clang/test/SemaCXX/default-arg-closures.cpp"]={"clang/test/SemaCXX/default-arg-closures.cpp:13:12: note: due to \'ExportDefaultCtorClosure\' being dllexported"}
}
},
},
["note_duplicate_asm_operand_name"]={
["note_duplicate_asm_operand_name"]={
[f]="asm operand name \"A\" first referenced here",
[b]="asm operand name \"A\" first referenced here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="asm operand name \"%0\" first referenced here",
[h]="asm operand name \"%0\" first referenced here",
[g]=b,
[j]=i,
[e]="asm operand name \"(.*?)\" first referenced here",
[k]="asm operand name \"(.*?)\" first referenced here",
[d]=a,
[l]=a,
[c]="Inline Assembly Issue",
[c]="Inline Assembly Issue",
[m]={"954ec09aed4f",1559178346,"clang support gnu asm goto."},
[m]={"954ec09aed4f",1559178346,"clang support gnu asm goto."},
[n]={{Tb,738,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n  if (Found != NamedOperandList.end()) {\n    Diag(Found->second->getBeginLoc(), diag::note_duplicate_asm_operand_name) << Found->first;"}}
[n]={{mc,738,"StmtResult Sema::ActOnGCCAsmStmt(SourceLocation AsmLoc, bool IsSimple, bool IsVolatile, unsigned NumOutputs, unsigned NumInputs, IdentifierInfo **Names, MultiExprArg constraints, MultiExprArg Exprs, Expr *asmString, MultiExprArg clobbers, unsigned NumLabels, SourceLocation RParenLoc) {\n  if (Found != NamedOperandList.end()) {\n    Diag(Found->second->getBeginLoc(), diag::note_duplicate_asm_operand_name) << Found->first;"}},
[o]={
["clang/test/Sema/asm.c"]={"clang/test/Sema/asm.c:300:24: note: asm operand name \"lab\" first referenced here","clang/test/Sema/asm.c:303:62: note: asm operand name \"lab\" first referenced here","clang/test/Sema/asm.c:309:25: note: asm operand name \"lab\" first referenced here","clang/test/Sema/asm.c:312:25: note: asm operand name \"lab\" first referenced here"}
}
},
},
["note_duplicate_case_prev"]={
["note_duplicate_case_prev"]={
[f]="previous case defined here",
[b]="previous case defined here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="previous case defined here",
[h]="previous case defined here",
[g]=b,
[j]=i,
[e]="previous case defined here",
[k]="previous case defined here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={wb,1236199783,vb},
[m]={Jb,1236199783,Kb},
[n]={{A,1281,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  for (SwitchCase *SC = SS->getSwitchCaseList(); SC && !HasDependentValue; SC = SC->getNextSwitchCase()) {\n    if (DefaultStmt *DS = dyn_cast<DefaultStmt>(SC)) {\n      if (TheDefaultStmt) {\n        Diag(TheDefaultStmt->getDefaultLoc(), diag::note_duplicate_case_prev);"},{A,1384,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (!HasDependentValue) {\n    if (!CaseVals.empty()) {\n      for (unsigned i = 0, e = CaseVals.size(); i != e; ++i) {\n        if (i != 0 && CaseVals[i].first == CaseVals[i - 1].first) {\n          Diag(CaseVals[i - 1].second->getLHS()->getBeginLoc(), diag::note_duplicate_case_prev);"},{A,1477,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (!HasDependentValue) {\n    // Detect duplicate case ranges, which usually don\'t exist at all in\n    // the first place.\n    if (!CaseRanges.empty()) {\n      // Rescan the ranges, looking for overlap with singleton values and other\n      // ranges.  Since the range list is sorted, we only need to compare case\n      // ranges with their neighbors.\n      for (unsigned i = 0, e = CaseRanges.size(); i != e; ++i) {\n        if (OverlapStmt) {\n          Diag(OverlapStmt->getLHS()->getBeginLoc(), diag::note_duplicate_case_prev);"}}
[n]={{H,1281,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  for (SwitchCase *SC = SS->getSwitchCaseList(); SC && !HasDependentValue; SC = SC->getNextSwitchCase()) {\n    if (DefaultStmt *DS = dyn_cast<DefaultStmt>(SC)) {\n      if (TheDefaultStmt) {\n        Diag(TheDefaultStmt->getDefaultLoc(), diag::note_duplicate_case_prev);"},{H,1384,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (!HasDependentValue) {\n    if (!CaseVals.empty()) {\n      for (unsigned i = 0, e = CaseVals.size(); i != e; ++i) {\n        if (i != 0 && CaseVals[i].first == CaseVals[i - 1].first) {\n          Diag(CaseVals[i - 1].second->getLHS()->getBeginLoc(), diag::note_duplicate_case_prev);"},{H,1477,"StmtResult Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, Stmt *BodyStmt) {\n  if (!HasDependentValue) {\n    // Detect duplicate case ranges, which usually don\'t exist at all in\n    // the first place.\n    if (!CaseRanges.empty()) {\n      // Rescan the ranges, looking for overlap with singleton values and other\n      // ranges.  Since the range list is sorted, we only need to compare case\n      // ranges with their neighbors.\n      for (unsigned i = 0, e = CaseRanges.size(); i != e; ++i) {\n        if (OverlapStmt) {\n          Diag(OverlapStmt->getLHS()->getBeginLoc(), diag::note_duplicate_case_prev);"}},
[o]={
["clang/test/CXX/stmt.stmt/stmt.label/p1.cpp"]={"clang/test/CXX/stmt.stmt/stmt.label/p1.cpp:23:5: note: previous case defined here"}
}
},
},
["note_duplicate_element"]={
["note_duplicate_element"]={
[f]="element A also has value B",
[b]="element A also has value B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="element %0 also has value %1",
[h]="element %0 also has value %1",
[g]=b,
[j]=i,
[e]="element (.*?) also has value (.*?)",
[k]="element (.*?) also has value (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"73e306e548cd",1346358744,"Add -Wduplicate-enum warning.  Clang will emit this warning when an implicitly"},
[m]={"73e306e548cd",1346358744,"Add -Wduplicate-enum warning.  Clang will emit this warning when an implicitly"},
[n]={{t,19669,"// Emits a warning when an element is implicitly set a value that\n// a previous element has already been set to.\nstatic void CheckForDuplicateEnumValues(Sema &S, ArrayRef<Decl *> Elements, EnumDecl *Enum, QualType EnumType) {\n  // Emit diagnostics.\n  for (const auto &Vec : DupVector) {\n    // Emit one note for each of the remaining enum constants with\n    // the same value.\n    for (auto *ECD : llvm::drop_begin(*Vec))\n      S.Diag(ECD->getLocation(), diag::note_duplicate_element) << ECD << toString(ECD->getInitVal(), 10) << ECD->getSourceRange();"}}
[n]={{u,19669,"// Emits a warning when an element is implicitly set a value that\n// a previous element has already been set to.\nstatic void CheckForDuplicateEnumValues(Sema &S, ArrayRef<Decl *> Elements, EnumDecl *Enum, QualType EnumType) {\n  // Emit diagnostics.\n  for (const auto &Vec : DupVector) {\n    // Emit one note for each of the remaining enum constants with\n    // the same value.\n    for (auto *ECD : llvm::drop_begin(*Vec))\n      S.Diag(ECD->getLocation(), diag::note_duplicate_element) << ECD << toString(ECD->getInitVal(), 10) << ECD->getSourceRange();"}},
[o]={
["clang/test/Sema/warn-duplicate-enum.c"]={"clang/test/Sema/warn-duplicate-enum.c:4:3: note: element \'A1\' also has value 0","clang/test/Sema/warn-duplicate-enum.c:10:3: note: element \'B1\' also has value -1","clang/test/Sema/warn-duplicate-enum.c:15:3: note: element \'B6\' also has value 0","clang/test/Sema/warn-duplicate-enum.c:18:23: note: element \'C3\' also has value 0","clang/test/Sema/warn-duplicate-enum.c:26:3: note: element \'D5\' also has value 2"}
}
},
},
["note_empty_body_on_separate_line"]={
["note_empty_body_on_separate_line"]={
[f]="put the semicolon on a separate line to silence this warning",
[b]="put the semicolon on a separate line to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="put the semicolon on a separate line to silence this warning",
[h]="put the semicolon on a separate line to silence this warning",
[g]=b,
[j]=i,
[e]="put the semicolon on a separate line to silence this warning",
[k]="put the semicolon on a separate line to silence this warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)"},
[m]={"800ddf3dda7b",1329257672,"Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)"},
[n]={{y,17891,"void Sema::DiagnoseEmptyStmtBody(SourceLocation StmtLoc, const Stmt *Body, unsigned DiagID) {\n  Diag(NBody->getSemiLoc(), diag::note_empty_body_on_separate_line);"},{y,17956,"void Sema::DiagnoseEmptyLoopBody(const Stmt *S, const Stmt *PossibleBody) {\n  if (ProbableTypo) {\n    Diag(NBody->getSemiLoc(), diag::note_empty_body_on_separate_line);"}}
[n]={{D,17891,"void Sema::DiagnoseEmptyStmtBody(SourceLocation StmtLoc, const Stmt *Body, unsigned DiagID) {\n  Diag(NBody->getSemiLoc(), diag::note_empty_body_on_separate_line);"},{D,17956,"void Sema::DiagnoseEmptyLoopBody(const Stmt *S, const Stmt *PossibleBody) {\n  if (ProbableTypo) {\n    Diag(NBody->getSemiLoc(), diag::note_empty_body_on_separate_line);"}},
[o]={
["clang/test/SemaCXX/warn-empty-body.cpp"]={"clang/test/SemaCXX/warn-empty-body.cpp:13:11: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:17:22: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:18:22: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:23:18: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:49:22: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:53:14: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:86:16: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:26:21: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:31:28: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:36:28: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:43:14: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:56:21: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:59:21: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:63:21: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:69:21: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:81:16: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:176:26: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:184:12: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:192:19: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:199:19: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:273:9: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:279:20: note: put the semicolon on a separate line to silence this warning","clang/test/SemaCXX/warn-empty-body.cpp:281:19: note: put the semicolon on a separate line to silence this warning"}
}
},
},
["note_empty_parens_default_ctor"]={
["note_empty_parens_default_ctor"]={
[f]="remove parentheses to declare a variable",
[b]="remove parentheses to declare a variable",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="remove parentheses to declare a variable",
[h]="remove parentheses to declare a variable",
[g]=b,
[j]=i,
[e]="remove parentheses to declare a variable",
[k]="remove parentheses to declare a variable",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"8d06f424480e",1326412409,"Improve 0-argument -Wvexing-parse diagnostic by adding notes with fix-its:"},
[m]={"8d06f424480e",1326412409,"Improve 0-argument -Wvexing-parse diagnostic by adding notes with fix-its:"},
[n]={{B,3908,"/// Produce an appropriate diagnostic for an ambiguity between a function\n/// declarator and a C++ direct-initializer.\nstatic void warnAboutAmbiguousFunction(Sema &S, Declarator &D, DeclaratorChunk &DeclType, QualType RT) {\n  if (FTI.NumParams > 0) {\n  } else {\n    // Empty parens mean value-initialization, and no parens mean\n    // default initialization. These are equivalent if the default\n    // constructor is user-provided or if zero-initialization is a\n    // no-op.\n    if (RD && RD->hasDefinition() && (RD->isEmpty() || RD->hasUserProvidedDefaultConstructor()))\n      S.Diag(DeclType.Loc, diag::note_empty_parens_default_ctor) << FixItHint::CreateRemoval(ParenRange);"}}
[n]={{I,3908,"/// Produce an appropriate diagnostic for an ambiguity between a function\n/// declarator and a C++ direct-initializer.\nstatic void warnAboutAmbiguousFunction(Sema &S, Declarator &D, DeclaratorChunk &DeclType, QualType RT) {\n  if (FTI.NumParams > 0) {\n  } else {\n    // Empty parens mean value-initialization, and no parens mean\n    // default initialization. These are equivalent if the default\n    // constructor is user-provided or if zero-initialization is a\n    // no-op.\n    if (RD && RD->hasDefinition() && (RD->isEmpty() || RD->hasUserProvidedDefaultConstructor()))\n      S.Diag(DeclType.Loc, diag::note_empty_parens_default_ctor) << FixItHint::CreateRemoval(ParenRange);"}},
[o]={
["clang/test/FixIt/fixit-vexing-parse.cpp"]={"clang/test/FixIt/fixit-vexing-parse.cpp:44:9: note: remove parentheses to declare a variable","clang/test/FixIt/fixit-vexing-parse.cpp:45:9: note: remove parentheses to declare a variable","clang/test/FixIt/fixit-vexing-parse.cpp:69:8: note: remove parentheses to declare a variable","clang/test/FixIt/fixit-vexing-parse.cpp:72:8: note: remove parentheses to declare a variable"}
}
},
},
["note_empty_parens_function_call"]={
["note_empty_parens_function_call"]={
[f]="change this \',\' to a \';\' to call A",
[b]="change this \',\' to a \';\' to call A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="change this \',\' to a \';\' to call %0",
[h]="change this \',\' to a \';\' to call %0",
[g]=b,
[j]=i,
[e]="change this \',\' to a \';\' to call (.*?)",
[k]="change this \',\' to a \';\' to call (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"8d06f424480e",1326412409,"Improve 0-argument -Wvexing-parse diagnostic by adding notes with fix-its:"},
[m]={"8d06f424480e",1326412409,"Improve 0-argument -Wvexing-parse diagnostic by adding notes with fix-its:"},
[n]={{B,3877,"/// Produce an appropriate diagnostic for an ambiguity between a function\n/// declarator and a C++ direct-initializer.\nstatic void warnAboutAmbiguousFunction(Sema &S, Declarator &D, DeclaratorChunk &DeclType, QualType RT) {\n  // If the declaration looks like:\n  //  T var1,\n  //  f();\n  // and name lookup finds a function named \'f\', then the \',\' was\n  // probably intended to be a \';\'.\n  if (!D.isFirstDeclarator() && D.getIdentifier()) {\n    if (Comma.getFileID() != Name.getFileID() || Comma.getSpellingLineNumber() != Name.getSpellingLineNumber()) {\n      if (S.LookupName(Result, S.getCurScope()))\n        S.Diag(D.getCommaLoc(), diag::note_empty_parens_function_call) << FixItHint::CreateReplacement(D.getCommaLoc(), \";\") << D.getIdentifier();"}}
[n]={{I,3877,"/// Produce an appropriate diagnostic for an ambiguity between a function\n/// declarator and a C++ direct-initializer.\nstatic void warnAboutAmbiguousFunction(Sema &S, Declarator &D, DeclaratorChunk &DeclType, QualType RT) {\n  // If the declaration looks like:\n  //  T var1,\n  //  f();\n  // and name lookup finds a function named \'f\', then the \',\' was\n  // probably intended to be a \';\'.\n  if (!D.isFirstDeclarator() && D.getIdentifier()) {\n    if (Comma.getFileID() != Name.getFileID() || Comma.getSpellingLineNumber() != Name.getSpellingLineNumber()) {\n      if (S.LookupName(Result, S.getCurScope()))\n        S.Diag(D.getCommaLoc(), diag::note_empty_parens_function_call) << FixItHint::CreateReplacement(D.getCommaLoc(), \";\") << D.getIdentifier();"}},
[o]={
["clang/test/Parser/cxx-stmt.cpp"]={"clang/test/Parser/cxx-stmt.cpp:63:8: note: change this \',\' to a \';\' to call \'f6\'"}
}
},
},
["note_empty_parens_zero_initialize"]={
["note_empty_parens_zero_initialize"]={
[f]="replace parentheses with an initializer to declare a variable",
[b]="replace parentheses with an initializer to declare a variable",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="replace parentheses with an initializer to declare a variable",
[h]="replace parentheses with an initializer to declare a variable",
[g]=b,
[j]=i,
[e]="replace parentheses with an initializer to declare a variable",
[k]="replace parentheses with an initializer to declare a variable",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"8d06f424480e",1326412409,"Improve 0-argument -Wvexing-parse diagnostic by adding notes with fix-its:"},
[m]={"8d06f424480e",1326412409,"Improve 0-argument -Wvexing-parse diagnostic by adding notes with fix-its:"},
[n]={{B,3916,"/// Produce an appropriate diagnostic for an ambiguity between a function\n/// declarator and a C++ direct-initializer.\nstatic void warnAboutAmbiguousFunction(Sema &S, Declarator &D, DeclaratorChunk &DeclType, QualType RT) {\n  if (FTI.NumParams > 0) {\n  } else {\n    // Empty parens mean value-initialization, and no parens mean\n    // default initialization. These are equivalent if the default\n    // constructor is user-provided or if zero-initialization is a\n    // no-op.\n    if (RD && RD->hasDefinition() && (RD->isEmpty() || RD->hasUserProvidedDefaultConstructor()))\n    else {\n      if (!Init.empty())\n        S.Diag(DeclType.Loc, diag::note_empty_parens_zero_initialize) << FixItHint::CreateReplacement(ParenRange, Init);"}}
[n]={{I,3916,"/// Produce an appropriate diagnostic for an ambiguity between a function\n/// declarator and a C++ direct-initializer.\nstatic void warnAboutAmbiguousFunction(Sema &S, Declarator &D, DeclaratorChunk &DeclType, QualType RT) {\n  if (FTI.NumParams > 0) {\n  } else {\n    // Empty parens mean value-initialization, and no parens mean\n    // default initialization. These are equivalent if the default\n    // constructor is user-provided or if zero-initialization is a\n    // no-op.\n    if (RD && RD->hasDefinition() && (RD->isEmpty() || RD->hasUserProvidedDefaultConstructor()))\n    else {\n      if (!Init.empty())\n        S.Diag(DeclType.Loc, diag::note_empty_parens_zero_initialize) << FixItHint::CreateReplacement(ParenRange, Init);"}},
[o]={
["clang/test/CXX/basic/basic.link/p9.cpp"]={"clang/test/CXX/basic/basic.link/p9.cpp:9:8: note: replace parentheses with an initializer to declare a variable"}
}
},
},
["note_empty_using_if_exists_here"]={
["note_empty_using_if_exists_here"]={
[f]="using declaration annotated with \'using_if_exists\' here",
[b]="using declaration annotated with \'using_if_exists\' here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="using declaration annotated with \'using_if_exists\' here",
[h]="using declaration annotated with \'using_if_exists\' here",
[g]=b,
[j]=i,
[e]="using declaration annotated with \'using_if_exists\' here",
[k]="using declaration annotated with \'using_if_exists\' here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Pb,1615397021,Ob},
[m]={lc,1615397021,vc},
[n]={{r,367,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (const auto *EmptyD = dyn_cast<UnresolvedUsingIfExistsDecl>(D)) {\n    Diag(EmptyD->getLocation(), diag::note_empty_using_if_exists_here);"}}
[n]={{s,367,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (const auto *EmptyD = dyn_cast<UnresolvedUsingIfExistsDecl>(D)) {\n    Diag(EmptyD->getLocation(), diag::note_empty_using_if_exists_here);"}},
[o]={
["clang/test/SemaCXX/using-if-exists.cpp"]={"clang/test/SemaCXX/using-if-exists.cpp:8:1: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:32:1: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:37:1: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:53:3: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:53:3: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:54:3: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:53:3: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:89:3: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:108:3: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:136:3: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:136:3: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:136:3: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:163:1: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:177:5: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:216:1: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:217:1: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:88:3: note: using declaration annotated with \'using_if_exists\' here","clang/test/SemaCXX/using-if-exists.cpp:89:3: note: using declaration annotated with \'using_if_exists\' here"}
}
},
},
["note_enforce_read_only_placement"]={
["note_enforce_read_only_placement"]={
[f]="type was declared read-only here",
[b]="type was declared read-only here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="type was declared read-only here",
[h]="type was declared read-only here",
[g]=b,
[j]=i,
[e]="type was declared read\\-only here",
[k]="type was declared read\\-only here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={db,1625925174,eb},
[m]={fb,1625925174,nb},
[n]={{t,7439,"// This function emits warning and a corresponding note based on the\n// ReadOnlyPlacementAttr attribute. The warning checks that all global variable\n// declarations of an annotated type must be const qualified.\nvoid emitReadOnlyPlacementAttrWarning(Sema &S, const VarDecl *VD) {\n  if (const auto *ConstDecl = RD->getAttr<ReadOnlyPlacementAttr>()) {\n    S.Diag(ConstDecl->getLocation(), diag::note_enforce_read_only_placement);"}}
[n]={{u,7439,"// This function emits warning and a corresponding note based on the\n// ReadOnlyPlacementAttr attribute. The warning checks that all global variable\n// declarations of an annotated type must be const qualified.\nvoid emitReadOnlyPlacementAttrWarning(Sema &S, const VarDecl *VD) {\n  if (const auto *ConstDecl = RD->getAttr<ReadOnlyPlacementAttr>()) {\n    S.Diag(ConstDecl->getLocation(), diag::note_enforce_read_only_placement);"}},
[o]={
["clang/test/Sema/attr-read-only-placement.cpp"]={"clang/test/Sema/attr-read-only-placement.cpp:5:23: note: type was declared read-only here","clang/test/Sema/attr-read-only-placement.cpp:5:23: note: type was declared read-only here",Sc,Sc,Sc,Sc,Sc,"clang/test/Sema/attr-read-only-placement.cpp:40:23: note: type was declared read-only here"}
}
},
},
["note_enters_block_captures_cxx_obj"]={
["note_enters_block_captures_cxx_obj"]={
[f]="jump enters lifetime of block which captures a destructible C++ object",
[b]="jump enters lifetime of block which captures a destructible C++ object",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump enters lifetime of block which captures a destructible C++ object",
[h]="jump enters lifetime of block which captures a destructible C++ object",
[g]=b,
[j]=i,
[e]="jump enters lifetime of block which captures a destructible C\\+\\+ object",
[k]="jump enters lifetime of block which captures a destructible C\\+\\+ object",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Vb,1310407494,Qb},
[m]={wc,1310407494,yc},
[n]={{x,262,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_cxx_destructor:\n      Diags = ScopePair(diag::note_enters_block_captures_cxx_obj, diag::note_exits_block_captures_cxx_obj);"}}
[n]={{B,262,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_cxx_destructor:\n      Diags = ScopePair(diag::note_enters_block_captures_cxx_obj, diag::note_exits_block_captures_cxx_obj);"}},
[o]={
["clang/test/SemaCXX/goto.cpp"]={"clang/test/SemaCXX/goto.cpp:121:15: note: jump enters lifetime of block which captures a destructible C++ object"}
}
},
},
["note_enters_block_captures_non_trivial_c_struct"]={
["note_enters_block_captures_non_trivial_c_struct"]={
[f]="jump enters lifetime of block which captures a C struct that is non-trivial to destroy",
[b]="jump enters lifetime of block which captures a C struct that is non-trivial to destroy",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump enters lifetime of block which captures a C struct that is non-trivial to destroy",
[h]="jump enters lifetime of block which captures a C struct that is non-trivial to destroy",
[g]=b,
[j]=i,
[e]="jump enters lifetime of block which captures a C struct that is non\\-trivial to destroy",
[k]="jump enters lifetime of block which captures a C struct that is non\\-trivial to destroy",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"7275da0f2ee2",1519802155,"[ObjC] Allow declaring __strong pointer fields in structs in Objective-C"},
[m]={"7275da0f2ee2",1519802155,"[ObjC] Allow declaring __strong pointer fields in structs in Objective-C"},
[n]={{x,274,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_nontrivial_c_struct:\n      Diags = ScopePair(diag::note_enters_block_captures_non_trivial_c_struct, diag::note_exits_block_captures_non_trivial_c_struct);"}}
[n]={{B,274,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_nontrivial_c_struct:\n      Diags = ScopePair(diag::note_enters_block_captures_non_trivial_c_struct, diag::note_exits_block_captures_non_trivial_c_struct);"}},
[o]={
[zc]={"clang/test/SemaObjC/strong-in-c-struct.m:39:10: note: jump enters lifetime of block which captures a C struct that is non-trivial to destroy"}
}
},
},
["note_enters_block_captures_strong"]={
["note_enters_block_captures_strong"]={
[f]="jump enters lifetime of block which strongly captures a variable",
[b]="jump enters lifetime of block which strongly captures a variable",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump enters lifetime of block which strongly captures a variable",
[h]="jump enters lifetime of block which strongly captures a variable",
[g]=b,
[j]=i,
[e]="jump enters lifetime of block which strongly captures a variable",
[k]="jump enters lifetime of block which strongly captures a variable",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Vb,1310407494,Qb},
[m]={wc,1310407494,yc},
[n]={{x,266,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_objc_strong_lifetime:\n      Diags = ScopePair(diag::note_enters_block_captures_strong, diag::note_exits_block_captures_strong);"}}
[n]={{B,266,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_objc_strong_lifetime:\n      Diags = ScopePair(diag::note_enters_block_captures_strong, diag::note_exits_block_captures_strong);"}},
[o]={
["clang/test/SemaObjC/arc-jump-block.m"]={"clang/test/SemaObjC/arc-jump-block.m:25:45: note: jump enters lifetime of block which strongly captures a variable","clang/test/SemaObjC/arc-jump-block.m:22:45: note: jump enters lifetime of block which strongly captures a variable","clang/test/SemaObjC/arc-jump-block.m:25:45: note: jump enters lifetime of block which strongly captures a variable","clang/test/SemaObjC/arc-jump-block.m:22:45: note: jump enters lifetime of block which strongly captures a variable","clang/test/SemaObjC/arc-jump-block.m:22:45: note: jump enters lifetime of block which strongly captures a variable","clang/test/SemaObjC/arc-jump-block.m:87:14: note: jump enters lifetime of block which strongly captures a variable"}
}
},
},
["note_enters_block_captures_weak"]={
["note_enters_block_captures_weak"]={
[f]="jump enters lifetime of block which weakly captures a variable",
[b]="jump enters lifetime of block which weakly captures a variable",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump enters lifetime of block which weakly captures a variable",
[h]="jump enters lifetime of block which weakly captures a variable",
[g]=b,
[j]=i,
[e]="jump enters lifetime of block which weakly captures a variable",
[k]="jump enters lifetime of block which weakly captures a variable",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Vb,1310407494,Qb},
[m]={wc,1310407494,yc},
[n]={{x,270,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_objc_weak_lifetime:\n      Diags = ScopePair(diag::note_enters_block_captures_weak, diag::note_exits_block_captures_weak);"}}
[n]={{B,270,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_objc_weak_lifetime:\n      Diags = ScopePair(diag::note_enters_block_captures_weak, diag::note_exits_block_captures_weak);"}}
},
},
["note_enters_compound_literal_scope"]={
["note_enters_compound_literal_scope"]={
[f]="jump enters lifetime of a compound literal that is non-trivial to destruct",
[b]="jump enters lifetime of a compound literal that is non-trivial to destruct",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump enters lifetime of a compound literal that is non-trivial to destruct",
[h]="jump enters lifetime of a compound literal that is non-trivial to destruct",
[g]=b,
[j]=i,
[e]="jump enters lifetime of a compound literal that is non\\-trivial to destruct",
[k]="jump enters lifetime of a compound literal that is non\\-trivial to destruct",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={yb,1576908663,Db},
[m]={cc,1576908663,bc},
[n]={{x,293,"/// Build scope information for compound literals of C struct types that are\n/// non-trivial to destruct.\nvoid JumpScopeChecker::BuildScopeInformation(CompoundLiteralExpr *CLE, unsigned &ParentScope) {\n  unsigned InDiag = diag::note_enters_compound_literal_scope;"}}
[n]={{B,293,"/// Build scope information for compound literals of C struct types that are\n/// non-trivial to destruct.\nvoid JumpScopeChecker::BuildScopeInformation(CompoundLiteralExpr *CLE, unsigned &ParentScope) {\n  unsigned InDiag = diag::note_enters_compound_literal_scope;"}},
[o]={
[zc]={"clang/test/SemaObjC/strong-in-c-struct.m:61:11: note: jump enters lifetime of a compound literal that is non-trivial to destruct"}
}
},
},
["note_enters_statement_expression"]={
["note_enters_statement_expression"]={
[f]="jump enters a statement expression",
[b]="jump enters a statement expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump enters a statement expression",
[h]="jump enters a statement expression",
[g]=b,
[j]=i,
[e]="jump enters a statement expression",
[k]="jump enters a statement expression",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"202191060602",1688720293,"[Clang] Diagnose jumps into statement expressions"},
[m]={"202191060602",1688720293,"[Clang] Diagnose jumps into statement expressions"},
[n]={{x,479,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::StmtExprClass: {\n    Scopes.push_back(GotoScope(ParentScope, diag::note_enters_statement_expression,"}}
[n]={{B,479,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::StmtExprClass: {\n    Scopes.push_back(GotoScope(ParentScope, diag::note_enters_statement_expression,"}},
[o]={
["clang/test/Sema/scope-check.c"]={"clang/test/Sema/scope-check.c:128:15: note: jump enters a statement expression","clang/test/Sema/scope-check.c:68:11: note: jump enters a statement expression","clang/test/Sema/scope-check.c:257:11: note: jump enters a statement expression","clang/test/Sema/scope-check.c:244:11: note: jump enters a statement expression","clang/test/Sema/scope-check.c:240:24: note: jump enters a statement expression"}
}
},
},
["note_entity_declared_at"]={
["note_entity_declared_at"]={
[f]="A declared here",
[b]="A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 declared here",
[h]="%0 declared here",
[g]=b,
[j]=i,
[e]="(.*?) declared here",
[k]="(.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"2afa8780d62a",1401279614,"Consolidate some note diagnostics"},
[m]={"2afa8780d62a",1401279614,"Consolidate some note diagnostics"},
[n]={{y,6466,"/// Diagnose use of %s directive in an NSString which is being passed\n/// as formatting string to formatting method.\nstatic void DiagnoseCStringFormatDirectiveInCFAPI(Sema &S, const NamedDecl *FDecl, Expr **Args, unsigned NumArgs) {\n  if (S.FormatStringHasSArg(FormatString)) {\n    S.Diag(FDecl->getLocation(), diag::note_entity_declared_at) << FDecl->getDeclName();"},{cc,602,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///      \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  if (Found.empty() && !ErrorRecoveryLookup) {\n    if (!R.empty()) {\n      if (NamedDecl *ND = R.getAsSingle<NamedDecl>())\n        Diag(ND->getLocation(), diag::note_entity_declared_at) << IdInfo.Identifier;"},{cc,819,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///      \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  if (!Found.empty()) {\n    if (TypeDecl *TD = Found.getAsSingle<TypeDecl>()) {\n    } else if (Found.getAsSingle<TemplateDecl>()) {\n    } else {\n      if (NamedDecl *ND = Found.getAsSingle<NamedDecl>())\n        Diag(ND->getLocation(), diag::note_entity_declared_at) << IdInfo.Identifier;"},{t,9488,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  case InvalidKernelParam:\n    // OpenCL v1.2 s6.8 n:\n    // A kernel function argument cannot be declared\n    // of event_t type.\n    // Do not diagnose half type since it is diagnosed as invalid argument\n    // type for any function elsewhere.\n    if (!PT->isHalfType()) {\n      while ((Typedef = PT->getAs<TypedefType>())) {\n        // SourceLocation may be invalid for a built-in type.\n        if (Loc.isValid())\n          S.Diag(Loc, diag::note_entity_declared_at) << PT;"},{I,1464,"static void handlePreferredName(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TT = T->getAs<TypedefType>())\n    S.Diag(TT->getDecl()->getLocation(), diag::note_entity_declared_at) << TT->getDecl();"},{q,2783,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  // C++ [class]p3:\n  //  If a class is marked final and it appears as a base-type-specifier in\n  //  base-clause, the program is ill-formed.\n  if (FinalAttr *FA = CXXBaseDecl->getAttr<FinalAttr>()) {\n    Diag(CXXBaseDecl->getLocation(), diag::note_entity_declared_at) << CXXBaseDecl->getDeclName() << FA->getRange();"},{q,6300,"static void checkForMultipleExportedDefaultConstructors(Sema &S, CXXRecordDecl *Class) {\n  for (Decl *Member : Class->decls()) {\n    if (LastExportedDefaultCtor) {\n      S.Diag(CD->getLocation(), diag::note_entity_declared_at) << CD->getDeclName();"},{E,3925,"static void DiagnoseVariableSizedIvars(Sema &S, ObjCContainerDecl *OCD) {\n  if (FirstIvar && (FirstIvar == IntfDecl->all_declared_ivar_begin())) {\n    if (SuperClass) {\n      if (IsVariableSizedType(LastIvar->getType())) {\n        S.Diag(LastIvar->getLocation(), diag::note_entity_declared_at) << LastIvar->getDeclName();"},{r,197,"/// Check whether we\'re in an extern inline function and referring to a\n/// variable or function with internal linkage (C11 6.7.4p3).\n///\n/// This is only a warning because we used to silently accept this code, but\n/// in many cases it will not behave correctly. This is not enabled in C++ mode\n/// because the restriction language is a bit weaker (C++11 [basic.def.odr]p6)\n/// and so while there may still be user mistakes, most of the time we can\'t\n/// prove that there are errors.\nstatic void diagnoseUseOfInternalDeclInInlineFunction(Sema &S, const NamedDecl *D, SourceLocation Loc) {\n  S.Diag(D->getCanonicalDecl()->getLocation(), diag::note_entity_declared_at) << D;"},{r,348,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (LangOpts.OpenMP && DRD && !CurContext->containsDecl(D) && isa<VarDecl>(D)) {\n    Diag(D->getLocation(), diag::note_entity_declared_at) << D;"},{r,361,"/// 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  // [OpenMP 5.0], 2.19.7.3. declare mapper Directive, Restrictions\n  //  List-items in map clauses on this construct may only refer to the declared\n  //  variable var and entities that could be referenced by a procedure defined\n  //  at the same location.\n  // [OpenMP 5.2] Also allow iterator declared variables.\n  if (LangOpts.OpenMP && isa<VarDecl>(D) && !isOpenMPDeclareMapperVarDeclAllowed(cast<VarDecl>(D))) {\n    Diag(D->getLocation(), diag::note_entity_declared_at) << D;"},{r,406,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (isa<ParmVarDecl>(D) && isa<RequiresExprBodyDecl>(D->getDeclContext()) && !isUnevaluatedContext()) {\n    Diag(D->getLocation(), diag::note_entity_declared_at) << D;"},{r,19155,"void diagnoseUncapturableValueReferenceOrBinding(Sema &S, SourceLocation loc, ValueDecl *var) {\n  S.Diag(var->getLocation(), diag::note_entity_declared_at) << var;"},{r,19230,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  if (isa<BindingDecl>(Var)) {\n    if (!IsLambda || !S.getLangOpts().CPlusPlus) {\n    } else if (Diagnose && S.getLangOpts().CPlusPlus) {\n      S.Diag(Var->getLocation(), diag::note_entity_declared_at) << Var;"},{r,19354,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // FIXME: We should support capturing structured bindings in OpenMP.\n  if (!Invalid && BD && S.LangOpts.OpenMP) {\n    if (BuildAndDiagnose) {\n      S.Diag(Var->getLocation(), diag::note_entity_declared_at) << Var;"},{r,20837,"bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc, CallExpr *CE, FunctionDecl *FD) {\n  class CallReturnIncompleteDiagnoser : public TypeDiagnoser {\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      S.Diag(FD->getLocation(), diag::note_entity_declared_at) << FD->getDeclName();"},{s,1401,"ExprResult Sema::ParseObjCProtocolExpression(IdentifierInfo *ProtocolId, SourceLocation AtLoc, SourceLocation ProtoLoc, SourceLocation LParenLoc, SourceLocation ProtoIdLoc, SourceLocation RParenLoc) {\n  if (!PDecl->hasDefinition()) {\n    Diag(PDecl->getLocation(), diag::note_entity_declared_at) << PDecl;"},{u,7822,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // C++1z [temp.arg.template]p3: (DR 150)\n  //  A template-argument matches a template template-parameter P when P\n  //  is at least as specialized as the template-argument A.\n  // FIXME: We should enable RelaxedTemplateTemplateArgs by default as it is a\n  //  defect report resolution from C++17 and shouldn\'t be introduced by\n  //  concepts.\n  if (getLangOpts().RelaxedTemplateTemplateArgs) {\n    if (isTemplateTemplateParameterAtLeastAsSpecializedAs(Params, Template, Arg.getLocation())) {\n      if (!IsParamAtLeastAsConstrained) {\n        Diag(Param->getLocation(), diag::note_entity_declared_at) << Param;"},{u,7823,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // C++1z [temp.arg.template]p3: (DR 150)\n  //  A template-argument matches a template template-parameter P when P\n  //  is at least as specialized as the template-argument A.\n  // FIXME: We should enable RelaxedTemplateTemplateArgs by default as it is a\n  //  defect report resolution from C++17 and shouldn\'t be introduced by\n  //  concepts.\n  if (getLangOpts().RelaxedTemplateTemplateArgs) {\n    if (isTemplateTemplateParameterAtLeastAsSpecializedAs(Params, Template, Arg.getLocation())) {\n      if (!IsParamAtLeastAsConstrained) {\n        Diag(Template->getLocation(), diag::note_entity_declared_at) << Template;"}}
[n]={{D,6466,"/// Diagnose use of %s directive in an NSString which is being passed\n/// as formatting string to formatting method.\nstatic void DiagnoseCStringFormatDirectiveInCFAPI(Sema &S, const NamedDecl *FDecl, Expr **Args, unsigned NumArgs) {\n  if (S.FormatStringHasSArg(FormatString)) {\n    S.Diag(FDecl->getLocation(), diag::note_entity_declared_at) << FDecl->getDeclName();"},{jc,602,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///      \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  if (Found.empty() && !ErrorRecoveryLookup) {\n    if (!R.empty()) {\n      if (NamedDecl *ND = R.getAsSingle<NamedDecl>())\n        Diag(ND->getLocation(), diag::note_entity_declared_at) << IdInfo.Identifier;"},{jc,819,"/// Build a new nested-name-specifier for \"identifier::\", as described\n/// by ActOnCXXNestedNameSpecifier.\n///\n/// \\param S Scope in which the nested-name-specifier occurs.\n/// \\param IdInfo Parser information about an identifier in the\n///        nested-name-spec.\n/// \\param EnteringContext If true, enter the context specified by the\n///        nested-name-specifier.\n/// \\param SS Optional nested name specifier preceding the identifier.\n/// \\param ScopeLookupResult Provides the result of name lookup within the\n///        scope of the nested-name-specifier that was computed at template\n///        definition time.\n/// \\param ErrorRecoveryLookup Specifies if the method is called to improve\n///        error recovery and what kind of recovery is performed.\n/// \\param IsCorrectedToColon If not null, suggestion of replace \'::\' -> \':\'\n///        are allowed.  The bool value pointed by this parameter is set to\n///      \'true\' if the identifier is treated as if it was followed by \':\',\n///        not \'::\'.\n/// \\param OnlyNamespace If true, only considers namespaces in lookup.\n///\n/// This routine differs only slightly from ActOnCXXNestedNameSpecifier, in\n/// that it contains an extra parameter \\p ScopeLookupResult, which provides\n/// the result of name lookup within the scope of the nested-name-specifier\n/// that was computed at template definition time.\n///\n/// If ErrorRecoveryLookup is true, then this call is used to improve error\n/// recovery.  This means that it should not emit diagnostics, it should\n/// just return true on failure.  It also means it should only return a valid\n/// scope if it *knows* that the result is correct.  It should not return in a\n/// dependent context, for example. Nor will it extend \\p SS with the scope\n/// specifier.\nbool Sema::BuildCXXNestedNameSpecifier(Scope *S, NestedNameSpecInfo &IdInfo, bool EnteringContext, CXXScopeSpec &SS, NamedDecl *ScopeLookupResult, bool ErrorRecoveryLookup, bool *IsCorrectedToColon, bool OnlyNamespace) {\n  if (!Found.empty()) {\n    if (TypeDecl *TD = Found.getAsSingle<TypeDecl>()) {\n    } else if (Found.getAsSingle<TemplateDecl>()) {\n    } else {\n      if (NamedDecl *ND = Found.getAsSingle<NamedDecl>())\n        Diag(ND->getLocation(), diag::note_entity_declared_at) << IdInfo.Identifier;"},{u,9488,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  case InvalidKernelParam:\n    // OpenCL v1.2 s6.8 n:\n    // A kernel function argument cannot be declared\n    // of event_t type.\n    // Do not diagnose half type since it is diagnosed as invalid argument\n    // type for any function elsewhere.\n    if (!PT->isHalfType()) {\n      while ((Typedef = PT->getAs<TypedefType>())) {\n        // SourceLocation may be invalid for a built-in type.\n        if (Loc.isValid())\n          S.Diag(Loc, diag::note_entity_declared_at) << PT;"},{P,1464,"static void handlePreferredName(Sema &S, Decl *D, const ParsedAttr &AL) {\n  if (const auto *TT = T->getAs<TypedefType>())\n    S.Diag(TT->getDecl()->getLocation(), diag::note_entity_declared_at) << TT->getDecl();"},{r,2783,"/// Check the validity of a C++ base class specifier.\n///\n/// \\returns a new CXXBaseSpecifier if well-formed, emits diagnostics\n/// and returns NULL otherwise.\nCXXBaseSpecifier *Sema::CheckBaseSpecifier(CXXRecordDecl *Class, SourceRange SpecifierRange, bool Virtual, AccessSpecifier Access, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) {\n  // C++ [class]p3:\n  //  If a class is marked final and it appears as a base-type-specifier in\n  //  base-clause, the program is ill-formed.\n  if (FinalAttr *FA = CXXBaseDecl->getAttr<FinalAttr>()) {\n    Diag(CXXBaseDecl->getLocation(), diag::note_entity_declared_at) << CXXBaseDecl->getDeclName() << FA->getRange();"},{r,6300,"static void checkForMultipleExportedDefaultConstructors(Sema &S, CXXRecordDecl *Class) {\n  for (Decl *Member : Class->decls()) {\n    if (LastExportedDefaultCtor) {\n      S.Diag(CD->getLocation(), diag::note_entity_declared_at) << CD->getDeclName();"},{M,3925,"static void DiagnoseVariableSizedIvars(Sema &S, ObjCContainerDecl *OCD) {\n  if (FirstIvar && (FirstIvar == IntfDecl->all_declared_ivar_begin())) {\n    if (SuperClass) {\n      if (IsVariableSizedType(LastIvar->getType())) {\n        S.Diag(LastIvar->getLocation(), diag::note_entity_declared_at) << LastIvar->getDeclName();"},{s,197,"/// Check whether we\'re in an extern inline function and referring to a\n/// variable or function with internal linkage (C11 6.7.4p3).\n///\n/// This is only a warning because we used to silently accept this code, but\n/// in many cases it will not behave correctly. This is not enabled in C++ mode\n/// because the restriction language is a bit weaker (C++11 [basic.def.odr]p6)\n/// and so while there may still be user mistakes, most of the time we can\'t\n/// prove that there are errors.\nstatic void diagnoseUseOfInternalDeclInInlineFunction(Sema &S, const NamedDecl *D, SourceLocation Loc) {\n  S.Diag(D->getCanonicalDecl()->getLocation(), diag::note_entity_declared_at) << D;"},{s,348,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (LangOpts.OpenMP && DRD && !CurContext->containsDecl(D) && isa<VarDecl>(D)) {\n    Diag(D->getLocation(), diag::note_entity_declared_at) << D;"},{s,361,"/// 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  // [OpenMP 5.0], 2.19.7.3. declare mapper Directive, Restrictions\n  //  List-items in map clauses on this construct may only refer to the declared\n  //  variable var and entities that could be referenced by a procedure defined\n  //  at the same location.\n  // [OpenMP 5.2] Also allow iterator declared variables.\n  if (LangOpts.OpenMP && isa<VarDecl>(D) && !isOpenMPDeclareMapperVarDeclAllowed(cast<VarDecl>(D))) {\n    Diag(D->getLocation(), diag::note_entity_declared_at) << D;"},{s,406,"/// Determine whether the use of this declaration is valid, and\n/// emit any corresponding diagnostics.\n///\n/// This routine diagnoses various problems with referencing\n/// declarations that can occur when using a declaration. For example,\n/// it might warn if a deprecated or unavailable declaration is being\n/// used, or produce an error (and return true) if a C++0x deleted\n/// function is being used.\n///\n/// \\returns true if there was an error (this declaration cannot be\n/// referenced), false otherwise.\n///\nbool Sema::DiagnoseUseOfDecl(NamedDecl *D, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, bool ObjCPropertyAccess, bool AvoidPartialAvailabilityChecks, ObjCInterfaceDecl *ClassReceiver, bool SkipTrailingRequiresClause) {\n  if (isa<ParmVarDecl>(D) && isa<RequiresExprBodyDecl>(D->getDeclContext()) && !isUnevaluatedContext()) {\n    Diag(D->getLocation(), diag::note_entity_declared_at) << D;"},{s,19155,"void diagnoseUncapturableValueReferenceOrBinding(Sema &S, SourceLocation loc, ValueDecl *var) {\n  S.Diag(var->getLocation(), diag::note_entity_declared_at) << var;"},{s,19230,"// Certain capturing entities (lambdas, blocks etc.) are not allowed to capture\n// certain types of variables (unnamed, variably modified types etc.)\n// so check for eligibility.\nstatic bool isVariableCapturable(CapturingScopeInfo *CSI, ValueDecl *Var, SourceLocation Loc, const bool Diagnose, Sema &S) {\n  if (isa<BindingDecl>(Var)) {\n    if (!IsLambda || !S.getLangOpts().CPlusPlus) {\n    } else if (Diagnose && S.getLangOpts().CPlusPlus) {\n      S.Diag(Var->getLocation(), diag::note_entity_declared_at) << Var;"},{s,19354,"/// Capture the given variable in the lambda.\nstatic bool captureInLambda(LambdaScopeInfo *LSI, ValueDecl *Var, SourceLocation Loc, const bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const bool RefersToCapturedVariable, const Sema::TryCaptureKind Kind, SourceLocation EllipsisLoc, const bool IsTopScope, Sema &S, bool Invalid) {\n  // FIXME: We should support capturing structured bindings in OpenMP.\n  if (!Invalid && BD && S.LangOpts.OpenMP) {\n    if (BuildAndDiagnose) {\n      S.Diag(Var->getLocation(), diag::note_entity_declared_at) << Var;"},{s,20837,"bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc, CallExpr *CE, FunctionDecl *FD) {\n  class CallReturnIncompleteDiagnoser : public TypeDiagnoser {\n    void diagnose(Sema &S, SourceLocation Loc, QualType T) override {\n      S.Diag(FD->getLocation(), diag::note_entity_declared_at) << FD->getDeclName();"},{t,1401,"ExprResult Sema::ParseObjCProtocolExpression(IdentifierInfo *ProtocolId, SourceLocation AtLoc, SourceLocation ProtoLoc, SourceLocation LParenLoc, SourceLocation ProtoIdLoc, SourceLocation RParenLoc) {\n  if (!PDecl->hasDefinition()) {\n    Diag(PDecl->getLocation(), diag::note_entity_declared_at) << PDecl;"},{v,7822,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // C++1z [temp.arg.template]p3: (DR 150)\n  //  A template-argument matches a template template-parameter P when P\n  //  is at least as specialized as the template-argument A.\n  // FIXME: We should enable RelaxedTemplateTemplateArgs by default as it is a\n  //  defect report resolution from C++17 and shouldn\'t be introduced by\n  //  concepts.\n  if (getLangOpts().RelaxedTemplateTemplateArgs) {\n    if (isTemplateTemplateParameterAtLeastAsSpecializedAs(Params, Template, Arg.getLocation())) {\n      if (!IsParamAtLeastAsConstrained) {\n        Diag(Param->getLocation(), diag::note_entity_declared_at) << Param;"},{v,7823,"/// Check a template argument against its corresponding\n/// template template parameter.\n///\n/// This routine implements the semantics of C++ [temp.arg.template].\n/// It returns true if an error occurred, and false otherwise.\nbool Sema::CheckTemplateTemplateArgument(TemplateTemplateParmDecl *Param, TemplateParameterList *Params, TemplateArgumentLoc &Arg) {\n  // C++1z [temp.arg.template]p3: (DR 150)\n  //  A template-argument matches a template template-parameter P when P\n  //  is at least as specialized as the template-argument A.\n  // FIXME: We should enable RelaxedTemplateTemplateArgs by default as it is a\n  //  defect report resolution from C++17 and shouldn\'t be introduced by\n  //  concepts.\n  if (getLangOpts().RelaxedTemplateTemplateArgs) {\n    if (isTemplateTemplateParameterAtLeastAsSpecializedAs(Params, Template, Arg.getLocation())) {\n      if (!IsParamAtLeastAsConstrained) {\n        Diag(Template->getLocation(), diag::note_entity_declared_at) << Template;"}}
},
},
["note_enum_specialized_here"]={
["note_enum_specialized_here"]={
[f]="enum A was explicitly specialized here",
[b]="enum A was explicitly specialized here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="enum %0 was explicitly specialized here",
[h]="enum %0 was explicitly specialized here",
[g]=b,
[j]=i,
[e]="enum (.*?) was explicitly specialized here",
[k]="enum (.*?) was explicitly specialized here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"169f2190013d",1332793696,"Add a special-case diagnostic for one of the more obnoxious special cases of"},
[m]={"169f2190013d",1332793696,"Add a special-case diagnostic for one of the more obnoxious special cases of"},
[n]={{dc,6337,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n///  enum Kind {\n///    KnownValue = sizeof(T)\n///  };\n///\n///  bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n  if (ParentDC != D->getDeclContext()) {\n    if (!Result) {\n      if (isa<UsingShadowDecl>(D)) {\n      } else if (hasUncompilableErrorOccurred()) {\n      } else if (IsBeingInstantiated) {\n      } else if (EnumConstantDecl *ED = dyn_cast<EnumConstantDecl>(D)) {\n        Diag(Spec->getLocation(), diag::note_enum_specialized_here) << Context.getTypeDeclType(Spec);"}}
[n]={{nc,6337,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n///  enum Kind {\n///    KnownValue = sizeof(T)\n///  };\n///\n///  bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n  if (ParentDC != D->getDeclContext()) {\n    if (!Result) {\n      if (isa<UsingShadowDecl>(D)) {\n      } else if (hasUncompilableErrorOccurred()) {\n      } else if (IsBeingInstantiated) {\n      } else if (EnumConstantDecl *ED = dyn_cast<EnumConstantDecl>(D)) {\n        Diag(Spec->getLocation(), diag::note_enum_specialized_here) << Context.getTypeDeclType(Spec);"}},
[o]={
["clang/test/SemaCXX/enum-unscoped-nonexistent.cpp"]={"clang/test/SemaCXX/enum-unscoped-nonexistent.cpp:12:26: note: enum \'S<char>::E\' was explicitly specialized here"}
}
},
},
["note_equality_comparison_silence"]={
["note_equality_comparison_silence"]={
[f]="remove extraneous parentheses around the comparison to silence this warning",
[b]="remove extraneous parentheses around the comparison to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="remove extraneous parentheses around the comparison to silence this warning",
[h]="remove extraneous parentheses around the comparison to silence this warning",
[g]=b,
[j]=i,
[e]="remove extraneous parentheses around the comparison to silence this warning",
[k]="remove extraneous parentheses around the comparison to silence this warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"8b6ec6870f65",1296584662,"Warn for \"if ((a == b))\" where the equality expression is needlessly wrapped inside parentheses."},
[m]={"8b6ec6870f65",1296584662,"Warn for \"if ((a == b))\" where the equality expression is needlessly wrapped inside parentheses."},
[n]={{r,20914,"/// Redundant parentheses over an equality comparison can indicate\n/// that the user intended an assignment used as condition.\nvoid Sema::DiagnoseEqualityWithExtraParens(ParenExpr *ParenE) {\n  if (BinaryOperator *opE = dyn_cast<BinaryOperator>(E))\n    if (opE->getOpcode() == BO_EQ && opE->getLHS()->IgnoreParenImpCasts()->isModifiableLvalue(Context) == Expr::MLV_Valid) {\n      Diag(Loc, diag::note_equality_comparison_silence) << FixItHint::CreateRemoval(ParenERange.getBegin()) << FixItHint::CreateRemoval(ParenERange.getEnd());"}}
[n]={{s,20914,"/// Redundant parentheses over an equality comparison can indicate\n/// that the user intended an assignment used as condition.\nvoid Sema::DiagnoseEqualityWithExtraParens(ParenExpr *ParenE) {\n  if (BinaryOperator *opE = dyn_cast<BinaryOperator>(E))\n    if (opE->getOpcode() == BO_EQ && opE->getLHS()->IgnoreParenImpCasts()->isModifiableLvalue(Context) == Expr::MLV_Valid) {\n      Diag(Loc, diag::note_equality_comparison_silence) << FixItHint::CreateRemoval(ParenERange.getBegin()) << FixItHint::CreateRemoval(ParenERange.getEnd());"}},
[o]={
["clang/test/SemaCXX/warn-assignment-condition.cpp"]={"clang/test/SemaCXX/warn-assignment-condition.cpp:109:10: note: remove extraneous parentheses around the comparison to silence this warning","clang/test/SemaCXX/warn-assignment-condition.cpp:128:13: note: remove extraneous parentheses around the comparison to silence this warning","clang/test/SemaCXX/warn-assignment-condition.cpp:137:14: note: remove extraneous parentheses around the comparison to silence this warning"}
}
},
},
["note_equality_comparison_to_assign"]={
["note_equality_comparison_to_assign"]={
[f]="use \'=\' to turn this equality comparison into an assignment",
[b]="use \'=\' to turn this equality comparison into an assignment",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use \'=\' to turn this equality comparison into an assignment",
[h]="use \'=\' to turn this equality comparison into an assignment",
[g]=b,
[j]=i,
[e]="use \'\\=\' to turn this equality comparison into an assignment",
[k]="use \'\\=\' to turn this equality comparison into an assignment",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"8b6ec6870f65",1296584662,"Warn for \"if ((a == b))\" where the equality expression is needlessly wrapped inside parentheses."},
[m]={"8b6ec6870f65",1296584662,"Warn for \"if ((a == b))\" where the equality expression is needlessly wrapped inside parentheses."},
[n]={{r,20940,"/// Redundant parentheses over an equality comparison can indicate\n/// that the user intended an assignment used as condition.\nvoid Sema::DiagnoseEqualityWithExtraParens(ParenExpr *ParenE) {\n  if (BinaryOperator *opE = dyn_cast<BinaryOperator>(E))\n    if (opE->getOpcode() == BO_EQ && opE->getLHS()->IgnoreParenImpCasts()->isModifiableLvalue(Context) == Expr::MLV_Valid) {\n      Diag(Loc, diag::note_equality_comparison_to_assign) << FixItHint::CreateReplacement(Loc, \"=\");"},{A,195,"/// Diagnose unused comparisons, both builtin and overloaded operators.\n/// For \'==\' and \'!=\', suggest fixits for \'=\' or \'|=\'.\n///\n/// Adding a cast to void (or other expression wrappers) will prevent the\n/// warning from firing.\nstatic bool DiagnoseUnusedComparison(Sema &S, const Expr *E) {\n  // If the LHS is a plausible entity to assign to, provide a fixit hint to\n  // correct common typos.\n  if (CanAssign) {\n    if (Kind == Inequality)\n    else if (Kind == Equality)\n      S.Diag(Loc, diag::note_equality_comparison_to_assign) << FixItHint::CreateReplacement(Loc, \"=\");"}}
[n]={{s,20940,"/// Redundant parentheses over an equality comparison can indicate\n/// that the user intended an assignment used as condition.\nvoid Sema::DiagnoseEqualityWithExtraParens(ParenExpr *ParenE) {\n  if (BinaryOperator *opE = dyn_cast<BinaryOperator>(E))\n    if (opE->getOpcode() == BO_EQ && opE->getLHS()->IgnoreParenImpCasts()->isModifiableLvalue(Context) == Expr::MLV_Valid) {\n      Diag(Loc, diag::note_equality_comparison_to_assign) << FixItHint::CreateReplacement(Loc, \"=\");"},{H,195,"/// Diagnose unused comparisons, both builtin and overloaded operators.\n/// For \'==\' and \'!=\', suggest fixits for \'=\' or \'|=\'.\n///\n/// Adding a cast to void (or other expression wrappers) will prevent the\n/// warning from firing.\nstatic bool DiagnoseUnusedComparison(Sema &S, const Expr *E) {\n  // If the LHS is a plausible entity to assign to, provide a fixit hint to\n  // correct common typos.\n  if (CanAssign) {\n    if (Kind == Inequality)\n    else if (Kind == Equality)\n      S.Diag(Loc, diag::note_equality_comparison_to_assign) << FixItHint::CreateReplacement(Loc, \"=\");"}},
[o]={
["clang/test/Sema/unused-expr-system-header.c"]={"clang/test/Sema/unused-expr-system-header.c:6:20: note: use \'=\' to turn this equality comparison into an assignment","clang/test/Sema/unused-expr-system-header.c:9:20: note: use \'=\' to turn this equality comparison into an assignment"}
}
},
},
["note_equivalent_internal_linkage_decl"]={
["note_equivalent_internal_linkage_decl"]={
[f]="declared here...",
[b]="declared here...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declared here%select{ in module \'%1\'|}0",
[h]="declared here%select{ in module \'%1\'|}0",
[g]=b,
[j]=i,
[e]="declared here(?: in module \'(.*?)\'|)",
[k]="declared here(?: in module \'(.*?)\'|)",
[d]=a,
[l]=a,
[c]=Sb,
[c]=fc,
[m]={"2dbe4043e8f5",1446665192,"[modules] Generalize the workaround for multiple ambiguous definitions of"},
[m]={"2dbe4043e8f5",1446665192,"[modules] Generalize the workaround for multiple ambiguous definitions of"},
[n]={{P,10306,"void Sema::diagnoseEquivalentInternalLinkageDeclarations(SourceLocation Loc, const NamedDecl *D, ArrayRef<const NamedDecl *> Equiv) {\n  Diag(D->getLocation(), diag::note_equivalent_internal_linkage_decl) << !M << (M ? M->getFullModuleName() : \"\");"},{P,10311,"void Sema::diagnoseEquivalentInternalLinkageDeclarations(SourceLocation Loc, const NamedDecl *D, ArrayRef<const NamedDecl *> Equiv) {\n  for (auto *E : Equiv) {\n    Diag(E->getLocation(), diag::note_equivalent_internal_linkage_decl) << !M << (M ? M->getFullModuleName() : \"\");"}}
[n]={{X,10306,"void Sema::diagnoseEquivalentInternalLinkageDeclarations(SourceLocation Loc, const NamedDecl *D, ArrayRef<const NamedDecl *> Equiv) {\n  Diag(D->getLocation(), diag::note_equivalent_internal_linkage_decl) << !M << (M ? M->getFullModuleName() : \"\");"},{X,10311,"void Sema::diagnoseEquivalentInternalLinkageDeclarations(SourceLocation Loc, const NamedDecl *D, ArrayRef<const NamedDecl *> Equiv) {\n  for (auto *E : Equiv) {\n    Diag(E->getLocation(), diag::note_equivalent_internal_linkage_decl) << !M << (M ? M->getFullModuleName() : \"\");"}},
[o]={
["clang/test/Modules/submodules-merge-defs.cpp"]={"clang/test/Modules/Inputs/submodules-merge-defs/defs.h:71:22: note: declared here in module \'redef\'","clang/test/Modules/Inputs/submodules-merge-defs/defs.h:71:22: note: declared here in module \'stuff.use\'","clang/test/Modules/Inputs/submodules-merge-defs/defs.h:51:13: note: declared here in module \'redef\'","clang/test/Modules/Inputs/submodules-merge-defs/defs.h:51:13: note: declared here in module \'stuff.use\'","clang/test/Modules/Inputs/submodules-merge-defs/defs.h:51:13: note: declared here in module \'redef\'","clang/test/Modules/Inputs/submodules-merge-defs/defs.h:51:13: note: declared here in module \'stuff.use\'","clang/test/Modules/Inputs/submodules-merge-defs/defs.h:51:13: note: declared here in module \'redef\'","clang/test/Modules/Inputs/submodules-merge-defs/defs.h:51:13: note: declared here in module \'stuff.use\'"}
}
},
},
["note_evaluate_comparison_first"]={
["note_evaluate_comparison_first"]={
[f]="place parentheses around comparison expression to evaluate it first",
[b]="place parentheses around comparison expression to evaluate it first",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="place parentheses around comparison expression to evaluate it first",
[h]="place parentheses around comparison expression to evaluate it first",
[g]=b,
[j]=i,
[e]="place parentheses around comparison expression to evaluate it first",
[k]="place parentheses around comparison expression to evaluate it first",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"fe042e6aab26",1366164765,"Add warning group -Woverloaded-shift-op-parentheses to -Wparentheses.  This"},
[m]={"fe042e6aab26",1366164765,"Add warning group -Woverloaded-shift-op-parentheses to -Wparentheses.  This"},
[n]={{r,16033,"static void DiagnoseShiftCompare(Sema &S, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(S, OpLoc, S.PDiag(diag::note_evaluate_comparison_first), SourceRange(OCE->getArg(1)->getBeginLoc(), RHSExpr->getEndLoc()));"}}
[n]={{s,16033,"static void DiagnoseShiftCompare(Sema &S, SourceLocation OpLoc, Expr *LHSExpr, Expr *RHSExpr) {\n  SuggestParentheses(S, OpLoc, S.PDiag(diag::note_evaluate_comparison_first), SourceRange(OCE->getArg(1)->getBeginLoc(), RHSExpr->getEndLoc()));"}},
[o]={
["clang/test/Parser/cxx2a-spaceship.cpp"]={"clang/test/Parser/cxx2a-spaceship.cpp:13:21: note: place parentheses around comparison expression to evaluate it first","clang/test/Parser/cxx2a-spaceship.cpp:17:21: note: place parentheses around comparison expression to evaluate it first"}
}
},
},
["note_evaluating_exception_spec_here"]={
["note_evaluating_exception_spec_here"]={
[f]="in evaluation of exception specification for A needed here",
[b]="in evaluation of exception specification for A needed here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in evaluation of exception specification for %q0 needed here",
[h]="in evaluation of exception specification for %q0 needed here",
[g]=b,
[j]=i,
[e]="in evaluation of exception specification for (.*?) needed here",
[k]="in evaluation of exception specification for (.*?) needed here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5159bbad8b2b",1536186637,"PR38627: Fix handling of exception specification adjustment for"},
[m]={"5159bbad8b2b",1536186637,"PR38627: Fix handling of exception specification adjustment for"},
[n]={{z,927,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ExceptionSpecEvaluation:\n      Diags.Report(Active->PointOfInstantiation, diag::note_evaluating_exception_spec_here) << cast<FunctionDecl>(Active->Entity);"}}
[n]={{G,927,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ExceptionSpecEvaluation:\n      Diags.Report(Active->PointOfInstantiation, diag::note_evaluating_exception_spec_here) << cast<FunctionDecl>(Active->Entity);"}},
[o]={
["clang/test/SemaCXX/implicit-exception-spec.cpp"]={"clang/test/SemaCXX/implicit-exception-spec.cpp:21:16: note: in evaluation of exception specification for \'InClassInitializers::ConstExpr::ConstExpr\' needed here","clang/test/SemaCXX/implicit-exception-spec.cpp:28:28: note: in evaluation of exception specification for \'InClassInitializers::TemplateArg::TemplateArg\' needed here","clang/test/SemaCXX/implicit-exception-spec.cpp:36:7: note: in evaluation of exception specification for \'InClassInitializers::Nested::Inner::Inner\' needed here","clang/test/SemaCXX/implicit-exception-spec.cpp:35:30: note: in evaluation of exception specification for \'InClassInitializers::Nested::Nested\' needed here","clang/test/SemaCXX/implicit-exception-spec.cpp:41:13: note: in evaluation of exception specification for \'InClassInitializers::Nested2::Inner::Inner\' needed here","clang/test/SemaCXX/implicit-exception-spec.cpp:51:30: note: in evaluation of exception specification for \'ExceptionSpecification::Nested::Nested\' needed here"}
}
},
},
["note_exception_spec_deprecated"]={
["note_exception_spec_deprecated"]={
[f]="use \'A\' instead",
[b]="use \'A\' instead",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use \'%0\' instead",
[h]="use \'%0\' instead",
[g]=b,
[j]=i,
[e]="use \'(.*?)\' instead",
[k]="use \'(.*?)\' instead",
[d]=a,
[l]=a,
[c]=Q,
[c]=Z,
[m]={"8ca78a16f4a5",1371088971,"Add -Wdeprecated warnings and fixits for things deprecated in C++11:"},
[m]={"8ca78a16f4a5",1371088971,"Add -Wdeprecated warnings and fixits for things deprecated in C++11:"},
[n]={{"clang/lib/Parse/ParseDeclCXX.cpp",4013,"static void diagnoseDynamicExceptionSpecification(Parser &P, SourceRange Range, bool IsNoexcept) {\n  if (P.getLangOpts().CPlusPlus11) {\n    P.Diag(Range.getBegin(), diag::note_exception_spec_deprecated) << Replacement << FixItHint::CreateReplacement(Range, Replacement);"}}
[n]={{"clang/lib/Parse/ParseDeclCXX.cpp",4013,"static void diagnoseDynamicExceptionSpecification(Parser &P, SourceRange Range, bool IsNoexcept) {\n  if (P.getLangOpts().CPlusPlus11) {\n    P.Diag(Range.getBegin(), diag::note_exception_spec_deprecated) << Replacement << FixItHint::CreateReplacement(Range, Replacement);"}},
[o]={
["clang/test/SemaCXX/ms-exception-spec.cpp"]={"clang/test/SemaCXX/ms-exception-spec.cpp:11:10: note: use \'noexcept(false)\' instead","clang/test/SemaCXX/ms-exception-spec.cpp:19:11: note: use \'noexcept(false)\' instead"}
}
},
},
["note_exits___block"]={
["note_exits___block"]={
[f]="jump exits scope of __block variable",
[b]="jump exits scope of __block variable",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits scope of __block variable",
[h]="jump exits scope of __block variable",
[g]=b,
[j]=i,
[e]="jump exits scope of __block variable",
[k]="jump exits scope of __block variable",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={U,1273625893,X},
[m]={kb,1273625893,hb},
[n]={{x,153,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasAttr<BlocksAttr>())\n      return ScopePair(diag::note_protected_by___block, diag::note_exits___block);"}}
[n]={{B,153,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasAttr<BlocksAttr>())\n      return ScopePair(diag::note_protected_by___block, diag::note_exits___block);"}},
[o]={
["clang/test/Sema/attr-musttail.m"]={"clang/test/Sema/attr-musttail.m:12:15: note: jump exits scope of __block variable"}
}
},
},
["note_exits_block_captures_cxx_obj"]={
["note_exits_block_captures_cxx_obj"]={
[f]="jump exits lifetime of block which captures a destructible C++ object",
[b]="jump exits lifetime of block which captures a destructible C++ object",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits lifetime of block which captures a destructible C++ object",
[h]="jump exits lifetime of block which captures a destructible C++ object",
[g]=b,
[j]=i,
[e]="jump exits lifetime of block which captures a destructible C\\+\\+ object",
[k]="jump exits lifetime of block which captures a destructible C\\+\\+ object",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Vb,1310407494,Qb},
[m]={wc,1310407494,yc},
[n]={{x,263,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_cxx_destructor:\n      Diags = ScopePair(diag::note_enters_block_captures_cxx_obj, diag::note_exits_block_captures_cxx_obj);"}}
[n]={{B,263,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_cxx_destructor:\n      Diags = ScopePair(diag::note_enters_block_captures_cxx_obj, diag::note_exits_block_captures_cxx_obj);"}}
},
},
["note_exits_block_captures_non_trivial_c_struct"]={
["note_exits_block_captures_non_trivial_c_struct"]={
[f]="jump exits lifetime of block which captures a C struct that is non-trivial to destroy",
[b]="jump exits lifetime of block which captures a C struct that is non-trivial to destroy",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits lifetime of block which captures a C struct that is non-trivial to destroy",
[h]="jump exits lifetime of block which captures a C struct that is non-trivial to destroy",
[g]=b,
[j]=i,
[e]="jump exits lifetime of block which captures a C struct that is non\\-trivial to destroy",
[k]="jump exits lifetime of block which captures a C struct that is non\\-trivial to destroy",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"7275da0f2ee2",1519802155,"[ObjC] Allow declaring __strong pointer fields in structs in Objective-C"},
[m]={"7275da0f2ee2",1519802155,"[ObjC] Allow declaring __strong pointer fields in structs in Objective-C"},
[n]={{x,275,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_nontrivial_c_struct:\n      Diags = ScopePair(diag::note_enters_block_captures_non_trivial_c_struct, diag::note_exits_block_captures_non_trivial_c_struct);"}}
[n]={{B,275,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_nontrivial_c_struct:\n      Diags = ScopePair(diag::note_enters_block_captures_non_trivial_c_struct, diag::note_exits_block_captures_non_trivial_c_struct);"}},
[o]={
[zc]={"clang/test/SemaObjC/strong-in-c-struct.m:53:10: note: jump exits lifetime of block which captures a C struct that is non-trivial to destroy"}
}
},
},
["note_exits_block_captures_strong"]={
["note_exits_block_captures_strong"]={
[f]="jump exits lifetime of block which strongly captures a variable",
[b]="jump exits lifetime of block which strongly captures a variable",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits lifetime of block which strongly captures a variable",
[h]="jump exits lifetime of block which strongly captures a variable",
[g]=b,
[j]=i,
[e]="jump exits lifetime of block which strongly captures a variable",
[k]="jump exits lifetime of block which strongly captures a variable",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Vb,1310407494,Qb},
[m]={wc,1310407494,yc},
[n]={{x,267,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_objc_strong_lifetime:\n      Diags = ScopePair(diag::note_enters_block_captures_strong, diag::note_exits_block_captures_strong);"}}
[n]={{B,267,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_objc_strong_lifetime:\n      Diags = ScopePair(diag::note_enters_block_captures_strong, diag::note_exits_block_captures_strong);"}}
},
},
["note_exits_block_captures_weak"]={
["note_exits_block_captures_weak"]={
[f]="jump exits lifetime of block which weakly captures a variable",
[b]="jump exits lifetime of block which weakly captures a variable",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits lifetime of block which weakly captures a variable",
[h]="jump exits lifetime of block which weakly captures a variable",
[g]=b,
[j]=i,
[e]="jump exits lifetime of block which weakly captures a variable",
[k]="jump exits lifetime of block which weakly captures a variable",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Vb,1310407494,Qb},
[m]={wc,1310407494,yc},
[n]={{x,271,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_objc_weak_lifetime:\n      Diags = ScopePair(diag::note_enters_block_captures_weak, diag::note_exits_block_captures_weak);"}}
[n]={{B,271,"/// Build scope information for a captured block literal variables.\nvoid JumpScopeChecker::BuildScopeInformation(VarDecl *D, const BlockDecl *BDecl, unsigned &ParentScope) {\n  if (destructKind != QualType::DK_none) {\n    case QualType::DK_objc_weak_lifetime:\n      Diags = ScopePair(diag::note_enters_block_captures_weak, diag::note_exits_block_captures_weak);"}}
},
},
["note_exits_cleanup"]={
["note_exits_cleanup"]={
[f]="jump exits scope of variable with __attribute__((cleanup))",
[b]="jump exits scope of variable with __attribute__((cleanup))",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits scope of variable with __attribute__((cleanup))",
[h]="jump exits scope of variable with __attribute__((cleanup))",
[g]=b,
[j]=i,
[e]="jump exits scope of variable with __attribute__\\(\\(cleanup\\)\\)",
[k]="jump exits scope of variable with __attribute__\\(\\(cleanup\\)\\)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={U,1273625893,X},
[m]={kb,1273625893,hb},
[n]={{x,157,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasAttr<CleanupAttr>())\n      return ScopePair(diag::note_protected_by_cleanup, diag::note_exits_cleanup);"}}
[n]={{B,157,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasAttr<CleanupAttr>())\n      return ScopePair(diag::note_protected_by_cleanup, diag::note_exits_cleanup);"}}
},
},
["note_exits_compound_literal_scope"]={
["note_exits_compound_literal_scope"]={
[f]="jump exits lifetime of a compound literal that is non-trivial to destruct",
[b]="jump exits lifetime of a compound literal that is non-trivial to destruct",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits lifetime of a compound literal that is non-trivial to destruct",
[h]="jump exits lifetime of a compound literal that is non-trivial to destruct",
[g]=b,
[j]=i,
[e]="jump exits lifetime of a compound literal that is non\\-trivial to destruct",
[k]="jump exits lifetime of a compound literal that is non\\-trivial to destruct",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={yb,1576908663,Db},
[m]={cc,1576908663,bc},
[n]={{x,294,"/// Build scope information for compound literals of C struct types that are\n/// non-trivial to destruct.\nvoid JumpScopeChecker::BuildScopeInformation(CompoundLiteralExpr *CLE, unsigned &ParentScope) {\n  unsigned OutDiag = diag::note_exits_compound_literal_scope;"}}
[n]={{B,294,"/// Build scope information for compound literals of C struct types that are\n/// non-trivial to destruct.\nvoid JumpScopeChecker::BuildScopeInformation(CompoundLiteralExpr *CLE, unsigned &ParentScope) {\n  unsigned OutDiag = diag::note_exits_compound_literal_scope;"}},
[o]={
[zc]={"clang/test/SemaObjC/strong-in-c-struct.m:72:9: note: jump exits lifetime of a compound literal that is non-trivial to destruct"}
}
},
},
["note_exits_cxx_catch"]={
["note_exits_cxx_catch"]={
[f]="jump exits catch block",
[b]="jump exits catch block",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits catch block",
[h]="jump exits catch block",
[g]=b,
[j]=i,
[e]="jump exits catch block",
[k]="jump exits catch block",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={U,1273625893,X},
[m]={kb,1273625893,hb},
[n]={{x,420,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::CXXTryStmtClass: {\n    // Jump from the catch into the try is not allowed either.\n    for (unsigned I = 0, E = TS->getNumHandlers(); I != E; ++I) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_catch, diag::note_exits_cxx_catch, CS->getSourceRange().getBegin()));"}}
[n]={{B,420,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::CXXTryStmtClass: {\n    // Jump from the catch into the try is not allowed either.\n    for (unsigned I = 0, E = TS->getNumHandlers(); I != E; ++I) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_catch, diag::note_exits_cxx_catch, CS->getSourceRange().getBegin()));"}}
},
},
["note_exits_cxx_try"]={
["note_exits_cxx_try"]={
[f]="jump exits try block",
[b]="jump exits try block",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits try block",
[h]="jump exits try block",
[g]=b,
[j]=i,
[e]="jump exits try block",
[k]="jump exits try block",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={U,1273625893,X},
[m]={kb,1273625893,hb},
[n]={{x,408,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::CXXTryStmtClass: {\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_try, diag::note_exits_cxx_try, TS->getSourceRange().getBegin()));"}}
[n]={{B,408,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::CXXTryStmtClass: {\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_cxx_try, diag::note_exits_cxx_try, TS->getSourceRange().getBegin()));"}},
[o]={
["clang/test/SemaCXX/attr-musttail.cpp"]={"clang/test/SemaCXX/attr-musttail.cpp:224:3: note: jump exits try block"}
}
},
},
["note_exits_dtor"]={
["note_exits_dtor"]={
[f]="jump exits scope of variable with non-trivial destructor",
[b]="jump exits scope of variable with non-trivial destructor",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits scope of variable with non-trivial destructor",
[h]="jump exits scope of variable with non-trivial destructor",
[g]=b,
[j]=i,
[e]="jump exits scope of variable with non\\-trivial destructor",
[k]="jump exits scope of variable with non\\-trivial destructor",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={U,1273625893,X},
[m]={kb,1273625893,hb},
[n]={{x,171,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_nontrivial_c_struct:\n        return ScopePair(diag::note_protected_by_non_trivial_c_struct_init, diag::note_exits_dtor);"},{x,174,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_cxx_destructor:\n        OutDiag = diag::note_exits_dtor;"}}
[n]={{B,171,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_nontrivial_c_struct:\n        return ScopePair(diag::note_protected_by_non_trivial_c_struct_init, diag::note_exits_dtor);"},{B,174,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_cxx_destructor:\n        OutDiag = diag::note_exits_dtor;"}},
[o]={
[zc]={"clang/test/SemaObjC/strong-in-c-struct.m:30:10: note: jump exits scope of variable with non-trivial destructor","clang/test/SemaObjC/strong-in-c-struct.m:53:10: note: jump exits scope of variable with non-trivial destructor"}
}
},
},
["note_exits_objc_autoreleasepool"]={
["note_exits_objc_autoreleasepool"]={
[f]="jump exits autoreleasepool block",
[b]="jump exits autoreleasepool block",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits autoreleasepool block",
[h]="jump exits autoreleasepool block",
[g]=b,
[j]=i,
[e]="jump exits autoreleasepool block",
[k]="jump exits autoreleasepool block",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Ib,1308178962,Hb},
[m]={Sb,1308178962,Rb},
[n]={{x,551,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAutoreleasePoolStmtClass: {\n    Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_autoreleasepool, diag::note_exits_objc_autoreleasepool, AS->getAtLoc()));"}}
[n]={{B,551,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAutoreleasePoolStmtClass: {\n    Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_autoreleasepool, diag::note_exits_objc_autoreleasepool, AS->getAtLoc()));"}}
},
},
["note_exits_objc_catch"]={
["note_exits_objc_catch"]={
[f]="jump exits @catch block",
[b]="jump exits @catch block",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits @catch block",
[h]="jump exits @catch block",
[g]=b,
[j]=i,
[e]="jump exits @catch block",
[k]="jump exits @catch block",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={U,1273625893,X},
[m]={kb,1273625893,hb},
[n]={{x,505,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Jump from the catch to the finally or try is not valid.\n    for (ObjCAtCatchStmt *AC : AT->catch_stmts()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_catch, diag::note_exits_objc_catch, AC->getAtCatchLoc()));"}}
[n]={{B,505,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Jump from the catch to the finally or try is not valid.\n    for (ObjCAtCatchStmt *AC : AT->catch_stmts()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_catch, diag::note_exits_objc_catch, AC->getAtCatchLoc()));"}}
},
},
["note_exits_objc_finally"]={
["note_exits_objc_finally"]={
[f]="jump exits @finally block",
[b]="jump exits @finally block",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits @finally block",
[h]="jump exits @finally block",
[g]=b,
[j]=i,
[e]="jump exits @finally block",
[k]="jump exits @finally block",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={U,1273625893,X},
[m]={kb,1273625893,hb},
[n]={{x,516,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Jump from the finally to the try or catch is not valid.\n    if (ObjCAtFinallyStmt *AF = AT->getFinallyStmt()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_finally, diag::note_exits_objc_finally, AF->getAtFinallyLoc()));"}}
[n]={{B,516,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Jump from the finally to the try or catch is not valid.\n    if (ObjCAtFinallyStmt *AF = AT->getFinallyStmt()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_finally, diag::note_exits_objc_finally, AF->getAtFinallyLoc()));"}}
},
},
["note_exits_objc_strong"]={
["note_exits_objc_strong"]={
[f]="jump exits scope of __strong variable",
[b]="jump exits scope of __strong variable",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits scope of __strong variable",
[h]="jump exits scope of __strong variable",
[g]=b,
[j]=i,
[e]="jump exits scope of __strong variable",
[k]="jump exits scope of __strong variable",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."},
[m]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."},
[n]={{x,163,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_objc_strong_lifetime:\n        return ScopePair(diag::note_protected_by_objc_strong_init, diag::note_exits_objc_strong);"}}
[n]={{B,163,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_objc_strong_lifetime:\n        return ScopePair(diag::note_protected_by_objc_strong_init, diag::note_exits_objc_strong);"}}
},
},
["note_exits_objc_synchronized"]={
["note_exits_objc_synchronized"]={
[f]="jump exits @synchronized block",
[b]="jump exits @synchronized block",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits @synchronized block",
[h]="jump exits @synchronized block",
[g]=b,
[j]=i,
[e]="jump exits @synchronized block",
[k]="jump exits @synchronized block",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={U,1273625893,X},
[m]={kb,1273625893,hb},
[n]={{x,537,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtSynchronizedStmtClass: {\n    Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_synchronized, diag::note_exits_objc_synchronized, AS->getAtSynchronizedLoc()));"}}
[n]={{B,537,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtSynchronizedStmtClass: {\n    Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_synchronized, diag::note_exits_objc_synchronized, AS->getAtSynchronizedLoc()));"}}
},
},
["note_exits_objc_try"]={
["note_exits_objc_try"]={
[f]="jump exits @try block",
[b]="jump exits @try block",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits @try block",
[h]="jump exits @try block",
[g]=b,
[j]=i,
[e]="jump exits @try block",
[k]="jump exits @try block",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={U,1273625893,X},
[m]={kb,1273625893,hb},
[n]={{x,494,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Recursively walk the AST for the @try part.\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_try, diag::note_exits_objc_try, AT->getAtTryLoc()));"}}
[n]={{B,494,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::ObjCAtTryStmtClass: {\n    // Recursively walk the AST for the @try part.\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_objc_try, diag::note_exits_objc_try, AT->getAtTryLoc()));"}}
},
},
["note_exits_objc_weak"]={
["note_exits_objc_weak"]={
[f]="jump exits scope of __weak variable",
[b]="jump exits scope of __weak variable",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits scope of __weak variable",
[h]="jump exits scope of __weak variable",
[g]=b,
[j]=i,
[e]="jump exits scope of __weak variable",
[k]="jump exits scope of __weak variable",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."},
[m]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."},
[n]={{x,167,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_objc_weak_lifetime:\n        return ScopePair(diag::note_protected_by_objc_weak_init, diag::note_exits_objc_weak);"}}
[n]={{B,167,"/// GetDiagForGotoScopeDecl - If this decl induces a new goto scope, return a\n/// diagnostic that should be emitted if control goes over it. If not, return 0.\nstatic ScopePair GetDiagForGotoScopeDecl(Sema &S, const Decl *D) {\n  if (const VarDecl *VD = dyn_cast<VarDecl>(D)) {\n    if (VD->hasLocalStorage()) {\n      case QualType::DK_objc_weak_lifetime:\n        return ScopePair(diag::note_protected_by_objc_weak_init, diag::note_exits_objc_weak);"}}
},
},
["note_exits_seh_except"]={
["note_exits_seh_except"]={
[f]="jump exits __except block",
[b]="jump exits __except block",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits __except block",
[h]="jump exits __except block",
[g]=b,
[j]=i,
[e]="jump exits __except block",
[k]="jump exits __except block",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[n]={{x,444,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    // Jump from __except or __finally into the __try are not allowed either.\n    if (SEHExceptStmt *Except = TS->getExceptHandler()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_except, diag::note_exits_seh_except, Except->getSourceRange().getBegin()));"}}
[n]={{B,444,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    // Jump from __except or __finally into the __try are not allowed either.\n    if (SEHExceptStmt *Except = TS->getExceptHandler()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_except, diag::note_exits_seh_except, Except->getSourceRange().getBegin()));"}},
[o]={
["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:613:5: note: jump exits __except block"}
}
},
},
["note_exits_seh_finally"]={
["note_exits_seh_finally"]={
[f]="jump exits __finally block",
[b]="jump exits __finally block",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits __finally block",
[h]="jump exits __finally block",
[g]=b,
[j]=i,
[e]="jump exits __finally block",
[k]="jump exits __finally block",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[n]={{x,451,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    // Jump from __except or __finally into the __try are not allowed either.\n    if (SEHExceptStmt *Except = TS->getExceptHandler()) {\n    } else if (SEHFinallyStmt *Finally = TS->getFinallyHandler()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_finally, diag::note_exits_seh_finally, Finally->getSourceRange().getBegin()));"}}
[n]={{B,451,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    // Jump from __except or __finally into the __try are not allowed either.\n    if (SEHExceptStmt *Except = TS->getExceptHandler()) {\n    } else if (SEHFinallyStmt *Finally = TS->getFinallyHandler()) {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_finally, diag::note_exits_seh_finally, Finally->getSourceRange().getBegin()));"}},
[o]={
["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:624:5: note: jump exits __finally block"}
}
},
},
["note_exits_seh_try"]={
["note_exits_seh_try"]={
[f]="jump exits __try block",
[b]="jump exits __try block",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits __try block",
[h]="jump exits __try block",
[g]=b,
[j]=i,
[e]="jump exits __try block",
[k]="jump exits __try block",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[n]={{x,433,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_try, diag::note_exits_seh_try, TS->getSourceRange().getBegin()));"}}
[n]={{B,433,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::SEHTryStmtClass: {\n    {\n      Scopes.push_back(GotoScope(ParentScope, diag::note_protected_by_seh_try, diag::note_exits_seh_try, TS->getSourceRange().getBegin()));"}},
[o]={
["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:605:3: note: jump exits __try block","clang/test/SemaCXX/scope-check.cpp:618:3: note: jump exits __try block"}
}
},
},
["note_exits_temporary_dtor"]={
["note_exits_temporary_dtor"]={
[f]="jump exits scope of lifetime-extended temporary with non-trivial destructor",
[b]="jump exits scope of lifetime-extended temporary with non-trivial destructor",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="jump exits scope of lifetime-extended temporary with non-trivial destructor",
[h]="jump exits scope of lifetime-extended temporary with non-trivial destructor",
[g]=b,
[j]=i,
[e]="jump exits scope of lifetime\\-extended temporary with non\\-trivial destructor",
[k]="jump exits scope of lifetime\\-extended temporary with non\\-trivial destructor",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"c934e4fd2ce2",1386811622,"PR18217: Rewrite JumpDiagnostics\' handling of temporaries, to correctly handle"},
[m]={"c934e4fd2ce2",1386811622,"PR18217: Rewrite JumpDiagnostics\' handling of temporaries, to correctly handle"},
[n]={{x,588,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::MaterializeTemporaryExprClass: {\n    if (MTE->getStorageDuration() == SD_Automatic) {\n      if (ExtendedObject->getType().isDestructedType()) {\n        Scopes.push_back(GotoScope(ParentScope, 0, diag::note_exits_temporary_dtor, ExtendedObject->getExprLoc()));"}}
[n]={{B,588,"/// BuildScopeInformation - The statements from CI to CE are known to form a\n/// coherent VLA scope with a specified parent node.  Walk through the\n/// statements, adding any labels or gotos to LabelAndGotoScopes and recursively\n/// walking the AST as needed.\nvoid JumpScopeChecker::BuildScopeInformation(Stmt *S, unsigned &origParentScope) {\n  case Stmt::MaterializeTemporaryExprClass: {\n    if (MTE->getStorageDuration() == SD_Automatic) {\n      if (ExtendedObject->getType().isDestructedType()) {\n        Scopes.push_back(GotoScope(ParentScope, 0, diag::note_exits_temporary_dtor, ExtendedObject->getExprLoc()));"}},
[o]={
["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:242:19: note: jump exits scope of lifetime-extended temporary with non-trivial destructor","clang/test/SemaCXX/scope-check.cpp:257:21: note: jump exits scope of lifetime-extended temporary with non-trivial destructor","clang/test/SemaCXX/scope-check.cpp:324:16: note: jump exits scope of lifetime-extended temporary with non-trivial destructor","clang/test/SemaCXX/scope-check.cpp:345:35: note: jump exits scope of lifetime-extended temporary with non-trivial destructor","clang/test/SemaCXX/scope-check.cpp:372:9: note: jump exits scope of lifetime-extended temporary with non-trivial destructor"}
}
},
},
["note_explicit_ctor_deduction_guide_here"]={
["note_explicit_ctor_deduction_guide_here"]={
[f]="explicit ... declared here",
[b]="explicit ... declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="explicit %select{constructor|deduction guide}0 declared here",
[h]="explicit %select{constructor|deduction guide}0 declared here",
[g]=b,
[j]=i,
[e]="explicit (?:constructor|deduction guide) declared here",
[k]="explicit (?:constructor|deduction guide) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"60437620db8e",1486667864,"[c++1z] P0091R3: Basic support for deducing class template arguments via deduction-guides."},
[m]={"60437620db8e",1486667864,"[c++1z] P0091R3: Basic support for deducing class template arguments via deduction-guides."},
[n]={{D,10001,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ExplicitConstructor: {\n    S.Diag(CtorDecl->getLocation(), diag::note_explicit_ctor_deduction_guide_here) << false;"},{D,10892,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\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      Diag(Best->Function->getLocation(), diag::note_explicit_ctor_deduction_guide_here) << IsDeductionGuide;"}}
[n]={{K,10001,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ExplicitConstructor: {\n    S.Diag(CtorDecl->getLocation(), diag::note_explicit_ctor_deduction_guide_here) << false;"},{K,10892,"QualType Sema::DeduceTemplateSpecializationFromInitializer(TypeSourceInfo *TSInfo, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Inits, ParenListExpr *PL) {\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      Diag(Best->Function->getLocation(), diag::note_explicit_ctor_deduction_guide_here) << IsDeductionGuide;"}},
[o]={
["clang/test/CXX/dcl.decl/dcl.init/p7.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p7.cpp:12:12: note: explicit constructor declared here"}
}
},
},
["note_explicit_instantiation_candidate"]={
["note_explicit_instantiation_candidate"]={
[f]="explicit instantiation candidate function A template here B",
[b]="explicit instantiation candidate function A template here B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="explicit instantiation candidate function %q0 template here %1",
[h]="explicit instantiation candidate function %q0 template here %1",
[g]=b,
[j]=i,
[e]="explicit instantiation candidate function (.*?) template here (.*?)",
[k]="explicit instantiation candidate function (.*?) template here (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"450f0084a27b",1253904180,"WIP implementation of explicit instantiation of function templates,"},
[m]={"450f0084a27b",1253904180,"WIP implementation of explicit instantiation of function templates,"},
[n]={{u,10649,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (!Specialization) {\n    UnresolvedSetIterator Result = getMostSpecialized(TemplateMatches.begin(), TemplateMatches.end(), FailedCandidates, D.getIdentifierLoc(), PDiag(diag::err_explicit_instantiation_not_known) << Name, PDiag(diag::err_explicit_instantiation_ambiguous) << Name, PDiag(diag::note_explicit_instantiation_candidate));"}}
[n]={{v,10649,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (!Specialization) {\n    UnresolvedSetIterator Result = getMostSpecialized(TemplateMatches.begin(), TemplateMatches.end(), FailedCandidates, D.getIdentifierLoc(), PDiag(diag::err_explicit_instantiation_not_known) << Name, PDiag(diag::err_explicit_instantiation_ambiguous) << Name, PDiag(diag::note_explicit_instantiation_candidate));"}},
[o]={
["clang/test/SemaCXX/template-ambiguous-overload.cpp"]={"clang/test/SemaCXX/template-ambiguous-overload.cpp:13:6: note: explicit instantiation candidate function \'f<0>\' template here [with $0 = 0]","clang/test/SemaCXX/template-ambiguous-overload.cpp:5:6: note: explicit instantiation candidate function \'n::f<0>\' template here [with $0 = 0]"}
}
},
},
["note_explicit_instantiation_definition_here"]={
["note_explicit_instantiation_definition_here"]={
[f]="explicit instantiation definition is here",
[b]="explicit instantiation definition is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="explicit instantiation definition is here",
[h]="explicit instantiation definition is here",
[g]=b,
[j]=i,
[e]="explicit instantiation definition is here",
[k]="explicit instantiation definition is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"d6ba93dc6eb6",1255622045,"Check the interactions between explicit instantiations and template"},
[m]={"d6ba93dc6eb6",1255622045,"Check the interactions between explicit instantiations and template"},
[n]={{u,9243,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  case TSK_ExplicitInstantiationDeclaration:\n    case TSK_ExplicitInstantiationDefinition:\n      Diag(DiagLocForExplicitInstantiation(PrevDecl, PrevPointOfInstantiation), diag::note_explicit_instantiation_definition_here);"}}
[n]={{v,9243,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  case TSK_ExplicitInstantiationDeclaration:\n    case TSK_ExplicitInstantiationDefinition:\n      Diag(DiagLocForExplicitInstantiation(PrevDecl, PrevPointOfInstantiation), diag::note_explicit_instantiation_definition_here);"}},
[o]={
["clang/test/CXX/temp/temp.spec/temp.explicit/p10.cpp"]={"clang/test/CXX/temp/temp.spec/temp.explicit/p10.cpp:28:17: note: explicit instantiation definition is here","clang/test/CXX/temp/temp.spec/temp.explicit/p10.cpp:28:17: note: explicit instantiation definition is here","clang/test/CXX/temp/temp.spec/temp.explicit/p10.cpp:28:17: note: explicit instantiation definition is here","clang/test/CXX/temp/temp.spec/temp.explicit/p10.cpp:28:17: note: explicit instantiation definition is here"}
}
},
},
["note_explicit_instantiation_here"]={
["note_explicit_instantiation_here"]={
[f]="explicit instantiation refers here",
[b]="explicit instantiation refers here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="explicit instantiation refers here",
[h]="explicit instantiation refers here",
[g]=b,
[j]=i,
[e]="explicit instantiation refers here",
[k]="explicit instantiation refers here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"450f0084a27b",1253904180,"WIP implementation of explicit instantiation of function templates,"},
[m]={"450f0084a27b",1253904180,"WIP implementation of explicit instantiation of function templates,"},
[n]={{u,839,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n    if (isa<FunctionDecl>(Instantiation)) {\n      Note = diag::note_explicit_instantiation_here;"},{u,852,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n  } else {\n    if (isa<FunctionDecl>(Instantiation)) {\n      Note = diag::note_explicit_instantiation_here;"},{u,870,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n  } else {\n    if (isa<FunctionDecl>(Instantiation)) {\n    } else if (isa<TagDecl>(Instantiation)) {\n    } else {\n      Note = diag::note_explicit_instantiation_here;"},{u,9871,"/// Check the scope of an explicit instantiation.\n///\n/// \\returns true if a serious error occurs, false otherwise.\nstatic bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName) {\n  S.Diag(D->getLocation(), diag::note_explicit_instantiation_here);"},{u,10459,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (!R->isFunctionType()) {\n    if (!PrevTemplate) {\n      if (!Prev || !Prev->isStaticDataMember()) {\n        for (LookupResult::iterator P = Previous.begin(), PEnd = Previous.end(); P != PEnd; ++P)\n          Diag((*P)->getLocation(), diag::note_explicit_instantiation_here);"},{u,10468,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (!R->isFunctionType()) {\n    if (!PrevTemplate) {\n      if (!Prev->getInstantiatedFromStaticDataMember()) {\n        Diag(Prev->getLocation(), diag::note_explicit_instantiation_here);"},{u,10494,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (!R->isFunctionType()) {\n    if (!PrevTemplate) {\n    } else {\n      if (D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n        Diag(PrevTemplate->getLocation(), diag::note_explicit_instantiation_here);"},{u,10672,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // C++11 [except.spec]p4\n  // In an explicit instantiation an exception-specification may be specified,\n  // but is not required.\n  // If an exception-specification is specified in an explicit instantiation\n  // directive, it shall be compatible with the exception-specifications of\n  // other declarations of that function.\n  if (auto *FPT = R->getAs<FunctionProtoType>())\n    if (FPT->hasExceptionSpec()) {\n      bool Result = CheckEquivalentExceptionSpec(PDiag(DiagID) << Specialization->getType(), PDiag(diag::note_explicit_instantiation_here), Specialization->getType()->getAs<FunctionProtoType>(), Specialization->getLocation(), FPT, D.getBeginLoc());"},{u,10687,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (Specialization->getTemplateSpecializationKind() == TSK_Undeclared) {\n    Diag(Specialization->getLocation(), diag::note_explicit_instantiation_here);"}}
[n]={{v,839,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n    if (isa<FunctionDecl>(Instantiation)) {\n      Note = diag::note_explicit_instantiation_here;"},{v,852,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n  } else {\n    if (isa<FunctionDecl>(Instantiation)) {\n      Note = diag::note_explicit_instantiation_here;"},{v,870,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n  } else {\n    if (isa<FunctionDecl>(Instantiation)) {\n    } else if (isa<TagDecl>(Instantiation)) {\n    } else {\n      Note = diag::note_explicit_instantiation_here;"},{v,9871,"/// Check the scope of an explicit instantiation.\n///\n/// \\returns true if a serious error occurs, false otherwise.\nstatic bool CheckExplicitInstantiationScope(Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName) {\n  S.Diag(D->getLocation(), diag::note_explicit_instantiation_here);"},{v,10459,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (!R->isFunctionType()) {\n    if (!PrevTemplate) {\n      if (!Prev || !Prev->isStaticDataMember()) {\n        for (LookupResult::iterator P = Previous.begin(), PEnd = Previous.end(); P != PEnd; ++P)\n          Diag((*P)->getLocation(), diag::note_explicit_instantiation_here);"},{v,10468,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (!R->isFunctionType()) {\n    if (!PrevTemplate) {\n      if (!Prev->getInstantiatedFromStaticDataMember()) {\n        Diag(Prev->getLocation(), diag::note_explicit_instantiation_here);"},{v,10494,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (!R->isFunctionType()) {\n    if (!PrevTemplate) {\n    } else {\n      if (D.getName().getKind() != UnqualifiedIdKind::IK_TemplateId) {\n        Diag(PrevTemplate->getLocation(), diag::note_explicit_instantiation_here);"},{v,10672,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  // C++11 [except.spec]p4\n  // In an explicit instantiation an exception-specification may be specified,\n  // but is not required.\n  // If an exception-specification is specified in an explicit instantiation\n  // directive, it shall be compatible with the exception-specifications of\n  // other declarations of that function.\n  if (auto *FPT = R->getAs<FunctionProtoType>())\n    if (FPT->hasExceptionSpec()) {\n      bool Result = CheckEquivalentExceptionSpec(PDiag(DiagID) << Specialization->getType(), PDiag(diag::note_explicit_instantiation_here), Specialization->getType()->getAs<FunctionProtoType>(), Specialization->getLocation(), FPT, D.getBeginLoc());"},{v,10687,"DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, Declarator &D) {\n  if (Specialization->getTemplateSpecializationKind() == TSK_Undeclared) {\n    Diag(Specialization->getLocation(), diag::note_explicit_instantiation_here);"}},
[o]={
["clang/test/SemaTemplate/temp_explicit_cxx0x.cpp"]={"clang/test/SemaTemplate/temp_explicit_cxx0x.cpp:4:31: note: explicit instantiation refers here","clang/test/SemaTemplate/temp_explicit_cxx0x.cpp:14:29: note: explicit instantiation refers here"}
}
},
},
["note_explicit_template_arg_substitution_here"]={
["note_explicit_template_arg_substitution_here"]={
[f]="while substituting explicitly-specified template arguments into function template A B",
[b]="while substituting explicitly-specified template arguments into function template A B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="while substituting explicitly-specified template arguments into function template %0 %1",
[h]="while substituting explicitly-specified template arguments into function template %0 %1",
[g]=b,
[j]=i,
[e]="while substituting explicitly\\-specified template arguments into function template (.*?) (.*?)",
[k]="while substituting explicitly\\-specified template arguments into function template (.*?) (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"ff6cbdf806da",1246485666,"Keep track of more information within the template instantiation stack, e.g.,"},
[m]={"ff6cbdf806da",1246485666,"Keep track of more information within the template instantiation stack, e.g.,"},
[n]={{z,820,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ExplicitTemplateArgumentSubstitution: {\n      Diags.Report(Active->PointOfInstantiation, diag::note_explicit_template_arg_substitution_here) << FnTmpl << getTemplateArgumentBindingsText(FnTmpl->getTemplateParameters(), Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}}
[n]={{G,820,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ExplicitTemplateArgumentSubstitution: {\n      Diags.Report(Active->PointOfInstantiation, diag::note_explicit_template_arg_substitution_here) << FnTmpl << getTemplateArgumentBindingsText(FnTmpl->getTemplateParameters(), Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}},
[o]={
["clang/test/CXX/temp/temp.spec/temp.inst/p7.cpp"]={"clang/test/CXX/temp/temp.spec/temp.inst/p7.cpp:11:3: note: while substituting explicitly-specified template arguments into function template \'h\' "}
}
},
},
["note_explicit_template_spec_does_not_need_header"]={
["note_explicit_template_spec_does_not_need_header"]={
[f]="\'template<>\' header not required for explicitly-specialized class A declared here",
[b]="\'template<>\' header not required for explicitly-specialized class A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="\'template<>\' header not required for explicitly-specialized class %0 declared here",
[h]="\'template<>\' header not required for explicitly-specialized class %0 declared here",
[g]=b,
[j]=i,
[e]="\'template\\<\\>\' header not required for explicitly\\-specialized class (.*?) declared here",
[k]="\'template\\<\\>\' header not required for explicitly\\-specialized class (.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"65911498eff3",1258978305,"Tolerate extraneous \"template<>\" headers better, downgrading the"},
[m]={"65911498eff3",1258978305,"Tolerate extraneous \"template<>\" headers better, downgrading the"},
[n]={{u,3591,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  // If there were too many template parameter lists, complain about that now.\n  if (ParamIdx < ParamLists.size() - 1) {\n    // If there was a specialization somewhere, such that \'template<>\' is\n    // not required, and there were any \'template<>\' headers, note where the\n    // specialization occurred.\n    if (ExplicitSpecLoc.isValid() && HasAnyExplicitSpecHeader && !SuppressDiagnostic)\n      Diag(ExplicitSpecLoc, diag::note_explicit_template_spec_does_not_need_header) << NestedTypes.back();"}}
[n]={{v,3591,"/// Match the given template parameter lists to the given scope\n/// specifier, returning the template parameter list that applies to the\n/// name.\n///\n/// \\param DeclStartLoc the start of the declaration that has a scope\n/// specifier or a template parameter list.\n///\n/// \\param DeclLoc The location of the declaration itself.\n///\n/// \\param SS the scope specifier that will be matched to the given template\n/// parameter lists. This scope specifier precedes a qualified name that is\n/// being declared.\n///\n/// \\param TemplateId The template-id following the scope specifier, if there\n/// is one. Used to check for a missing \'template<>\'.\n///\n/// \\param ParamLists the template parameter lists, from the outermost to the\n/// innermost template parameter lists.\n///\n/// \\param IsFriend Whether to apply the slightly different rules for\n/// matching template parameters to scope specifiers in friend\n/// declarations.\n///\n/// \\param IsMemberSpecialization will be set true if the scope specifier\n/// denotes a fully-specialized type, and therefore this is a declaration of\n/// a member specialization.\n///\n/// \\returns the template parameter list, if any, that corresponds to the\n/// name that is preceded by the scope specifier @p SS. This template\n/// parameter list may have template parameters (if we\'re declaring a\n/// template) or may have no template parameters (if we\'re declaring a\n/// template specialization), or may be NULL (if what we\'re declaring isn\'t\n/// itself a template).\nTemplateParameterList *Sema::MatchTemplateParametersToScopeSpecifier(SourceLocation DeclStartLoc, SourceLocation DeclLoc, const CXXScopeSpec &SS, TemplateIdAnnotation *TemplateId, ArrayRef<TemplateParameterList *> ParamLists, bool IsFriend, bool &IsMemberSpecialization, bool &Invalid, bool SuppressDiagnostic) {\n  // If there were too many template parameter lists, complain about that now.\n  if (ParamIdx < ParamLists.size() - 1) {\n    // If there was a specialization somewhere, such that \'template<>\' is\n    // not required, and there were any \'template<>\' headers, note where the\n    // specialization occurred.\n    if (ExplicitSpecLoc.isValid() && HasAnyExplicitSpecHeader && !SuppressDiagnostic)\n      Diag(ExplicitSpecLoc, diag::note_explicit_template_spec_does_not_need_header) << NestedTypes.back();"}},
[o]={
["clang/test/SemaTemplate/temp_explicit.cpp"]={"clang/test/SemaTemplate/temp_explicit.cpp:124:8: note: \'template<>\' header not required for explicitly-specialized class \'Foo<int>\' declared here"}
}
},
},
["note_export"]={
["note_export"]={
[f]="export block begins here",
[b]="export block begins here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="export block begins here",
[h]="export block begins here",
[g]=b,
[j]=i,
[e]="export block begins here",
[k]="export block begins here",
[d]=a,
[l]=a,
[c]=Sb,
[c]=fc,
[m]={"e181de7f4fe9",1555973411,"[c++2a] Implement semantic restrictions for \'export\' declarations."},
[m]={"e181de7f4fe9",1555973411,"[c++2a] Implement semantic restrictions for \'export\' declarations."},
[n]={{cb,811,"/// We have parsed the start of an export declaration, including the \'{\'\n/// (if present).\nDecl *Sema::ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc, SourceLocation LBraceLoc) {\n  //  [...] its declaration or declaration-seq shall not contain an\n  //  export-declaration.\n  if (auto *ED = getEnclosingExportDecl(D)) {\n    if (ED->hasBraces())\n      Diag(ED->getLocation(), diag::note_export);"},{cb,844,"/// Check that it\'s valid to export \\p D.\nstatic bool checkExportedDecl(Sema &S, Decl *D, SourceLocation BlockStart) {\n  if (auto *ND = dyn_cast<NamedDecl>(D)) {\n    if (HasName && ND->getFormalLinkage() == InternalLinkage) {\n      if (BlockStart.isValid())\n        S.Diag(BlockStart, diag::note_export);"},{cb,860,"/// Check that it\'s valid to export \\p D.\nstatic bool checkExportedDecl(Sema &S, Decl *D, SourceLocation BlockStart) {\n  // C++2a [module.interface]p5:\n  //  all entities to which all of the using-declarators ultimately refer\n  //  shall have been introduced with a name having external linkage\n  if (auto *USD = dyn_cast<UsingShadowDecl>(D)) {\n    if (Lk == InternalLinkage || Lk == ModuleLinkage) {\n      if (BlockStart.isValid())\n        S.Diag(BlockStart, diag::note_export);"},{cb,875,"/// Check that it\'s valid to export \\p D.\nstatic bool checkExportedDecl(Sema &S, Decl *D, SourceLocation BlockStart) {\n  // Recurse into namespace-scope DeclContexts. (Only namespace-scope\n  // declarations are exported).\n  if (auto *DC = dyn_cast<DeclContext>(D)) {\n    if (auto *ND = dyn_cast<NamedDecl>(D)) {\n      if (!ND->getDeclName()) {\n        if (BlockStart.isValid())\n          S.Diag(BlockStart, diag::note_export);"}}
[n]={{ib,811,"/// We have parsed the start of an export declaration, including the \'{\'\n/// (if present).\nDecl *Sema::ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc, SourceLocation LBraceLoc) {\n  //  [...] its declaration or declaration-seq shall not contain an\n  //  export-declaration.\n  if (auto *ED = getEnclosingExportDecl(D)) {\n    if (ED->hasBraces())\n      Diag(ED->getLocation(), diag::note_export);"},{ib,844,"/// Check that it\'s valid to export \\p D.\nstatic bool checkExportedDecl(Sema &S, Decl *D, SourceLocation BlockStart) {\n  if (auto *ND = dyn_cast<NamedDecl>(D)) {\n    if (HasName && ND->getFormalLinkage() == InternalLinkage) {\n      if (BlockStart.isValid())\n        S.Diag(BlockStart, diag::note_export);"},{ib,860,"/// Check that it\'s valid to export \\p D.\nstatic bool checkExportedDecl(Sema &S, Decl *D, SourceLocation BlockStart) {\n  // C++2a [module.interface]p5:\n  //  all entities to which all of the using-declarators ultimately refer\n  //  shall have been introduced with a name having external linkage\n  if (auto *USD = dyn_cast<UsingShadowDecl>(D)) {\n    if (Lk == InternalLinkage || Lk == ModuleLinkage) {\n      if (BlockStart.isValid())\n        S.Diag(BlockStart, diag::note_export);"},{ib,875,"/// Check that it\'s valid to export \\p D.\nstatic bool checkExportedDecl(Sema &S, Decl *D, SourceLocation BlockStart) {\n  // Recurse into namespace-scope DeclContexts. (Only namespace-scope\n  // declarations are exported).\n  if (auto *DC = dyn_cast<DeclContext>(D)) {\n    if (auto *ND = dyn_cast<NamedDecl>(D)) {\n      if (!ND->getDeclName()) {\n        if (BlockStart.isValid())\n          S.Diag(BlockStart, diag::note_export);"}},
[o]={
["clang/test/Modules/export-in-another-export.cppm"]={"clang/test/Modules/export-in-another-export.cppm:3:1: note: export block begins here"}
}
},
},
["note_expr_divide_by_zero"]={
["note_expr_divide_by_zero"]={
[f]="division by zero",
[b]="division by zero",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="division by zero",
[h]="division by zero",
[g]=b,
[j]=i,
[e]="division by zero",
[k]="division by zero",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={wb,1236199783,vb},
[m]={Jb,1236199783,Kb},
[n]={{p,2805,"/// Perform the given binary integer operation.\nstatic bool handleIntIntBinOp(EvalInfo &Info, const Expr *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result) {\n  case BO_Rem:\n    if (RHS == 0) {\n      Info.FFDiag(E, diag::note_expr_divide_by_zero);"},{p,2907,"/// Perform the given binary floating-point operation, in-place, on LHS.\nstatic bool handleFloatFloatBinOp(EvalInfo &Info, const BinaryOperator *E, APFloat &LHS, BinaryOperatorKind Opcode, const APFloat &RHS) {\n  case BO_Div:\n    // [expr.mul]p4:\n    //  If the second operand of / or % is zero the behavior is undefined.\n    if (RHS.isZero())\n      Info.CCEDiag(E, diag::note_expr_divide_by_zero);"},{p,14025,"bool FixedPointExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  case BO_Div: {\n    if (RHSFX.getValue() == 0) {\n      Info.FFDiag(E, diag::note_expr_divide_by_zero);"},{p,14804,"bool ComplexExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  case BO_Div:\n    if (Result.isComplexFloat()) {\n    } else {\n      if (RHS.getComplexIntReal() == 0 && RHS.getComplexIntImag() == 0)\n        return Error(E, diag::note_expr_divide_by_zero);"}}
[n]={{q,2805,"/// Perform the given binary integer operation.\nstatic bool handleIntIntBinOp(EvalInfo &Info, const Expr *E, const APSInt &LHS, BinaryOperatorKind Opcode, APSInt RHS, APSInt &Result) {\n  case BO_Rem:\n    if (RHS == 0) {\n      Info.FFDiag(E, diag::note_expr_divide_by_zero);"},{q,2907,"/// Perform the given binary floating-point operation, in-place, on LHS.\nstatic bool handleFloatFloatBinOp(EvalInfo &Info, const BinaryOperator *E, APFloat &LHS, BinaryOperatorKind Opcode, const APFloat &RHS) {\n  case BO_Div:\n    // [expr.mul]p4:\n    //  If the second operand of / or % is zero the behavior is undefined.\n    if (RHS.isZero())\n      Info.CCEDiag(E, diag::note_expr_divide_by_zero);"},{q,14025,"bool FixedPointExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  case BO_Div: {\n    if (RHSFX.getValue() == 0) {\n      Info.FFDiag(E, diag::note_expr_divide_by_zero);"},{q,14804,"bool ComplexExprEvaluator::VisitBinaryOperator(const BinaryOperator *E) {\n  case BO_Div:\n    if (Result.isComplexFloat()) {\n    } else {\n      if (RHS.getComplexIntReal() == 0 && RHS.getComplexIntImag() == 0)\n        return Error(E, diag::note_expr_divide_by_zero);"}},
[o]={
["clang/test/SemaCXX/constexpr-printing.cpp"]={"clang/test/SemaCXX/constexpr-printing.cpp:97:54: note: division by zero","clang/test/SemaCXX/constexpr-printing.cpp:97:54: note: division by zero"}
}
},
},
["note_expr_evaluates_to"]={
["note_expr_evaluates_to"]={
[f]="expression evaluates to \'A B C\'",
[b]="expression evaluates to \'A B C\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="expression evaluates to \'%0 %1 %2\'",
[h]="expression evaluates to \'%0 %1 %2\'",
[g]=b,
[j]=i,
[e]="expression evaluates to \'(.*?) (.*?) (.*?)\'",
[k]="expression evaluates to \'(.*?) (.*?) (.*?)\'",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={db,1625925174,eb},
[m]={fb,1625925174,nb},
[n]={{q,16928,"/// Try to print more useful information about a failed static_assert\n/// with expression \\E\nvoid Sema::DiagnoseStaticAssertDetails(const Expr *E) {\n  if (const auto *Op = dyn_cast<BinaryOperator>(E); Op && Op->getOpcode() != BO_LOr) {\n    if (DiagSide[0].Print && DiagSide[1].Print) {\n      Diag(Op->getExprLoc(), diag::note_expr_evaluates_to) << DiagSide[0].ValueString << Op->getOpcodeStr() << DiagSide[1].ValueString << Op->getSourceRange();"}}
[n]={{r,16928,"/// Try to print more useful information about a failed static_assert\n/// with expression \\E\nvoid Sema::DiagnoseStaticAssertDetails(const Expr *E) {\n  if (const auto *Op = dyn_cast<BinaryOperator>(E); Op && Op->getOpcode() != BO_LOr) {\n    if (DiagSide[0].Print && DiagSide[1].Print) {\n      Diag(Op->getExprLoc(), diag::note_expr_evaluates_to) << DiagSide[0].ValueString << Op->getOpcodeStr() << DiagSide[1].ValueString << Op->getSourceRange();"}},
[o]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:101:32: note: expression evaluates to \'12 == 13\'"}
}
},
},
["note_expr_requirement_constraints_not_satisfied"]={
["note_expr_requirement_constraints_not_satisfied"]={
[f]="... type constraint \'A\' was not satisfied:",
[b]="... type constraint \'A\' was not satisfied:",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{and|because}0 type constraint \'%1\' was not satisfied:",
[h]="%select{and|because}0 type constraint \'%1\' was not satisfied:",
[g]=b,
[j]=i,
[e]="(?:and|because) type constraint \'(.*?)\' was not satisfied\\:",
[k]="(?:and|because) type constraint \'(.*?)\' was not satisfied\\:",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ab,1576172311,bb},
[m]={ob,1576172311,lb},
[n]={{O,970,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::ExprRequirement *Req, bool First) {\n  case concepts::ExprRequirement::SS_ConstraintsNotSatisfied: {\n    if (ConstraintExpr->getTemplateArgsAsWritten()->NumTemplateArgs == 1) {\n    } else {\n      S.Diag(ConstraintExpr->getBeginLoc(), diag::note_expr_requirement_constraints_not_satisfied) << (int)First << ConstraintExpr;"}}
[n]={{W,970,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::ExprRequirement *Req, bool First) {\n  case concepts::ExprRequirement::SS_ConstraintsNotSatisfied: {\n    if (ConstraintExpr->getTemplateArgsAsWritten()->NumTemplateArgs == 1) {\n    } else {\n      S.Diag(ConstraintExpr->getBeginLoc(), diag::note_expr_requirement_constraints_not_satisfied) << (int)First << ConstraintExpr;"}},
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.req/compound-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/compound-requirement.cpp:162:15: note: because type constraint \'same_as<int, typename T2::inner>\' was not satisfied:"}
}
},
},
["note_expr_requirement_constraints_not_satisfied_simple"]={
["note_expr_requirement_constraints_not_satisfied_simple"]={
[f]="... A does not satisfy B:",
[b]="... A does not satisfy B:",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{and|because}0 %1 does not satisfy %2:",
[h]="%select{and|because}0 %1 does not satisfy %2:",
[g]=b,
[j]=i,
[e]="(?:and|because) (.*?) does not satisfy (.*?)\\:",
[k]="(?:and|because) (.*?) does not satisfy (.*?)\\:",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ab,1576172311,bb},
[m]={ob,1576172311,lb},
[n]={{O,965,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::ExprRequirement *Req, bool First) {\n  case concepts::ExprRequirement::SS_ConstraintsNotSatisfied: {\n    if (ConstraintExpr->getTemplateArgsAsWritten()->NumTemplateArgs == 1) {\n      S.Diag(e->getBeginLoc(), diag::note_expr_requirement_constraints_not_satisfied_simple) << (int)First << S.Context.getReferenceQualifiedType(e) << ConstraintExpr->getNamedConcept();"}}
[n]={{W,965,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::ExprRequirement *Req, bool First) {\n  case concepts::ExprRequirement::SS_ConstraintsNotSatisfied: {\n    if (ConstraintExpr->getTemplateArgsAsWritten()->NumTemplateArgs == 1) {\n      S.Diag(e->getBeginLoc(), diag::note_expr_requirement_constraints_not_satisfied_simple) << (int)First << S.Context.getReferenceQualifiedType(e) << ConstraintExpr->getNamedConcept();"}}
},
},
["note_expr_requirement_expr_substitution_error"]={
["note_expr_requirement_expr_substitution_error"]={
[f]="... \'A\' would be invalid: B",
[b]="... \'A\' would be invalid: B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{and|because}0 \'%1\' would be invalid: %2",
[h]="%select{and|because}0 \'%1\' would be invalid: %2",
[g]=b,
[j]=i,
[e]="(?:and|because) \'(.*?)\' would be invalid\\: (.*?)",
[k]="(?:and|because) \'(.*?)\' would be invalid\\: (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ab,1576172311,bb},
[m]={ob,1576172311,lb},
[n]={{O,929,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::ExprRequirement *Req, bool First) {\n  case concepts::ExprRequirement::SS_ExprSubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n      S.Diag(SubstDiag->DiagLoc, diag::note_expr_requirement_expr_substitution_error) << (int)First << SubstDiag->SubstitutedEntity << SubstDiag->DiagMessage;"}}
[n]={{W,929,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::ExprRequirement *Req, bool First) {\n  case concepts::ExprRequirement::SS_ExprSubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n      S.Diag(SubstDiag->DiagLoc, diag::note_expr_requirement_expr_substitution_error) << (int)First << SubstDiag->SubstitutedEntity << SubstDiag->DiagMessage;"}},
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:47:51: note: because \'typename T::type\' would be invalid: type \'int\' cannot be used prior to \'::\' because it has no members","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:47:54: note: because \'typename T::type\' would be invalid: no type named \'type\' in \'C\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:47:54: note: because \'typename T::type\' would be invalid: typename specifier refers to non-type member \'type\' in \'D\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:70:55: note: because \'typename identity<Ts...>\' would be invalid: too many template arguments for class template \'identity\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:80:57: note: because \'typename identity<Ts...>\' would be invalid: too few template arguments for class template \'identity\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:80:57: note: because \'typename identity<Ts...>\' would be invalid: too few template arguments for class template \'identity\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:97:51: note: because \'typename chars_only<T>\' would be invalid: constraints not satisfied for class template \'chars_only\' [with T = int]","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:111:51: note: because \'typename T::template temp<int>\' would be invalid: type \'int\' cannot be used prior to \'::\' because it has no members","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:111:63: note: because \'typename T::template temp<int>\' would be invalid: no member named \'temp\' in \'D\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:111:63: note: because \'typename T::template temp<int>\' would be invalid: template name refers to non-type template \'G::template temp\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:132:57: note: because \'typename I<T>::incomplete::inner\' would be invalid: implicit instantiation of undefined member \'I<int>::incomplete\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:171:16: note: because \'typename T::inner\' would be invalid: type \'int\' cannot be used prior to \'::\' because it has no members","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:171:19: note: because \'typename T::inner\' would be invalid: no type named \'inner\' in \'std_example::has_type\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:166:41: note: because \'typename S<T>\' would be invalid: no type named \'type\' in \'std_example::has_inner\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:168:24: note: because \'typename Ref<T>\' would be invalid: cannot form a reference to \'void\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:198:69: note: because \'T::a\' would be invalid: no member named \'a\' in \'PR48656::T1\'","clang/test/CXX/expr/expr.prim/expr.prim.req/type-requirement.cpp:211:43: note: because \'T::fail\' would be invalid: type \'int\' cannot be used prior to \'::\' because it has no members"}
}
},
},
["note_expr_requirement_expr_unknown_substitution_error"]={
["note_expr_requirement_expr_unknown_substitution_error"]={
[f]="... \'A\' would be invalid",
[b]="... \'A\' would be invalid",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{and|because}0 \'%1\' would be invalid",
[h]="%select{and|because}0 \'%1\' would be invalid",
[g]=b,
[j]=i,
[e]="(?:and|because) \'(.*?)\' would be invalid",
[k]="(?:and|because) \'(.*?)\' would be invalid",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ab,1576172311,bb},
[m]={ob,1576172311,lb},
[n]={{O,934,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::ExprRequirement *Req, bool First) {\n  case concepts::ExprRequirement::SS_ExprSubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n    else\n      S.Diag(SubstDiag->DiagLoc, diag::note_expr_requirement_expr_unknown_substitution_error) << (int)First << SubstDiag->SubstitutedEntity;"}}
[n]={{W,934,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::ExprRequirement *Req, bool First) {\n  case concepts::ExprRequirement::SS_ExprSubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n    else\n      S.Diag(SubstDiag->DiagLoc, diag::note_expr_requirement_expr_unknown_substitution_error) << (int)First << SubstDiag->SubstitutedEntity;"}},
[o]={
["clang/test/SemaCXX/concept-crash-on-diagnostic.cpp"]={"clang/test/SemaCXX/concept-crash-on-diagnostic.cpp:15:23: note: because \'convertible_to<expr-type, bool>\' would be invalid"}
}
},
},
["note_expr_requirement_noexcept_not_met"]={
["note_expr_requirement_noexcept_not_met"]={
[f]="... \'A\' may throw an exception",
[b]="... \'A\' may throw an exception",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{and|because}0 \'%1\' may throw an exception",
[h]="%select{and|because}0 \'%1\' may throw an exception",
[g]=b,
[j]=i,
[e]="(?:and|because) \'(.*?)\' may throw an exception",
[k]="(?:and|because) \'(.*?)\' may throw an exception",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ab,1576172311,bb},
[m]={ob,1576172311,lb},
[n]={{O,940,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::ExprRequirement *Req, bool First) {\n  case concepts::ExprRequirement::SS_NoexceptNotMet:\n    S.Diag(Req->getNoexceptLoc(), diag::note_expr_requirement_noexcept_not_met) << (int)First << Req->getExpr();"}}
[n]={{W,940,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::ExprRequirement *Req, bool First) {\n  case concepts::ExprRequirement::SS_NoexceptNotMet:\n    S.Diag(Req->getNoexceptLoc(), diag::note_expr_requirement_noexcept_not_met) << (int)First << Req->getExpr();"}},
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.req/compound-requirement.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.req/compound-requirement.cpp:64:56: note: because \'t ++\' may throw an exception","clang/test/CXX/expr/expr.prim/expr.prim.req/compound-requirement.cpp:185:14: note: because \'g(x)\' may throw an exception"}
}
},
},
["note_expr_requirement_type_requirement_substitution_error"]={
["note_expr_requirement_type_requirement_substitution_error"]={
[f]="... \'A\' would be invalid: B",
[b]="... \'A\' would be invalid: B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{and|because}0 \'%1\' would be invalid: %2",
[h]="%select{and|because}0 \'%1\' would be invalid: %2",
[g]=b,
[j]=i,
[e]="(?:and|because) \'(.*?)\' would be invalid\\: (.*?)",
[k]="(?:and|because) \'(.*?)\' would be invalid\\: (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ab,1576172311,bb},
[m]={ob,1576172311,lb},
[n]={{O,948,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::ExprRequirement *Req, bool First) {\n  case concepts::ExprRequirement::SS_TypeRequirementSubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n      S.Diag(SubstDiag->DiagLoc, diag::note_expr_requirement_type_requirement_substitution_error) << (int)First << SubstDiag->SubstitutedEntity << SubstDiag->DiagMessage;"}}
[n]={{W,948,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::ExprRequirement *Req, bool First) {\n  case concepts::ExprRequirement::SS_TypeRequirementSubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n      S.Diag(SubstDiag->DiagLoc, diag::note_expr_requirement_type_requirement_substitution_error) << (int)First << SubstDiag->SubstitutedEntity << SubstDiag->DiagMessage;"}}
},
},
["note_expr_requirement_type_requirement_unknown_substitution_error"]={
["note_expr_requirement_type_requirement_unknown_substitution_error"]={
[f]="... \'A\' would be invalid",
[b]="... \'A\' would be invalid",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{and|because}0 \'%1\' would be invalid",
[h]="%select{and|because}0 \'%1\' would be invalid",
[g]=b,
[j]=i,
[e]="(?:and|because) \'(.*?)\' would be invalid",
[k]="(?:and|because) \'(.*?)\' would be invalid",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ab,1576172311,bb},
[m]={ob,1576172311,lb},
[n]={{O,953,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::ExprRequirement *Req, bool First) {\n  case concepts::ExprRequirement::SS_TypeRequirementSubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n    else\n      S.Diag(SubstDiag->DiagLoc, diag::note_expr_requirement_type_requirement_unknown_substitution_error) << (int)First << SubstDiag->SubstitutedEntity;"}}
[n]={{W,953,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::ExprRequirement *Req, bool First) {\n  case concepts::ExprRequirement::SS_TypeRequirementSubstitutionFailure: {\n    if (!SubstDiag->DiagMessage.empty())\n    else\n      S.Diag(SubstDiag->DiagLoc, diag::note_expr_requirement_type_requirement_unknown_substitution_error) << (int)First << SubstDiag->SubstitutedEntity;"}}
},
},
["note_extern_c_begins_here"]={
["note_extern_c_begins_here"]={
[f]="extern \"C\" language linkage specification begins here",
[b]="extern \"C\" language linkage specification begins here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="extern \"C\" language linkage specification begins here",
[h]="extern \"C\" language linkage specification begins here",
[g]=b,
[j]=i,
[e]="extern \"C\" language linkage specification begins here",
[k]="extern \"C\" language linkage specification begins here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"560ae565e9fa",1478101594,"Add a note that points to the linkage specifier for the C++ linkage errors"},
[m]={"560ae565e9fa",1478101594,"Add a note that points to the linkage specifier for the C++ linkage errors"},
[n]={{q,16356,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  if (FnDecl->isExternC()) {\n    if (const LinkageSpecDecl *LSD = FnDecl->getDeclContext()->getExternCContext())\n      Diag(LSD->getExternLoc(), diag::note_extern_c_begins_here);"},{cb,56,"static void checkModuleImportContext(Sema &S, Module *M, SourceLocation ImportLoc, DeclContext *DC, bool FromInclude = false) {\n  if (!isa<TranslationUnitDecl>(DC)) {\n  } else if (!M->IsExternC && ExternCLoc.isValid()) {\n    S.Diag(ExternCLoc, diag::note_extern_c_begins_here);"},{u,8321,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n  if (Ctx && Ctx->isExternCContext()) {\n    if (const LinkageSpecDecl *LSD = Ctx->getExternCContext())\n      Diag(LSD->getExternLoc(), diag::note_extern_c_begins_here);"}}
[n]={{r,16356,"/// CheckLiteralOperatorDeclaration - Check whether the declaration\n/// of this literal operator function is well-formed. If so, returns\n/// false; otherwise, emits appropriate diagnostics and returns true.\nbool Sema::CheckLiteralOperatorDeclaration(FunctionDecl *FnDecl) {\n  if (FnDecl->isExternC()) {\n    if (const LinkageSpecDecl *LSD = FnDecl->getDeclContext()->getExternCContext())\n      Diag(LSD->getExternLoc(), diag::note_extern_c_begins_here);"},{ib,56,"static void checkModuleImportContext(Sema &S, Module *M, SourceLocation ImportLoc, DeclContext *DC, bool FromInclude = false) {\n  if (!isa<TranslationUnitDecl>(DC)) {\n  } else if (!M->IsExternC && ExternCLoc.isValid()) {\n    S.Diag(ExternCLoc, diag::note_extern_c_begins_here);"},{v,8321,"/// Check whether a template can be declared within this scope.\n///\n/// If the template declaration is valid in this scope, returns\n/// false. Otherwise, issues a diagnostic and returns true.\nbool Sema::CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams) {\n  if (Ctx && Ctx->isExternCContext()) {\n    if (const LinkageSpecDecl *LSD = Ctx->getExternCContext())\n      Diag(LSD->getExternLoc(), diag::note_extern_c_begins_here);"}},
[o]={
["clang/test/CXX/over/over.oper/over.literal/p6.cpp"]={"clang/test/CXX/over/over.oper/over.literal/p6.cpp:4:1: note: extern \"C\" language linkage specification begins here","clang/test/CXX/over/over.oper/over.literal/p6.cpp:5:1: note: extern \"C\" language linkage specification begins here","clang/test/CXX/over/over.oper/over.literal/p6.cpp:8:1: note: extern \"C\" language linkage specification begins here","clang/test/CXX/over/over.oper/over.literal/p6.cpp:8:1: note: extern \"C\" language linkage specification begins here","clang/test/CXX/over/over.oper/over.literal/p6.cpp:8:1: note: extern \"C\" language linkage specification begins here","clang/test/CXX/over/over.oper/over.literal/p6.cpp:8:1: note: extern \"C\" language linkage specification begins here"}
}
},
},
["note_extern_c_global_conflict"]={
["note_extern_c_global_conflict"]={
[f]="declared ... here",
[b]="declared ... here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declared %select{in global scope|with C language linkage}0 here",
[h]="declared %select{in global scope|with C language linkage}0 here",
[g]=b,
[j]=i,
[e]="declared (?:in global scope|with C language linkage) here",
[k]="declared (?:in global scope|with C language linkage) here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"902befa2773d",1372457031,"PR7927, PR16247: Reimplement handling of matching extern \"C\" declarations"},
[m]={"902befa2773d",1372457031,"PR7927, PR16247: Reimplement handling of matching extern \"C\" declarations"},
[n]={{t,8465,"/// Check for conflict between this global or extern \"C\" declaration and\n/// previous global or extern \"C\" declarations. This is only used in C++.\ntemplate <typename T> static bool checkGlobalOrExternCConflict(Sema &S, const T *ND, bool IsGlobal, LookupResult &Previous) {\n  S.Diag(Prev->getLocation(), diag::note_extern_c_global_conflict) << IsGlobal;"}}
[n]={{u,8465,"/// Check for conflict between this global or extern \"C\" declaration and\n/// previous global or extern \"C\" declarations. This is only used in C++.\ntemplate <typename T> static bool checkGlobalOrExternCConflict(Sema &S, const T *ND, bool IsGlobal, LookupResult &Previous) {\n  S.Diag(Prev->getLocation(), diag::note_extern_c_global_conflict) << IsGlobal;"}},
[o]={
["clang/test/SemaCXX/extern-c.cpp"]={"clang/test/SemaCXX/extern-c.cpp:15:18: note: declared with C language linkage here","clang/test/SemaCXX/extern-c.cpp:35:18: note: declared with C language linkage here","clang/test/SemaCXX/extern-c.cpp:51:18: note: declared with C language linkage here","clang/test/SemaCXX/extern-c.cpp:121:5: note: declared in global scope here","clang/test/SemaCXX/extern-c.cpp:127:10: note: declared with C language linkage here","clang/test/SemaCXX/extern-c.cpp:178:5: note: declared in global scope here","clang/test/SemaCXX/extern-c.cpp:181:19: note: declared with C language linkage here","clang/test/SemaCXX/extern-c.cpp:184:5: note: declared in global scope here","clang/test/SemaCXX/extern-c.cpp:187:21: note: declared with C language linkage here"}
}
},
},
["note_extra_comma_message_arg"]={
["note_extra_comma_message_arg"]={
[f]="comma separating Objective-C messaging arguments",
[b]="comma separating Objective-C messaging arguments",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="comma separating Objective-C messaging arguments",
[h]="comma separating Objective-C messaging arguments",
[g]=b,
[j]=i,
[e]="comma separating Objective\\-C messaging arguments",
[k]="comma separating Objective\\-C messaging arguments",
[d]=a,
[l]=a,
[c]=Q,
[c]=Z,
[m]={"945b2f46b154",1337640224,"objective-c: provide a useful \'fixit\' suggestion when"},
[m]={"945b2f46b154",1337640224,"objective-c: provide a useful \'fixit\' suggestion when"},
[n]={{Kb,3328,"/// Parse the remainder of an Objective-C message following the\n/// \'[\' objc-receiver.\n///\n/// This routine handles sends to super, class messages (sent to a\n/// class name), and instance messages (sent to an object), and the\n/// target is represented by \\p SuperLoc, \\p ReceiverType, or \\p\n/// ReceiverExpr, respectively. Only one of these parameters may have\n/// a valid value.\n///\n/// \\param LBracLoc The location of the opening \'[\'.\n///\n/// \\param SuperLoc If this is a send to \'super\', the location of the\n/// \'super\' keyword that indicates a send to the superclass.\n///\n/// \\param ReceiverType If this is a class message, the type of the\n/// class we are sending a message to.\n///\n/// \\param ReceiverExpr If this is an instance message, the expression\n/// used to compute the receiver object.\n///\n///  objc-message-args:\n///    objc-selector\n///    objc-keywordarg-list\n///\n///  objc-keywordarg-list:\n///    objc-keywordarg\n///    objc-keywordarg-list objc-keywordarg\n///\n///  objc-keywordarg:\n///    selector-name[opt] \':\' objc-keywordexpr\n///\n///  objc-keywordexpr:\n///    nonempty-expr-list\n///\n///  nonempty-expr-list:\n///    assignment-expression\n///    nonempty-expr-list , assignment-expression\n///\nExprResult Parser::ParseObjCMessageExpressionBody(SourceLocation LBracLoc, SourceLocation SuperLoc, ParsedType ReceiverType, Expr *ReceiverExpr) {\n  if (Tok.is(tok::colon)) {\n    // Parse the, optional, argument list, comma separated.\n    while (Tok.is(tok::comma)) {\n      if (Res.isInvalid()) {\n        if (Tok.is(tok::colon)) {\n          Diag(commaLoc, diag::note_extra_comma_message_arg) << FixItHint::CreateRemoval(commaLoc);"}}
[n]={{Tb,3328,"/// Parse the remainder of an Objective-C message following the\n/// \'[\' objc-receiver.\n///\n/// This routine handles sends to super, class messages (sent to a\n/// class name), and instance messages (sent to an object), and the\n/// target is represented by \\p SuperLoc, \\p ReceiverType, or \\p\n/// ReceiverExpr, respectively. Only one of these parameters may have\n/// a valid value.\n///\n/// \\param LBracLoc The location of the opening \'[\'.\n///\n/// \\param SuperLoc If this is a send to \'super\', the location of the\n/// \'super\' keyword that indicates a send to the superclass.\n///\n/// \\param ReceiverType If this is a class message, the type of the\n/// class we are sending a message to.\n///\n/// \\param ReceiverExpr If this is an instance message, the expression\n/// used to compute the receiver object.\n///\n///  objc-message-args:\n///    objc-selector\n///    objc-keywordarg-list\n///\n///  objc-keywordarg-list:\n///    objc-keywordarg\n///    objc-keywordarg-list objc-keywordarg\n///\n///  objc-keywordarg:\n///    selector-name[opt] \':\' objc-keywordexpr\n///\n///  objc-keywordexpr:\n///    nonempty-expr-list\n///\n///  nonempty-expr-list:\n///    assignment-expression\n///    nonempty-expr-list , assignment-expression\n///\nExprResult Parser::ParseObjCMessageExpressionBody(SourceLocation LBracLoc, SourceLocation SuperLoc, ParsedType ReceiverType, Expr *ReceiverExpr) {\n  if (Tok.is(tok::colon)) {\n    // Parse the, optional, argument list, comma separated.\n    while (Tok.is(tok::comma)) {\n      if (Res.isInvalid()) {\n        if (Tok.is(tok::colon)) {\n          Diag(commaLoc, diag::note_extra_comma_message_arg) << FixItHint::CreateRemoval(commaLoc);"}}
},
},
["note_fallthrough_insert_semi_fixit"]={
["note_fallthrough_insert_semi_fixit"]={
[f]="did you forget \';\'?",
[b]="did you forget \';\'?",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="did you forget \';\'?",
[h]="did you forget \';\'?",
[g]=b,
[j]=i,
[e]="did you forget \';\'\\?",
[k]="did you forget \';\'\\?",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"84837d5b5aa0",1336069659,"Add -Wimplicit-fallthrough warning flag, which warns on fallthrough between"},
[m]={"84837d5b5aa0",1336069659,"Add -Wimplicit-fallthrough warning flag, which warns on fallthrough between"},
[n]={{"clang/lib/Sema/SemaStmtAttr.cpp",35,"static Attr *handleFallThroughAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  if (isa<SwitchCase>(St)) {\n    S.Diag(L, diag::note_fallthrough_insert_semi_fixit) << FixItHint::CreateInsertion(L, \";\");"}}
[n]={{"clang/lib/Sema/SemaStmtAttr.cpp",35,"static Attr *handleFallThroughAttr(Sema &S, Stmt *St, const ParsedAttr &A, SourceRange Range) {\n  if (isa<SwitchCase>(St)) {\n    S.Diag(L, diag::note_fallthrough_insert_semi_fixit) << FixItHint::CreateInsertion(L, \";\");"}},
[o]={
["clang/test/SemaCXX/switch-implicit-fallthrough.cpp"]={"clang/test/SemaCXX/switch-implicit-fallthrough.cpp:338:27: note: did you forget \';\'?"}
}
},
},
["note_fe_backend_invalid_loc"]={
["note_fe_backend_invalid_loc"]={
[f]="could not determine the original source location for A:B:C",
[b]="could not determine the original source location for A:B:C",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="could not determine the original source location for %0:%1:%2",
[h]="could not determine the original source location for %0:%1:%2",
[g]=b,
[j]=i,
[e]="could not determine the original source location for (.*?)\\:(.*?)\\:(.*?)",
[k]="could not determine the original source location for (.*?)\\:(.*?)\\:(.*?)",
[d]=a,
[l]=a,
[c]="Backend Issue",
[c]="Backend Issue",
[m]={"5e03a4b8370d",1453915828,"Add backend dignostic printer for unsupported features"},
[m]={"5e03a4b8370d",1453915828,"Add backend dignostic printer for unsupported features"},
[n]={{ec,694,"const FullSourceLoc BackendConsumer::getBestLocationFromDebugLoc(const llvm::DiagnosticInfoWithLocationBase &D, bool &BadDebugInfo, StringRef &Filename, unsigned &Line, unsigned &Column) const {\n  if (DILoc.isInvalid() && D.isLocationAvailable())\n    Diags.Report(Loc, diag::note_fe_backend_invalid_loc) << Filename << Line << Column;"},{ec,743,"void BackendConsumer::UnsupportedDiagHandler(const llvm::DiagnosticInfoUnsupported &D) {\n  if (BadDebugInfo)\n    Diags.Report(Loc, diag::note_fe_backend_invalid_loc) << Filename << Line << Column;"},{ec,782,"void BackendConsumer::EmitOptimizationMessage(const llvm::DiagnosticInfoOptimizationBase &D, unsigned DiagID) {\n  if (BadDebugInfo)\n    Diags.Report(Loc, diag::note_fe_backend_invalid_loc) << Filename << Line << Column;"},{ec,877,"void BackendConsumer::MisExpectDiagHandler(const llvm::DiagnosticInfoMisExpect &D) {\n  if (BadDebugInfo)\n    Diags.Report(Loc, diag::note_fe_backend_invalid_loc) << Filename << Line << Column;"}}
[n]={{Rc,694,"const FullSourceLoc BackendConsumer::getBestLocationFromDebugLoc(const llvm::DiagnosticInfoWithLocationBase &D, bool &BadDebugInfo, StringRef &Filename, unsigned &Line, unsigned &Column) const {\n  if (DILoc.isInvalid() && D.isLocationAvailable())\n    Diags.Report(Loc, diag::note_fe_backend_invalid_loc) << Filename << Line << Column;"},{Rc,743,"void BackendConsumer::UnsupportedDiagHandler(const llvm::DiagnosticInfoUnsupported &D) {\n  if (BadDebugInfo)\n    Diags.Report(Loc, diag::note_fe_backend_invalid_loc) << Filename << Line << Column;"},{Rc,782,"void BackendConsumer::EmitOptimizationMessage(const llvm::DiagnosticInfoOptimizationBase &D, unsigned DiagID) {\n  if (BadDebugInfo)\n    Diags.Report(Loc, diag::note_fe_backend_invalid_loc) << Filename << Line << Column;"},{Rc,877,"void BackendConsumer::MisExpectDiagHandler(const llvm::DiagnosticInfoMisExpect &D) {\n  if (BadDebugInfo)\n    Diags.Report(Loc, diag::note_fe_backend_invalid_loc) << Filename << Line << Column;"}}
},
},
["note_fe_backend_resource_limit"]={
["note_fe_backend_resource_limit"]={
[f]="A (B) exceeds limit (C) in \'D\'",
[b]="A (B) exceeds limit (C) in \'D\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 (%1) exceeds limit (%2) in \'%3\'",
[h]="%0 (%1) exceeds limit (%2) in \'%3\'",
[g]=b,
[j]=i,
[e]="(.*?) \\((.*?)\\) exceeds limit \\((.*?)\\) in \'(.*?)\'",
[k]="(.*?) \\((.*?)\\) exceeds limit \\((.*?)\\) in \'(.*?)\'",
[d]=a,
[l]=a,
[c]="Backend Issue",
[c]="Backend Issue",
[m]={"a033dbbe5c43",1666225776,"[Clang] Give Clang the ability to use a shared stat cache"}
[m]={"a033dbbe5c43",1666225776,"[Clang] Give Clang the ability to use a shared stat cache"}
},
},
["note_fe_inline_asm_here"]={
["note_fe_inline_asm_here"]={
[f]="instantiated into assembly here",
[b]="instantiated into assembly here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="instantiated into assembly here",
[h]="instantiated into assembly here",
[g]=b,
[j]=i,
[e]="instantiated into assembly here",
[k]="instantiated into assembly here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"5ec32e7fd845",1270579130,"teach clang to install the inline asm diagnostic handler,"},
[m]={"5ec32e7fd845",1270579130,"teach clang to install the inline asm diagnostic handler,"},
[n]={{ec,583,"void BackendConsumer::SrcMgrDiagHandler(const llvm::DiagnosticInfoSrcMgr &DI) {\n  // If this problem has clang-level source location information, report the\n  // issue in the source with a note showing the instantiated\n  // code.\n  if (DI.isInlineAsmDiag()) {\n    if (LocCookie.isValid()) {\n      if (D.getLoc().isValid()) {\n        DiagnosticBuilder B = Diags.Report(Loc, diag::note_fe_inline_asm_here);"}}
[n]={{Rc,583,"void BackendConsumer::SrcMgrDiagHandler(const llvm::DiagnosticInfoSrcMgr &DI) {\n  // If this problem has clang-level source location information, report the\n  // issue in the source with a note showing the instantiated\n  // code.\n  if (DI.isInlineAsmDiag()) {\n    if (LocCookie.isValid()) {\n      if (D.getLoc().isValid()) {\n        DiagnosticBuilder B = Diags.Report(Loc, diag::note_fe_inline_asm_here);"}},
[o]={
["clang/test/CodeGen/X86/x86-64-inline-asm.c"]={"<inline asm>:1:23: note: instantiated into assembly here"}
}
},
},
["note_fe_linking_module"]={
["note_fe_linking_module"]={
[f]="linking module \'A\': B",
[b]="linking module \'A\': B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="linking module \'%0\': %1",
[h]="linking module \'%0\': %1",
[g]=b,
[j]=i,
[e]="linking module \'(.*?)\'\\: (.*?)",
[k]="linking module \'(.*?)\'\\: (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"1c829ce1e362",1629504872,"[clang][codegen] Set CurLinkModule in CodeGenAction::ExecuteAction"}
[m]={"1c829ce1e362",1629504872,"[clang][codegen] Set CurLinkModule in CodeGenAction::ExecuteAction"}
},
},
["note_field_designator_found"]={
["note_field_designator_found"]={
[f]="field designator refers here",
[b]="field designator refers here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="field designator refers here",
[h]="field designator refers here",
[g]=b,
[j]=i,
[e]="field designator refers here",
[k]="field designator refers here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={wb,1236199783,vb},
[m]={Jb,1236199783,Kb},
[n]={{D,2722,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  if (D->isFieldDesignator()) {\n    if (!KnownField) {\n      if (!KnownField) {\n        // Name lookup found something, but it wasn\'t a field.\n        if (!Lookup.empty()) {\n          SemaRef.Diag(Lookup.front()->getLocation(), diag::note_field_designator_found);"}}
[n]={{K,2722,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  if (D->isFieldDesignator()) {\n    if (!KnownField) {\n      if (!KnownField) {\n        // Name lookup found something, but it wasn\'t a field.\n        if (!Lookup.empty()) {\n          SemaRef.Diag(Lookup.front()->getLocation(), diag::note_field_designator_found);"}}
},
},
["note_file_misc_sloc_usage"]={
["note_file_misc_sloc_usage"]={
[f]="A additional files entered using a total of BB of space",
[b]="A additional files entered using a total of BB of space",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 additional files entered using a total of %1B of space",
[h]="%0 additional files entered using a total of %1B of space",
[g]=b,
[j]=i,
[e]="(.*?) additional files entered using a total of (.*?)B of space",
[k]="(.*?) additional files entered using a total of (.*?)B of space",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"9e52db182794",1668037554,"When we run out of source locations, try to produce useful information"},
[m]={"9e52db182794",1668037554,"When we run out of source locations, try to produce useful information"},
Line 4,790: Line 5,802:
},
},
["note_file_sloc_usage"]={
["note_file_sloc_usage"]={
[f]="file entered A timeB using CB of space",
[b]="file entered A timeB using CB of space",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="file entered %0 time%s0 using %1B of space%plural{0:|: plus %2B for macro expansions}2",
[h]="file entered %0 time%s0 using %1B of space%plural{0:|: plus %2B for macro expansions}2",
[g]=b,
[j]=i,
[e]="file entered (.*?) time(.*?) using (.*?)B of space(?:| plus (.*?)B for macro expansions)",
[k]="file entered (.*?) time(.*?) using (.*?)B of space(?:| plus (.*?)B for macro expansions)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"9e52db182794",1668037554,"When we run out of source locations, try to produce useful information"},
[m]={"9e52db182794",1668037554,"When we run out of source locations, try to produce useful information"},
[n]={{"clang/lib/Basic/SourceManager.cpp",2312,"void SourceManager::noteSLocAddressSpaceUsage(DiagnosticsEngine &Diag, std::optional<unsigned> MaxNotes) const {\n  for (auto &[Entry, FileInfo] : llvm::make_range(SortedUsage.begin(), SortedEnd)) {\n    Diag.Report(FileInfo.Loc, diag::note_file_sloc_usage) << FileInfo.Inclusions << FileInfo.DirectSize << (FileInfo.TotalSize - FileInfo.DirectSize);"}}
[n]={{"clang/lib/Basic/SourceManager.cpp",2312,"void SourceManager::noteSLocAddressSpaceUsage(DiagnosticsEngine &Diag, std::optional<unsigned> MaxNotes) const {\n  for (auto &[Entry, FileInfo] : llvm::make_range(SortedUsage.begin(), SortedEnd)) {\n    Diag.Report(FileInfo.Loc, diag::note_file_sloc_usage) << FileInfo.Inclusions << FileInfo.DirectSize << (FileInfo.TotalSize - FileInfo.DirectSize);"}},
[o]={
["clang/test/Misc/sloc-usage.cpp"]={"<built-in>:1:1: note: file entered 2 times using 14260B of space","clang/test/Misc/sloc-usage.cpp:1:1: note: file entered 1 time using 598B of space plus 51B for macro expansions","./clang/test/Misc/Inputs/include.h:1:1: note: file entered 3 times using 591B of space"}
}
},
},
["note_final_dtor_non_final_class_silence"]={
["note_final_dtor_non_final_class_silence"]={
[f]="mark A as \'...\' to silence this warning",
[b]="mark A as \'...\' to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="mark %0 as \'%select{final|sealed}1\' to silence this warning",
[h]="mark %0 as \'%select{final|sealed}1\' to silence this warning",
[g]=b,
[j]=i,
[e]="mark (.*?) as \'(?:final|sealed)\' to silence this warning",
[k]="mark (.*?) as \'(?:final|sealed)\' to silence this warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"94f3f3e7f46a",1567276544,"[NFC] Fix for rL370594"},
[m]={"94f3f3e7f46a",1567276544,"[NFC] Fix for rL370594"},
[n]={{q,6990,"/// 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  // Warn if the class has a final destructor but is not itself marked final.\n  if (!Record->hasAttr<FinalAttr>()) {\n    if (const CXXDestructorDecl *dtor = Record->getDestructor()) {\n      if (const FinalAttr *FA = dtor->getAttr<FinalAttr>()) {\n        Diag(Record->getLocation(), diag::note_final_dtor_non_final_class_silence) << Context.getRecordType(Record) << FA->isSpelledAsSealed();"}}
[n]={{r,6990,"/// 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  // Warn if the class has a final destructor but is not itself marked final.\n  if (!Record->hasAttr<FinalAttr>()) {\n    if (const CXXDestructorDecl *dtor = Record->getDestructor()) {\n      if (const FinalAttr *FA = dtor->getAttr<FinalAttr>()) {\n        Diag(Record->getLocation(), diag::note_final_dtor_non_final_class_silence) << Context.getRecordType(Record) << FA->isSpelledAsSealed();"}},
[o]={
["clang/test/CodeGenCXX/devirtualize-dtor-final.cpp"]={"clang/test/CodeGenCXX/devirtualize-dtor-final.cpp:6:10: note: mark \'Test1::C\' as \'final\' to silence this warning","clang/test/CodeGenCXX/devirtualize-dtor-final.cpp:7:10: note: mark \'Test1::D\' as \'final\' to silence this warning"}
}
},
},
["note_final_overrider"]={
["note_final_overrider"]={
[f]="final overrider of A in B",
[b]="final overrider of A in B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="final overrider of %q0 in %1",
[h]="final overrider of %q0 in %1",
[g]=b,
[j]=i,
[e]="final overrider of (.*?) in (.*?)",
[k]="final overrider of (.*?) in (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"4165bd677248",1269388076,"Implement computation of the final overriders for each virtual"},
[m]={"4165bd677248",1269388076,"Implement computation of the final overriders for each virtual"},
[n]={{t,19007,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  // Okay, we successfully defined \'Record\'.\n  if (Record) {\n    if (CXXRecord) {\n      if (!CXXRecord->isDependentType()) {\n        if (!CXXRecord->isInvalidDecl()) {\n          // If we have virtual base classes, we may end up finding multiple\n          // final overriders for a given virtual function. Check for this\n          // problem now.\n          if (CXXRecord->getNumVBases()) {\n            for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(), MEnd = FinalOverriders.end(); M != MEnd; ++M) {\n              for (OverridingMethods::iterator SO = M->second.begin(), SOEnd = M->second.end(); SO != SOEnd; ++SO) {\n                for (OverridingMethods::overriding_iterator OM = SO->second.begin(), OMEnd = SO->second.end(); OM != OMEnd; ++OM)\n                  Diag(OM->Method->getLocation(), diag::note_final_overrider) << (const NamedDecl *)M->first << OM->Method->getParent();"}}
[n]={{u,19007,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  // Okay, we successfully defined \'Record\'.\n  if (Record) {\n    if (CXXRecord) {\n      if (!CXXRecord->isDependentType()) {\n        if (!CXXRecord->isInvalidDecl()) {\n          // If we have virtual base classes, we may end up finding multiple\n          // final overriders for a given virtual function. Check for this\n          // problem now.\n          if (CXXRecord->getNumVBases()) {\n            for (CXXFinalOverriderMap::iterator M = FinalOverriders.begin(), MEnd = FinalOverriders.end(); M != MEnd; ++M) {\n              for (OverridingMethods::iterator SO = M->second.begin(), SOEnd = M->second.end(); SO != SOEnd; ++SO) {\n                for (OverridingMethods::overriding_iterator OM = SO->second.begin(), OMEnd = SO->second.end(); OM != OMEnd; ++OM)\n                  Diag(OM->Method->getLocation(), diag::note_final_overrider) << (const NamedDecl *)M->first << OM->Method->getParent();"}},
[o]={
["clang/test/CXX/class.derived/class.virtual/p2.cpp"]={"clang/test/CXX/class.derived/class.virtual/p2.cpp:11:16: note: final overrider of \'A::f\' in \'B\'","clang/test/CXX/class.derived/class.virtual/p2.cpp:15:16: note: final overrider of \'A::f\' in \'C\'","clang/test/CXX/class.derived/class.virtual/p2.cpp:11:16: note: final overrider of \'A::f\' in \'B\'","clang/test/CXX/class.derived/class.virtual/p2.cpp:11:16: note: final overrider of \'A::f\' in \'B\'"}
}
},
},
["note_first_module_difference"]={
["note_first_module_difference"]={
[f]="in first definition, possible difference is here",
[b]="in first definition, possible difference is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in first definition, possible difference is here",
[h]="in first definition, possible difference is here",
[g]=b,
[j]=i,
[e]="in first definition, possible difference is here",
[k]="in first definition, possible difference is here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"ca48d369bac3",1498009393,"[ODRHash] Supply more information when generic error message is emitted."},
[m]={"ca48d369bac3",1498009393,"[ODRHash] Supply more information when generic error message is emitted."},
[n]={{G,657,"void ODRDiagsEmitter::diagnoseSubMismatchUnexpected(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  if (DR.FirstDecl) {\n    Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference) << FirstRecord << DR.FirstDecl->getSourceRange();"}}
[n]={{N,657,"void ODRDiagsEmitter::diagnoseSubMismatchUnexpected(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  if (DR.FirstDecl) {\n    Diag(DR.FirstDecl->getLocation(), diag::note_first_module_difference) << FirstRecord << DR.FirstDecl->getSourceRange();"}}
},
},
["note_fixit_applied"]={
["note_fixit_applied"]={
[f]="FIX-IT applied suggested code changes",
[b]="FIX-IT applied suggested code changes",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="FIX-IT applied suggested code changes",
[h]="FIX-IT applied suggested code changes",
[g]=b,
[j]=i,
[e]="FIX\\-IT applied suggested code changes",
[k]="FIX\\-IT applied suggested code changes",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the"},
[m]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the"},
[n]={{"clang/lib/Frontend/Rewrite/FixItRewriter.cpp",196,"void FixItRewriter::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) {\n  Diag(Info.getLocation(), diag::note_fixit_applied);"}}
[n]={{"clang/lib/Frontend/Rewrite/FixItRewriter.cpp",196,"void FixItRewriter::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) {\n  Diag(Info.getLocation(), diag::note_fixit_applied);"}},
[o]={
["clang/test/Sema/objc-bool-constant-conversion-fixit.m"]={"clang/test/Sema/objc-bool-constant-conversion-fixit.m:8:8: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:11:5: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:14:5: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:17:5: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:17:5: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:20:5: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:23:5: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:26:5: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:31:5: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:34:5: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:37:5: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:37:5: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:46:8: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:49:3: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:54:8: note: FIX-IT applied suggested code changes","clang/test/Sema/objc-bool-constant-conversion-fixit.m:57:8: note: FIX-IT applied suggested code changes"}
}
},
},
["note_fixit_failed"]={
["note_fixit_failed"]={
[f]="FIX-IT unable to apply suggested code changes",
[b]="FIX-IT unable to apply suggested code changes",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="FIX-IT unable to apply suggested code changes",
[h]="FIX-IT unable to apply suggested code changes",
[g]=b,
[j]=i,
[e]="FIX\\-IT unable to apply suggested code changes",
[k]="FIX\\-IT unable to apply suggested code changes",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the"},
[m]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the"},
Line 4,862: Line 5,886:
},
},
["note_fixit_in_macro"]={
["note_fixit_in_macro"]={
[f]="FIX-IT unable to apply suggested code changes in a macro",
[b]="FIX-IT unable to apply suggested code changes in a macro",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="FIX-IT unable to apply suggested code changes in a macro",
[h]="FIX-IT unable to apply suggested code changes in a macro",
[g]=b,
[j]=i,
[e]="FIX\\-IT unable to apply suggested code changes in a macro",
[k]="FIX\\-IT unable to apply suggested code changes in a macro",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the"},
[m]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the"},
Line 4,874: Line 5,898:
},
},
["note_fixit_unfixed_error"]={
["note_fixit_unfixed_error"]={
[f]="FIX-IT detected an error it cannot fix",
[b]="FIX-IT detected an error it cannot fix",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="FIX-IT detected an error it cannot fix",
[h]="FIX-IT detected an error it cannot fix",
[g]=b,
[j]=i,
[e]="FIX\\-IT detected an error it cannot fix",
[k]="FIX\\-IT detected an error it cannot fix",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the"},
[m]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the"},
Line 4,886: Line 5,910:
},
},
["note_flexible_array_member"]={
["note_flexible_array_member"]={
[f]="initialized flexible array member A is here",
[b]="initialized flexible array member A is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="initialized flexible array member %0 is here",
[h]="initialized flexible array member %0 is here",
[g]=b,
[j]=i,
[e]="initialized flexible array member (.*?) is here",
[k]="initialized flexible array member (.*?) is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={wb,1236199783,vb},
[m]={Jb,1236199783,Kb},
[n]={{D,2121,"bool InitListChecker::CheckFlexibleArrayInit(const InitializedEntity &Entity, Expr *InitExpr, FieldDecl *Field, bool TopLevelObject) {\n  if (!VerifyOnly) {\n    SemaRef.Diag(Field->getLocation(), diag::note_flexible_array_member) << Field;"},{D,2884,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  if (D->isFieldDesignator()) {\n    // This designator names a flexible array member.\n    if (Field->getType()->isIncompleteArrayType()) {\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          SemaRef.Diag(Field->getLocation(), diag::note_flexible_array_member) << *Field;"},{D,2897,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  if (D->isFieldDesignator()) {\n    // This designator names a flexible array member.\n    if (Field->getType()->isIncompleteArrayType()) {\n      if (!hadError && !isa<InitListExpr>(DIE->getInit()) && !isa<StringLiteral>(DIE->getInit())) {\n        // The initializer is not an initializer list.\n        if (!VerifyOnly) {\n          SemaRef.Diag(Field->getLocation(), diag::note_flexible_array_member) << *Field;"},{D,5568,"static void TryOrBuildParenListInitialization(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result = nullptr) {\n  if (const ArrayType *AT = S.getASTContext().getAsArrayType(Entity.getType())) {\n  } else if (auto *RT = Entity.getType()->getAs<RecordType>()) {\n    for (FieldDecl *FD : RD->fields()) {\n      if (EntityIndexToProcess < Args.size()) {\n        // Incomplete array types indicate flexible array members. Do not allow\n        // paren list initializations of structs with these members, as GCC\n        // doesn\'t either.\n        if (FD->getType()->isIncompleteArrayType()) {\n          if (!VerifyOnly) {\n            S.Diag(FD->getLocation(), diag::note_flexible_array_member) << FD;"}}
[n]={{K,2121,"bool InitListChecker::CheckFlexibleArrayInit(const InitializedEntity &Entity, Expr *InitExpr, FieldDecl *Field, bool TopLevelObject) {\n  if (!VerifyOnly) {\n    SemaRef.Diag(Field->getLocation(), diag::note_flexible_array_member) << Field;"},{K,2884,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  if (D->isFieldDesignator()) {\n    // This designator names a flexible array member.\n    if (Field->getType()->isIncompleteArrayType()) {\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          SemaRef.Diag(Field->getLocation(), diag::note_flexible_array_member) << *Field;"},{K,2897,"/// Check the well-formedness of a C99 designated initializer.\n///\n/// Determines whether the designated initializer @p DIE, which\n/// resides at the given @p Index within the initializer list @p\n/// IList, is well-formed for a current object of type @p DeclType\n/// (C99 6.7.8). The actual subobject that this designator refers to\n/// within the current subobject is returned in either\n/// @p NextField or @p NextElementIndex (whichever is appropriate).\n///\n/// @param IList  The initializer list in which this designated\n/// initializer occurs.\n///\n/// @param DIE The designated initializer expression.\n///\n/// @param DesigIdx  The index of the current designator.\n///\n/// @param CurrentObjectType The type of the \"current object\" (C99 6.7.8p17),\n/// into which the designation in @p DIE should refer.\n///\n/// @param NextField  If non-NULL and the first designator in @p DIE is\n/// a field, this will be set to the field declaration corresponding\n/// to the field named by the designator. On input, this is expected to be\n/// the next field that would be initialized in the absence of designation,\n/// if the complete object being initialized is a struct.\n///\n/// @param NextElementIndex  If non-NULL and the first designator in @p\n/// DIE is an array designator or GNU array-range designator, this\n/// will be set to the last index initialized by this designator.\n///\n/// @param Index  Index into @p IList where the designated initializer\n/// @p DIE occurs.\n///\n/// @param StructuredList  The initializer list expression that\n/// describes all of the subobject initializers in the order they\'ll\n/// actually be initialized.\n///\n/// @returns true if there was an error, false otherwise.\nbool InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity, InitListExpr *IList, DesignatedInitExpr *DIE, unsigned DesigIdx, QualType &CurrentObjectType, RecordDecl::field_iterator *NextField, llvm::APSInt *NextElementIndex, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex, bool FinishSubobjectInit, bool TopLevelObject) {\n  if (D->isFieldDesignator()) {\n    // This designator names a flexible array member.\n    if (Field->getType()->isIncompleteArrayType()) {\n      if (!hadError && !isa<InitListExpr>(DIE->getInit()) && !isa<StringLiteral>(DIE->getInit())) {\n        // The initializer is not an initializer list.\n        if (!VerifyOnly) {\n          SemaRef.Diag(Field->getLocation(), diag::note_flexible_array_member) << *Field;"},{K,5568,"static void TryOrBuildParenListInitialization(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result = nullptr) {\n  if (const ArrayType *AT = S.getASTContext().getAsArrayType(Entity.getType())) {\n  } else if (auto *RT = Entity.getType()->getAs<RecordType>()) {\n    for (FieldDecl *FD : RD->fields()) {\n      if (EntityIndexToProcess < Args.size()) {\n        // Incomplete array types indicate flexible array members. Do not allow\n        // paren list initializations of structs with these members, as GCC\n        // doesn\'t either.\n        if (FD->getType()->isIncompleteArrayType()) {\n          if (!VerifyOnly) {\n            S.Diag(FD->getLocation(), diag::note_flexible_array_member) << FD;"}},
[o]={
["clang/test/Sema/flexible-array-init.c"]={"clang/test/Sema/flexible-array-init.c:4:7: note: initialized flexible array member \'values\' is here","clang/test/Sema/flexible-array-init.c:4:7: note: initialized flexible array member \'values\' is here","clang/test/Sema/flexible-array-init.c:4:7: note: initialized flexible array member \'values\' is here","clang/test/Sema/flexible-array-init.c:4:7: note: initialized flexible array member \'values\' is here",Ib,Ib,Ib,Ib,Ib,Ib,Ib,Ib,"clang/test/Sema/flexible-array-init.c:45:16: note: initialized flexible array member \'points\' is here","clang/test/Sema/flexible-array-init.c:70:8: note: initialized flexible array member \'v\' is here","clang/test/Sema/flexible-array-init.c:70:8: note: initialized flexible array member \'v\' is here","clang/test/Sema/flexible-array-init.c:82:6: note: initialized flexible array member \'v\' is here","clang/test/Sema/flexible-array-init.c:88:55: note: initialized flexible array member \'y\' is here"}
}
},
},
["note_for_range_begin_end"]={
["note_for_range_begin_end"]={
[f]="selected \'...\' ...A with iterator type B",
[b]="selected \'...\' ...A with iterator type B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="selected \'%select{begin|end}0\' %select{function|template }1%2 with iterator type %3",
[h]="selected \'%select{begin|end}0\' %select{function|template }1%2 with iterator type %3",
[g]=b,
[j]=i,
[e]="selected \'(?:begin|end)\' (?:function|template )(.*?) with iterator type (.*?)",
[k]="selected \'(?:begin|end)\' (?:function|template )(.*?) with iterator type (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"02e85f3bc5fc",1302818966,"Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291)."},
[m]={"02e85f3bc5fc",1302818966,"Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291)."},
[n]={{A,2442,"/// Produce a note indicating which begin/end function was implicitly called\n/// by a C++11 for-range statement. This is often not obvious from the code,\n/// nor from the diagnostics produced when analysing the implicit expressions\n/// required in a for-range statement.\nvoid NoteForRangeBeginEndFunction(Sema &SemaRef, Expr *E, BeginEndFunction BEF) {\n  SemaRef.Diag(Loc, diag::note_for_range_begin_end) << BEF << IsTemplate << Description << E->getType();"},{"clang/unittests/Format/FormatTest.cpp",10174,"TEST_F(FormatTest, AlignsPipes) {\n  verifyFormat(\"SemaRef.Diag(Loc, diag::note_for_range_begin_end)\\n\""}}
[n]={{H,2442,"/// Produce a note indicating which begin/end function was implicitly called\n/// by a C++11 for-range statement. This is often not obvious from the code,\n/// nor from the diagnostics produced when analysing the implicit expressions\n/// required in a for-range statement.\nvoid NoteForRangeBeginEndFunction(Sema &SemaRef, Expr *E, BeginEndFunction BEF) {\n  SemaRef.Diag(Loc, diag::note_for_range_begin_end) << BEF << IsTemplate << Description << E->getType();"},{"clang/unittests/Format/FormatTest.cpp",10174,"TEST_F(FormatTest, AlignsPipes) {\n  verifyFormat(\"SemaRef.Diag(Loc, diag::note_for_range_begin_end)\\n\""}},
[o]={
["clang/test/SemaCXX/for-range-dereference.cpp"]={"clang/test/SemaCXX/for-range-dereference.cpp:4:9: note: selected \'begin\' function with iterator type \'Data *\'"}
}
},
},
["note_for_range_invalid_iterator"]={
["note_for_range_invalid_iterator"]={
[f]="in implicit call to \'operator...\' for iterator of type A",
[b]="in implicit call to \'operator...\' for iterator of type A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in implicit call to \'operator%select{!=|*|++}0\' for iterator of type %1",
[h]="in implicit call to \'operator%select{!=|*|++}0\' for iterator of type %1",
[g]=b,
[j]=i,
[e]="in implicit call to \'operator(?:\\!\\=|\\*|\\+\\+)\' for iterator of type (.*?)",
[k]="in implicit call to \'operator(?:\\!\\=|\\*|\\+\\+)\' for iterator of type (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"22a3fe1b9c95",1346968208,"Clarified diagnostics for range-based for loops with invalid ranges"},
[m]={"22a3fe1b9c95",1346968208,"Clarified diagnostics for range-based for loops with invalid ranges"},
[n]={{A,3000,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  if (RangeVarType->isDependentType()) {\n  } else if (!BeginDeclStmt.get()) {\n    if (NotEqExpr.isInvalid()) {\n      Diag(RangeLoc, diag::note_for_range_invalid_iterator) << RangeLoc << 0 << BeginRangeRef.get()->getType();"},{A,3023,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  if (RangeVarType->isDependentType()) {\n  } else if (!BeginDeclStmt.get()) {\n    if (IncrExpr.isInvalid()) {\n      Diag(RangeLoc, diag::note_for_range_invalid_iterator) << RangeLoc << 2 << BeginRangeRef.get()->getType();"},{A,3037,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  if (RangeVarType->isDependentType()) {\n  } else if (!BeginDeclStmt.get()) {\n    if (DerefExpr.isInvalid()) {\n      Diag(RangeLoc, diag::note_for_range_invalid_iterator) << RangeLoc << 1 << BeginRangeRef.get()->getType();"}}
[n]={{H,3000,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  if (RangeVarType->isDependentType()) {\n  } else if (!BeginDeclStmt.get()) {\n    if (NotEqExpr.isInvalid()) {\n      Diag(RangeLoc, diag::note_for_range_invalid_iterator) << RangeLoc << 0 << BeginRangeRef.get()->getType();"},{H,3023,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  if (RangeVarType->isDependentType()) {\n  } else if (!BeginDeclStmt.get()) {\n    if (IncrExpr.isInvalid()) {\n      Diag(RangeLoc, diag::note_for_range_invalid_iterator) << RangeLoc << 2 << BeginRangeRef.get()->getType();"},{H,3037,"/// BuildCXXForRangeStmt - Build or instantiate a C++11 for-range statement.\nStmtResult Sema::BuildCXXForRangeStmt(SourceLocation ForLoc, SourceLocation CoawaitLoc, Stmt *InitStmt, SourceLocation ColonLoc, Stmt *RangeDecl, Stmt *Begin, Stmt *End, Expr *Cond, Expr *Inc, Stmt *LoopVarDecl, SourceLocation RParenLoc, BuildForRangeKind Kind) {\n  if (RangeVarType->isDependentType()) {\n  } else if (!BeginDeclStmt.get()) {\n    if (DerefExpr.isInvalid()) {\n      Diag(RangeLoc, diag::note_for_range_invalid_iterator) << RangeLoc << 1 << BeginRangeRef.get()->getType();"}},
[o]={
["clang/test/SemaCXX/co_await-range-for.cpp"]={"clang/test/SemaCXX/co_await-range-for.cpp:109:25: note: in implicit call to \'operator++\' for iterator of type \'Range<float>\'","clang/test/SemaCXX/co_await-range-for.cpp:117:25: note: in implicit call to \'operator++\' for iterator of type \'Range<long>\'"}
}
},
},
["note_for_range_member_begin_end_ignored"]={
["note_for_range_member_begin_end_ignored"]={
[f]="member is not a candidate because range type A has no \'...\' member",
[b]="member is not a candidate because range type A has no \'...\' member",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="member is not a candidate because range type %0 has no \'%select{end|begin}1\' member",
[h]="member is not a candidate because range type %0 has no \'%select{end|begin}1\' member",
[g]=b,
[j]=i,
[e]="member is not a candidate because range type (.*?) has no \'(?:end|begin)\' member",
[k]="member is not a candidate because range type (.*?) has no \'(?:end|begin)\' member",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"236ffdeeb2e0",1537831064,"P0962R1: only use the member form of \'begin\' and \'end\' in a range-based"},
[m]={"236ffdeeb2e0",1537831064,"P0962R1: only use the member form of \'begin\' and \'end\' in a range-based"},
[n]={{A,2678,"/// Create the initialization, compare, and increment steps for\n/// the range-based for loop expression.\n/// This function does not handle array-based for loops,\n/// which are created in Sema::BuildCXXForRangeStmt.\n///\n/// \\returns a ForRangeStatus indicating success or what kind of error occurred.\n/// BeginExpr and EndExpr are set and FRS_Success is returned on success;\n/// CandidateSet and BEF are set and some non-success value is returned on\n/// failure.\nstatic Sema::ForRangeStatus BuildNonArrayForRange(Sema &SemaRef, Expr *BeginRange, Expr *EndRange, QualType RangeType, VarDecl *BeginVar, VarDecl *EndVar, SourceLocation ColonLoc, SourceLocation CoawaitLoc, OverloadCandidateSet *CandidateSet, ExprResult *BeginExpr, ExprResult *EndExpr, BeginEndFunction *BEF) {\n  if (CXXRecordDecl *D = RangeType->getAsCXXRecordDecl()) {\n    if (BeginMemberLookup.empty() != EndMemberLookup.empty()) {\n      // Look up the non-member form of the member we didn\'t find, first.\n      // This way we prefer a \"no viable \'end\'\" diagnostic over a \"i found\n      // a \'begin\' but ignored it because there was no member \'end\'\"\n      // diagnostic.\n      auto BuildNonmember = [&](BeginEndFunction BEFFound, LookupResult &Found, llvm::function_ref<Sema::ForRangeStatus()> BuildFound, llvm::function_ref<Sema::ForRangeStatus()> BuildNotFound) {\n        case Sema::FRS_DiagnosticIssued:\n          for (NamedDecl *D : OldFound) {\n            SemaRef.Diag(D->getLocation(), diag::note_for_range_member_begin_end_ignored) << BeginRange->getType() << BEFFound;"}}
[n]={{H,2678,"/// Create the initialization, compare, and increment steps for\n/// the range-based for loop expression.\n/// This function does not handle array-based for loops,\n/// which are created in Sema::BuildCXXForRangeStmt.\n///\n/// \\returns a ForRangeStatus indicating success or what kind of error occurred.\n/// BeginExpr and EndExpr are set and FRS_Success is returned on success;\n/// CandidateSet and BEF are set and some non-success value is returned on\n/// failure.\nstatic Sema::ForRangeStatus BuildNonArrayForRange(Sema &SemaRef, Expr *BeginRange, Expr *EndRange, QualType RangeType, VarDecl *BeginVar, VarDecl *EndVar, SourceLocation ColonLoc, SourceLocation CoawaitLoc, OverloadCandidateSet *CandidateSet, ExprResult *BeginExpr, ExprResult *EndExpr, BeginEndFunction *BEF) {\n  if (CXXRecordDecl *D = RangeType->getAsCXXRecordDecl()) {\n    if (BeginMemberLookup.empty() != EndMemberLookup.empty()) {\n      // Look up the non-member form of the member we didn\'t find, first.\n      // This way we prefer a \"no viable \'end\'\" diagnostic over a \"i found\n      // a \'begin\' but ignored it because there was no member \'end\'\"\n      // diagnostic.\n      auto BuildNonmember = [&](BeginEndFunction BEFFound, LookupResult &Found, llvm::function_ref<Sema::ForRangeStatus()> BuildFound, llvm::function_ref<Sema::ForRangeStatus()> BuildNotFound) {\n        case Sema::FRS_DiagnosticIssued:\n          for (NamedDecl *D : OldFound) {\n            SemaRef.Diag(D->getLocation(), diag::note_for_range_member_begin_end_ignored) << BeginRange->getType() << BEFFound;"}},
[o]={
["clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp"]={"clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp:324:12: note: member is not a candidate because range type \'NE::E\' has no \'end\' member","clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp:331:12: note: member is not a candidate because range type \'NF::F\' has no \'begin\' member"}
}
},
},
["note_force_empty_selector_name"]={
["note_force_empty_selector_name"]={
[f]="or insert whitespace before \':\' to use A as parameter name and have an empty entry in the selector",
[b]="or insert whitespace before \':\' to use A as parameter name and have an empty entry in the selector",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="or insert whitespace before \':\' to use %0 as parameter name and have an empty entry in the selector",
[h]="or insert whitespace before \':\' to use %0 as parameter name and have an empty entry in the selector",
[g]=b,
[j]=i,
[e]="or insert whitespace before \'\\:\' to use (.*?) as parameter name and have an empty entry in the selector",
[k]="or insert whitespace before \'\\:\' to use (.*?) as parameter name and have an empty entry in the selector",
[d]=a,
[l]=a,
[c]=Q,
[c]=Z,
[m]={"84f498433116",1347923399,"objective-C: improve on warnings about misplacement of method"},
[m]={"84f498433116",1347923399,"objective-C: improve on warnings about misplacement of method"},
[n]={{Kb,1511,"///  objc-method-decl:\n///    objc-selector\n///    objc-keyword-selector objc-parmlist[opt]\n///    objc-type-name objc-selector\n///    objc-type-name objc-keyword-selector objc-parmlist[opt]\n///\n///  objc-keyword-selector:\n///    objc-keyword-decl\n///    objc-keyword-selector objc-keyword-decl\n///\n///  objc-keyword-decl:\n///    objc-selector \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    objc-selector \':\' objc-keyword-attributes[opt] identifier\n///    \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    \':\' objc-keyword-attributes[opt] identifier\n///\n///  objc-parmlist:\n///    objc-parms objc-ellipsis[opt]\n///\n///  objc-parms:\n///    objc-parms , parameter-declaration\n///\n///  objc-ellipsis:\n///    , ...\n///\n///  objc-keyword-attributes:        [OBJC2]\n///    __attribute__((unused))\n///\nDecl *Parser::ParseObjCMethodDecl(SourceLocation mLoc, tok::TokenKind mType, tok::ObjCKeywordKind MethodImplKind, bool MethodDefinition) {\n  while (true) {\n    if (!SelIdent) {\n      if (PP.getLocForEndOfToken(ArgInfo.NameLoc) == ColonLoc) {\n        Diag(ColonLoc, diag::note_force_empty_selector_name) << ArgInfo.Name;"}}
[n]={{Tb,1511,"///  objc-method-decl:\n///    objc-selector\n///    objc-keyword-selector objc-parmlist[opt]\n///    objc-type-name objc-selector\n///    objc-type-name objc-keyword-selector objc-parmlist[opt]\n///\n///  objc-keyword-selector:\n///    objc-keyword-decl\n///    objc-keyword-selector objc-keyword-decl\n///\n///  objc-keyword-decl:\n///    objc-selector \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    objc-selector \':\' objc-keyword-attributes[opt] identifier\n///    \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    \':\' objc-keyword-attributes[opt] identifier\n///\n///  objc-parmlist:\n///    objc-parms objc-ellipsis[opt]\n///\n///  objc-parms:\n///    objc-parms , parameter-declaration\n///\n///  objc-ellipsis:\n///    , ...\n///\n///  objc-keyword-attributes:        [OBJC2]\n///    __attribute__((unused))\n///\nDecl *Parser::ParseObjCMethodDecl(SourceLocation mLoc, tok::TokenKind mType, tok::ObjCKeywordKind MethodImplKind, bool MethodDefinition) {\n  while (true) {\n    if (!SelIdent) {\n      if (PP.getLocForEndOfToken(ArgInfo.NameLoc) == ColonLoc) {\n        Diag(ColonLoc, diag::note_force_empty_selector_name) << ArgInfo.Name;"}},
[o]={
["clang/test/SemaObjC/unused.m"]={"clang/test/SemaObjC/unused.m:32:21: note: or insert whitespace before \':\' to use \'x\' as parameter name and have an empty entry in the selector","clang/test/SemaObjC/unused.m:36:7: note: or insert whitespace before \':\' to use \'y\' as parameter name and have an empty entry in the selector"}
}
},
},
["note_format_fix_specifier"]={
["note_format_fix_specifier"]={
[f]="did you mean to use \'A\'?",
[b]="did you mean to use \'A\'?",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="did you mean to use \'%0\'?",
[h]="did you mean to use \'%0\'?",
[g]=b,
[j]=i,
[e]="did you mean to use \'(.*?)\'\\?",
[k]="did you mean to use \'(.*?)\'\\?",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"92303592c324",1347076803,"Format strings: %Ld isn\'t available on Darwin or Windows."},
[m]={"92303592c324",1347076803,"Format strings: %Ld isn\'t available on Darwin or Windows."},
[n]={{y,10140,"void CheckFormatHandler::HandleInvalidLengthModifier(const analyze_format_string::FormatSpecifier &FS, const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen, unsigned DiagID) {\n  if (FixedLM) {\n    S.Diag(getLocationOfByte(LM.getStart()), diag::note_format_fix_specifier) << FixedLM->toString() << FixItHint::CreateReplacement(LMRange, FixedLM->toString());"},{y,10174,"void CheckFormatHandler::HandleNonStandardLengthModifier(const analyze_format_string::FormatSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  if (FixedLM) {\n    S.Diag(getLocationOfByte(LM.getStart()), diag::note_format_fix_specifier) << FixedLM->toString() << FixItHint::CreateReplacement(LMRange, FixedLM->toString());"},{y,10202,"void CheckFormatHandler::HandleNonStandardConversionSpecifier(const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen) {\n  if (FixedCS) {\n    S.Diag(getLocationOfByte(CS.getStart()), diag::note_format_fix_specifier) << FixedCS->toString() << FixItHint::CreateReplacement(CSRange, FixedCS->toString());"}}
[n]={{D,10140,"void CheckFormatHandler::HandleInvalidLengthModifier(const analyze_format_string::FormatSpecifier &FS, const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen, unsigned DiagID) {\n  if (FixedLM) {\n    S.Diag(getLocationOfByte(LM.getStart()), diag::note_format_fix_specifier) << FixedLM->toString() << FixItHint::CreateReplacement(LMRange, FixedLM->toString());"},{D,10174,"void CheckFormatHandler::HandleNonStandardLengthModifier(const analyze_format_string::FormatSpecifier &FS, const char *startSpecifier, unsigned specifierLen) {\n  if (FixedLM) {\n    S.Diag(getLocationOfByte(LM.getStart()), diag::note_format_fix_specifier) << FixedLM->toString() << FixItHint::CreateReplacement(LMRange, FixedLM->toString());"},{D,10202,"void CheckFormatHandler::HandleNonStandardConversionSpecifier(const analyze_format_string::ConversionSpecifier &CS, const char *startSpecifier, unsigned specifierLen) {\n  if (FixedCS) {\n    S.Diag(getLocationOfByte(CS.getStart()), diag::note_format_fix_specifier) << FixedCS->toString() << FixItHint::CreateReplacement(CSRange, FixedCS->toString());"}},
[o]={
["clang/test/Sema/format-strings-non-iso.c"]={"clang/test/Sema/format-strings-non-iso.c:10:12: note: did you mean to use \'ll\'?","clang/test/Sema/format-strings-non-iso.c:11:11: note: did you mean to use \'ll\'?","clang/test/Sema/format-strings-non-iso.c:21:12: note: did you mean to use \'ll\'?","clang/test/Sema/format-strings-non-iso.c:22:12: note: did you mean to use \'ll\'?","clang/test/Sema/format-strings-non-iso.c:23:12: note: did you mean to use \'ll\'?","clang/test/Sema/format-strings-non-iso.c:24:12: note: did you mean to use \'ll\'?","clang/test/Sema/format-strings-non-iso.c:25:12: note: did you mean to use \'ll\'?"}
}
},
},
["note_format_security_fixit"]={
["note_format_security_fixit"]={
[f]="treat the string as an argument to avoid this",
[b]="treat the string as an argument to avoid this",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="treat the string as an argument to avoid this",
[h]="treat the string as an argument to avoid this",
[g]=b,
[j]=i,
[e]="treat the string as an argument to avoid this",
[k]="treat the string as an argument to avoid this",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"57819fc809d1",1458075398,"Move the fixit for -Wformat-security to a note."},
[m]={"57819fc809d1",1458075398,"Move the fixit for -Wformat-security to a note."},
[n]={{y,9973,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // If there are no arguments specified, warn with -Wformat-security, otherwise\n  // warn only with -Wformat-nonliteral.\n  if (Args.size() == firstDataArg) {\n    case FST_Printf:\n      Diag(FormatLoc, diag::note_format_security_fixit) << FixItHint::CreateInsertion(FormatLoc, \"\\\"%s\\\", \");"},{y,9977,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // If there are no arguments specified, warn with -Wformat-security, otherwise\n  // warn only with -Wformat-nonliteral.\n  if (Args.size() == firstDataArg) {\n    case FST_NSString:\n      Diag(FormatLoc, diag::note_format_security_fixit) << FixItHint::CreateInsertion(FormatLoc, \"@\\\"%@\\\", \");"}}
[n]={{D,9973,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // If there are no arguments specified, warn with -Wformat-security, otherwise\n  // warn only with -Wformat-nonliteral.\n  if (Args.size() == firstDataArg) {\n    case FST_Printf:\n      Diag(FormatLoc, diag::note_format_security_fixit) << FixItHint::CreateInsertion(FormatLoc, \"\\\"%s\\\", \");"},{D,9977,"bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args, Sema::FormatArgumentPassingKind APK, unsigned format_idx, unsigned firstDataArg, FormatStringType Type, VariadicCallType CallType, SourceLocation Loc, SourceRange Range, llvm::SmallBitVector &CheckedVarArgs) {\n  // If there are no arguments specified, warn with -Wformat-security, otherwise\n  // warn only with -Wformat-nonliteral.\n  if (Args.size() == firstDataArg) {\n    case FST_NSString:\n      Diag(FormatLoc, diag::note_format_security_fixit) << FixItHint::CreateInsertion(FormatLoc, \"@\\\"%@\\\", \");"}},
[o]={
["clang/test/SemaCXX/format-strings-0x.cpp"]={"clang/test/SemaCXX/format-strings-0x.cpp:17:10: note: treat the string as an argument to avoid this"}
}
},
},
["note_format_string_defined"]={
["note_format_string_defined"]={
[f]="format string is defined here",
[b]="format string is defined here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="format string is defined here",
[h]="format string is defined here",
[g]=b,
[j]=i,
[e]="format string is defined here",
[k]="format string is defined here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"03cf7b70e0d6",1319762485,"Fix for PR9751 to change the behavior of -Wformat warnings.  If the format"},
[m]={"03cf7b70e0d6",1319762485,"Fix for PR9751 to change the behavior of -Wformat warnings.  If the format"},
[n]={{y,10437,"/// If the format string is not within the function call, emit a note\n/// so that the function call and string are in diagnostic messages.\n///\n/// \\param InFunctionCall if true, the format string is within the function\n/// call and only one diagnostic message will be produced.  Otherwise, an\n/// extra note will be emitted pointing to location of the format string.\n///\n/// \\param ArgumentExpr the expression that is passed as the format string\n/// argument in the function call.  Used for getting locations when two\n/// diagnostics are emitted.\n///\n/// \\param PDiag the callee should already have provided any strings for the\n/// diagnostic message.  This function only adds locations and fixits\n/// to diagnostics.\n///\n/// \\param Loc primary location for diagnostic.  If two diagnostics are\n/// required, one will be at Loc and a new SourceLocation will be created for\n/// the other one.\n///\n/// \\param IsStringLocation if true, Loc points to the format string should be\n/// used for the note.  Otherwise, Loc points to the argument list and will\n/// be used with PDiag.\n///\n/// \\param StringRange some or all of the string to highlight.  This is\n/// templated so it can accept either a CharSourceRange or a SourceRange.\n///\n/// \\param FixIt optional fix it hint for the format string.\ntemplate <typename Range> void CheckFormatHandler::EmitFormatDiagnostic(Sema &S, bool InFunctionCall, const Expr *ArgumentExpr, const PartialDiagnostic &PDiag, SourceLocation Loc, bool IsStringLocation, Range StringRange, ArrayRef<FixItHint> FixIt) {\n  if (InFunctionCall) {\n  } else {\n    const Sema::SemaDiagnosticBuilder &Note = S.Diag(IsStringLocation ? Loc : StringRange.getBegin(), diag::note_format_string_defined);"}}
[n]={{D,10437,"/// If the format string is not within the function call, emit a note\n/// so that the function call and string are in diagnostic messages.\n///\n/// \\param InFunctionCall if true, the format string is within the function\n/// call and only one diagnostic message will be produced.  Otherwise, an\n/// extra note will be emitted pointing to location of the format string.\n///\n/// \\param ArgumentExpr the expression that is passed as the format string\n/// argument in the function call.  Used for getting locations when two\n/// diagnostics are emitted.\n///\n/// \\param PDiag the callee should already have provided any strings for the\n/// diagnostic message.  This function only adds locations and fixits\n/// to diagnostics.\n///\n/// \\param Loc primary location for diagnostic.  If two diagnostics are\n/// required, one will be at Loc and a new SourceLocation will be created for\n/// the other one.\n///\n/// \\param IsStringLocation if true, Loc points to the format string should be\n/// used for the note.  Otherwise, Loc points to the argument list and will\n/// be used with PDiag.\n///\n/// \\param StringRange some or all of the string to highlight.  This is\n/// templated so it can accept either a CharSourceRange or a SourceRange.\n///\n/// \\param FixIt optional fix it hint for the format string.\ntemplate <typename Range> void CheckFormatHandler::EmitFormatDiagnostic(Sema &S, bool InFunctionCall, const Expr *ArgumentExpr, const PartialDiagnostic &PDiag, SourceLocation Loc, bool IsStringLocation, Range StringRange, ArrayRef<FixItHint> FixIt) {\n  if (InFunctionCall) {\n  } else {\n    const Sema::SemaDiagnosticBuilder &Note = S.Diag(IsStringLocation ? Loc : StringRange.getBegin(), diag::note_format_string_defined);"}},
[o]={
["clang/test/SemaObjC/format-strings-objc.m"]={"clang/test/SemaObjC/format-strings-objc.m:127:45: note: format string is defined here","clang/test/SemaObjC/format-strings-objc.m:129:45: note: format string is defined here","clang/test/SemaObjC/format-strings-objc.m:136:45: note: format string is defined here","clang/test/SemaObjC/format-strings-objc.m:138:45: note: format string is defined here","clang/test/SemaObjC/format-strings-objc.m:145:49: note: format string is defined here"}
}
},
},
["note_forward_class"]={
["note_forward_class"]={
[f]="forward declaration of class here",
[b]="forward declaration of class here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="forward declaration of class here",
[h]="forward declaration of class here",
[g]=b,
[j]=i,
[e]="forward declaration of class here",
[k]="forward declaration of class here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up"},
[m]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up"},
[n]={{V,552,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  if (!Message.empty()) {\n  } else if (!UnknownObjCClass) {\n  } else {\n    S.Diag(UnknownObjCClass->getLocation(), diag::note_forward_class);"},{s,210,"/// Validates ObjCInterfaceDecl availability.\n/// ObjCInterfaceDecl, used to create ObjC literals, should be defined\n/// if clang not in a debugger mode.\nstatic bool ValidateObjCLiteralInterfaceDecl(Sema &S, ObjCInterfaceDecl *Decl, SourceLocation Loc, Sema::ObjCLiteralKind LiteralKind) {\n  if (!Decl) {\n  } else if (!Decl->hasDefinition() && !S.getLangOpts().DebuggerObjCLiteral) {\n    S.Diag(Decl->getLocation(), diag::note_forward_class);"},{B,9253,"/// The implementation of RequireCompleteType\nbool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser *Diagnoser) {\n  // If the Objective-C class was a forward declaration, produce a note.\n  if (IFace && !IFace->isInvalidDecl() && !IFace->getLocation().isInvalid())\n    Diag(IFace->getLocation(), diag::note_forward_class);"}}
[n]={{gb,552,"/// Actually emit an availability diagnostic for a reference to an unavailable\n/// decl.\n///\n/// \\param Ctx The context that the reference occurred in\n/// \\param ReferringDecl The exact declaration that was referenced.\n/// \\param OffendingDecl A related decl to \\c ReferringDecl that has an\n/// availability attribute corresponding to \\c K attached to it. Note that this\n/// may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and\n/// we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl\n/// and OffendingDecl is the EnumDecl.\nstatic void DoEmitAvailabilityWarning(Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef<SourceLocation> Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) {\n  if (!Message.empty()) {\n  } else if (!UnknownObjCClass) {\n  } else {\n    S.Diag(UnknownObjCClass->getLocation(), diag::note_forward_class);"},{t,210,"/// Validates ObjCInterfaceDecl availability.\n/// ObjCInterfaceDecl, used to create ObjC literals, should be defined\n/// if clang not in a debugger mode.\nstatic bool ValidateObjCLiteralInterfaceDecl(Sema &S, ObjCInterfaceDecl *Decl, SourceLocation Loc, Sema::ObjCLiteralKind LiteralKind) {\n  if (!Decl) {\n  } else if (!Decl->hasDefinition() && !S.getLangOpts().DebuggerObjCLiteral) {\n    S.Diag(Decl->getLocation(), diag::note_forward_class);"},{I,9253,"/// The implementation of RequireCompleteType\nbool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser *Diagnoser) {\n  // If the Objective-C class was a forward declaration, produce a note.\n  if (IFace && !IFace->isInvalidDecl() && !IFace->getLocation().isInvalid())\n    Diag(IFace->getLocation(), diag::note_forward_class);"}},
[o]={
["clang/test/SemaObjC/exprs.m"]={"clang/test/SemaObjC/exprs.m:36:8: note: forward declaration of class here"}
}
},
},
["note_forward_class_conversion"]={
["note_forward_class_conversion"]={
[f]="A is not defined, but forward declared here; conversion would be valid if it was derived from B",
[b]="A is not defined, but forward declared here; conversion would be valid if it was derived from B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is not defined, but forward declared here; conversion would be valid if it was derived from %1",
[h]="%0 is not defined, but forward declared here; conversion would be valid if it was derived from %1",
[g]=b,
[j]=i,
[e]="(.*?) is not defined, but forward declared here; conversion would be valid if it was derived from (.*?)",
[k]="(.*?) is not defined, but forward declared here; conversion would be valid if it was derived from (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Y,1582847864,W},
[m]={mb,1582847864,jb},
[n]={{D,9493,"/// Emit notes associated with an initialization that failed due to a\n/// \"simple\" conversion failure.\nstatic void emitBadConversionNotes(Sema &S, const InitializedEntity &entity, Expr *op) {\n  if (fromDecl && destDecl && fromDecl->getDeclKind() == Decl::CXXRecord && destDecl->getDeclKind() == Decl::CXXRecord && !fromDecl->isInvalidDecl() && !destDecl->isInvalidDecl() && !fromDecl->hasDefinition() && destPointeeType.getQualifiers().compatiblyIncludes(fromPointeeType.getQualifiers()))\n    S.Diag(fromDecl->getLocation(), diag::note_forward_class_conversion) << S.getASTContext().getTagDeclType(fromDecl) << S.getASTContext().getTagDeclType(destDecl);"}}
[n]={{K,9493,"/// Emit notes associated with an initialization that failed due to a\n/// \"simple\" conversion failure.\nstatic void emitBadConversionNotes(Sema &S, const InitializedEntity &entity, Expr *op) {\n  if (fromDecl && destDecl && fromDecl->getDeclKind() == Decl::CXXRecord && destDecl->getDeclKind() == Decl::CXXRecord && !fromDecl->isInvalidDecl() && !destDecl->isInvalidDecl() && !fromDecl->hasDefinition() && destPointeeType.getQualifiers().compatiblyIncludes(fromPointeeType.getQualifiers()))\n    S.Diag(fromDecl->getLocation(), diag::note_forward_class_conversion) << S.getASTContext().getTagDeclType(fromDecl) << S.getASTContext().getTagDeclType(destDecl);"}},
[o]={
["clang/test/SemaCXX/elaborated-type-specifier.cpp"]={"clang/test/SemaCXX/elaborated-type-specifier.cpp:29:10: note: \'S4\' is not defined, but forward declared here; conversion would be valid if it was derived from \'NS::S4\'"}
}
},
},
["note_forward_declaration"]={
["note_forward_declaration"]={
[f]="forward declaration of A",
[b]="forward declaration of A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="forward declaration of %0",
[h]="forward declaration of %0",
[g]=b,
[j]=i,
[e]="forward declaration of (.*?)",
[k]="forward declaration of (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={wb,1236199783,vb},
[m]={Jb,1236199783,Kb},
[n]={{u,10328,"// Explicit instantiation of a member class of a class template.\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr) {\n  if (!RecordDef) {\n    if (!Def) {\n      Diag(Pattern->getLocation(), diag::note_forward_declaration) << Pattern;"},{B,9248,"/// The implementation of RequireCompleteType\nbool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser *Diagnoser) {\n  // If the type was a forward declaration of a class/struct/union\n  // type, produce a note.\n  if (Tag && !Tag->isInvalidDecl() && !Tag->getLocation().isInvalid())\n    Diag(Tag->getLocation(), Tag->isBeingDefined() ? diag::note_type_being_defined : diag::note_forward_declaration) << Context.getTagDeclType(Tag);"},{B,9531,"QualType Sema::BuiltinEnumUnderlyingType(QualType BaseType, SourceLocation Loc) {\n  if (BaseType->isIncompleteType(&FwdDecl)) {\n    Diag(FwdDecl->getLocation(), diag::note_forward_declaration) << FwdDecl;"}}
[n]={{v,10328,"// Explicit instantiation of a member class of a class template.\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr) {\n  if (!RecordDef) {\n    if (!Def) {\n      Diag(Pattern->getLocation(), diag::note_forward_declaration) << Pattern;"},{I,9248,"/// The implementation of RequireCompleteType\nbool Sema::RequireCompleteTypeImpl(SourceLocation Loc, QualType T, CompleteTypeKind Kind, TypeDiagnoser *Diagnoser) {\n  // If the type was a forward declaration of a class/struct/union\n  // type, produce a note.\n  if (Tag && !Tag->isInvalidDecl() && !Tag->getLocation().isInvalid())\n    Diag(Tag->getLocation(), Tag->isBeingDefined() ? diag::note_type_being_defined : diag::note_forward_declaration) << Context.getTagDeclType(Tag);"},{I,9531,"QualType Sema::BuiltinEnumUnderlyingType(QualType BaseType, SourceLocation Loc) {\n  if (BaseType->isIncompleteType(&FwdDecl)) {\n    Diag(FwdDecl->getLocation(), diag::note_forward_declaration) << FwdDecl;"}},
[o]={
["clang/test/SemaCXX/PR6618.cpp"]={"clang/test/SemaCXX/PR6618.cpp:2:7: note: forward declaration of \'bar\'"}
}
},
},
["note_forward_template_decl"]={
["note_forward_template_decl"]={
[f]="forward declaration of template entity is here",
[b]="forward declaration of template entity is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="forward declaration of template entity is here",
[h]="forward declaration of template entity is here",
[g]=b,
[j]=i,
[e]="forward declaration of template entity is here",
[k]="forward declaration of template entity is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"7dcc97e7ac0a",1461046792,"Warn if function or variable cannot be implicitly instantiated"},
[m]={"7dcc97e7ac0a",1461046792,"Warn if function or variable cannot be implicitly instantiated"},
[n]={{dc,4903,"/// Instantiate the definition of the given function from its\n/// template.\n///\n/// \\param PointOfInstantiation the point at which the instantiation was\n/// required. Note that this is not precisely a \"point of instantiation\"\n/// for the function, but it\'s close.\n///\n/// \\param Function the already-instantiated declaration of a\n/// function template specialization or member function of a class template\n/// specialization.\n///\n/// \\param Recursive if true, recursively instantiates any functions that\n/// are required by this instantiation.\n///\n/// \\param DefinitionRequired if true, then we are performing an explicit\n/// instantiation where the body of the function is required. Complain if\n/// there is no such body.\nvoid Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, FunctionDecl *Function, bool Recursive, bool DefinitionRequired, bool AtEndOfTU) {\n  // FIXME: We need to track the instantiation stack in order to know which\n  // definitions should be visible within this instantiation.\n  if (DiagnoseUninstantiableTemplate(PointOfInstantiation, Function, Function->getInstantiatedFromMemberFunction(), PatternDecl, PatternDef, TSK,\n    if (DefinitionRequired)\n    else if (TSK == TSK_ExplicitInstantiationDefinition || (Function->isConstexpr() && !Recursive)) {\n    } else if (TSK == TSK_ImplicitInstantiation) {\n      if (AtEndOfTU && !getDiagnostics().hasErrorOccurred() && !getSourceManager().isInSystemHeader(PatternDecl->getBeginLoc())) {\n        Diag(PatternDecl->getLocation(), diag::note_forward_template_decl);"},{dc,5529,"/// Instantiate the definition of the given variable from its\n/// template.\n///\n/// \\param PointOfInstantiation the point at which the instantiation was\n/// required. Note that this is not precisely a \"point of instantiation\"\n/// for the variable, but it\'s close.\n///\n/// \\param Var the already-instantiated declaration of a templated variable.\n///\n/// \\param Recursive if true, recursively instantiates any functions that\n/// are required by this instantiation.\n///\n/// \\param DefinitionRequired if true, then we are performing an explicit\n/// instantiation where a definition of the variable is required. Complain\n/// if there is no such definition.\nvoid Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation, VarDecl *Var, bool Recursive, bool DefinitionRequired, bool AtEndOfTU) {\n  // If we don\'t have a definition of the variable template, we won\'t perform\n  // any instantiation. Rather, we rely on the user to instantiate this\n  // definition (or provide a specialization for it) in another translation\n  // unit.\n  if (!Def && !DefinitionRequired) {\n    if (TSK == TSK_ExplicitInstantiationDefinition) {\n    } else if (TSK == TSK_ImplicitInstantiation) {\n      // Warn about missing definition at the end of translation unit.\n      if (AtEndOfTU && !getDiagnostics().hasErrorOccurred() && !getSourceManager().isInSystemHeader(PatternDecl->getBeginLoc())) {\n        Diag(PatternDecl->getLocation(), diag::note_forward_template_decl);"}}
[n]={{nc,4903,"/// Instantiate the definition of the given function from its\n/// template.\n///\n/// \\param PointOfInstantiation the point at which the instantiation was\n/// required. Note that this is not precisely a \"point of instantiation\"\n/// for the function, but it\'s close.\n///\n/// \\param Function the already-instantiated declaration of a\n/// function template specialization or member function of a class template\n/// specialization.\n///\n/// \\param Recursive if true, recursively instantiates any functions that\n/// are required by this instantiation.\n///\n/// \\param DefinitionRequired if true, then we are performing an explicit\n/// instantiation where the body of the function is required. Complain if\n/// there is no such body.\nvoid Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, FunctionDecl *Function, bool Recursive, bool DefinitionRequired, bool AtEndOfTU) {\n  // FIXME: We need to track the instantiation stack in order to know which\n  // definitions should be visible within this instantiation.\n  if (DiagnoseUninstantiableTemplate(PointOfInstantiation, Function, Function->getInstantiatedFromMemberFunction(), PatternDecl, PatternDef, TSK,\n    if (DefinitionRequired)\n    else if (TSK == TSK_ExplicitInstantiationDefinition || (Function->isConstexpr() && !Recursive)) {\n    } else if (TSK == TSK_ImplicitInstantiation) {\n      if (AtEndOfTU && !getDiagnostics().hasErrorOccurred() && !getSourceManager().isInSystemHeader(PatternDecl->getBeginLoc())) {\n        Diag(PatternDecl->getLocation(), diag::note_forward_template_decl);"},{nc,5529,"/// Instantiate the definition of the given variable from its\n/// template.\n///\n/// \\param PointOfInstantiation the point at which the instantiation was\n/// required. Note that this is not precisely a \"point of instantiation\"\n/// for the variable, but it\'s close.\n///\n/// \\param Var the already-instantiated declaration of a templated variable.\n///\n/// \\param Recursive if true, recursively instantiates any functions that\n/// are required by this instantiation.\n///\n/// \\param DefinitionRequired if true, then we are performing an explicit\n/// instantiation where a definition of the variable is required. Complain\n/// if there is no such definition.\nvoid Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation, VarDecl *Var, bool Recursive, bool DefinitionRequired, bool AtEndOfTU) {\n  // If we don\'t have a definition of the variable template, we won\'t perform\n  // any instantiation. Rather, we rely on the user to instantiate this\n  // definition (or provide a specialization for it) in another translation\n  // unit.\n  if (!Def && !DefinitionRequired) {\n    if (TSK == TSK_ExplicitInstantiationDefinition) {\n    } else if (TSK == TSK_ImplicitInstantiation) {\n      // Warn about missing definition at the end of translation unit.\n      if (AtEndOfTU && !getDiagnostics().hasErrorOccurred() && !getSourceManager().isInSystemHeader(PatternDecl->getBeginLoc())) {\n        Diag(PatternDecl->getLocation(), diag::note_forward_template_decl);"}},
[o]={
["clang/test/CXX/temp/temp.spec/temp.explicit/p1-emit.cpp"]={"clang/test/CXX/temp/temp.spec/temp.explicit/p1-emit.cpp:6:12: note: forward declaration of template entity is here"}
}
},
},
["note_found_mutex_near_match"]={
["note_found_mutex_near_match"]={
[f]="found near match \'A\'",
[b]="found near match \'A\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="found near match \'%0\'",
[h]="found near match \'%0\'",
[g]=b,
[j]=i,
[e]="found near match \'(.*?)\'",
[k]="found near match \'(.*?)\'",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5ff1644e624e",1347307103,"Thread-safety analysis: differentiate between two forms of analysis; a precise"},
[m]={"5ff1644e624e",1347307103,"Thread-safety analysis: differentiate between two forms of analysis; a precise"},
[n]={{Z,1979,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    if (PossibleMatch) {\n      PartialDiagnosticAt Note(Loc, S.PDiag(diag::note_found_mutex_near_match) << *PossibleMatch);"}}
[n]={{eb,1979,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    if (PossibleMatch) {\n      PartialDiagnosticAt Note(Loc, S.PDiag(diag::note_found_mutex_near_match) << *PossibleMatch);"}},
[o]={
["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={"clang/test/SemaCXX/warn-thread-safety-analysis.cpp:583:8: note: found near match \'fooA.mu\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:604:12: note: found near match \'BarA.FooPointer->mu\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:613:20: note: found near match \'BarA.Foo.mu\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:622:13: note: found near match \'BarA.Foo.mu\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1338:7: note: found near match \'b1->mu1_\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1369:12: note: found near match \'b3->mu1_\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1374:6: note: found near match \'b3->mu1_\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1401:13: note: found near match \'lock_\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1404:13: note: found near match \'lock_\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:1603:7: note: found near match \'d1->mu\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2040:6: note: found near match \'bt.fooBase.mu_\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2461:18: note: found near match \'bar.getFoo().mu_\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2467:18: note: found near match \'bar.getFoo2(a).mu_\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2473:21: note: found near match \'bar.getFoo3(a, b).mu_\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2479:21: note: found near match \'getBarFoo(bar, a).mu_\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2485:39: note: found near match \'((0 < a) ? fooArray[1] : fooArray[b]).mu_\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2546:7: note: found near match \'f1->mu_\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2588:7: note: found near match \'b1->mu_\'","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:5200:31: note: found near match \'a.mu\'"}
}
},
},
["note_from_diagnose_if"]={
["note_from_diagnose_if"]={
[f]="from \'diagnose_if\' attribute on A:",
[b]="from \'diagnose_if\' attribute on A:",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="from \'diagnose_if\' attribute on %0:",
[h]="from \'diagnose_if\' attribute on %0:",
[g]=b,
[j]=i,
[e]="from \'diagnose_if\' attribute on (.*?)\\:",
[k]="from \'diagnose_if\' attribute on (.*?)\\:",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."},
[m]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."},
[n]={{P,6953,"template <typename CheckFn> static bool diagnoseDiagnoseIfAttrsWith(Sema &S, const NamedDecl *ND, bool ArgDependent, SourceLocation Loc, CheckFn &&IsSuccessful) {\n  if (ErrAttr != WarningBegin) {\n    S.Diag(DIA->getLocation(), diag::note_from_diagnose_if) << DIA->getParent() << DIA->getCond()->getSourceRange();"},{P,6961,"template <typename CheckFn> static bool diagnoseDiagnoseIfAttrsWith(Sema &S, const NamedDecl *ND, bool ArgDependent, SourceLocation Loc, CheckFn &&IsSuccessful) {\n  for (const auto *DIA : llvm::make_range(WarningBegin, Attrs.end()))\n    if (IsSuccessful(DIA)) {\n      S.Diag(DIA->getLocation(), diag::note_from_diagnose_if) << DIA->getParent() << DIA->getCond()->getSourceRange();"}}
[n]={{X,6953,"template <typename CheckFn> static bool diagnoseDiagnoseIfAttrsWith(Sema &S, const NamedDecl *ND, bool ArgDependent, SourceLocation Loc, CheckFn &&IsSuccessful) {\n  if (ErrAttr != WarningBegin) {\n    S.Diag(DIA->getLocation(), diag::note_from_diagnose_if) << DIA->getParent() << DIA->getCond()->getSourceRange();"},{X,6961,"template <typename CheckFn> static bool diagnoseDiagnoseIfAttrsWith(Sema &S, const NamedDecl *ND, bool ArgDependent, SourceLocation Loc, CheckFn &&IsSuccessful) {\n  for (const auto *DIA : llvm::make_range(WarningBegin, Attrs.end()))\n    if (IsSuccessful(DIA)) {\n      S.Diag(DIA->getLocation(), diag::note_from_diagnose_if) << DIA->getParent() << DIA->getCond()->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/operator-new-size-diagnose_if.cpp"]={"clang/test/SemaCXX/operator-new-size-diagnose_if.cpp:10:39: note: from \'diagnose_if\' attribute on \'operator new\':","clang/test/SemaCXX/operator-new-size-diagnose_if.cpp:15:41: note: from \'diagnose_if\' attribute on \'operator new[]\':","clang/test/SemaCXX/operator-new-size-diagnose_if.cpp:15:41: note: from \'diagnose_if\' attribute on \'operator new[]\':"}
}
},
},
["note_function_style_cast_add_parentheses"]={
["note_function_style_cast_add_parentheses"]={
[f]="add enclosing parentheses to perform a function-style cast",
[b]="add enclosing parentheses to perform a function-style cast",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add enclosing parentheses to perform a function-style cast",
[h]="add enclosing parentheses to perform a function-style cast",
[g]=b,
[j]=i,
[e]="add enclosing parentheses to perform a function\\-style cast",
[k]="add enclosing parentheses to perform a function\\-style cast",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"},
[m]={"ac63d63543ca",1506729445,"Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"},
[n]={{B,4031,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n  S.Diag(D.getBeginLoc(), diag::note_function_style_cast_add_parentheses) << FixItHint::CreateInsertion(D.getBeginLoc(), \"(\") << FixItHint::CreateInsertion(S.getLocForEndOfToken(D.getEndLoc()), \")\");"}}
[n]={{I,4031,"/// Produce an appropriate diagnostic for a declarator with top-level\n/// parentheses.\nstatic void warnAboutRedundantParens(Sema &S, Declarator &D, QualType T) {\n  S.Diag(D.getBeginLoc(), diag::note_function_style_cast_add_parentheses) << FixItHint::CreateInsertion(D.getBeginLoc(), \"(\") << FixItHint::CreateInsertion(S.getLocForEndOfToken(D.getEndLoc()), \")\");"}},
[o]={
["clang/test/Parser/cxx0x-condition.cpp"]={"clang/test/Parser/cxx0x-condition.cpp:17:7: note: add enclosing parentheses to perform a function-style cast","clang/test/Parser/cxx0x-condition.cpp:21:7: note: add enclosing parentheses to perform a function-style cast"}
}
},
},
["note_function_suggestion"]={
["note_function_suggestion"]={
[f]="did you mean A?",
[b]="did you mean A?",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="did you mean %0?",
[h]="did you mean %0?",
[g]=b,
[j]=i,
[e]="did you mean (.*?)\\?",
[k]="did you mean (.*?)\\?",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"2fb8b91f6f96",1323164772,"Suggest typo corrections for implicit function declarations."},
[m]={"2fb8b91f6f96",1323164772,"Suggest typo corrections for implicit function declarations."},
[n]={{t,16078,"/// ImplicitlyDefineFunction - An undeclared identifier was used in a function\n/// call, forming a call to an implicitly defined function (per C99 6.5.1p2).\nNamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc, IdentifierInfo &II, Scope *S) {\n  if (Corrected) {\n    if (Diagnose)\n      diagnoseTypo(Corrected, PDiag(diag::note_function_suggestion),"}}
[n]={{u,16078,"/// ImplicitlyDefineFunction - An undeclared identifier was used in a function\n/// call, forming a call to an implicitly defined function (per C99 6.5.1p2).\nNamedDecl *Sema::ImplicitlyDefineFunction(SourceLocation Loc, IdentifierInfo &II, Scope *S) {\n  if (Corrected) {\n    if (Diagnose)\n      diagnoseTypo(Corrected, PDiag(diag::note_function_suggestion),"}}
},
},
["note_function_template_deduction_instantiation_here"]={
["note_function_template_deduction_instantiation_here"]={
[f]="while substituting deduced template arguments into function template A B",
[b]="while substituting deduced template arguments into function template A B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="while substituting deduced template arguments into function template %0 %1",
[h]="while substituting deduced template arguments into function template %0 %1",
[g]=b,
[j]=i,
[e]="while substituting deduced template arguments into function template (.*?) (.*?)",
[k]="while substituting deduced template arguments into function template (.*?) (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"ff6cbdf806da",1246485666,"Keep track of more information within the template instantiation stack, e.g.,"},
[m]={"ff6cbdf806da",1246485666,"Keep track of more information within the template instantiation stack, e.g.,"},
[n]={{z,833,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DeducedTemplateArgumentSubstitution: {\n      if (FunctionTemplateDecl *FnTmpl = dyn_cast<FunctionTemplateDecl>(Active->Entity)) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_function_template_deduction_instantiation_here) << FnTmpl << getTemplateArgumentBindingsText(FnTmpl->getTemplateParameters(), Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}}
[n]={{G,833,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DeducedTemplateArgumentSubstitution: {\n      if (FunctionTemplateDecl *FnTmpl = dyn_cast<FunctionTemplateDecl>(Active->Entity)) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_function_template_deduction_instantiation_here) << FnTmpl << getTemplateArgumentBindingsText(FnTmpl->getTemplateParameters(), Active->TemplateArgs, Active->NumTemplateArgs) << Active->InstantiationRange;"}},
[o]={
["clang/test/SemaTemplate/instantiation-depth-subst.cpp"]={"clang/test/SemaTemplate/instantiation-depth-subst.cpp:4:46: note: while substituting deduced template arguments into function template \'f\' [with T = S]","clang/test/SemaTemplate/instantiation-depth-subst.cpp:4:46: note: while substituting deduced template arguments into function template \'f\' [with T = S]","clang/test/SemaTemplate/instantiation-depth-subst.cpp:9:9: note: while substituting deduced template arguments into function template \'f\' [with T = S]"}
}
},
},
["note_function_template_spec_here"]={
["note_function_template_spec_here"]={
[f]="in instantiation of function template specialization A requested here",
[b]="in instantiation of function template specialization A requested here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in instantiation of function template specialization %q0 requested here",
[h]="in instantiation of function template specialization %q0 requested here",
[g]=b,
[j]=i,
[e]="in instantiation of function template specialization (.*?) requested here",
[k]="in instantiation of function template specialization (.*?) requested here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"4adbc6d947b0",1245975003,"Implicit instantiation for function template specializations."},
[m]={"4adbc6d947b0",1245975003,"Implicit instantiation for function template specializations."},
[n]={{z,772,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n        if (Function->getPrimaryTemplate())\n          DiagID = diag::note_function_template_spec_here;"}}
[n]={{G,772,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::TemplateInstantiation: {\n      if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(D)) {\n      } else if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) {\n        if (Function->getPrimaryTemplate())\n          DiagID = diag::note_function_template_spec_here;"}},
[o]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:166:17: note: in instantiation of function template specialization \'dependent::n<double>\' requested here","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:105:14: note: in instantiation of function template specialization \'dependent::f<int[3]>\' requested here","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:133:5: note: in instantiation of function template specialization \'dependent::h2<int[]>\' requested here","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:145:14: note: in instantiation of function template specialization \'dependent::j<int[]>\' requested here","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:157:5: note: in instantiation of function template specialization \'dependent::l<int[3], int[4]>\' requested here","clang/test/CXX/dcl.decl/dcl.meaning/dcl.array/p3.cpp:158:5: note: in instantiation of function template specialization \'dependent::l<int[], int[]>\' requested here"}
}
},
},
["note_function_template_spec_matched"]={
["note_function_template_spec_matched"]={
[f]="function template A matches specialization B",
[b]="function template A matches specialization B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="function template %q0 matches specialization %1",
[h]="function template %q0 matches specialization %1",
[g]=b,
[j]=i,
[e]="function template (.*?) matches specialization (.*?)",
[k]="function template (.*?) matches specialization (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"3a923c2d3799",1253834087,"WIP implementation of explicit function template specialization. This"},
[m]={"3a923c2d3799",1253834087,"WIP implementation of explicit function template specialization. This"},
[n]={{u,9500,"/// Perform semantic analysis for the given function template\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit function template specialization. On successful completion,\n/// the function declaration \\p FD will become a function template\n/// specialization.\n///\n/// \\param FD the function declaration, which will be updated to become a\n/// function template specialization.\n///\n/// \\param ExplicitTemplateArgs the explicitly-provided template arguments,\n/// if any. Note that this may be valid info even when 0 arguments are\n/// explicitly provided as in, e.g., \\c void sort<>(char*, char*);\n/// as it anyway contains info on the angle brackets locations.\n///\n/// \\param Previous the set of declarations that may be specialized by\n/// this function specialization.\n///\n/// \\param QualifiedFriend whether this is a lookup for a qualified friend\n/// declaration with no explicit template argument list that might be\n/// befriending a function template specialization.\nbool Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, LookupResult &Previous, bool QualifiedFriend) {\n  UnresolvedSetIterator Result = getMostSpecialized(Candidates.begin(), Candidates.end(), FailedCandidates, FD->getLocation(), PDiag(diag::err_function_template_spec_no_match) << FD->getDeclName(), PDiag(diag::err_function_template_spec_ambiguous) << FD->getDeclName() << (ExplicitTemplateArgs != nullptr), PDiag(diag::note_function_template_spec_matched));"}}
[n]={{v,9500,"/// Perform semantic analysis for the given function template\n/// specialization.\n///\n/// This routine performs all of the semantic analysis required for an\n/// explicit function template specialization. On successful completion,\n/// the function declaration \\p FD will become a function template\n/// specialization.\n///\n/// \\param FD the function declaration, which will be updated to become a\n/// function template specialization.\n///\n/// \\param ExplicitTemplateArgs the explicitly-provided template arguments,\n/// if any. Note that this may be valid info even when 0 arguments are\n/// explicitly provided as in, e.g., \\c void sort<>(char*, char*);\n/// as it anyway contains info on the angle brackets locations.\n///\n/// \\param Previous the set of declarations that may be specialized by\n/// this function specialization.\n///\n/// \\param QualifiedFriend whether this is a lookup for a qualified friend\n/// declaration with no explicit template argument list that might be\n/// befriending a function template specialization.\nbool Sema::CheckFunctionTemplateSpecialization(FunctionDecl *FD, TemplateArgumentListInfo *ExplicitTemplateArgs, LookupResult &Previous, bool QualifiedFriend) {\n  UnresolvedSetIterator Result = getMostSpecialized(Candidates.begin(), Candidates.end(), FailedCandidates, FD->getLocation(), PDiag(diag::err_function_template_spec_no_match) << FD->getDeclName(), PDiag(diag::err_function_template_spec_ambiguous) << FD->getDeclName() << (ExplicitTemplateArgs != nullptr), PDiag(diag::note_function_template_spec_matched));"}},
[o]={
["clang/test/SemaTemplate/function-template-specialization.cpp"]={"clang/test/SemaTemplate/function-template-specialization.cpp:26:27: note: function template \'f1<int>\' matches specialization [with T = int]","clang/test/SemaTemplate/function-template-specialization.cpp:20:22: note: function template \'f1<17>\' matches specialization [with N = 17]","clang/test/SemaTemplate/function-template-specialization.cpp:19:34: note: function template \'f1<int, 17>\' matches specialization [with T = int, N = 17]"}
}
},
},
["note_function_to_function_call"]={
["note_function_to_function_call"]={
[f]="suffix with parentheses to turn this into a function call",
[b]="suffix with parentheses to turn this into a function call",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="suffix with parentheses to turn this into a function call",
[h]="suffix with parentheses to turn this into a function call",
[g]=b,
[j]=i,
[e]="suffix with parentheses to turn this into a function call",
[k]="suffix with parentheses to turn this into a function call",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"3bb8b56a5d90",1393382166,"PR16074, implement warnings to catch pointer to boolean true and pointer to"},
[m]={"3bb8b56a5d90",1393382166,"PR16074, implement warnings to catch pointer to boolean true and pointer to"},
[n]={{y,15621,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  Diag(E->getExprLoc(), diag::note_function_to_function_call) << FixItHint::CreateInsertion(getLocForEndOfToken(E->getEndLoc()), \"()\");"}}
[n]={{D,15621,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  Diag(E->getExprLoc(), diag::note_function_to_function_call) << FixItHint::CreateInsertion(getLocForEndOfToken(E->getEndLoc()), \"()\");"}},
[o]={
["clang/test/SemaCXX/warn-tautological-compare.cpp"]={"clang/test/SemaCXX/warn-tautological-compare.cpp:82:9: note: suffix with parentheses to turn this into a function call","clang/test/SemaCXX/warn-tautological-compare.cpp:86:9: note: suffix with parentheses to turn this into a function call","clang/test/SemaCXX/warn-tautological-compare.cpp:99:20: note: suffix with parentheses to turn this into a function call","clang/test/SemaCXX/warn-tautological-compare.cpp:106:9: note: suffix with parentheses to turn this into a function call"}
}
},
},
["note_function_warning_silence"]={
["note_function_warning_silence"]={
[f]="prefix with the address-of operator to silence this warning",
[b]="prefix with the address-of operator to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="prefix with the address-of operator to silence this warning",
[h]="prefix with the address-of operator to silence this warning",
[g]=b,
[j]=i,
[e]="prefix with the address\\-of operator to silence this warning",
[k]="prefix with the address\\-of operator to silence this warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"3bb8b56a5d90",1393382166,"PR16074, implement warnings to catch pointer to boolean true and pointer to"},
[m]={"3bb8b56a5d90",1393382166,"PR16074, implement warnings to catch pointer to boolean true and pointer to"},
[n]={{y,15592,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  Diag(E->getExprLoc(), diag::note_function_warning_silence) << FixItHint::CreateInsertion(E->getBeginLoc(), \"&\");"}}
[n]={{D,15592,"/// Diagnose pointers that are always non-null.\n/// \\param E the expression containing the pointer\n/// \\param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is\n/// compared to a null pointer\n/// \\param IsEqual True when the comparison is equal to a null pointer\n/// \\param Range Extra SourceRange to highlight in the diagnostic\nvoid Sema::DiagnoseAlwaysNonNullPointer(Expr *E, Expr::NullPointerConstantKind NullKind, bool IsEqual, SourceRange Range) {\n  Diag(E->getExprLoc(), diag::note_function_warning_silence) << FixItHint::CreateInsertion(E->getBeginLoc(), \"&\");"}},
[o]={
["clang/test/SemaCXX/condition.cpp"]={"clang/test/SemaCXX/condition.cpp:53:7: note: prefix with the address-of operator to silence this warning"}
}
},
},
["note_getter_unavailable"]={
["note_getter_unavailable"]={
[f]="or because setter is declared here, but no getter method A is found",
[b]="or because setter is declared here, but no getter method A is found",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="or because setter is declared here, but no getter method %0 is found",
[h]="or because setter is declared here, but no getter method %0 is found",
[g]=b,
[j]=i,
[e]="or because setter is declared here, but no getter method (.*?) is found",
[k]="or because setter is declared here, but no getter method (.*?) is found",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"c5d61df0a96e",1266604230,"Issue extended diagnostic when property dot-syntax is used and "},
[m]={"c5d61df0a96e",1266604230,"Issue extended diagnostic when property dot-syntax is used and "},
[n]={{s,2152,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  if (Setter)\n    Diag(Setter->getLocation(), diag::note_getter_unavailable) << MemberName << BaseExpr->getSourceRange();"}}
[n]={{t,2152,"/// HandleExprPropertyRefExpr - Handle foo.bar where foo is a pointer to an\n/// objective C interface.  This is a property reference expression.\nExprResult Sema::HandleExprPropertyRefExpr(const ObjCObjectPointerType *OPT, Expr *BaseExpr, SourceLocation OpLoc, DeclarationName MemberName, SourceLocation MemberLoc, SourceLocation SuperLoc, QualType SuperType, bool Super) {\n  if (Setter)\n    Diag(Setter->getLocation(), diag::note_getter_unavailable) << MemberName << BaseExpr->getSourceRange();"}}
},
},
["note_global_module_introducer_missing"]={
["note_global_module_introducer_missing"]={
[f]="add \'module;\' to the start of the file to introduce a global module fragment",
[b]="add \'module;\' to the start of the file to introduce a global module fragment",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add \'module;\' to the start of the file to introduce a global module fragment",
[h]="add \'module;\' to the start of the file to introduce a global module fragment",
[g]=b,
[j]=i,
[e]="add \'module;\' to the start of the file to introduce a global module fragment",
[k]="add \'module;\' to the start of the file to introduce a global module fragment",
[d]=a,
[l]=a,
[c]=Sb,
[c]=fc,
[m]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,"},
[m]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,"},
[n]={{cb,255,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // In C++20, the module-declaration must be the first declaration if there\n  // is no global module fragment.\n  if (getLangOpts().CPlusPlusModules && !IsFirstDecl && !SeenGMF) {\n    if (BeginLoc.isValid()) {\n      Diag(BeginLoc, diag::note_global_module_introducer_missing) << FixItHint::CreateInsertion(BeginLoc, \"module;\\n\");"}}
[n]={{ib,255,"Sema::DeclGroupPtrTy Sema::ActOnModuleDecl(SourceLocation StartLoc, SourceLocation ModuleLoc, ModuleDeclKind MDK, ModuleIdPath Path, ModuleIdPath Partition, ModuleImportState &ImportState) {\n  // In C++20, the module-declaration must be the first declaration if there\n  // is no global module fragment.\n  if (getLangOpts().CPlusPlusModules && !IsFirstDecl && !SeenGMF) {\n    if (BeginLoc.isValid()) {\n      Diag(BeginLoc, diag::note_global_module_introducer_missing) << FixItHint::CreateInsertion(BeginLoc, \"module;\\n\");"}},
[o]={
["clang/test/CXX/basic/basic.link/p1.cpp"]={"clang/test/CXX/basic/basic.link/p1.cpp:1:1: note: add \'module;\' to the start of the file to introduce a global module fragment"}
}
},
},
["note_goto_ms_asm_label"]={
["note_goto_ms_asm_label"]={
[f]="inline assembly label A declared here",
[b]="inline assembly label A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="inline assembly label %0 declared here",
[h]="inline assembly label %0 declared here",
[g]=b,
[j]=i,
[e]="inline assembly label (.*?) declared here",
[k]="inline assembly label (.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"31097581aad8",1411352514,"ms-inline-asm: Scope inline asm labels to functions"},
[m]={"31097581aad8",1411352514,"ms-inline-asm: Scope inline asm labels to functions"},
[n]={{x,997,"void JumpScopeChecker::CheckGotoStmt(GotoStmt *GS) {\n  if (GS->getLabel()->isMSAsmLabel()) {\n    S.Diag(GS->getLabel()->getLocation(), diag::note_goto_ms_asm_label) << GS->getLabel()->getIdentifier();"}}
[n]={{B,997,"void JumpScopeChecker::CheckGotoStmt(GotoStmt *GS) {\n  if (GS->getLabel()->isMSAsmLabel()) {\n    S.Diag(GS->getLabel()->getLocation(), diag::note_goto_ms_asm_label) << GS->getLabel()->getIdentifier();"}},
[o]={
["clang/test/Sema/ms-inline-asm.c"]={"clang/test/Sema/ms-inline-asm.c:115:5: note: inline assembly label \'foo\' declared here","clang/test/Sema/ms-inline-asm.c:122:9: note: inline assembly label \'foo\' declared here","clang/test/Sema/ms-inline-asm.c:130:5: note: inline assembly label \'foo\' declared here","clang/test/Sema/ms-inline-asm.c:137:9: note: inline assembly label \'foo\' declared here"}
}
},
},
["note_guarded_by_declared_here"]={
["note_guarded_by_declared_here"]={
[f]="guarded_by declared here",
[b]="guarded_by declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="guarded_by declared here",
[h]="guarded_by declared here",
[g]=b,
[j]=i,
[e]="guarded_by declared here",
[k]="guarded_by declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"eb0ea5f40a48",1408052415,"Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpf..."},
[m]={"eb0ea5f40a48",1408052415,"Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpf..."},
[n]={{Z,1983,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    if (PossibleMatch) {\n      if (Verbose && POK == POK_VarAccess) {\n        PartialDiagnosticAt VNote(D->getLocation(), S.PDiag(diag::note_guarded_by_declared_here) << D->getDeclName());"},{Z,2011,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    if (PossibleMatch) {\n    } else {\n      if (Verbose && POK == POK_VarAccess) {\n        PartialDiagnosticAt Note(D->getLocation(), S.PDiag(diag::note_guarded_by_declared_here));"}}
[n]={{eb,1983,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    if (PossibleMatch) {\n      if (Verbose && POK == POK_VarAccess) {\n        PartialDiagnosticAt VNote(D->getLocation(), S.PDiag(diag::note_guarded_by_declared_here) << D->getDeclName());"},{eb,2011,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleMutexNotHeld(StringRef Kind, const NamedDecl *D, ProtectedOperationKind POK, Name LockName, LockKind LK, SourceLocation Loc, Name *PossibleMatch) override {\n    if (PossibleMatch) {\n    } else {\n      if (Verbose && POK == POK_VarAccess) {\n        PartialDiagnosticAt Note(D->getLocation(), S.PDiag(diag::note_guarded_by_declared_here));"}},
[o]={
["clang/test/SemaCXX/warn-thread-safety-verbose.cpp"]={"clang/test/SemaCXX/warn-thread-safety-verbose.cpp:24:7: note: guarded_by declared here","clang/test/SemaCXX/warn-thread-safety-verbose.cpp:24:7: note: guarded_by declared here","clang/test/SemaCXX/warn-thread-safety-verbose.cpp:24:7: note: guarded_by declared here"}
}
},
},
["note_header_guard"]={
["note_header_guard"]={
[f]="A is defined here; did you mean B?",
[b]="A is defined here; did you mean B?",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is defined here; did you mean %1?",
[h]="%0 is defined here; did you mean %1?",
[g]=b,
[j]=i,
[e]="(.*?) is defined here; did you mean (.*?)\\?",
[k]="(.*?) is defined here; did you mean (.*?)\\?",
[d]=a,
[l]=a,
[c]=R,
[c]=bb,
[m]={"33a4b3db0de5",1371072057,"Introducing -Wheader-guard, a warning that checks header guards actually work"},
[m]={"33a4b3db0de5",1371072057,"Introducing -Wheader-guard, a warning that checks header guards actually work"},
[n]={{"clang/lib/Lex/PPLexerChange.cpp",399,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // See if this file had a controlling macro.\n  if (CurPPLexer) { // Not ending a macro, ignore it.\n    if (const IdentifierInfo *ControllingMacro = CurPPLexer->MIOpt.GetControllingMacroAtEndOfFile()) {\n      // Okay, this has a controlling macro, remember in HeaderFileInfo.\n      if (const FileEntry *FE = CurPPLexer->getFileEntry()) {\n        if (const IdentifierInfo *DefinedMacro = CurPPLexer->MIOpt.GetDefinedMacro()) {\n          if (!isMacroDefined(ControllingMacro) && DefinedMacro != ControllingMacro && CurLexer->isFirstTimeLexingFile()) {\n            if (ED <= MaxHalfLength) {\n              Diag(CurPPLexer->MIOpt.GetDefinedLocation(), diag::note_header_guard) << CurPPLexer->MIOpt.GetDefinedLocation() << DefinedMacro << ControllingMacro << FixItHint::CreateReplacement(CurPPLexer->MIOpt.GetDefinedLocation(), ControllingMacro->getName());"}}
[n]={{"clang/lib/Lex/PPLexerChange.cpp",399,"/// HandleEndOfFile - This callback is invoked when the lexer hits the end of\n/// the current file.  This either returns the EOF token or pops a level off\n/// the include stack and keeps going.\nbool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {\n  // See if this file had a controlling macro.\n  if (CurPPLexer) { // Not ending a macro, ignore it.\n    if (const IdentifierInfo *ControllingMacro = CurPPLexer->MIOpt.GetControllingMacroAtEndOfFile()) {\n      // Okay, this has a controlling macro, remember in HeaderFileInfo.\n      if (const FileEntry *FE = CurPPLexer->getFileEntry()) {\n        if (const IdentifierInfo *DefinedMacro = CurPPLexer->MIOpt.GetDefinedMacro()) {\n          if (!isMacroDefined(ControllingMacro) && DefinedMacro != ControllingMacro && CurLexer->isFirstTimeLexingFile()) {\n            if (ED <= MaxHalfLength) {\n              Diag(CurPPLexer->MIOpt.GetDefinedLocation(), diag::note_header_guard) << CurPPLexer->MIOpt.GetDefinedLocation() << DefinedMacro << ControllingMacro << FixItHint::CreateReplacement(CurPPLexer->MIOpt.GetDefinedLocation(), ControllingMacro->getName());"}},
[o]={
["clang/test/Lexer/header.cpp"]={"clang/test/Lexer/Inputs/bad-header-guard.h:2:9: note: \'bad_guard\' is defined here; did you mean \'bad_header_guard\'?","clang/test/Lexer/Inputs/bad-header-guard-defined.h:2:9: note: \'goo\' is defined here; did you mean \'foo\'?","clang/test/Lexer/Inputs/multiple.h:2:9: note: \'multi\' is defined here; did you mean \'multiple\'?"}
}
},
},
["note_hidden_overloaded_virtual_declared_here"]={
["note_hidden_overloaded_virtual_declared_here"]={
[f]="hidden overloaded virtual function A declared here...",
[b]="hidden overloaded virtual function A declared here...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="hidden overloaded virtual function %q0 declared here%select{|: different classes%diff{ ($ vs $)|}2,3|: different number of parameters (%2 vs %3)|: type mismatch at %ordinal2 parameter%diff{ ($ vs $)|}3,4|: different return type%diff{ ($ vs $)|}2,3|: different qualifiers (%2 vs %3)|: different exception specifications}1",
[h]="hidden overloaded virtual function %q0 declared here%select{|: different classes%diff{ ($ vs $)|}2,3|: different number of parameters (%2 vs %3)|: type mismatch at %ordinal2 parameter%diff{ ($ vs $)|}3,4|: different return type%diff{ ($ vs $)|}2,3|: different qualifiers (%2 vs %3)|: different exception specifications}1",
[g]=b,
[j]=i,
[e]="hidden overloaded virtual function (.*?) declared here(?:|\\: different classes(?: \\((.*?) vs (.*?)\\)|)|\\: different number of parameters \\((.*?) vs (.*?)\\)|\\: type mismatch at (.*?) parameter(?: \\((.*?) vs (.*?)\\)|)|\\: different return type(?: \\((.*?) vs (.*?)\\)|)|\\: different qualifiers \\((.*?) vs (.*?)\\)|\\: different exception specifications)",
[k]="hidden overloaded virtual function (.*?) declared here(?:|\\: different classes(?: \\((.*?) vs (.*?)\\)|)|\\: different number of parameters \\((.*?) vs (.*?)\\)|\\: type mismatch at (.*?) parameter(?: \\((.*?) vs (.*?)\\)|)|\\: different return type(?: \\((.*?) vs (.*?)\\)|)|\\: different qualifiers \\((.*?) vs (.*?)\\)|\\: different exception specifications)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"7272d9cf36cd",1296756075,"Implement -Woverloaded-virtual."},
[m]={"7272d9cf36cd",1296756075,"Implement -Woverloaded-virtual."},
[n]={{q,10272,"void Sema::NoteHiddenVirtualMethods(CXXMethodDecl *MD, SmallVectorImpl<CXXMethodDecl *> &OverloadedMethods) {\n  for (unsigned i = 0, e = OverloadedMethods.size(); i != e; ++i) {\n    PartialDiagnostic PD = PDiag(diag::note_hidden_overloaded_virtual_declared_here) << overloadedMD;"}}
[n]={{r,10272,"void Sema::NoteHiddenVirtualMethods(CXXMethodDecl *MD, SmallVectorImpl<CXXMethodDecl *> &OverloadedMethods) {\n  for (unsigned i = 0, e = OverloadedMethods.size(); i != e; ++i) {\n    PartialDiagnostic PD = PDiag(diag::note_hidden_overloaded_virtual_declared_here) << overloadedMD;"}},
[o]={
["clang/test/SemaCXX/warn-overloaded-virtual.cpp"]={"clang/test/SemaCXX/warn-overloaded-virtual.cpp:4:16: note: hidden overloaded virtual function \'B1::foo\' declared here: type mismatch at 1st parameter (\'int\' vs \'float\')","clang/test/SemaCXX/warn-overloaded-virtual.cpp:5:16: note: hidden overloaded virtual function \'B1::foo\' declared here: different number of parameters (0 vs 1)","clang/test/SemaCXX/warn-overloaded-virtual.cpp:13:8: note: hidden overloaded virtual function \'S2::foo\' declared here: different number of parameters (0 vs 1)","clang/test/SemaCXX/warn-overloaded-virtual.cpp:17:16: note: hidden overloaded virtual function \'B2::foo\' declared here: type mismatch at 1st parameter (\'void *\' vs \'int\')","clang/test/SemaCXX/warn-overloaded-virtual.cpp:126:17: note: hidden overloaded virtual function \'(anonymous namespace)::A::foo\' declared here: type mismatch at 1st parameter (\'bool\' vs \'int\')","clang/test/SemaCXX/warn-overloaded-virtual.cpp:128:17: note: hidden overloaded virtual function \'(anonymous namespace)::A::foo\' declared here: different number of parameters (2 vs 1)","clang/test/SemaCXX/warn-overloaded-virtual.cpp:130:17: note: hidden overloaded virtual function \'(anonymous namespace)::A::foo\' declared here: type mismatch at 1st parameter (\'int *\' vs \'int\')","clang/test/SemaCXX/warn-overloaded-virtual.cpp:132:17: note: hidden overloaded virtual function \'(anonymous namespace)::A::foo\' declared here: different qualifiers (\'volatile\' vs \'const\')"}
}
},
},
["note_hidden_tag"]={
["note_hidden_tag"]={
[f]="type declaration hidden",
[b]="type declaration hidden",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="type declaration hidden",
[h]="type declaration hidden",
[g]=b,
[j]=i,
[e]="type declaration hidden",
[k]="type declaration hidden",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"6538c930503a",1255153699,"Qualified lookup through using declarations.  Diagnose a new type of ambiguity."},
[m]={"6538c930503a",1255153699,"Qualified lookup through using declarations.  Diagnose a new type of ambiguity."},
[n]={{zb,2845,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousTagHiding: {\n    for (auto *D : Result)\n      if (TagDecl *TD = dyn_cast<TagDecl>(D)) {\n        Diag(TD->getLocation(), diag::note_hidden_tag);"}}
[n]={{Wb,2845,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousTagHiding: {\n    for (auto *D : Result)\n      if (TagDecl *TD = dyn_cast<TagDecl>(D)) {\n        Diag(TD->getLocation(), diag::note_hidden_tag);"}},
[o]={
["clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p5.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p5.cpp:7:10: note: type declaration hidden"}
}
},
},
["note_hiding_object"]={
["note_hiding_object"]={
[f]="declaration hides type",
[b]="declaration hides type",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declaration hides type",
[h]="declaration hides type",
[g]=b,
[j]=i,
[e]="declaration hides type",
[k]="declaration hides type",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"6538c930503a",1255153699,"Qualified lookup through using declarations.  Diagnose a new type of ambiguity."},
[m]={"6538c930503a",1255153699,"Qualified lookup through using declarations.  Diagnose a new type of ambiguity."},
[n]={{zb,2850,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousTagHiding: {\n    for (auto *D : Result)\n      if (!isa<TagDecl>(D))\n        Diag(D->getLocation(), diag::note_hiding_object);"}}
[n]={{Wb,2850,"/// Produce a diagnostic describing the ambiguity that resulted\n/// from name lookup.\n///\n/// \\param Result The result of the ambiguous lookup to be diagnosed.\nvoid Sema::DiagnoseAmbiguousLookup(LookupResult &Result) {\n  case LookupResult::AmbiguousTagHiding: {\n    for (auto *D : Result)\n      if (!isa<TagDecl>(D))\n        Diag(D->getLocation(), diag::note_hiding_object);"}},
[o]={
["clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p5.cpp"]={"clang/test/CXX/basic/basic.lookup/basic.lookup.qual/namespace.qual/p5.cpp:17:9: note: declaration hides type"}
}
},
},
["note_ice_conversion_here"]={
["note_ice_conversion_here"]={
[f]="conversion to ... type A declared here",
[b]="conversion to ... type A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="conversion to %select{integral|enumeration}0 type %1 declared here",
[h]="conversion to %select{integral|enumeration}0 type %1 declared here",
[g]=b,
[j]=i,
[e]="conversion to (?:integral|enumeration) type (.*?) declared here",
[k]="conversion to (?:integral|enumeration) type (.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"f4c51d9d7613",1328349193,"In C++11 mode, when an integral constant expression is desired and we have a"},
[m]={"f4c51d9d7613",1328349193,"In C++11 mode, when an integral constant expression is desired and we have a"},
[n]={{r,17877,"ExprResult Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, VerifyICEDiagnoser &Diagnoser, AllowFoldKind CanFold) {\n  if (getLangOpts().CPlusPlus11) {\n    class CXX11ConvertDiagnoser : public ICEConvertDiagnoser {\n      SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_ice_conversion_here) << ConvTy->isEnumeralType() << ConvTy; }"},{r,17950,"ExprResult Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, VerifyICEDiagnoser &Diagnoser, AllowFoldKind CanFold) {\n  if (getLangOpts().CPlusPlus11) {\n    class CXX11ConvertDiagnoser : public ICEConvertDiagnoser {\n      SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_ice_conversion_here) << ConvTy->isEnumeralType() << ConvTy; }"}}
[n]={{s,17877,"ExprResult Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, VerifyICEDiagnoser &Diagnoser, AllowFoldKind CanFold) {\n  if (getLangOpts().CPlusPlus11) {\n    class CXX11ConvertDiagnoser : public ICEConvertDiagnoser {\n      SemaDiagnosticBuilder noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_ice_conversion_here) << ConvTy->isEnumeralType() << ConvTy; }"},{s,17950,"ExprResult Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, VerifyICEDiagnoser &Diagnoser, AllowFoldKind CanFold) {\n  if (getLangOpts().CPlusPlus11) {\n    class CXX11ConvertDiagnoser : public ICEConvertDiagnoser {\n      SemaDiagnosticBuilder noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) override { return S.Diag(Conv->getLocation(), diag::note_ice_conversion_here) << ConvTy->isEnumeralType() << ConvTy; }"}},
[o]={
["clang/test/CXX/expr/expr.const/p5-0x.cpp"]={"clang/test/CXX/expr/expr.const/p5-0x.cpp:10:13: note: conversion to integral type \'int\' declared here","clang/test/CXX/expr/expr.const/p5-0x.cpp:11:13: note: conversion to integral type \'long\' declared here",Hc,Ic,Jc,Hc,Ic,Jc,Hc,Ic,Jc,Hc,Ic,Jc,Hc,Ic,Jc}
}
},
},
["note_illegal_field_declared_here"]={
["note_illegal_field_declared_here"]={
[f]="field of illegal ... A declared here",
[b]="field of illegal ... A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="field of illegal %select{type|pointer type}0 %1 declared here",
[h]="field of illegal %select{type|pointer type}0 %1 declared here",
[g]=b,
[j]=i,
[e]="field of illegal (?:type|pointer type) (.*?) declared here",
[k]="field of illegal (?:type|pointer type) (.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL"},
[m]={"efb38192b0b2",1374542616,"Error on more illegal kernel argument types for OpenCL"},
[n]={{t,9599,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  do {\n    for (const auto *FD : RD->fields()) {\n      S.Diag(FD->getLocation(), diag::note_illegal_field_declared_here) << QT->isPointerType() << QT;"},{"clang/lib/Sema/SemaSYCL.cpp",63,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n  auto Check = [&](QualType TypeToCheck, const ValueDecl *D) {\n    // Checks for other types can also be done here.\n    if (ErrorFound) {\n      if (NeedToEmitNotes) {\n        if (auto *FD = dyn_cast<FieldDecl>(D))\n          SYCLDiagIfDeviceCode(FD->getLocation(), diag::note_illegal_field_declared_here) << FD->getType()->isPointerType() << FD->getType();"}}
[n]={{u,9599,"static void checkIsValidOpenCLKernelParameter(Sema &S, Declarator &D, ParmVarDecl *Param, llvm::SmallPtrSetImpl<const Type *> &ValidTypes) {\n  do {\n    for (const auto *FD : RD->fields()) {\n      S.Diag(FD->getLocation(), diag::note_illegal_field_declared_here) << QT->isPointerType() << QT;"},{"clang/lib/Sema/SemaSYCL.cpp",63,"void Sema::deepTypeCheckForSYCLDevice(SourceLocation UsedAt, llvm::DenseSet<QualType> Visited, ValueDecl *DeclToCheck) {\n  auto Check = [&](QualType TypeToCheck, const ValueDecl *D) {\n    // Checks for other types can also be done here.\n    if (ErrorFound) {\n      if (NeedToEmitNotes) {\n        if (auto *FD = dyn_cast<FieldDecl>(D))\n          SYCLDiagIfDeviceCode(FD->getLocation(), diag::note_illegal_field_declared_here) << FD->getType()->isPointerType() << FD->getType();"}},
[o]={
["clang/test/SemaSYCL/zero-length-arrays.cpp"]={"clang/test/SemaSYCL/zero-length-arrays.cpp:72:11: note: field of illegal pointer type \'ZEROARR *\' (aka \'float (*)[0]\') declared here","clang/test/SemaSYCL/zero-length-arrays.cpp:77:26: note: field of illegal type \'int[0]\' declared here",Mc,Mc,Cb,Cb,Cb,Cb,"clang/test/SemaSYCL/zero-length-arrays.cpp:36:7: note: field of illegal type \'int[0]\' declared here",Mc,"clang/test/SemaSYCL/zero-length-arrays.cpp:16:7: note: field of illegal type \'int[0]\' declared here","clang/test/SemaSYCL/zero-length-arrays.cpp:16:7: note: field of illegal type \'int[0]\' declared here",Mc,Cb,Cb,Cb,Cb,"clang/test/SemaSYCL/zero-length-arrays.cpp:16:7: note: field of illegal type \'int[0]\' declared here",Mc}
}
},
},
["note_immediate_function_reason"]={
["note_immediate_function_reason"]={
[f]="A is an immediate ... because ... ...",
[b]="A is an immediate ... because ... ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is an immediate %select{function|constructor}5 because %select{its body|the%select{| default}7 initializer of %8}6 %select{evaluates the address of %select{an immediate|a consteval}2 function %1|contains a call to %select{an immediate|a consteval}2 %select{function|constructor}4 %1 and that call is not a constant expression}3",
[h]="%0 is an immediate %select{function|constructor}5 because %select{its body|the%select{| default}7 initializer of %8}6 %select{evaluates the address of %select{an immediate|a consteval}2 function %1|contains a call to %select{an immediate|a consteval}2 %select{function|constructor}4 %1 and that call is not a constant expression}3",
[g]=b,
[j]=i,
[e]="(.*?) is an immediate (?:function|constructor) because (?:its body|the(?:| default) initializer of (.*?)) (?:evaluates the address of (?:an immediate|a consteval) function (.*?)|contains a call to (?:an immediate|a consteval) (?:function|constructor) (.*?) and that call is not a constant expression)",
[k]="(.*?) is an immediate (?:function|constructor) because (?:its body|the(?:| default) initializer of (.*?)) (?:evaluates the address of (?:an immediate|a consteval) function (.*?)|contains a call to (?:an immediate|a consteval) (?:function|constructor) (.*?) and that call is not a constant expression)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={db,1625925174,eb},
[m]={fb,1625925174,nb},
[n]={{q,2492,"void Sema::DiagnoseImmediateEscalatingReason(FunctionDecl *FD) {\n  struct ImmediateEscalatingExpressionsVisitor : public RecursiveASTVisitor<ImmediateEscalatingExpressionsVisitor> {\n    void Diag(const Expr *E, const FunctionDecl *Fn, bool IsCall) {\n      SemaRef.Diag(Loc, diag::note_immediate_function_reason) << ImmediateFn << Fn << Fn->isConsteval() << IsCall << isa<CXXConstructorDecl>(Fn) << ImmediateFnIsConstructor << (CurrentInit != nullptr) << (CurrentInit && !CurrentInit->isWritten()) << (CurrentInit ? CurrentInit->getAnyMember() : nullptr) << Range;"}}
[n]={{r,2492,"void Sema::DiagnoseImmediateEscalatingReason(FunctionDecl *FD) {\n  struct ImmediateEscalatingExpressionsVisitor : public RecursiveASTVisitor<ImmediateEscalatingExpressionsVisitor> {\n    void Diag(const Expr *E, const FunctionDecl *Fn, bool IsCall) {\n      SemaRef.Diag(Loc, diag::note_immediate_function_reason) << ImmediateFn << Fn << Fn->isConsteval() << IsCall << isa<CXXConstructorDecl>(Fn) << ImmediateFnIsConstructor << (CurrentInit != nullptr) << (CurrentInit && !CurrentInit->isWritten()) << (CurrentInit ? CurrentInit->getAnyMember() : nullptr) << Range;"}},
[o]={
["clang/test/SemaCXX/cxx2a-consteval-default-params.cpp"]={"clang/test/SemaCXX/cxx2a-consteval-default-params.cpp:48:8: note: \'InitWithLambda\' is an immediate constructor because the default initializer of \'b\' contains a call to a consteval function \'undefined\' and that call is not a constant expression"}
}
},
},
["note_implementation_declared"]={
["note_implementation_declared"]={
[f]="class implementation is declared here",
[b]="class implementation is declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="class implementation is declared here",
[h]="class implementation is declared here",
[g]=b,
[j]=i,
[e]="class implementation is declared here",
[k]="class implementation is declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"e16cdb407a3f",1270241585,"diagnose declaring class extension after its implementation"},
[m]={"e16cdb407a3f",1270241585,"diagnose declaring class extension after its implementation"},
[n]={{E,1853,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  if (!CategoryName && IDecl->getImplementation()) {\n    Diag(IDecl->getImplementation()->getLocation(), diag::note_implementation_declared);"}}
[n]={{M,1853,"ObjCCategoryDecl *Sema::ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName, SourceLocation ClassLoc, ObjCTypeParamList *typeParamList, IdentifierInfo *CategoryName, SourceLocation CategoryLoc, Decl *const *ProtoRefs, unsigned NumProtoRefs, const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList) {\n  if (!CategoryName && IDecl->getImplementation()) {\n    Diag(IDecl->getImplementation()->getLocation(), diag::note_implementation_declared);"}},
[o]={
["clang/test/SemaObjC/class-extension-after-implementation.m"]={"clang/test/SemaObjC/class-extension-after-implementation.m:6:17: note: class implementation is declared here"}
}
},
},
["note_implemented_by_class"]={
["note_implemented_by_class"]={
[f]="when implemented by class A",
[b]="when implemented by class A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="when implemented by class %0",
[h]="when implemented by class %0",
[g]=b,
[j]=i,
[e]="when implemented by class (.*?)",
[k]="when implemented by class (.*?)",
[d]=a,
[l]=a,
[c]="ARC Weak References",
[c]="ARC Weak References",
[m]={"6a41337132b6",1366830785,"Objective-C arc: Improve disgnostics when \'weak\'"},
[m]={"6a41337132b6",1366830785,"Objective-C arc: Improve disgnostics when \'weak\'"},
[n]={{N,1267,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n      } else {\n        if (!getLangOpts().ObjCWeak) {\n        } else {\n          if (const ObjCObjectPointerType *ObjT = PropertyIvarType->getAs<ObjCObjectPointerType>()) {\n            if (ObjI && ObjI->isArcWeakrefUnavailable()) {\n              Diag(ClassImpDecl->getLocation(), diag::note_implemented_by_class) << ClassImpDecl->getName();"}}
[n]={{V,1267,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (kind & ObjCPropertyAttribute::kind_weak) {\n      // Add GC __weak to the ivar type if the property is weak.\n      if (getLangOpts().getGC() != LangOptions::NonGC) {\n      } else {\n        if (!getLangOpts().ObjCWeak) {\n        } else {\n          if (const ObjCObjectPointerType *ObjT = PropertyIvarType->getAs<ObjCObjectPointerType>()) {\n            if (ObjI && ObjI->isArcWeakrefUnavailable()) {\n              Diag(ClassImpDecl->getLocation(), diag::note_implemented_by_class) << ClassImpDecl->getName();"}},
[o]={
["clang/test/SemaObjC/arc-unavailable-for-weakref.m"]={"clang/test/SemaObjC/arc-unavailable-for-weakref.m:63:17: note: when implemented by class I","clang/test/SemaObjC/arc-unavailable-for-weakref.m:75:17: note: when implemented by class I1","clang/test/SemaObjC/arc-unavailable-for-weakref.m:87:17: note: when implemented by class I2"}
}
},
},
["note_implicit_delete_this_in_destructor_here"]={
["note_implicit_delete_this_in_destructor_here"]={
[f]="while checking implicit \'delete this\' for virtual destructor",
[b]="while checking implicit \'delete this\' for virtual destructor",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="while checking implicit \'delete this\' for virtual destructor",
[h]="while checking implicit \'delete this\' for virtual destructor",
[g]=b,
[j]=i,
[e]="while checking implicit \'delete this\' for virtual destructor",
[k]="while checking implicit \'delete this\' for virtual destructor",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5b34958b46dc",1507859736,"Support for destroying operator delete, per C++2a proposal P0722."},
[m]={"5b34958b46dc",1507859736,"Support for destroying operator delete, per C++2a proposal P0722."},
[n]={{q,10838,"/// CheckDestructor - Checks a fully-formed destructor definition for\n/// well-formedness, issuing any diagnostics required.  Returns true\n/// on error.\nbool Sema::CheckDestructor(CXXDestructorDecl *Destructor) {\n  if (!Destructor->getOperatorDelete() && Destructor->isVirtual()) {\n    // If we have a virtual destructor, look up the deallocation function\n    if (FunctionDecl *OperatorDelete = FindDeallocationFunctionForDestructor(Loc, RD)) {\n      // If the notional \'delete this\' expression requires a non-trivial\n      // conversion from \'this\' to the type of a destroying operator delete\'s\n      // first parameter, perform that conversion now.\n      if (OperatorDelete->isDestroyingOperatorDelete()) {\n        if (!declaresSameEntity(ParamType->getAsCXXRecordDecl(), RD)) {\n          if (This.isInvalid()) {\n            Diag(Loc, diag::note_implicit_delete_this_in_destructor_here);"}}
[n]={{r,10838,"/// CheckDestructor - Checks a fully-formed destructor definition for\n/// well-formedness, issuing any diagnostics required.  Returns true\n/// on error.\nbool Sema::CheckDestructor(CXXDestructorDecl *Destructor) {\n  if (!Destructor->getOperatorDelete() && Destructor->isVirtual()) {\n    // If we have a virtual destructor, look up the deallocation function\n    if (FunctionDecl *OperatorDelete = FindDeallocationFunctionForDestructor(Loc, RD)) {\n      // If the notional \'delete this\' expression requires a non-trivial\n      // conversion from \'this\' to the type of a destroying operator delete\'s\n      // first parameter, perform that conversion now.\n      if (OperatorDelete->isDestroyingOperatorDelete()) {\n        if (!declaresSameEntity(ParamType->getAsCXXRecordDecl(), RD)) {\n          if (This.isInvalid()) {\n            Diag(Loc, diag::note_implicit_delete_this_in_destructor_here);"}},
[o]={
["clang/test/SemaCXX/cxx2a-destroying-delete.cpp"]={"clang/test/SemaCXX/cxx2a-destroying-delete.cpp:48:26: note: while checking implicit \'delete this\' for virtual destructor"}
}
},
},
["note_implicit_member_target_infer_collision"]={
["note_implicit_member_target_infer_collision"]={
[f]="implicit ... inferred target collision: call to both ... and ... members",
[b]="implicit ... inferred target collision: call to both ... and ... members",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="implicit %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 inferred target collision: call to both %select{__device__|__global__|__host__|__host__ __device__}1 and %select{__device__|__global__|__host__|__host__ __device__}2 members",
[h]="implicit %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 inferred target collision: call to both %select{__device__|__global__|__host__|__host__ __device__}1 and %select{__device__|__global__|__host__|__host__ __device__}2 members",
[g]=b,
[j]=i,
[e]="implicit (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) inferred target collision\\: call to both (?:__device__|__global__|__host__|__host__ __device__) and (?:__device__|__global__|__host__|__host__ __device__) members",
[k]="implicit (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) inferred target collision\\: call to both (?:__device__|__global__|__host__|__host__ __device__) and (?:__device__|__global__|__host__|__host__ __device__) members",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"9a220fca4a6f",1412023109,"CUDA: Fix incorrect target inference for implicit members."},
[m]={"9a220fca4a6f",1412023109,"CUDA: Fix incorrect target inference for implicit members."},
[n]={{"clang/lib/Sema/SemaCUDA.cpp",389,"bool Sema::inferCUDATargetForImplicitSpecialMember(CXXRecordDecl *ClassDecl, CXXSpecialMember CSM, CXXMethodDecl *MemberDecl, bool ConstRHS, bool Diagnose) {\n  for (const auto *B : Bases) {\n    if (!InferredTarget) {\n    } else {\n      if (ResolutionError) {\n        if (Diagnose) {\n          Diag(ClassDecl->getLocation(), diag::note_implicit_member_target_infer_collision) << (unsigned)CSM << *InferredTarget << BaseMethodTarget;"},{"clang/lib/Sema/SemaCUDA.cpp",432,"bool Sema::inferCUDATargetForImplicitSpecialMember(CXXRecordDecl *ClassDecl, CXXSpecialMember CSM, CXXMethodDecl *MemberDecl, bool ConstRHS, bool Diagnose) {\n  // Same as for bases, but now for special members of fields.\n  for (const auto *F : ClassDecl->fields()) {\n    if (!InferredTarget) {\n    } else {\n      if (ResolutionError) {\n        if (Diagnose) {\n          Diag(ClassDecl->getLocation(), diag::note_implicit_member_target_infer_collision) << (unsigned)CSM << *InferredTarget << FieldMethodTarget;"}}
[n]={{"clang/lib/Sema/SemaCUDA.cpp",389,"bool Sema::inferCUDATargetForImplicitSpecialMember(CXXRecordDecl *ClassDecl, CXXSpecialMember CSM, CXXMethodDecl *MemberDecl, bool ConstRHS, bool Diagnose) {\n  for (const auto *B : Bases) {\n    if (!InferredTarget) {\n    } else {\n      if (ResolutionError) {\n        if (Diagnose) {\n          Diag(ClassDecl->getLocation(), diag::note_implicit_member_target_infer_collision) << (unsigned)CSM << *InferredTarget << BaseMethodTarget;"},{"clang/lib/Sema/SemaCUDA.cpp",432,"bool Sema::inferCUDATargetForImplicitSpecialMember(CXXRecordDecl *ClassDecl, CXXSpecialMember CSM, CXXMethodDecl *MemberDecl, bool ConstRHS, bool Diagnose) {\n  // Same as for bases, but now for special members of fields.\n  for (const auto *F : ClassDecl->fields()) {\n    if (!InferredTarget) {\n    } else {\n      if (ResolutionError) {\n        if (Diagnose) {\n          Diag(ClassDecl->getLocation(), diag::note_implicit_member_target_infer_collision) << (unsigned)CSM << *InferredTarget << FieldMethodTarget;"}},
[o]={
["clang/test/SemaCUDA/implicit-member-target-collision.cu"]={"clang/test/SemaCUDA/implicit-member-target-collision.cu:16:8: note: implicit default constructor inferred target collision: call to both __host__ and __device__ members","clang/test/SemaCUDA/implicit-member-target-collision.cu:31:8: note: implicit default constructor inferred target collision: call to both __host__ and __device__ members","clang/test/SemaCUDA/implicit-member-target-collision.cu:49:8: note: implicit default constructor inferred target collision: call to both __host__ and __device__ members"}
}
},
},
["note_implicit_param_decl"]={
["note_implicit_param_decl"]={
[f]="A is an implicit parameter",
[b]="A is an implicit parameter",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is an implicit parameter",
[h]="%0 is an implicit parameter",
[g]=b,
[j]=i,
[e]="(.*?) is an implicit parameter",
[k]="(.*?) is an implicit parameter",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"c6ebda167f52",1361482844,"Teach serialized diagnostics about notes without locations."},
[m]={"c6ebda167f52",1361482844,"Teach serialized diagnostics about notes without locations."},
[n]={{r,2288,"static void emitEmptyLookupTypoDiagnostic(const TypoCorrection &TC, Sema &SemaRef, const CXXScopeSpec &SS, DeclarationName Typo, SourceLocation TypoLoc, ArrayRef<Expr *> Args, unsigned DiagnosticID, unsigned DiagnosticSuggestID) {\n  unsigned NoteID = TC.getCorrectionDeclAs<ImplicitParamDecl>() ? diag::note_implicit_param_decl : diag::note_previous_decl;"},{r,2505,"/// Diagnose an empty lookup.\n///\n/// \\return false if new lookup candidates were found\nbool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, CorrectionCandidateCallback &CCC, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, TypoExpr **Out) {\n  if (S && Out) {\n  } else if (S && (Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery))) {\n    if (AcceptableWithRecovery || AcceptableWithoutRecovery) {\n      unsigned NoteID = Corrected.getCorrectionDeclAs<ImplicitParamDecl>() ? diag::note_implicit_param_decl : diag::note_previous_decl;"}}
[n]={{s,2288,"static void emitEmptyLookupTypoDiagnostic(const TypoCorrection &TC, Sema &SemaRef, const CXXScopeSpec &SS, DeclarationName Typo, SourceLocation TypoLoc, ArrayRef<Expr *> Args, unsigned DiagnosticID, unsigned DiagnosticSuggestID) {\n  unsigned NoteID = TC.getCorrectionDeclAs<ImplicitParamDecl>() ? diag::note_implicit_param_decl : diag::note_previous_decl;"},{s,2505,"/// Diagnose an empty lookup.\n///\n/// \\return false if new lookup candidates were found\nbool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, CorrectionCandidateCallback &CCC, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, TypoExpr **Out) {\n  if (S && Out) {\n  } else if (S && (Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), S, &SS, CCC, CTK_ErrorRecovery))) {\n    if (AcceptableWithRecovery || AcceptableWithoutRecovery) {\n      unsigned NoteID = Corrected.getCorrectionDeclAs<ImplicitParamDecl>() ? diag::note_implicit_param_decl : diag::note_previous_decl;"}}
},
},
["note_implicit_top_level_module_import_here"]={
["note_implicit_top_level_module_import_here"]={
[f]="submodule of top-level module \'A\' implicitly imported here",
[b]="submodule of top-level module \'A\' implicitly imported here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="submodule of top-level module \'%0\' implicitly imported here",
[h]="submodule of top-level module \'%0\' implicitly imported here",
[g]=b,
[j]=i,
[e]="submodule of top\\-level module \'(.*?)\' implicitly imported here",
[k]="submodule of top\\-level module \'(.*?)\' implicitly imported here",
[d]=a,
[l]=a,
[c]=R,
[c]=bb,
[m]={"8b7c0398b6a3",1439829570,"[modules] PR20507: Avoid silent textual inclusion."},
[m]={"8b7c0398b6a3",1439829570,"[modules] PR20507: Avoid silent textual inclusion."},
[n]={{"clang/lib/Lex/PPDirectives.cpp",2265,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // Determine whether we should try to import the module for this #include, if\n  // there is one. Don\'t do so if precompiled module support is disabled or we\n  // are processing this module textually (because we\'re building the module).\n  if (MaybeTranslateInclude && (UsableHeaderUnit || UsableClangHeaderModule)) {\n    // If this include corresponds to a module but that module is\n    // unavailable, diagnose the situation and bail out.\n    // FIXME: Remove this; loadModule does the same check (but produces\n    // slightly worse diagnostics).\n    if (checkModuleIsAvailable(getLangOpts(), getTargetInfo(), getDiagnostics(), SuggestedModule.getModule())) {\n      Diag(FilenameTok.getLocation(), diag::note_implicit_top_level_module_import_here) << SuggestedModule.getModule()->getTopLevelModuleName();"}}
[n]={{"clang/lib/Lex/PPDirectives.cpp",2265,"/// Handle either a #include-like directive or an import declaration that names\n/// a header file.\n///\n/// \\param HashLoc The location of the \'#\' token for an include, or\n///        SourceLocation() for an import declaration.\n/// \\param IncludeTok The include / include_next / import token.\n/// \\param FilenameTok The header-name token.\n/// \\param EndLoc The location at which any imported macros become visible.\n/// \\param LookupFrom For #include_next, the starting directory for the\n///        directory lookup.\n/// \\param LookupFromFile For #include_next, the starting file for the directory\n///        lookup.\nPreprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(SourceLocation HashLoc, Token &IncludeTok, Token &FilenameTok, SourceLocation EndLoc, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // Determine whether we should try to import the module for this #include, if\n  // there is one. Don\'t do so if precompiled module support is disabled or we\n  // are processing this module textually (because we\'re building the module).\n  if (MaybeTranslateInclude && (UsableHeaderUnit || UsableClangHeaderModule)) {\n    // If this include corresponds to a module but that module is\n    // unavailable, diagnose the situation and bail out.\n    // FIXME: Remove this; loadModule does the same check (but produces\n    // slightly worse diagnostics).\n    if (checkModuleIsAvailable(getLangOpts(), getTargetInfo(), getDiagnostics(), SuggestedModule.getModule())) {\n      Diag(FilenameTok.getLocation(), diag::note_implicit_top_level_module_import_here) << SuggestedModule.getModule()->getTopLevelModuleName();"}},
[o]={
["clang/test/Modules/shadow.m"]={"clang/test/Modules/shadow.m:13:9: note: submodule of top-level module \'A\' implicitly imported here"}
}
},
},
["note_implicitly_deleted"]={
["note_implicitly_deleted"]={
[f]="explicitly defaulted function was implicitly deleted here",
[b]="explicitly defaulted function was implicitly deleted here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="explicitly defaulted function was implicitly deleted here",
[h]="explicitly defaulted function was implicitly deleted here",
[g]=b,
[j]=i,
[e]="explicitly defaulted function was implicitly deleted here",
[k]="explicitly defaulted function was implicitly deleted here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"6f1e2c6d19a7",1333400365,"Finish PR10217: Ensure we say that a special member was implicitly, not"},
[m]={"6f1e2c6d19a7",1333400365,"Finish PR10217: Ensure we say that a special member was implicitly, not"},
[n]={{r,123,"/// Emit a note explaining that this function is deleted.\nvoid Sema::NoteDeletedFunction(FunctionDecl *Decl) {\n  if (Decl->isDefaulted()) {\n    // If the method was explicitly defaulted, point at that declaration.\n    if (!Decl->isImplicit())\n      Diag(Decl->getLocation(), diag::note_implicitly_deleted);"}}
[n]={{s,123,"/// Emit a note explaining that this function is deleted.\nvoid Sema::NoteDeletedFunction(FunctionDecl *Decl) {\n  if (Decl->isDefaulted()) {\n    // If the method was explicitly defaulted, point at that declaration.\n    if (!Decl->isImplicit())\n      Diag(Decl->getLocation(), diag::note_implicitly_deleted);"}},
[o]={
["clang/test/SemaCXX/dr1301.cpp"]={"clang/test/SemaCXX/dr1301.cpp:20:3: note: explicitly defaulted function was implicitly deleted here"}
}
},
},
["note_imported_by_pch_module_not_found"]={
["note_imported_by_pch_module_not_found"]={
[f]="consider adding \'A\' to the header search path",
[b]="consider adding \'A\' to the header search path",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="consider adding \'%0\' to the header search path",
[h]="consider adding \'%0\' to the header search path",
[g]=b,
[j]=i,
[e]="consider adding \'(.*?)\' to the header search path",
[k]="consider adding \'(.*?)\' to the header search path",
[d]=a,
[l]=a,
[c]=Wb,
[c]=hc,
[m]={"a66a325bbc51",1510889051,"[PCH+Modules] Improve diagnosticts to help out users pass an extra header search path"},
[m]={"a66a325bbc51",1510889051,"[PCH+Modules] Improve diagnosticts to help out users pass an extra header search path"},
[n]={{Ub,4023,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // Don\'t emit module relocation error if we have -fno-validate-pch\n    if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation & DisableValidationForModuleKind::Module) && !ModMap) {\n      if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities)) {\n        if (auto ASTFE = M ? M->getASTFile() : std::nullopt) {\n        } else {\n          // In case it was imported by a PCH, there\'s a chance the user is\n          // just missing to include the search path to the directory containing\n          // the modulemap.\n          if (ImportedBy && ImportedBy->Kind == MK_PCH)\n            Diag(diag::note_imported_by_pch_module_not_found) << llvm::sys::path::parent_path(F.ModuleMapPath);"}}
[n]={{ec,4023,"ASTReader::ASTReadResult ASTReader::ReadModuleMapFileBlock(RecordData &Record, ModuleFile &F, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  if (PP.getPreprocessorOpts().ModulesCheckRelocated && F.Kind == MK_ImplicitModule && ModuleMgr.begin()->Kind != MK_MainFile) {\n    // Don\'t emit module relocation error if we have -fno-validate-pch\n    if (!bool(PP.getPreprocessorOpts().DisablePCHOrModuleValidation & DisableValidationForModuleKind::Module) && !ModMap) {\n      if (!canRecoverFromOutOfDate(F.FileName, ClientLoadCapabilities)) {\n        if (auto ASTFE = M ? M->getASTFile() : std::nullopt) {\n        } else {\n          // In case it was imported by a PCH, there\'s a chance the user is\n          // just missing to include the search path to the directory containing\n          // the modulemap.\n          if (ImportedBy && ImportedBy->Kind == MK_PCH)\n            Diag(diag::note_imported_by_pch_module_not_found) << llvm::sys::path::parent_path(F.ModuleMapPath);"}}
},
},
["note_in_binding_decl_init"]={
["note_in_binding_decl_init"]={
[f]="in implicit initialization of binding declaration A",
[b]="in implicit initialization of binding declaration A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in implicit initialization of binding declaration %0",
[h]="in implicit initialization of binding declaration %0",
[g]=b,
[j]=i,
[e]="in implicit initialization of binding declaration (.*?)",
[k]="in implicit initialization of binding declaration (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"7873de0cf65f",1470954346,"P0217R3: Perform semantic checks and initialization for the bindings in a"},
[m]={"7873de0cf65f",1470954346,"P0217R3: Perform semantic checks and initialization for the bindings in a"},
[n]={{z,997,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::InitializingStructuredBinding:\n      Diags.Report(Active->PointOfInstantiation, diag::note_in_binding_decl_init) << cast<BindingDecl>(Active->Entity);"}}
[n]={{G,997,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::InitializingStructuredBinding:\n      Diags.Report(Active->PointOfInstantiation, diag::note_in_binding_decl_init) << cast<BindingDecl>(Active->Entity);"}},
[o]={
["clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp"]={"clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp:29:9: note: in implicit initialization of binding declaration \'a0\'","clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp:36:9: note: in implicit initialization of binding declaration \'a0\'","clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp:42:9: note: in implicit initialization of binding declaration \'a0\'","clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp:48:9: note: in implicit initialization of binding declaration \'a0\'","clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp:54:13: note: in implicit initialization of binding declaration \'a1\'","clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp:154:9: note: in implicit initialization of binding declaration \'d\'","clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp:165:9: note: in implicit initialization of binding declaration \'e\'","clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp:175:9: note: in implicit initialization of binding declaration \'x\'","clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp:208:11: note: in implicit initialization of binding declaration \'a\'","clang/test/CXX/dcl.decl/dcl.decomp/p3.cpp:212:11: note: in implicit initialization of binding declaration \'a\'"}
}
},
},
["note_in_class_initializer_float_type_cxx11"]={
["note_in_class_initializer_float_type_cxx11"]={
[f]="add \'constexpr\'",
[b]="add \'constexpr\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add \'constexpr\'",
[h]="add \'constexpr\'",
[g]=b,
[j]=i,
[e]="add \'constexpr\'",
[k]="add \'constexpr\'",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"8505c29593fb",1359498368,"Move -Wstatic-float-init fixit into a note & don\'t recover as if constexpr"},
[m]={"8505c29593fb",1359498368,"Move -Wstatic-float-init fixit into a note & don\'t recover as if constexpr"},
[n]={{t,13518,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  if (VDecl->isLocalVarDecl()) {\n  } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n    // Do nothing on dependent types.\n    if (DclT->isDependentType()) {\n    } else if (VDecl->isConstexpr()) {\n    } else if (!DclT.isConstQualified()) {\n    } else if (DclT->isIntegralOrEnumerationType()) {\n    } else if (DclT->isFloatingType()) { // also permits complex, which is ok\n      // In C++98, this is a GNU extension. In C++11, it is not, but we support\n      // it anyway and provide a fixit to add the \'constexpr\'.\n      if (getLangOpts().CPlusPlus11) {\n        Diag(VDecl->getBeginLoc(), diag::note_in_class_initializer_float_type_cxx11) << FixItHint::CreateInsertion(VDecl->getBeginLoc(), \"constexpr \");"}}
[n]={{u,13518,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  if (VDecl->isLocalVarDecl()) {\n  } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n    // Do nothing on dependent types.\n    if (DclT->isDependentType()) {\n    } else if (VDecl->isConstexpr()) {\n    } else if (!DclT.isConstQualified()) {\n    } else if (DclT->isIntegralOrEnumerationType()) {\n    } else if (DclT->isFloatingType()) { // also permits complex, which is ok\n      // In C++98, this is a GNU extension. In C++11, it is not, but we support\n      // it anyway and provide a fixit to add the \'constexpr\'.\n      if (getLangOpts().CPlusPlus11) {\n        Diag(VDecl->getBeginLoc(), diag::note_in_class_initializer_float_type_cxx11) << FixItHint::CreateInsertion(VDecl->getBeginLoc(), \"constexpr \");"}},
[o]={
["clang/test/SemaCXX/cxx0x-class.cpp"]={"clang/test/SemaCXX/cxx0x-class.cpp:23:5: note: add \'constexpr\'","clang/test/SemaCXX/cxx0x-class.cpp:24:5: note: add \'constexpr\'"}
}
},
},
["note_in_declaration_of_implicit_equality_comparison"]={
["note_in_declaration_of_implicit_equality_comparison"]={
[f]="while declaring the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'",
[b]="while declaring the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="while declaring the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'",
[h]="while declaring the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'",
[g]=b,
[j]=i,
[e]="while declaring the corresponding implicit \'operator\\=\\=\' for this defaulted \'operator\\<\\=\\>\'",
[k]="while declaring the corresponding implicit \'operator\\=\\=\' for this defaulted \'operator\\<\\=\\>\'",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[n]={{z,963,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DeclaringImplicitEqualityComparison:\n      Diags.Report(Active->Entity->getLocation(), diag::note_in_declaration_of_implicit_equality_comparison);"}}
[n]={{G,963,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DeclaringImplicitEqualityComparison:\n      Diags.Report(Active->Entity->getLocation(), diag::note_in_declaration_of_implicit_equality_comparison);"}},
[o]={
["clang/test/CXX/class/class.compare/class.compare.default/p4.cpp"]={"clang/test/CXX/class/class.compare/class.compare.default/p4.cpp:56:24: note: while declaring the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'"}
}
},
},
["note_in_declaration_of_implicit_special_member"]={
["note_in_declaration_of_implicit_special_member"]={
[f]="while declaring the implicit ... for A",
[b]="while declaring the implicit ... for A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="while declaring the implicit %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}1 for %0",
[h]="while declaring the implicit %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}1 for %0",
[g]=b,
[j]=i,
[e]="while declaring the implicit (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) for (.*?)",
[k]="while declaring the implicit (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) for (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"1338122b255e",1487886223,"Add context note to diagnostics that occur while declaring an implicit special member function."},
[m]={"1338122b255e",1487886223,"Add context note to diagnostics that occur while declaring an implicit special member function."},
[n]={{z,957,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DeclaringSpecialMember:\n      Diags.Report(Active->PointOfInstantiation, diag::note_in_declaration_of_implicit_special_member) << cast<CXXRecordDecl>(Active->Entity) << Active->SpecialMember;"}}
[n]={{G,957,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DeclaringSpecialMember:\n      Diags.Report(Active->PointOfInstantiation, diag::note_in_declaration_of_implicit_special_member) << cast<CXXRecordDecl>(Active->Entity) << Active->SpecialMember;"}},
[o]={
["clang/test/SemaCXX/implicit-member-functions.cpp"]={"clang/test/SemaCXX/implicit-member-functions.cpp:69:10: note: while declaring the implicit copy constructor for \'B\'"}
}
},
},
["note_in_for_range"]={
["note_in_for_range"]={
[f]="when looking up \'...\' function for range expression of type A",
[b]="when looking up \'...\' function for range expression of type A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="when looking up \'%select{begin|end}0\' function for range expression of type %1",
[h]="when looking up \'%select{begin|end}0\' function for range expression of type %1",
[g]=b,
[j]=i,
[e]="when looking up \'(?:begin|end)\' function for range expression of type (.*?)",
[k]="when looking up \'(?:begin|end)\' function for range expression of type (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"0f38443616f5",1345510321,"Better diagnostics for range-based for loops with bad range types."},
[m]={"0f38443616f5",1345510321,"Better diagnostics for range-based for loops with bad range types."},
[n]={{A,2593,"/// Create the initialization, compare, and increment steps for\n/// the range-based for loop expression.\n/// This function does not handle array-based for loops,\n/// which are created in Sema::BuildCXXForRangeStmt.\n///\n/// \\returns a ForRangeStatus indicating success or what kind of error occurred.\n/// BeginExpr and EndExpr are set and FRS_Success is returned on success;\n/// CandidateSet and BEF are set and some non-success value is returned on\n/// failure.\nstatic Sema::ForRangeStatus BuildNonArrayForRange(Sema &SemaRef, Expr *BeginRange, Expr *EndRange, QualType RangeType, VarDecl *BeginVar, VarDecl *EndVar, SourceLocation ColonLoc, SourceLocation CoawaitLoc, OverloadCandidateSet *CandidateSet, ExprResult *BeginExpr, ExprResult *EndExpr, BeginEndFunction *BEF) {\n  auto BuildBegin = [&] {\n    if (RangeStatus != Sema::FRS_Success) {\n      if (RangeStatus == Sema::FRS_DiagnosticIssued)\n        SemaRef.Diag(BeginRange->getBeginLoc(), diag::note_in_for_range) << ColonLoc << BEF_begin << BeginRange->getType();"},{A,2622,"/// Create the initialization, compare, and increment steps for\n/// the range-based for loop expression.\n/// This function does not handle array-based for loops,\n/// which are created in Sema::BuildCXXForRangeStmt.\n///\n/// \\returns a ForRangeStatus indicating success or what kind of error occurred.\n/// BeginExpr and EndExpr are set and FRS_Success is returned on success;\n/// CandidateSet and BEF are set and some non-success value is returned on\n/// failure.\nstatic Sema::ForRangeStatus BuildNonArrayForRange(Sema &SemaRef, Expr *BeginRange, Expr *EndRange, QualType RangeType, VarDecl *BeginVar, VarDecl *EndVar, SourceLocation ColonLoc, SourceLocation CoawaitLoc, OverloadCandidateSet *CandidateSet, ExprResult *BeginExpr, ExprResult *EndExpr, BeginEndFunction *BEF) {\n  auto BuildEnd = [&] {\n    if (RangeStatus != Sema::FRS_Success) {\n      if (RangeStatus == Sema::FRS_DiagnosticIssued)\n        SemaRef.Diag(EndRange->getBeginLoc(), diag::note_in_for_range) << ColonLoc << BEF_end << EndRange->getType();"}}
[n]={{H,2593,"/// Create the initialization, compare, and increment steps for\n/// the range-based for loop expression.\n/// This function does not handle array-based for loops,\n/// which are created in Sema::BuildCXXForRangeStmt.\n///\n/// \\returns a ForRangeStatus indicating success or what kind of error occurred.\n/// BeginExpr and EndExpr are set and FRS_Success is returned on success;\n/// CandidateSet and BEF are set and some non-success value is returned on\n/// failure.\nstatic Sema::ForRangeStatus BuildNonArrayForRange(Sema &SemaRef, Expr *BeginRange, Expr *EndRange, QualType RangeType, VarDecl *BeginVar, VarDecl *EndVar, SourceLocation ColonLoc, SourceLocation CoawaitLoc, OverloadCandidateSet *CandidateSet, ExprResult *BeginExpr, ExprResult *EndExpr, BeginEndFunction *BEF) {\n  auto BuildBegin = [&] {\n    if (RangeStatus != Sema::FRS_Success) {\n      if (RangeStatus == Sema::FRS_DiagnosticIssued)\n        SemaRef.Diag(BeginRange->getBeginLoc(), diag::note_in_for_range) << ColonLoc << BEF_begin << BeginRange->getType();"},{H,2622,"/// Create the initialization, compare, and increment steps for\n/// the range-based for loop expression.\n/// This function does not handle array-based for loops,\n/// which are created in Sema::BuildCXXForRangeStmt.\n///\n/// \\returns a ForRangeStatus indicating success or what kind of error occurred.\n/// BeginExpr and EndExpr are set and FRS_Success is returned on success;\n/// CandidateSet and BEF are set and some non-success value is returned on\n/// failure.\nstatic Sema::ForRangeStatus BuildNonArrayForRange(Sema &SemaRef, Expr *BeginRange, Expr *EndRange, QualType RangeType, VarDecl *BeginVar, VarDecl *EndVar, SourceLocation ColonLoc, SourceLocation CoawaitLoc, OverloadCandidateSet *CandidateSet, ExprResult *BeginExpr, ExprResult *EndExpr, BeginEndFunction *BEF) {\n  auto BuildEnd = [&] {\n    if (RangeStatus != Sema::FRS_Success) {\n      if (RangeStatus == Sema::FRS_DiagnosticIssued)\n        SemaRef.Diag(EndRange->getBeginLoc(), diag::note_in_for_range) << ColonLoc << BEF_end << EndRange->getType();"}},
[o]={
["clang/test/SemaCXX/for-range-dereference.cpp"]={"clang/test/SemaCXX/for-range-dereference.cpp:62:15: note: when looking up \'end\' function for range expression of type \'DeletedEnd\'","clang/test/SemaCXX/for-range-dereference.cpp:78:15: note: when looking up \'begin\' function for range expression of type \'DeletedADLBegin\'"}
}
},
},
["note_in_omitted_aggregate_initializer"]={
["note_in_omitted_aggregate_initializer"]={
[f]="in implicit initialization of ...",
[b]="in implicit initialization of ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in implicit initialization of %select{array element %1 with omitted initializer|field %1 with omitted initializer|trailing array elements in runtime-sized array new}0",
[h]="in implicit initialization of %select{array element %1 with omitted initializer|field %1 with omitted initializer|trailing array elements in runtime-sized array new}0",
[g]=b,
[j]=i,
[e]="in implicit initialization of (?:array element (.*?) with omitted initializer|field (.*?) with omitted initializer|trailing array elements in runtime\\-sized array new)",
[k]="in implicit initialization of (?:array element (.*?) with omitted initializer|field (.*?) with omitted initializer|trailing array elements in runtime\\-sized array new)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"6c3bbf42712e",1401780534,"PR11410: Extend diagnostic to cover all cases of aggregate initialization, not"},
[m]={"6c3bbf42712e",1401780534,"PR11410: Extend diagnostic to cover all cases of aggregate initialization, not"},
[n]={{D,620,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n  if (!InitSeq) {\n    if (!VerifyOnly) {\n      if (Entity.getKind() == InitializedEntity::EK_Member)\n        SemaRef.Diag(Entity.getDecl()->getLocation(), diag::note_in_omitted_aggregate_initializer) << /*field*/ 1 << Entity.getDecl();"},{D,626,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n  if (!InitSeq) {\n    if (!VerifyOnly) {\n      if (Entity.getKind() == InitializedEntity::EK_Member)\n      else if (Entity.getKind() == InitializedEntity::EK_ArrayElement) {\n        SemaRef.Diag(Loc, diag::note_in_omitted_aggregate_initializer) << (IsTrailingArrayNewMember ? 2 : /*array element*/ 0) << Entity.getElementIndex();"}}
[n]={{K,620,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n  if (!InitSeq) {\n    if (!VerifyOnly) {\n      if (Entity.getKind() == InitializedEntity::EK_Member)\n        SemaRef.Diag(Entity.getDecl()->getLocation(), diag::note_in_omitted_aggregate_initializer) << /*field*/ 1 << Entity.getDecl();"},{K,626,"ExprResult InitListChecker::PerformEmptyInit(SourceLocation Loc, const InitializedEntity &Entity) {\n  if (!InitSeq) {\n    if (!VerifyOnly) {\n      if (Entity.getKind() == InitializedEntity::EK_Member)\n      else if (Entity.getKind() == InitializedEntity::EK_ArrayElement) {\n        SemaRef.Diag(Loc, diag::note_in_omitted_aggregate_initializer) << (IsTrailingArrayNewMember ? 2 : /*array element*/ 0) << Entity.getElementIndex();"}},
[o]={
["clang/test/SemaCXX/new-delete-cxx0x.cpp"]={"clang/test/SemaCXX/new-delete-cxx0x.cpp:46:24: note: in implicit initialization of array element 2 with omitted initializer","clang/test/SemaCXX/new-delete-cxx0x.cpp:47:24: note: in implicit initialization of trailing array elements in runtime-sized array new","clang/test/SemaCXX/new-delete-cxx0x.cpp:48:20: note: in implicit initialization of trailing array elements in runtime-sized array new","clang/test/SemaCXX/new-delete-cxx0x.cpp:52:5: note: in implicit initialization of field \'t\' with omitted initializer","clang/test/SemaCXX/new-delete-cxx0x.cpp:58:24: note: in implicit initialization of array element 1 with omitted initializer","clang/test/SemaCXX/new-delete-cxx0x.cpp:52:5: note: in implicit initialization of field \'t\' with omitted initializer","clang/test/SemaCXX/new-delete-cxx0x.cpp:63:24: note: in implicit initialization of trailing array elements in runtime-sized array new","clang/test/SemaCXX/new-delete-cxx0x.cpp:52:5: note: in implicit initialization of field \'t\' with omitted initializer","clang/test/SemaCXX/new-delete-cxx0x.cpp:64:27: note: in implicit initialization of trailing array elements in runtime-sized array new"}
}
},
},
["note_in_reference_temporary_list_initializer"]={
["note_in_reference_temporary_list_initializer"]={
[f]="in initialization of temporary of type A created to list-initialize this reference",
[b]="in initialization of temporary of type A created to list-initialize this reference",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in initialization of temporary of type %0 created to list-initialize this reference",
[h]="in initialization of temporary of type %0 created to list-initialize this reference",
[g]=b,
[j]=i,
[e]="in initialization of temporary of type (.*?) created to list\\-initialize this reference",
[k]="in initialization of temporary of type (.*?) created to list\\-initialize this reference",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"8d082d187e57",1409868819,"PR20844: If we fail to list-initialize a reference, map to the referenced type"},
[m]={"8d082d187e57",1409868819,"PR20844: If we fail to list-initialize a reference, map to the referenced type"},
[n]={{D,9523,"static void diagnoseListInit(Sema &S, const InitializedEntity &Entity, InitListExpr *InitList) {\n  if (DestType->isReferenceType()) {\n    S.Diag(Loc, diag::note_in_reference_temporary_list_initializer) << T;"}}
[n]={{K,9523,"static void diagnoseListInit(Sema &S, const InitializedEntity &Entity, InitListExpr *InitList) {\n  if (DestType->isReferenceType()) {\n    S.Diag(Loc, diag::note_in_reference_temporary_list_initializer) << T;"}},
[o]={
["clang/test/SemaCXX/cxx0x-initializer-references.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-references.cpp:137:6: note: in initialization of temporary of type \'A\' created to list-initialize this reference"}
}
},
},
["note_include_header_or_declare"]={
["note_include_header_or_declare"]={
[f]="include the header <A> or explicitly provide a declaration for \'B\'",
[b]="include the header <A> or explicitly provide a declaration for \'B\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="include the header <%0> or explicitly provide a declaration for \'%1\'",
[h]="include the header <%0> or explicitly provide a declaration for \'%1\'",
[g]=b,
[j]=i,
[e]="include the header \\<(.*?)\\> or explicitly provide a declaration for \'(.*?)\'",
[k]="include the header \\<(.*?)\\> or explicitly provide a declaration for \'(.*?)\'",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5d96e0a3a795",1405112031,"Consolidate header inclusion diagnostics"},
[m]={"5d96e0a3a795",1405112031,"Consolidate header inclusion diagnostics"},
[n]={{y,11989,"// If the replacement is valid, emit a note with replacement function.\n// Additionally, suggest including the proper header if not already included.\nstatic void emitReplacement(Sema &S, SourceLocation Loc, SourceRange Range, unsigned AbsKind, QualType ArgType) {\n  S.Diag(Loc, diag::note_include_header_or_declare) << HeaderName << FunctionName;"},{t,2471,"/// LazilyCreateBuiltin - The specified Builtin-ID was first used at\n/// file scope.  lazily create a decl for it. ForRedeclaration is true\n/// if we\'re creating this built-in in anticipation of redeclaring the\n/// built-in.\nNamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, Scope *S, bool ForRedeclaration, SourceLocation Loc) {\n  if (!ForRedeclaration && (Context.BuiltinInfo.isPredefinedLibFunction(ID) || Context.BuiltinInfo.isHeaderDependentFunction(ID))) {\n    if (const char *Header = Context.BuiltinInfo.getHeaderName(ID))\n      Diag(Loc, diag::note_include_header_or_declare) << Header << Context.BuiltinInfo.getName(ID);"}}
[n]={{D,11989,"// If the replacement is valid, emit a note with replacement function.\n// Additionally, suggest including the proper header if not already included.\nstatic void emitReplacement(Sema &S, SourceLocation Loc, SourceRange Range, unsigned AbsKind, QualType ArgType) {\n  S.Diag(Loc, diag::note_include_header_or_declare) << HeaderName << FunctionName;"},{u,2471,"/// LazilyCreateBuiltin - The specified Builtin-ID was first used at\n/// file scope.  lazily create a decl for it. ForRedeclaration is true\n/// if we\'re creating this built-in in anticipation of redeclaring the\n/// built-in.\nNamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned ID, Scope *S, bool ForRedeclaration, SourceLocation Loc) {\n  if (!ForRedeclaration && (Context.BuiltinInfo.isPredefinedLibFunction(ID) || Context.BuiltinInfo.isHeaderDependentFunction(ID))) {\n    if (const char *Header = Context.BuiltinInfo.getHeaderName(ID))\n      Diag(Loc, diag::note_include_header_or_declare) << Header << Context.BuiltinInfo.getName(ID);"}},
[o]={
["clang/test/SemaObjC/ivar-lookup-resolution-builtin.m"]={"clang/test/SemaObjC/ivar-lookup-resolution-builtin.m:31:10: note: include the header <strings.h> or explicitly provide a declaration for \'index\'"}
}
},
},
["note_incompatible_analyzer_plugin_api"]={
["note_incompatible_analyzer_plugin_api"]={
[f]="current API version is \'A\', but plugin was compiled with version \'B\'",
[b]="current API version is \'A\', but plugin was compiled with version \'B\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="current API version is \'%0\', but plugin was compiled with version \'%1\'",
[h]="current API version is \'%0\', but plugin was compiled with version \'%1\'",
[g]=b,
[j]=i,
[e]="current API version is \'(.*?)\', but plugin was compiled with version \'(.*?)\'",
[k]="current API version is \'(.*?)\', but plugin was compiled with version \'(.*?)\'",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"075d73bcced3",1313556963,"[analyzer] Add a warning for an incompatible plugin version."},
[m]={"075d73bcced3",1313556963,"[analyzer] Add a warning for an incompatible plugin version."},
Line 5,474: Line 6,630:
},
},
["note_incomplete_class_and_qualified_id"]={
["note_incomplete_class_and_qualified_id"]={
[f]="conformance of forward class A to protocol B can not be confirmed",
[b]="conformance of forward class A to protocol B can not be confirmed",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="conformance of forward class %0 to protocol %1 can not be confirmed",
[h]="conformance of forward class %0 to protocol %1 can not be confirmed",
[g]=b,
[j]=i,
[e]="conformance of forward class (.*?) to protocol (.*?) can not be confirmed",
[k]="conformance of forward class (.*?) to protocol (.*?) can not be confirmed",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"01d96986d843",1480719628,"More diagnostic name fixups: w_ -> warn_, warning_ -> warn_, not_ -> note_."},
[m]={"01d96986d843",1480719628,"More diagnostic name fixups: w_ -> warn_, warning_ -> warn_, not_ -> note_."},
[n]={{r,17792,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  if ((DiagKind == diag::warn_incompatible_qualified_id || DiagKind == diag::err_incompatible_qualified_id) && PDecl && IFace && !IFace->hasDefinition())\n    Diag(IFace->getLocation(), diag::note_incomplete_class_and_qualified_id) << IFace << PDecl;"}}
[n]={{s,17792,"bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, SourceLocation Loc, QualType DstType, QualType SrcType, Expr *SrcExpr, AssignmentAction Action, bool *Complained) {\n  if ((DiagKind == diag::warn_incompatible_qualified_id || DiagKind == diag::err_incompatible_qualified_id) && PDecl && IFace && !IFace->hasDefinition())\n    Diag(IFace->getLocation(), diag::note_incomplete_class_and_qualified_id) << IFace << PDecl;"}},
[o]={
["clang/test/SemaObjC/comptypes-legal.m"]={"clang/test/SemaObjC/comptypes-legal.m:45:8: note: conformance of forward class \'ForwarClass\' to protocol \'NSCopying\' can not be confirmed","clang/test/SemaObjC/comptypes-legal.m:45:8: note: conformance of forward class \'ForwarClass\' to protocol \'NSCopying\' can not be confirmed","clang/test/SemaObjC/comptypes-legal.m:45:8: note: conformance of forward class \'ForwarClass\' to protocol \'NSCopying\' can not be confirmed"}
}
},
},
["note_indirect_goto_target"]={
["note_indirect_goto_target"]={
[f]="possible target of ... goto statement",
[b]="possible target of ... goto statement",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="possible target of %select{indirect|asm}0 goto statement",
[h]="possible target of %select{indirect|asm}0 goto statement",
[g]=b,
[j]=i,
[e]="possible target of (?:indirect|asm) goto statement",
[k]="possible target of (?:indirect|asm) goto statement",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={U,1273625893,X},
[m]={kb,1273625893,hb},
[n]={{x,865,"/// Produce primary diagnostic for an indirect jump statement.\nstatic void DiagnoseIndirectOrAsmJumpStmt(Sema &S, Stmt *Jump, LabelDecl *Target, bool &Diagnosed) {\n  S.Diag(Target->getStmt()->getIdentLoc(), diag::note_indirect_goto_target) << IsAsmGoto;"},{x,913,"/// Diagnose an indirect jump which is known to cross scopes.\nvoid JumpScopeChecker::DiagnoseIndirectOrAsmJump(Stmt *Jump, unsigned JumpScope, LabelDecl *Target, unsigned TargetScope) {\n  // Diagnose this jump if it would be ill-formed in C++98.\n  if (!Diagnosed && !ToScopesCXX98Compat.empty()) {\n    S.Diag(Target->getStmt()->getIdentLoc(), diag::note_indirect_goto_target) << IsAsmGoto;"}}
[n]={{B,865,"/// Produce primary diagnostic for an indirect jump statement.\nstatic void DiagnoseIndirectOrAsmJumpStmt(Sema &S, Stmt *Jump, LabelDecl *Target, bool &Diagnosed) {\n  S.Diag(Target->getStmt()->getIdentLoc(), diag::note_indirect_goto_target) << IsAsmGoto;"},{B,913,"/// Diagnose an indirect jump which is known to cross scopes.\nvoid JumpScopeChecker::DiagnoseIndirectOrAsmJump(Stmt *Jump, unsigned JumpScope, LabelDecl *Target, unsigned TargetScope) {\n  // Diagnose this jump if it would be ill-formed in C++98.\n  if (!Diagnosed && !ToScopesCXX98Compat.empty()) {\n    S.Diag(Target->getStmt()->getIdentLoc(), diag::note_indirect_goto_target) << IsAsmGoto;"}},
[o]={
[zc]={"clang/test/SemaObjC/strong-in-c-struct.m:28:1: note: possible target of indirect goto statement","clang/test/SemaObjC/strong-in-c-struct.m:51:1: note: possible target of indirect goto statement","clang/test/SemaObjC/strong-in-c-struct.m:70:1: note: possible target of indirect goto statement"}
}
},
},
["note_indirection_through_null"]={
["note_indirection_through_null"]={
[f]="consider using __builtin_trap() or qualifying pointer with \'volatile\'",
[b]="consider using __builtin_trap() or qualifying pointer with \'volatile\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="consider using __builtin_trap() or qualifying pointer with \'volatile\'",
[h]="consider using __builtin_trap() or qualifying pointer with \'volatile\'",
[g]=b,
[j]=i,
[e]="consider using __builtin_trap\\(\\) or qualifying pointer with \'volatile\'",
[k]="consider using __builtin_trap\\(\\) or qualifying pointer with \'volatile\'",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"395610654363",1278483263,"implement PR7569, warning about assignment to null, which "},
[m]={"395610654363",1278483263,"implement PR7569, warning about assignment to null, which "},
[n]={{r,579,"static void CheckForNullPointerDereference(Sema &S, Expr *E) {\n  if (UO && UO->getOpcode() == UO_Deref && UO->getSubExpr()->getType()->isPointerType()) {\n    if ((!isTargetAddressSpace(AS) || (isTargetAddressSpace(AS) && toTargetAddressSpace(AS) == 0)) && UO->getSubExpr()->IgnoreParenCasts()->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull) && !UO->getType().isVolatileQualified()) {\n      S.DiagRuntimeBehavior(UO->getOperatorLoc(), UO, S.PDiag(diag::note_indirection_through_null));"}}
[n]={{s,579,"static void CheckForNullPointerDereference(Sema &S, Expr *E) {\n  if (UO && UO->getOpcode() == UO_Deref && UO->getSubExpr()->getType()->isPointerType()) {\n    if ((!isTargetAddressSpace(AS) || (isTargetAddressSpace(AS) && toTargetAddressSpace(AS) == 0)) && UO->getSubExpr()->IgnoreParenCasts()->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull) && !UO->getType().isVolatileQualified()) {\n      S.DiagRuntimeBehavior(UO->getOperatorLoc(), UO, S.PDiag(diag::note_indirection_through_null));"}},
[o]={
["clang/test/Parser/expressions.c"]={"clang/test/Parser/expressions.c:42:18: note: consider using __builtin_trap() or qualifying pointer with \'volatile\'"}
}
},
},
["note_inequality_comparison_to_or_assign"]={
["note_inequality_comparison_to_or_assign"]={
[f]="use \'|=\' to turn this inequality comparison into an or-assignment",
[b]="use \'|=\' to turn this inequality comparison into an or-assignment",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use \'|=\' to turn this inequality comparison into an or-assignment",
[h]="use \'|=\' to turn this inequality comparison into an or-assignment",
[g]=b,
[j]=i,
[e]="use \'\\|\\=\' to turn this inequality comparison into an or\\-assignment",
[k]="use \'\\|\\=\' to turn this inequality comparison into an or\\-assignment",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"ae51ecc57b34",1313570284,"Introduce a new warning, -Wtop-level-comparison. This warning is"},
[m]={"ae51ecc57b34",1313570284,"Introduce a new warning, -Wtop-level-comparison. This warning is"},
[n]={{A,192,"/// Diagnose unused comparisons, both builtin and overloaded operators.\n/// For \'==\' and \'!=\', suggest fixits for \'=\' or \'|=\'.\n///\n/// Adding a cast to void (or other expression wrappers) will prevent the\n/// warning from firing.\nstatic bool DiagnoseUnusedComparison(Sema &S, const Expr *E) {\n  // If the LHS is a plausible entity to assign to, provide a fixit hint to\n  // correct common typos.\n  if (CanAssign) {\n    if (Kind == Inequality)\n      S.Diag(Loc, diag::note_inequality_comparison_to_or_assign) << FixItHint::CreateReplacement(Loc, \"|=\");"}}
[n]={{H,192,"/// Diagnose unused comparisons, both builtin and overloaded operators.\n/// For \'==\' and \'!=\', suggest fixits for \'=\' or \'|=\'.\n///\n/// Adding a cast to void (or other expression wrappers) will prevent the\n/// warning from firing.\nstatic bool DiagnoseUnusedComparison(Sema &S, const Expr *E) {\n  // If the LHS is a plausible entity to assign to, provide a fixit hint to\n  // correct common typos.\n  if (CanAssign) {\n    if (Kind == Inequality)\n      S.Diag(Loc, diag::note_inequality_comparison_to_or_assign) << FixItHint::CreateReplacement(Loc, \"|=\");"}},
[o]={
["clang/test/SemaCXX/warn-unused-comparison.cpp"]={"clang/test/SemaCXX/warn-unused-comparison.cpp:20:5: note: use \'|=\' to turn this inequality comparison into an or-assignment","clang/test/SemaCXX/warn-unused-comparison.cpp:35:5: note: use \'|=\' to turn this inequality comparison into an or-assignment"}
}
},
},
["note_init_list_at_beginning_of_macro_argument"]={
["note_init_list_at_beginning_of_macro_argument"]={
[f]="cannot use initializer list at the beginning of a macro argument",
[b]="cannot use initializer list at the beginning of a macro argument",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="cannot use initializer list at the beginning of a macro argument",
[h]="cannot use initializer list at the beginning of a macro argument",
[g]=b,
[j]=i,
[e]="cannot use initializer list at the beginning of a macro argument",
[k]="cannot use initializer list at the beginning of a macro argument",
[d]=a,
[l]=a,
[c]=R,
[c]=bb,
[m]={"79b45389c3cd",1374602509,"Add new diagnostic messages when too many arguments are presented to a"},
[m]={"79b45389c3cd",1374602509,"Add new diagnostic messages when too many arguments are presented to a"},
[n]={{ib,946,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // If this is not a variadic macro, and too many args were specified, emit\n  // an error.\n  if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n    if (!GenerateNewArgTokens(*this, ArgTokens, FixedArgTokens, FixedNumArgs, ParenHints, InitLists)) {\n      if (!InitLists.empty()) {\n        DiagnosticBuilder DB = Diag(MacroName, diag::note_init_list_at_beginning_of_macro_argument);"}}
[n]={{wb,946,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // If this is not a variadic macro, and too many args were specified, emit\n  // an error.\n  if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n    if (!GenerateNewArgTokens(*this, ArgTokens, FixedArgTokens, FixedNumArgs, ParenHints, InitLists)) {\n      if (!InitLists.empty()) {\n        DiagnosticBuilder DB = Diag(MacroName, diag::note_init_list_at_beginning_of_macro_argument);"}},
[o]={
["clang/test/Preprocessor/macro_with_initializer_list.cpp"]={"clang/test/Preprocessor/macro_with_initializer_list.cpp:150:3: note: cannot use initializer list at the beginning of a macro argument","clang/test/Preprocessor/macro_with_initializer_list.cpp:156:3: note: cannot use initializer list at the beginning of a macro argument","clang/test/Preprocessor/macro_with_initializer_list.cpp:177:3: note: cannot use initializer list at the beginning of a macro argument"}
}
},
},
["note_init_list_narrowing_silence"]={
["note_init_list_narrowing_silence"]={
[f]="insert an explicit cast to silence this issue",
[b]="insert an explicit cast to silence this issue",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="insert an explicit cast to silence this issue",
[h]="insert an explicit cast to silence this issue",
[g]=b,
[j]=i,
[e]="insert an explicit cast to silence this issue",
[k]="insert an explicit cast to silence this issue",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"},
[m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"},
[n]={{D,10463,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n  S.Diag(PostInit->getBeginLoc(), diag::note_init_list_narrowing_silence) << PostInit->getSourceRange() << FixItHint::CreateInsertion(PostInit->getBeginLoc(), OS.str()) << FixItHint::CreateInsertion(S.getLocForEndOfToken(PostInit->getEndLoc()), \")\");"}}
[n]={{K,10463,"static void DiagnoseNarrowingInInitList(Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit) {\n  S.Diag(PostInit->getBeginLoc(), diag::note_init_list_narrowing_silence) << PostInit->getSourceRange() << FixItHint::CreateInsertion(PostInit->getBeginLoc(), OS.str()) << FixItHint::CreateInsertion(S.getLocForEndOfToken(PostInit->getEndLoc()), \")\");"}},
[o]={
["clang/test/SemaCXX/cxx0x-initializer-scalars.cpp"]={"clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:48:21: note: insert an explicit cast to silence this issue","clang/test/SemaCXX/cxx0x-initializer-scalars.cpp:49:24: note: insert an explicit cast to silence this issue"}
}
},
},
["note_init_with_default_member_initializer"]={
["note_init_with_default_member_initializer"]={
[f]="initializing field A with default member initializer",
[b]="initializing field A with default member initializer",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="initializing field %0 with default member initializer",
[h]="initializing field %0 with default member initializer",
[g]=b,
[j]=i,
[e]="initializing field (.*?) with default member initializer",
[k]="initializing field (.*?) with default member initializer",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[m]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[n]={{D,8295,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    for (unsigned I = 0; I != Path.size(); ++I) {\n      case IndirectLocalPathEntry::DefaultInit: {\n        Diag(FD->getLocation(), diag::note_init_with_default_member_initializer) << FD << nextPathEntryRange(Path, I + 1, L);"}}
[n]={{K,8295,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    for (unsigned I = 0; I != Path.size(); ++I) {\n      case IndirectLocalPathEntry::DefaultInit: {\n        Diag(FD->getLocation(), diag::note_init_with_default_member_initializer) << FD << nextPathEntryRange(Path, I + 1, L);"}},
[o]={
["clang/test/CXX/temp/temp.param/p5.cpp"]={"clang/test/CXX/temp/temp.param/p5.cpp:5:9: note: initializing field \'r\' with default member initializer","clang/test/CXX/temp/temp.param/p5.cpp:11:9: note: initializing field \'r\' with default member initializer"}
}
},
},
["note_initializer_out_of_order"]={
["note_initializer_out_of_order"]={
[f]="... A will be initialized after ... B",
[b]="... A will be initialized after ... B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{field|base class}0 %1 will be initialized after %select{field|base}2 %3",
[h]="%select{field|base class}0 %1 will be initialized after %select{field|base}2 %3",
[g]=b,
[j]=i,
[e]="(?:field|base class) (.*?) will be initialized after (?:field|base) (.*?)",
[k]="(?:field|base class) (.*?) will be initialized after (?:field|base) (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={T,1590001902,S},
[m]={pb,1590001902,qb},
[n]={{q,5616,"static void DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef, const CXXConstructorDecl *Constructor, ArrayRef<CXXCtorInitializer *> Inits) {\n  // More than 1 item to warn, create notes letting the user know which ones\n  // are bad.\n  for (unsigned WarnIndex : WarnIndexes) {\n    auto D = SemaRef.Diag(PrevInit->getSourceLocation(), diag::note_initializer_out_of_order);"}}
[n]={{r,5616,"static void DiagnoseBaseOrMemInitializerOrder(Sema &SemaRef, const CXXConstructorDecl *Constructor, ArrayRef<CXXCtorInitializer *> Inits) {\n  // More than 1 item to warn, create notes letting the user know which ones\n  // are bad.\n  for (unsigned WarnIndex : WarnIndexes) {\n    auto D = SemaRef.Diag(PrevInit->getSourceLocation(), diag::note_initializer_out_of_order);"}},
[o]={
["clang/test/SemaCXX/warn-reorder-ctor-initialization.cpp"]={"clang/test/SemaCXX/warn-reorder-ctor-initialization.cpp:10:9: note: field \'s2\' will be initialized after field \'s1\'","clang/test/SemaCXX/warn-reorder-ctor-initialization.cpp:12:9: note: field \'s3\' will be initialized after base \'BB1\'","clang/test/SemaCXX/warn-reorder-ctor-initialization.cpp:13:9: note: base class \'BB1\' will be initialized after base \'BB\'"}
}
},
},
["note_insert_break_fixit"]={
["note_insert_break_fixit"]={
[f]="insert \'break;\' to avoid fall-through",
[b]="insert \'break;\' to avoid fall-through",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="insert \'break;\' to avoid fall-through",
[h]="insert \'break;\' to avoid fall-through",
[g]=b,
[j]=i,
[e]="insert \'break;\' to avoid fall\\-through",
[k]="insert \'break;\' to avoid fall\\-through",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"84837d5b5aa0",1336069659,"Add -Wimplicit-fallthrough warning flag, which warns on fallthrough between"},
[m]={"84837d5b5aa0",1336069659,"Add -Wimplicit-fallthrough warning flag, which warns on fallthrough between"},
[n]={{Z,1328,"static void DiagnoseSwitchLabelsFallthrough(Sema &S, AnalysisDeclContext &AC, bool PerFunction) {\n  for (const CFGBlock *B : llvm::reverse(*Cfg)) {\n    if (!AnnotatedCnt) {\n      S.Diag(L, diag::note_insert_break_fixit) << FixItHint::CreateInsertion(L, \"break; \");"}}
[n]={{eb,1328,"static void DiagnoseSwitchLabelsFallthrough(Sema &S, AnalysisDeclContext &AC, bool PerFunction) {\n  for (const CFGBlock *B : llvm::reverse(*Cfg)) {\n    if (!AnnotatedCnt) {\n      S.Diag(L, diag::note_insert_break_fixit) << FixItHint::CreateInsertion(L, \"break; \");"}},
[o]={
["clang/test/SemaCXX/switch-implicit-fallthrough-blocks.cpp"]={"clang/test/SemaCXX/switch-implicit-fallthrough-blocks.cpp:12:5: note: insert \'break;\' to avoid fall-through"}
}
},
},
["note_insert_fallthrough_fixit"]={
["note_insert_fallthrough_fixit"]={
[f]="insert \'A;\' to silence this warning",
[b]="insert \'A;\' to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="insert \'%0;\' to silence this warning",
[h]="insert \'%0;\' to silence this warning",
[g]=b,
[j]=i,
[e]="insert \'(.*?);\' to silence this warning",
[k]="insert \'(.*?);\' to silence this warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"84837d5b5aa0",1336069659,"Add -Wimplicit-fallthrough warning flag, which warns on fallthrough between"},
[m]={"84837d5b5aa0",1336069659,"Add -Wimplicit-fallthrough warning flag, which warns on fallthrough between"},
[n]={{Z,1324,"static void DiagnoseSwitchLabelsFallthrough(Sema &S, AnalysisDeclContext &AC, bool PerFunction) {\n  for (const CFGBlock *B : llvm::reverse(*Cfg)) {\n    if (!AnnotatedCnt) {\n      if (!(B->empty() && Term && isa<BreakStmt>(Term))) {\n        S.Diag(L, diag::note_insert_fallthrough_fixit) << AnnotationSpelling << FixItHint::CreateInsertion(L, TextToInsert);"}}
[n]={{eb,1324,"static void DiagnoseSwitchLabelsFallthrough(Sema &S, AnalysisDeclContext &AC, bool PerFunction) {\n  for (const CFGBlock *B : llvm::reverse(*Cfg)) {\n    if (!AnnotatedCnt) {\n      if (!(B->empty() && Term && isa<BreakStmt>(Term))) {\n        S.Diag(L, diag::note_insert_fallthrough_fixit) << AnnotationSpelling << FixItHint::CreateInsertion(L, TextToInsert);"}},
[o]={
["clang/test/SemaCXX/switch-implicit-fallthrough-per-method.cpp"]={"clang/test/SemaCXX/switch-implicit-fallthrough-per-method.cpp:15:7: note: insert \'[[clang::fallthrough]];\' to silence this warning","clang/test/SemaCXX/switch-implicit-fallthrough-per-method.cpp:8:5: note: insert \'[[clang::fallthrough]];\' to silence this warning"}
}
},
},
["note_inst_declaration_hint"]={
["note_inst_declaration_hint"]={
[f]="add an explicit instantiation declaration to suppress this warning if A is explicitly instantiated in another translation unit",
[b]="add an explicit instantiation declaration to suppress this warning if A is explicitly instantiated in another translation unit",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add an explicit instantiation declaration to suppress this warning if %q0 is explicitly instantiated in another translation unit",
[h]="add an explicit instantiation declaration to suppress this warning if %q0 is explicitly instantiated in another translation unit",
[g]=b,
[j]=i,
[e]="add an explicit instantiation declaration to suppress this warning if (.*?) is explicitly instantiated in another translation unit",
[k]="add an explicit instantiation declaration to suppress this warning if (.*?) is explicitly instantiated in another translation unit",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"7dcc97e7ac0a",1461046792,"Warn if function or variable cannot be implicitly instantiated"},
[m]={"7dcc97e7ac0a",1461046792,"Warn if function or variable cannot be implicitly instantiated"},
[n]={{dc,4905,"/// Instantiate the definition of the given function from its\n/// template.\n///\n/// \\param PointOfInstantiation the point at which the instantiation was\n/// required. Note that this is not precisely a \"point of instantiation\"\n/// for the function, but it\'s close.\n///\n/// \\param Function the already-instantiated declaration of a\n/// function template specialization or member function of a class template\n/// specialization.\n///\n/// \\param Recursive if true, recursively instantiates any functions that\n/// are required by this instantiation.\n///\n/// \\param DefinitionRequired if true, then we are performing an explicit\n/// instantiation where the body of the function is required. Complain if\n/// there is no such body.\nvoid Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, FunctionDecl *Function, bool Recursive, bool DefinitionRequired, bool AtEndOfTU) {\n  // FIXME: We need to track the instantiation stack in order to know which\n  // definitions should be visible within this instantiation.\n  if (DiagnoseUninstantiableTemplate(PointOfInstantiation, Function, Function->getInstantiatedFromMemberFunction(), PatternDecl, PatternDef, TSK,\n    if (DefinitionRequired)\n    else if (TSK == TSK_ExplicitInstantiationDefinition || (Function->isConstexpr() && !Recursive)) {\n    } else if (TSK == TSK_ImplicitInstantiation) {\n      if (AtEndOfTU && !getDiagnostics().hasErrorOccurred() && !getSourceManager().isInSystemHeader(PatternDecl->getBeginLoc())) {\n        if (getLangOpts().CPlusPlus11)\n          Diag(PointOfInstantiation, diag::note_inst_declaration_hint) << Function;"},{dc,5531,"/// Instantiate the definition of the given variable from its\n/// template.\n///\n/// \\param PointOfInstantiation the point at which the instantiation was\n/// required. Note that this is not precisely a \"point of instantiation\"\n/// for the variable, but it\'s close.\n///\n/// \\param Var the already-instantiated declaration of a templated variable.\n///\n/// \\param Recursive if true, recursively instantiates any functions that\n/// are required by this instantiation.\n///\n/// \\param DefinitionRequired if true, then we are performing an explicit\n/// instantiation where a definition of the variable is required. Complain\n/// if there is no such definition.\nvoid Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation, VarDecl *Var, bool Recursive, bool DefinitionRequired, bool AtEndOfTU) {\n  // If we don\'t have a definition of the variable template, we won\'t perform\n  // any instantiation. Rather, we rely on the user to instantiate this\n  // definition (or provide a specialization for it) in another translation\n  // unit.\n  if (!Def && !DefinitionRequired) {\n    if (TSK == TSK_ExplicitInstantiationDefinition) {\n    } else if (TSK == TSK_ImplicitInstantiation) {\n      // Warn about missing definition at the end of translation unit.\n      if (AtEndOfTU && !getDiagnostics().hasErrorOccurred() && !getSourceManager().isInSystemHeader(PatternDecl->getBeginLoc())) {\n        if (getLangOpts().CPlusPlus11)\n          Diag(PointOfInstantiation, diag::note_inst_declaration_hint) << Var;"}}
[n]={{nc,4905,"/// Instantiate the definition of the given function from its\n/// template.\n///\n/// \\param PointOfInstantiation the point at which the instantiation was\n/// required. Note that this is not precisely a \"point of instantiation\"\n/// for the function, but it\'s close.\n///\n/// \\param Function the already-instantiated declaration of a\n/// function template specialization or member function of a class template\n/// specialization.\n///\n/// \\param Recursive if true, recursively instantiates any functions that\n/// are required by this instantiation.\n///\n/// \\param DefinitionRequired if true, then we are performing an explicit\n/// instantiation where the body of the function is required. Complain if\n/// there is no such body.\nvoid Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, FunctionDecl *Function, bool Recursive, bool DefinitionRequired, bool AtEndOfTU) {\n  // FIXME: We need to track the instantiation stack in order to know which\n  // definitions should be visible within this instantiation.\n  if (DiagnoseUninstantiableTemplate(PointOfInstantiation, Function, Function->getInstantiatedFromMemberFunction(), PatternDecl, PatternDef, TSK,\n    if (DefinitionRequired)\n    else if (TSK == TSK_ExplicitInstantiationDefinition || (Function->isConstexpr() && !Recursive)) {\n    } else if (TSK == TSK_ImplicitInstantiation) {\n      if (AtEndOfTU && !getDiagnostics().hasErrorOccurred() && !getSourceManager().isInSystemHeader(PatternDecl->getBeginLoc())) {\n        if (getLangOpts().CPlusPlus11)\n          Diag(PointOfInstantiation, diag::note_inst_declaration_hint) << Function;"},{nc,5531,"/// Instantiate the definition of the given variable from its\n/// template.\n///\n/// \\param PointOfInstantiation the point at which the instantiation was\n/// required. Note that this is not precisely a \"point of instantiation\"\n/// for the variable, but it\'s close.\n///\n/// \\param Var the already-instantiated declaration of a templated variable.\n///\n/// \\param Recursive if true, recursively instantiates any functions that\n/// are required by this instantiation.\n///\n/// \\param DefinitionRequired if true, then we are performing an explicit\n/// instantiation where a definition of the variable is required. Complain\n/// if there is no such definition.\nvoid Sema::InstantiateVariableDefinition(SourceLocation PointOfInstantiation, VarDecl *Var, bool Recursive, bool DefinitionRequired, bool AtEndOfTU) {\n  // If we don\'t have a definition of the variable template, we won\'t perform\n  // any instantiation. Rather, we rely on the user to instantiate this\n  // definition (or provide a specialization for it) in another translation\n  // unit.\n  if (!Def && !DefinitionRequired) {\n    if (TSK == TSK_ExplicitInstantiationDefinition) {\n    } else if (TSK == TSK_ImplicitInstantiation) {\n      // Warn about missing definition at the end of translation unit.\n      if (AtEndOfTU && !getDiagnostics().hasErrorOccurred() && !getSourceManager().isInSystemHeader(PatternDecl->getBeginLoc())) {\n        if (getLangOpts().CPlusPlus11)\n          Diag(PointOfInstantiation, diag::note_inst_declaration_hint) << Var;"}},
[o]={
["clang/test/CXX/temp/temp.spec/temp.explicit/p1-emit.cpp"]={"clang/test/CXX/temp/temp.spec/temp.explicit/p1-emit.cpp:28:26: note: add an explicit instantiation declaration to suppress this warning if \'X<long>::member3\' is explicitly instantiated in another translation unit"}
}
},
},
["note_instantiation_contexts_suppressed"]={
["note_instantiation_contexts_suppressed"]={
[f]="(skipping A contextB in backtrace; use -ftemplate-backtrace-limit=0 to see all)",
[b]="(skipping A contextB in backtrace; use -ftemplate-backtrace-limit=0 to see all)",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="(skipping %0 context%s0 in backtrace; use -ftemplate-backtrace-limit=0 to see all)",
[h]="(skipping %0 context%s0 in backtrace; use -ftemplate-backtrace-limit=0 to see all)",
[g]=b,
[j]=i,
[e]="\\(skipping (.*?) context(.*?) in backtrace; use \\-ftemplate\\-backtrace\\-limit\\=0 to see all\\)",
[k]="\\(skipping (.*?) context(.*?) in backtrace; use \\-ftemplate\\-backtrace\\-limit\\=0 to see all\\)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"ffed1cb33910",1271747904,"Introduce a limit on the depth of the template instantiation backtrace"},
[m]={"ffed1cb33910",1271747904,"Introduce a limit on the depth of the template instantiation backtrace"},
[n]={{z,754,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    // Skip this instantiation?\n    if (InstantiationIdx >= SkipStart && InstantiationIdx < SkipEnd) {\n      if (InstantiationIdx == SkipStart) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_instantiation_contexts_suppressed) << unsigned(CodeSynthesisContexts.size() - Limit);"}}
[n]={{G,754,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    // Skip this instantiation?\n    if (InstantiationIdx >= SkipStart && InstantiationIdx < SkipEnd) {\n      if (InstantiationIdx == SkipStart) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_instantiation_contexts_suppressed) << unsigned(CodeSynthesisContexts.size() - Limit);"}},
[o]={
["clang/test/SemaCXX/invalid-requirement-requires-expr.cpp"]={"clang/test/SemaCXX/invalid-requirement-requires-expr.cpp:18:16: note: (skipping 5 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)"}
}
},
},
["note_instantiation_required_here"]={
["note_instantiation_required_here"]={
[f]="... instantiation first required here",
[b]="... instantiation first required here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{implicit|explicit}0 instantiation first required here",
[h]="%select{implicit|explicit}0 instantiation first required here",
[g]=b,
[j]=i,
[e]="(?:implicit|explicit) instantiation first required here",
[k]="(?:implicit|explicit) instantiation first required here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"06db9f50a2d6",1255378708,"Diagnose the declaration of explicit specializations after an implicit"},
[m]={"06db9f50a2d6",1255378708,"Diagnose the declaration of explicit specializations after an implicit"},
[n]={{u,4678,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n  // C++ [temp.expl.spec]p6:\n  //  If a template, a member template or the member of a class template is\n  //  explicitly specialized then that specialization shall be declared\n  //  before the first use of that specialization that would cause an implicit\n  //  instantiation to take place, in every translation unit in which such a\n  //  use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    if (!Okay) {\n      Diag(PrevDecl->getPointOfInstantiation(), diag::note_instantiation_required_here) << (PrevDecl->getTemplateSpecializationKind() != TSK_ImplicitInstantiation);"},{u,8883,"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  // C++ [temp.expl.spec]p6:\n  //  If a template, a member template or the member of a class template is\n  //  explicitly specialized then that specialization shall be declared\n  //  before the first use of that specialization that would cause an implicit\n  //  instantiation to take place, in every translation unit in which such a\n  //  use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    if (!Okay) {\n      Diag(PrevDecl->getPointOfInstantiation(), diag::note_instantiation_required_here) << (PrevDecl->getTemplateSpecializationKind() != TSK_ImplicitInstantiation);"},{u,9202,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  case TSK_ExplicitSpecialization:\n    case TSK_ExplicitInstantiationDefinition:\n      Diag(PrevPointOfInstantiation, diag::note_instantiation_required_here) << (PrevTSK != TSK_ImplicitInstantiation);"}}
[n]={{v,4678,"DeclResult Sema::ActOnVarTemplateSpecialization(Scope *S, Declarator &D, TypeSourceInfo *DI, SourceLocation TemplateKWLoc, TemplateParameterList *TemplateParams, StorageClass SC, bool IsPartialSpecialization) {\n  // C++ [temp.expl.spec]p6:\n  //  If a template, a member template or the member of a class template is\n  //  explicitly specialized then that specialization shall be declared\n  //  before the first use of that specialization that would cause an implicit\n  //  instantiation to take place, in every translation unit in which such a\n  //  use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    if (!Okay) {\n      Diag(PrevDecl->getPointOfInstantiation(), diag::note_instantiation_required_here) << (PrevDecl->getTemplateSpecializationKind() != TSK_ImplicitInstantiation);"},{v,8883,"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  // C++ [temp.expl.spec]p6:\n  //  If a template, a member template or the member of a class template is\n  //  explicitly specialized then that specialization shall be declared\n  //  before the first use of that specialization that would cause an implicit\n  //  instantiation to take place, in every translation unit in which such a\n  //  use occurs; no diagnostic is required.\n  if (PrevDecl && PrevDecl->getPointOfInstantiation().isValid()) {\n    if (!Okay) {\n      Diag(PrevDecl->getPointOfInstantiation(), diag::note_instantiation_required_here) << (PrevDecl->getTemplateSpecializationKind() != TSK_ImplicitInstantiation);"},{v,9202,"/// Diagnose cases where we have an explicit template specialization\n/// before/after an explicit template instantiation, producing diagnostics\n/// for those cases where they are required and determining whether the\n/// new specialization/instantiation will have any effect.\n///\n/// \\param NewLoc the location of the new explicit specialization or\n/// instantiation.\n///\n/// \\param NewTSK the kind of the new explicit specialization or instantiation.\n///\n/// \\param PrevDecl the previous declaration of the entity.\n///\n/// \\param PrevTSK the kind of the old explicit specialization or instantiatin.\n///\n/// \\param PrevPointOfInstantiation if valid, indicates where the previous\n/// declaration was instantiated (either implicitly or explicitly).\n///\n/// \\param HasNoEffect will be set to true to indicate that the new\n/// specialization or instantiation has no effect and should be ignored.\n///\n/// \\returns true if there was an error that should prevent the introduction of\n/// the new declaration into the AST, false otherwise.\nbool Sema::CheckSpecializationInstantiationRedecl(SourceLocation NewLoc, TemplateSpecializationKind NewTSK, NamedDecl *PrevDecl, TemplateSpecializationKind PrevTSK, SourceLocation PrevPointOfInstantiation, bool &HasNoEffect) {\n  case TSK_ExplicitSpecialization:\n    case TSK_ExplicitInstantiationDefinition:\n      Diag(PrevPointOfInstantiation, diag::note_instantiation_required_here) << (PrevTSK != TSK_ImplicitInstantiation);"}},
[o]={
["clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp"]={"clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:18:7: note: implicit instantiation first required here","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:19:7: note: implicit instantiation first required here","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:20:19: note: implicit instantiation first required here","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:21:19: note: implicit instantiation first required here","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:16:25: note: implicit instantiation first required here","clang/test/CXX/temp/temp.spec/temp.expl.spec/p6.cpp:50:3: note: implicit instantiation first required here"}
}
},
},
["note_invalid_consteval_initializer"]={
["note_invalid_consteval_initializer"]={
[f]="in the default initializer of A",
[b]="in the default initializer of A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in the default initializer of %0",
[h]="in the default initializer of %0",
[g]=b,
[j]=i,
[e]="in the default initializer of (.*?)",
[k]="in the default initializer of (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={db,1625925174,eb},
[m]={fb,1625925174,nb},
[n]={{r,18268,"static void EvaluateAndDiagnoseImmediateInvocation(Sema &SemaRef, Sema::ImmediateInvocationCandidate Candidate) {\n  if (!Result || !Notes.empty()) {\n    if (auto Context = SemaRef.InnermostDeclarationWithDelayedImmediateInvocations()) {\n      SemaRef.Diag(Context->Loc, diag::note_invalid_consteval_initializer) << Context->Decl;"},{r,18451,"static void HandleImmediateInvocations(Sema &SemaRef, Sema::ExpressionEvaluationContextRecord &Rec) {\n  for (auto *DR : Rec.ReferenceToConsteval) {\n    if (!Rec.InImmediateEscalatingFunctionContext || (SemaRef.inTemplateInstantiation() && !ImmediateEscalating)) {\n      if (auto Context = SemaRef.InnermostDeclarationWithDelayedImmediateInvocations()) {\n        SemaRef.Diag(Context->Loc, diag::note_invalid_consteval_initializer) << Context->Decl;"}}
[n]={{s,18268,"static void EvaluateAndDiagnoseImmediateInvocation(Sema &SemaRef, Sema::ImmediateInvocationCandidate Candidate) {\n  if (!Result || !Notes.empty()) {\n    if (auto Context = SemaRef.InnermostDeclarationWithDelayedImmediateInvocations()) {\n      SemaRef.Diag(Context->Loc, diag::note_invalid_consteval_initializer) << Context->Decl;"},{s,18451,"static void HandleImmediateInvocations(Sema &SemaRef, Sema::ExpressionEvaluationContextRecord &Rec) {\n  for (auto *DR : Rec.ReferenceToConsteval) {\n    if (!Rec.InImmediateEscalatingFunctionContext || (SemaRef.inTemplateInstantiation() && !ImmediateEscalating)) {\n      if (auto Context = SemaRef.InnermostDeclarationWithDelayedImmediateInvocations()) {\n        SemaRef.Diag(Context->Loc, diag::note_invalid_consteval_initializer) << Context->Decl;"}},
[o]={
["clang/test/SemaCXX/cxx2a-consteval-default-params.cpp"]={"clang/test/SemaCXX/cxx2a-consteval-default-params.cpp:23:6: note: in the default initializer of \'defaulted\'"}
}
},
},
["note_invalid_consteval_initializer_here"]={
["note_invalid_consteval_initializer_here"]={
[f]="initialized here A",
[b]="initialized here A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="initialized here %0",
[h]="initialized here %0",
[g]=b,
[j]=i,
[e]="initialized here (.*?)",
[k]="initialized here (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={db,1625925174,eb}
[m]={fb,1625925174,nb}
},
},
["note_invalid_subexpr_in_const_expr"]={
["note_invalid_subexpr_in_const_expr"]={
[f]="subexpression not valid in a constant expression",
[b]="subexpression not valid in a constant expression",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="subexpression not valid in a constant expression",
[h]="subexpression not valid in a constant expression",
[g]=b,
[j]=i,
[e]="subexpression not valid in a constant expression",
[k]="subexpression not valid in a constant expression",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"f57d8cb13121",1323471481,"C++11 constant expressions: Don\'t use CheckICE in C++11; instead, determine"},
[m]={"f57d8cb13121",1323471481,"C++11 constant expressions: Don\'t use CheckICE in C++11; instead, determine"},
[n]={{p,2372,"/// Check that this core constant expression is of literal type, and if not,\n/// produce an appropriate diagnostic.\nstatic bool CheckLiteralType(EvalInfo &Info, const Expr *E, const LValue *This = nullptr) {\n  // Prvalue constant expressions must be of literal types.\n  if (Info.getLangOpts().CPlusPlus11)\n  else\n    Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{p,2739,"static bool EvalAndBitcastToAPInt(EvalInfo &Info, const Expr *E, llvm::APInt &Res) {\n  if (SVal.isVector()) {\n    for (unsigned i = 0; i < SVal.getVectorLength(); i++) {\n      if (Elt.isInt()) {\n      } else if (Elt.isFloat()) {\n      } else {\n        Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{p,2752,"static bool EvalAndBitcastToAPInt(EvalInfo &Info, const Expr *E, llvm::APInt &Res) {\n  Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{p,3723,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    // If this is our last pass, check that the final object type is OK.\n    if (I == N || (I == N - 1 && ObjType->isAnyComplexType())) {\n      // Accesses to volatile objects are prohibited.\n      if (ObjType.isVolatileQualified() && isFormalAccess(handler.AccessKind)) {\n        if (Info.getLangOpts().CPlusPlus) {\n        } else {\n          Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{p,5561,"/// CheckTrivialDefaultConstructor - Check whether a constructor is a trivial\n/// default constructor. If so, we\'ll fold it whether or not it\'s marked as\n/// constexpr. If it is marked as constexpr, we will never implicitly define it,\n/// so we need special handling.\nstatic bool CheckTrivialDefaultConstructor(EvalInfo &Info, SourceLocation Loc, const CXXConstructorDecl *CD, bool IsValueInitialization) {\n  // Value-initialization does not call a trivial default constructor, so such a\n  // call is a core constant expression whether or not the constructor is\n  // constexpr.\n  if (!CD->isConstexpr() && !IsValueInitialization) {\n    if (Info.getLangOpts().CPlusPlus11) {\n    } else {\n      Info.CCEDiag(Loc, diag::note_invalid_subexpr_in_const_expr);"},{p,5583,"/// CheckConstexprFunction - Check that a function can be called in a constant\n/// expression.\nstatic bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body) {\n  // Bail out if the function declaration itself is invalid.  We will\n  // have produced a relevant diagnostic while parsing it, so just\n  // note the problematic sub-expression.\n  if (Declaration->isInvalidDecl()) {\n    Info.FFDiag(CallLoc, diag::note_invalid_subexpr_in_const_expr);"},{p,5595,"/// CheckConstexprFunction - Check that a function can be called in a constant\n/// expression.\nstatic bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body) {\n  if (Definition && Definition->isInvalidDecl()) {\n    Info.FFDiag(CallLoc, diag::note_invalid_subexpr_in_const_expr);"},{p,5626,"/// CheckConstexprFunction - Check that a function can be called in a constant\n/// expression.\nstatic bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body) {\n  if (Info.getLangOpts().CPlusPlus11) {\n  } else {\n    Info.FFDiag(CallLoc, diag::note_invalid_subexpr_in_const_expr);"},{p,7481,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  bool Error(const Expr *E) { return Error(E, diag::note_invalid_subexpr_in_const_expr); }"},{p,9304,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwmemchr:\n    if (Info.getLangOpts().CPlusPlus11)\n    else\n      Info.CCEDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{p,9412,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwmemmove:\n    if (Info.getLangOpts().CPlusPlus11)\n    else\n      Info.CCEDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{p,11242,"static bool EvaluateInteger(const Expr *E, APSInt &Result, EvalInfo &Info) {\n  if (!Val.isInt()) {\n    Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{p,12116,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_constant_p: {\n    Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{p,12289,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwcslen:\n    // A call to strlen is not a constant expression.\n    if (Info.getLangOpts().CPlusPlus11)\n    else\n      Info.CCEDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{p,12314,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwmemcmp:\n    // A call to strlen is not a constant expression.\n    if (Info.getLangOpts().CPlusPlus11)\n    else\n      Info.CCEDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{p,12937,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  auto Error = [&](const Expr *E) {\n    Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{p,15148,"static bool Evaluate(APValue &Result, EvalInfo &Info, const Expr *E) {\n  if (E->isGLValue() || T->isFunctionType()) {\n  } else if (T->isVectorType()) {\n  } else if (T->isIntegralOrEnumerationType()) {\n  } else if (T->hasPointerRepresentation()) {\n  } else if (T->isRealFloatingType()) {\n  } else if (T->isAnyComplexType()) {\n  } else if (T->isFixedPointType()) {\n  } else if (T->isMemberPointerType()) {\n  } else if (T->isArrayType()) {\n  } else if (T->isRecordType()) {\n  } else if (T->isVoidType()) {\n  } else if (T->isAtomicType()) {\n  } else if (Info.getLangOpts().CPlusPlus11) {\n  } else {\n    Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{w,337,"bool CheckCallable(InterpState &S, CodePtr OpPC, const Function *F) {\n  if (!F->isConstexpr()) {\n    if (S.getLangOpts().CPlusPlus11) {\n    } else {\n      S.FFDiag(Loc, diag::note_invalid_subexpr_in_const_expr);"},{t,14202,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    if (!getLangOpts().CPlusPlus11) {\n      // Compute and cache the constant value, and remember that we have a\n      // constant initializer.\n      if (HasConstInit) {\n      } else if (CacheCulprit) {\n        Notes.emplace_back(CacheCulprit->getExprLoc(), PDiag(diag::note_invalid_subexpr_in_const_expr));"},{t,14217,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    if (HasConstInit) {\n    } else if (var->isConstexpr()) {\n      if (Notes.size() == 1 && Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) {"},{r,17998,"ExprResult Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, VerifyICEDiagnoser &Diagnoser, AllowFoldKind CanFold) {\n  if (Notes.size() == 1 && Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) {"},{P,5986,"/// EvaluateConvertedConstantExpression - Evaluate an Expression\n/// That is a converted constant expression\n/// (which was built with BuildConvertedConstantExpression)\nstatic ExprResult EvaluateConvertedConstantExpression(Sema &S, Expr *E, QualType T, APValue &Value, Sema::CCEKind CCE, bool RequireInt, const APValue &PreNarrowingValue) {\n  if (Notes.size() == 1 && Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) {"},{u,6573,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (!Arg->EvaluateAsRValue(EvalResult, S.Context) || EvalResult.HasSideEffects) {\n    if (Notes.size() == 1 && Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) {"}}
[n]={{q,2372,"/// Check that this core constant expression is of literal type, and if not,\n/// produce an appropriate diagnostic.\nstatic bool CheckLiteralType(EvalInfo &Info, const Expr *E, const LValue *This = nullptr) {\n  // Prvalue constant expressions must be of literal types.\n  if (Info.getLangOpts().CPlusPlus11)\n  else\n    Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{q,2739,"static bool EvalAndBitcastToAPInt(EvalInfo &Info, const Expr *E, llvm::APInt &Res) {\n  if (SVal.isVector()) {\n    for (unsigned i = 0; i < SVal.getVectorLength(); i++) {\n      if (Elt.isInt()) {\n      } else if (Elt.isFloat()) {\n      } else {\n        Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{q,2752,"static bool EvalAndBitcastToAPInt(EvalInfo &Info, const Expr *E, llvm::APInt &Res) {\n  Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{q,3723,"/// Find the designated sub-object of an rvalue.\ntemplate <typename SubobjectHandler> typename SubobjectHandler::result_type findSubobject(EvalInfo &Info, const Expr *E, const CompleteObject &Obj, const SubobjectDesignator &Sub, SubobjectHandler &handler) {\n  // Walk the designator\'s path to find the subobject.\n  for (unsigned I = 0, N = Sub.Entries.size(); /**/; ++I) {\n    // If this is our last pass, check that the final object type is OK.\n    if (I == N || (I == N - 1 && ObjType->isAnyComplexType())) {\n      // Accesses to volatile objects are prohibited.\n      if (ObjType.isVolatileQualified() && isFormalAccess(handler.AccessKind)) {\n        if (Info.getLangOpts().CPlusPlus) {\n        } else {\n          Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{q,5561,"/// CheckTrivialDefaultConstructor - Check whether a constructor is a trivial\n/// default constructor. If so, we\'ll fold it whether or not it\'s marked as\n/// constexpr. If it is marked as constexpr, we will never implicitly define it,\n/// so we need special handling.\nstatic bool CheckTrivialDefaultConstructor(EvalInfo &Info, SourceLocation Loc, const CXXConstructorDecl *CD, bool IsValueInitialization) {\n  // Value-initialization does not call a trivial default constructor, so such a\n  // call is a core constant expression whether or not the constructor is\n  // constexpr.\n  if (!CD->isConstexpr() && !IsValueInitialization) {\n    if (Info.getLangOpts().CPlusPlus11) {\n    } else {\n      Info.CCEDiag(Loc, diag::note_invalid_subexpr_in_const_expr);"},{q,5583,"/// CheckConstexprFunction - Check that a function can be called in a constant\n/// expression.\nstatic bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body) {\n  // Bail out if the function declaration itself is invalid.  We will\n  // have produced a relevant diagnostic while parsing it, so just\n  // note the problematic sub-expression.\n  if (Declaration->isInvalidDecl()) {\n    Info.FFDiag(CallLoc, diag::note_invalid_subexpr_in_const_expr);"},{q,5595,"/// CheckConstexprFunction - Check that a function can be called in a constant\n/// expression.\nstatic bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body) {\n  if (Definition && Definition->isInvalidDecl()) {\n    Info.FFDiag(CallLoc, diag::note_invalid_subexpr_in_const_expr);"},{q,5626,"/// CheckConstexprFunction - Check that a function can be called in a constant\n/// expression.\nstatic bool CheckConstexprFunction(EvalInfo &Info, SourceLocation CallLoc, const FunctionDecl *Declaration, const FunctionDecl *Definition, const Stmt *Body) {\n  if (Info.getLangOpts().CPlusPlus11) {\n  } else {\n    Info.FFDiag(CallLoc, diag::note_invalid_subexpr_in_const_expr);"},{q,7481,"template <class Derived> class ExprEvaluatorBase : public ConstStmtVisitor<Derived, bool> {\n  bool Error(const Expr *E) { return Error(E, diag::note_invalid_subexpr_in_const_expr); }"},{q,9304,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwmemchr:\n    if (Info.getLangOpts().CPlusPlus11)\n    else\n      Info.CCEDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{q,9412,"bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwmemmove:\n    if (Info.getLangOpts().CPlusPlus11)\n    else\n      Info.CCEDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{q,11242,"static bool EvaluateInteger(const Expr *E, APSInt &Result, EvalInfo &Info) {\n  if (!Val.isInt()) {\n    Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{q,12116,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BI__builtin_constant_p: {\n    Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{q,12289,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwcslen:\n    // A call to strlen is not a constant expression.\n    if (Info.getLangOpts().CPlusPlus11)\n    else\n      Info.CCEDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{q,12314,"bool IntExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E, unsigned BuiltinOp) {\n  case Builtin::BIwmemcmp:\n    // A call to strlen is not a constant expression.\n    if (Info.getLangOpts().CPlusPlus11)\n    else\n      Info.CCEDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{q,12937,"template <class SuccessCB, class AfterCB> static bool EvaluateComparisonBinaryOperator(EvalInfo &Info, const BinaryOperator *E, SuccessCB &&Success, AfterCB &&DoAfter) {\n  auto Error = [&](const Expr *E) {\n    Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{q,15148,"static bool Evaluate(APValue &Result, EvalInfo &Info, const Expr *E) {\n  if (E->isGLValue() || T->isFunctionType()) {\n  } else if (T->isVectorType()) {\n  } else if (T->isIntegralOrEnumerationType()) {\n  } else if (T->hasPointerRepresentation()) {\n  } else if (T->isRealFloatingType()) {\n  } else if (T->isAnyComplexType()) {\n  } else if (T->isFixedPointType()) {\n  } else if (T->isMemberPointerType()) {\n  } else if (T->isArrayType()) {\n  } else if (T->isRecordType()) {\n  } else if (T->isVoidType()) {\n  } else if (T->isAtomicType()) {\n  } else if (Info.getLangOpts().CPlusPlus11) {\n  } else {\n    Info.FFDiag(E, diag::note_invalid_subexpr_in_const_expr);"},{A,337,"bool CheckCallable(InterpState &S, CodePtr OpPC, const Function *F) {\n  if (!F->isConstexpr()) {\n    if (S.getLangOpts().CPlusPlus11) {\n    } else {\n      S.FFDiag(Loc, diag::note_invalid_subexpr_in_const_expr);"},{u,14202,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    if (!getLangOpts().CPlusPlus11) {\n      // Compute and cache the constant value, and remember that we have a\n      // constant initializer.\n      if (HasConstInit) {\n      } else if (CacheCulprit) {\n        Notes.emplace_back(CacheCulprit->getExprLoc(), PDiag(diag::note_invalid_subexpr_in_const_expr));"},{u,14217,"void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {\n  // Check whether the initializer is sufficiently constant.\n  if (getLangOpts().CPlusPlus && !type->isDependentType() && Init && !Init->isValueDependent() && (GlobalStorage || var->isConstexpr() || var->mightBeUsableInConstantExpressions(Context))) {\n    if (HasConstInit) {\n    } else if (var->isConstexpr()) {\n      if (Notes.size() == 1 && Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) {"},{s,17998,"ExprResult Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result, VerifyICEDiagnoser &Diagnoser, AllowFoldKind CanFold) {\n  if (Notes.size() == 1 && Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) {"},{X,5986,"/// EvaluateConvertedConstantExpression - Evaluate an Expression\n/// That is a converted constant expression\n/// (which was built with BuildConvertedConstantExpression)\nstatic ExprResult EvaluateConvertedConstantExpression(Sema &S, Expr *E, QualType T, APValue &Value, Sema::CCEKind CCE, bool RequireInt, const APValue &PreNarrowingValue) {\n  if (Notes.size() == 1 && Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) {"},{v,6573,"/// Determine whether the given template argument is a null pointer\n/// value of the appropriate type.\nstatic NullPointerValueKind isNullPointerValueTemplateArgument(Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity = nullptr) {\n  if (!Arg->EvaluateAsRValue(EvalResult, S.Context) || EvalResult.HasSideEffects) {\n    if (Notes.size() == 1 && Notes[0].second.getDiagID() == diag::note_invalid_subexpr_in_const_expr) {"}},
[o]={
["clang/test/CXX/temp/temp.param/p8-cxx20.cpp"]={"clang/test/CXX/temp/temp.param/p8-cxx20.cpp:38:9: note: subexpression not valid in a constant expression"}
}
},
},
["note_invalid_ucn_name_candidate"]={
["note_invalid_ucn_name_candidate"]={
[f]="did you mean A (\'B\' U+C)?",
[b]="did you mean A (\'B\' U+C)?",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="did you mean %0 (\'%2\' U+%1)?",
[h]="did you mean %0 (\'%2\' U+%1)?",
[g]=b,
[j]=i,
[e]="did you mean (.*?) \\(\'(.*?)\' U\\+(.*?)\\)\\?",
[k]="did you mean (.*?) \\(\'(.*?)\' U\\+(.*?)\\)\\?",
[d]=a,
[l]=a,
[c]=R,
[c]=bb,
[m]={db,1625925174,eb},
[m]={fb,1625925174,nb},
[n]={{"clang/lib/Lex/LiteralSupport.cpp",574,"static void DiagnoseInvalidUnicodeCharacterName(DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc Loc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, llvm::StringRef Name) {\n  for (const auto &Match : Matches) {\n    Diag(Diags, Features, Loc, TokBegin, TokRangeBegin, TokRangeEnd,\n        diag::note_invalid_ucn_name_candidate)"}}
[n]={{"clang/lib/Lex/LiteralSupport.cpp",574,"static void DiagnoseInvalidUnicodeCharacterName(DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc Loc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, llvm::StringRef Name) {\n  for (const auto &Match : Matches) {\n    Diag(Diags, Features, Loc, TokBegin, TokRangeBegin, TokRangeEnd,\n        diag::note_invalid_ucn_name_candidate)"}},
[o]={
["clang/test/CXX/drs/dr26xx.cpp"]={"clang/test/CXX/drs/dr26xx.cpp:89:25: note: did you mean OX (\'🐂\' U+1F402)?","clang/test/CXX/drs/dr26xx.cpp:89:25: note: did you mean ANT (\'🐜\' U+1F41C)?","clang/test/CXX/drs/dr26xx.cpp:89:25: note: did you mean ARC (\'⌒\' U+2312)?","clang/test/CXX/drs/dr26xx.cpp:89:25: note: did you mean AXE (\'🪓\' U+1FA93)?","clang/test/CXX/drs/dr26xx.cpp:89:25: note: did you mean BAT (\'🦇\' U+1F987)?"}
}
},
},
["note_invalid_ucn_name_loose_matching"]={
["note_invalid_ucn_name_loose_matching"]={
[f]="characters names in Unicode escape sequences are sensitive to case and whitespaces",
[b]="characters names in Unicode escape sequences are sensitive to case and whitespaces",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="characters names in Unicode escape sequences are sensitive to case and whitespaces",
[h]="characters names in Unicode escape sequences are sensitive to case and whitespaces",
[g]=b,
[j]=i,
[e]="characters names in Unicode escape sequences are sensitive to case and whitespaces",
[k]="characters names in Unicode escape sequences are sensitive to case and whitespaces",
[d]=a,
[l]=a,
[c]=R,
[c]=bb,
[m]={db,1625925174,eb},
[m]={fb,1625925174,nb},
[n]={{"clang/lib/Lex/Lexer.cpp",3428,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (!Match) {\n    if (Diagnose) {\n      if (LooseMatch) {\n        Diag(StartName, diag::note_invalid_ucn_name_loose_matching) << FixItHint::CreateReplacement(makeCharRange(*this, StartName, CurPtr - CharSize), LooseMatch->Name);"},{"clang/lib/Lex/LiteralSupport.cpp",544,"static void DiagnoseInvalidUnicodeCharacterName(DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc Loc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, llvm::StringRef Name) {\n  if (Res) {\n    Diag(Diags, Features, Loc, TokBegin, TokRangeBegin, TokRangeEnd, diag::note_invalid_ucn_name_loose_matching) << FixItHint::CreateReplacement(MakeCharSourceRange(Features, Loc, TokBegin, TokRangeBegin, TokRangeEnd), Res->Name);"}}
[n]={{"clang/lib/Lex/Lexer.cpp",3428,"std::optional<uint32_t> Lexer::tryReadNamedUCN(const char *&StartPtr, const char *SlashLoc, Token *Result) {\n  if (!Match) {\n    if (Diagnose) {\n      if (LooseMatch) {\n        Diag(StartName, diag::note_invalid_ucn_name_loose_matching) << FixItHint::CreateReplacement(makeCharRange(*this, StartName, CurPtr - CharSize), LooseMatch->Name);"},{"clang/lib/Lex/LiteralSupport.cpp",544,"static void DiagnoseInvalidUnicodeCharacterName(DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc Loc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, llvm::StringRef Name) {\n  if (Res) {\n    Diag(Diags, Features, Loc, TokBegin, TokRangeBegin, TokRangeEnd, diag::note_invalid_ucn_name_loose_matching) << FixItHint::CreateReplacement(MakeCharSourceRange(Features, Loc, TokBegin, TokRangeBegin, TokRangeEnd), Res->Name);"}},
[o]={
["clang/test/Lexer/unicode.c"]={"clang/test/Lexer/unicode.c:45:16: note: characters names in Unicode escape sequences are sensitive to case and whitespaces"}
}
},
},
["note_it_delegates_to"]={
["note_it_delegates_to"]={
[f]="it delegates to",
[b]="it delegates to",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="it delegates to",
[h]="it delegates to",
[g]=b,
[j]=i,
[e]="it delegates to",
[k]="it delegates to",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"6118d6642b8f",1304488644,"Implement a better version of delegating constructor cycle detection."},
[m]={"6118d6642b8f",1304488644,"Implement a better version of delegating constructor cycle detection."},
[n]={{q,18544,"static void DelegatingCycleHelper(CXXConstructorDecl *Ctor, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Valid, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Invalid, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Current, Sema &S) {\n  // We know that beyond here, we aren\'t chaining into a cycle.\n  if (!Target || !Target->isDelegatingConstructor() || Target->isInvalidDecl() || Valid.count(TCanonical)) {\n  } else if (TCanonical == Canonical || Invalid.count(TCanonical) || Current.count(TCanonical)) {\n    // If we haven\'t diagnosed this cycle yet, do so now.\n    if (!Invalid.count(TCanonical)) {\n      // Don\'t add a note for a function delegating directly to itself.\n      if (TCanonical != Canonical)\n        S.Diag(Target->getLocation(), diag::note_it_delegates_to);"}}
[n]={{r,18544,"static void DelegatingCycleHelper(CXXConstructorDecl *Ctor, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Valid, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Invalid, llvm::SmallPtrSet<CXXConstructorDecl *, 4> &Current, Sema &S) {\n  // We know that beyond here, we aren\'t chaining into a cycle.\n  if (!Target || !Target->isDelegatingConstructor() || Target->isInvalidDecl() || Valid.count(TCanonical)) {\n  } else if (TCanonical == Canonical || Invalid.count(TCanonical) || Current.count(TCanonical)) {\n    // If we haven\'t diagnosed this cycle yet, do so now.\n    if (!Invalid.count(TCanonical)) {\n      // Don\'t add a note for a function delegating directly to itself.\n      if (TCanonical != Canonical)\n        S.Diag(Target->getLocation(), diag::note_it_delegates_to);"}},
[o]={
["clang/test/SemaCXX/cxx0x-delegating-ctors.cpp"]={"clang/test/SemaCXX/cxx0x-delegating-ctors.cpp:29:6: note: it delegates to"}
}
},
},
["note_ivar_decl"]={
["note_ivar_decl"]={
[f]="instance variable is declared here",
[b]="instance variable is declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="instance variable is declared here",
[h]="instance variable is declared here",
[g]=b,
[j]=i,
[e]="instance variable is declared here",
[k]="instance variable is declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5921b83f5413",1269370942,"Improve diagnostic for @property/ivar type mismatch by including the types of the"},
[m]={"5921b83f5413",1269370942,"Improve diagnostic for @property/ivar type mismatch by including the types of the"},
[n]={{r,636,"static void DiagnoseDirectIsaAccess(Sema &S, const ObjCIvarRefExpr *OIRE, SourceLocation AssignLoc, const Expr *RHS) {\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>())\n    if (ObjCInterfaceDecl *IDecl = OTy->getInterface()) {\n      if (!ClassDeclared->getSuperClass() && (*ClassDeclared->ivar_begin()) == IV) {\n        S.Diag(IV->getLocation(), diag::note_ivar_decl);"},{N,1290,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (AtLoc.isInvalid()) {\n      if (originalIvar) {\n        Diag(originalIvar->getLocation(), diag::note_ivar_decl);"},{N,1379,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      if (!compat) {\n        Diag(Ivar->getLocation(), diag::note_ivar_decl);"},{N,1394,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      if (!compat) {\n      } else {\n        if (lhsType != rhsType && lhsType->isArithmeticType()) {\n          Diag(Ivar->getLocation(), diag::note_ivar_decl);"},{N,1403,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      // __weak is explicit. So it works on Canonical type.\n      if ((PropType.isObjCGCWeak() && !IvarType.isObjCGCWeak() && getLangOpts().getGC() != LangOptions::NonGC)) {\n        Diag(Ivar->getLocation(), diag::note_ivar_decl);"}}
[n]={{s,636,"static void DiagnoseDirectIsaAccess(Sema &S, const ObjCIvarRefExpr *OIRE, SourceLocation AssignLoc, const Expr *RHS) {\n  if (const ObjCObjectType *OTy = BaseType->getAs<ObjCObjectType>())\n    if (ObjCInterfaceDecl *IDecl = OTy->getInterface()) {\n      if (!ClassDeclared->getSuperClass() && (*ClassDeclared->ivar_begin()) == IV) {\n        S.Diag(IV->getLocation(), diag::note_ivar_decl);"},{V,1290,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    if (AtLoc.isInvalid()) {\n      if (originalIvar) {\n        Diag(originalIvar->getLocation(), diag::note_ivar_decl);"},{V,1379,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      if (!compat) {\n        Diag(Ivar->getLocation(), diag::note_ivar_decl);"},{V,1394,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      if (!compat) {\n      } else {\n        if (lhsType != rhsType && lhsType->isArithmeticType()) {\n          Diag(Ivar->getLocation(), diag::note_ivar_decl);"},{V,1403,"/// ActOnPropertyImplDecl - This routine performs semantic checks and\n/// builds the AST node for a property implementation declaration; declared\n/// as \\@synthesize or \\@dynamic.\n///\nDecl *Sema::ActOnPropertyImplDecl(Scope *S, SourceLocation AtLoc, SourceLocation PropertyLoc, bool Synthesize, IdentifierInfo *PropertyId, IdentifierInfo *PropertyIvar, SourceLocation PropertyIvarLoc, ObjCPropertyQueryKind QueryKind) {\n  // Check that we have a valid, previously declared ivar for @synthesize\n  if (Synthesize) {\n    // Check that type of property and its ivar are type compatible.\n    if (!Context.hasSameType(PropertyIvarType, IvarType)) {\n      // __weak is explicit. So it works on Canonical type.\n      if ((PropType.isObjCGCWeak() && !IvarType.isObjCGCWeak() && getLangOpts().getGC() != LangOptions::NonGC)) {\n        Diag(Ivar->getLocation(), diag::note_ivar_decl);"}},
[o]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:5:6: note: instance variable is declared here"}
}
},
},
["note_lambda_capture_initializer"]={
["note_lambda_capture_initializer"]={
[f]="...captured......",
[b]="...captured......",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{implicitly |}2captured%select{| by reference}3%select{%select{ due to use|}2 here| via initialization of lambda capture %0}1",
[h]="%select{implicitly |}2captured%select{| by reference}3%select{%select{ due to use|}2 here| via initialization of lambda capture %0}1",
[g]=b,
[j]=i,
[e]="(?:implicitly |)captured(?:| by reference)(?:(?: due to use|) here| via initialization of lambda capture (.*?))",
[k]="(?:implicitly |)captured(?:| by reference)(?:(?: due to use|) here| via initialization of lambda capture (.*?))",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={T,1590001902,S},
[m]={pb,1590001902,qb},
[n]={{D,8315,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    for (unsigned I = 0; I != Path.size(); ++I) {\n      case IndirectLocalPathEntry::LambdaCaptureInit:\n        Diag(Elem.Capture->getLocation(), diag::note_lambda_capture_initializer) << VD << VD->isInitCapture() << Elem.Capture->isExplicit() << (Elem.Capture->getCaptureKind() == LCK_ByRef) << VD << nextPathEntryRange(Path, I + 1, L);"}}
[n]={{K,8315,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    for (unsigned I = 0; I != Path.size(); ++I) {\n      case IndirectLocalPathEntry::LambdaCaptureInit:\n        Diag(Elem.Capture->getLocation(), diag::note_lambda_capture_initializer) << VD << VD->isInitCapture() << Elem.Capture->isExplicit() << (Elem.Capture->getCaptureKind() == LCK_ByRef) << VD << nextPathEntryRange(Path, I + 1, L);"}},
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p11-1y.cpp:60:17: note: captured by reference via initialization of lambda capture \'c\'"}
}
},
},
["note_lambda_decl"]={
["note_lambda_decl"]={
[f]="lambda expression begins here",
[b]="lambda expression begins here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="lambda expression begins here",
[h]="lambda expression begins here",
[g]=b,
[j]=i,
[e]="lambda expression begins here",
[k]="lambda expression begins here",
[d]=a,
[l]=a,
[c]=ac,
[c]=Cc,
[m]={"24af85047046",1328309257,"Implement implicit capture for lambda expressions."},
[m]={"24af85047046",1328309257,"Implement implicit capture for lambda expressions."},
[n]={{q,1446,"static bool checkMemberDecomposition(Sema &S, ArrayRef<BindingDecl *> Bindings, ValueDecl *Src, QualType DecompType, const CXXRecordDecl *OrigRD) {\n  for (auto *FD : RD->fields()) {\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(RD->getLocation(), diag::note_lambda_decl);"},{q,9599,"/// Determine whether a defaulted special member function should be defined as\n/// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11,\n/// C++11 [class.copy]p23, and C++11 [class.dtor]p5.\nbool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, InheritedConstructorInfo *ICI, bool Diagnose) {\n  // C++11 [expr.lambda.prim]p19:\n  //  The closure type associated with a lambda-expression has a\n  //  deleted (8.4.3) default constructor and a deleted copy\n  //  assignment operator.\n  // C++2a adds back these operators if the lambda has no lambda-capture.\n  if (RD->isLambda() && !RD->lambdaIsDefaultConstructibleAndAssignable() && (CSM == CXXDefaultConstructor || CSM == CXXCopyAssignment)) {\n    if (Diagnose)\n      Diag(RD->getLocation(), diag::note_lambda_decl);"},{r,19745,"bool Sema::tryCaptureVariable(ValueDecl *Var, SourceLocation ExprLoc, TryCaptureKind Kind, SourceLocation EllipsisLoc, bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const unsigned *const FunctionScopeIndexToStopAt) {\n  do {\n    // If we are instantiating a generic lambda call operator body,\n    // we do not want to capture new variables.  What was captured\n    // during either a lambdas transformation or initial parsing\n    // should be used.\n    if (isGenericLambdaCallOperatorSpecialization(DC)) {\n      if (BuildAndDiagnose) {\n        if (LSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_None) {\n          Diag(LSI->Lambda->getBeginLoc(), diag::note_lambda_decl);"},{r,20814,"bool Sema::tryCaptureVariable(ValueDecl *Var, SourceLocation ExprLoc, TryCaptureKind Kind, SourceLocation EllipsisLoc, bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const unsigned *const FunctionScopeIndexToStopAt) {\n  do {\n    if (CSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_None && !Explicit) {\n      // No capture-default, and this is not an explicit capture\n      // so cannot capture this variable.\n      if (BuildAndDiagnose) {\n        if (LSI->Lambda) {\n          Diag(LSI->Lambda->getBeginLoc(), diag::note_lambda_decl);"}}
[n]={{r,1446,"static bool checkMemberDecomposition(Sema &S, ArrayRef<BindingDecl *> Bindings, ValueDecl *Src, QualType DecompType, const CXXRecordDecl *OrigRD) {\n  for (auto *FD : RD->fields()) {\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(RD->getLocation(), diag::note_lambda_decl);"},{r,9599,"/// Determine whether a defaulted special member function should be defined as\n/// deleted, as specified in C++11 [class.ctor]p5, C++11 [class.copy]p11,\n/// C++11 [class.copy]p23, and C++11 [class.dtor]p5.\nbool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM, InheritedConstructorInfo *ICI, bool Diagnose) {\n  // C++11 [expr.lambda.prim]p19:\n  //  The closure type associated with a lambda-expression has a\n  //  deleted (8.4.3) default constructor and a deleted copy\n  //  assignment operator.\n  // C++2a adds back these operators if the lambda has no lambda-capture.\n  if (RD->isLambda() && !RD->lambdaIsDefaultConstructibleAndAssignable() && (CSM == CXXDefaultConstructor || CSM == CXXCopyAssignment)) {\n    if (Diagnose)\n      Diag(RD->getLocation(), diag::note_lambda_decl);"},{s,19745,"bool Sema::tryCaptureVariable(ValueDecl *Var, SourceLocation ExprLoc, TryCaptureKind Kind, SourceLocation EllipsisLoc, bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const unsigned *const FunctionScopeIndexToStopAt) {\n  do {\n    // If we are instantiating a generic lambda call operator body,\n    // we do not want to capture new variables.  What was captured\n    // during either a lambdas transformation or initial parsing\n    // should be used.\n    if (isGenericLambdaCallOperatorSpecialization(DC)) {\n      if (BuildAndDiagnose) {\n        if (LSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_None) {\n          Diag(LSI->Lambda->getBeginLoc(), diag::note_lambda_decl);"},{s,20814,"bool Sema::tryCaptureVariable(ValueDecl *Var, SourceLocation ExprLoc, TryCaptureKind Kind, SourceLocation EllipsisLoc, bool BuildAndDiagnose, QualType &CaptureType, QualType &DeclRefType, const unsigned *const FunctionScopeIndexToStopAt) {\n  do {\n    if (CSI->ImpCaptureStyle == CapturingScopeInfo::ImpCap_None && !Explicit) {\n      // No capture-default, and this is not an explicit capture\n      // so cannot capture this variable.\n      if (BuildAndDiagnose) {\n        if (LSI->Lambda) {\n          Diag(LSI->Lambda->getBeginLoc(), diag::note_lambda_decl);"}},
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:10:18: note: lambda expression begins here","clang/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp:10:18: note: lambda expression begins here"}
}
},
},
["note_lambda_default_capture_fixit"]={
["note_lambda_default_capture_fixit"]={
[f]="default capture by ...",
[b]="default capture by ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="default capture by %select{value|reference}0",
[h]="default capture by %select{value|reference}0",
[g]=b,
[j]=i,
[e]="default capture by (?:value|reference)",
[k]="default capture by (?:value|reference)",
[d]=a,
[l]=a,
[c]=ac,
[c]=Cc,
[m]={T,1590001902,S},
[m]={pb,1590001902,qb},
[n]={{r,19534,"/// Create up to 4 fix-its for explicit reference and value capture of \\p Var or\n/// default capture. Fixes may be omitted if they aren\'t allowed by the\n/// standard, for example we can\'t emit a default copy capture fix-it if we\n/// already explicitly copy capture capture another variable.\nstatic void buildLambdaCaptureFixit(Sema &Sema, LambdaScopeInfo *LSI, ValueDecl *Var) {\n  if (ShouldOfferCopyFix) {\n    // We can\'t use default capture by copy if any captures already specified\n    // capture by copy.\n    if (CanDefaultCopyCapture && llvm::none_of(LSI->Captures, [](Capture &C) { return !C.isThisCapture() && !C.isInitCapture() && C.isCopyCapture(); })) {\n      Sema.Diag(DefaultInsertLoc, diag::note_lambda_default_capture_fixit) << /*value*/ 0 << FixItHint::CreateInsertion(DefaultInsertLoc, FixBuffer);"},{r,19665,"/// Create up to 4 fix-its for explicit reference and value capture of \\p Var or\n/// default capture. Fixes may be omitted if they aren\'t allowed by the\n/// standard, for example we can\'t emit a default copy capture fix-it if we\n/// already explicitly copy capture capture another variable.\nstatic void buildLambdaCaptureFixit(Sema &Sema, LambdaScopeInfo *LSI, ValueDecl *Var) {\n  // We can\'t use default capture by reference if any captures already specified\n  // capture by reference.\n  if (llvm::none_of(LSI->Captures, [](Capture &C) { return !C.isInitCapture() && C.isReferenceCapture() && !C.isThisCapture(); })) {\n    Sema.Diag(DefaultInsertLoc, diag::note_lambda_default_capture_fixit) << /*reference*/ 1 << FixItHint::CreateInsertion(DefaultInsertLoc, FixBuffer);"}}
[n]={{s,19534,"/// Create up to 4 fix-its for explicit reference and value capture of \\p Var or\n/// default capture. Fixes may be omitted if they aren\'t allowed by the\n/// standard, for example we can\'t emit a default copy capture fix-it if we\n/// already explicitly copy capture capture another variable.\nstatic void buildLambdaCaptureFixit(Sema &Sema, LambdaScopeInfo *LSI, ValueDecl *Var) {\n  if (ShouldOfferCopyFix) {\n    // We can\'t use default capture by copy if any captures already specified\n    // capture by copy.\n    if (CanDefaultCopyCapture && llvm::none_of(LSI->Captures, [](Capture &C) { return !C.isThisCapture() && !C.isInitCapture() && C.isCopyCapture(); })) {\n      Sema.Diag(DefaultInsertLoc, diag::note_lambda_default_capture_fixit) << /*value*/ 0 << FixItHint::CreateInsertion(DefaultInsertLoc, FixBuffer);"},{s,19665,"/// Create up to 4 fix-its for explicit reference and value capture of \\p Var or\n/// default capture. Fixes may be omitted if they aren\'t allowed by the\n/// standard, for example we can\'t emit a default copy capture fix-it if we\n/// already explicitly copy capture capture another variable.\nstatic void buildLambdaCaptureFixit(Sema &Sema, LambdaScopeInfo *LSI, ValueDecl *Var) {\n  // We can\'t use default capture by reference if any captures already specified\n  // capture by reference.\n  if (llvm::none_of(LSI->Captures, [](Capture &C) { return !C.isInitCapture() && C.isReferenceCapture() && !C.isThisCapture(); })) {\n    Sema.Diag(DefaultInsertLoc, diag::note_lambda_default_capture_fixit) << /*reference*/ 1 << FixItHint::CreateInsertion(DefaultInsertLoc, FixBuffer);"}},
[o]={
["clang/test/SemaCXX/cxx20-decomposition.cpp"]={"clang/test/SemaCXX/cxx20-decomposition.cpp:177:38: note: default capture by value","clang/test/SemaCXX/cxx20-decomposition.cpp:177:38: note: default capture by reference","clang/test/SemaCXX/cxx20-decomposition.cpp:177:38: note: default capture by value","clang/test/SemaCXX/cxx20-decomposition.cpp:177:38: note: default capture by reference","clang/test/SemaCXX/cxx20-decomposition.cpp:177:38: note: default capture by value","clang/test/SemaCXX/cxx20-decomposition.cpp:177:38: note: default capture by reference"}
}
},
},
["note_lambda_substitution_here"]={
["note_lambda_substitution_here"]={
[f]="while substituting into a lambda expression here",
[b]="while substituting into a lambda expression here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="while substituting into a lambda expression here",
[h]="while substituting into a lambda expression here",
[g]=b,
[j]=i,
[e]="while substituting into a lambda expression here",
[k]="while substituting into a lambda expression here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={db,1625925174,eb},
[m]={fb,1625925174,nb},
[n]={{z,1019,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::LambdaExpressionSubstitution:\n      Diags.Report(Active->PointOfInstantiation, diag::note_lambda_substitution_here);"}}
[n]={{G,1019,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::LambdaExpressionSubstitution:\n      Diags.Report(Active->PointOfInstantiation, diag::note_lambda_substitution_here);"}},
[o]={
["clang/test/SemaCXX/lambda-pack-expansion.cpp"]={"clang/test/SemaCXX/lambda-pack-expansion.cpp:10:3: note: while substituting into a lambda expression here"}
}
},
},
["note_lambda_this_capture_fixit"]={
["note_lambda_this_capture_fixit"]={
[f]="explicitly capture \'this\'",
[b]="explicitly capture \'this\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="explicitly capture \'this\'",
[h]="explicitly capture \'this\'",
[g]=b,
[j]=i,
[e]="explicitly capture \'this\'",
[k]="explicitly capture \'this\'",
[d]=a,
[l]=a,
[c]=ac,
[c]=Cc,
[m]={T,1590001902,S},
[m]={pb,1590001902,qb},
[n]={{K,1276,"static void buildLambdaThisCaptureFixit(Sema &Sema, LambdaScopeInfo *LSI) {\n  Sema.Diag(DiagLoc, diag::note_lambda_this_capture_fixit) << FixItHint::CreateInsertion(DiagLoc, LSI->NumExplicitCaptures > 0 ? \", this\" : \"this\");"}}
[n]={{S,1276,"static void buildLambdaThisCaptureFixit(Sema &Sema, LambdaScopeInfo *LSI) {\n  Sema.Diag(DiagLoc, diag::note_lambda_this_capture_fixit) << FixItHint::CreateInsertion(DiagLoc, LSI->NumExplicitCaptures > 0 ? \", this\" : \"this\");"}},
[o]={
["clang/test/SemaCXX/lambda-expressions.cpp"]={"clang/test/SemaCXX/lambda-expressions.cpp:15:8: note: explicitly capture \'this\'","clang/test/SemaCXX/lambda-expressions.cpp:16:24: note: explicitly capture \'this\'","clang/test/SemaCXX/lambda-expressions.cpp:23:8: note: explicitly capture \'this\'","clang/test/SemaCXX/lambda-expressions.cpp:25:8: note: explicitly capture \'this\'","clang/test/SemaCXX/lambda-expressions.cpp:380:14: note: explicitly capture \'this\'"}
}
},
},
["note_lambda_to_block_conv"]={
["note_lambda_to_block_conv"]={
[f]="implicit capture of lambda object due to conversion to block pointer here",
[b]="implicit capture of lambda object due to conversion to block pointer here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="implicit capture of lambda object due to conversion to block pointer here",
[h]="implicit capture of lambda object due to conversion to block pointer here",
[g]=b,
[j]=i,
[e]="implicit capture of lambda object due to conversion to block pointer here",
[k]="implicit capture of lambda object due to conversion to block pointer here",
[d]=a,
[l]=a,
[c]=ac,
[c]=Cc,
[m]={"d3b672c38545",1329354376,"Implicitly define a lambda\'s conversion functions (to function"},
[m]={"d3b672c38545",1329354376,"Implicitly define a lambda\'s conversion functions (to function"},
[n]={{q,15692,"void Sema::DefineImplicitLambdaToBlockPointerConversion(SourceLocation CurrentLocation, CXXConversionDecl *Conv) {\n  if (BuildBlock.isInvalid()) {\n    Diag(CurrentLocation, diag::note_lambda_to_block_conv);"},{q,15701,"void Sema::DefineImplicitLambdaToBlockPointerConversion(SourceLocation CurrentLocation, CXXConversionDecl *Conv) {\n  if (Return.isInvalid()) {\n    Diag(CurrentLocation, diag::note_lambda_to_block_conv);"},{K,8078,"ExprResult Sema::BuildCXXMemberCallExpr(Expr *E, NamedDecl *FoundDecl, CXXConversionDecl *Method, bool HadMultipleCandidates) {\n  if (Method->getParent()->isLambda() && Method->getConversionType()->isBlockPointerType()) {\n    if (isa<LambdaExpr>(SubE)) {\n      // FIXME: This note should be produced by a CodeSynthesisContext.\n      if (BlockExp.isInvalid())\n        Diag(Exp.get()->getExprLoc(), diag::note_lambda_to_block_conv);"}}
[n]={{r,15692,"void Sema::DefineImplicitLambdaToBlockPointerConversion(SourceLocation CurrentLocation, CXXConversionDecl *Conv) {\n  if (BuildBlock.isInvalid()) {\n    Diag(CurrentLocation, diag::note_lambda_to_block_conv);"},{r,15701,"void Sema::DefineImplicitLambdaToBlockPointerConversion(SourceLocation CurrentLocation, CXXConversionDecl *Conv) {\n  if (Return.isInvalid()) {\n    Diag(CurrentLocation, diag::note_lambda_to_block_conv);"},{S,8078,"ExprResult Sema::BuildCXXMemberCallExpr(Expr *E, NamedDecl *FoundDecl, CXXConversionDecl *Method, bool HadMultipleCandidates) {\n  if (Method->getParent()->isLambda() && Method->getConversionType()->isBlockPointerType()) {\n    if (isa<LambdaExpr>(SubE)) {\n      // FIXME: This note should be produced by a CodeSynthesisContext.\n      if (BlockExp.isInvalid())\n        Diag(Exp.get()->getExprLoc(), diag::note_lambda_to_block_conv);"}}
},
},
["note_lambda_variable_capture_fixit"]={
["note_lambda_variable_capture_fixit"]={
[f]="capture A by ...",
[b]="capture A by ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="capture %0 by %select{value|reference}1",
[h]="capture %0 by %select{value|reference}1",
[g]=b,
[j]=i,
[e]="capture (.*?) by (?:value|reference)",
[k]="capture (.*?) by (?:value|reference)",
[d]=a,
[l]=a,
[c]=ac,
[c]=Cc,
[m]={T,1590001902,S},
[m]={pb,1590001902,qb},
[n]={{r,19486,"/// Create up to 4 fix-its for explicit reference and value capture of \\p Var or\n/// default capture. Fixes may be omitted if they aren\'t allowed by the\n/// standard, for example we can\'t emit a default copy capture fix-it if we\n/// already explicitly copy capture capture another variable.\nstatic void buildLambdaCaptureFixit(Sema &Sema, LambdaScopeInfo *LSI, ValueDecl *Var) {\n  if (Var->getDeclName().isIdentifier() && !Var->getName().empty()) {\n    if (ShouldOfferCopyFix) {\n      Sema.Diag(VarInsertLoc, diag::note_lambda_variable_capture_fixit) << Var << /*value*/ 0 << FixItHint::CreateInsertion(VarInsertLoc, FixBuffer);"},{r,19521,"/// Create up to 4 fix-its for explicit reference and value capture of \\p Var or\n/// default capture. Fixes may be omitted if they aren\'t allowed by the\n/// standard, for example we can\'t emit a default copy capture fix-it if we\n/// already explicitly copy capture capture another variable.\nstatic void buildLambdaCaptureFixit(Sema &Sema, LambdaScopeInfo *LSI, ValueDecl *Var) {\n  if (Var->getDeclName().isIdentifier() && !Var->getName().empty()) {\n    Sema.Diag(VarInsertLoc, diag::note_lambda_variable_capture_fixit) << Var << /*reference*/ 1 << FixItHint::CreateInsertion(VarInsertLoc, FixBuffer);"}}
[n]={{s,19486,"/// Create up to 4 fix-its for explicit reference and value capture of \\p Var or\n/// default capture. Fixes may be omitted if they aren\'t allowed by the\n/// standard, for example we can\'t emit a default copy capture fix-it if we\n/// already explicitly copy capture capture another variable.\nstatic void buildLambdaCaptureFixit(Sema &Sema, LambdaScopeInfo *LSI, ValueDecl *Var) {\n  if (Var->getDeclName().isIdentifier() && !Var->getName().empty()) {\n    if (ShouldOfferCopyFix) {\n      Sema.Diag(VarInsertLoc, diag::note_lambda_variable_capture_fixit) << Var << /*value*/ 0 << FixItHint::CreateInsertion(VarInsertLoc, FixBuffer);"},{s,19521,"/// Create up to 4 fix-its for explicit reference and value capture of \\p Var or\n/// default capture. Fixes may be omitted if they aren\'t allowed by the\n/// standard, for example we can\'t emit a default copy capture fix-it if we\n/// already explicitly copy capture capture another variable.\nstatic void buildLambdaCaptureFixit(Sema &Sema, LambdaScopeInfo *LSI, ValueDecl *Var) {\n  if (Var->getDeclName().isIdentifier() && !Var->getName().empty()) {\n    Sema.Diag(VarInsertLoc, diag::note_lambda_variable_capture_fixit) << Var << /*reference*/ 1 << FixItHint::CreateInsertion(VarInsertLoc, FixBuffer);"}},
[o]={
["clang/test/SemaCXX/cxx20-decomposition.cpp"]={"clang/test/SemaCXX/cxx20-decomposition.cpp:172:14: note: capture \'b\' by value","clang/test/SemaCXX/cxx20-decomposition.cpp:172:14: note: capture \'b\' by reference","clang/test/SemaCXX/cxx20-decomposition.cpp:172:11: note: capture \'b\' by value","clang/test/SemaCXX/cxx20-decomposition.cpp:172:11: note: capture \'b\' by reference","clang/test/SemaCXX/cxx20-decomposition.cpp:177:38: note: capture \'a\' by value","clang/test/SemaCXX/cxx20-decomposition.cpp:177:38: note: capture \'a\' by reference","clang/test/SemaCXX/cxx20-decomposition.cpp:177:38: note: capture \'a\' by value","clang/test/SemaCXX/cxx20-decomposition.cpp:177:38: note: capture \'a\' by reference","clang/test/SemaCXX/cxx20-decomposition.cpp:177:37: note: capture \'a\' by value","clang/test/SemaCXX/cxx20-decomposition.cpp:177:37: note: capture \'a\' by reference"}
}
},
},
["note_lifetime_extending_member_declared_here"]={
["note_lifetime_extending_member_declared_here"]={
[f]="... declared here",
[b]="... declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{%select{reference|\'std::initializer_list\'}0 member|member with %select{reference|\'std::initializer_list\'}0 subobject}1 declared here",
[h]="%select{%select{reference|\'std::initializer_list\'}0 member|member with %select{reference|\'std::initializer_list\'}0 subobject}1 declared here",
[g]=b,
[j]=i,
[e]="(?:(?:reference|\'std\\:\\:initializer_list\') member|member with (?:reference|\'std\\:\\:initializer_list\') subobject) declared here",
[k]="(?:(?:reference|\'std\\:\\:initializer_list\') member|member with (?:reference|\'std\\:\\:initializer_list\') subobject) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"0a9969b36b16",1531786301,"Restructure checking for, and warning on, lifetime extension."},
[m]={"0a9969b36b16",1531786301,"Restructure checking for, and warning on, lifetime extension."},
[n]={{D,8190,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\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          // Don\'t bother adding a note pointing to the field if we\'re inside\n          // its default member initializer; our primary diagnostic points to\n          // the same place in that case.\n          if (Path.empty() || Path.back().Kind != IndirectLocalPathEntry::DefaultInit) {\n            Diag(ExtendingDecl->getLocation(), diag::note_lifetime_extending_member_declared_here) << RK << IsSubobjectMember;"}}
[n]={{K,8190,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\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          // Don\'t bother adding a note pointing to the field if we\'re inside\n          // its default member initializer; our primary diagnostic points to\n          // the same place in that case.\n          if (Path.empty() || Path.back().Kind != IndirectLocalPathEntry::DefaultInit) {\n            Diag(ExtendingDecl->getLocation(), diag::note_lifetime_extending_member_declared_here) << RK << IsSubobjectMember;"}},
[o]={
["clang/test/SemaCXX/warn-dangling-field.cpp"]={"clang/test/SemaCXX/warn-dangling-field.cpp:12:8: note: reference member declared here","clang/test/SemaCXX/warn-dangling-field.cpp:22:12: note: reference member declared here","clang/test/SemaCXX/warn-dangling-field.cpp:32:5: note: reference member declared here","clang/test/SemaCXX/warn-dangling-field.cpp:45:6: note: member with reference subobject declared here","clang/test/SemaCXX/warn-dangling-field.cpp:40:12: note: reference member declared here"}
}
},
},
["note_local_decl_close_match"]={
["note_local_decl_close_match"]={
[f]="local declaration nearly matches",
[b]="local declaration nearly matches",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="local declaration nearly matches",
[h]="local declaration nearly matches",
[g]=b,
[j]=i,
[e]="local declaration nearly matches",
[k]="local declaration nearly matches",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"114394f8246f",1376022901,"Implement [class.friend]p11\'s special name lookup rules for friend declarations"},
[m]={"114394f8246f",1376022901,"Implement [class.friend]p11\'s special name lookup rules for friend declarations"},
[n]={{t,9092,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  for (SmallVectorImpl<std::pair<FunctionDecl *, unsigned>>::iterator NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end(); NearMatch != NearMatchEnd; ++NearMatch) {\n    // FIXME: These notes are poorly worded for the local friend case.\n    if (unsigned Idx = NearMatch->second) {\n    } else if (FDisConst != NewFDisConst) {\n    } else\n      SemaRef.Diag(FD->getLocation(), IsMember ? diag::note_member_def_close_match : diag::note_local_decl_close_match);"}}
[n]={{u,9092,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  for (SmallVectorImpl<std::pair<FunctionDecl *, unsigned>>::iterator NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end(); NearMatch != NearMatchEnd; ++NearMatch) {\n    // FIXME: These notes are poorly worded for the local friend case.\n    if (unsigned Idx = NearMatch->second) {\n    } else if (FDisConst != NewFDisConst) {\n    } else\n      SemaRef.Diag(FD->getLocation(), IsMember ? diag::note_member_def_close_match : diag::note_local_decl_close_match);"}},
[o]={
["clang/test/CXX/class.access/class.friend/p11.cpp"]={"clang/test/CXX/class.access/class.friend/p11.cpp:29:10: note: local declaration nearly matches"}
}
},
},
["note_local_decl_close_param_match"]={
["note_local_decl_close_param_match"]={
[f]="type of A parameter of local declaration does not match definition (B vs C)",
[b]="type of A parameter of local declaration does not match definition (B vs C)",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="type of %ordinal0 parameter of local declaration does not match definition%diff{ ($ vs $)|}1,2",
[h]="type of %ordinal0 parameter of local declaration does not match definition%diff{ ($ vs $)|}1,2",
[g]=b,
[j]=i,
[e]="type of (.*?) parameter of local declaration does not match definition(?: \\((.*?) vs (.*?)\\)|)",
[k]="type of (.*?) parameter of local declaration does not match definition(?: \\((.*?) vs (.*?)\\)|)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"114394f8246f",1376022901,"Implement [class.friend]p11\'s special name lookup rules for friend declarations"},
[m]={"114394f8246f",1376022901,"Implement [class.friend]p11\'s special name lookup rules for friend declarations"},
[n]={{t,9076,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  for (SmallVectorImpl<std::pair<FunctionDecl *, unsigned>>::iterator NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end(); NearMatch != NearMatchEnd; ++NearMatch) {\n    // FIXME: These notes are poorly worded for the local friend case.\n    if (unsigned Idx = NearMatch->second) {\n      SemaRef.Diag(Loc, IsMember ? diag::note_member_def_close_param_match : diag::note_local_decl_close_param_match) << Idx << FDParam->getType() << NewFD->getParamDecl(Idx - 1)->getType();"}}
[n]={{u,9076,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  for (SmallVectorImpl<std::pair<FunctionDecl *, unsigned>>::iterator NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end(); NearMatch != NearMatchEnd; ++NearMatch) {\n    // FIXME: These notes are poorly worded for the local friend case.\n    if (unsigned Idx = NearMatch->second) {\n      SemaRef.Diag(Loc, IsMember ? diag::note_member_def_close_param_match : diag::note_local_decl_close_param_match) << Idx << FDParam->getType() << NewFD->getParamDecl(Idx - 1)->getType();"}}
},
},
["note_local_var_initializer"]={
["note_local_var_initializer"]={
[f]="... variable ...here",
[b]="... variable ...here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{via initialization of|binding reference}0 variable %select{%2 |}1here",
[h]="%select{via initialization of|binding reference}0 variable %select{%2 |}1here",
[g]=b,
[j]=i,
[e]="(?:via initialization of|binding reference) variable (?:(.*?) |)here",
[k]="(?:via initialization of|binding reference) variable (?:(.*?) |)here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"afe48f9d68e4",1532380882,"Fold -Wreturn-stack-address into general initialization lifetime"},
[m]={"afe48f9d68e4",1532380882,"Fold -Wreturn-stack-address into general initialization lifetime"},
[n]={{D,8302,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    for (unsigned I = 0; I != Path.size(); ++I) {\n      case IndirectLocalPathEntry::VarInit: {\n        Diag(VD->getLocation(), diag::note_local_var_initializer) << VD->getType()->isReferenceType() << VD->isImplicit() << VD->getDeclName() << nextPathEntryRange(Path, I + 1, L);"}}
[n]={{K,8302,"void Sema::checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init) {\n  auto TemporaryVisitor = [&](IndirectLocalPath &Path, Local L, ReferenceKind RK) -> bool {\n    for (unsigned I = 0; I != Path.size(); ++I) {\n      case IndirectLocalPathEntry::VarInit: {\n        Diag(VD->getLocation(), diag::note_local_var_initializer) << VD->getType()->isReferenceType() << VD->isImplicit() << VD->getDeclName() << nextPathEntryRange(Path, I + 1, L);"}},
[o]={
["clang/test/Analysis/stack-block-returned.cpp"]={"clang/test/Analysis/stack-block-returned.cpp:7:15: note: binding reference variable \'qq\' here"}
}
},
},
["note_lock_exclusive_and_shared"]={
["note_lock_exclusive_and_shared"]={
[f]="the other acquisition of A \'B\' is here",
[b]="the other acquisition of A \'B\' is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="the other acquisition of %0 \'%1\' is here",
[h]="the other acquisition of %0 \'%1\' is here",
[g]=b,
[j]=i,
[e]="the other acquisition of (.*?) \'(.*?)\' is here",
[k]="the other acquisition of (.*?) \'(.*?)\' is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"46b057681a7f",1315505978,"Thread safety: shared vs. exclusive locks"},
[m]={"46b057681a7f",1315505978,"Thread safety: shared vs. exclusive locks"},
[n]={{Z,1936,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleExclusiveAndShared(StringRef Kind, Name LockName, SourceLocation Loc1, SourceLocation Loc2) override {\n    PartialDiagnosticAt Note(Loc2, S.PDiag(diag::note_lock_exclusive_and_shared) << Kind << LockName);"}}
[n]={{eb,1936,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  void handleExclusiveAndShared(StringRef Kind, Name LockName, SourceLocation Loc1, SourceLocation Loc2) override {\n    PartialDiagnosticAt Note(Loc2, S.PDiag(diag::note_lock_exclusive_and_shared) << Kind << LockName);"}},
[o]={
["clang/test/SemaCXX/warn-thread-safety-analysis.cpp"]={"clang/test/SemaCXX/warn-thread-safety-analysis.cpp:642:10: note: the other acquisition of mutex \'sls_mu\' is here","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:675:12: note: the other acquisition of mutex \'sls_mu\' is here","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:701:10: note: the other acquisition of mutex \'sls_mu\' is here","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:716:12: note: the other acquisition of mutex \'sls_mu\' is here","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:727:12: note: the other acquisition of mutex \'sls_mu\' is here","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2852:23: note: the other acquisition of mutex \'mu\' is here","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:2896:23: note: the other acquisition of mutex \'mu\' is here","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4810:11: note: the other acquisition of mutex \'mu_\' is here","clang/test/SemaCXX/warn-thread-safety-analysis.cpp:4821:11: note: the other acquisition of mutex \'mu_\' is here"}
}
},
},
["note_locked_here"]={
["note_locked_here"]={
[f]="A acquired here",
[b]="A acquired here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 acquired here",
[h]="%0 acquired here",
[g]=b,
[j]=i,
[e]="(.*?) acquired here",
[k]="(.*?) acquired here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"922866783b07",1328244326,"Thread safety analysis:"},
[m]={"922866783b07",1328244326,"Thread safety analysis:"},
[n]={{Z,1831,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes makeLockedHereNote(SourceLocation LocLocked, StringRef Kind) { return LocLocked.isValid() ? getNotes(PartialDiagnosticAt(LocLocked, S.PDiag(diag::note_locked_here) << Kind)) : getNotes(); }"}}
[n]={{eb,1831,"class ThreadSafetyReporter : public clang::threadSafety::ThreadSafetyHandler {\n  OptionalNotes makeLockedHereNote(SourceLocation LocLocked, StringRef Kind) { return LocLocked.isValid() ? getNotes(PartialDiagnosticAt(LocLocked, S.PDiag(diag::note_locked_here) << Kind)) : getNotes(); }"}},
[o]={
["clang/test/SemaObjCXX/warn-thread-safety-analysis.mm"]={"clang/test/SemaObjCXX/warn-thread-safety-analysis.mm:24:9: note: mutex acquired here"}
}
},
},
["note_logical_instead_of_bitwise_change_operator"]={
["note_logical_instead_of_bitwise_change_operator"]={
[f]="use \'A\' for a bitwise operation",
[b]="use \'A\' for a bitwise operation",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use \'%0\' for a bitwise operation",
[h]="use \'%0\' for a bitwise operation",
[g]=b,
[j]=i,
[e]="use \'(.*?)\' for a bitwise operation",
[k]="use \'(.*?)\' for a bitwise operation",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"0a0ba9d883f5",1313430606,"Add fixit notes for -Wconstant-logical-operand."},
[m]={"0a0ba9d883f5",1313430606,"Add fixit notes for -Wconstant-logical-operand."},
[n]={{r,13943,"// C99 6.5.[13,14]\ninline QualType Sema::CheckLogicalOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Diagnose cases where the user write a logical and/or but probably meant a\n  // bitwise one.  We do this when the LHS is a non-bool integer and the RHS\n  // is a constant.\n  if (!EnumConstantInBoolContext && LHS.get()->getType()->isIntegerType() && !LHS.get()->getType()->isBooleanType() && RHS.get()->getType()->isIntegerType() && !RHS.get()->isValueDependent() &&\n    if (RHS.get()->EvaluateAsInt(EVResult, Context)) {\n      if ((getLangOpts().Bool && !RHS.get()->getType()->isBooleanType() && !RHS.get()->getExprLoc().isMacroID()) || (Result != 0 && Result != 1)) {\n        Diag(Loc, diag::note_logical_instead_of_bitwise_change_operator) << (Opc == BO_LAnd ? \"&\" : \"|\") << FixItHint::CreateReplacement(SourceRange(Loc, getLocForEndOfToken(Loc)), Opc == BO_LAnd ? \"&\" : \"|\");"}}
[n]={{s,13943,"// C99 6.5.[13,14]\ninline QualType Sema::CheckLogicalOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Diagnose cases where the user write a logical and/or but probably meant a\n  // bitwise one.  We do this when the LHS is a non-bool integer and the RHS\n  // is a constant.\n  if (!EnumConstantInBoolContext && LHS.get()->getType()->isIntegerType() && !LHS.get()->getType()->isBooleanType() && RHS.get()->getType()->isIntegerType() && !RHS.get()->isValueDependent() &&\n    if (RHS.get()->EvaluateAsInt(EVResult, Context)) {\n      if ((getLangOpts().Bool && !RHS.get()->getType()->isBooleanType() && !RHS.get()->getExprLoc().isMacroID()) || (Result != 0 && Result != 1)) {\n        Diag(Loc, diag::note_logical_instead_of_bitwise_change_operator) << (Opc == BO_LAnd ? \"&\" : \"|\") << FixItHint::CreateReplacement(SourceRange(Loc, getLocForEndOfToken(Loc)), Opc == BO_LAnd ? \"&\" : \"|\");"}},
[o]={
["clang/test/Parser/cxx2a-concept-declaration.cpp"]={"clang/test/Parser/cxx2a-concept-declaration.cpp:78:47: note: use \'&\' for a bitwise operation"}
}
},
},
["note_logical_instead_of_bitwise_remove_constant"]={
["note_logical_instead_of_bitwise_remove_constant"]={
[f]="remove constant to silence this warning",
[b]="remove constant to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="remove constant to silence this warning",
[h]="remove constant to silence this warning",
[g]=b,
[j]=i,
[e]="remove constant to silence this warning",
[k]="remove constant to silence this warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"0a0ba9d883f5",1313430606,"Add fixit notes for -Wconstant-logical-operand."},
[m]={"0a0ba9d883f5",1313430606,"Add fixit notes for -Wconstant-logical-operand."},
[n]={{r,14100,"// C99 6.5.[13,14]\ninline QualType Sema::CheckLogicalOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Diagnose cases where the user write a logical and/or but probably meant a\n  // bitwise one.  We do this when the LHS is a non-bool integer and the RHS\n  // is a constant.\n  if (!EnumConstantInBoolContext && LHS.get()->getType()->isIntegerType() && !LHS.get()->getType()->isBooleanType() && RHS.get()->getType()->isIntegerType() && !RHS.get()->isValueDependent() &&\n    if (RHS.get()->EvaluateAsInt(EVResult, Context)) {\n      if ((getLangOpts().Bool && !RHS.get()->getType()->isBooleanType() && !RHS.get()->getExprLoc().isMacroID()) || (Result != 0 && Result != 1)) {\n        if (Opc == BO_LAnd)\n          Diag(Loc, diag::note_logical_instead_of_bitwise_remove_constant) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(LHS.get()->getEndLoc()), RHS.get()->getEndLoc()));"}}
[n]={{s,14100,"// C99 6.5.[13,14]\ninline QualType Sema::CheckLogicalOperands(ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  // Diagnose cases where the user write a logical and/or but probably meant a\n  // bitwise one.  We do this when the LHS is a non-bool integer and the RHS\n  // is a constant.\n  if (!EnumConstantInBoolContext && LHS.get()->getType()->isIntegerType() && !LHS.get()->getType()->isBooleanType() && RHS.get()->getType()->isIntegerType() && !RHS.get()->isValueDependent() &&\n    if (RHS.get()->EvaluateAsInt(EVResult, Context)) {\n      if ((getLangOpts().Bool && !RHS.get()->getType()->isBooleanType() && !RHS.get()->getExprLoc().isMacroID()) || (Result != 0 && Result != 1)) {\n        if (Opc == BO_LAnd)\n          Diag(Loc, diag::note_logical_instead_of_bitwise_remove_constant) << FixItHint::CreateRemoval(SourceRange(getLocForEndOfToken(LHS.get()->getEndLoc()), RHS.get()->getEndLoc()));"}},
[o]={
["clang/test/Parser/cxx2a-concept-declaration.cpp"]={"clang/test/Parser/cxx2a-concept-declaration.cpp:78:47: note: remove constant to silence this warning"}
}
},
},
["note_logical_not_fix"]={
["note_logical_not_fix"]={
[f]="add parentheses after the \'!\' to evaluate the ... first",
[b]="add parentheses after the \'!\' to evaluate the ... first",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add parentheses after the \'!\' to evaluate the %select{comparison|bitwise operator}0 first",
[h]="add parentheses after the \'!\' to evaluate the %select{comparison|bitwise operator}0 first",
[g]=b,
[j]=i,
[e]="add parentheses after the \'\\!\' to evaluate the (?:comparison|bitwise operator) first",
[k]="add parentheses after the \'\\!\' to evaluate the (?:comparison|bitwise operator) first",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"bb4b894e0b2d",1370890327,"Add a new warning, -Wlogical-not-parentheses, to -Wparentheses."},
[m]={"bb4b894e0b2d",1370890327,"Add a new warning, -Wlogical-not-parentheses, to -Wparentheses."},
[n]={{r,12557,"/// Warns on !x < y, !x & y where !(x < y), !(x & y) was probably intended.\nstatic void diagnoseLogicalNotOnLHSofCheck(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  S.Diag(UO->getOperatorLoc(), diag::note_logical_not_fix) << IsBitwiseOp << FixItHint::CreateInsertion(FirstOpen, \"(\") << FixItHint::CreateInsertion(FirstClose, \")\");"}}
[n]={{s,12557,"/// Warns on !x < y, !x & y where !(x < y), !(x & y) was probably intended.\nstatic void diagnoseLogicalNotOnLHSofCheck(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  S.Diag(UO->getOperatorLoc(), diag::note_logical_not_fix) << IsBitwiseOp << FixItHint::CreateInsertion(FirstOpen, \"(\") << FixItHint::CreateInsertion(FirstClose, \")\");"}},
[o]={
["clang/test/Sema/warn-logical-not-compare.c"]={"clang/test/Sema/warn-logical-not-compare.c:9:9: note: add parentheses after the \'!\' to evaluate the comparison first","clang/test/Sema/warn-logical-not-compare.c:21:9: note: add parentheses after the \'!\' to evaluate the comparison first","clang/test/Sema/warn-logical-not-compare.c:33:9: note: add parentheses after the \'!\' to evaluate the comparison first","clang/test/Sema/warn-logical-not-compare.c:45:9: note: add parentheses after the \'!\' to evaluate the comparison first","clang/test/Sema/warn-logical-not-compare.c:57:9: note: add parentheses after the \'!\' to evaluate the comparison first","clang/test/Sema/warn-logical-not-compare.c:69:9: note: add parentheses after the \'!\' to evaluate the comparison first","clang/test/Sema/warn-logical-not-compare.c:96:9: note: add parentheses after the \'!\' to evaluate the comparison first","clang/test/Sema/warn-logical-not-compare.c:122:9: note: add parentheses after the \'!\' to evaluate the comparison first","clang/test/Sema/warn-logical-not-compare.c:134:9: note: add parentheses after the \'!\' to evaluate the comparison first","clang/test/Sema/warn-logical-not-compare.c:146:9: note: add parentheses after the \'!\' to evaluate the comparison first","clang/test/Sema/warn-logical-not-compare.c:158:9: note: add parentheses after the \'!\' to evaluate the comparison first","clang/test/Sema/warn-logical-not-compare.c:187:11: note: add parentheses after the \'!\' to evaluate the comparison first"}
}
},
},
["note_logical_not_silence_with_parens"]={
["note_logical_not_silence_with_parens"]={
[f]="add parentheses around left hand side expression to silence this warning",
[b]="add parentheses around left hand side expression to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add parentheses around left hand side expression to silence this warning",
[h]="add parentheses around left hand side expression to silence this warning",
[g]=b,
[j]=i,
[e]="add parentheses around left hand side expression to silence this warning",
[k]="add parentheses around left hand side expression to silence this warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"bb4b894e0b2d",1370890327,"Add a new warning, -Wlogical-not-parentheses, to -Wparentheses."},
[m]={"bb4b894e0b2d",1370890327,"Add a new warning, -Wlogical-not-parentheses, to -Wparentheses."},
[n]={{r,12624,"/// Warns on !x < y, !x & y where !(x < y), !(x & y) was probably intended.\nstatic void diagnoseLogicalNotOnLHSofCheck(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  S.Diag(UO->getOperatorLoc(), diag::note_logical_not_silence_with_parens) << FixItHint::CreateInsertion(SecondOpen, \"(\") << FixItHint::CreateInsertion(SecondClose, \")\");"}}
[n]={{s,12624,"/// Warns on !x < y, !x & y where !(x < y), !(x & y) was probably intended.\nstatic void diagnoseLogicalNotOnLHSofCheck(Sema &S, ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, BinaryOperatorKind Opc) {\n  S.Diag(UO->getOperatorLoc(), diag::note_logical_not_silence_with_parens) << FixItHint::CreateInsertion(SecondOpen, \"(\") << FixItHint::CreateInsertion(SecondClose, \")\");"}},
[o]={
["clang/test/Sema/warn-logical-not-compare.c"]={"clang/test/Sema/warn-logical-not-compare.c:9:9: note: add parentheses around left hand side expression to silence this warning","clang/test/Sema/warn-logical-not-compare.c:21:9: note: add parentheses around left hand side expression to silence this warning","clang/test/Sema/warn-logical-not-compare.c:33:9: note: add parentheses around left hand side expression to silence this warning","clang/test/Sema/warn-logical-not-compare.c:45:9: note: add parentheses around left hand side expression to silence this warning","clang/test/Sema/warn-logical-not-compare.c:57:9: note: add parentheses around left hand side expression to silence this warning","clang/test/Sema/warn-logical-not-compare.c:69:9: note: add parentheses around left hand side expression to silence this warning","clang/test/Sema/warn-logical-not-compare.c:96:9: note: add parentheses around left hand side expression to silence this warning","clang/test/Sema/warn-logical-not-compare.c:122:9: note: add parentheses around left hand side expression to silence this warning","clang/test/Sema/warn-logical-not-compare.c:134:9: note: add parentheses around left hand side expression to silence this warning","clang/test/Sema/warn-logical-not-compare.c:146:9: note: add parentheses around left hand side expression to silence this warning","clang/test/Sema/warn-logical-not-compare.c:158:9: note: add parentheses around left hand side expression to silence this warning","clang/test/Sema/warn-logical-not-compare.c:187:11: note: add parentheses around left hand side expression to silence this warning"}
}
},
},
["note_loop_iteration_here"]={
["note_loop_iteration_here"]={
[f]="... here",
[b]="... here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{decremented|incremented}0 here",
[h]="%select{decremented|incremented}0 here",
[g]=b,
[j]=i,
[e]="(?:decremented|incremented) here",
[k]="(?:decremented|incremented) here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"4e7c9628917a",1375824714,"Add a new warning to -Wloop-analysis to detect suspicious increments or"},
[m]={"4e7c9628917a",1375824714,"Add a new warning to -Wloop-analysis to detect suspicious increments or"},
[n]={{A,2107,"// Emit a warning when a loop increment/decrement appears twice per loop\n// iteration.  The conditions which trigger this warning are:\n// 1) The last statement in the loop body and the third expression in the\n//    for loop are both increment or both decrement of the same variable\n// 2) No continue statements in the loop body.\nvoid CheckForRedundantIteration(Sema &S, Expr *Third, Stmt *Body) {\n  S.Diag(LoopDRE->getLocation(), diag::note_loop_iteration_here) << LoopIncrement;"}}
[n]={{H,2107,"// Emit a warning when a loop increment/decrement appears twice per loop\n// iteration.  The conditions which trigger this warning are:\n// 1) The last statement in the loop body and the third expression in the\n//    for loop are both increment or both decrement of the same variable\n// 2) No continue statements in the loop body.\nvoid CheckForRedundantIteration(Sema &S, Expr *Third, Stmt *Body) {\n  S.Diag(LoopDRE->getLocation(), diag::note_loop_iteration_here) << LoopIncrement;"}},
[o]={
["clang/test/SemaCXX/warn-loop-analysis.cpp"]={"clang/test/SemaCXX/warn-loop-analysis.cpp:158:10: note: incremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:162:10: note: incremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:166:12: note: incremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:170:12: note: incremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:174:10: note: decremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:178:10: note: decremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:182:12: note: decremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:186:12: note: decremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:207:10: note: decremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:221:10: note: incremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:225:10: note: incremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:229:12: note: incremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:233:12: note: incremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:237:10: note: decremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:241:10: note: decremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:245:12: note: decremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:249:12: note: decremented here","clang/test/SemaCXX/warn-loop-analysis.cpp:270:10: note: decremented here"}
}
},
},
["note_macro_expansion_here"]={
["note_macro_expansion_here"]={
[f]="expansion of macro A requested here",
[b]="expansion of macro A requested here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="expansion of macro %0 requested here",
[h]="expansion of macro %0 requested here",
[g]=b,
[j]=i,
[e]="expansion of macro (.*?) requested here",
[k]="expansion of macro (.*?) requested here",
[d]=a,
[l]=a,
[c]=R,
[c]=bb,
[m]={"023dd1eefad3",1550117597,"Print a note to the called macro when diagnosing err_embedded_directive"},
[m]={"023dd1eefad3",1550117597,"Print a note to the called macro when diagnosing err_embedded_directive"},
[n]={{"clang/lib/Lex/PPDirectives.cpp",1177,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line.  This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n  // C99 6.10.3p11: Is this preprocessor directive in macro invocation?  e.g.:\n  //  #define A(x) #x\n  //  A(abc\n  //    #warning blah\n  //  def)\n  // If so, the user is relying on undefined behavior, emit a diagnostic. Do\n  // not support this for #include-like directives, since that can result in\n  // terrible diagnostics, and does not work in GCC.\n  if (InMacroArgs) {\n    if (IdentifierInfo *II = Result.getIdentifierInfo()) {\n      case tok::pp_pragma:\n        Diag(*ArgMacro, diag::note_macro_expansion_here) << ArgMacro->getIdentifierInfo();"}}
[n]={{"clang/lib/Lex/PPDirectives.cpp",1177,"/// HandleDirective - This callback is invoked when the lexer sees a # token\n/// at the start of a line.  This consumes the directive, modifies the\n/// lexer/preprocessor state, and advances the lexer(s) so that the next token\n/// read is the correct one.\nvoid Preprocessor::HandleDirective(Token &Result) {\n  // C99 6.10.3p11: Is this preprocessor directive in macro invocation?  e.g.:\n  //  #define A(x) #x\n  //  A(abc\n  //    #warning blah\n  //  def)\n  // If so, the user is relying on undefined behavior, emit a diagnostic. Do\n  // not support this for #include-like directives, since that can result in\n  // terrible diagnostics, and does not work in GCC.\n  if (InMacroArgs) {\n    if (IdentifierInfo *II = Result.getIdentifierInfo()) {\n      case tok::pp_pragma:\n        Diag(*ArgMacro, diag::note_macro_expansion_here) << ArgMacro->getIdentifierInfo();"}},
[o]={
["clang/test/Preprocessor/macro_arg_directive.c"]={"clang/test/Preprocessor/macro_arg_directive.c:11:1: note: expansion of macro \'M\' requested here","clang/test/Preprocessor/macro_arg_directive.c:21:10: note: expansion of macro \'MUNCH\' requested here"}
}
},
},
["note_macro_here"]={
["note_macro_here"]={
[f]="macro A defined here",
[b]="macro A defined here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="macro %0 defined here",
[h]="macro %0 defined here",
[g]=b,
[j]=i,
[e]="macro (.*?) defined here",
[k]="macro (.*?) defined here",
[d]=a,
[l]=a,
[c]=R,
[c]=bb,
[m]={"19b02cd7fc91",1340409548,"Minor improvements to some C99 variadic-macro-related diagnostics."},
[m]={"19b02cd7fc91",1340409548,"Minor improvements to some C99 variadic-macro-related diagnostics."},
[n]={{ib,816,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  while (Tok.isNot(tok::r_paren)) {\n    while (true) {\n      if (Tok.isOneOf(tok::eof, tok::eod)) { // \"#if f(<eof>\" & \"#if f(\\n\"\n        if (!ContainsCodeCompletionTok) {\n          Diag(MI->getDefinitionLoc(), diag::note_macro_here) << MacroName.getIdentifierInfo();"},{ib,930,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // If this is not a variadic macro, and too many args were specified, emit\n  // an error.\n  if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n    Diag(MI->getDefinitionLoc(), diag::note_macro_here) << MacroName.getIdentifierInfo();"},{ib,1002,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  if (NumActuals < MinArgsExpected) {\n    // There are several cases where too few arguments is ok, handle them now.\n    if (NumActuals == 0 && MinArgsExpected == 1) {\n    } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected ||          // A(x, ...) -> A(X)\n      // Varargs where the named vararg parameter is missing: OK as extension.\n      //  #define A(x, ...)\n      //  A(\"blah\")\n      //\n      // If the macro contains the comma pasting extension, the diagnostic\n      // is suppressed; we know we\'ll get another diagnostic later.\n      if (!MI->hasCommaPasting()) {\n        Diag(MI->getDefinitionLoc(), diag::note_macro_here) << MacroName.getIdentifierInfo();"},{ib,1016,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  if (NumActuals < MinArgsExpected) {\n    // There are several cases where too few arguments is ok, handle them now.\n    if (NumActuals == 0 && MinArgsExpected == 1) {\n    } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected ||          // A(x, ...) -> A(X)\n    } else if (!ContainsCodeCompletionTok) {\n      Diag(MI->getDefinitionLoc(), diag::note_macro_here) << MacroName.getIdentifierInfo();"},{ib,1038,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  if (NumActuals < MinArgsExpected) {\n  } else if (NumActuals > MinArgsExpected && !MI->isVariadic() && !ContainsCodeCompletionTok) {\n    Diag(MI->getDefinitionLoc(), diag::note_macro_here) << MacroName.getIdentifierInfo();"}}
[n]={{wb,816,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  while (Tok.isNot(tok::r_paren)) {\n    while (true) {\n      if (Tok.isOneOf(tok::eof, tok::eod)) { // \"#if f(<eof>\" & \"#if f(\\n\"\n        if (!ContainsCodeCompletionTok) {\n          Diag(MI->getDefinitionLoc(), diag::note_macro_here) << MacroName.getIdentifierInfo();"},{wb,930,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  // If this is not a variadic macro, and too many args were specified, emit\n  // an error.\n  if (!isVariadic && NumActuals > MinArgsExpected && !ContainsCodeCompletionTok) {\n    Diag(MI->getDefinitionLoc(), diag::note_macro_here) << MacroName.getIdentifierInfo();"},{wb,1002,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  if (NumActuals < MinArgsExpected) {\n    // There are several cases where too few arguments is ok, handle them now.\n    if (NumActuals == 0 && MinArgsExpected == 1) {\n    } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected ||          // A(x, ...) -> A(X)\n      // Varargs where the named vararg parameter is missing: OK as extension.\n      //  #define A(x, ...)\n      //  A(\"blah\")\n      //\n      // If the macro contains the comma pasting extension, the diagnostic\n      // is suppressed; we know we\'ll get another diagnostic later.\n      if (!MI->hasCommaPasting()) {\n        Diag(MI->getDefinitionLoc(), diag::note_macro_here) << MacroName.getIdentifierInfo();"},{wb,1016,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  if (NumActuals < MinArgsExpected) {\n    // There are several cases where too few arguments is ok, handle them now.\n    if (NumActuals == 0 && MinArgsExpected == 1) {\n    } else if ((FoundElidedComma || MI->isVariadic()) && (NumActuals + 1 == MinArgsExpected ||          // A(x, ...) -> A(X)\n    } else if (!ContainsCodeCompletionTok) {\n      Diag(MI->getDefinitionLoc(), diag::note_macro_here) << MacroName.getIdentifierInfo();"},{wb,1038,"/// ReadFunctionLikeMacroArgs - After reading \"MACRO\" and knowing that the next\n/// token is the \'(\' of the macro, this method is invoked to read all of the\n/// actual arguments specified for the macro invocation.  This returns null on\n/// error.\nMacroArgs *Preprocessor::ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI, SourceLocation &MacroEnd) {\n  if (NumActuals < MinArgsExpected) {\n  } else if (NumActuals > MinArgsExpected && !MI->isVariadic() && !ContainsCodeCompletionTok) {\n    Diag(MI->getDefinitionLoc(), diag::note_macro_here) << MacroName.getIdentifierInfo();"}},
[o]={
["clang/test/Preprocessor/macro_fn.c"]={"clang/test/Preprocessor/macro_fn.c:4:9: note: macro \'zero\' defined here","clang/test/Preprocessor/macro_fn.c:4:9: note: macro \'zero\' defined here","clang/test/Preprocessor/macro_fn.c:5:9: note: macro \'one\' defined here","clang/test/Preprocessor/macro_fn.c:5:9: note: macro \'one\' defined here","clang/test/Preprocessor/macro_fn.c:6:9: note: macro \'two\' defined here","clang/test/Preprocessor/macro_fn.c:6:9: note: macro \'two\' defined here","clang/test/Preprocessor/macro_fn.c:6:9: note: macro \'two\' defined here","clang/test/Preprocessor/macro_fn.c:6:9: note: macro \'two\' defined here","clang/test/Preprocessor/macro_fn.c:8:9: note: macro \'one_dot\' defined here","clang/test/Preprocessor/macro_fn.c:8:9: note: macro \'one_dot\' defined here"}
}
},
},
["note_main_change_return_type"]={
["note_main_change_return_type"]={
[f]="change return type to \'int\'",
[b]="change return type to \'int\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="change return type to \'int\'",
[h]="change return type to \'int\'",
[g]=b,
[j]=i,
[e]="change return type to \'int\'",
[k]="change return type to \'int\'",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"ae73417b6955",1358382373,"Implement a fixit for -Wmain-return-type"},
[m]={"ae73417b6955",1358382373,"Implement a fixit for -Wmain-return-type"},
[n]={{t,12131,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  if (getLangOpts().GNUMode && !getLangOpts().CPlusPlus) {\n    // GCC in C mode accepts qualified \'int\'.\n    if (Context.hasSameUnqualifiedType(FT->getReturnType(), Context.IntTy))\n    else {\n      if (RTRange.isValid())\n        Diag(RTRange.getBegin(), diag::note_main_change_return_type) << FixItHint::CreateReplacement(RTRange, \"int\");"}}
[n]={{u,12131,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  if (getLangOpts().GNUMode && !getLangOpts().CPlusPlus) {\n    // GCC in C mode accepts qualified \'int\'.\n    if (Context.hasSameUnqualifiedType(FT->getReturnType(), Context.IntTy))\n    else {\n      if (RTRange.isValid())\n        Diag(RTRange.getBegin(), diag::note_main_change_return_type) << FixItHint::CreateReplacement(RTRange, \"int\");"}},
[o]={
["clang/test/Sema/gnu89.c"]={"clang/test/Sema/gnu89.c:5:1: note: change return type to \'int\'"}
}
},
},
["note_main_remove_noreturn"]={
["note_main_remove_noreturn"]={
[f]="remove \'_Noreturn\'",
[b]="remove \'_Noreturn\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="remove \'_Noreturn\'",
[h]="remove \'_Noreturn\'",
[g]=b,
[j]=i,
[e]="remove \'_Noreturn\'",
[k]="remove \'_Noreturn\'",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"7ec6f3ddeb4c",1358767503,"Add a fixit for _Noreturn main,"},
[m]={"7ec6f3ddeb4c",1358767503,"Add a fixit for _Noreturn main,"},
[n]={{t,12086,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  if (DS.isNoreturnSpecified()) {\n    Diag(NoreturnLoc, diag::note_main_remove_noreturn) << FixItHint::CreateRemoval(NoreturnRange);"}}
[n]={{u,12086,"void Sema::CheckMain(FunctionDecl *FD, const DeclSpec &DS) {\n  if (DS.isNoreturnSpecified()) {\n    Diag(NoreturnLoc, diag::note_main_remove_noreturn) << FixItHint::CreateRemoval(NoreturnRange);"}},
[o]={
["clang/test/Sema/warn-main.c"]={"clang/test/Sema/warn-main.c:27:1: note: remove \'_Noreturn\'"}
}
},
},
["note_matching"]={
["note_matching"]={
[f]="to match this A",
[b]="to match this A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="to match this %0",
[h]="to match this %0",
[g]=b,
[j]=i,
[e]="to match this (.*?)",
[k]="to match this (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={wb,1236199783,vb},
[m]={Jb,1236199783,Kb},
[n]={{"clang/lib/Lex/PPDirectives.cpp",3023,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  } else {\n    if (VAOCtx.isInVAOpt()) {\n      Diag(VAOCtx.getUnmatchedOpeningParenLoc(), diag::note_matching) << tok::l_paren;"},{"clang/lib/Lex/PPExpressions.cpp",155,"/// EvaluateDefined - Process a \'defined(sym)\' expression.\nstatic bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // If we are in parens, ensure we have a trailing ).\n  if (LParenLoc.isValid()) {\n    if (PeekTok.isNot(tok::r_paren)) {\n      PP.Diag(LParenLoc, diag::note_matching) << tok::l_paren;"},{"clang/lib/Lex/PPExpressions.cpp",459,"/// 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  case tok::l_paren: {\n    // If this is a silly value like (X), which doesn\'t need parens, check for\n    // !(defined X).\n    if (PeekTok.is(tok::r_paren)) {\n    } else {\n      if (PeekTok.isNot(tok::r_paren)) {\n        PP.Diag(Start, diag::note_matching) << tok::l_paren;"},{"clang/lib/Lex/PPExpressions.cpp",817,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  while (true) {\n    case tok::question: {\n      // Parse the : part of the expression.\n      if (PeekTok.isNot(tok::colon)) {\n        PP.Diag(OpLoc, diag::note_matching) << tok::question;"},{ib,1242,"/// EvaluateHasIncludeCommon - Process a \'__has_include(\"path\")\'\n/// or \'__has_include_next(\"path\")\' expression.\n/// Returns true if successful.\nstatic bool EvaluateHasIncludeCommon(Token &Tok, IdentifierInfo *II, Preprocessor &PP, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // Ensure we have a trailing ).\n  if (Tok.isNot(tok::r_paren)) {\n    PP.Diag(LParenLoc, diag::note_matching) << tok::l_paren;"},{ib,1385,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  already_lexed:\n    // Diagnose missing \')\'.\n    if (!SuppressDiagnostic) {\n      PP.Diag(LParenLoc, diag::note_matching) << tok::l_paren;"},{ib,1894,"#include \"clang/Basic/TransformTypeTraits.def\"\n  } else if (II == Ident__has_constexpr_builtin) {\n  } else if (II == Ident__is_identifier) {\n  } else if (II == Ident__has_attribute) {\n  } else if (II == Ident__has_declspec) {\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n  } else if (II == Ident__has_warning) {\n  } else if (II == Ident__building_module) {\n  } else if (II == Ident__MODULE__) {\n  } else if (II == Ident__identifier) {\n    if (RParen.isNot(tok::r_paren)) {\n      Diag(LParenLoc, diag::note_matching) << tok::l_paren;"},{"clang/lib/Lex/Preprocessor.cpp",1038,"/// Lex a header-name token (including one formed from header-name-tokens if\n/// \\p AllowConcatenation is \\c true).\n///\n/// \\param FilenameTok Filled in with the next token. On success, this will\n///        be either a header_name token. On failure, it will be whatever other\n///        token was found instead.\n/// \\param AllowMacroExpansion If \\c true, allow the header name to be formed\n///        by macro expansion (concatenating tokens as necessary if the first\n///        token is a \'<\').\n/// \\return \\c true if we reached EOD or EOF while looking for a > token in\n///        a concatenated header name and diagnosed it. \\c false otherwise.\nbool Preprocessor::LexHeaderName(Token &FilenameTok, bool AllowMacroExpansion) {\n  if (FilenameTok.is(tok::less) && AllowMacroExpansion) {\n    // Consume tokens until we find a \'>\'.\n    // FIXME: A header-name could be formed starting or ending with an\n    // alternative token. It\'s not clear whether that\'s ill-formed in all\n    // cases.\n    while (FilenameTok.isNot(tok::greater)) {\n      if (FilenameTok.isOneOf(tok::eod, tok::eof)) {\n        Diag(Start, diag::note_matching) << tok::less;"},{"clang/lib/Parse/ParseCXXInlineMethods.cpp",959,"/// Consume tokens and store them in the passed token container until\n/// we\'ve passed the try keyword and constructor initializers and have consumed\n/// the opening brace of the function body. The opening brace will be consumed\n/// if and only if there was no error.\n///\n/// \\return True on error.\nbool Parser::ConsumeAndStoreFunctionPrologue(CachedTokens &Toks) {\n  while (true) {\n    // Skip over the mem-initializer-id, if possible.\n    if (Tok.is(tok::kw_decltype)) {\n      if (!ConsumeAndStoreUntil(tok::r_paren, Toks, /*StopAtSemi=*/true)) {\n        Diag(OpenLoc, diag::note_matching) << tok::l_paren;"},{"clang/lib/Parse/ParseCXXInlineMethods.cpp",1067,"/// Consume tokens and store them in the passed token container until\n/// we\'ve passed the try keyword and constructor initializers and have consumed\n/// the opening brace of the function body. The opening brace will be consumed\n/// if and only if there was no error.\n///\n/// \\return True on error.\nbool Parser::ConsumeAndStoreFunctionPrologue(CachedTokens &Toks) {\n  while (true) {\n    if (!ConsumeAndStoreUntil(CloseKind, Toks, /*StopAtSemi=*/true)) {\n      Diag(OpenLoc, diag::note_matching) << kind;"},{"clang/lib/Parse/ParseExpr.cpp",524,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  while (true) {\n    if (NextTokPrec == prec::Conditional) {\n      if (!TryConsumeToken(tok::colon, ColonLoc)) {\n        Diag(OpToken, diag::note_matching) << tok::question;"},{"clang/lib/Parse/ParseExpr.cpp",2050,"/// Once the leading part of a postfix-expression is parsed, this\n/// method parses any suffixes that apply.\n///\n/// \\verbatim\n///      postfix-expression: [C99 6.5.2]\n///        primary-expression\n///        postfix-expression \'[\' expression \']\'\n///        postfix-expression \'[\' braced-init-list \']\'\n///        postfix-expression \'[\' expression-list [opt] \']\'  [C++23 12.4.5]\n///        postfix-expression \'(\' argument-expression-list[opt] \')\'\n///        postfix-expression \'.\' identifier\n///        postfix-expression \'->\' identifier\n///        postfix-expression \'++\'\n///        postfix-expression \'--\'\n///        \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///        \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///\n///      argument-expression-list: [C99 6.5.2]\n///        argument-expression ...[opt]\n///        argument-expression-list \',\' assignment-expression ...[opt]\n/// \\endverbatim\nExprResult Parser::ParsePostfixExpressionSuffix(ExprResult LHS) {\n  while (true) {\n    case tok::lesslessless: { // p-e: p-e \'<<<\' argument-expression-list \'>>>\'\n      if (OpKind == tok::lesslessless) {\n        if (TryConsumeToken(tok::greatergreatergreater, CloseLoc)) {\n        } else if (LHS.isInvalid()) {\n        } else {\n          Diag(OpenLoc, diag::note_matching) << tok::lesslessless;"},{"clang/lib/Parse/ParseExprCXX.cpp",1608,"/// ParseCXXCasts - This handles the various ways to cast expressions to another\n/// type.\n///\n///      postfix-expression: [C++ 5.2p1]\n///        \'dynamic_cast\' \'<\' type-name \'>\' \'(\' expression \')\'\n///        \'static_cast\' \'<\' type-name \'>\' \'(\' expression \')\'\n///        \'reinterpret_cast\' \'<\' type-name \'>\' \'(\' expression \')\'\n///        \'const_cast\' \'<\' type-name \'>\' \'(\' expression \')\'\n///\n/// C++ for OpenCL s2.3.1 adds:\n///        \'addrspace_cast\' \'<\' type-name \'>\' \'(\' expression \')\'\nExprResult Parser::ParseCXXCasts() {\n  if (ExpectAndConsume(tok::greater))\n    return ExprError(Diag(LAngleBracketLoc, diag::note_matching) << tok::less);"},{"clang/lib/Parse/ParseOpenMP.cpp",1990,"void Parser::parseOMPEndDirective(OpenMPDirectiveKind BeginKind, OpenMPDirectiveKind ExpectedKind, OpenMPDirectiveKind FoundKind, SourceLocation BeginLoc, SourceLocation FoundLoc, bool SkipUntilOpenMPEnd) {\n  Diag(BeginLoc, diag::note_matching) << (\"\'#pragma omp \" + getOpenMPDirectiveName(BeginKind) + \"\'\").str();"},{"clang/lib/Parse/Parser.cpp",2726,"bool BalancedDelimiterTracker::diagnoseMissingClose() {\n  P.Diag(LOpen, diag::note_matching) << Kind;"},{"clang/lib/Parse/ParseStmt.cpp",1874,"/// ParseDoStatement\n///      do-statement: [C99 6.8.5.2]\n///        \'do\' statement \'while\' \'(\' expression \')\' \';\'\n/// Note: this lets the caller parse the end \';\'.\nStmtResult Parser::ParseDoStatement() {\n  if (Tok.isNot(tok::kw_while)) {\n    if (!Body.isInvalid()) {\n      Diag(DoLoc, diag::note_matching) << \"\'do\'\";"},{"clang/lib/Parse/ParseStmtAsm.cpp",518,"/// ParseMicrosoftAsmStatement. When -fms-extensions/-fasm-blocks is enabled,\n/// this routine is called to collect the tokens for an MS asm statement.\n///\n/// [MS]  ms-asm-statement:\n///        ms-asm-block\n///        ms-asm-block ms-asm-statement\n///\n/// [MS]  ms-asm-block:\n///        \'__asm\' ms-asm-line \'\\n\'\n///        \'__asm\' \'{\' ms-asm-instruction-block[opt] \'}\' \';\'[opt]\n///\n/// [MS]  ms-asm-instruction-block\n///        ms-asm-line\n///        ms-asm-line \'\\n\' ms-asm-instruction-block\n///\nStmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {\n  if (BraceNesting && BraceCount != savedBraceCount) {\n    // __asm without closing brace (this can happen at EOF).\n    for (unsigned i = 0; i < BraceNesting; ++i) {\n      Diag(LBraceLocs.back(), diag::note_matching) << tok::l_brace;"},{"clang/lib/Parse/ParseTemplate.cpp",1124,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  default:\n    Diag(LAngleLoc, diag::note_matching) << tok::less;"}}
[n]={{"clang/lib/Lex/PPDirectives.cpp",3023,"MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody(const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) {\n  // Read the rest of the macro body.\n  if (MI->isObjectLike()) {\n  } else {\n    if (VAOCtx.isInVAOpt()) {\n      Diag(VAOCtx.getUnmatchedOpeningParenLoc(), diag::note_matching) << tok::l_paren;"},{"clang/lib/Lex/PPExpressions.cpp",155,"/// EvaluateDefined - Process a \'defined(sym)\' expression.\nstatic bool EvaluateDefined(PPValue &Result, Token &PeekTok, DefinedTracker &DT, bool ValueLive, Preprocessor &PP) {\n  // If we are in parens, ensure we have a trailing ).\n  if (LParenLoc.isValid()) {\n    if (PeekTok.isNot(tok::r_paren)) {\n      PP.Diag(LParenLoc, diag::note_matching) << tok::l_paren;"},{"clang/lib/Lex/PPExpressions.cpp",459,"/// 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  case tok::l_paren: {\n    // If this is a silly value like (X), which doesn\'t need parens, check for\n    // !(defined X).\n    if (PeekTok.is(tok::r_paren)) {\n    } else {\n      if (PeekTok.isNot(tok::r_paren)) {\n        PP.Diag(Start, diag::note_matching) << tok::l_paren;"},{"clang/lib/Lex/PPExpressions.cpp",817,"/// EvaluateDirectiveSubExpr - Evaluate the subexpression whose first token is\n/// PeekTok, and whose precedence is PeekPrec.  This returns the result in LHS.\n///\n/// If ValueLive is false, then this value is being evaluated in a context where\n/// the result is not used.  As such, avoid diagnostics that relate to\n/// evaluation, such as division by zero warnings.\nstatic bool EvaluateDirectiveSubExpr(PPValue &LHS, unsigned MinPrec, Token &PeekTok, bool ValueLive, bool &IncludedUndefinedIds, Preprocessor &PP) {\n  while (true) {\n    case tok::question: {\n      // Parse the : part of the expression.\n      if (PeekTok.isNot(tok::colon)) {\n        PP.Diag(OpLoc, diag::note_matching) << tok::question;"},{wb,1242,"/// EvaluateHasIncludeCommon - Process a \'__has_include(\"path\")\'\n/// or \'__has_include_next(\"path\")\' expression.\n/// Returns true if successful.\nstatic bool EvaluateHasIncludeCommon(Token &Tok, IdentifierInfo *II, Preprocessor &PP, ConstSearchDirIterator LookupFrom, const FileEntry *LookupFromFile) {\n  // Ensure we have a trailing ).\n  if (Tok.isNot(tok::r_paren)) {\n    PP.Diag(LParenLoc, diag::note_matching) << tok::l_paren;"},{wb,1385,"/// Process single-argument builtin feature-like macros that return\n/// integer values.\nstatic void EvaluateFeatureLikeBuiltinMacro(llvm::raw_svector_ostream &OS, Token &Tok, IdentifierInfo *II, Preprocessor &PP, bool ExpandArgs, llvm::function_ref<int(Token &Tok, bool &HasLexedNextTok)> Op) {\n  already_lexed:\n    // Diagnose missing \')\'.\n    if (!SuppressDiagnostic) {\n      PP.Diag(LParenLoc, diag::note_matching) << tok::l_paren;"},{wb,1894,"#include \"clang/Basic/TransformTypeTraits.def\"\n  } else if (II == Ident__has_constexpr_builtin) {\n  } else if (II == Ident__is_identifier) {\n  } else if (II == Ident__has_attribute) {\n  } else if (II == Ident__has_declspec) {\n  } else if (II == Ident__has_cpp_attribute || II == Ident__has_c_attribute) {\n  } else if (II == Ident__has_include || II == Ident__has_include_next) {\n  } else if (II == Ident__has_warning) {\n  } else if (II == Ident__building_module) {\n  } else if (II == Ident__MODULE__) {\n  } else if (II == Ident__identifier) {\n    if (RParen.isNot(tok::r_paren)) {\n      Diag(LParenLoc, diag::note_matching) << tok::l_paren;"},{"clang/lib/Lex/Preprocessor.cpp",1038,"/// Lex a header-name token (including one formed from header-name-tokens if\n/// \\p AllowConcatenation is \\c true).\n///\n/// \\param FilenameTok Filled in with the next token. On success, this will\n///        be either a header_name token. On failure, it will be whatever other\n///        token was found instead.\n/// \\param AllowMacroExpansion If \\c true, allow the header name to be formed\n///        by macro expansion (concatenating tokens as necessary if the first\n///        token is a \'<\').\n/// \\return \\c true if we reached EOD or EOF while looking for a > token in\n///        a concatenated header name and diagnosed it. \\c false otherwise.\nbool Preprocessor::LexHeaderName(Token &FilenameTok, bool AllowMacroExpansion) {\n  if (FilenameTok.is(tok::less) && AllowMacroExpansion) {\n    // Consume tokens until we find a \'>\'.\n    // FIXME: A header-name could be formed starting or ending with an\n    // alternative token. It\'s not clear whether that\'s ill-formed in all\n    // cases.\n    while (FilenameTok.isNot(tok::greater)) {\n      if (FilenameTok.isOneOf(tok::eod, tok::eof)) {\n        Diag(Start, diag::note_matching) << tok::less;"},{"clang/lib/Parse/ParseCXXInlineMethods.cpp",959,"/// Consume tokens and store them in the passed token container until\n/// we\'ve passed the try keyword and constructor initializers and have consumed\n/// the opening brace of the function body. The opening brace will be consumed\n/// if and only if there was no error.\n///\n/// \\return True on error.\nbool Parser::ConsumeAndStoreFunctionPrologue(CachedTokens &Toks) {\n  while (true) {\n    // Skip over the mem-initializer-id, if possible.\n    if (Tok.is(tok::kw_decltype)) {\n      if (!ConsumeAndStoreUntil(tok::r_paren, Toks, /*StopAtSemi=*/true)) {\n        Diag(OpenLoc, diag::note_matching) << tok::l_paren;"},{"clang/lib/Parse/ParseCXXInlineMethods.cpp",1067,"/// Consume tokens and store them in the passed token container until\n/// we\'ve passed the try keyword and constructor initializers and have consumed\n/// the opening brace of the function body. The opening brace will be consumed\n/// if and only if there was no error.\n///\n/// \\return True on error.\nbool Parser::ConsumeAndStoreFunctionPrologue(CachedTokens &Toks) {\n  while (true) {\n    if (!ConsumeAndStoreUntil(CloseKind, Toks, /*StopAtSemi=*/true)) {\n      Diag(OpenLoc, diag::note_matching) << kind;"},{"clang/lib/Parse/ParseExpr.cpp",524,"/// Parse a binary expression that starts with \\p LHS and has a\n/// precedence of at least \\p MinPrec.\nExprResult Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {\n  while (true) {\n    if (NextTokPrec == prec::Conditional) {\n      if (!TryConsumeToken(tok::colon, ColonLoc)) {\n        Diag(OpToken, diag::note_matching) << tok::question;"},{"clang/lib/Parse/ParseExpr.cpp",2050,"/// Once the leading part of a postfix-expression is parsed, this\n/// method parses any suffixes that apply.\n///\n/// \\verbatim\n///      postfix-expression: [C99 6.5.2]\n///        primary-expression\n///        postfix-expression \'[\' expression \']\'\n///        postfix-expression \'[\' braced-init-list \']\'\n///        postfix-expression \'[\' expression-list [opt] \']\'  [C++23 12.4.5]\n///        postfix-expression \'(\' argument-expression-list[opt] \')\'\n///        postfix-expression \'.\' identifier\n///        postfix-expression \'->\' identifier\n///        postfix-expression \'++\'\n///        postfix-expression \'--\'\n///        \'(\' type-name \')\' \'{\' initializer-list \'}\'\n///        \'(\' type-name \')\' \'{\' initializer-list \',\' \'}\'\n///\n///      argument-expression-list: [C99 6.5.2]\n///        argument-expression ...[opt]\n///        argument-expression-list \',\' assignment-expression ...[opt]\n/// \\endverbatim\nExprResult Parser::ParsePostfixExpressionSuffix(ExprResult LHS) {\n  while (true) {\n    case tok::lesslessless: { // p-e: p-e \'<<<\' argument-expression-list \'>>>\'\n      if (OpKind == tok::lesslessless) {\n        if (TryConsumeToken(tok::greatergreatergreater, CloseLoc)) {\n        } else if (LHS.isInvalid()) {\n        } else {\n          Diag(OpenLoc, diag::note_matching) << tok::lesslessless;"},{"clang/lib/Parse/ParseExprCXX.cpp",1608,"/// ParseCXXCasts - This handles the various ways to cast expressions to another\n/// type.\n///\n///      postfix-expression: [C++ 5.2p1]\n///        \'dynamic_cast\' \'<\' type-name \'>\' \'(\' expression \')\'\n///        \'static_cast\' \'<\' type-name \'>\' \'(\' expression \')\'\n///        \'reinterpret_cast\' \'<\' type-name \'>\' \'(\' expression \')\'\n///        \'const_cast\' \'<\' type-name \'>\' \'(\' expression \')\'\n///\n/// C++ for OpenCL s2.3.1 adds:\n///        \'addrspace_cast\' \'<\' type-name \'>\' \'(\' expression \')\'\nExprResult Parser::ParseCXXCasts() {\n  if (ExpectAndConsume(tok::greater))\n    return ExprError(Diag(LAngleBracketLoc, diag::note_matching) << tok::less);"},{"clang/lib/Parse/ParseOpenMP.cpp",1990,"void Parser::parseOMPEndDirective(OpenMPDirectiveKind BeginKind, OpenMPDirectiveKind ExpectedKind, OpenMPDirectiveKind FoundKind, SourceLocation BeginLoc, SourceLocation FoundLoc, bool SkipUntilOpenMPEnd) {\n  Diag(BeginLoc, diag::note_matching) << (\"\'#pragma omp \" + getOpenMPDirectiveName(BeginKind) + \"\'\").str();"},{"clang/lib/Parse/Parser.cpp",2726,"bool BalancedDelimiterTracker::diagnoseMissingClose() {\n  P.Diag(LOpen, diag::note_matching) << Kind;"},{"clang/lib/Parse/ParseStmt.cpp",1874,"/// ParseDoStatement\n///      do-statement: [C99 6.8.5.2]\n///        \'do\' statement \'while\' \'(\' expression \')\' \';\'\n/// Note: this lets the caller parse the end \';\'.\nStmtResult Parser::ParseDoStatement() {\n  if (Tok.isNot(tok::kw_while)) {\n    if (!Body.isInvalid()) {\n      Diag(DoLoc, diag::note_matching) << \"\'do\'\";"},{"clang/lib/Parse/ParseStmtAsm.cpp",518,"/// ParseMicrosoftAsmStatement. When -fms-extensions/-fasm-blocks is enabled,\n/// this routine is called to collect the tokens for an MS asm statement.\n///\n/// [MS]  ms-asm-statement:\n///        ms-asm-block\n///        ms-asm-block ms-asm-statement\n///\n/// [MS]  ms-asm-block:\n///        \'__asm\' ms-asm-line \'\\n\'\n///        \'__asm\' \'{\' ms-asm-instruction-block[opt] \'}\' \';\'[opt]\n///\n/// [MS]  ms-asm-instruction-block\n///        ms-asm-line\n///        ms-asm-line \'\\n\' ms-asm-instruction-block\n///\nStmtResult Parser::ParseMicrosoftAsmStatement(SourceLocation AsmLoc) {\n  if (BraceNesting && BraceCount != savedBraceCount) {\n    // __asm without closing brace (this can happen at EOF).\n    for (unsigned i = 0; i < BraceNesting; ++i) {\n      Diag(LBraceLocs.back(), diag::note_matching) << tok::l_brace;"},{"clang/lib/Parse/ParseTemplate.cpp",1124,"/// Parses a \'>\' at the end of a template list.\n///\n/// If this function encounters \'>>\', \'>>>\', \'>=\', or \'>>=\', it tries\n/// to determine if these tokens were supposed to be a \'>\' followed by\n/// \'>\', \'>>\', \'>=\', or \'>=\'. It emits an appropriate diagnostic if necessary.\n///\n/// \\param RAngleLoc the location of the consumed \'>\'.\n///\n/// \\param ConsumeLastToken if true, the \'>\' is consumed.\n///\n/// \\param ObjCGenericList if true, this is the \'>\' closing an Objective-C\n/// type parameter or type argument list, rather than a C++ template parameter\n/// or argument list.\n///\n/// \\returns true, if current token does not start with \'>\', false otherwise.\nbool Parser::ParseGreaterThanInTemplateList(SourceLocation LAngleLoc, SourceLocation &RAngleLoc, bool ConsumeLastToken, bool ObjCGenericList) {\n  default:\n    Diag(LAngleLoc, diag::note_matching) << tok::less;"}},
[o]={
["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:58:1: note: to match this \'[\'"}
}
},
},
["note_max_tokens_total_override"]={
["note_max_tokens_total_override"]={
[f]="total token limit set here",
[b]="total token limit set here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="total token limit set here",
[h]="total token limit set here",
[g]=b,
[j]=i,
[e]="total token limit set here",
[k]="total token limit set here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[m]={"739b410f1ff5",1570627358,"Add a warning, flags and pragmas to limit the number of pre-processor tokens in a translation unit"},
[n]={{"clang/lib/Parse/Parser.cpp",704,"/// ParseTopLevelDecl - Parse one top-level declaration, return whatever the\n/// action tells us to.  This returns true if the EOF was encountered.\n///\n///  top-level-declaration:\n///          declaration\n/// [C++20]  module-import-declaration\nbool Parser::ParseTopLevelDecl(DeclGroupPtrTy &Result, Sema::ModuleImportState &ImportState) {\n  case tok::annot_repl_input_end:\n    // Check whether -fmax-tokens= was reached.\n    if (PP.getMaxTokens() != 0 && PP.getTokenCount() > PP.getMaxTokens()) {\n      if (OverrideLoc.isValid()) {\n        PP.Diag(OverrideLoc, diag::note_max_tokens_total_override);"}}
[n]={{"clang/lib/Parse/Parser.cpp",704,"/// ParseTopLevelDecl - Parse one top-level declaration, return whatever the\n/// action tells us to.  This returns true if the EOF was encountered.\n///\n///  top-level-declaration:\n///          declaration\n/// [C++20]  module-import-declaration\nbool Parser::ParseTopLevelDecl(DeclGroupPtrTy &Result, Sema::ModuleImportState &ImportState) {\n  case tok::annot_repl_input_end:\n    // Check whether -fmax-tokens= was reached.\n    if (PP.getMaxTokens() != 0 && PP.getTokenCount() > PP.getMaxTokens()) {\n      if (OverrideLoc.isValid()) {\n        PP.Diag(OverrideLoc, diag::note_max_tokens_total_override);"}},
[o]={
["clang/test/Parser/max-tokens.cpp"]={"clang/test/Parser/max-tokens.cpp:19:32: note: total token limit set here"}
}
},
},
["note_meant_to_use_typename"]={
["note_meant_to_use_typename"]={
[f]="did you mean to use \'typename\'?",
[b]="did you mean to use \'typename\'?",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="did you mean to use \'typename\'?",
[h]="did you mean to use \'typename\'?",
[g]=b,
[j]=i,
[e]="did you mean to use \'typename\'\\?",
[k]="did you mean to use \'typename\'\\?",
[d]=a,
[l]=a,
[c]="Generics Issue",
[c]="Generics Issue",
[m]={"3a98e51823be",1518100678,"[Parser][FixIt] Better diagnostics for \"typedef\" instead of \"typename\" typo"},
[m]={"3a98e51823be",1518100678,"[Parser][FixIt] Better diagnostics for \"typedef\" instead of \"typename\" typo"},
[n]={{"clang/lib/Parse/ParseTemplate.cpp",659,"/// ParseTemplateParameter - Parse a template-parameter (C++ [temp.param]).\n///\n///      template-parameter: [C++ temp.param]\n///        type-parameter\n///        parameter-declaration\n///\n///      type-parameter: (See below)\n///        type-parameter-key ...[opt] identifier[opt]\n///        type-parameter-key identifier[opt] = type-id\n/// (C++2a) type-constraint ...[opt] identifier[opt]\n/// (C++2a) type-constraint identifier[opt] = type-id\n///        \'template\' \'<\' template-parameter-list \'>\' type-parameter-key\n///              ...[opt] identifier[opt]\n///        \'template\' \'<\' template-parameter-list \'>\' type-parameter-key\n///              identifier[opt] \'=\' id-expression\n///\n///      type-parameter-key:\n///        class\n///        typename\n///\nNamedDecl *Parser::ParseTemplateParameter(unsigned Depth, unsigned Position) {\n  case TPResult::True:\n    // Is there just a typo in the input code? (\'typedef\' instead of\n    // \'typename\')\n    if (Tok.is(tok::kw_typedef)) {\n      Diag(Tok.getLocation(), diag::note_meant_to_use_typename) << FixItHint::CreateReplacement(CharSourceRange::getCharRange(Tok.getLocation(), Tok.getEndLoc()), \"typename\");"}}
[n]={{"clang/lib/Parse/ParseTemplate.cpp",659,"/// ParseTemplateParameter - Parse a template-parameter (C++ [temp.param]).\n///\n///      template-parameter: [C++ temp.param]\n///        type-parameter\n///        parameter-declaration\n///\n///      type-parameter: (See below)\n///        type-parameter-key ...[opt] identifier[opt]\n///        type-parameter-key identifier[opt] = type-id\n/// (C++2a) type-constraint ...[opt] identifier[opt]\n/// (C++2a) type-constraint identifier[opt] = type-id\n///        \'template\' \'<\' template-parameter-list \'>\' type-parameter-key\n///              ...[opt] identifier[opt]\n///        \'template\' \'<\' template-parameter-list \'>\' type-parameter-key\n///              identifier[opt] \'=\' id-expression\n///\n///      type-parameter-key:\n///        class\n///        typename\n///\nNamedDecl *Parser::ParseTemplateParameter(unsigned Depth, unsigned Position) {\n  case TPResult::True:\n    // Is there just a typo in the input code? (\'typedef\' instead of\n    // \'typename\')\n    if (Tok.is(tok::kw_typedef)) {\n      Diag(Tok.getLocation(), diag::note_meant_to_use_typename) << FixItHint::CreateReplacement(CharSourceRange::getCharRange(Tok.getLocation(), Tok.getEndLoc()), \"typename\");"}},
[o]={
["clang/test/FixIt/fixit-typedef-instead-of-typename-typo.cpp"]={"clang/test/FixIt/fixit-typedef-instead-of-typename-typo.cpp:3:23: note: did you mean to use \'typename\'?"}
}
},
},
["note_member_declared_at"]={
["note_member_declared_at"]={
[f]="member is declared here",
[b]="member is declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="member is declared here",
[h]="member is declared here",
[g]=b,
[j]=i,
[e]="member is declared here",
[k]="member is declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"2afa8780d62a",1401279614,"Consolidate some note diagnostics"},
[m]={"2afa8780d62a",1401279614,"Consolidate some note diagnostics"},
[n]={{"clang/lib/Sema/SemaAccess.cpp",1280,"/// Diagnose the path which caused the given declaration or base class\n/// to become inaccessible.\nstatic void DiagnoseAccessPath(Sema &S, const EffectiveContext &EC, AccessTarget &entity) {\n  if (entity.isMemberAccess())\n    S.Diag(entity.getTargetDecl()->getLocation(), diag::note_member_declared_at);"},{r,2327,"/// Diagnose a lookup that found results in an enclosing class during error\n/// recovery. This usually indicates that the results were found in a dependent\n/// base class that could not be searched as part of a template definition.\n/// Always issues a diagnostic (though this may be only a warning in MS\n/// compatibility mode).\n///\n/// Return \\c true if the error is unrecoverable, or \\c false if the caller\n/// should attempt to recover using these lookup results.\nbool Sema::DiagnoseDependentMemberLookup(const LookupResult &R) {\n  unsigned NoteID = diag::note_member_declared_at;"},{D,9898,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ConstructorOverloadFailed: {\n    case OR_No_Viable_Function:\n      if (Kind.getKind() == InitializationKind::IK_Default && (Entity.getKind() == InitializedEntity::EK_Base || Entity.getKind() == InitializedEntity::EK_Member || Entity.getKind() == InitializedEntity::EK_ParenAggInitMember) && isa<CXXConstructorDecl>(S.CurContext)) {\n        if (Entity.getKind() == InitializedEntity::EK_Base) {\n        } else {\n          S.Diag(Entity.getDecl()->getLocation(), diag::note_member_declared_at);"},{u,845,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n    if (isa<FunctionDecl>(Instantiation)) {\n    } else {\n      Note = diag::note_member_declared_at;"}}
[n]={{"clang/lib/Sema/SemaAccess.cpp",1280,"/// Diagnose the path which caused the given declaration or base class\n/// to become inaccessible.\nstatic void DiagnoseAccessPath(Sema &S, const EffectiveContext &EC, AccessTarget &entity) {\n  if (entity.isMemberAccess())\n    S.Diag(entity.getTargetDecl()->getLocation(), diag::note_member_declared_at);"},{s,2327,"/// Diagnose a lookup that found results in an enclosing class during error\n/// recovery. This usually indicates that the results were found in a dependent\n/// base class that could not be searched as part of a template definition.\n/// Always issues a diagnostic (though this may be only a warning in MS\n/// compatibility mode).\n///\n/// Return \\c true if the error is unrecoverable, or \\c false if the caller\n/// should attempt to recover using these lookup results.\nbool Sema::DiagnoseDependentMemberLookup(const LookupResult &R) {\n  unsigned NoteID = diag::note_member_declared_at;"},{K,9898,"bool InitializationSequence::Diagnose(Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef<Expr *> Args) {\n  case FK_ConstructorOverloadFailed: {\n    case OR_No_Viable_Function:\n      if (Kind.getKind() == InitializationKind::IK_Default && (Entity.getKind() == InitializedEntity::EK_Base || Entity.getKind() == InitializedEntity::EK_Member || Entity.getKind() == InitializedEntity::EK_ParenAggInitMember) && isa<CXXConstructorDecl>(S.CurContext)) {\n        if (Entity.getKind() == InitializedEntity::EK_Base) {\n        } else {\n          S.Diag(Entity.getDecl()->getLocation(), diag::note_member_declared_at);"},{v,845,"/// Determine whether we would be unable to instantiate this template (because\n/// it either has no definition, or is in the process of being instantiated).\nbool Sema::DiagnoseUninstantiableTemplate(SourceLocation PointOfInstantiation, NamedDecl *Instantiation, bool InstantiatedFromMember, const NamedDecl *Pattern, const NamedDecl *PatternDef, TemplateSpecializationKind TSK, bool Complain /*= true*/) {\n  if (PatternDef) {\n  } else if (InstantiatedFromMember) {\n    if (isa<FunctionDecl>(Instantiation)) {\n    } else {\n      Note = diag::note_member_declared_at;"}},
[o]={
["clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp"]={"clang/test/CXX/dcl.decl/dcl.init/p14-0x.cpp:32:12: note: member is declared here"}
}
},
},
["note_member_declared_here"]={
["note_member_declared_here"]={
[f]="member A declared here",
[b]="member A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="member %0 declared here",
[h]="member %0 declared here",
[g]=b,
[j]=i,
[e]="member (.*?) declared here",
[k]="member (.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"861eb80a3b9d",1272228908,"Improve the diagnostic when we find something we did not expect in a"},
[m]={"861eb80a3b9d",1272228908,"Improve the diagnostic when we find something we did not expect in a"},
[n]={{L,1270,"bool CoroutineStmtBuilder::makeReturnOnAllocFailure() {\n  if (ReturnStmt.isInvalid()) {\n    S.Diag(Found.getFoundDecl()->getLocation(), diag::note_member_declared_here) << DN;"},{L,1729,"static void noteMemberDeclaredHere(Sema &S, Expr *E, FunctionScopeInfo &Fn) {\n  if (auto *MbrRef = dyn_cast<CXXMemberCallExpr>(E)) {\n    S.Diag(MethodDecl->getLocation(), diag::note_member_declared_here) << MethodDecl;"},{K,2944,"bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, AllocationFunctionScope NewScope, AllocationFunctionScope DeleteScope, QualType AllocType, bool IsArray, bool &PassAlignment, MultiExprArg PlaceArgs, FunctionDecl *&OperatorNew, FunctionDecl *&OperatorDelete, bool Diagnose) {\n  // C++ [expr.new]p20:\n  //  [...] If the lookup finds a single matching deallocation\n  //  function, that function will be called; otherwise, no\n  //  deallocation function will be called.\n  if (Matches.size() == 1) {\n  } else if (!Matches.empty()) {\n    for (auto &Match : Matches)\n      Diag(Match.second->getLocation(), diag::note_member_declared_here) << DeleteName;"},{K,3303,"bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, DeclarationName Name, FunctionDecl *&Operator, bool Diagnose, bool WantSize, bool WantAligned) {\n  // We found multiple suitable operators; complain about the ambiguity.\n  // FIXME: The standard doesn\'t say to do this; it appears that the intent\n  // is that this should never happen.\n  if (!Matches.empty()) {\n    if (Diagnose) {\n      for (auto &Match : Matches)\n        Diag(Match.FD->getLocation(), diag::note_member_declared_here) << Name;"},{K,3317,"bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, DeclarationName Name, FunctionDecl *&Operator, bool Diagnose, bool WantSize, bool WantAligned) {\n  // We did find operator delete/operator delete[] declarations, but\n  // none of them were suitable.\n  if (!Found.empty()) {\n    if (Diagnose) {\n      for (NamedDecl *D : Found)\n        Diag(D->getUnderlyingDecl()->getLocation(), diag::note_member_declared_here) << Name;"},{"clang/lib/Sema/SemaExprMember.cpp",1182,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  Diag(MemberDecl->getLocation(), diag::note_member_declared_here) << MemberName;"}}
[n]={{T,1270,"bool CoroutineStmtBuilder::makeReturnOnAllocFailure() {\n  if (ReturnStmt.isInvalid()) {\n    S.Diag(Found.getFoundDecl()->getLocation(), diag::note_member_declared_here) << DN;"},{T,1729,"static void noteMemberDeclaredHere(Sema &S, Expr *E, FunctionScopeInfo &Fn) {\n  if (auto *MbrRef = dyn_cast<CXXMemberCallExpr>(E)) {\n    S.Diag(MethodDecl->getLocation(), diag::note_member_declared_here) << MethodDecl;"},{S,2944,"bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, AllocationFunctionScope NewScope, AllocationFunctionScope DeleteScope, QualType AllocType, bool IsArray, bool &PassAlignment, MultiExprArg PlaceArgs, FunctionDecl *&OperatorNew, FunctionDecl *&OperatorDelete, bool Diagnose) {\n  // C++ [expr.new]p20:\n  //  [...] If the lookup finds a single matching deallocation\n  //  function, that function will be called; otherwise, no\n  //  deallocation function will be called.\n  if (Matches.size() == 1) {\n  } else if (!Matches.empty()) {\n    for (auto &Match : Matches)\n      Diag(Match.second->getLocation(), diag::note_member_declared_here) << DeleteName;"},{S,3303,"bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, DeclarationName Name, FunctionDecl *&Operator, bool Diagnose, bool WantSize, bool WantAligned) {\n  // We found multiple suitable operators; complain about the ambiguity.\n  // FIXME: The standard doesn\'t say to do this; it appears that the intent\n  // is that this should never happen.\n  if (!Matches.empty()) {\n    if (Diagnose) {\n      for (auto &Match : Matches)\n        Diag(Match.FD->getLocation(), diag::note_member_declared_here) << Name;"},{S,3317,"bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, DeclarationName Name, FunctionDecl *&Operator, bool Diagnose, bool WantSize, bool WantAligned) {\n  // We did find operator delete/operator delete[] declarations, but\n  // none of them were suitable.\n  if (!Found.empty()) {\n    if (Diagnose) {\n      for (NamedDecl *D : Found)\n        Diag(D->getUnderlyingDecl()->getLocation(), diag::note_member_declared_here) << Name;"},{"clang/lib/Sema/SemaExprMember.cpp",1182,"ExprResult Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType, SourceLocation OpLoc, bool IsArrow, const CXXScopeSpec &SS, SourceLocation TemplateKWLoc, NamedDecl *FirstQualifierInScope, LookupResult &R, const TemplateArgumentListInfo *TemplateArgs, const Scope *S, bool SuppressQualifierCheck, ActOnMemberAccessExtraArgs *ExtraArgs) {\n  Diag(MemberDecl->getLocation(), diag::note_member_declared_here) << MemberName;"}},
[o]={
["clang/test/SemaCXX/coroutine-no-valid-dealloc.cpp"]={"clang/test/SemaCXX/coroutine-no-valid-dealloc.cpp:20:10: note: member \'operator delete\' declared here","clang/test/SemaCXX/coroutine-no-valid-dealloc.cpp:20:10: note: member \'operator delete\' declared here"}
}
},
},
["note_member_def_close_const_match"]={
["note_member_def_close_const_match"]={
[f]="member declaration does not match because it ... const qualified",
[b]="member declaration does not match because it ... const qualified",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="member declaration does not match because it %select{is|is not}0 const qualified",
[h]="member declaration does not match because it %select{is|is not}0 const qualified",
[g]=b,
[j]=i,
[e]="member declaration does not match because it (?:is|is not) const qualified",
[k]="member declaration does not match because it (?:is|is not) const qualified",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"1a6eb99d45e5",1318269697,"Give nicer note when a member redeclaration has or lacks \'const\'"},
[m]={"1a6eb99d45e5",1318269697,"Give nicer note when a member redeclaration has or lacks \'const\'"},
[n]={{t,9080,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  for (SmallVectorImpl<std::pair<FunctionDecl *, unsigned>>::iterator NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end(); NearMatch != NearMatchEnd; ++NearMatch) {\n    // FIXME: These notes are poorly worded for the local friend case.\n    if (unsigned Idx = NearMatch->second) {\n    } else if (FDisConst != NewFDisConst) {\n      SemaRef.Diag(FD->getLocation(), diag::note_member_def_close_const_match) << NewFDisConst << FD->getSourceRange().getEnd() << (NewFDisConst ? FixItHint::CreateRemoval(ExtraArgs.D.getFunctionTypeInfo().getConstQualifierLoc()) : FixItHint::CreateInsertion(ExtraArgs.D.getFunctionTypeInfo().getRParenLoc().getLocWithOffset(1), \" const\"));"}}
[n]={{u,9080,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  for (SmallVectorImpl<std::pair<FunctionDecl *, unsigned>>::iterator NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end(); NearMatch != NearMatchEnd; ++NearMatch) {\n    // FIXME: These notes are poorly worded for the local friend case.\n    if (unsigned Idx = NearMatch->second) {\n    } else if (FDisConst != NewFDisConst) {\n      SemaRef.Diag(FD->getLocation(), diag::note_member_def_close_const_match) << NewFDisConst << FD->getSourceRange().getEnd() << (NewFDisConst ? FixItHint::CreateRemoval(ExtraArgs.D.getFunctionTypeInfo().getConstQualifierLoc()) : FixItHint::CreateInsertion(ExtraArgs.D.getFunctionTypeInfo().getRParenLoc().getLocWithOffset(1), \" const\"));"}},
[o]={
["clang/test/SemaCXX/function-redecl.cpp"]={"clang/test/SemaCXX/function-redecl.cpp:74:8: note: member declaration does not match because it is const qualified","clang/test/SemaCXX/function-redecl.cpp:94:7: note: member declaration does not match because it is const qualified","clang/test/SemaCXX/function-redecl.cpp:95:8: note: member declaration does not match because it is not const qualified"}
}
},
},
["note_member_def_close_match"]={
["note_member_def_close_match"]={
[f]="member declaration nearly matches",
[b]="member declaration nearly matches",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="member declaration nearly matches",
[h]="member declaration nearly matches",
[g]=b,
[j]=i,
[e]="member declaration nearly matches",
[k]="member declaration nearly matches",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files."},
[m]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files."},
[n]={{t,9091,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  for (SmallVectorImpl<std::pair<FunctionDecl *, unsigned>>::iterator NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end(); NearMatch != NearMatchEnd; ++NearMatch) {\n    // FIXME: These notes are poorly worded for the local friend case.\n    if (unsigned Idx = NearMatch->second) {\n    } else if (FDisConst != NewFDisConst) {\n    } else\n      SemaRef.Diag(FD->getLocation(), IsMember ? diag::note_member_def_close_match : diag::note_local_decl_close_match);"}}
[n]={{u,9091,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  for (SmallVectorImpl<std::pair<FunctionDecl *, unsigned>>::iterator NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end(); NearMatch != NearMatchEnd; ++NearMatch) {\n    // FIXME: These notes are poorly worded for the local friend case.\n    if (unsigned Idx = NearMatch->second) {\n    } else if (FDisConst != NewFDisConst) {\n    } else\n      SemaRef.Diag(FD->getLocation(), IsMember ? diag::note_member_def_close_match : diag::note_local_decl_close_match);"}},
[o]={
["clang/test/SemaCXX/attr-target-mv.cpp"]={"clang/test/SemaCXX/attr-target-mv.cpp:188:53: note: member declaration nearly matches","clang/test/SemaCXX/attr-target-mv.cpp:189:54: note: member declaration nearly matches"}
}
},
},
["note_member_def_close_param_match"]={
["note_member_def_close_param_match"]={
[f]="type of A parameter of member declaration does not match definition (B vs C)",
[b]="type of A parameter of member declaration does not match definition (B vs C)",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="type of %ordinal0 parameter of member declaration does not match definition%diff{ ($ vs $)|}1,2",
[h]="type of %ordinal0 parameter of member declaration does not match definition%diff{ ($ vs $)|}1,2",
[g]=b,
[j]=i,
[e]="type of (.*?) parameter of member declaration does not match definition(?: \\((.*?) vs (.*?)\\)|)",
[k]="type of (.*?) parameter of member declaration does not match definition(?: \\((.*?) vs (.*?)\\)|)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"7d9bc633d246",1312479600,"Match type names and give more info for out-of-line function definition errors."},
[m]={"7d9bc633d246",1312479600,"Match type names and give more info for out-of-line function definition errors."},
[n]={{t,9075,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  for (SmallVectorImpl<std::pair<FunctionDecl *, unsigned>>::iterator NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end(); NearMatch != NearMatchEnd; ++NearMatch) {\n    // FIXME: These notes are poorly worded for the local friend case.\n    if (unsigned Idx = NearMatch->second) {\n      SemaRef.Diag(Loc, IsMember ? diag::note_member_def_close_param_match : diag::note_local_decl_close_param_match) << Idx << FDParam->getType() << NewFD->getParamDecl(Idx - 1)->getType();"}}
[n]={{u,9075,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  for (SmallVectorImpl<std::pair<FunctionDecl *, unsigned>>::iterator NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end(); NearMatch != NearMatchEnd; ++NearMatch) {\n    // FIXME: These notes are poorly worded for the local friend case.\n    if (unsigned Idx = NearMatch->second) {\n      SemaRef.Diag(Loc, IsMember ? diag::note_member_def_close_param_match : diag::note_local_decl_close_param_match) << Idx << FDParam->getType() << NewFD->getParamDecl(Idx - 1)->getType();"}},
[o]={
["clang/test/SemaCXX/out-of-line-def-mismatch.cpp"]={"clang/test/SemaCXX/out-of-line-def-mismatch.cpp:10:17: note: type of 1st parameter of member declaration does not match definition (\'S1 *\' (aka \'N2::S1 *\') vs \'S1 *\' (aka \'N2::N1::S1 *\'))","clang/test/SemaCXX/out-of-line-def-mismatch.cpp:11:38: note: type of 3rd parameter of member declaration does not match definition (\'const S1 *\' (aka \'const N2::S1 *\') vs \'const S1 *\' (aka \'const N2::N1::S1 *\'))","clang/test/SemaCXX/out-of-line-def-mismatch.cpp:12:23: note: type of 1st parameter of member declaration does not match definition (\'const S1 *\' vs \'S1\')","clang/test/SemaCXX/out-of-line-def-mismatch.cpp:13:17: note: type of 1st parameter of member declaration does not match definition (\'unsigned int\' vs \'unsigned int *\')"}
}
},
},
["note_member_first_declared_here"]={
["note_member_first_declared_here"]={
[f]="member A first declared here",
[b]="member A first declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="member %0 first declared here",
[h]="member %0 first declared here",
[g]=b,
[j]=i,
[e]="member (.*?) first declared here",
[k]="member (.*?) first declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"fc50f62caafd",1495724379,"[coroutines] Diagnose when promise types fail to declare either return_void or return_value."},
[m]={"fc50f62caafd",1495724379,"[coroutines] Diagnose when promise types fail to declare either return_void or return_value."},
[n]={{L,1635,"bool CoroutineStmtBuilder::makeOnFallthrough() {\n  if (HasRVoid && HasRValue) {\n    S.Diag(LRVoid.getRepresentativeDecl()->getLocation(), diag::note_member_first_declared_here) << LRVoid.getLookupName();"},{L,1638,"bool CoroutineStmtBuilder::makeOnFallthrough() {\n  if (HasRVoid && HasRValue) {\n    S.Diag(LRValue.getRepresentativeDecl()->getLocation(), diag::note_member_first_declared_here) << LRValue.getLookupName();"}}
[n]={{T,1635,"bool CoroutineStmtBuilder::makeOnFallthrough() {\n  if (HasRVoid && HasRValue) {\n    S.Diag(LRVoid.getRepresentativeDecl()->getLocation(), diag::note_member_first_declared_here) << LRVoid.getLookupName();"},{T,1638,"bool CoroutineStmtBuilder::makeOnFallthrough() {\n  if (HasRVoid && HasRValue) {\n    S.Diag(LRValue.getRepresentativeDecl()->getLocation(), diag::note_member_first_declared_here) << LRValue.getLookupName();"}},
[o]={
["clang/test/SemaCXX/coroutines.cpp"]={"clang/test/SemaCXX/coroutines.cpp:632:8: note: member \'return_void\' first declared here","clang/test/SemaCXX/coroutines.cpp:633:8: note: member \'return_value\' first declared here","clang/test/SemaCXX/coroutines.cpp:632:8: note: member \'return_void\' first declared here","clang/test/SemaCXX/coroutines.cpp:633:8: note: member \'return_value\' first declared here"}
}
},
},
["note_member_reference_arrow_from_operator_arrow"]={
["note_member_reference_arrow_from_operator_arrow"]={
[f]="\'->\' applied to return value of the operator->() declared here",
[b]="\'->\' applied to return value of the operator->() declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="\'->\' applied to return value of the operator->() declared here",
[h]="\'->\' applied to return value of the operator->() declared here",
[g]=b,
[j]=i,
[e]="\'\\-\\>\' applied to return value of the operator\\-\\>\\(\\) declared here",
[k]="\'\\-\\>\' applied to return value of the operator\\-\\>\\(\\) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"0c51de4ab1ae",1375292304,"Improve the diagnostic experience, including adding recovery, for"},
[m]={"0c51de4ab1ae",1375292304,"Improve the diagnostic experience, including adding recovery, for"},
[n]={{K,7619,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    while (BaseType->isRecordType()) {\n      if (Result.isInvalid()) {\n        if (NoArrowOperatorFound) {\n          if (Decl *CD = (CE ? CE->getCalleeDecl() : nullptr)) {\n            Diag(CD->getBeginLoc(), diag::note_member_reference_arrow_from_operator_arrow);"}}
[n]={{S,7619,"ExprResult Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, tok::TokenKind OpKind, ParsedType &ObjectType, bool &MayBePseudoDestructor) {\n  // C++ [over.match.oper]p8:\n  //  [...] When operator->returns, the operator-> is applied  to the value\n  //  returned, with the original second operand.\n  if (OpKind == tok::arrow) {\n    while (BaseType->isRecordType()) {\n      if (Result.isInvalid()) {\n        if (NoArrowOperatorFound) {\n          if (Decl *CD = (CE ? CE->getCalleeDecl() : nullptr)) {\n            Diag(CD->getBeginLoc(), diag::note_member_reference_arrow_from_operator_arrow);"}},
[o]={
["clang/test/SemaHLSL/prohibit_pointer.hlsl"]={"clang/test/SemaHLSL/prohibit_pointer.hlsl:70:3: note: \'->\' applied to return value of the operator->() declared here"}
}
},
},
["note_member_synthesized_at"]={
["note_member_synthesized_at"]={
[f]="in ... ... for A first required here",
[b]="in ... ... for A first required here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="in %select{implicit|defaulted}0 %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}1 for %2 first required here",
[h]="in %select{implicit|defaulted}0 %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}1 for %2 first required here",
[g]=b,
[j]=i,
[e]="in (?:implicit|defaulted) (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) for (.*?) first required here",
[k]="in (?:implicit|defaulted) (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) for (.*?) first required here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"26a807d37a67",1259616290,"When we\'re trying to define an implicit virtual destructor, make sure that we have a valid delete op..."},
[m]={"26a807d37a67",1259616290,"When we\'re trying to define an implicit virtual destructor, make sure that we have a valid delete op..."},
[n]={{z,975,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DefiningSynthesizedFunction: {\n      if (DFK.isSpecialMember()) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_member_synthesized_at) << MD->isExplicitlyDefaulted() << DFK.asSpecialMember() << Context.getTagDeclType(MD->getParent());"}}
[n]={{G,975,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::DefiningSynthesizedFunction: {\n      if (DFK.isSpecialMember()) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_member_synthesized_at) << MD->isExplicitlyDefaulted() << DFK.asSpecialMember() << Context.getTagDeclType(MD->getParent());"}},
[o]={
["clang/test/SemaCXX/ms-implicit-complete-dtor.cpp"]={"clang/test/SemaCXX/ms-implicit-complete-dtor.cpp:20:22: note: in implicit destructor for \'t1::C\' first required here","clang/test/SemaCXX/ms-implicit-complete-dtor.cpp:36:30: note: in implicit destructor for \'t2::C\' first required here","clang/test/SemaCXX/ms-implicit-complete-dtor.cpp:50:37: note: in implicit destructor for \'t3::Derived2\' first required here"}
}
},
},
["note_memsize_comparison_cast_silence"]={
["note_memsize_comparison_cast_silence"]={
[f]="explicitly cast the argument to size_t to silence this warning",
[b]="explicitly cast the argument to size_t to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="explicitly cast the argument to size_t to silence this warning",
[h]="explicitly cast the argument to size_t to silence this warning",
[g]=b,
[j]=i,
[e]="explicitly cast the argument to size_t to silence this warning",
[k]="explicitly cast the argument to size_t to silence this warning",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"},
[m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"},
[n]={{y,12175,"/// Takes the expression passed to the size_t parameter of functions\n/// such as memcmp, strncat, etc and warns if it\'s a comparison.\n///\n/// This is to catch typos like `if (memcmp(&a, &b, sizeof(a) > 0))`.\nstatic bool CheckMemorySizeofForComparison(Sema &S, const Expr *E, IdentifierInfo *FnName, SourceLocation FnLoc, SourceLocation RParenLoc) {\n  S.Diag(SizeRange.getBegin(), diag::note_memsize_comparison_cast_silence) << FixItHint::CreateInsertion(SizeRange.getBegin(), \"(size_t)(\") << FixItHint::CreateInsertion(S.getLocForEndOfToken(SizeRange.getEnd()), \")\");"}}
[n]={{D,12175,"/// Takes the expression passed to the size_t parameter of functions\n/// such as memcmp, strncat, etc and warns if it\'s a comparison.\n///\n/// This is to catch typos like `if (memcmp(&a, &b, sizeof(a) > 0))`.\nstatic bool CheckMemorySizeofForComparison(Sema &S, const Expr *E, IdentifierInfo *FnName, SourceLocation FnLoc, SourceLocation RParenLoc) {\n  S.Diag(SizeRange.getBegin(), diag::note_memsize_comparison_cast_silence) << FixItHint::CreateInsertion(SizeRange.getBegin(), \"(size_t)(\") << FixItHint::CreateInsertion(S.getLocForEndOfToken(SizeRange.getEnd()), \")\");"}},
[o]={
["clang/test/SemaCXX/warn-memsize-comparison.cpp"]={"clang/test/SemaCXX/warn-memsize-comparison.cpp:19:21: note: explicitly cast the argument to size_t to silence this warning","clang/test/SemaCXX/warn-memsize-comparison.cpp:25:23: note: explicitly cast the argument to size_t to silence this warning","clang/test/SemaCXX/warn-memsize-comparison.cpp:32:22: note: explicitly cast the argument to size_t to silence this warning","clang/test/SemaCXX/warn-memsize-comparison.cpp:38:22: note: explicitly cast the argument to size_t to silence this warning","clang/test/SemaCXX/warn-memsize-comparison.cpp:44:23: note: explicitly cast the argument to size_t to silence this warning","clang/test/SemaCXX/warn-memsize-comparison.cpp:50:27: note: explicitly cast the argument to size_t to silence this warning","clang/test/SemaCXX/warn-memsize-comparison.cpp:56:23: note: explicitly cast the argument to size_t to silence this warning","clang/test/SemaCXX/warn-memsize-comparison.cpp:63:23: note: explicitly cast the argument to size_t to silence this warning","clang/test/SemaCXX/warn-memsize-comparison.cpp:69:19: note: explicitly cast the argument to size_t to silence this warning","clang/test/SemaCXX/warn-memsize-comparison.cpp:75:23: note: explicitly cast the argument to size_t to silence this warning","clang/test/SemaCXX/warn-memsize-comparison.cpp:81:23: note: explicitly cast the argument to size_t to silence this warning"}
}
},
},
["note_memsize_comparison_paren"]={
["note_memsize_comparison_paren"]={
[f]="did you mean to compare the result of A instead?",
[b]="did you mean to compare the result of A instead?",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="did you mean to compare the result of %0 instead?",
[h]="did you mean to compare the result of %0 instead?",
[g]=b,
[j]=i,
[e]="did you mean to compare the result of (.*?) instead\\?",
[k]="did you mean to compare the result of (.*?) instead\\?",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"},
[m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"},
[n]={{y,12170,"/// Takes the expression passed to the size_t parameter of functions\n/// such as memcmp, strncat, etc and warns if it\'s a comparison.\n///\n/// This is to catch typos like `if (memcmp(&a, &b, sizeof(a) > 0))`.\nstatic bool CheckMemorySizeofForComparison(Sema &S, const Expr *E, IdentifierInfo *FnName, SourceLocation FnLoc, SourceLocation RParenLoc) {\n  S.Diag(FnLoc, diag::note_memsize_comparison_paren) << FnName << FixItHint::CreateInsertion(S.getLocForEndOfToken(Size->getLHS()->getEndLoc()), \")\") << FixItHint::CreateRemoval(RParenLoc);"}}
[n]={{D,12170,"/// Takes the expression passed to the size_t parameter of functions\n/// such as memcmp, strncat, etc and warns if it\'s a comparison.\n///\n/// This is to catch typos like `if (memcmp(&a, &b, sizeof(a) > 0))`.\nstatic bool CheckMemorySizeofForComparison(Sema &S, const Expr *E, IdentifierInfo *FnName, SourceLocation FnLoc, SourceLocation RParenLoc) {\n  S.Diag(FnLoc, diag::note_memsize_comparison_paren) << FnName << FixItHint::CreateInsertion(S.getLocForEndOfToken(Size->getLHS()->getEndLoc()), \")\") << FixItHint::CreateRemoval(RParenLoc);"}},
[o]={
["clang/test/SemaCXX/warn-memsize-comparison.cpp"]={"clang/test/SemaCXX/warn-memsize-comparison.cpp:19:7: note: did you mean to compare the result of \'memset\' instead?","clang/test/SemaCXX/warn-memsize-comparison.cpp:25:7: note: did you mean to compare the result of \'memmove\' instead?","clang/test/SemaCXX/warn-memsize-comparison.cpp:32:7: note: did you mean to compare the result of \'memcpy\' instead?","clang/test/SemaCXX/warn-memsize-comparison.cpp:38:7: note: did you mean to compare the result of \'memcmp\' instead?","clang/test/SemaCXX/warn-memsize-comparison.cpp:44:7: note: did you mean to compare the result of \'strncmp\' instead?","clang/test/SemaCXX/warn-memsize-comparison.cpp:50:7: note: did you mean to compare the result of \'strncasecmp\' instead?","clang/test/SemaCXX/warn-memsize-comparison.cpp:56:7: note: did you mean to compare the result of \'strncpy\' instead?","clang/test/SemaCXX/warn-memsize-comparison.cpp:63:7: note: did you mean to compare the result of \'strncat\' instead?","clang/test/SemaCXX/warn-memsize-comparison.cpp:69:7: note: did you mean to compare the result of \'strndup\' instead?","clang/test/SemaCXX/warn-memsize-comparison.cpp:75:7: note: did you mean to compare the result of \'strlcpy\' instead?","clang/test/SemaCXX/warn-memsize-comparison.cpp:81:7: note: did you mean to compare the result of \'strlcat\' instead?"}
}
},
},
["note_method_declared_at"]={
["note_method_declared_at"]={
[f]="method A declared here",
[b]="method A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="method %0 declared here",
[h]="method %0 declared here",
[g]=b,
[j]=i,
[e]="method (.*?) declared here",
[k]="method (.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"e5c1bda4d177",1288394405,"Improve diagnostics reporting of un-implemented"},
[m]={"e5c1bda4d177",1288394405,"Improve diagnostics reporting of un-implemented"},
[n]={{E,303,"static void DiagnoseObjCImplementedDeprecations(Sema &S, const NamedDecl *ND, SourceLocation ImplLoc) {\n  if (Availability != AR_Deprecated) {\n    if (isa<ObjCMethodDecl>(ND)) {\n      S.Diag(ND->getLocation(), diag::note_method_declared_at) << ND->getDeclName();"},{E,321,"static void DiagnoseObjCImplementedDeprecations(Sema &S, const NamedDecl *ND, SourceLocation ImplLoc) {\n  if (isa<ObjCMethodDecl>(ND))\n    S.Diag(ND->getLocation(), diag::note_method_declared_at) << ND->getDeclName();"},{E,2267,"static void WarnUndefinedMethod(Sema &S, ObjCImplDecl *Impl, ObjCMethodDecl *method, bool &IncompleteImpl, unsigned DiagID, NamedDecl *NeededFor = nullptr) {\n  if (MethodLoc.isValid())\n    S.Diag(MethodLoc, diag::note_method_declared_at) << method;"},{E,2666,"/// WarnExactTypedMethods - This routine issues a warning if method\n/// implementation declaration matches exactly that of its declaration.\nvoid Sema::WarnExactTypedMethods(ObjCMethodDecl *ImpMethodDecl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl) {\n  if (match) {\n    Diag(MethodDecl->getLocation(), diag::note_method_declared_at) << MethodDecl->getDeclName();"},{s,1195,"static bool HelperToDiagnoseMismatchedMethodsInGlobalPool(Sema &S, SourceLocation AtLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, ObjCMethodDecl *Method, ObjCMethodList &MethList) {\n  for (M = M->getNext(); M; M = M->getNext()) {\n    if (!S.MatchTwoMethodDeclarations(Method, MatchingMethodDecl, Sema::MMS_loose)) {\n      if (!Warned) {\n        S.Diag(Method->getLocation(), diag::note_method_declared_at) << Method->getDeclName();"},{s,1198,"static bool HelperToDiagnoseMismatchedMethodsInGlobalPool(Sema &S, SourceLocation AtLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, ObjCMethodDecl *Method, ObjCMethodList &MethList) {\n  for (M = M->getNext(); M; M = M->getNext()) {\n    if (!S.MatchTwoMethodDeclarations(Method, MatchingMethodDecl, Sema::MMS_loose)) {\n      S.Diag(MatchingMethodDecl->getLocation(), diag::note_method_declared_at) << MatchingMethodDecl->getDeclName();"},{s,2574,"/// Diagnose use of %s directive in an NSString which is being passed\n/// as formatting string to formatting method.\nstatic void DiagnoseCStringFormatDirectiveInObjCAPI(Sema &S, ObjCMethodDecl *Method, Selector Sel, Expr **Args, unsigned NumArgs) {\n  if (ObjCStringLiteral *OSL = dyn_cast<ObjCStringLiteral>(FormatExpr->IgnoreParenImpCasts())) {\n    if (S.FormatStringHasSArg(FormatString)) {\n      if (Method)\n        S.Diag(Method->getLocation(), diag::note_method_declared_at) << Method->getDeclName();"},{s,2719,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // Warn about explicit call of +initialize on its own class. But not on \'super\'.\n  if (Method && Method->getMethodFamily() == OMF_initialize) {\n    if (!SuperLoc.isValid()) {\n      if (ID == Class) {\n        Diag(Method->getLocation(), diag::note_method_declared_at) << Method->getDeclName();"},{s,2727,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // Warn about explicit call of +initialize on its own class. But not on \'super\'.\n  if (Method && Method->getMethodFamily() == OMF_initialize) {\n    if (!SuperLoc.isValid()) {\n    } else if (ObjCMethodDecl *CurMeth = getCurMethodDecl()) {\n      // [super initialize] is allowed only within an +initialize implementation\n      if (CurMeth->getMethodFamily() != OMF_initialize) {\n        Diag(Method->getLocation(), diag::note_method_declared_at) << Method->getDeclName();"},{s,2729,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // Warn about explicit call of +initialize on its own class. But not on \'super\'.\n  if (Method && Method->getMethodFamily() == OMF_initialize) {\n    if (!SuperLoc.isValid()) {\n    } else if (ObjCMethodDecl *CurMeth = getCurMethodDecl()) {\n      // [super initialize] is allowed only within an +initialize implementation\n      if (CurMeth->getMethodFamily() != OMF_initialize) {\n        Diag(CurMeth->getLocation(), diag::note_method_declared_at) << CurMeth->getDeclName();"},{s,2988,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (!Method) {\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n      // Handle messages to Class.\n      // We allow sending a message to a qualified Class (\"Class<foo>\"), which\n      // is ok as long as one of the protocols implements the selector (if not,\n      // warn).\n      if (!ReceiverType->isObjCClassOrClassKindOfType()) {\n        if (!Method) {\n          // warn if instance method found for a Class message.\n          if (Method && !isMethodDeclaredInRootProtocol(*this, Method)) {\n            Diag(Method->getLocation(), diag::note_method_declared_at) << Method->getDeclName();"},{s,3298,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n          if (SelMethod) {\n            case OMF_init:\n              // Issue error, unless ns_returns_not_retained.\n              if (!SelMethod->hasAttr<NSReturnsNotRetainedAttr>()) {\n                Diag(SelMethod->getLocation(), diag::note_method_declared_at) << SelMethod->getDeclName();"},{s,3308,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n          if (SelMethod) {\n            default:\n              // +0 call. OK. unless ns_returns_retained.\n              if (SelMethod->hasAttr<NSReturnsRetainedAttr>()) {\n                Diag(SelMethod->getLocation(), diag::note_method_declared_at) << SelMethod->getDeclName();"},{"clang/lib/Sema/SemaPseudoObject.cpp",1239,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  if (AtIndexGetter) {\n    if (!R->isObjCObjectPointerType()) {\n      S.Diag(AtIndexGetter->getLocation(), diag::note_method_declared_at) << AtIndexGetter->getDeclName();"}}
[n]={{M,303,"static void DiagnoseObjCImplementedDeprecations(Sema &S, const NamedDecl *ND, SourceLocation ImplLoc) {\n  if (Availability != AR_Deprecated) {\n    if (isa<ObjCMethodDecl>(ND)) {\n      S.Diag(ND->getLocation(), diag::note_method_declared_at) << ND->getDeclName();"},{M,321,"static void DiagnoseObjCImplementedDeprecations(Sema &S, const NamedDecl *ND, SourceLocation ImplLoc) {\n  if (isa<ObjCMethodDecl>(ND))\n    S.Diag(ND->getLocation(), diag::note_method_declared_at) << ND->getDeclName();"},{M,2267,"static void WarnUndefinedMethod(Sema &S, ObjCImplDecl *Impl, ObjCMethodDecl *method, bool &IncompleteImpl, unsigned DiagID, NamedDecl *NeededFor = nullptr) {\n  if (MethodLoc.isValid())\n    S.Diag(MethodLoc, diag::note_method_declared_at) << method;"},{M,2666,"/// WarnExactTypedMethods - This routine issues a warning if method\n/// implementation declaration matches exactly that of its declaration.\nvoid Sema::WarnExactTypedMethods(ObjCMethodDecl *ImpMethodDecl, ObjCMethodDecl *MethodDecl, bool IsProtocolMethodDecl) {\n  if (match) {\n    Diag(MethodDecl->getLocation(), diag::note_method_declared_at) << MethodDecl->getDeclName();"},{t,1195,"static bool HelperToDiagnoseMismatchedMethodsInGlobalPool(Sema &S, SourceLocation AtLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, ObjCMethodDecl *Method, ObjCMethodList &MethList) {\n  for (M = M->getNext(); M; M = M->getNext()) {\n    if (!S.MatchTwoMethodDeclarations(Method, MatchingMethodDecl, Sema::MMS_loose)) {\n      if (!Warned) {\n        S.Diag(Method->getLocation(), diag::note_method_declared_at) << Method->getDeclName();"},{t,1198,"static bool HelperToDiagnoseMismatchedMethodsInGlobalPool(Sema &S, SourceLocation AtLoc, SourceLocation LParenLoc, SourceLocation RParenLoc, ObjCMethodDecl *Method, ObjCMethodList &MethList) {\n  for (M = M->getNext(); M; M = M->getNext()) {\n    if (!S.MatchTwoMethodDeclarations(Method, MatchingMethodDecl, Sema::MMS_loose)) {\n      S.Diag(MatchingMethodDecl->getLocation(), diag::note_method_declared_at) << MatchingMethodDecl->getDeclName();"},{t,2574,"/// Diagnose use of %s directive in an NSString which is being passed\n/// as formatting string to formatting method.\nstatic void DiagnoseCStringFormatDirectiveInObjCAPI(Sema &S, ObjCMethodDecl *Method, Selector Sel, Expr **Args, unsigned NumArgs) {\n  if (ObjCStringLiteral *OSL = dyn_cast<ObjCStringLiteral>(FormatExpr->IgnoreParenImpCasts())) {\n    if (S.FormatStringHasSArg(FormatString)) {\n      if (Method)\n        S.Diag(Method->getLocation(), diag::note_method_declared_at) << Method->getDeclName();"},{t,2719,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // Warn about explicit call of +initialize on its own class. But not on \'super\'.\n  if (Method && Method->getMethodFamily() == OMF_initialize) {\n    if (!SuperLoc.isValid()) {\n      if (ID == Class) {\n        Diag(Method->getLocation(), diag::note_method_declared_at) << Method->getDeclName();"},{t,2727,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // Warn about explicit call of +initialize on its own class. But not on \'super\'.\n  if (Method && Method->getMethodFamily() == OMF_initialize) {\n    if (!SuperLoc.isValid()) {\n    } else if (ObjCMethodDecl *CurMeth = getCurMethodDecl()) {\n      // [super initialize] is allowed only within an +initialize implementation\n      if (CurMeth->getMethodFamily() != OMF_initialize) {\n        Diag(Method->getLocation(), diag::note_method_declared_at) << Method->getDeclName();"},{t,2729,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // Warn about explicit call of +initialize on its own class. But not on \'super\'.\n  if (Method && Method->getMethodFamily() == OMF_initialize) {\n    if (!SuperLoc.isValid()) {\n    } else if (ObjCMethodDecl *CurMeth = getCurMethodDecl()) {\n      // [super initialize] is allowed only within an +initialize implementation\n      if (CurMeth->getMethodFamily() != OMF_initialize) {\n        Diag(CurMeth->getLocation(), diag::note_method_declared_at) << CurMeth->getDeclName();"},{t,2988,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (!Method) {\n    if (receiverIsIdLike || ReceiverType->isBlockPointerType() || (Receiver && Context.isObjCNSObjectType(Receiver->getType()))) {\n    } else if (ReceiverType->isObjCClassOrClassKindOfType() || ReceiverType->isObjCQualifiedClassType()) {\n      // Handle messages to Class.\n      // We allow sending a message to a qualified Class (\"Class<foo>\"), which\n      // is ok as long as one of the protocols implements the selector (if not,\n      // warn).\n      if (!ReceiverType->isObjCClassOrClassKindOfType()) {\n        if (!Method) {\n          // warn if instance method found for a Class message.\n          if (Method && !isMethodDeclaredInRootProtocol(*this, Method)) {\n            Diag(Method->getLocation(), diag::note_method_declared_at) << Method->getDeclName();"},{t,3298,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n          if (SelMethod) {\n            case OMF_init:\n              // Issue error, unless ns_returns_not_retained.\n              if (!SelMethod->hasAttr<NSReturnsNotRetainedAttr>()) {\n                Diag(SelMethod->getLocation(), diag::note_method_declared_at) << SelMethod->getDeclName();"},{t,3308,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // In ARC, forbid the user from sending messages to\n  // retain/release/autorelease/dealloc/retainCount explicitly.\n  if (getLangOpts().ObjCAutoRefCount) {\n    case OMF_performSelector:\n      if (Method && NumArgs >= 1) {\n        if (const auto *SelExp = dyn_cast<ObjCSelectorExpr>(Args[0]->IgnoreParens())) {\n          if (SelMethod) {\n            default:\n              // +0 call. OK. unless ns_returns_retained.\n              if (SelMethod->hasAttr<NSReturnsRetainedAttr>()) {\n                Diag(SelMethod->getLocation(), diag::note_method_declared_at) << SelMethod->getDeclName();"},{"clang/lib/Sema/SemaPseudoObject.cpp",1239,"bool ObjCSubscriptOpBuilder::findAtIndexGetter() {\n  if (AtIndexGetter) {\n    if (!R->isObjCObjectPointerType()) {\n      S.Diag(AtIndexGetter->getLocation(), diag::note_method_declared_at) << AtIndexGetter->getDeclName();"}},
[o]={
["clang/test/SemaObjC/warn-deprecated-implementations.m"]={"clang/test/SemaObjC/warn-deprecated-implementations.m:6:1: note: method \'D\' declared here","clang/test/SemaObjC/warn-deprecated-implementations.m:8:1: note: method \'unavailable\' declared here","clang/test/SemaObjC/warn-deprecated-implementations.m:49:1: note: method \'B\' declared here","clang/test/SemaObjC/warn-deprecated-implementations.m:51:1: note: method \'unavailable\' declared here"}
}
},
},
["note_method_return_type_change"]={
["note_method_return_type_change"]={
[f]="compiler has implicitly changed method A return type",
[b]="compiler has implicitly changed method A return type",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="compiler has implicitly changed method %0 return type",
[h]="compiler has implicitly changed method %0 return type",
[g]=b,
[j]=i,
[e]="compiler has implicitly changed method (.*?) return type",
[k]="compiler has implicitly changed method (.*?) return type",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"b248ca55489e",1373561286,"ObjectiveC arc[qoi]: When due to change of certain methods\'"},
[m]={"b248ca55489e",1373561286,"ObjectiveC arc[qoi]: When due to change of certain methods\'"},
[n]={{D,6970,"void InitializationSequence::PrintInitLocationNote(Sema &S, const InitializedEntity &Entity) {\n  if (Entity.isParamOrTemplateParamKind() && Entity.getDecl()) {\n  } else if (Entity.getKind() == InitializedEntity::EK_RelatedResult && Entity.getMethodDecl())\n    S.Diag(Entity.getMethodDecl()->getLocation(), diag::note_method_return_type_change) << Entity.getMethodDecl()->getDeclName();"}}
[n]={{K,6970,"void InitializationSequence::PrintInitLocationNote(Sema &S, const InitializedEntity &Entity) {\n  if (Entity.isParamOrTemplateParamKind() && Entity.getDecl()) {\n  } else if (Entity.getKind() == InitializedEntity::EK_RelatedResult && Entity.getMethodDecl())\n    S.Diag(Entity.getMethodDecl()->getLocation(), diag::note_method_return_type_change) << Entity.getMethodDecl()->getDeclName();"}},
[o]={
["clang/test/SemaObjC/related-result-type-inference.m"]={"clang/test/SemaObjC/related-result-type-inference.m:176:1: note: compiler has implicitly changed method \'initWithX\' return type","clang/test/SemaObjC/related-result-type-inference.m:197:1: note: compiler has implicitly changed method \'newFilterViewControllerForType\' return type"}
}
},
},
["note_method_sent_forward_class"]={
["note_method_sent_forward_class"]={
[f]="method A is used for the forward class",
[b]="method A is used for the forward class",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="method %0 is used for the forward class",
[h]="method %0 is used for the forward class",
[g]=b,
[j]=i,
[e]="method (.*?) is used for the forward class",
[k]="method (.*?) is used for the forward class",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"5276014db2b4",1241826349,"We want to diagnose sending message to a forward class"},
[m]={"5276014db2b4",1241826349,"We want to diagnose sending message to a forward class"},
[n]={{s,2670,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // Find the method we are messaging.\n  if (!Method) {\n    if (RequireCompleteType(Loc, Context.getObjCInterfaceType(Class), (getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_class : diag::warn_receiver_forward_class), TypeRange)) {\n      if (Method && !getLangOpts().ObjCAutoRefCount)\n        Diag(Method->getLocation(), diag::note_method_sent_forward_class) << Method->getDeclName();"}}
[n]={{t,2670,"/// \\param ReceiverType The type of the object receiving the\n/// message. When \\p ReceiverTypeInfo is non-NULL, this is the same\n/// type as that refers to. For a superclass send, this is the type of\n/// the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this class message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  // Find the method we are messaging.\n  if (!Method) {\n    if (RequireCompleteType(Loc, Context.getObjCInterfaceType(Class), (getLangOpts().ObjCAutoRefCount ? diag::err_arc_receiver_forward_class : diag::warn_receiver_forward_class), TypeRange)) {\n      if (Method && !getLangOpts().ObjCAutoRefCount)\n        Diag(Method->getLocation(), diag::note_method_sent_forward_class) << Method->getDeclName();"}},
[o]={
["clang/test/SemaObjC/forward-class-receiver.m"]={"clang/test/SemaObjC/forward-class-receiver.m:4:1: note: method \'new\' is used for the forward class"}
}
},
},
["note_misaligned_member_used_here"]={
["note_misaligned_member_used_here"]={
[f]="passing byval argument A with potentially incompatible alignment here",
[b]="passing byval argument A with potentially incompatible alignment here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="passing byval argument %0 with potentially incompatible alignment here",
[h]="passing byval argument %0 with potentially incompatible alignment here",
[g]=b,
[j]=i,
[e]="passing byval argument (.*?) with potentially incompatible alignment here",
[k]="passing byval argument (.*?) with potentially incompatible alignment here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={db,1625925174,eb},
[m]={fb,1625925174,nb},
[n]={{y,6603,"// 16 byte ByVal alignment not due to a vector member is not honoured by XL\n// on AIX. Emit a warning here that users are generating binary incompatible\n// code to be safe.\n// Here we try to get information about the alignment of the struct member\n// from the struct passed to the caller function. We only warn when the struct\n// is passed byval, hence the series of checks and early returns if we are a not\n// passing a struct byval.\nvoid Sema::checkAIXMemberAlignment(SourceLocation Loc, const Expr *Arg) {\n  for (const FieldDecl *FD : ArgType->castAs<RecordType>()->getDecl()->fields()) {\n    if (const auto *AA = FD->getAttr<AlignedAttr>()) {\n      if (Alignment.getQuantity() == 16) {\n        Diag(Loc, diag::note_misaligned_member_used_here) << PD;"}}
[n]={{D,6603,"// 16 byte ByVal alignment not due to a vector member is not honoured by XL\n// on AIX. Emit a warning here that users are generating binary incompatible\n// code to be safe.\n// Here we try to get information about the alignment of the struct member\n// from the struct passed to the caller function. We only warn when the struct\n// is passed byval, hence the series of checks and early returns if we are a not\n// passing a struct byval.\nvoid Sema::checkAIXMemberAlignment(SourceLocation Loc, const Expr *Arg) {\n  for (const FieldDecl *FD : ArgType->castAs<RecordType>()->getDecl()->fields()) {\n    if (const auto *AA = FD->getAttr<AlignedAttr>()) {\n      if (Alignment.getQuantity() == 16) {\n        Diag(Loc, diag::note_misaligned_member_used_here) << PD;"}},
[o]={
["clang/test/Sema/aix-attr-align.c"]={"clang/test/Sema/aix-attr-align.c:36:31: note: passing byval argument \'s\' with potentially incompatible alignment here"}
}
},
},
["note_misplaced_ellipsis_vararg_add_comma"]={
["note_misplaced_ellipsis_vararg_add_comma"]={
[f]="insert \',\' before \'...\' to silence this warning",
[b]="insert \',\' before \'...\' to silence this warning",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="insert \',\' before \'...\' to silence this warning",
[h]="insert \',\' before \'...\' to silence this warning",
[g]=b,
[j]=i,
[e]="insert \',\' before \'\\.\\.\\.\' to silence this warning",
[k]="insert \',\' before \'\\.\\.\\.\' to silence this warning",
[d]=a,
[l]=a,
[c]=Q,
[c]=Z,
[m]={"36ee9fb21957",1407799823,"Reject varargs \'...\' in function prototype if there are more parameters after"},
[m]={"36ee9fb21957",1407799823,"Reject varargs \'...\' in function prototype if there are more parameters after"},
[n]={{"clang/lib/Parse/ParseDecl.cpp",7518,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n      if (!getLangOpts().CPlusPlus) {\n      } else if (ParmDeclarator.getEllipsisLoc().isValid() || Actions.containsUnexpandedParameterPacks(ParmDeclarator)) {\n        Diag(EllipsisLoc, diag::note_misplaced_ellipsis_vararg_add_comma) << FixItHint::CreateInsertion(EllipsisLoc, \", \");"}}
[n]={{"clang/lib/Parse/ParseDecl.cpp",7518,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n      if (!getLangOpts().CPlusPlus) {\n      } else if (ParmDeclarator.getEllipsisLoc().isValid() || Actions.containsUnexpandedParameterPacks(ParmDeclarator)) {\n        Diag(EllipsisLoc, diag::note_misplaced_ellipsis_vararg_add_comma) << FixItHint::CreateInsertion(EllipsisLoc, \", \");"}},
[o]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p14.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p14.cpp:24:30: note: insert \',\' before \'...\' to silence this warning"}
}
},
},
["note_misplaced_ellipsis_vararg_add_ellipsis"]={
["note_misplaced_ellipsis_vararg_add_ellipsis"]={
[f]="place \'...\' ... to declare a function parameter pack",
[b]="place \'...\' ... to declare a function parameter pack",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="place \'...\' %select{immediately before declared identifier|here}0 to declare a function parameter pack",
[h]="place \'...\' %select{immediately before declared identifier|here}0 to declare a function parameter pack",
[g]=b,
[j]=i,
[e]="place \'\\.\\.\\.\' (?:immediately before declared identifier|here) to declare a function parameter pack",
[k]="place \'\\.\\.\\.\' (?:immediately before declared identifier|here) to declare a function parameter pack",
[d]=a,
[l]=a,
[c]=Q,
[c]=Z,
[m]={"36ee9fb21957",1407799823,"Reject varargs \'...\' in function prototype if there are more parameters after"},
[m]={"36ee9fb21957",1407799823,"Reject varargs \'...\' in function prototype if there are more parameters after"},
[n]={{"clang/lib/Parse/ParseDecl.cpp",7513,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n      if (!getLangOpts().CPlusPlus) {\n      } else if (ParmDeclarator.getEllipsisLoc().isValid() || Actions.containsUnexpandedParameterPacks(ParmDeclarator)) {\n        if (ParmEllipsis.isValid()) {\n        } else {\n          Diag(ParmDeclarator.getIdentifierLoc(), diag::note_misplaced_ellipsis_vararg_add_ellipsis) << FixItHint::CreateInsertion(ParmDeclarator.getIdentifierLoc(), \"...\") << !ParmDeclarator.hasName();"}}
[n]={{"clang/lib/Parse/ParseDecl.cpp",7513,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n      if (!getLangOpts().CPlusPlus) {\n      } else if (ParmDeclarator.getEllipsisLoc().isValid() || Actions.containsUnexpandedParameterPacks(ParmDeclarator)) {\n        if (ParmEllipsis.isValid()) {\n        } else {\n          Diag(ParmDeclarator.getIdentifierLoc(), diag::note_misplaced_ellipsis_vararg_add_ellipsis) << FixItHint::CreateInsertion(ParmDeclarator.getIdentifierLoc(), \"...\") << !ParmDeclarator.hasName();"}},
[o]={
["clang/test/Parser/cxx11-templates.cpp"]={"clang/test/Parser/cxx11-templates.cpp:18:14: note: place \'...\' immediately before declared identifier to declare a function parameter pack","clang/test/Parser/cxx11-templates.cpp:23:15: note: place \'...\' here to declare a function parameter pack","clang/test/Parser/cxx11-templates.cpp:41:35: note: place \'...\' immediately before declared identifier to declare a function parameter pack"}
}
},
},
["note_misplaced_ellipsis_vararg_existing_ellipsis"]={
["note_misplaced_ellipsis_vararg_existing_ellipsis"]={
[f]="preceding \'...\' declares a function parameter pack",
[b]="preceding \'...\' declares a function parameter pack",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="preceding \'...\' declares a function parameter pack",
[h]="preceding \'...\' declares a function parameter pack",
[g]=b,
[j]=i,
[e]="preceding \'\\.\\.\\.\' declares a function parameter pack",
[k]="preceding \'\\.\\.\\.\' declares a function parameter pack",
[d]=a,
[l]=a,
[c]=Q,
[c]=Z,
[m]={"36ee9fb21957",1407799823,"Reject varargs \'...\' in function prototype if there are more parameters after"},
[m]={"36ee9fb21957",1407799823,"Reject varargs \'...\' in function prototype if there are more parameters after"},
[n]={{"clang/lib/Parse/ParseDecl.cpp",7510,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n      if (!getLangOpts().CPlusPlus) {\n      } else if (ParmDeclarator.getEllipsisLoc().isValid() || Actions.containsUnexpandedParameterPacks(ParmDeclarator)) {\n        if (ParmEllipsis.isValid()) {\n          Diag(ParmEllipsis, diag::note_misplaced_ellipsis_vararg_existing_ellipsis);"}}
[n]={{"clang/lib/Parse/ParseDecl.cpp",7510,"/// ParseParameterDeclarationClause - Parse a (possibly empty) parameter-list\n/// after the opening parenthesis. This function will not parse a K&R-style\n/// identifier list.\n///\n/// DeclContext is the context of the declarator being parsed.  If FirstArgAttrs\n/// is non-null, then the caller parsed those attributes immediately after the\n/// open paren - they will be applied to the DeclSpec of the first parameter.\n///\n/// After returning, ParamInfo will hold the parsed parameters. EllipsisLoc will\n/// be the location of the ellipsis, if any was parsed.\n///\n///      parameter-type-list: [C99 6.7.5]\n///        parameter-list\n///        parameter-list \',\' \'...\'\n/// [C++]  parameter-list \'...\'\n///\n///      parameter-list: [C99 6.7.5]\n///        parameter-declaration\n///        parameter-list \',\' parameter-declaration\n///\n///      parameter-declaration: [C99 6.7.5]\n///        declaration-specifiers declarator\n/// [C++]  declaration-specifiers declarator \'=\' assignment-expression\n/// [C++11]                                      initializer-clause\n/// [GNU]  declaration-specifiers declarator attributes\n///        declaration-specifiers abstract-declarator[opt]\n/// [C++]  declaration-specifiers abstract-declarator[opt]\n///          \'=\' assignment-expression\n/// [GNU]  declaration-specifiers abstract-declarator[opt] attributes\n/// [C++11] attribute-specifier-seq parameter-declaration\n///\nvoid Parser::ParseParameterDeclarationClause(DeclaratorContext DeclaratorCtx, ParsedAttributes &FirstArgAttrs, SmallVectorImpl<DeclaratorChunk::ParamInfo> &ParamInfo, SourceLocation &EllipsisLoc, bool IsACXXFunctionDeclaration) {\n  do {\n    if (TryConsumeToken(tok::ellipsis, EllipsisLoc)) {\n      if (!getLangOpts().CPlusPlus) {\n      } else if (ParmDeclarator.getEllipsisLoc().isValid() || Actions.containsUnexpandedParameterPacks(ParmDeclarator)) {\n        if (ParmEllipsis.isValid()) {\n          Diag(ParmEllipsis, diag::note_misplaced_ellipsis_vararg_existing_ellipsis);"}},
[o]={
["clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p14.cpp"]={"clang/test/CXX/dcl.decl/dcl.meaning/dcl.fct/p14.cpp:24:27: note: preceding \'...\' declares a function parameter pack"}
}
},
},
["note_missing_end_of_definition_before"]={
["note_missing_end_of_definition_before"]={
[f]="still within definition of A here",
[b]="still within definition of A here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="still within definition of %q0 here",
[h]="still within definition of %q0 here",
[g]=b,
[j]=i,
[e]="still within definition of (.*?) here",
[k]="still within definition of (.*?) here",
[d]=a,
[l]=a,
[c]=Q,
[c]=Z,
[m]={"da35e963bc57",1383972771,"Try to recover a bit better if a close brace is missing from the end of a class"},
[m]={"da35e963bc57",1383972771,"Try to recover a bit better if a close brace is missing from the end of a class"},
[n]={{"clang/lib/Parse/ParseDeclCXX.cpp",3691,"void Parser::DiagnoseUnexpectedNamespace(NamedDecl *D) {\n  Diag(Tok.getLocation(), diag::note_missing_end_of_definition_before) << D;"}}
[n]={{"clang/lib/Parse/ParseDeclCXX.cpp",3691,"void Parser::DiagnoseUnexpectedNamespace(NamedDecl *D) {\n  Diag(Tok.getLocation(), diag::note_missing_end_of_definition_before) << D;"}},
[o]={
["clang/test/Parser/recovery.cpp"]={"clang/test/Parser/recovery.cpp:43:3: note: still within definition of \'MissingBrace::S\' here","clang/test/Parser/recovery.cpp:50:3: note: still within definition of \'MissingBrace::PR17949\' here"}
}
},
},
["note_missing_selector_name"]={
["note_missing_selector_name"]={
[f]="introduce a parameter name to make A part of the selector",
[b]="introduce a parameter name to make A part of the selector",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="introduce a parameter name to make %0 part of the selector",
[h]="introduce a parameter name to make %0 part of the selector",
[g]=b,
[j]=i,
[e]="introduce a parameter name to make (.*?) part of the selector",
[k]="introduce a parameter name to make (.*?) part of the selector",
[d]=a,
[l]=a,
[c]=Q,
[c]=Z,
[m]={"84f498433116",1347923399,"objective-C: improve on warnings about misplacement of method"},
[m]={"84f498433116",1347923399,"objective-C: improve on warnings about misplacement of method"},
[n]={{Kb,1510,"///  objc-method-decl:\n///    objc-selector\n///    objc-keyword-selector objc-parmlist[opt]\n///    objc-type-name objc-selector\n///    objc-type-name objc-keyword-selector objc-parmlist[opt]\n///\n///  objc-keyword-selector:\n///    objc-keyword-decl\n///    objc-keyword-selector objc-keyword-decl\n///\n///  objc-keyword-decl:\n///    objc-selector \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    objc-selector \':\' objc-keyword-attributes[opt] identifier\n///    \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    \':\' objc-keyword-attributes[opt] identifier\n///\n///  objc-parmlist:\n///    objc-parms objc-ellipsis[opt]\n///\n///  objc-parms:\n///    objc-parms , parameter-declaration\n///\n///  objc-ellipsis:\n///    , ...\n///\n///  objc-keyword-attributes:        [OBJC2]\n///    __attribute__((unused))\n///\nDecl *Parser::ParseObjCMethodDecl(SourceLocation mLoc, tok::TokenKind mType, tok::ObjCKeywordKind MethodImplKind, bool MethodDefinition) {\n  while (true) {\n    if (!SelIdent) {\n      if (PP.getLocForEndOfToken(ArgInfo.NameLoc) == ColonLoc) {\n        Diag(ArgInfo.NameLoc, diag::note_missing_selector_name) << ArgInfo.Name;"}}
[n]={{Tb,1510,"///  objc-method-decl:\n///    objc-selector\n///    objc-keyword-selector objc-parmlist[opt]\n///    objc-type-name objc-selector\n///    objc-type-name objc-keyword-selector objc-parmlist[opt]\n///\n///  objc-keyword-selector:\n///    objc-keyword-decl\n///    objc-keyword-selector objc-keyword-decl\n///\n///  objc-keyword-decl:\n///    objc-selector \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    objc-selector \':\' objc-keyword-attributes[opt] identifier\n///    \':\' objc-type-name objc-keyword-attributes[opt] identifier\n///    \':\' objc-keyword-attributes[opt] identifier\n///\n///  objc-parmlist:\n///    objc-parms objc-ellipsis[opt]\n///\n///  objc-parms:\n///    objc-parms , parameter-declaration\n///\n///  objc-ellipsis:\n///    , ...\n///\n///  objc-keyword-attributes:        [OBJC2]\n///    __attribute__((unused))\n///\nDecl *Parser::ParseObjCMethodDecl(SourceLocation mLoc, tok::TokenKind mType, tok::ObjCKeywordKind MethodImplKind, bool MethodDefinition) {\n  while (true) {\n    if (!SelIdent) {\n      if (PP.getLocForEndOfToken(ArgInfo.NameLoc) == ColonLoc) {\n        Diag(ArgInfo.NameLoc, diag::note_missing_selector_name) << ArgInfo.Name;"}},
[o]={
["clang/test/SemaObjC/unused.m"]={"clang/test/SemaObjC/unused.m:32:20: note: introduce a parameter name to make \'x\' part of the selector","clang/test/SemaObjC/unused.m:36:6: note: introduce a parameter name to make \'y\' part of the selector"}
}
},
},
["note_mmap_add_framework_keyword"]={
["note_mmap_add_framework_keyword"]={
[f]="use \'framework module\' to declare module \'A\'",
[b]="use \'framework module\' to declare module \'A\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use \'framework module\' to declare module \'%0\'",
[h]="use \'framework module\' to declare module \'%0\'",
[g]=b,
[j]=i,
[e]="use \'framework module\' to declare module \'(.*?)\'",
[k]="use \'framework module\' to declare module \'(.*?)\'",
[d]=a,
[l]=a,
[c]=R,
[c]=bb,
[m]={"9f6020bcc522",1527816378,"[Modules] Warning for module declarations lacking \'framework\' qualifier"},
[m]={"9f6020bcc522",1527816378,"[Modules] Warning for module declarations lacking \'framework\' qualifier"},
[n]={{hb,2480,"/// Parse a header declaration.\n///\n///  header-declaration:\n///    \'textual\'[opt] \'header\' string-literal\n///    \'private\' \'textual\'[opt] \'header\' string-literal\n///    \'exclude\' \'header\' string-literal\n///    \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  if (NeedsFramework)\n    Diags.Report(CurrModuleDeclLoc, diag::note_mmap_add_framework_keyword) << ActiveModule->getFullModuleName() << FixItHint::CreateReplacement(CurrModuleDeclLoc, \"framework module\");"}}
[n]={{yb,2480,"/// Parse a header declaration.\n///\n///  header-declaration:\n///    \'textual\'[opt] \'header\' string-literal\n///    \'private\' \'textual\'[opt] \'header\' string-literal\n///    \'exclude\' \'header\' string-literal\n///    \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  if (NeedsFramework)\n    Diags.Report(CurrModuleDeclLoc, diag::note_mmap_add_framework_keyword) << ActiveModule->getFullModuleName() << FixItHint::CreateReplacement(CurrModuleDeclLoc, \"framework module\");"}},
[o]={
["clang/test/Modules/incomplete-framework-module.m"]={"clang/test/Modules/Inputs/incomplete-framework-module/Foo.framework/Modules/module.modulemap:1:1: note: use \'framework module\' to declare module \'Foo\'","clang/test/Modules/Inputs/incomplete-framework-module/Foo.framework/Modules/module.modulemap:1:1: note: use \'framework module\' to declare module \'Foo\'"}
}
},
},
["note_mmap_lbrace_match"]={
["note_mmap_lbrace_match"]={
[f]="to match this \'{\'",
[b]="to match this \'{\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="to match this \'{\'",
[h]="to match this \'{\'",
[g]=b,
[j]=i,
[e]="to match this \'\\{\'",
[k]="to match this \'\\{\'",
[d]=a,
[l]=a,
[c]=R,
[c]=bb,
[m]={"718292f260bf",1321038628,"Introduce basic support for parsing module map files."},
[m]={"718292f260bf",1321038628,"Introduce basic support for parsing module map files."},
[n]={{hb,2057,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  if (Module *Existing = Map.lookupModuleQualified(ModuleName, ActiveModule)) {\n    if (LoadedFromASTFile || Inferred || PartOfFramework || ParsedAsMainInput) {\n      if (Tok.is(MMToken::RBrace))\n      else {\n        Diags.Report(LBraceLoc, diag::note_mmap_lbrace_match);"},{hb,2198,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  if (Tok.is(MMToken::RBrace))\n  else {\n    Diags.Report(LBraceLoc, diag::note_mmap_lbrace_match);"},{hb,2471,"/// Parse a header declaration.\n///\n///  header-declaration:\n///    \'textual\'[opt] \'header\' string-literal\n///    \'private\' \'textual\'[opt] \'header\' string-literal\n///    \'exclude\' \'header\' string-literal\n///    \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // If we were given stat information, parse it so we can skip looking for\n  // the file.\n  if (Tok.is(MMToken::LBrace)) {\n    if (Tok.is(MMToken::RBrace))\n    else {\n      Diags.Report(LBraceLoc, diag::note_mmap_lbrace_match);"},{hb,2954,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  if (Tok.is(MMToken::RBrace))\n  else {\n    Diags.Report(LBraceLoc, diag::note_mmap_lbrace_match);"}}
[n]={{yb,2057,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  if (Module *Existing = Map.lookupModuleQualified(ModuleName, ActiveModule)) {\n    if (LoadedFromASTFile || Inferred || PartOfFramework || ParsedAsMainInput) {\n      if (Tok.is(MMToken::RBrace))\n      else {\n        Diags.Report(LBraceLoc, diag::note_mmap_lbrace_match);"},{yb,2198,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  if (Tok.is(MMToken::RBrace))\n  else {\n    Diags.Report(LBraceLoc, diag::note_mmap_lbrace_match);"},{yb,2471,"/// Parse a header declaration.\n///\n///  header-declaration:\n///    \'textual\'[opt] \'header\' string-literal\n///    \'private\' \'textual\'[opt] \'header\' string-literal\n///    \'exclude\' \'header\' string-literal\n///    \'umbrella\' \'header\' string-literal\n///\n/// FIXME: Support \'private textual header\'.\nvoid ModuleMapParser::parseHeaderDecl(MMToken::TokenKind LeadingToken, SourceLocation LeadingLoc) {\n  // If we were given stat information, parse it so we can skip looking for\n  // the file.\n  if (Tok.is(MMToken::LBrace)) {\n    if (Tok.is(MMToken::RBrace))\n    else {\n      Diags.Report(LBraceLoc, diag::note_mmap_lbrace_match);"},{yb,2954,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  if (Tok.is(MMToken::RBrace))\n  else {\n    Diags.Report(LBraceLoc, diag::note_mmap_lbrace_match);"}},
[o]={
["clang/test/Parser/objcxx-at.mm"]={"clang/test/Parser/objcxx-at.mm:12:10: note: to match this \'{\'"}
}
},
},
["note_mmap_lsquare_match"]={
["note_mmap_lsquare_match"]={
[f]="to match this \']\'",
[b]="to match this \']\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="to match this \']\'",
[h]="to match this \']\'",
[g]=b,
[j]=i,
[e]="to match this \'\\]\'",
[k]="to match this \'\\]\'",
[d]=a,
[l]=a,
[c]=R,
[c]=bb,
[m]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a"},
[m]={"a686e1b05df9",1327693953,"Introduce module attributes into the module map grammar, along with a"},
[n]={{hb,3022,"/// Parse optional attributes.\n///\n///  attributes:\n///    attribute attributes\n///    attribute\n///\n///  attribute:\n///    [ identifier ]\n///\n/// \\param Attrs Will be filled in with the parsed attributes.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool ModuleMapParser::parseOptionalAttributes(Attributes &Attrs) {\n  while (Tok.is(MMToken::LSquare)) {\n    // Consume the \']\'.\n    if (!Tok.is(MMToken::RSquare)) {\n      Diags.Report(LSquareLoc, diag::note_mmap_lsquare_match);"}}
[n]={{yb,3022,"/// Parse optional attributes.\n///\n///  attributes:\n///    attribute attributes\n///    attribute\n///\n///  attribute:\n///    [ identifier ]\n///\n/// \\param Attrs Will be filled in with the parsed attributes.\n///\n/// \\returns true if an error occurred, false otherwise.\nbool ModuleMapParser::parseOptionalAttributes(Attributes &Attrs) {\n  while (Tok.is(MMToken::LSquare)) {\n    // Consume the \']\'.\n    if (!Tok.is(MMToken::RSquare)) {\n      Diags.Report(LSquareLoc, diag::note_mmap_lsquare_match);"}}
},
},
["note_mmap_prev_definition"]={
["note_mmap_prev_definition"]={
[f]="previously defined here",
[b]="previously defined here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="previously defined here",
[h]="previously defined here",
[g]=b,
[j]=i,
[e]="previously defined here",
[k]="previously defined here",
[d]=a,
[l]=a,
[c]=R,
[c]=bb,
[m]={"718292f260bf",1321038628,"Introduce basic support for parsing module map files."},
[m]={"718292f260bf",1321038628,"Introduce basic support for parsing module map files."},
[n]={{hb,2069,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  if (Module *Existing = Map.lookupModuleQualified(ModuleName, ActiveModule)) {\n    if (!Existing->Parent && Map.mayShadowNewModule(Existing)) {\n    } else {\n      Diags.Report(Existing->DefinitionLoc, diag::note_mmap_prev_definition);"},{hb,2839,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  if (ActiveModule) {\n    // Check for redefinition of an inferred module.\n    if (!Failed && ActiveModule->InferSubmodules) {\n      if (ActiveModule->InferredSubmoduleLoc.isValid())\n        Diags.Report(ActiveModule->InferredSubmoduleLoc, diag::note_mmap_prev_definition);"}}
[n]={{yb,2069,"/// Parse a module declaration.\n///\n///  module-declaration:\n///    \'extern\' \'module\' module-id string-literal\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' module-id attributes[opt]\n///      { module-member* }\n///\n///  module-member:\n///    requires-declaration\n///    header-declaration\n///    submodule-declaration\n///    export-declaration\n///    export-as-declaration\n///    link-declaration\n///\n///  submodule-declaration:\n///    module-declaration\n///    inferred-submodule-declaration\nvoid ModuleMapParser::parseModuleDecl() {\n  if (Module *Existing = Map.lookupModuleQualified(ModuleName, ActiveModule)) {\n    if (!Existing->Parent && Map.mayShadowNewModule(Existing)) {\n    } else {\n      Diags.Report(Existing->DefinitionLoc, diag::note_mmap_prev_definition);"},{yb,2839,"/// Parse an inferred module declaration (wildcard modules).\n///\n///  module-declaration:\n///    \'explicit\'[opt] \'framework\'[opt] \'module\' * attributes[opt]\n///      { inferred-module-member* }\n///\n///  inferred-module-member:\n///    \'export\' \'*\'\n///    \'exclude\' identifier\nvoid ModuleMapParser::parseInferredModuleDecl(bool Framework, bool Explicit) {\n  if (ActiveModule) {\n    // Check for redefinition of an inferred module.\n    if (!Failed && ActiveModule->InferSubmodules) {\n      if (ActiveModule->InferredSubmoduleLoc.isValid())\n        Diags.Report(ActiveModule->InferredSubmoduleLoc, diag::note_mmap_prev_definition);"}}
},
},
["note_mmap_rename_top_level_private_module"]={
["note_mmap_rename_top_level_private_module"]={
[f]="rename \'A\' to ensure it can be found by name",
[b]="rename \'A\' to ensure it can be found by name",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="rename \'%0\' to ensure it can be found by name",
[h]="rename \'%0\' to ensure it can be found by name",
[g]=b,
[j]=i,
[e]="rename \'(.*?)\' to ensure it can be found by name",
[k]="rename \'(.*?)\' to ensure it can be found by name",
[d]=a,
[l]=a,
[c]=R,
[c]=bb,
[m]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings"},
[m]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings"},
[n]={{hb,1835,"/// Private modules are canonicalized as Foo_Private. Clang provides extra\n/// module map search logic to find the appropriate private module when PCH\n/// is used with implicit module maps. Warn when private modules are written\n/// in other ways (FooPrivate and Foo.Private), providing notes and fixits.\nvoid ModuleMapParser::diagnosePrivateModules(SourceLocation ExplicitLoc, SourceLocation FrameworkLoc) {\n  auto GenNoteAndFixIt = [&](StringRef BadName, StringRef Canonical, const Module *M, SourceRange ReplLoc) {\n    auto D = Diags.Report(ActiveModule->DefinitionLoc, diag::note_mmap_rename_top_level_private_module);"}}
[n]={{yb,1835,"/// Private modules are canonicalized as Foo_Private. Clang provides extra\n/// module map search logic to find the appropriate private module when PCH\n/// is used with implicit module maps. Warn when private modules are written\n/// in other ways (FooPrivate and Foo.Private), providing notes and fixits.\nvoid ModuleMapParser::diagnosePrivateModules(SourceLocation ExplicitLoc, SourceLocation FrameworkLoc) {\n  auto GenNoteAndFixIt = [&](StringRef BadName, StringRef Canonical, const Module *M, SourceRange ReplLoc) {\n    auto D = Diags.Report(ActiveModule->DefinitionLoc, diag::note_mmap_rename_top_level_private_module);"}},
[o]={
["clang/test/Modules/implicit-private-with-different-name.m"]={"clang/test/Modules/Inputs/implicit-private-with-different-name/A.framework/Modules/module.private.modulemap:1:18: note: rename \'APrivate\' to ensure it can be found by name"}
}
},
},
["note_module_cache_path"]={
["note_module_cache_path"]={
[f]="after modifying system headers, please delete the module cache at \'A\'",
[b]="after modifying system headers, please delete the module cache at \'A\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="after modifying system headers, please delete the module cache at \'%0\'",
[h]="after modifying system headers, please delete the module cache at \'%0\'",
[g]=b,
[j]=i,
[e]="after modifying system headers, please delete the module cache at \'(.*?)\'",
[k]="after modifying system headers, please delete the module cache at \'(.*?)\'",
[d]=a,
[l]=a,
[c]=Wb,
[c]=hc,
[m]={"940e80502e57",1368224113,"[Modules] When things go horribly wrong when reading a module, point at the module cache."},
[m]={"940e80502e57",1368224113,"[Modules] When things go horribly wrong when reading a module, point at the module cache."},
[n]={{Ub,1293,"void ASTReader::Error(StringRef Msg) const {\n  if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() && !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {\n    Diag(diag::note_module_cache_path) << PP.getHeaderSearchInfo().getModuleCachePath();"}}
[n]={{ec,1293,"void ASTReader::Error(StringRef Msg) const {\n  if (PP.getLangOpts().Modules && !Diags.isDiagnosticInFlight() && !PP.getHeaderSearchInfo().getModuleCachePath().empty()) {\n    Diag(diag::note_module_cache_path) << PP.getHeaderSearchInfo().getModuleCachePath();"}}
},
},
["note_module_def_undef_here"]={
["note_module_def_undef_here"]={
[f]="macro was ... here",
[b]="macro was ... here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="macro was %select{defined|#undef\'d}0 here",
[h]="macro was %select{defined|#undef\'d}0 here",
[g]=b,
[j]=i,
[e]="macro was (?:defined|\\#undef\'d) here",
[k]="macro was (?:defined|\\#undef\'d) here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps."},
[m]={"35b13ece231b",1363738925,"<rdar://problem/10796651> Introduce configuration macros into module maps."},
[n]={{"clang/lib/Frontend/CompilerInstance.cpp",1557,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  if (CurrentDefinition == CmdLineDefinition) {\n  } else if (!CurrentDefinition) {\n    PP.Diag(LatestDef.getUndefLocation(), diag::note_module_def_undef_here) << true;"},{"clang/lib/Frontend/CompilerInstance.cpp",1566,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  if (CurrentDefinition == CmdLineDefinition) {\n  } else if (!CurrentDefinition) {\n  } else if (!CmdLineDefinition) {\n    PP.Diag(CurrentDefinition->getDefinitionLoc(), diag::note_module_def_undef_here) << false;"},{"clang/lib/Frontend/CompilerInstance.cpp",1574,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  if (CurrentDefinition == CmdLineDefinition) {\n  } else if (!CurrentDefinition) {\n  } else if (!CmdLineDefinition) {\n  } else if (!CurrentDefinition->isIdenticalTo(*CmdLineDefinition, PP,\n    PP.Diag(CurrentDefinition->getDefinitionLoc(), diag::note_module_def_undef_here) << false;"}}
[n]={{"clang/lib/Frontend/CompilerInstance.cpp",1557,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  if (CurrentDefinition == CmdLineDefinition) {\n  } else if (!CurrentDefinition) {\n    PP.Diag(LatestDef.getUndefLocation(), diag::note_module_def_undef_here) << true;"},{"clang/lib/Frontend/CompilerInstance.cpp",1566,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  if (CurrentDefinition == CmdLineDefinition) {\n  } else if (!CurrentDefinition) {\n  } else if (!CmdLineDefinition) {\n    PP.Diag(CurrentDefinition->getDefinitionLoc(), diag::note_module_def_undef_here) << false;"},{"clang/lib/Frontend/CompilerInstance.cpp",1574,"/// Diagnose differences between the current definition of the given\n/// configuration macro and the definition provided on the command line.\nstatic void checkConfigMacro(Preprocessor &PP, StringRef ConfigMacro, Module *Mod, SourceLocation ImportLoc) {\n  if (CurrentDefinition == CmdLineDefinition) {\n  } else if (!CurrentDefinition) {\n  } else if (!CmdLineDefinition) {\n  } else if (!CurrentDefinition->isIdenticalTo(*CmdLineDefinition, PP,\n    PP.Diag(CurrentDefinition->getDefinitionLoc(), diag::note_module_def_undef_here) << false;"}},
[o]={
["clang/test/Modules/config_macros.m"]={"clang/test/Modules/config_macros.m:12:8: note: macro was #undef\'d here","clang/test/Modules/config_macros.m:15:9: note: macro was defined here","clang/test/Modules/config_macros.m:22:9: note: macro was defined here"}
}
},
},
["note_module_file_conflict"]={
["note_module_file_conflict"]={
[f]="this is generally caused by modules with the same name found in multiple paths",
[b]="this is generally caused by modules with the same name found in multiple paths",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="this is generally caused by modules with the same name found in multiple paths",
[h]="this is generally caused by modules with the same name found in multiple paths",
[g]=b,
[j]=i,
[e]="this is generally caused by modules with the same name found in multiple paths",
[k]="this is generally caused by modules with the same name found in multiple paths",
[d]=a,
[l]=a,
[c]=Wb,
[c]=hc,
[m]={"766a08df12c1",1626398649,"[Frontend] Only compile modules if not already finalized"},
[m]={"766a08df12c1",1626398649,"[Frontend] Only compile modules if not already finalized"},
[n]={{Ub,2946,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  while (true) {\n    case IMPORTS: {\n      while (Idx < N) {\n        if (recompilingFinalized)\n          Diag(diag::note_module_file_conflict);"}}
[n]={{ec,2946,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  while (true) {\n    case IMPORTS: {\n      while (Idx < N) {\n        if (recompilingFinalized)\n          Diag(diag::note_module_file_conflict);"}}
},
},
["note_module_file_imported_by"]={
["note_module_file_imported_by"]={
[f]="imported by ...\'A\'",
[b]="imported by ...\'A\'",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="imported by %select{|module \'%2\' in }1\'%0\'",
[h]="imported by %select{|module \'%2\' in }1\'%0\'",
[g]=b,
[j]=i,
[e]="imported by (?:|module \'(.*?)\' in )\'(.*?)\'",
[k]="imported by (?:|module \'(.*?)\' in )\'(.*?)\'",
[d]=a,
[l]=a,
[c]=Wb,
[c]=hc,
[m]={"37bd29a5e6b0",1425092992,"Give better diagnostics when -fmodule-file= finds a bad file: if the file is"},
[m]={"37bd29a5e6b0",1425092992,"Give better diagnostics when -fmodule-file= finds a bad file: if the file is"},
[n]={{Ub,2943,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  while (true) {\n    case IMPORTS: {\n      while (Idx < N) {\n        if (isDiagnosedResult(Result, Capabilities) || recompilingFinalized)\n          Diag(diag::note_module_file_imported_by) << F.FileName << !F.ModuleName.empty() << F.ModuleName;"}}
[n]={{ec,2943,"ASTReader::ASTReadResult ASTReader::ReadControlBlock(ModuleFile &F, SmallVectorImpl<ImportedModule> &Loaded, const ModuleFile *ImportedBy, unsigned ClientLoadCapabilities) {\n  while (true) {\n    case IMPORTS: {\n      while (Idx < N) {\n        if (isDiagnosedResult(Result, Capabilities) || recompilingFinalized)\n          Diag(diag::note_module_file_imported_by) << F.FileName << !F.ModuleName.empty() << F.ModuleName;"}},
[o]={
["clang/test/PCH/cxx-chain-function-template.cpp"]={"note: imported by \'clang/test/PCH/cxx-chain-function-template.cpp.pch-final\'"}
}
},
},
["note_module_import_here"]={
["note_module_import_here"]={
[f]="module imported here",
[b]="module imported here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="module imported here",
[h]="module imported here",
[g]=b,
[j]=i,
[e]="module imported here",
[k]="module imported here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"27e5aa08920d",1496689076,"Factor out and unify emission of \"module is unavailable\" diagnostics."},
[m]={"27e5aa08920d",1496689076,"Factor out and unify emission of \"module is unavailable\" diagnostics."},
[n]={{"clang/lib/Frontend/CompilerInstance.cpp",2122,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  // Make the named module visible, if it\'s not already part of the module\n  // we are parsing.\n  if (ModuleName != getLangOpts().CurrentModule) {\n    // Check whether this module is available.\n    if (Preprocessor::checkModuleIsAvailable(getLangOpts(), getTarget(), getDiagnostics(), Module)) {\n      getDiagnostics().Report(ImportLoc, diag::note_module_import_here) << SourceRange(Path.front().second, Path.back().second);"}}
[n]={{"clang/lib/Frontend/CompilerInstance.cpp",2122,"ModuleLoadResult CompilerInstance::loadModule(SourceLocation ImportLoc, ModuleIdPath Path, Module::NameVisibilityKind Visibility, bool IsInclusionDirective) {\n  // Make the named module visible, if it\'s not already part of the module\n  // we are parsing.\n  if (ModuleName != getLangOpts().CurrentModule) {\n    // Check whether this module is available.\n    if (Preprocessor::checkModuleIsAvailable(getLangOpts(), getTarget(), getDiagnostics(), Module)) {\n      getDiagnostics().Report(ImportLoc, diag::note_module_import_here) << SourceRange(Path.front().second, Path.back().second);"}},
[o]={
["clang/test/Modules/requires-coroutines.mm"]={"clang/test/Modules/requires-coroutines.mm:6:2: note: module imported here"}
}
},
},
["note_module_import_not_at_top_level"]={
["note_module_import_not_at_top_level"]={
[f]="A begins here",
[b]="A begins here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 begins here",
[h]="%0 begins here",
[g]=b,
[j]=i,
[e]="(.*?) begins here",
[k]="(.*?) begins here",
[d]=a,
[l]=a,
[c]=Sb,
[c]=fc,
[m]={"779448684662",1393739898,"Add [extern_c] attribute for modules, allowing a C module to be imported within an extern \"C\" block ..."},
[m]={"779448684662",1393739898,"Add [extern_c] attribute for modules, allowing a C module to be imported within an extern \"C\" block ..."},
[n]={{cb,51,"static void checkModuleImportContext(Sema &S, Module *M, SourceLocation ImportLoc, DeclContext *DC, bool FromInclude = false) {\n  if (!isa<TranslationUnitDecl>(DC)) {\n    S.Diag(cast<Decl>(DC)->getBeginLoc(), diag::note_module_import_not_at_top_level) << DC;"}}
[n]={{ib,51,"static void checkModuleImportContext(Sema &S, Module *M, SourceLocation ImportLoc, DeclContext *DC, bool FromInclude = false) {\n  if (!isa<TranslationUnitDecl>(DC)) {\n    S.Diag(cast<Decl>(DC)->getBeginLoc(), diag::note_module_import_not_at_top_level) << DC;"}},
[o]={
["clang/test/ARCMT/atautorelease-check.m"]={"clang/test/ARCMT/atautorelease-check.m:100:5: note: [rewriter] intended @autoreleasepool scope begins here","clang/test/ARCMT/atautorelease-check.m:113:5: note: [rewriter] intended @autoreleasepool scope begins here","clang/test/ARCMT/atautorelease-check.m:125:5: note: [rewriter] intended @autoreleasepool scope begins here","clang/test/ARCMT/atautorelease-check.m:136:5: note: [rewriter] intended @autoreleasepool scope begins here"}
}
},
},
["note_module_odr_violation_definition_data"]={
["note_module_odr_violation_definition_data"]={
[f]=Lb,
[b]=Pb,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in \'%0\' found %select{%2 base %plural{1:class|:classes}2|%2 virtual base %plural{1:class|:classes}2|%ordinal2 base class with different type %3|%ordinal2 %select{non-virtual|virtual}3 base class %4|%ordinal2 base class %3 with %select{public|protected|private|no}4 access specifier}1",
[h]="but in \'%0\' found %select{%2 base %plural{1:class|:classes}2|%2 virtual base %plural{1:class|:classes}2|%ordinal2 base class with different type %3|%ordinal2 %select{non-virtual|virtual}3 base class %4|%ordinal2 base class %3 with %select{public|protected|private|no}4 access specifier}1",
[g]=b,
[j]=i,
[e]="but in \'(.*?)\' found (?:(.*?) base (?:class|classes)|(.*?) virtual base (?:class|classes)|(.*?) base class with different type (.*?)|(.*?) (?:non\\-virtual|virtual) base class (.*?)|(.*?) base class (.*?) with (?:public|protected|private|no) access specifier)",
[k]="but in \'(.*?)\' found (?:(.*?) base (?:class|classes)|(.*?) virtual base (?:class|classes)|(.*?) base class with different type (.*?)|(.*?) (?:non\\-virtual|virtual) base class (.*?)|(.*?) base class (.*?) with (?:public|protected|private|no) access specifier)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"e13eabe7d339",1506737957,"[ODRHash] Add base classes to hashing CXXRecordDecl."},
[m]={"e13eabe7d339",1506737957,"[ODRHash] Add base classes to hashing CXXRecordDecl."},
[n]={{G,740,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // Diagnostics from DefinitionData are emitted here.\n  if (FirstDD != SecondDD) {\n    auto DiagBaseNote = [&SecondModule, this](SourceLocation Loc, SourceRange Range, ODRDefinitionDataDifference DiffType) { return Diag(Loc, diag::note_module_odr_violation_definition_data) << SecondModule << Range << DiffType; };"}}
[n]={{N,740,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  // Diagnostics from DefinitionData are emitted here.\n  if (FirstDD != SecondDD) {\n    auto DiagBaseNote = [&SecondModule, this](SourceLocation Loc, SourceRange Range, ODRDefinitionDataDifference DiffType) { return Diag(Loc, diag::note_module_odr_violation_definition_data) << SecondModule << Range << DiffType; };"}},
[o]={
[tc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2683:8: note: but in \'FirstModule\' found 1 base class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2693:8: note: but in \'FirstModule\' found 0 base classes","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2705:8: note: but in \'FirstModule\' found 0 virtual base classes","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2717:8: note: but in \'FirstModule\' found 1st base class with different type \'B4a\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2729:8: note: but in \'FirstModule\' found 1 virtual base class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2741:8: note: but in \'FirstModule\' found 0 virtual base classes","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2753:8: note: but in \'FirstModule\' found 1st base class \'B7a\' with protected access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2765:8: note: but in \'FirstModule\' found 1st base class \'B8a\' with public access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2777:8: note: but in \'FirstModule\' found 1st base class \'B9a\' with private access specifier","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2789:8: note: but in \'FirstModule\' found 1st base class \'B10a\' with no access specifier"}
}
},
},
["note_module_odr_violation_different_definitions"]={
["note_module_odr_violation_different_definitions"]={
[f]="definition in module \'A\' is here",
[b]="definition in module \'A\' is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="definition in module \'%0\' is here",
[h]="definition in module \'%0\' is here",
[g]=b,
[j]=i,
[e]="definition in module \'(.*?)\' is here",
[k]="definition in module \'(.*?)\' is here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"cd45dbc5f24c",1397879310,"When a module completes the definition of a class template specialization imported from another modu..."},
[m]={"cd45dbc5f24c",1397879310,"When a module completes the definition of a class template specialization imported from another modu..."},
[n]={{G,662,"void ODRDiagsEmitter::diagnoseSubMismatchUnexpected(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  Diag(SecondRecord->getLocation(), diag::note_module_odr_violation_different_definitions) << SecondModule;"}}
[n]={{N,662,"void ODRDiagsEmitter::diagnoseSubMismatchUnexpected(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  Diag(SecondRecord->getLocation(), diag::note_module_odr_violation_different_definitions) << SecondModule;"}}
},
},
["note_module_odr_violation_enum"]={
["note_module_odr_violation_enum"]={
[f]=Lb,
[b]=Pb,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in \'%0\' found %select{enum that is %select{not scoped|scoped}2|enum scoped with keyword %select{struct|class}2|enum %select{without|with}2 specified type|enum with specified type %2|enum with %2 element%s2|%ordinal2 element has name %3|%ordinal2 element %3 %select{has|does not have}4 an initializer|%ordinal2 element %3 has different initializer|}1",
[h]="but in \'%0\' found %select{enum that is %select{not scoped|scoped}2|enum scoped with keyword %select{struct|class}2|enum %select{without|with}2 specified type|enum with specified type %2|enum with %2 element%s2|%ordinal2 element has name %3|%ordinal2 element %3 %select{has|does not have}4 an initializer|%ordinal2 element %3 has different initializer|}1",
[g]=b,
[j]=i,
[e]="but in \'(.*?)\' found (?:enum that is (?:not scoped|scoped)|enum scoped with keyword (?:struct|class)|enum (?:without|with) specified type|enum with specified type (.*?)|enum with (.*?) element(.*?)|(.*?) element has name (.*?)|(.*?) element (.*?) (?:has|does not have) an initializer|(.*?) element (.*?) has different initializer|)",
[k]="but in \'(.*?)\' found (?:enum that is (?:not scoped|scoped)|enum scoped with keyword (?:struct|class)|enum (?:without|with) specified type|enum with specified type (.*?)|enum with (.*?) element(.*?)|(.*?) element has name (.*?)|(.*?) element (.*?) (?:has|does not have) an initializer|(.*?) element (.*?) has different initializer|)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"ab4d730f14d1",1532559125,"[ODRHash] Support hashing enums."},
[m]={"ab4d730f14d1",1532559125,"[ODRHash] Support hashing enums."},
[n]={{G,1816,"bool ODRDiagsEmitter::diagnoseMismatch(const EnumDecl *FirstEnum, const EnumDecl *SecondEnum) const {\n  auto DiagNote = [&SecondModule, this](const auto *DiagAnchor, ODREnumDifference DiffType) { return Diag(DiagAnchor->getLocation(), diag::note_module_odr_violation_enum) << SecondModule << DiagAnchor->getSourceRange() << DiffType; };"}}
[n]={{N,1816,"bool ODRDiagsEmitter::diagnoseMismatch(const EnumDecl *FirstEnum, const EnumDecl *SecondEnum) const {\n  auto DiagNote = [&SecondModule, this](const auto *DiagAnchor, ODREnumDifference DiffType) { return Diag(DiagAnchor->getLocation(), diag::note_module_odr_violation_enum) << SecondModule << DiagAnchor->getSourceRange() << DiffType; };"}},
[o]={
[tc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3407:6: note: but in \'FirstModule\' found enum with 0 elements","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3427:6: note: but in \'FirstModule\' found enum with 1 element","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3447:11: note: but in \'FirstModule\' found 1st element has name \'x61\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3457:11: note: but in \'FirstModule\' found 1st element \'x71\' does not have an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3467:11: note: but in \'FirstModule\' found 1st element \'x81\' has an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3477:20: note: but in \'FirstModule\' found 2nd element \'x92\' has different initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3487:12: note: but in \'FirstModule\' found enum with specified type","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3497:6: note: but in \'FirstModule\' found enum without specified type","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3507:13: note: but in \'FirstModule\' found enum with specified type \'long\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3517:13: note: but in \'FirstModule\' found enum that is scoped","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3527:6: note: but in \'FirstModule\' found enum that is not scoped","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3537:12: note: but in \'FirstModule\' found enum scoped with keyword class","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3547:13: note: but in \'FirstModule\' found enum scoped with keyword struct"}
}
},
},
["note_module_odr_violation_field"]={
["note_module_odr_violation_field"]={
[f]=tb,
[b]=Db,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in %select{\'%1\'|definition here}0 found %select{field %3|field %3 with type %4|%select{non-|}4bitfield %3|bitfield %3 with different width expression|%select{non-|}4mutable field %3|field %3 with %select{no|an}4 initializer|field %3 with a different initializer}2",
[h]="but in %select{\'%1\'|definition here}0 found %select{field %3|field %3 with type %4|%select{non-|}4bitfield %3|bitfield %3 with different width expression|%select{non-|}4mutable field %3|field %3 with %select{no|an}4 initializer|field %3 with a different initializer}2",
[g]=b,
[j]=i,
[e]="but in (?:\'(.*?)\'|definition here) found (?:field (.*?)|field (.*?) with type (.*?)|(?:non\\-|)bitfield (.*?)|bitfield (.*?) with different width expression|(?:non\\-|)mutable field (.*?)|field (.*?) with (?:no|an) initializer|field (.*?) with a different initializer)",
[k]="but in (?:\'(.*?)\'|definition here) found (?:field (.*?)|field (.*?) with type (.*?)|(?:non\\-|)bitfield (.*?)|bitfield (.*?) with different width expression|(?:non\\-|)mutable field (.*?)|field (.*?) with (?:no|an) initializer|field (.*?) with a different initializer)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={qb,1643408541,rb},
[m]={Hb,1643408541,Eb},
[n]={{G,167,"bool ODRDiagsEmitter::diagnoseSubMismatchField(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const FieldDecl *FirstField, const FieldDecl *SecondField) const {\n  auto DiagNote = [SecondField, SecondModule, this](ODRFieldDifference DiffType) { return Diag(SecondField->getLocation(), diag::note_module_odr_violation_field) << SecondModule.empty() << SecondModule << SecondField->getSourceRange() << DiffType; };"}}
[n]={{N,167,"bool ODRDiagsEmitter::diagnoseSubMismatchField(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const FieldDecl *FirstField, const FieldDecl *SecondField) const {\n  auto DiagNote = [SecondField, SecondModule, this](ODRFieldDifference DiffType) { return Diag(SecondField->getLocation(), diag::note_module_odr_violation_field) << SecondModule.empty() << SecondModule << SecondField->getSourceRange() << DiffType; };"}},
[o]={
["clang/test/Modules/odr_hash-gnu.cpp"]={"build/tools/clang/test/Modules/Output/odr_hash-gnu.cpp.tmp/Inputs/second.h:53:13: note: but in \'SecondModule\' found field \'x\' with type \'typeof (3)\' (aka \'int\')","build/tools/clang/test/Modules/Output/odr_hash-gnu.cpp.tmp/Inputs/second.h:98:13: note: but in \'SecondModule\' found field \'x\' with type \'typeof(I)\' (aka \'int\')"}
}
},
},
["note_module_odr_violation_function"]={
["note_module_odr_violation_function"]={
[f]=Lb,
[b]=Pb,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in \'%0\' found %select{different return type %2|%ordinal2 parameter with name %3|%ordinal2 parameter with type %3%select{| decayed from %5}4|%ordinal2 parameter with%select{out|}3 a default argument|%ordinal2 parameter with a different default argument|a different body}1",
[h]="but in \'%0\' found %select{different return type %2|%ordinal2 parameter with name %3|%ordinal2 parameter with type %3%select{| decayed from %5}4|%ordinal2 parameter with%select{out|}3 a default argument|%ordinal2 parameter with a different default argument|a different body}1",
[g]=b,
[j]=i,
[e]="but in \'(.*?)\' found (?:different return type (.*?)|(.*?) parameter with name (.*?)|(.*?) parameter with type (.*?)(?:| decayed from (.*?))|(.*?) parameter with(?:out|) a default argument|(.*?) parameter with a different default argument|a different body)",
[k]="but in \'(.*?)\' found (?:different return type (.*?)|(.*?) parameter with name (.*?)|(.*?) parameter with type (.*?)(?:| decayed from (.*?))|(.*?) parameter with(?:out|) a default argument|(.*?) parameter with a different default argument|a different body)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"e81caeb3147f",1512782980,"[ODRHash] Support ODR violation detection in functions."},
[m]={"e81caeb3147f",1512782980,"[ODRHash] Support ODR violation detection in functions."},
[n]={{G,1683,"bool ODRDiagsEmitter::diagnoseMismatch(const FunctionDecl *FirstFunction, const FunctionDecl *SecondFunction) const {\n  auto DiagNote = [&SecondModule, this](SourceLocation Loc, SourceRange Range, ODRFunctionDifference DiffType) { return Diag(Loc, diag::note_module_odr_violation_function) << SecondModule << Range << DiffType; };"}}
[n]={{N,1683,"bool ODRDiagsEmitter::diagnoseMismatch(const FunctionDecl *FirstFunction, const FunctionDecl *SecondFunction) const {\n  auto DiagNote = [&SecondModule, this](SourceLocation Loc, SourceRange Range, ODRFunctionDifference DiffType) { return Diag(Loc, diag::note_module_odr_violation_function) << SecondModule << Range << DiffType; };"}},
[o]={
["clang/test/Modules/odr_hash.cl"]={"build/tools/clang/test/Modules/Output/odr_hash.cl.tmp/Inputs/first.h:38:6: note: but in \'FirstModule\' found a different body","build/tools/clang/test/Modules/Output/odr_hash.cl.tmp/Inputs/first.h:41:6: note: but in \'FirstModule\' found a different body"}
}
},
},
["note_module_odr_violation_method_params"]={
["note_module_odr_violation_method_params"]={
[f]=tb,
[b]=Db,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in %select{\'%1\'|definition here}0 found %select{%select{method %4|constructor|destructor}3 that has %5 parameter%s5|%select{method %4|constructor|destructor}3 with %ordinal5 parameter of type %6%select{| decayed from %8}7|%select{method %4|constructor|destructor}3 with %ordinal5 parameter named %6}2",
[h]="but in %select{\'%1\'|definition here}0 found %select{%select{method %4|constructor|destructor}3 that has %5 parameter%s5|%select{method %4|constructor|destructor}3 with %ordinal5 parameter of type %6%select{| decayed from %8}7|%select{method %4|constructor|destructor}3 with %ordinal5 parameter named %6}2",
[g]=b,
[j]=i,
[e]="but in (?:\'(.*?)\'|definition here) found (?:(?:method (.*?)|constructor|destructor) that has (.*?) parameter(.*?)|(?:method (.*?)|constructor|destructor) with (.*?) parameter of type (.*?)(?:| decayed from (.*?))|(?:method (.*?)|constructor|destructor) with (.*?) parameter named (.*?))",
[k]="but in (?:\'(.*?)\'|definition here) found (?:(?:method (.*?)|constructor|destructor) that has (.*?) parameter(.*?)|(?:method (.*?)|constructor|destructor) with (.*?) parameter of type (.*?)(?:| decayed from (.*?))|(?:method (.*?)|constructor|destructor) with (.*?) parameter named (.*?))",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={qb,1643408541,rb},
[m]={Hb,1643408541,Eb},
[n]={{G,93,"template <typename MethodT> static bool diagnoseSubMismatchMethodParameters(DiagnosticsEngine &Diags, const NamedDecl *FirstContainer, StringRef FirstModule, StringRef SecondModule, const MethodT *FirstMethod, const MethodT *SecondMethod) {\n  auto DiagNote = [&Diags, &GetDiagMethodType, SecondModule, SecondMethod](ODRMethodParametersDifference DiffType) {\n    return Diags.Report(SecondMethod->getLocation(), diag::note_module_odr_violation_method_params) << SecondModule.empty() << SecondModule << SecondMethod->getSourceRange() << DiffType << SecondMethodType << SecondName;"}}
[n]={{N,93,"template <typename MethodT> static bool diagnoseSubMismatchMethodParameters(DiagnosticsEngine &Diags, const NamedDecl *FirstContainer, StringRef FirstModule, StringRef SecondModule, const MethodT *FirstMethod, const MethodT *SecondMethod) {\n  auto DiagNote = [&Diags, &GetDiagMethodType, SecondModule, SecondMethod](ODRMethodParametersDifference DiffType) {\n    return Diags.Report(SecondMethod->getLocation(), diag::note_module_odr_violation_method_params) << SecondModule.empty() << SecondModule << SecondMethod->getSourceRange() << DiffType << SecondMethodType << SecondName;"}},
[o]={
[tc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:547:8: note: but in \'FirstModule\' found method \'A\' that has 1 parameter","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:563:8: note: but in \'FirstModule\' found method \'A\' with 1st parameter of type \'int\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:579:8: note: but in \'FirstModule\' found method \'A\' with 1st parameter named \'x\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:621:8: note: but in \'FirstModule\' found method \'A\' with 1st parameter of type \'int *\' decayed from \'int[2]\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:897:3: note: but in \'FirstModule\' found constructor that has 1 parameter","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:3936:12: note: but in \'SecondModule\' found method \'run\' with 1st parameter of type \'B...\'"}
}
},
},
["note_module_odr_violation_mismatch_decl"]={
["note_module_odr_violation_mismatch_decl"]={
[f]=tb,
[b]=Db,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in %select{\'%1\'|definition here}0 found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property}2",
[h]="but in %select{\'%1\'|definition here}0 found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property}2",
[g]=b,
[j]=i,
[e]="but in (?:\'(.*?)\'|definition here) found (?:end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property)",
[k]="but in (?:\'(.*?)\'|definition here) found (?:end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template|method|instance variable|property)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"fa3d93a148d4",1485827055,"Add better ODR checking for modules."},
[m]={"fa3d93a148d4",1485827055,"Add better ODR checking for modules."},
[n]={{G,700,"void ODRDiagsEmitter::diagnoseSubMismatchDifferentDeclKinds(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  Diag(SecondDiagInfo.first, diag::note_module_odr_violation_mismatch_decl) << SecondModule.empty() << SecondModule << SecondDiagInfo.second << DR.SecondDiffType;"}}
[n]={{N,700,"void ODRDiagsEmitter::diagnoseSubMismatchDifferentDeclKinds(DiffResult &DR, const NamedDecl *FirstRecord, StringRef FirstModule, const NamedDecl *SecondRecord, StringRef SecondModule) const {\n  Diag(SecondDiagInfo.first, diag::note_module_odr_violation_mismatch_decl) << SecondModule.empty() << SecondModule << SecondDiagInfo.second << DR.SecondDiffType;"}},
[o]={
["clang/test/Modules/odr_hash-blocks.cpp"]={"build/tools/clang/test/Modules/Output/odr_hash-blocks.cpp.tmp/Inputs/first.h:100:3: note: but in \'FirstModule\' found public access specifier"}
}
},
},
["note_module_odr_violation_mismatch_decl_unknown"]={
["note_module_odr_violation_mismatch_decl_unknown"]={
[f]=tb,
[b]=Db,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in %select{\'%1\'|definition here}0 found %select{||||different static assert|different field|different method|different type alias|different typedef|different data member|different friend declaration|different function template|different method|different instance variable|different property|another unexpected decl}2",
[h]="but in %select{\'%1\'|definition here}0 found %select{||||different static assert|different field|different method|different type alias|different typedef|different data member|different friend declaration|different function template|different method|different instance variable|different property|another unexpected decl}2",
[g]=b,
[j]=i,
[e]="but in (?:\'(.*?)\'|definition here) found (?:||||different static assert|different field|different method|different type alias|different typedef|different data member|different friend declaration|different function template|different method|different instance variable|different property|another unexpected decl)",
[k]="but in (?:\'(.*?)\'|definition here) found (?:||||different static assert|different field|different method|different type alias|different typedef|different data member|different friend declaration|different function template|different method|different instance variable|different property|another unexpected decl)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"708859a71326",1496883381,"[ODRHash] Change the fall-back diagnostic error."},
[m]={"708859a71326",1496883381,"[ODRHash] Change the fall-back diagnostic error."},
[n]={{G,1553,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  Diag(SecondDecl->getLocation(), diag::note_module_odr_violation_mismatch_decl_unknown) << SecondModule.empty() << SecondModule << FirstDiffType << SecondDecl->getSourceRange();"},{G,1649,"bool ODRDiagsEmitter::diagnoseMismatch(const RecordDecl *FirstRecord, const RecordDecl *SecondRecord) const {\n  Diag(SecondDecl->getLocation(), diag::note_module_odr_violation_mismatch_decl_unknown) << SecondModule.empty() << SecondModule << FirstDiffType << SecondDecl->getSourceRange();"},{G,2102,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCInterfaceDecl *FirstID, const ObjCInterfaceDecl *SecondID, const struct ObjCInterfaceDecl::DefinitionData *SecondDD) const {\n  Diag(SecondDecl->getLocation(), diag::note_module_odr_violation_mismatch_decl_unknown) << SecondModule.empty() << SecondModule << FirstDiffType << SecondDecl->getSourceRange();"},{G,2208,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCProtocolDecl *FirstProtocol, const ObjCProtocolDecl *SecondProtocol, const struct ObjCProtocolDecl::DefinitionData *SecondDD) const {\n  Diag(SecondDecl->getLocation(), diag::note_module_odr_violation_mismatch_decl_unknown) << SecondModule.empty() << SecondModule << FirstDiffType << SecondDecl->getSourceRange();"}}
[n]={{N,1553,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  Diag(SecondDecl->getLocation(), diag::note_module_odr_violation_mismatch_decl_unknown) << SecondModule.empty() << SecondModule << FirstDiffType << SecondDecl->getSourceRange();"},{N,1649,"bool ODRDiagsEmitter::diagnoseMismatch(const RecordDecl *FirstRecord, const RecordDecl *SecondRecord) const {\n  Diag(SecondDecl->getLocation(), diag::note_module_odr_violation_mismatch_decl_unknown) << SecondModule.empty() << SecondModule << FirstDiffType << SecondDecl->getSourceRange();"},{N,2102,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCInterfaceDecl *FirstID, const ObjCInterfaceDecl *SecondID, const struct ObjCInterfaceDecl::DefinitionData *SecondDD) const {\n  Diag(SecondDecl->getLocation(), diag::note_module_odr_violation_mismatch_decl_unknown) << SecondModule.empty() << SecondModule << FirstDiffType << SecondDecl->getSourceRange();"},{N,2208,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCProtocolDecl *FirstProtocol, const ObjCProtocolDecl *SecondProtocol, const struct ObjCProtocolDecl::DefinitionData *SecondDD) const {\n  Diag(SecondDecl->getLocation(), diag::note_module_odr_violation_mismatch_decl_unknown) << SecondModule.empty() << SecondModule << FirstDiffType << SecondDecl->getSourceRange();"}}
},
},
["note_module_odr_violation_no_possible_decls"]={
["note_module_odr_violation_no_possible_decls"]={
[f]="definition has no member A",
[b]="definition has no member A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="definition has no member %0",
[h]="definition has no member %0",
[g]=b,
[j]=i,
[e]="definition has no member (.*?)",
[k]="definition has no member (.*?)",
[d]=a,
[l]=a,
[c]=Wb,
[c]=hc,
[m]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:"},
[m]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:"},
[n]={{Ub,9751,"void ASTReader::diagnoseOdrViolations() {\n  // For each declaration from a merged context, check that the canonical\n  // definition of that context also contains a declaration of the same\n  // entity.\n  //\n  // Caution: this loop does things that might invalidate iterators into\n  // PendingOdrMergeChecks. Don\'t turn this into a range-based for loop!\n  while (!PendingOdrMergeChecks.empty()) {\n    if (!Found) {\n      if (Candidates.empty())\n        Diag(cast<Decl>(CanonDef)->getLocation(), diag::note_module_odr_violation_no_possible_decls) << D;"}}
[n]={{ec,9751,"void ASTReader::diagnoseOdrViolations() {\n  // For each declaration from a merged context, check that the canonical\n  // definition of that context also contains a declaration of the same\n  // entity.\n  //\n  // Caution: this loop does things that might invalidate iterators into\n  // PendingOdrMergeChecks. Don\'t turn this into a range-based for loop!\n  while (!PendingOdrMergeChecks.empty()) {\n    if (!Found) {\n      if (Candidates.empty())\n        Diag(cast<Decl>(CanonDef)->getLocation(), diag::note_module_odr_violation_no_possible_decls) << D;"}},
[o]={
["clang/test/Modules/odr.cpp"]={"clang/test/Modules/odr.cpp:5:8: note: definition has no member \'n\'","clang/test/Modules/Inputs/odr/a.h:1:15: note: definition has no member \'m\'","clang/test/Modules/Inputs/odr/a.h:5:6: note: definition has no member \'e2\'"}
}
},
},
["note_module_odr_violation_objc_interface"]={
["note_module_odr_violation_objc_interface"]={
[f]=tb,
[b]=Db,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in %select{\'%1\'|definition here}0 found %select{%select{no super class|super class with type %4}3|instance variable \'%3\' access control is %select{|@private|@protected|@public|@package}4}2",
[h]="but in %select{\'%1\'|definition here}0 found %select{%select{no super class|super class with type %4}3|instance variable \'%3\' access control is %select{|@private|@protected|@public|@package}4}2",
[g]=b,
[j]=i,
[e]="but in (?:\'(.*?)\'|definition here) found (?:(?:no super class|super class with type (.*?))|instance variable \'(.*?)\' access control is (?:|@private|@protected|@public|@package))",
[k]="but in (?:\'(.*?)\'|definition here) found (?:(?:no super class|super class with type (.*?))|instance variable \'(.*?)\' access control is (?:|@private|@protected|@public|@package))",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={lb,1662843785,kb},
[m]={rb,1662843785,sb},
[n]={{G,1948,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCInterfaceDecl *FirstID, const ObjCInterfaceDecl *SecondID, const struct ObjCInterfaceDecl::DefinitionData *SecondDD) const {\n  auto DiagNote = [&SecondModule, this](SourceLocation Loc, SourceRange Range, ODRInterfaceDifference DiffType) { return Diag(Loc, diag::note_module_odr_violation_objc_interface) << SecondModule.empty() << SecondModule << Range << DiffType; };"}}
[n]={{N,1948,"bool ODRDiagsEmitter::diagnoseMismatch(const ObjCInterfaceDecl *FirstID, const ObjCInterfaceDecl *SecondID, const struct ObjCInterfaceDecl::DefinitionData *SecondDD) const {\n  auto DiagNote = [&SecondModule, this](SourceLocation Loc, SourceRange Range, ODRInterfaceDifference DiffType) { return Diag(Loc, diag::note_module_odr_violation_objc_interface) << SecondModule.empty() << SecondModule << Range << DiffType; };"}},
[o]={
["clang/test/Modules/method_pool.m"]={"clang/test/Modules/Inputs/MethodPoolA.h:10:12: note: but in \'MethodPoolA\' found super class with type \'A\'"}
}
},
},
["note_module_odr_violation_objc_method"]={
["note_module_odr_violation_objc_method"]={
[f]=tb,
[b]=Db,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in %select{\'%1\'|definition here}0 found %select{method %3 with different return type %4|method %3 as %select{class|instance}4 method|%select{no|\'required\'|\'optional\'}3 method control|method %3 with %select{no designated initializer|designated initializer}4|%select{regular|direct}4 method %3|different method %3}2",
[h]="but in %select{\'%1\'|definition here}0 found %select{method %3 with different return type %4|method %3 as %select{class|instance}4 method|%select{no|\'required\'|\'optional\'}3 method control|method %3 with %select{no designated initializer|designated initializer}4|%select{regular|direct}4 method %3|different method %3}2",
[g]=b,
[j]=i,
[e]="but in (?:\'(.*?)\'|definition here) found (?:method (.*?) with different return type (.*?)|method (.*?) as (?:class|instance) method|(?:no|\'required\'|\'optional\') method control|method (.*?) with (?:no designated initializer|designated initializer)|(?:regular|direct) method (.*?)|different method (.*?))",
[k]="but in (?:\'(.*?)\'|definition here) found (?:method (.*?) with different return type (.*?)|method (.*?) as (?:class|instance) method|(?:no|\'required\'|\'optional\') method control|method (.*?) with (?:no designated initializer|designated initializer)|(?:regular|direct) method (.*?)|different method (.*?))",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={qb,1643408541,rb},
[m]={Hb,1643408541,Eb},
[n]={{G,444,"bool ODRDiagsEmitter::diagnoseSubMismatchObjCMethod(const NamedDecl *FirstObjCContainer, StringRef FirstModule, StringRef SecondModule, const ObjCMethodDecl *FirstMethod, const ObjCMethodDecl *SecondMethod) const {\n  auto DiagNote = [SecondModule, SecondMethod, this](ODRMethodDifference DiffType) { return Diag(SecondMethod->getLocation(), diag::note_module_odr_violation_objc_method) << SecondModule.empty() << SecondModule << SecondMethod->getSourceRange() << DiffType; };"}}
[n]={{N,444,"bool ODRDiagsEmitter::diagnoseSubMismatchObjCMethod(const NamedDecl *FirstObjCContainer, StringRef FirstModule, StringRef SecondModule, const ObjCMethodDecl *FirstMethod, const ObjCMethodDecl *SecondMethod) const {\n  auto DiagNote = [SecondModule, SecondMethod, this](ODRMethodDifference DiffType) { return Diag(SecondMethod->getLocation(), diag::note_module_odr_violation_objc_method) << SecondModule.empty() << SecondModule << SecondMethod->getSourceRange() << DiffType; };"}}
},
},
["note_module_odr_violation_objc_property"]={
["note_module_odr_violation_objc_property"]={
[f]=tb,
[b]=Db,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in %select{\'%1\'|definition here}0 found %select{property %3|property %3 with type %4|%select{no|\'required\'|\'optional\'}3 property control|property %3 with different \'%select{none|readonly|getter|assign|readwrite|retain|copy|nonatomic|setter|atomic|weak|strong|unsafe_unretained|nullability|null_resettable|class|direct}4\' attribute}2",
[h]="but in %select{\'%1\'|definition here}0 found %select{property %3|property %3 with type %4|%select{no|\'required\'|\'optional\'}3 property control|property %3 with different \'%select{none|readonly|getter|assign|readwrite|retain|copy|nonatomic|setter|atomic|weak|strong|unsafe_unretained|nullability|null_resettable|class|direct}4\' attribute}2",
[g]=b,
[j]=i,
[e]="but in (?:\'(.*?)\'|definition here) found (?:property (.*?)|property (.*?) with type (.*?)|(?:no|\'required\'|\'optional\') property control|property (.*?) with different \'(?:none|readonly|getter|assign|readwrite|retain|copy|nonatomic|setter|atomic|weak|strong|unsafe_unretained|nullability|null_resettable|class|direct)\' attribute)",
[k]="but in (?:\'(.*?)\'|definition here) found (?:property (.*?)|property (.*?) with type (.*?)|(?:no|\'required\'|\'optional\') property control|property (.*?) with different \'(?:none|readonly|getter|assign|readwrite|retain|copy|nonatomic|setter|atomic|weak|strong|unsafe_unretained|nullability|null_resettable|class|direct)\' attribute)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"dcb71b5e1d13",1657144706,"[ODRHash] Hash `ObjCPropertyDecl` and diagnose discovered mismatches."},
[m]={"dcb71b5e1d13",1657144706,"[ODRHash] Hash `ObjCPropertyDecl` and diagnose discovered mismatches."},
[n]={{G,522,"bool ODRDiagsEmitter::diagnoseSubMismatchObjCProperty(const NamedDecl *FirstObjCContainer, StringRef FirstModule, StringRef SecondModule, const ObjCPropertyDecl *FirstProp, const ObjCPropertyDecl *SecondProp) const {\n  auto DiagNote = [SecondModule, SecondProp, this](SourceLocation Loc, ODRPropertyDifference DiffType) { return Diag(Loc, diag::note_module_odr_violation_objc_property) << SecondModule.empty() << SecondModule << SecondProp->getSourceRange() << DiffType; };"}}
[n]={{N,522,"bool ODRDiagsEmitter::diagnoseSubMismatchObjCProperty(const NamedDecl *FirstObjCContainer, StringRef FirstModule, StringRef SecondModule, const ObjCPropertyDecl *FirstProp, const ObjCPropertyDecl *SecondProp) const {\n  auto DiagNote = [SecondModule, SecondProp, this](SourceLocation Loc, ODRPropertyDifference DiffType) { return Diag(Loc, diag::note_module_odr_violation_objc_property) << SecondModule.empty() << SecondModule << SecondProp->getSourceRange() << DiffType; };"}}
},
},
["note_module_odr_violation_possible_decl"]={
["note_module_odr_violation_possible_decl"]={
[f]="declaration of A does not match",
[b]="declaration of A does not match",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declaration of %0 does not match",
[h]="declaration of %0 does not match",
[g]=b,
[j]=i,
[e]="declaration of (.*?) does not match",
[k]="declaration of (.*?) does not match",
[d]=a,
[l]=a,
[c]=Wb,
[c]=hc,
[m]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:"},
[m]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:"},
[n]={{Ub,9755,"void ASTReader::diagnoseOdrViolations() {\n  // For each declaration from a merged context, check that the canonical\n  // definition of that context also contains a declaration of the same\n  // entity.\n  //\n  // Caution: this loop does things that might invalidate iterators into\n  // PendingOdrMergeChecks. Don\'t turn this into a range-based for loop!\n  while (!PendingOdrMergeChecks.empty()) {\n    if (!Found) {\n      if (Candidates.empty())\n      else {\n        for (unsigned I = 0, N = Candidates.size(); I != N; ++I)\n          Diag(Candidates[I]->getLocation(), diag::note_module_odr_violation_possible_decl) << Candidates[I];"}}
[n]={{ec,9755,"void ASTReader::diagnoseOdrViolations() {\n  // For each declaration from a merged context, check that the canonical\n  // definition of that context also contains a declaration of the same\n  // entity.\n  //\n  // Caution: this loop does things that might invalidate iterators into\n  // PendingOdrMergeChecks. Don\'t turn this into a range-based for loop!\n  while (!PendingOdrMergeChecks.empty()) {\n    if (!Found) {\n      if (Candidates.empty())\n      else {\n        for (unsigned I = 0, N = Candidates.size(); I != N; ++I)\n          Diag(Candidates[I]->getLocation(), diag::note_module_odr_violation_possible_decl) << Candidates[I];"}},
[o]={
["clang/test/Modules/odr.cpp"]={"clang/test/Modules/Inputs/odr/a.h:3:9: note: declaration of \'f\' does not match"}
}
},
},
["note_module_odr_violation_record"]={
["note_module_odr_violation_record"]={
[f]=Lb,
[b]=Pb,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in \'%0\' found %select{static assert with different condition|static assert with different message|static assert with %select{|no }2message|%select{method %3|constructor|destructor}2|%select{method %3|constructor|destructor}2 is %select{not deleted|deleted}4|%select{method %3|constructor|destructor}2 is %select{not defaulted|defaulted}4|%select{method %3|constructor|destructor}2 is %select{|pure }4%select{not virtual|virtual}5|%select{method %3|constructor|destructor}2 is %select{not static|static}4|%select{method %3|constructor|destructor}2 is %select{not volatile|volatile}4|%select{method %3|constructor|destructor}2 is %select{not const|const}4|%select{method %3|constructor|destructor}2 is %select{not inline|inline}4|%select{method %3|constructor|destructor}2 with %ordinal4 parameter with%select{out|}5 a default argument|%select{method %3|constructor|destructor}2 with %ordinal4 parameter with a different default argument|%select{method %3|constructor|destructor}2 with %select{no |}4template arguments|%select{method %3|constructor|destructor}2 with %4 template argument%s4|%select{method %3|constructor|destructor}2 with %4 for %ordinal5 template argument|%select{method %3|constructor|destructor}2 with %select{no body|body}4|%select{method %3|constructor|destructor}2 with different body|friend %select{class|function}2|friend %2|friend function %2|function template %2 with %3 template parameter%s3|function template %2 with %ordinal3 template paramter being a %select{type|non-type|template}4 template parameter|function template %2 with %ordinal3 template parameter %select{with no name|named %5}4|function template %2 with %ordinal3 template parameter with %select{no |}4default argument|function template %2 with %ordinal3 template parameter with default argument %4|function template %2 with %ordinal3 template parameter with different type|function template %2 with %ordinal3 template parameter %select{not |}4being a template parameter pack|}1",
[h]="but in \'%0\' found %select{static assert with different condition|static assert with different message|static assert with %select{|no }2message|%select{method %3|constructor|destructor}2|%select{method %3|constructor|destructor}2 is %select{not deleted|deleted}4|%select{method %3|constructor|destructor}2 is %select{not defaulted|defaulted}4|%select{method %3|constructor|destructor}2 is %select{|pure }4%select{not virtual|virtual}5|%select{method %3|constructor|destructor}2 is %select{not static|static}4|%select{method %3|constructor|destructor}2 is %select{not volatile|volatile}4|%select{method %3|constructor|destructor}2 is %select{not const|const}4|%select{method %3|constructor|destructor}2 is %select{not inline|inline}4|%select{method %3|constructor|destructor}2 with %ordinal4 parameter with%select{out|}5 a default argument|%select{method %3|constructor|destructor}2 with %ordinal4 parameter with a different default argument|%select{method %3|constructor|destructor}2 with %select{no |}4template arguments|%select{method %3|constructor|destructor}2 with %4 template argument%s4|%select{method %3|constructor|destructor}2 with %4 for %ordinal5 template argument|%select{method %3|constructor|destructor}2 with %select{no body|body}4|%select{method %3|constructor|destructor}2 with different body|friend %select{class|function}2|friend %2|friend function %2|function template %2 with %3 template parameter%s3|function template %2 with %ordinal3 template paramter being a %select{type|non-type|template}4 template parameter|function template %2 with %ordinal3 template parameter %select{with no name|named %5}4|function template %2 with %ordinal3 template parameter with %select{no |}4default argument|function template %2 with %ordinal3 template parameter with default argument %4|function template %2 with %ordinal3 template parameter with different type|function template %2 with %ordinal3 template parameter %select{not |}4being a template parameter pack|}1",
[g]=b,
[j]=i,
[e]="but in \'(.*?)\' found (?:static assert with different condition|static assert with different message|static assert with (?:|no )message|(?:method (.*?)|constructor|destructor)|(?:method (.*?)|constructor|destructor) is (?:not deleted|deleted)|(?:method (.*?)|constructor|destructor) is (?:not defaulted|defaulted)|(?:method (.*?)|constructor|destructor) is (?:|pure )(?:not virtual|virtual)|(?:method (.*?)|constructor|destructor) is (?:not static|static)|(?:method (.*?)|constructor|destructor) is (?:not volatile|volatile)|(?:method (.*?)|constructor|destructor) is (?:not const|const)|(?:method (.*?)|constructor|destructor) is (?:not inline|inline)|(?:method (.*?)|constructor|destructor) with (.*?) parameter with(?:out|) a default argument|(?:method (.*?)|constructor|destructor) with (.*?) parameter with a different default argument|(?:method (.*?)|constructor|destructor) with (?:no |)template arguments|(?:method (.*?)|constructor|destructor) with (.*?) template argument(.*?)|(?:method (.*?)|constructor|destructor) with (.*?) for (.*?) template argument|(?:method (.*?)|constructor|destructor) with (?:no body|body)|(?:method (.*?)|constructor|destructor) with different body|friend (?:class|function)|friend (.*?)|friend function (.*?)|function template (.*?) with (.*?) template parameter(.*?)|function template (.*?) with (.*?) template paramter being a (?:type|non\\-type|template) template parameter|function template (.*?) with (.*?) template parameter (?:with no name|named (.*?))|function template (.*?) with (.*?) template parameter with (?:no |)default argument|function template (.*?) with (.*?) template parameter with default argument (.*?)|function template (.*?) with (.*?) template parameter with different type|function template (.*?) with (.*?) template parameter (?:not |)being a template parameter pack|)",
[k]="but in \'(.*?)\' found (?:static assert with different condition|static assert with different message|static assert with (?:|no )message|(?:method (.*?)|constructor|destructor)|(?:method (.*?)|constructor|destructor) is (?:not deleted|deleted)|(?:method (.*?)|constructor|destructor) is (?:not defaulted|defaulted)|(?:method (.*?)|constructor|destructor) is (?:|pure )(?:not virtual|virtual)|(?:method (.*?)|constructor|destructor) is (?:not static|static)|(?:method (.*?)|constructor|destructor) is (?:not volatile|volatile)|(?:method (.*?)|constructor|destructor) is (?:not const|const)|(?:method (.*?)|constructor|destructor) is (?:not inline|inline)|(?:method (.*?)|constructor|destructor) with (.*?) parameter with(?:out|) a default argument|(?:method (.*?)|constructor|destructor) with (.*?) parameter with a different default argument|(?:method (.*?)|constructor|destructor) with (?:no |)template arguments|(?:method (.*?)|constructor|destructor) with (.*?) template argument(.*?)|(?:method (.*?)|constructor|destructor) with (.*?) for (.*?) template argument|(?:method (.*?)|constructor|destructor) with (?:no body|body)|(?:method (.*?)|constructor|destructor) with different body|friend (?:class|function)|friend (.*?)|friend function (.*?)|function template (.*?) with (.*?) template parameter(.*?)|function template (.*?) with (.*?) template paramter being a (?:type|non\\-type|template) template parameter|function template (.*?) with (.*?) template parameter (?:with no name|named (.*?))|function template (.*?) with (.*?) template parameter with (?:no |)default argument|function template (.*?) with (.*?) template parameter with default argument (.*?)|function template (.*?) with (.*?) template parameter with different type|function template (.*?) with (.*?) template parameter (?:not |)being a template parameter pack|)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={qb,1643408541,rb},
[m]={Hb,1643408541,Eb},
[n]={{G,966,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  auto DiagNote = [&SecondModule, this](SourceLocation Loc, SourceRange Range, ODRCXXRecordDifference DiffType) { return Diag(Loc, diag::note_module_odr_violation_record) << SecondModule << Range << DiffType; };"}}
[n]={{N,966,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  auto DiagNote = [&SecondModule, this](SourceLocation Loc, SourceRange Range, ODRCXXRecordDifference DiffType) { return Diag(Loc, diag::note_module_odr_violation_record) << SecondModule << Range << DiffType; };"}},
[o]={
[tc]={
[1]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:103:25: note: but in \'FirstModule\' found static assert with different message",
[2]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:117:25: note: but in \'FirstModule\' found static assert with message",
[3]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:131:17: note: but in \'FirstModule\' found static assert with different condition",
[4]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:437:8: note: but in \'FirstModule\' found method \'A\'",
[5]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:453:15: note: but in \'FirstModule\' found method \'A\' is static",
[6]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:469:16: note: but in \'FirstModule\' found method \'A\' is virtual",
[7]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:485:16: note: but in \'FirstModule\' found method \'A\' is pure virtual",
[8]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:501:15: note: but in \'FirstModule\' found method \'A\' is inline",
[9]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:515:8: note: but in \'FirstModule\' found method \'A\' is volatile",
[10]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:531:8: note: but in \'FirstModule\' found method \'A\' is const",
[11]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:701:7: note: but in \'SecondModule\' found method \'BothBodies\' with different body",
[12]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:715:7: note: but in \'SecondModule\' found method \'FirstBody\' with no body",
[13]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:729:7: note: but in \'SecondModule\' found method \'SecondBody\' with body",
[14]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:739:7: note: but in \'FirstModule\' found method \'FirstBodySecondOutOfLine\' with body",
[15]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:759:7: note: but in \'SecondModule\' found method \'FirstOutOfLineSecondBody\' with body",
[16]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:785:7: note: but in \'FirstModule\' found method \'FirstBodySecondOutOfLine\' with body",
[17]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:805:7: note: but in \'SecondModule\' found method \'FirstOutOfLineSecondBody\' with body",
[18]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:821:3: note: but in \'SecondModule\' found constructor is not deleted",
[19]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/second.h:835:3: note: but in \'SecondModule\' found constructor is not defaulted",
[20]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:881:3: note: but in \'FirstModule\' found constructor",
[21]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:940:3: note: but in \'FirstModule\' found destructor",
[22]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:956:11: note: but in \'FirstModule\' found destructor is virtual",
[23]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:1856:19: note: but in \'FirstModule\' found method \'run\' with template arguments",
[24]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:1874:19: note: but in \'FirstModule\' found method \'run\' with 1 template argument",
[25]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:1893:19: note: but in \'FirstModule\' found method \'run\' with \'a\' for 1st template argument",
[26]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:1911:19: note: but in \'FirstModule\' found method \'run\' with \'a\' for 2nd template argument",
[27]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:1929:19: note: but in \'FirstModule\' found method \'run\' with 2 template arguments",
[28]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:1946:20: note: but in \'FirstModule\' found method \'f\' with 1 for 1st template argument",
[29]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:1976:20: note: but in \'FirstModule\' found method \'f\' with 1 for 1st template argument",
[30]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2021:20: note: but in \'FirstModule\' found method \'f\' with \'x\' for 1st template argument",
[31]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2071:20: note: but in \'FirstModule\' found method \'f\' with 36893488147419103230 for 1st template argument",
[32]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2394:3: note: but in \'FirstModule\' found friend \'class T1\'",
[33]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2410:3: note: but in \'FirstModule\' found friend \'class T2\'",
[34]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2426:3: note: but in \'FirstModule\' found friend class",
[35]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2440:3: note: but in \'FirstModule\' found friend function \'T5a\'",
[36]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2986:25: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter named \'x\'",
[37]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3029:36: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter with default argument",
[38]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3043:37: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter with default argument \'void\'",
[39]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3059:46: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter with default argument \'U8\'",
[40]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3077:46: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter with default argument",
[41]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3091:41: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter with different type",
[42]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3107:41: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter named \'x\'",
[43]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3121:25: note: but in \'FirstModule\' found function template \'foo\' with 1 template parameter",
[44]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3137:31: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter with default argument \'int\'",
[45]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3151:32: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter with default argument",
[46]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3165:25: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter with no default argument",
[47]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3179:25: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter with no default argument",
[48]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3193:29: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter with default argument 2",
[49]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3207:25: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter with different type",
[50]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3223:25: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter not being a template parameter pack",
[51]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3239:25: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter not being a template parameter pack",
[52]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3255:44: note: but in \'FirstModule\' found function template \'foo\' with 1st template parameter being a template parameter pack",
[53]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3271:41: note: but in \'FirstModule\' found function template \'foo\' with 1st template paramter being a template template parameter",
[54]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3289:25: note: but in \'FirstModule\' found function template \'foo\' with 1st template paramter being a type template parameter",
[55]="build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:3307:23: note: but in \'FirstModule\' found function template \'foo\' with 1st template paramter being a non-type template parameter"
}
}
},
},
["note_module_odr_violation_referenced_protocols"]={
["note_module_odr_violation_referenced_protocols"]={
[f]=tb,
[b]=Db,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in %select{\'%1\'|definition here}0 found %select{%3 referenced %plural{1:protocol|:protocols}3|%ordinal3 referenced protocol with different name %4}2",
[h]="but in %select{\'%1\'|definition here}0 found %select{%3 referenced %plural{1:protocol|:protocols}3|%ordinal3 referenced protocol with different name %4}2",
[g]=b,
[j]=i,
[e]="but in (?:\'(.*?)\'|definition here) found (?:(.*?) referenced (?:protocol|protocols)|(.*?) referenced protocol with different name (.*?))",
[k]="but in (?:\'(.*?)\'|definition here) found (?:(.*?) referenced (?:protocol|protocols)|(.*?) referenced protocol with different name (.*?))",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={qb,1643408541,rb},
[m]={Hb,1643408541,Eb},
[n]={{G,382,"bool ODRDiagsEmitter::diagnoseSubMismatchProtocols(const ObjCProtocolList &FirstProtocols, const ObjCContainerDecl *FirstContainer, StringRef FirstModule, const ObjCProtocolList &SecondProtocols, const ObjCContainerDecl *SecondContainer, StringRef SecondModule) const {\n  auto DiagRefProtocolNote = [SecondModule, this](SourceLocation Loc, SourceRange Range, ODRReferencedProtocolDifference DiffType) { return Diag(Loc, diag::note_module_odr_violation_referenced_protocols) << SecondModule.empty() << SecondModule << Range << DiffType; };"}}
[n]={{N,382,"bool ODRDiagsEmitter::diagnoseSubMismatchProtocols(const ObjCProtocolList &FirstProtocols, const ObjCContainerDecl *FirstContainer, StringRef FirstModule, const ObjCProtocolList &SecondProtocols, const ObjCContainerDecl *SecondContainer, StringRef SecondModule) const {\n  auto DiagRefProtocolNote = [SecondModule, this](SourceLocation Loc, SourceRange Range, ODRReferencedProtocolDifference DiffType) { return Diag(Loc, diag::note_module_odr_violation_referenced_protocols) << SecondModule.empty() << SecondModule << Range << DiffType; };"}}
},
},
["note_module_odr_violation_template_parameter"]={
["note_module_odr_violation_template_parameter"]={
[f]=Lb,
[b]=Pb,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in \'%0\' found %select{unnamed template parameter %2|template parameter %3|template parameter with %select{no |}2default argument|template parameter with different default argument}1",
[h]="but in \'%0\' found %select{unnamed template parameter %2|template parameter %3|template parameter with %select{no |}2default argument|template parameter with different default argument}1",
[g]=b,
[j]=i,
[e]="but in \'(.*?)\' found (?:unnamed template parameter (.*?)|template parameter (.*?)|template parameter with (?:no |)default argument|template parameter with different default argument)",
[k]="but in \'(.*?)\' found (?:unnamed template parameter (.*?)|template parameter (.*?)|template parameter with (?:no |)default argument|template parameter with different default argument)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"498117bf11d8",1503456239,"[ODRHash] Diagnose differing template parameters."},
[m]={"498117bf11d8",1503456239,"[ODRHash] Diagnose differing template parameters."},
[n]={{G,885,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  if (FirstTemplate && SecondTemplate) {\n    for (auto Pair : llvm::zip(FirstTemplateParams, SecondTemplateParams)) {\n      Diag(SecondDecl->getLocation(), diag::note_module_odr_violation_template_parameter) << SecondModule << SecondDecl->getSourceRange() << NoteDiffType << hasSecondArg << SecondName;"}}
[n]={{N,885,"bool ODRDiagsEmitter::diagnoseMismatch(const CXXRecordDecl *FirstRecord, const CXXRecordDecl *SecondRecord, const struct CXXRecordDecl::DefinitionData *SecondDD) const {\n  if (FirstTemplate && SecondTemplate) {\n    for (auto Pair : llvm::zip(FirstTemplateParams, SecondTemplateParams)) {\n      Diag(SecondDecl->getLocation(), diag::note_module_odr_violation_template_parameter) << SecondModule << SecondDecl->getSourceRange() << NoteDiffType << hasSecondArg << SecondName;"}},
[o]={
[tc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2487:17: note: but in \'FirstModule\' found template parameter \'A\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2499:17: note: but in \'FirstModule\' found template parameter with different default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2511:17: note: but in \'FirstModule\' found template parameter with default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2523:15: note: but in \'FirstModule\' found template parameter with no default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2536:31: note: but in \'FirstModule\' found template parameter with different default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2549:17: note: but in \'FirstModule\' found template parameter \'A\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2561:15: note: but in \'FirstModule\' found template parameter with different default argument","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2573:16: note: but in \'FirstModule\' found template parameter with different default argument"}
}
},
},
["note_module_odr_violation_typedef"]={
["note_module_odr_violation_typedef"]={
[f]=Lb,
[b]=Pb,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in \'%0\' found %select{%select{typedef|type alias}2 name %3|%select{typedef|type alias}2 %3 with different underlying type %4}1",
[h]="but in \'%0\' found %select{%select{typedef|type alias}2 name %3|%select{typedef|type alias}2 %3 with different underlying type %4}1",
[g]=b,
[j]=i,
[e]="but in \'(.*?)\' found (?:(?:typedef|type alias) name (.*?)|(?:typedef|type alias) (.*?) with different underlying type (.*?))",
[k]="but in \'(.*?)\' found (?:(?:typedef|type alias) name (.*?)|(?:typedef|type alias) (.*?) with different underlying type (.*?))",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={qb,1643408541,rb},
[m]={Hb,1643408541,Eb},
[n]={{G,265,"bool ODRDiagsEmitter::diagnoseSubMismatchTypedef(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const TypedefNameDecl *FirstTD, const TypedefNameDecl *SecondTD, bool IsTypeAlias) const {\n  auto DiagNote = [SecondTD, SecondModule, this](ODRTypedefDifference DiffType) { return Diag(SecondTD->getLocation(), diag::note_module_odr_violation_typedef) << SecondModule << SecondTD->getSourceRange() << DiffType; };"}}
[n]={{N,265,"bool ODRDiagsEmitter::diagnoseSubMismatchTypedef(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const TypedefNameDecl *FirstTD, const TypedefNameDecl *SecondTD, bool IsTypeAlias) const {\n  auto DiagNote = [SecondTD, SecondModule, this](ODRTypedefDifference DiffType) { return Diag(SecondTD->getLocation(), diag::note_module_odr_violation_typedef) << SecondModule << SecondTD->getSourceRange() << DiffType; };"}},
[o]={
["clang/test/Modules/odr_hash.mm"]={"build/tools/clang/test/Modules/Output/odr_hash.mm.tmp/Inputs/first.h:187:9: note: but in \'FirstModule\' found type alias \'T\' with different underlying type \'Interface2<P1,P1>\'"}
}
},
},
["note_module_odr_violation_variable"]={
["note_module_odr_violation_variable"]={
[f]=Lb,
[b]=Pb,
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="but in \'%0\' found %select{data member with name %2|data member %2 with different type %3|data member %2 with%select{out|}3 an initializer|data member %2 with a different initializer|data member %2 %select{is constexpr|is not constexpr}3}1",
[h]="but in \'%0\' found %select{data member with name %2|data member %2 with different type %3|data member %2 with%select{out|}3 an initializer|data member %2 with a different initializer|data member %2 %select{is constexpr|is not constexpr}3}1",
[g]=b,
[j]=i,
[e]="but in \'(.*?)\' found (?:data member with name (.*?)|data member (.*?) with different type (.*?)|data member (.*?) with(?:out|) an initializer|data member (.*?) with a different initializer|data member (.*?) (?:is constexpr|is not constexpr))",
[k]="but in \'(.*?)\' found (?:data member with name (.*?)|data member (.*?) with different type (.*?)|data member (.*?) with(?:out|) an initializer|data member (.*?) with a different initializer|data member (.*?) (?:is constexpr|is not constexpr))",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={qb,1643408541,rb},
[m]={Hb,1643408541,Eb},
[n]={{G,308,"bool ODRDiagsEmitter::diagnoseSubMismatchVar(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const VarDecl *FirstVD, const VarDecl *SecondVD) const {\n  auto DiagNote = [SecondVD, SecondModule, this](ODRVarDifference DiffType) { return Diag(SecondVD->getLocation(), diag::note_module_odr_violation_variable) << SecondModule << SecondVD->getSourceRange() << DiffType; };"}}
[n]={{N,308,"bool ODRDiagsEmitter::diagnoseSubMismatchVar(const NamedDecl *FirstRecord, StringRef FirstModule, StringRef SecondModule, const VarDecl *FirstVD, const VarDecl *SecondVD) const {\n  auto DiagNote = [SecondVD, SecondModule, this](ODRVarDifference DiffType) { return Diag(SecondVD->getLocation(), diag::note_module_odr_violation_variable) << SecondModule << SecondVD->getSourceRange() << DiffType; };"}},
[o]={
[tc]={"build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2230:14: note: but in \'FirstModule\' found data member with name \'x\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2246:14: note: but in \'FirstModule\' found data member \'x\' with different type \'int\'","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2261:20: note: but in \'FirstModule\' found data member \'x\' without an initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2275:20: note: but in \'FirstModule\' found data member \'x\' with a different initializer","build/tools/clang/test/Modules/Output/odr_hash.cpp.tmp/Inputs/first.h:2289:20: note: but in \'FirstModule\' found data member \'x\' is constexpr"}
}
},
},
["note_mt_message"]={
["note_mt_message"]={
[f]="[rewriter] A",
[b]="[rewriter] A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="[rewriter] %0",
[h]="[rewriter] %0",
[g]=b,
[j]=i,
[e]="\\[rewriter\\] (.*?)",
[k]="\\[rewriter\\] (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions"},
[m]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions"},
[n]={{"clang/lib/ARCMigrate/TransformActions.cpp",700,"void TransformActions::reportNote(StringRef message, SourceLocation loc, SourceRange range) { report(loc, diag::note_mt_message, range) << message; }"}}
[n]={{"clang/lib/ARCMigrate/TransformActions.cpp",700,"void TransformActions::reportNote(StringRef message, SourceLocation loc, SourceRange range) { report(loc, diag::note_mt_message, range) << message; }"}},
[o]={
["clang/test/ARCMT/nonobjc-to-objc-cast-2.m"]={"clang/test/ARCMT/nonobjc-to-objc-cast-2.m:53:3: note: [rewriter] remove the cast and change return type of function to \'NSString *\' to have the object automatically autoreleased"}
}
},
},
["note_multiversioning_caused_here"]={
["note_multiversioning_caused_here"]={
[f]="function multiversioning caused by this declaration",
[b]="function multiversioning caused by this declaration",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="function multiversioning caused by this declaration",
[h]="function multiversioning caused by this declaration",
[g]=b,
[j]=i,
[e]="function multiversioning caused by this declaration",
[k]="function multiversioning caused by this declaration",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"281d20b601c8",1515447257,"Implement Attribute Target MultiVersioning"},
[m]={"281d20b601c8",1515447257,"Implement Attribute Target MultiVersioning"},
[n]={{t,11017,"static bool checkNonMultiVersionCompatAttributes(Sema &S, const FunctionDecl *FD, const FunctionDecl *CausedFD, MultiVersionKind MVKind) {\n  const auto Diagnose = [FD, CausedFD, MVKind](Sema &S, const Attr *A) {\n    if (CausedFD)\n      S.Diag(CausedFD->getLocation(), diag::note_multiversioning_caused_here);"},{t,11192,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  return S.areMultiversionVariantFunctionsCompatible(OldFD, NewFD, S.PDiag(diag::err_multiversion_noproto), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::note_multiversioning_caused_here)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_doesnt_support) << static_cast<unsigned>(MVKind)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_diff)),"},{t,11285,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  if (CheckMultiVersionValue(S, OldFD)) {\n    S.Diag(NewFD->getLocation(), diag::note_multiversioning_caused_here);"},{t,11334,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  for (const auto *FD : OldFD->redecls()) {\n    // We allow forward declarations before ANY multiversioning attributes, but\n    // nothing after the fact.\n    if (PreviousDeclsHaveMultiVersionAttribute(FD) && ((NewTA && (!CurTA || CurTA->isInherited())) || (NewTVA && (!CurTVA || CurTVA->isInherited())))) {\n      S.Diag(NewFD->getLocation(), diag::note_multiversioning_caused_here);"}}
[n]={{u,11017,"static bool checkNonMultiVersionCompatAttributes(Sema &S, const FunctionDecl *FD, const FunctionDecl *CausedFD, MultiVersionKind MVKind) {\n  const auto Diagnose = [FD, CausedFD, MVKind](Sema &S, const Attr *A) {\n    if (CausedFD)\n      S.Diag(CausedFD->getLocation(), diag::note_multiversioning_caused_here);"},{u,11192,"static bool CheckMultiVersionAdditionalRules(Sema &S, const FunctionDecl *OldFD, const FunctionDecl *NewFD, bool CausesMV, MultiVersionKind MVKind) {\n  return S.areMultiversionVariantFunctionsCompatible(OldFD, NewFD, S.PDiag(diag::err_multiversion_noproto), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::note_multiversioning_caused_here)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_doesnt_support) << static_cast<unsigned>(MVKind)), PartialDiagnosticAt(NewFD->getLocation(), S.PDiag(diag::err_multiversion_diff)),"},{u,11285,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  if (CheckMultiVersionValue(S, OldFD)) {\n    S.Diag(NewFD->getLocation(), diag::note_multiversioning_caused_here);"},{u,11334,"static bool CheckTargetCausesMultiVersioning(Sema &S, FunctionDecl *OldFD, FunctionDecl *NewFD, bool &Redeclaration, NamedDecl *&OldDecl, LookupResult &Previous) {\n  for (const auto *FD : OldFD->redecls()) {\n    // We allow forward declarations before ANY multiversioning attributes, but\n    // nothing after the fact.\n    if (PreviousDeclsHaveMultiVersionAttribute(FD) && ((NewTA && (!CurTA || CurTA->isInherited())) || (NewTVA && (!CurTVA || CurTVA->isInherited())))) {\n      S.Diag(NewFD->getLocation(), diag::note_multiversioning_caused_here);"}},
[o]={
["clang/test/Sema/attr-target-mv.c"]={"clang/test/Sema/attr-target-mv.c:23:49: note: function multiversioning caused by this declaration","clang/test/Sema/attr-target-mv.c:86:48: note: function multiversioning caused by this declaration","clang/test/Sema/attr-target-mv.c:99:51: note: function multiversioning caused by this declaration","clang/test/Sema/attr-target-mv.c:136:49: note: function multiversioning caused by this declaration","clang/test/Sema/attr-target-mv.c:156:83: note: function multiversioning caused by this declaration","clang/test/Sema/attr-target-mv.c:163:83: note: function multiversioning caused by this declaration"}
}
},
},
["note_musttail_callconv_mismatch"]={
["note_musttail_callconv_mismatch"]={
[f]="target function has calling convention A (expected B)",
[b]="target function has calling convention A (expected B)",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="target function has calling convention %1 (expected %0)",
[h]="target function has calling convention %1 (expected %0)",
[g]=b,
[j]=i,
[e]="target function has calling convention (.*?) \\(expected (.*?)\\)",
[k]="target function has calling convention (.*?) \\(expected (.*?)\\)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ic,1607502387,jc},
[m]={Dc,1607502387,Ec},
[n]={{A,778,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Caller and callee must have matching calling conventions.\n  //\n  // Some calling conventions are physically capable of supporting tail calls\n  // even if the function types don\'t perfectly match. LLVM is currently too\n  // strict to allow this, but if LLVM added support for this in the future, we\n  // could exit early here and skip the remaining checks if the functions are\n  // using such a calling convention.\n  if (CallerType.Func->getCallConv() != CalleeType.Func->getCallConv()) {\n    Diag(CalleeLoc, diag::note_musttail_callconv_mismatch) << FunctionType::getNameForCallConv(CallerType.Func->getCallConv()) << FunctionType::getNameForCallConv(CalleeType.Func->getCallConv());"}}
[n]={{H,778,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Caller and callee must have matching calling conventions.\n  //\n  // Some calling conventions are physically capable of supporting tail calls\n  // even if the function types don\'t perfectly match. LLVM is currently too\n  // strict to allow this, but if LLVM added support for this in the future, we\n  // could exit early here and skip the remaining checks if the functions are\n  // using such a calling convention.\n  if (CallerType.Func->getCallConv() != CalleeType.Func->getCallConv()) {\n    Diag(CalleeLoc, diag::note_musttail_callconv_mismatch) << FunctionType::getNameForCallConv(CallerType.Func->getCallConv()) << FunctionType::getNameForCallConv(CalleeType.Func->getCallConv());"}},
[o]={
["clang/test/SemaCXX/attr-musttail.cpp"]={"clang/test/SemaCXX/attr-musttail.cpp:154:1: note: target function has calling convention regcall (expected cdecl)"}
}
},
},
["note_musttail_callee_defined_here"]={
["note_musttail_callee_defined_here"]={
[f]="A declared here",
[b]="A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 declared here",
[h]="%0 declared here",
[g]=b,
[j]=i,
[e]="(.*?) declared here",
[k]="(.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ic,1607502387,jc},
[m]={Dc,1607502387,Ec},
[n]={{A,796,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Caller and callee must match in whether they have a \"this\" parameter.\n  if (CallerType.This.isNull() != CalleeType.This.isNull()) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl())) {\n      Diag(CalleeLoc, diag::note_musttail_callee_defined_here) << ND->getDeclName();"}}
[n]={{H,796,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Caller and callee must match in whether they have a \"this\" parameter.\n  if (CallerType.This.isNull() != CalleeType.This.isNull()) {\n    if (const auto *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl())) {\n      Diag(CalleeLoc, diag::note_musttail_callee_defined_here) << ND->getDeclName();"}}
},
},
["note_musttail_fix_non_prototype"]={
["note_musttail_fix_non_prototype"]={
[f]="add \'void\' to the parameter list to turn an old-style K&R function declaration into a prototype",
[b]="add \'void\' to the parameter list to turn an old-style K&R function declaration into a prototype",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add \'void\' to the parameter list to turn an old-style K&R function declaration into a prototype",
[h]="add \'void\' to the parameter list to turn an old-style K&R function declaration into a prototype",
[g]=b,
[j]=i,
[e]="add \'void\' to the parameter list to turn an old\\-style K&R function declaration into a prototype",
[k]="add \'void\' to the parameter list to turn an old\\-style K&R function declaration into a prototype",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ic,1607502387,jc},
[m]={Dc,1607502387,Ec},
[n]={{A,758,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Both caller and callee must have a prototype (no K&R declarations).\n  if (!CalleeType.Func || !CallerType.Func) {\n    if (!CalleeType.Func && CE->getDirectCallee()) {\n      Diag(CE->getDirectCallee()->getBeginLoc(), diag::note_musttail_fix_non_prototype);"},{A,761,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Both caller and callee must have a prototype (no K&R declarations).\n  if (!CalleeType.Func || !CallerType.Func) {\n    if (!CallerType.Func)\n      Diag(CallerDecl->getBeginLoc(), diag::note_musttail_fix_non_prototype);"}}
[n]={{H,758,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Both caller and callee must have a prototype (no K&R declarations).\n  if (!CalleeType.Func || !CallerType.Func) {\n    if (!CalleeType.Func && CE->getDirectCallee()) {\n      Diag(CE->getDirectCallee()->getBeginLoc(), diag::note_musttail_fix_non_prototype);"},{H,761,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  // Both caller and callee must have a prototype (no K&R declarations).\n  if (!CalleeType.Func || !CallerType.Func) {\n    if (!CallerType.Func)\n      Diag(CallerDecl->getBeginLoc(), diag::note_musttail_fix_non_prototype);"}},
[o]={
["clang/test/Sema/attr-musttail.c"]={"clang/test/Sema/attr-musttail.c:3:1: note: add \'void\' to the parameter list to turn an old-style K&R function declaration into a prototype","clang/test/Sema/attr-musttail.c:9:1: note: add \'void\' to the parameter list to turn an old-style K&R function declaration into a prototype"}
}
},
},
["note_musttail_mismatch"]={
["note_musttail_mismatch"]={
[f]="target function ...",
[b]="target function ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="target function %select{is a member of different class%diff{ (expected $ but has $)|}1,2|has different number of parameters (expected %1 but has %2)|has type mismatch at %ordinal3 parameter%diff{ (expected $ but has $)|}1,2|has different return type%diff{ ($ expected but has $)|}1,2}0",
[h]="target function %select{is a member of different class%diff{ (expected $ but has $)|}1,2|has different number of parameters (expected %1 but has %2)|has type mismatch at %ordinal3 parameter%diff{ (expected $ but has $)|}1,2|has different return type%diff{ ($ expected but has $)|}1,2}0",
[g]=b,
[j]=i,
[e]="target function (?:is a member of different class(?: \\(expected (.*?) but has (.*?)\\)|)|has different number of parameters \\(expected (.*?) but has (.*?)\\)|has type mismatch at (.*?) parameter(?: \\(expected (.*?) but has (.*?)\\)|)|has different return type(?: \\((.*?) expected but has (.*?)\\)|))",
[k]="target function (?:is a member of different class(?: \\(expected (.*?) but has (.*?)\\)|)|has different number of parameters \\(expected (.*?) but has (.*?)\\)|has type mismatch at (.*?) parameter(?: \\(expected (.*?) but has (.*?)\\)|)|has different return type(?: \\((.*?) expected but has (.*?)\\)|))",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ic,1607502387,jc},
[m]={Dc,1607502387,Ec},
[n]={{A,851,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  PartialDiagnostic PD = PDiag(diag::note_musttail_mismatch);"}}
[n]={{H,851,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  PartialDiagnostic PD = PDiag(diag::note_musttail_mismatch);"}},
[o]={
["clang/test/SemaCXX/attr-musttail.cpp"]={"clang/test/SemaCXX/attr-musttail.cpp:17:1: note: target function has different number of parameters (expected 1 but has 0)","clang/test/SemaCXX/attr-musttail.cpp:23:1: note: target function has type mismatch at 1st parameter (expected \'long\' but has \'int\')","clang/test/SemaCXX/attr-musttail.cpp:29:1: note: target function has different return type (\'int\' expected but has \'long\')","clang/test/SemaCXX/attr-musttail.cpp:133:1: note: target function has type mismatch at 1st parameter (expected \'short\' but has \'int\')","clang/test/SemaCXX/attr-musttail.cpp:132:1: note: target function has type mismatch at 1st parameter (expected \'int\' but has \'short\')","clang/test/SemaCXX/attr-musttail.cpp:144:3: note: target function is a member of different class (expected \'TestClassMismatch2\' but has \'TestClassMismatch1\')","clang/test/SemaCXX/attr-musttail.cpp:234:3: note: target function has different return type (\'long\' expected but has \'int\')","clang/test/SemaCXX/attr-musttail.cpp:102:1: note: target function has different return type (\'long\' expected but has \'int\')"}
}
},
},
["note_musttail_structors_forbidden"]={
["note_musttail_structors_forbidden"]={
[f]="target ... is declared here",
[b]="target ... is declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="target %select{constructor|destructor}0 is declared here",
[h]="target %select{constructor|destructor}0 is declared here",
[g]=b,
[j]=i,
[e]="target (?:constructor|destructor) is declared here",
[k]="target (?:constructor|destructor) is declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ic,1607502387,jc},
[m]={Dc,1607502387,Ec},
[n]={{A,685,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  auto GetMethodType = [this, St, MTA](const CXXMethodDecl *CMD, FuncType &Type, bool IsCallee) -> bool {\n    if (isa<CXXConstructorDecl, CXXDestructorDecl>(CMD)) {\n      if (IsCallee)\n        Diag(CMD->getBeginLoc(), diag::note_musttail_structors_forbidden) << isa<CXXDestructorDecl>(CMD);"}}
[n]={{H,685,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  auto GetMethodType = [this, St, MTA](const CXXMethodDecl *CMD, FuncType &Type, bool IsCallee) -> bool {\n    if (isa<CXXConstructorDecl, CXXDestructorDecl>(CMD)) {\n      if (IsCallee)\n        Diag(CMD->getBeginLoc(), diag::note_musttail_structors_forbidden) << isa<CXXDestructorDecl>(CMD);"}},
[o]={
["clang/test/SemaCXX/attr-musttail.cpp"]={"clang/test/SemaCXX/attr-musttail.cpp:190:8: note: target destructor is declared here","clang/test/SemaCXX/attr-musttail.cpp:208:3: note: target constructor is declared here"}
}
},
},
["note_namespace_defined_here"]={
["note_namespace_defined_here"]={
[f]="namespace A defined here",
[b]="namespace A defined here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="namespace %0 defined here",
[h]="namespace %0 defined here",
[g]=b,
[j]=i,
[e]="namespace (.*?) defined here",
[k]="namespace (.*?) defined here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"cdf87024edb7",1277834026,"Allow a using directive to refer to the implicitly-defined namespace"},
[m]={"cdf87024edb7",1277834026,"Allow a using directive to refer to the implicitly-defined namespace"},
[n]={{q,11905,"static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), Sc, &SS, CCC, Sema::CTK_ErrorRecovery)) {\n    if (DeclContext *DC = S.computeDeclContext(SS, false)) {\n      S.diagnoseTypo(Corrected, S.PDiag(diag::err_using_directive_member_suggest) << Ident << DC << DroppedSpecifier << SS.getRange(), S.PDiag(diag::note_namespace_defined_here));"},{q,11909,"static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), Sc, &SS, CCC, Sema::CTK_ErrorRecovery)) {\n    if (DeclContext *DC = S.computeDeclContext(SS, false)) {\n    } else {\n      S.diagnoseTypo(Corrected, S.PDiag(diag::err_using_directive_suggest) << Ident, S.PDiag(diag::note_namespace_defined_here));"}}
[n]={{r,11905,"static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), Sc, &SS, CCC, Sema::CTK_ErrorRecovery)) {\n    if (DeclContext *DC = S.computeDeclContext(SS, false)) {\n      S.diagnoseTypo(Corrected, S.PDiag(diag::err_using_directive_member_suggest) << Ident << DC << DroppedSpecifier << SS.getRange(), S.PDiag(diag::note_namespace_defined_here));"},{r,11909,"static bool TryNamespaceTypoCorrection(Sema &S, LookupResult &R, Scope *Sc, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident) {\n  if (TypoCorrection Corrected = S.CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), Sc, &SS, CCC, Sema::CTK_ErrorRecovery)) {\n    if (DeclContext *DC = S.computeDeclContext(SS, false)) {\n    } else {\n      S.diagnoseTypo(Corrected, S.PDiag(diag::err_using_directive_suggest) << Ident, S.PDiag(diag::note_namespace_defined_here));"}},
[o]={
["clang/test/Parser/cxx-using-directive.cpp"]={"clang/test/Parser/cxx-using-directive.cpp:6:13: note: namespace \'::B::A\' defined here","clang/test/Parser/cxx-using-directive.cpp:11:11: note: namespace \'C\' defined here","clang/test/Parser/cxx-using-directive.cpp:6:13: note: namespace \'B::A\' defined here","clang/test/Parser/cxx-using-directive.cpp:6:13: note: namespace \'B::A\' defined here"}
}
},
},
["note_neon_vector_initializer_non_portable"]={
["note_neon_vector_initializer_non_portable"]={
[f]="consider using vld1_AB() to initialize a vector from memory, or vcreate_CD() to initialize from an integer constant",
[b]="consider using vld1_AB() to initialize a vector from memory, or vcreate_CD() to initialize from an integer constant",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="consider using vld1_%0%1() to initialize a vector from memory, or vcreate_%0%1() to initialize from an integer constant",
[h]="consider using vld1_%0%1() to initialize a vector from memory, or vcreate_%0%1() to initialize from an integer constant",
[g]=b,
[j]=i,
[e]="consider using vld1_(.*?)(.*?)\\(\\) to initialize a vector from memory, or vcreate_(.*?)(.*?)\\(\\) to initialize from an integer constant",
[k]="consider using vld1_(.*?)(.*?)\\(\\) to initialize a vector from memory, or vcreate_(.*?)(.*?)\\(\\) to initialize from an integer constant",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"9eef2659bf60",1403274913,"The ability to use vector initializer lists is a GNU vector extension"},
[m]={"9eef2659bf60",1403274913,"The ability to use vector initializer lists is a GNU vector extension"},
[n]={{D,1865,"void InitListChecker::CheckVectorType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (!SemaRef.getLangOpts().OpenCL && !SemaRef.getLangOpts().HLSL) {\n    if (isBigEndian && (T->getVectorKind() == VectorType::NeonVector || T->getVectorKind() == VectorType::NeonPolyVector)) {\n      SemaRef.Diag(IList->getBeginLoc(), SemaRef.Context.getTypeSize(VT) > 64 ? diag::note_neon_vector_initializer_non_portable_q : diag::note_neon_vector_initializer_non_portable) << typeCode << typeSize;"}}
[n]={{K,1865,"void InitListChecker::CheckVectorType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (!SemaRef.getLangOpts().OpenCL && !SemaRef.getLangOpts().HLSL) {\n    if (isBigEndian && (T->getVectorKind() == VectorType::NeonVector || T->getVectorKind() == VectorType::NeonPolyVector)) {\n      SemaRef.Diag(IList->getBeginLoc(), SemaRef.Context.getTypeSize(VT) > 64 ? diag::note_neon_vector_initializer_non_portable_q : diag::note_neon_vector_initializer_non_portable) << typeCode << typeSize;"}},
[o]={
["clang/test/Sema/big-endian-neon-initializers.c"]={"clang/test/Sema/big-endian-neon-initializers.c:9:15: note: consider using vld1_s16() to initialize a vector from memory, or vcreate_s16() to initialize from an integer constant","clang/test/Sema/big-endian-neon-initializers.c:11:17: note: consider using vld1_f32() to initialize a vector from memory, or vcreate_f32() to initialize from an integer constant"}
}
},
},
["note_neon_vector_initializer_non_portable_q"]={
["note_neon_vector_initializer_non_portable_q"]={
[f]="consider using vld1q_AB() to initialize a vector from memory, or vcombine_CD(vcreate_EF(), vcreate_GH()) to initialize from integer constants",
[b]="consider using vld1q_AB() to initialize a vector from memory, or vcombine_CD(vcreate_EF(), vcreate_GH()) to initialize from integer constants",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="consider using vld1q_%0%1() to initialize a vector from memory, or vcombine_%0%1(vcreate_%0%1(), vcreate_%0%1()) to initialize from integer constants",
[h]="consider using vld1q_%0%1() to initialize a vector from memory, or vcombine_%0%1(vcreate_%0%1(), vcreate_%0%1()) to initialize from integer constants",
[g]=b,
[j]=i,
[e]="consider using vld1q_(.*?)(.*?)\\(\\) to initialize a vector from memory, or vcombine_(.*?)(.*?)\\(vcreate_(.*?)(.*?)\\(\\), vcreate_(.*?)(.*?)\\(\\)\\) to initialize from integer constants",
[k]="consider using vld1q_(.*?)(.*?)\\(\\) to initialize a vector from memory, or vcombine_(.*?)(.*?)\\(vcreate_(.*?)(.*?)\\(\\), vcreate_(.*?)(.*?)\\(\\)\\) to initialize from integer constants",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"9eef2659bf60",1403274913,"The ability to use vector initializer lists is a GNU vector extension"},
[m]={"9eef2659bf60",1403274913,"The ability to use vector initializer lists is a GNU vector extension"},
[n]={{D,1864,"void InitListChecker::CheckVectorType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (!SemaRef.getLangOpts().OpenCL && !SemaRef.getLangOpts().HLSL) {\n    if (isBigEndian && (T->getVectorKind() == VectorType::NeonVector || T->getVectorKind() == VectorType::NeonPolyVector)) {\n      SemaRef.Diag(IList->getBeginLoc(), SemaRef.Context.getTypeSize(VT) > 64 ? diag::note_neon_vector_initializer_non_portable_q : diag::note_neon_vector_initializer_non_portable) << typeCode << typeSize;"}}
[n]={{K,1864,"void InitListChecker::CheckVectorType(const InitializedEntity &Entity, InitListExpr *IList, QualType DeclType, unsigned &Index, InitListExpr *StructuredList, unsigned &StructuredIndex) {\n  if (!SemaRef.getLangOpts().OpenCL && !SemaRef.getLangOpts().HLSL) {\n    if (isBigEndian && (T->getVectorKind() == VectorType::NeonVector || T->getVectorKind() == VectorType::NeonPolyVector)) {\n      SemaRef.Diag(IList->getBeginLoc(), SemaRef.Context.getTypeSize(VT) > 64 ? diag::note_neon_vector_initializer_non_portable_q : diag::note_neon_vector_initializer_non_portable) << typeCode << typeSize;"}},
[o]={
["clang/test/Sema/big-endian-neon-initializers.c"]={"clang/test/Sema/big-endian-neon-initializers.c:8:15: note: consider using vld1q_s32() to initialize a vector from memory, or vcombine_s32(vcreate_s32(), vcreate_s32()) to initialize from integer constants","clang/test/Sema/big-endian-neon-initializers.c:10:15: note: consider using vld1q_s64() to initialize a vector from memory, or vcombine_s64(vcreate_s64(), vcreate_s64()) to initialize from integer constants"}
}
},
},
["note_nested_requirement_here"]={
["note_nested_requirement_here"]={
[f]="while checking the satisfaction of nested requirement requested here",
[b]="while checking the satisfaction of nested requirement requested here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="while checking the satisfaction of nested requirement requested here",
[h]="while checking the satisfaction of nested requirement requested here",
[g]=b,
[j]=i,
[e]="while checking the satisfaction of nested requirement requested here",
[k]="while checking the satisfaction of nested requirement requested here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ab,1576172311,bb},
[m]={ob,1576172311,lb},
[n]={{z,951,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::NestedRequirementConstraintsCheck:\n      Diags.Report(Active->PointOfInstantiation, diag::note_nested_requirement_here) << Active->InstantiationRange;"},{z,1025,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintsCheck: {\n      if (!Active->Entity) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_nested_requirement_here) << Active->InstantiationRange;"}}
[n]={{G,951,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::NestedRequirementConstraintsCheck:\n      Diags.Report(Active->PointOfInstantiation, diag::note_nested_requirement_here) << Active->InstantiationRange;"},{G,1025,"/// Prints the current instantiation stack through a series of\n/// notes.\nvoid Sema::PrintInstantiationStack() {\n  for (SmallVectorImpl<CodeSynthesisContext>::reverse_iterator Active = CodeSynthesisContexts.rbegin(), ActiveEnd = CodeSynthesisContexts.rend(); Active != ActiveEnd; ++Active, ++InstantiationIdx) {\n    case CodeSynthesisContext::ConstraintsCheck: {\n      if (!Active->Entity) {\n        Diags.Report(Active->PointOfInstantiation, diag::note_nested_requirement_here) << Active->InstantiationRange;"}},
[o]={
["clang/test/CXX/temp/temp.constr/temp.constr.atomic/constrant-satisfaction-conversions.cpp"]={"clang/test/CXX/temp/temp.constr/temp.constr.atomic/constrant-satisfaction-conversions.cpp:28:12: note: while checking the satisfaction of nested requirement requested here","clang/test/CXX/temp/temp.constr/temp.constr.atomic/constrant-satisfaction-conversions.cpp:28:12: note: while checking the satisfaction of nested requirement requested here"}
}
},
},
["note_nested_requirement_substitution_error"]={
["note_nested_requirement_substitution_error"]={
[f]="... \'A\' would be invalidB",
[b]="... \'A\' would be invalidB",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{and|because}0 \'%1\' would be invalid%2",
[h]="%select{and|because}0 \'%1\' would be invalid%2",
[g]=b,
[j]=i,
[e]="(?:and|because) \'(.*?)\' would be invalid(.*?)",
[k]="(?:and|because) \'(.*?)\' would be invalid(.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ab,1576172311,bb},
[m]={ob,1576172311,lb},
[n]={{O,1017,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::NestedRequirement *Req, bool First) {\n  for (auto &Pair : Req->getConstraintSatisfaction()) {\n    if (auto *SubstDiag = Pair.second.dyn_cast<SubstitutionDiagnostic *>())\n      S.Diag(SubstDiag->first, diag::note_nested_requirement_substitution_error) << (int)First << Req->getInvalidConstraintEntity() << SubstDiag->second;"}}
[n]={{W,1017,"static void diagnoseUnsatisfiedRequirement(Sema &S, concepts::NestedRequirement *Req, bool First) {\n  for (auto &Pair : Req->getConstraintSatisfaction()) {\n    if (auto *SubstDiag = Pair.second.dyn_cast<SubstitutionDiagnostic *>())\n      S.Diag(SubstDiag->first, diag::note_nested_requirement_substitution_error) << (int)First << Req->getInvalidConstraintEntity() << SubstDiag->second;"}}
},
},
["note_nested_requirement_unknown_substitution_error"]={
["note_nested_requirement_unknown_substitution_error"]={
[f]="... \'A\' would be invalid",
[b]="... \'A\' would be invalid",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{and|because}0 \'%1\' would be invalid",
[h]="%select{and|because}0 \'%1\' would be invalid",
[g]=b,
[j]=i,
[e]="(?:and|because) \'(.*?)\' would be invalid",
[k]="(?:and|because) \'(.*?)\' would be invalid",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={ab,1576172311,bb}
[m]={ob,1576172311,lb}
},
},
["note_next_field_declaration"]={
["note_next_field_declaration"]={
[f]="next field declaration is here",
[b]="next field declaration is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="next field declaration is here",
[h]="next field declaration is here",
[g]=b,
[j]=i,
[e]="next field declaration is here",
[k]="next field declaration is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C."},
[m]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C."},
[n]={{t,18794,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n    if (FDTy->isFunctionType()) {\n    } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n      if (Record) {\n        if (!Record->isUnion() && !IsLastField) {\n          Diag((*(i + 1))->getLocation(), diag::note_next_field_declaration);"}}
[n]={{u,18794,"void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, ArrayRef<Decl *> Fields, SourceLocation LBrac, SourceLocation RBrac, const ParsedAttributesView &Attrs) {\n  for (ArrayRef<Decl *>::iterator i = Fields.begin(), end = Fields.end(); i != end; ++i) {\n    if (FDTy->isFunctionType()) {\n    } else if (FDTy->isIncompleteArrayType() && (Record || isa<ObjCContainerDecl>(EnclosingDecl))) {\n      if (Record) {\n        if (!Record->isUnion() && !IsLastField) {\n          Diag((*(i + 1))->getLocation(), diag::note_next_field_declaration);"}},
[o]={
["clang/test/SemaCXX/flexible-array-test.cpp"]={"clang/test/SemaCXX/flexible-array-test.cpp:71:7: note: next field declaration is here"}
}
},
},
["note_next_ivar_declaration"]={
["note_next_ivar_declaration"]={
[f]="next ... is here",
[b]="next ... is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="next %select{instance variable declaration|synthesized instance variable}0 is here",
[h]="next %select{instance variable declaration|synthesized instance variable}0 is here",
[g]=b,
[j]=i,
[e]="next (?:instance variable declaration|synthesized instance variable) is here",
[k]="next (?:instance variable declaration|synthesized instance variable) is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C."},
[m]={"30680e943735",1508796101,"[Sema] Add support for flexible array members in Obj-C."},
[n]={{E,3901,"static void DiagnoseVariableSizedIvars(Sema &S, ObjCContainerDecl *OCD) {\n  // Check if variable sized ivar is followed by another ivar.\n  for (ObjCIvarDecl *ivar = IntfDecl->all_declared_ivar_begin(); ivar; ivar = ivar->getNextIvar()) {\n    if (IsInvalidIvar) {\n      S.Diag(ivar->getNextIvar()->getLocation(), diag::note_next_ivar_declaration) << ivar->getNextIvar()->getSynthesize();"}}
[n]={{M,3901,"static void DiagnoseVariableSizedIvars(Sema &S, ObjCContainerDecl *OCD) {\n  // Check if variable sized ivar is followed by another ivar.\n  for (ObjCIvarDecl *ivar = IntfDecl->all_declared_ivar_begin(); ivar; ivar = ivar->getNextIvar()) {\n    if (IsInvalidIvar) {\n      S.Diag(ivar->getNextIvar()->getLocation(), diag::note_next_ivar_declaration) << ivar->getNextIvar()->getSynthesize();"}},
[o]={
["clang/test/SemaObjCXX/flexible-array.mm"]={"clang/test/SemaObjCXX/flexible-array.mm:17:7: note: next instance variable declaration is here","clang/test/SemaObjCXX/flexible-array.mm:35:7: note: next instance variable declaration is here"}
}
},
},
["note_non_c_like_anon_struct"]={
["note_non_c_like_anon_struct"]={
[f]="type is not C-compatible due to this ...",
[b]="type is not C-compatible due to this ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="type is not C-compatible due to this %select{base class|default member initializer|lambda expression|friend declaration|member declaration}0",
[h]="type is not C-compatible due to this %select{base class|default member initializer|lambda expression|friend declaration|member declaration}0",
[g]=b,
[j]=i,
[e]="type is not C\\-compatible due to this (?:base class|default member initializer|lambda expression|friend declaration|member declaration)",
[k]="type is not C\\-compatible due to this (?:base class|default member initializer|lambda expression|friend declaration|member declaration)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling"},
[m]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling"},
[n]={{t,5030,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n  if (NonCLike || ChangesLinkage) {\n    if (NonCLike.Kind != NonCLikeKind::None) {\n      Diag(NonCLike.Range.getBegin(), diag::note_non_c_like_anon_struct) << NonCLike.Kind - 1 << NonCLike.Range;"}}
[n]={{u,5030,"void Sema::setTagNameForLinkagePurposes(TagDecl *TagFromDeclSpec, TypedefNameDecl *NewTD) {\n  if (NonCLike || ChangesLinkage) {\n    if (NonCLike.Kind != NonCLikeKind::None) {\n      Diag(NonCLike.Range.getBegin(), diag::note_non_c_like_anon_struct) << NonCLike.Kind - 1 << NonCLike.Range;"}},
[o]={
["clang/test/SemaCXX/warn-unused-local-typedef.cpp"]={"clang/test/SemaCXX/warn-unused-local-typedef.cpp:112:5: note: type is not C-compatible due to this member declaration","clang/test/SemaCXX/warn-unused-local-typedef.cpp:117:5: note: type is not C-compatible due to this member declaration"}
}
},
},
["note_non_deducible_parameter"]={
["note_non_deducible_parameter"]={
[f]="non-deducible template parameter A",
[b]="non-deducible template parameter A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="non-deducible template parameter %0",
[h]="non-deducible template parameter %0",
[g]=b,
[j]=i,
[e]="non\\-deducible template parameter (.*?)",
[k]="non\\-deducible template parameter (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"4e05eaa9e84a",1487205407,"[c++1z] Diagnose non-deducible template parameters in deduction guide templates, per [temp.param]p11..."},
[m]={"4e05eaa9e84a",1487205407,"[c++1z] Diagnose non-deducible template parameters in deduction guide templates, per [temp.param]p11..."},
[n]={{u,4441,"static void noteNonDeducibleParameters(Sema &S, TemplateParameterList *TemplateParams, const llvm::SmallBitVector &DeducibleParams) {\n  for (unsigned I = 0, N = DeducibleParams.size(); I != N; ++I) {\n    if (!DeducibleParams[I]) {\n      if (Param->getDeclName())\n        S.Diag(Param->getLocation(), diag::note_non_deducible_parameter) << Param->getDeclName();"},{u,4444,"static void noteNonDeducibleParameters(Sema &S, TemplateParameterList *TemplateParams, const llvm::SmallBitVector &DeducibleParams) {\n  for (unsigned I = 0, N = DeducibleParams.size(); I != N; ++I) {\n    if (!DeducibleParams[I]) {\n      if (Param->getDeclName())\n      else\n        S.Diag(Param->getLocation(), diag::note_non_deducible_parameter) << \"(anonymous)\";"}}
[n]={{v,4441,"static void noteNonDeducibleParameters(Sema &S, TemplateParameterList *TemplateParams, const llvm::SmallBitVector &DeducibleParams) {\n  for (unsigned I = 0, N = DeducibleParams.size(); I != N; ++I) {\n    if (!DeducibleParams[I]) {\n      if (Param->getDeclName())\n        S.Diag(Param->getLocation(), diag::note_non_deducible_parameter) << Param->getDeclName();"},{v,4444,"static void noteNonDeducibleParameters(Sema &S, TemplateParameterList *TemplateParams, const llvm::SmallBitVector &DeducibleParams) {\n  for (unsigned I = 0, N = DeducibleParams.size(); I != N; ++I) {\n    if (!DeducibleParams[I]) {\n      if (Param->getDeclName())\n      else\n        S.Diag(Param->getLocation(), diag::note_non_deducible_parameter) << \"(anonymous)\";"}},
[o]={
["clang/test/CXX/temp/temp.decls/temp.class.spec/p8-1y.cpp"]={"clang/test/CXX/temp/temp.decls/temp.class.spec/p8-1y.cpp:25:21: note: non-deducible template parameter \'Inner\'","clang/test/CXX/temp/temp.decls/temp.class.spec/p8-1y.cpp:31:44: note: non-deducible template parameter \'Inner\'","clang/test/CXX/temp/temp.decls/temp.class.spec/p8-1y.cpp:25:21: note: non-deducible template parameter \'Inner\'","clang/test/CXX/temp/temp.decls/temp.class.spec/p8-1y.cpp:25:21: note: non-deducible template parameter \'Inner\'"}
}
},
},
["note_non_instantiated_member_here"]={
["note_non_instantiated_member_here"]={
[f]="not-yet-instantiated member is declared here",
[b]="not-yet-instantiated member is declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="not-yet-instantiated member is declared here",
[h]="not-yet-instantiated member is declared here",
[g]=b,
[j]=i,
[e]="not\\-yet\\-instantiated member is declared here",
[k]="not\\-yet\\-instantiated member is declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"528ad93924b1",1299442365,"We may fail to map a declaration in a template to its instantiated"},
[m]={"528ad93924b1",1299442365,"We may fail to map a declaration in a template to its instantiated"},
[n]={{dc,6324,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n///  enum Kind {\n///    KnownValue = sizeof(T)\n///  };\n///\n///  bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n  if (ParentDC != D->getDeclContext()) {\n    if (!Result) {\n      if (isa<UsingShadowDecl>(D)) {\n      } else if (hasUncompilableErrorOccurred()) {\n      } else if (IsBeingInstantiated) {\n        Diag(D->getLocation(), diag::note_non_instantiated_member_here);"}}
[n]={{nc,6324,"/// Find the instantiation of the given declaration within the\n/// current instantiation.\n///\n/// This routine is intended to be used when \\p D is a declaration\n/// referenced from within a template, that needs to mapped into the\n/// corresponding declaration within an instantiation. For example,\n/// given:\n///\n/// \\code\n/// template<typename T>\n/// struct X {\n///  enum Kind {\n///    KnownValue = sizeof(T)\n///  };\n///\n///  bool getKind() const { return KnownValue; }\n/// };\n///\n/// template struct X<int>;\n/// \\endcode\n///\n/// In the instantiation of X<int>::getKind(), we need to map the \\p\n/// EnumConstantDecl for \\p KnownValue (which refers to\n/// X<T>::<Kind>::KnownValue) to its instantiation (X<int>::<Kind>::KnownValue).\n/// \\p FindInstantiatedDecl performs this mapping from within the instantiation\n/// of X<int>.\nNamedDecl *Sema::FindInstantiatedDecl(SourceLocation Loc, NamedDecl *D, const MultiLevelTemplateArgumentList &TemplateArgs, bool FindingInstantiatedContext) {\n  if (ParentDC != D->getDeclContext()) {\n    if (!Result) {\n      if (isa<UsingShadowDecl>(D)) {\n      } else if (hasUncompilableErrorOccurred()) {\n      } else if (IsBeingInstantiated) {\n        Diag(D->getLocation(), diag::note_non_instantiated_member_here);"}},
[o]={
["clang/test/SemaCXX/many-template-parameter-lists.cpp"]={"clang/test/SemaCXX/many-template-parameter-lists.cpp:8:10: note: not-yet-instantiated member is declared here"}
}
},
},
["note_non_literal_base_class"]={
["note_non_literal_base_class"]={
[f]="A is not literal because it has base class B of non-literal type",
[b]="A is not literal because it has base class B of non-literal type",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is not literal because it has base class %1 of non-literal type",
[h]="%0 is not literal because it has base class %1 of non-literal type",
[g]=b,
[j]=i,
[e]="(.*?) is not literal because it has base class (.*?) of non\\-literal type",
[k]="(.*?) is not literal because it has base class (.*?) of non\\-literal type",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={fb,1317436288,mb},
[m]={Ab,1317436288,ub},
[n]={{B,9350,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n  } else if (!RD->isAggregate() && !RD->hasConstexprNonCopyMoveConstructor() && !RD->hasTrivialDefaultConstructor()) {\n  } else if (RD->hasNonLiteralTypeFieldsOrBases()) {\n    for (const auto &I : RD->bases()) {\n      if (!I.getType()->isLiteralType(Context)) {\n        Diag(I.getBeginLoc(), diag::note_non_literal_base_class) << RD << I.getType() << I.getSourceRange();"}}
[n]={{I,9350,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n  } else if (!RD->isAggregate() && !RD->hasConstexprNonCopyMoveConstructor() && !RD->hasTrivialDefaultConstructor()) {\n  } else if (RD->hasNonLiteralTypeFieldsOrBases()) {\n    for (const auto &I : RD->bases()) {\n      if (!I.getType()->isLiteralType(Context)) {\n        Diag(I.getBeginLoc(), diag::note_non_literal_base_class) << RD << I.getType() << I.getSourceRange();"}},
[o]={
["clang/test/CXX/special/class.inhctor/p2.cpp"]={"clang/test/CXX/special/class.inhctor/p2.cpp:71:25: note: \'BothNonLiteral\' is not literal because it has base class \'NonLiteral\' of non-literal type"}
}
},
},
["note_non_literal_field"]={
["note_non_literal_field"]={
[f]="A is not literal because it has data member B of ... type C",
[b]="A is not literal because it has data member B of ... type C",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is not literal because it has data member %1 of %select{non-literal|volatile}3 type %2",
[h]="%0 is not literal because it has data member %1 of %select{non-literal|volatile}3 type %2",
[g]=b,
[j]=i,
[e]="(.*?) is not literal because it has data member (.*?) of (?:non\\-literal|volatile) type (.*?)",
[k]="(.*?) is not literal because it has data member (.*?) of (?:non\\-literal|volatile) type (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={fb,1317436288,mb},
[m]={Ab,1317436288,ub},
[n]={{B,9358,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n  } else if (!RD->isAggregate() && !RD->hasConstexprNonCopyMoveConstructor() && !RD->hasTrivialDefaultConstructor()) {\n  } else if (RD->hasNonLiteralTypeFieldsOrBases()) {\n    for (const auto *I : RD->fields()) {\n      if (!I->getType()->isLiteralType(Context) || I->getType().isVolatileQualified()) {\n        Diag(I->getLocation(), diag::note_non_literal_field) << RD << I << I->getType() << I->getType().isVolatileQualified();"}}
[n]={{I,9358,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n  } else if (!RD->isAggregate() && !RD->hasConstexprNonCopyMoveConstructor() && !RD->hasTrivialDefaultConstructor()) {\n  } else if (RD->hasNonLiteralTypeFieldsOrBases()) {\n    for (const auto *I : RD->fields()) {\n      if (!I->getType()->isLiteralType(Context) || I->getType().isVolatileQualified()) {\n        Diag(I->getLocation(), diag::note_non_literal_field) << RD << I << I->getType() << I->getType().isVolatileQualified();"}},
[o]={
[ic]={"clang/test/CXX/basic/basic.types/p10.cpp:106:5: note: \'NonLitMember\' is not literal because it has data member \'s\' of non-literal type \'S\'","clang/test/CXX/basic/basic.types/p10.cpp:119:5: note: \'MemberType<NonLiteral>\' is not literal because it has data member \'t\' of non-literal type \'NonLiteral\'","clang/test/CXX/basic/basic.types/p10.cpp:135:5: note: \'ArrBad\' is not literal because it has data member \'s\' of non-literal type \'S[3]\'"}
}
},
},
["note_non_literal_incomplete"]={
["note_non_literal_incomplete"]={
[f]="incomplete type A is not a literal type",
[b]="incomplete type A is not a literal type",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="incomplete type %0 is not a literal type",
[h]="incomplete type %0 is not a literal type",
[g]=b,
[j]=i,
[e]="incomplete type (.*?) is not a literal type",
[k]="incomplete type (.*?) is not a literal type",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"6ca73133ca7b",1335396228,"If a type is non-literal by virtue of being incomplete produce notes"},
[m]={"6ca73133ca7b",1335396228,"If a type is non-literal by virtue of being incomplete produce notes"},
[n]={{B,9324,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  if (RequireCompleteType(Loc, ElemType, diag::note_non_literal_incomplete, T))"}}
[n]={{I,9324,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  if (RequireCompleteType(Loc, ElemType, diag::note_non_literal_incomplete, T))"}},
[o]={
[ic]={"clang/test/CXX/basic/basic.types/p10.cpp:34:22: note: incomplete type \'const Incomplete\' is not a literal type","clang/test/CXX/basic/basic.types/p10.cpp:35:22: note: incomplete type \'const Incomplete[]\' is not a literal type"}
}
},
},
["note_non_literal_lambda"]={
["note_non_literal_lambda"]={
[f]="lambda closure types are non-literal types before C++17",
[b]="lambda closure types are non-literal types before C++17",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="lambda closure types are non-literal types before C++17",
[h]="lambda closure types are non-literal types before C++17",
[g]=b,
[j]=i,
[e]="lambda closure types are non\\-literal types before C\\+\\+17",
[k]="lambda closure types are non\\-literal types before C\\+\\+17",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"d699da427a4c",1526328904,"PR37450: Fix bug that disabled some type checks for variables with deduced types."},
[m]={"d699da427a4c",1526328904,"PR37450: Fix bug that disabled some type checks for variables with deduced types."},
[n]={{B,9330,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // [expr.prim.lambda]p3:\n  //  This class type is [not] a literal type.\n  if (RD->isLambda() && !getLangOpts().CPlusPlus17) {\n    Diag(RD->getLocation(), diag::note_non_literal_lambda);"}}
[n]={{I,9330,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // [expr.prim.lambda]p3:\n  //  This class type is [not] a literal type.\n  if (RD->isLambda() && !getLangOpts().CPlusPlus17) {\n    Diag(RD->getLocation(), diag::note_non_literal_lambda);"}},
[o]={
["clang/test/CXX/expr/expr.prim/expr.prim.lambda/p3.cpp"]={"clang/test/CXX/expr/expr.prim/expr.prim.lambda/p3.cpp:15:26: note: lambda closure types are non-literal types before C++17"}
}
},
},
["note_non_literal_no_constexpr_ctors"]={
["note_non_literal_no_constexpr_ctors"]={
[f]="A is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors",
[b]="A is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors",
[h]="%0 is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors",
[g]=b,
[j]=i,
[e]="(.*?) is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors",
[k]="(.*?) is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={fb,1317436288,mb},
[m]={Ab,1317436288,ub},
[n]={{B,9346,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n  } else if (!RD->isAggregate() && !RD->hasConstexprNonCopyMoveConstructor() && !RD->hasTrivialDefaultConstructor()) {\n    Diag(RD->getLocation(), diag::note_non_literal_no_constexpr_ctors) << RD;"}}
[n]={{I,9346,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n  } else if (!RD->isAggregate() && !RD->hasConstexprNonCopyMoveConstructor() && !RD->hasTrivialDefaultConstructor()) {\n    Diag(RD->getLocation(), diag::note_non_literal_no_constexpr_ctors) << RD;"}},
[o]={
["clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp"]={"clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:28:8: note: \'NonLiteral\' is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors","clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp:28:8: note: \'NonLiteral\' is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors"}
}
},
},
["note_non_literal_non_constexpr_dtor"]={
["note_non_literal_non_constexpr_dtor"]={
[f]="A is not literal because its destructor is not constexpr",
[b]="A is not literal because its destructor is not constexpr",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is not literal because its destructor is not constexpr",
[h]="%0 is not literal because its destructor is not constexpr",
[g]=b,
[j]=i,
[e]="(.*?) is not literal because its destructor is not constexpr",
[k]="(.*?) is not literal because its destructor is not constexpr",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Ab,1567434909,Cb},
[m]={Zb,1567434909,Yb},
[n]={{B,9375,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n  } else if (!RD->isAggregate() && !RD->hasConstexprNonCopyMoveConstructor() && !RD->hasTrivialDefaultConstructor()) {\n  } else if (RD->hasNonLiteralTypeFieldsOrBases()) {\n  } else if (getLangOpts().CPlusPlus20 ? !RD->hasConstexprDestructor() : !RD->hasTrivialDestructor()) {\n    if (getLangOpts().CPlusPlus20) {\n      Diag(Dtor->getLocation(), diag::note_non_literal_non_constexpr_dtor) << RD;"}}
[n]={{I,9375,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n  } else if (!RD->isAggregate() && !RD->hasConstexprNonCopyMoveConstructor() && !RD->hasTrivialDefaultConstructor()) {\n  } else if (RD->hasNonLiteralTypeFieldsOrBases()) {\n  } else if (getLangOpts().CPlusPlus20 ? !RD->hasConstexprDestructor() : !RD->hasTrivialDestructor()) {\n    if (getLangOpts().CPlusPlus20) {\n      Diag(Dtor->getLocation(), diag::note_non_literal_non_constexpr_dtor) << RD;"}},
[o]={
["clang/test/SemaCXX/cxx1z-constexpr-lambdas.cpp"]={"clang/test/SemaCXX/cxx1z-constexpr-lambdas.cpp:21:19: note: \'NonLit\' is not literal because its destructor is not constexpr"}
}
},
},
["note_non_literal_nontrivial_dtor"]={
["note_non_literal_nontrivial_dtor"]={
[f]="A is not literal because it has a non-trivial destructor",
[b]="A is not literal because it has a non-trivial destructor",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is not literal because it has a non-trivial destructor",
[h]="%0 is not literal because it has a non-trivial destructor",
[g]=b,
[j]=i,
[e]="(.*?) is not literal because it has a non\\-trivial destructor",
[k]="(.*?) is not literal because it has a non\\-trivial destructor",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={fb,1317436288,mb},
[m]={Ab,1317436288,ub},
[n]={{B,9380,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n  } else if (!RD->isAggregate() && !RD->hasConstexprNonCopyMoveConstructor() && !RD->hasTrivialDefaultConstructor()) {\n  } else if (RD->hasNonLiteralTypeFieldsOrBases()) {\n  } else if (getLangOpts().CPlusPlus20 ? !RD->hasConstexprDestructor() : !RD->hasTrivialDestructor()) {\n    if (getLangOpts().CPlusPlus20) {\n    } else {\n      Diag(Dtor->getLocation(), Dtor->isUserProvided() ? diag::note_non_literal_user_provided_dtor : diag::note_non_literal_nontrivial_dtor) << RD;"}}
[n]={{I,9380,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n  } else if (!RD->isAggregate() && !RD->hasConstexprNonCopyMoveConstructor() && !RD->hasTrivialDefaultConstructor()) {\n  } else if (RD->hasNonLiteralTypeFieldsOrBases()) {\n  } else if (getLangOpts().CPlusPlus20 ? !RD->hasConstexprDestructor() : !RD->hasTrivialDestructor()) {\n    if (getLangOpts().CPlusPlus20) {\n    } else {\n      Diag(Dtor->getLocation(), Dtor->isUserProvided() ? diag::note_non_literal_user_provided_dtor : diag::note_non_literal_nontrivial_dtor) << RD;"}},
[o]={
[ic]={"clang/test/CXX/basic/basic.types/p10.cpp:46:11: note: \'NonTrivDtor\' is not literal because it has a non-trivial destructor"}
}
},
},
["note_non_literal_user_provided_dtor"]={
["note_non_literal_user_provided_dtor"]={
[f]="A is not literal because it has a user-provided destructor",
[b]="A is not literal because it has a user-provided destructor",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is not literal because it has a user-provided destructor",
[h]="%0 is not literal because it has a user-provided destructor",
[g]=b,
[j]=i,
[e]="(.*?) is not literal because it has a user\\-provided destructor",
[k]="(.*?) is not literal because it has a user\\-provided destructor",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={fb,1317436288,mb},
[m]={Ab,1317436288,ub},
[n]={{B,9379,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n  } else if (!RD->isAggregate() && !RD->hasConstexprNonCopyMoveConstructor() && !RD->hasTrivialDefaultConstructor()) {\n  } else if (RD->hasNonLiteralTypeFieldsOrBases()) {\n  } else if (getLangOpts().CPlusPlus20 ? !RD->hasConstexprDestructor() : !RD->hasTrivialDestructor()) {\n    if (getLangOpts().CPlusPlus20) {\n    } else {\n      Diag(Dtor->getLocation(), Dtor->isUserProvided() ? diag::note_non_literal_user_provided_dtor : diag::note_non_literal_nontrivial_dtor) << RD;"}}
[n]={{I,9379,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n  } else if (!RD->isAggregate() && !RD->hasConstexprNonCopyMoveConstructor() && !RD->hasTrivialDefaultConstructor()) {\n  } else if (RD->hasNonLiteralTypeFieldsOrBases()) {\n  } else if (getLangOpts().CPlusPlus20 ? !RD->hasConstexprDestructor() : !RD->hasTrivialDestructor()) {\n    if (getLangOpts().CPlusPlus20) {\n    } else {\n      Diag(Dtor->getLocation(), Dtor->isUserProvided() ? diag::note_non_literal_user_provided_dtor : diag::note_non_literal_nontrivial_dtor) << RD;"}},
[o]={
[ic]={"clang/test/CXX/basic/basic.types/p10.cpp:41:3: note: \'UserProvDtor\' is not literal because it has a user-provided destructor"}
}
},
},
["note_non_literal_virtual_base"]={
["note_non_literal_virtual_base"]={
[f]="... with virtual base class is not a literal type",
[b]="... with virtual base class is not a literal type",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{struct|interface|class}0 with virtual base %plural{1:class|:classes}1 is not a literal type",
[h]="%select{struct|interface|class}0 with virtual base %plural{1:class|:classes}1 is not a literal type",
[g]=b,
[j]=i,
[e]="(?:struct|interface|class) with virtual base (?:class|classes) is not a literal type",
[k]="(?:struct|interface|class) with virtual base (?:class|classes) is not a literal type",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={fb,1317436288,mb},
[m]={Ab,1317436288,ub},
[n]={{B,9339,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n    Diag(RD->getLocation(), diag::note_non_literal_virtual_base) << getLiteralDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases();"}}
[n]={{I,9339,"/// Ensure that the type T is a literal type.\n///\n/// This routine checks whether the type @p T is a literal type. If @p T is an\n/// incomplete type, an attempt is made to complete it. If @p T is a literal\n/// type, or @p AllowIncompleteType is true and @p T is an incomplete type,\n/// returns false. Otherwise, this routine issues the diagnostic @p PD (giving\n/// it the type @p T), along with notes explaining why the type is not a\n/// literal type, and returns true.\n///\n/// @param Loc  The location in the source that the non-literal type\n/// diagnostic should refer to.\n///\n/// @param T  The type that this routine is examining for literalness.\n///\n/// @param Diagnoser Emits a diagnostic if T is not a literal type.\n///\n/// @returns @c true if @p T is not a literal type and a diagnostic was emitted,\n/// @c false otherwise.\nbool Sema::RequireLiteralType(SourceLocation Loc, QualType T, TypeDiagnoser &Diagnoser) {\n  // If the class has virtual base classes, then it\'s not an aggregate, and\n  // cannot have any constexpr constructors or a trivial default constructor,\n  // so is non-literal. This is better to diagnose than the resulting absence\n  // of constexpr constructors.\n  if (RD->getNumVBases()) {\n    Diag(RD->getLocation(), diag::note_non_literal_virtual_base) << getLiteralDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases();"}},
[o]={
["clang/test/CXX/special/class.ctor/p6-0x.cpp"]={"clang/test/CXX/special/class.ctor/p6-0x.cpp:24:8: note: struct with virtual base class is not a literal type"}
}
},
},
["note_non_null_attribute_failed"]={
["note_non_null_attribute_failed"]={
[f]="null passed to a callee that requires a non-null argument",
[b]="null passed to a callee that requires a non-null argument",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="null passed to a callee that requires a non-null argument",
[h]="null passed to a callee that requires a non-null argument",
[g]=b,
[j]=i,
[e]="null passed to a callee that requires a non\\-null argument",
[k]="null passed to a callee that requires a non\\-null argument",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"0bb4d46b2be5",1560587576,"[clang] perform semantic checking in constant context"},
[m]={"0bb4d46b2be5",1560587576,"[clang] perform semantic checking in constant context"},
[n]={{p,6143,"static bool EvaluateCallArg(const ParmVarDecl *PVD, const Expr *Arg, CallRef Call, EvalInfo &Info, bool NonNull = false) {\n  // Passing a null pointer to an __attribute__((nonnull)) parameter results in\n  // undefined behavior, so is non-constant.\n  if (NonNull && V.isLValue() && V.isNullPointer()) {\n    Info.CCEDiag(Arg, diag::note_non_null_attribute_failed);"}}
[n]={{q,6143,"static bool EvaluateCallArg(const ParmVarDecl *PVD, const Expr *Arg, CallRef Call, EvalInfo &Info, bool NonNull = false) {\n  // Passing a null pointer to an __attribute__((nonnull)) parameter results in\n  // undefined behavior, so is non-constant.\n  if (NonNull && V.isLValue() && V.isNullPointer()) {\n    Info.CCEDiag(Arg, diag::note_non_null_attribute_failed);"}},
[o]={
["clang/test/SemaCXX/attr-nonnull.cpp"]={"clang/test/SemaCXX/attr-nonnull.cpp:65:28: note: null passed to a callee that requires a non-null argument","clang/test/SemaCXX/attr-nonnull.cpp:76:27: note: null passed to a callee that requires a non-null argument","clang/test/SemaCXX/attr-nonnull.cpp:83:27: note: null passed to a callee that requires a non-null argument","clang/test/SemaCXX/attr-nonnull.cpp:84:24: note: null passed to a callee that requires a non-null argument"}
}
},
},
["note_non_template_in_template_id_found"]={
["note_non_template_in_template_id_found"]={
[f]="non-template declaration found by name lookup",
[b]="non-template declaration found by name lookup",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="non-template declaration found by name lookup",
[h]="non-template declaration found by name lookup",
[g]=b,
[j]=i,
[e]="non\\-template declaration found by name lookup",
[k]="non\\-template declaration found by name lookup",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"42bc73a3f15f",1494383428,"When we see a \'<\' operator, check whether it\'s a probable typo for a template-id."},
[m]={"42bc73a3f15f",1494383428,"When we see a \'<\' operator, check whether it\'s a probable typo for a template-id."},
[n]={{u,714,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  if (TypoCorrection Corrected = CorrectTypo(NameInfo, LookupKind, S, &SS, CCC, CTK_ErrorRecovery, LookupCtx)) {\n    if (ND || Corrected.isKeyword()) {\n      if (Found)\n        Diag(Found->getLocation(), diag::note_non_template_in_template_id_found);"},{u,722,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  if (Found)\n    Diag(Found->getLocation(), diag::note_non_template_in_template_id_found);"}}
[n]={{v,714,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  if (TypoCorrection Corrected = CorrectTypo(NameInfo, LookupKind, S, &SS, CCC, CTK_ErrorRecovery, LookupCtx)) {\n    if (ND || Corrected.isKeyword()) {\n      if (Found)\n        Diag(Found->getLocation(), diag::note_non_template_in_template_id_found);"},{v,722,"void Sema::diagnoseExprIntendedAsTemplateName(Scope *S, ExprResult TemplateName, SourceLocation Less, SourceLocation Greater) {\n  if (Found)\n    Diag(Found->getLocation(), diag::note_non_template_in_template_id_found);"}},
[o]={
["clang/test/SemaTemplate/typo-template-name.cpp"]={"clang/test/SemaTemplate/typo-template-name.cpp:5:10: note: non-template declaration found by name lookup","clang/test/SemaTemplate/typo-template-name.cpp:11:10: note: non-template declaration found by name lookup","clang/test/SemaTemplate/typo-template-name.cpp:20:10: note: non-template declaration found by name lookup","clang/test/SemaTemplate/typo-template-name.cpp:26:10: note: non-template declaration found by name lookup","clang/test/SemaTemplate/typo-template-name.cpp:31:9: note: non-template declaration found by name lookup","clang/test/SemaTemplate/typo-template-name.cpp:31:9: note: non-template declaration found by name lookup","clang/test/SemaTemplate/typo-template-name.cpp:31:9: note: non-template declaration found by name lookup"}
}
},
},
["note_non_trivial_c_union"]={
["note_non_trivial_c_union"]={
[f]="... non-trivial to ...",
[b]="... non-trivial to ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{%2 has subobjects that are|%3 has type %2 that is}0 non-trivial to %select{default-initialize|destruct|copy}1",
[h]="%select{%2 has subobjects that are|%3 has type %2 that is}0 non-trivial to %select{default-initialize|destruct|copy}1",
[g]=b,
[j]=i,
[e]="(?:(.*?) has subobjects that are|(.*?) has type (.*?) that is) non\\-trivial to (?:default\\-initialize|destruct|copy)",
[k]="(?:(.*?) has subobjects that are|(.*?) has type (.*?) that is) non\\-trivial to (?:default\\-initialize|destruct|copy)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"81b03d4a08b1",1562982435,"[Sema] Diagnose default-initialization, destruction, and copying of"},
[m]={"81b03d4a08b1",1562982435,"[Sema] Diagnose default-initialization, destruction, and copying of"},
[n]={{t,12916,"struct DiagNonTrivalCUnionDefaultInitializeVisitor : DefaultInitializedTypeVisitor<DiagNonTrivalCUnionDefaultInitializeVisitor, void> {\n  void visitARCStrong(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(FD->getLocation(), diag::note_non_trivial_c_union) << 1 << 0 << QT << FD->getName();"},{t,12922,"struct DiagNonTrivalCUnionDefaultInitializeVisitor : DefaultInitializedTypeVisitor<DiagNonTrivalCUnionDefaultInitializeVisitor, void> {\n  void visitARCWeak(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(FD->getLocation(), diag::note_non_trivial_c_union) << 1 << 0 << QT << FD->getName();"},{t,12942,"struct DiagNonTrivalCUnionDefaultInitializeVisitor : DefaultInitializedTypeVisitor<DiagNonTrivalCUnionDefaultInitializeVisitor, void> {\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(RD->getLocation(), diag::note_non_trivial_c_union) << 0 << 0 << QT.getUnqualifiedType() << \"\";"},{t,12981,"struct DiagNonTrivalCUnionDestructedTypeVisitor : DestructedTypeVisitor<DiagNonTrivalCUnionDestructedTypeVisitor, void> {\n  void visitARCStrong(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(FD->getLocation(), diag::note_non_trivial_c_union) << 1 << 1 << QT << FD->getName();"},{t,12987,"struct DiagNonTrivalCUnionDestructedTypeVisitor : DestructedTypeVisitor<DiagNonTrivalCUnionDestructedTypeVisitor, void> {\n  void visitARCWeak(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(FD->getLocation(), diag::note_non_trivial_c_union) << 1 << 1 << QT << FD->getName();"},{t,13007,"struct DiagNonTrivalCUnionDestructedTypeVisitor : DestructedTypeVisitor<DiagNonTrivalCUnionDestructedTypeVisitor, void> {\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(RD->getLocation(), diag::note_non_trivial_c_union) << 0 << 1 << QT.getUnqualifiedType() << \"\";"},{t,13047,"struct DiagNonTrivalCUnionCopyVisitor : CopiedTypeVisitor<DiagNonTrivalCUnionCopyVisitor, false, void> {\n  void visitARCStrong(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(FD->getLocation(), diag::note_non_trivial_c_union) << 1 << 2 << QT << FD->getName();"},{t,13053,"struct DiagNonTrivalCUnionCopyVisitor : CopiedTypeVisitor<DiagNonTrivalCUnionCopyVisitor, false, void> {\n  void visitARCWeak(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(FD->getLocation(), diag::note_non_trivial_c_union) << 1 << 2 << QT << FD->getName();"},{t,13073,"struct DiagNonTrivalCUnionCopyVisitor : CopiedTypeVisitor<DiagNonTrivalCUnionCopyVisitor, false, void> {\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(RD->getLocation(), diag::note_non_trivial_c_union) << 0 << 2 << QT.getUnqualifiedType() << \"\";"}}
[n]={{u,12916,"struct DiagNonTrivalCUnionDefaultInitializeVisitor : DefaultInitializedTypeVisitor<DiagNonTrivalCUnionDefaultInitializeVisitor, void> {\n  void visitARCStrong(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(FD->getLocation(), diag::note_non_trivial_c_union) << 1 << 0 << QT << FD->getName();"},{u,12922,"struct DiagNonTrivalCUnionDefaultInitializeVisitor : DefaultInitializedTypeVisitor<DiagNonTrivalCUnionDefaultInitializeVisitor, void> {\n  void visitARCWeak(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(FD->getLocation(), diag::note_non_trivial_c_union) << 1 << 0 << QT << FD->getName();"},{u,12942,"struct DiagNonTrivalCUnionDefaultInitializeVisitor : DefaultInitializedTypeVisitor<DiagNonTrivalCUnionDefaultInitializeVisitor, void> {\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(RD->getLocation(), diag::note_non_trivial_c_union) << 0 << 0 << QT.getUnqualifiedType() << \"\";"},{u,12981,"struct DiagNonTrivalCUnionDestructedTypeVisitor : DestructedTypeVisitor<DiagNonTrivalCUnionDestructedTypeVisitor, void> {\n  void visitARCStrong(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(FD->getLocation(), diag::note_non_trivial_c_union) << 1 << 1 << QT << FD->getName();"},{u,12987,"struct DiagNonTrivalCUnionDestructedTypeVisitor : DestructedTypeVisitor<DiagNonTrivalCUnionDestructedTypeVisitor, void> {\n  void visitARCWeak(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(FD->getLocation(), diag::note_non_trivial_c_union) << 1 << 1 << QT << FD->getName();"},{u,13007,"struct DiagNonTrivalCUnionDestructedTypeVisitor : DestructedTypeVisitor<DiagNonTrivalCUnionDestructedTypeVisitor, void> {\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(RD->getLocation(), diag::note_non_trivial_c_union) << 0 << 1 << QT.getUnqualifiedType() << \"\";"},{u,13047,"struct DiagNonTrivalCUnionCopyVisitor : CopiedTypeVisitor<DiagNonTrivalCUnionCopyVisitor, false, void> {\n  void visitARCStrong(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(FD->getLocation(), diag::note_non_trivial_c_union) << 1 << 2 << QT << FD->getName();"},{u,13053,"struct DiagNonTrivalCUnionCopyVisitor : CopiedTypeVisitor<DiagNonTrivalCUnionCopyVisitor, false, void> {\n  void visitARCWeak(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(FD->getLocation(), diag::note_non_trivial_c_union) << 1 << 2 << QT << FD->getName();"},{u,13073,"struct DiagNonTrivalCUnionCopyVisitor : CopiedTypeVisitor<DiagNonTrivalCUnionCopyVisitor, false, void> {\n  void visitStruct(QualType QT, const FieldDecl *FD, bool InNonTrivialUnion) {\n    if (InNonTrivialUnion)\n      S.Diag(RD->getLocation(), diag::note_non_trivial_c_union) << 0 << 2 << QT.getUnqualifiedType() << \"\";"}},
[o]={
["clang/test/SemaObjC/non-trivial-c-union.m"]={
[1]=db,
[2]=ab,
[3]=cb,
[4]=db,
[5]=ab,
[6]=cb,
[7]=db,
[8]=ab,
[9]=cb,
[10]=y,
[11]=x,
[12]=w,
[13]=F,
[14]=E,
[15]=C,
[16]=y,
[17]=x,
[18]=w,
[19]=F,
[20]=E,
[21]=C,
[22]=y,
[23]=x,
[24]=w,
[25]=F,
[26]=E,
[27]=C,
[28]=y,
[29]=x,
[30]=w,
[31]=F,
[32]=E,
[33]=C,
[34]=y,
[35]=x,
[36]=w,
[37]=F,
[38]=E,
[39]=C,
[40]=y,
[41]=x,
[42]=w,
[43]=F,
[44]=E,
[45]=C,
[46]=y,
[47]=x,
[48]=w,
[49]=F,
[50]=E,
[51]=C,
[52]=y,
[53]=x,
[54]=w,
[55]=F,
[56]=E,
[57]=C,
[58]=y,
[59]=x,
[60]=w,
[61]=F,
[62]=E,
[63]=C,
[64]=y,
[65]=x,
[66]=w,
[67]=F,
[68]=E,
[69]=C,
[70]=y,
[71]=x,
[72]=w,
[73]=F,
[74]=E,
[75]=C,
[76]=y,
[77]=x,
[78]=w,
[79]=F,
[80]=E,
[81]=C,
[82]=y,
[83]=x,
[84]=w,
[85]=db,
[86]=ab,
[87]=cb,
[88]=y,
[89]=x,
[90]=w,
[91]=F,
[92]=E,
[93]=C,
[94]=y,
[95]=x,
[96]=w,
[97]=y,
[98]=x,
[99]=w,
[100]=y,
[101]=x,
[102]=w,
[103]=db,
[104]=ab,
[105]=cb,
[106]=y,
[107]=x,
[108]=w,
[109]=F,
[110]=E,
[111]=C,
[112]=y,
[113]=x,
[114]=w,
[115]=F,
[116]=E,
[117]=C,
[118]=y,
[119]=x,
[120]=w,
[121]=F,
[122]=E,
[123]=C,
[124]=y,
[125]=x,
[126]=w,
[127]=db,
[128]=ab,
[129]=cb,
[130]=F,
[131]=E,
[132]=C,
[133]=F,
[134]=E,
[135]=C,
[136]=F,
[137]=E,
[138]=C,
[139]=F,
[140]=E,
[141]=C,
[142]=db,
[143]=ab,
[144]=cb,
[145]=y,
[146]=x,
[147]=w,
[148]=y,
[149]=x,
[150]=w,
[151]=y,
[152]=x,
[153]=w,
[154]=F,
[155]=E,
[156]=C,
[157]=y,
[158]=x,
[159]=w,
[160]=db,
[161]=ab,
[162]=cb,
[163]=y,
[164]=x,
[165]=w,
[166]=db,
[167]=ab,
[168]=cb,
[169]=y,
[170]=x,
[171]=w,
[172]=db,
[173]=ab,
[174]=cb,
[175]=y,
[176]=x,
[177]=w,
[178]=db,
[179]=ab,
[180]=cb,
[181]=y,
[182]=x,
[183]=w,
[184]=db,
[185]=ab,
[186]=cb,
[187]=y,
[188]=x,
[189]=w,
[190]=F,
[191]=E,
[192]=C,
[193]=y,
[194]=x,
[195]=w,
[196]=F,
[197]=E,
[198]=C,
[199]=y,
[200]=x,
[201]=w,
[202]=F,
[203]=E,
[204]=C,
[205]=y,
[206]=x,
[207]=w,
[208]=F,
[209]=E,
[210]=C,
[211]=y,
[212]=x,
[213]=w,
[214]=F,
[215]=E,
[216]=C,
[217]=y,
[218]=x,
[219]=w,
[220]=F,
[221]=E,
[222]=C,
[223]=y,
[224]=x,
[225]=w,
[226]=F,
[227]=E,
[228]=C,
[229]="clang/test/SemaObjC/Inputs/non-trivial-c-union.h:16:9: note: \'U1_SystemHeader\' has subobjects that are non-trivial to destruct",
[230]="clang/test/SemaObjC/Inputs/non-trivial-c-union.h:17:15: note: f0 has type \'__strong id\' that is non-trivial to destruct",
[231]="clang/test/SemaObjC/Inputs/non-trivial-c-union.h:16:9: note: \'U1_SystemHeader\' has subobjects that are non-trivial to copy",
[232]="clang/test/SemaObjC/Inputs/non-trivial-c-union.h:17:15: note: f0 has type \'__strong id\' that is non-trivial to copy"
}
}
},
},
["note_non_usual_function_declared_here"]={
["note_non_usual_function_declared_here"]={
[f]="non-usual A declared here",
[b]="non-usual A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="non-usual %0 declared here",
[h]="non-usual %0 declared here",
[g]=b,
[j]=i,
[e]="non\\-usual (.*?) declared here",
[k]="non\\-usual (.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"fa752f23cc20",1521659988,"[Builtins] Overload __builtin_operator_new/delete to allow forwarding to usual allocation/deallocati..."},
[m]={"fa752f23cc20",1521659988,"[Builtins] Overload __builtin_operator_new/delete to allow forwarding to usual allocation/deallocati..."},
[n]={{K,3861,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  case OR_Success: {\n    if (!FnDecl->isReplaceableGlobalAllocationFunction()) {\n      S.Diag(FnDecl->getLocation(), diag::note_non_usual_function_declared_here) << R.getLookupName() << FnDecl->getSourceRange();"}}
[n]={{S,3861,"static bool resolveBuiltinNewDeleteOverload(Sema &S, CallExpr *TheCall, bool IsDelete, FunctionDecl *&Operator) {\n  case OR_Success: {\n    if (!FnDecl->isReplaceableGlobalAllocationFunction()) {\n      S.Diag(FnDecl->getLocation(), diag::note_non_usual_function_declared_here) << R.getLookupName() << FnDecl->getSourceRange();"}},
[o]={
["clang/test/SemaCXX/builtin-operator-new-delete.cpp"]={"clang/test/SemaCXX/builtin-operator-new-delete.cpp:48:7: note: non-usual \'operator new\' declared here","clang/test/SemaCXX/builtin-operator-new-delete.cpp:49:6: note: non-usual \'operator delete\' declared here","clang/test/SemaCXX/builtin-operator-new-delete.cpp:106:7: note: non-usual \'operator new\' declared here","clang/test/SemaCXX/builtin-operator-new-delete.cpp:108:6: note: non-usual \'operator delete\' declared here"}
}
},
},
["note_nontemplate_decl_here"]={
["note_nontemplate_decl_here"]={
[f]="non-templated declaration is here",
[b]="non-templated declaration is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="non-templated declaration is here",
[h]="non-templated declaration is here",
[g]=b,
[j]=i,
[e]="non\\-templated declaration is here",
[k]="non\\-templated declaration is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"2ec748cd5a66",1242260891,"Implement explicit instantiations of member classes of class templates, e.g.,"},
[m]={"2ec748cd5a66",1242260891,"Implement explicit instantiations of member classes of class templates, e.g.,"},
[n]={{u,10274,"// Explicit instantiation of a member class of a class template.\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr) {\n  if (!Pattern) {\n    Diag(Record->getLocation(), diag::note_nontemplate_decl_here);"}}
[n]={{v,10274,"// Explicit instantiation of a member class of a class template.\nDeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, unsigned TagSpec, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attr) {\n  if (!Pattern) {\n    Diag(Record->getLocation(), diag::note_nontemplate_decl_here);"}},
[o]={
["clang/test/SemaTemplate/temp_explicit.cpp"]={"clang/test/SemaTemplate/temp_explicit.cpp:112:10: note: non-templated declaration is here"}
}
},
},
["note_nontrivial_default_arg"]={
["note_nontrivial_default_arg"]={
[f]="because it has a default argument",
[b]="because it has a default argument",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="because it has a default argument",
[h]="because it has a default argument",
[g]=b,
[j]=i,
[e]="because it has a default argument",
[k]="because it has a default argument",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={pb,1354935182,ub},
[m]={Lb,1354935182,Mb},
[n]={{q,10079,"/// Determine whether a defaulted or deleted special member function is trivial,\n/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,\n/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.\nbool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, TrivialABIHandling TAH, bool Diagnose) {\n  if (MD->getMinRequiredArguments() < MD->getNumParams()) {\n    if (Diagnose)\n      Diag(MD->getParamDecl(MD->getMinRequiredArguments())->getLocation(), diag::note_nontrivial_default_arg) << MD->getParamDecl(MD->getMinRequiredArguments())->getSourceRange();"}}
[n]={{r,10079,"/// Determine whether a defaulted or deleted special member function is trivial,\n/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,\n/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.\nbool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, TrivialABIHandling TAH, bool Diagnose) {\n  if (MD->getMinRequiredArguments() < MD->getNumParams()) {\n    if (Diagnose)\n      Diag(MD->getParamDecl(MD->getMinRequiredArguments())->getLocation(), diag::note_nontrivial_default_arg) << MD->getParamDecl(MD->getMinRequiredArguments())->getSourceRange();"}}
},
},
["note_nontrivial_default_member_init"]={
["note_nontrivial_default_member_init"]={
[f]="because field A has an initializer",
[b]="because field A has an initializer",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="because field %0 has an initializer",
[h]="because field %0 has an initializer",
[g]=b,
[j]=i,
[e]="because field (.*?) has an initializer",
[k]="because field (.*?) has an initializer",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Y,1582847864,W},
[m]={mb,1582847864,jb},
[n]={{q,9970,"/// Check whether the members of a class type allow a special member to be\n/// trivial.\nstatic bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM, bool ConstArg, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  for (const auto *FI : RD->fields()) {\n    // C++11 [class.ctor]p5:\n    //  A default constructor is trivial if [...]\n    //    -- no non-static data member of its class has a\n    //      brace-or-equal-initializer\n    if (CSM == Sema::CXXDefaultConstructor && FI->hasInClassInitializer()) {\n      if (Diagnose)\n        S.Diag(FI->getLocation(), diag::note_nontrivial_default_member_init) << FI;"}}
[n]={{r,9970,"/// Check whether the members of a class type allow a special member to be\n/// trivial.\nstatic bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM, bool ConstArg, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  for (const auto *FI : RD->fields()) {\n    // C++11 [class.ctor]p5:\n    //  A default constructor is trivial if [...]\n    //    -- no non-static data member of its class has a\n    //      brace-or-equal-initializer\n    if (CSM == Sema::CXXDefaultConstructor && FI->hasInClassInitializer()) {\n      if (Diagnose)\n        S.Diag(FI->getLocation(), diag::note_nontrivial_default_member_init) << FI;"}}
},
},
["note_nontrivial_field"]={
["note_nontrivial_field"]={
[f]="field is non-trivial to ...",
[b]="field is non-trivial to ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="field is non-trivial to %select{copy|default-initialize}0",
[h]="field is non-trivial to %select{copy|default-initialize}0",
[g]=b,
[j]=i,
[e]="field is non\\-trivial to (?:copy|default\\-initialize)",
[k]="field is non\\-trivial to (?:copy|default\\-initialize)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"2be0441e770d",1523992421,"[Sema] Warn about memcpy\'ing non-trivial C structs."},
[m]={"2be0441e770d",1523992421,"[Sema] Warn about memcpy\'ing non-trivial C structs."},
[n]={{y,12257,"struct SearchNonTrivialToInitializeField : DefaultInitializedTypeVisitor<SearchNonTrivialToInitializeField> {\n  void visitARCStrong(QualType FT, SourceLocation SL) { S.DiagRuntimeBehavior(SL, E, S.PDiag(diag::note_nontrivial_field) << 1); }"},{y,12260,"struct SearchNonTrivialToInitializeField : DefaultInitializedTypeVisitor<SearchNonTrivialToInitializeField> {\n  void visitARCWeak(QualType FT, SourceLocation SL) { S.DiagRuntimeBehavior(SL, E, S.PDiag(diag::note_nontrivial_field) << 1); }"},{y,12299,"struct SearchNonTrivialToCopyField : CopiedTypeVisitor<SearchNonTrivialToCopyField, false> {\n  void visitARCStrong(QualType FT, SourceLocation SL) { S.DiagRuntimeBehavior(SL, E, S.PDiag(diag::note_nontrivial_field) << 0); }"},{y,12302,"struct SearchNonTrivialToCopyField : CopiedTypeVisitor<SearchNonTrivialToCopyField, false> {\n  void visitARCWeak(QualType FT, SourceLocation SL) { S.DiagRuntimeBehavior(SL, E, S.PDiag(diag::note_nontrivial_field) << 0); }"}}
[n]={{D,12257,"struct SearchNonTrivialToInitializeField : DefaultInitializedTypeVisitor<SearchNonTrivialToInitializeField> {\n  void visitARCStrong(QualType FT, SourceLocation SL) { S.DiagRuntimeBehavior(SL, E, S.PDiag(diag::note_nontrivial_field) << 1); }"},{D,12260,"struct SearchNonTrivialToInitializeField : DefaultInitializedTypeVisitor<SearchNonTrivialToInitializeField> {\n  void visitARCWeak(QualType FT, SourceLocation SL) { S.DiagRuntimeBehavior(SL, E, S.PDiag(diag::note_nontrivial_field) << 1); }"},{D,12299,"struct SearchNonTrivialToCopyField : CopiedTypeVisitor<SearchNonTrivialToCopyField, false> {\n  void visitARCStrong(QualType FT, SourceLocation SL) { S.DiagRuntimeBehavior(SL, E, S.PDiag(diag::note_nontrivial_field) << 0); }"},{D,12302,"struct SearchNonTrivialToCopyField : CopiedTypeVisitor<SearchNonTrivialToCopyField, false> {\n  void visitARCWeak(QualType FT, SourceLocation SL) { S.DiagRuntimeBehavior(SL, E, S.PDiag(diag::note_nontrivial_field) << 0); }"}},
[o]={
["clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m"]={"clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:21:6: note: field is non-trivial to default-initialize","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:15:13: note: field is non-trivial to default-initialize","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:17:6: note: field is non-trivial to default-initialize","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:21:6: note: field is non-trivial to default-initialize","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:15:13: note: field is non-trivial to default-initialize","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:17:6: note: field is non-trivial to default-initialize","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:21:6: note: field is non-trivial to copy","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:15:13: note: field is non-trivial to copy","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:17:6: note: field is non-trivial to copy","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:21:6: note: field is non-trivial to copy","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:15:13: note: field is non-trivial to copy","clang/test/SemaObjC/warn-nontrivial-struct-memaccess.m:17:6: note: field is non-trivial to copy"}
}
},
},
["note_nontrivial_has_virtual"]={
["note_nontrivial_has_virtual"]={
[f]="because type A has a virtual ...",
[b]="because type A has a virtual ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="because type %0 has a virtual %select{member function|base class}1",
[h]="because type %0 has a virtual %select{member function|base class}1",
[g]=b,
[j]=i,
[e]="because type (.*?) has a virtual (?:member function|base class)",
[k]="because type (.*?) has a virtual (?:member function|base class)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"8a27391190de",1248287124,"\"This patch implements the restrictions on union members detailed in"},
[m]={"8a27391190de",1248287124,"\"This patch implements the restrictions on union members detailed in"},
[n]={{q,10139,"/// Determine whether a defaulted or deleted special member function is trivial,\n/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,\n/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.\nbool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, TrivialABIHandling TAH, bool Diagnose) {\n  // C++11 [class.ctor]p5, C++11 [class.copy]p12, C++11 [class.copy]p25:\n  //  A [special member] for class X is trivial if [...]\n  //    -- class X has no virtual functions and no virtual base classes\n  if (CSM != CXXDestructor && MD->getParent()->isDynamicClass()) {\n    if (RD->getNumVBases()) {\n      Diag(BS.getBeginLoc(), diag::note_nontrivial_has_virtual) << RD << 1;"},{q,10147,"/// Determine whether a defaulted or deleted special member function is trivial,\n/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,\n/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.\nbool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, TrivialABIHandling TAH, bool Diagnose) {\n  // C++11 [class.ctor]p5, C++11 [class.copy]p12, C++11 [class.copy]p25:\n  //  A [special member] for class X is trivial if [...]\n  //    -- class X has no virtual functions and no virtual base classes\n  if (CSM != CXXDestructor && MD->getParent()->isDynamicClass()) {\n    // Must have a virtual method.\n    for (const auto *MI : RD->methods()) {\n      if (MI->isVirtual()) {\n        Diag(MLoc, diag::note_nontrivial_has_virtual) << RD << 0;"}}
[n]={{r,10139,"/// Determine whether a defaulted or deleted special member function is trivial,\n/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,\n/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.\nbool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, TrivialABIHandling TAH, bool Diagnose) {\n  // C++11 [class.ctor]p5, C++11 [class.copy]p12, C++11 [class.copy]p25:\n  //  A [special member] for class X is trivial if [...]\n  //    -- class X has no virtual functions and no virtual base classes\n  if (CSM != CXXDestructor && MD->getParent()->isDynamicClass()) {\n    if (RD->getNumVBases()) {\n      Diag(BS.getBeginLoc(), diag::note_nontrivial_has_virtual) << RD << 1;"},{r,10147,"/// Determine whether a defaulted or deleted special member function is trivial,\n/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,\n/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.\nbool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, TrivialABIHandling TAH, bool Diagnose) {\n  // C++11 [class.ctor]p5, C++11 [class.copy]p12, C++11 [class.copy]p25:\n  //  A [special member] for class X is trivial if [...]\n  //    -- class X has no virtual functions and no virtual base classes\n  if (CSM != CXXDestructor && MD->getParent()->isDynamicClass()) {\n    // Must have a virtual method.\n    for (const auto *MI : RD->methods()) {\n      if (MI->isVirtual()) {\n        Diag(MLoc, diag::note_nontrivial_has_virtual) << RD << 0;"}},
[o]={
[kc]={"clang/test/CXX/class/class.union/p1.cpp:10:3: note: because type \'Virtual\' has a virtual member function","clang/test/CXX/class/class.union/p1.cpp:13:21: note: because type \'VirtualBase\' has a virtual base class","clang/test/CXX/class/class.union/p1.cpp:10:3: note: because type \'Virtual\' has a virtual member function","clang/test/CXX/class/class.union/p1.cpp:13:21: note: because type \'VirtualBase\' has a virtual base class","clang/test/CXX/class/class.union/p1.cpp:10:3: note: because type \'Virtual\' has a virtual member function","clang/test/CXX/class/class.union/p1.cpp:13:21: note: because type \'VirtualBase\' has a virtual base class","clang/test/CXX/class/class.union/p1.cpp:10:3: note: because type \'Virtual\' has a virtual member function","clang/test/CXX/class/class.union/p1.cpp:13:21: note: because type \'VirtualBase\' has a virtual base class"}
}
},
},
["note_nontrivial_no_copy"]={
["note_nontrivial_no_copy"]={
[f]="because no ... can be used to ... ... of type A",
[b]="because no ... can be used to ... ... of type A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="because no %select{<<ERROR>>|constructor|constructor|assignment operator|assignment operator|<<ERROR>>}2 can be used to %select{<<ERROR>>|copy|move|copy|move|<<ERROR>>}2 %select{base class|field|an object}0 of type %3",
[h]="because no %select{<<ERROR>>|constructor|constructor|assignment operator|assignment operator|<<ERROR>>}2 can be used to %select{<<ERROR>>|copy|move|copy|move|<<ERROR>>}2 %select{base class|field|an object}0 of type %3",
[g]=b,
[j]=i,
[e]="because no (?:constructor|constructor|assignment operator|assignment operator) can be used to (?:copy|move|copy|move) (?:base class|field|an object) of type (.*?)",
[k]="because no (?:constructor|constructor|assignment operator|assignment operator) can be used to (?:copy|move|copy|move) (?:base class|field|an object) of type (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={pb,1354935182,ub},
[m]={Lb,1354935182,Mb},
[n]={{q,9918,"/// Check whether the special member selected for a given type would be trivial.\nstatic bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, Sema::CXXSpecialMember CSM, TrivialSubobjectKind Kind, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  if (Diagnose) {\n    if (!Selected && CSM == Sema::CXXDefaultConstructor) {\n    } else if (!Selected)\n      S.Diag(SubobjLoc, diag::note_nontrivial_no_copy) << Kind << SubType.getUnqualifiedType() << CSM << SubType;"}}
[n]={{r,9918,"/// Check whether the special member selected for a given type would be trivial.\nstatic bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, Sema::CXXSpecialMember CSM, TrivialSubobjectKind Kind, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  if (Diagnose) {\n    if (!Selected && CSM == Sema::CXXDefaultConstructor) {\n    } else if (!Selected)\n      S.Diag(SubobjLoc, diag::note_nontrivial_no_copy) << Kind << SubType.getUnqualifiedType() << CSM << SubType;"}},
[o]={
[kc]={"clang/test/CXX/class/class.union/p1.cpp:26:7: note: because no constructor can be used to copy an object of type \'const CopyCtor\'","clang/test/CXX/class/class.union/p1.cpp:30:7: note: because no assignment operator can be used to copy an object of type \'const CopyAssign\'","clang/test/CXX/class/class.union/p1.cpp:63:3: note: because no constructor can be used to copy an object of type \'const U2::(unnamed struct at clang/test/CXX/class/class.union/p1.cpp:63:3)\'","clang/test/CXX/class/class.union/p1.cpp:66:3: note: because no assignment operator can be used to copy an object of type \'const U2::(unnamed struct at clang/test/CXX/class/class.union/p1.cpp:66:3)\'","clang/test/CXX/class/class.union/p1.cpp:86:10: note: because no constructor can be used to copy an object of type \'const U3::s4\'","clang/test/CXX/class/class.union/p1.cpp:88:10: note: because no assignment operator can be used to copy an object of type \'const U3::s5\'","clang/test/CXX/class/class.union/p1.cpp:26:7: note: because no constructor can be used to copy an object of type \'const CopyCtor\'","clang/test/CXX/class/class.union/p1.cpp:30:7: note: because no assignment operator can be used to copy an object of type \'const CopyAssign\'"}
}
},
},
["note_nontrivial_no_def_ctor"]={
["note_nontrivial_no_def_ctor"]={
[f]="because ...type A has no default constructor",
[b]="because ...type A has no default constructor",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="because %select{base class of |field of |}0type %1 has no default constructor",
[h]="because %select{base class of |field of |}0type %1 has no default constructor",
[g]=b,
[j]=i,
[e]="because (?:base class of |field of |)type (.*?) has no default constructor",
[k]="because (?:base class of |field of |)type (.*?) has no default constructor",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={pb,1354935182,ub},
[m]={Lb,1354935182,Mb},
[n]={{q,9913,"/// Check whether the special member selected for a given type would be trivial.\nstatic bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, Sema::CXXSpecialMember CSM, TrivialSubobjectKind Kind, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  if (Diagnose) {\n    if (!Selected && CSM == Sema::CXXDefaultConstructor) {\n      S.Diag(SubobjLoc, diag::note_nontrivial_no_def_ctor) << Kind << SubType.getUnqualifiedType();"}}
[n]={{r,9913,"/// Check whether the special member selected for a given type would be trivial.\nstatic bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, Sema::CXXSpecialMember CSM, TrivialSubobjectKind Kind, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  if (Diagnose) {\n    if (!Selected && CSM == Sema::CXXDefaultConstructor) {\n      S.Diag(SubobjLoc, diag::note_nontrivial_no_def_ctor) << Kind << SubType.getUnqualifiedType();"}},
[o]={
[kc]={"clang/test/CXX/class/class.union/p1.cpp:22:7: note: because type \'CtorTmpl\' has no default constructor"}
}
},
},
["note_nontrivial_objc_ownership"]={
["note_nontrivial_objc_ownership"]={
[f]="because type A has a member with ... ownership",
[b]="because type A has a member with ... ownership",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="because type %0 has a member with %select{no|no|__strong|__weak|__autoreleasing}1 ownership",
[h]="because type %0 has a member with %select{no|no|__strong|__weak|__autoreleasing}1 ownership",
[g]=b,
[j]=i,
[e]="because type (.*?) has a member with (?:no|no|__strong|__weak|__autoreleasing) ownership",
[k]="because type (.*?) has a member with (?:no|no|__strong|__weak|__autoreleasing) ownership",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet..."},
[m]={"cff00d9c127c",1308874139,"Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifet..."},
[n]={{q,9981,"/// Check whether the members of a class type allow a special member to be\n/// trivial.\nstatic bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM, bool ConstArg, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  for (const auto *FI : RD->fields()) {\n    // Objective C ARC 4.3.5:\n    //  [...] nontrivally ownership-qualified types are [...] not trivially\n    //  default constructible, copy constructible, move constructible, copy\n    //  assignable, move assignable, or destructible [...]\n    if (FieldType.hasNonTrivialObjCLifetime()) {\n      if (Diagnose)\n        S.Diag(FI->getLocation(), diag::note_nontrivial_objc_ownership) << RD << FieldType.getObjCLifetime();"}}
[n]={{r,9981,"/// Check whether the members of a class type allow a special member to be\n/// trivial.\nstatic bool checkTrivialClassMembers(Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM, bool ConstArg, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  for (const auto *FI : RD->fields()) {\n    // Objective C ARC 4.3.5:\n    //  [...] nontrivally ownership-qualified types are [...] not trivially\n    //  default constructible, copy constructible, move constructible, copy\n    //  assignable, move assignable, or destructible [...]\n    if (FieldType.hasNonTrivialObjCLifetime()) {\n      if (Diagnose)\n        S.Diag(FI->getLocation(), diag::note_nontrivial_objc_ownership) << RD << FieldType.getObjCLifetime();"}},
[o]={
["clang/test/SemaObjCXX/objc-weak.mm"]={"clang/test/SemaObjCXX/objc-weak.mm:12:13: note: because type \'S\' has a member with __weak ownership"}
}
},
},
["note_nontrivial_param_type"]={
["note_nontrivial_param_type"]={
[f]="because its parameter is of type A, not B",
[b]="because its parameter is of type A, not B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="because its parameter is %diff{of type $, not $|of the wrong type}2,3",
[h]="because its parameter is %diff{of type $, not $|of the wrong type}2,3",
[g]=b,
[j]=i,
[e]="because its parameter is (?:of type (.*?), not (.*?)|of the wrong type)",
[k]="because its parameter is (?:of type (.*?), not (.*?)|of the wrong type)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={pb,1354935182,ub},
[m]={Lb,1354935182,Mb},
[n]={{q,10045,"/// Determine whether a defaulted or deleted special member function is trivial,\n/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,\n/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.\nbool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, TrivialABIHandling TAH, bool Diagnose) {\n  case CXXCopyAssignment: {\n    if (!RT || ((RT->getPointeeType().getCVRQualifiers() != Qualifiers::Const) && ClangABICompat14)) {\n      if (Diagnose)\n        Diag(Param0->getLocation(), diag::note_nontrivial_param_type) << Param0->getSourceRange() << Param0->getType() << Context.getLValueReferenceType(Context.getRecordType(RD).withConst());"},{q,10064,"/// Determine whether a defaulted or deleted special member function is trivial,\n/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,\n/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.\nbool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, TrivialABIHandling TAH, bool Diagnose) {\n  case CXXMoveAssignment: {\n    if (!RT || RT->getPointeeType().getCVRQualifiers()) {\n      if (Diagnose)\n        Diag(Param0->getLocation(), diag::note_nontrivial_param_type) << Param0->getSourceRange() << Param0->getType() << Context.getRValueReferenceType(Context.getRecordType(RD));"}}
[n]={{r,10045,"/// Determine whether a defaulted or deleted special member function is trivial,\n/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,\n/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.\nbool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, TrivialABIHandling TAH, bool Diagnose) {\n  case CXXCopyAssignment: {\n    if (!RT || ((RT->getPointeeType().getCVRQualifiers() != Qualifiers::Const) && ClangABICompat14)) {\n      if (Diagnose)\n        Diag(Param0->getLocation(), diag::note_nontrivial_param_type) << Param0->getSourceRange() << Param0->getType() << Context.getLValueReferenceType(Context.getRecordType(RD).withConst());"},{r,10064,"/// Determine whether a defaulted or deleted special member function is trivial,\n/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,\n/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.\nbool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, TrivialABIHandling TAH, bool Diagnose) {\n  case CXXMoveAssignment: {\n    if (!RT || RT->getPointeeType().getCVRQualifiers()) {\n      if (Diagnose)\n        Diag(Param0->getLocation(), diag::note_nontrivial_param_type) << Param0->getSourceRange() << Param0->getType() << Context.getRValueReferenceType(Context.getRecordType(RD));"}}
},
},
["note_nontrivial_subobject"]={
["note_nontrivial_subobject"]={
[f]="because the function selected to ... ... of type A is not trivial",
[b]="because the function selected to ... ... of type A is not trivial",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="because the function selected to %select{construct|copy|move|copy|move|destroy}2 %select{base class|field}0 of type %1 is not trivial",
[h]="because the function selected to %select{construct|copy|move|copy|move|destroy}2 %select{base class|field}0 of type %1 is not trivial",
[g]=b,
[j]=i,
[e]="because the function selected to (?:construct|copy|move|copy|move|destroy) (?:base class|field) of type (.*?) is not trivial",
[k]="because the function selected to (?:construct|copy|move|copy|move|destroy) (?:base class|field) of type (.*?) is not trivial",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={pb,1354935182,ub},
[m]={Lb,1354935182,Mb},
[n]={{q,9931,"/// Check whether the special member selected for a given type would be trivial.\nstatic bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, Sema::CXXSpecialMember CSM, TrivialSubobjectKind Kind, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  if (Diagnose) {\n    if (!Selected && CSM == Sema::CXXDefaultConstructor) {\n    } else if (!Selected)\n    else if (Selected->isUserProvided()) {\n    } else {\n      if (Kind != TSK_CompleteObject)\n        S.Diag(SubobjLoc, diag::note_nontrivial_subobject) << Kind << SubType.getUnqualifiedType() << CSM;"}}
[n]={{r,9931,"/// Check whether the special member selected for a given type would be trivial.\nstatic bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, Sema::CXXSpecialMember CSM, TrivialSubobjectKind Kind, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  if (Diagnose) {\n    if (!Selected && CSM == Sema::CXXDefaultConstructor) {\n    } else if (!Selected)\n    else if (Selected->isUserProvided()) {\n    } else {\n      if (Kind != TSK_CompleteObject)\n        S.Diag(SubobjLoc, diag::note_nontrivial_subobject) << Kind << SubType.getUnqualifiedType() << CSM;"}},
[o]={
[kc]={"clang/test/CXX/class/class.union/p1.cpp:52:13: note: because the function selected to copy field of type \'Virtual\' is not trivial","clang/test/CXX/class/class.union/p1.cpp:55:17: note: because the function selected to copy field of type \'VirtualBase\' is not trivial","clang/test/CXX/class/class.union/p1.cpp:78:15: note: because the function selected to copy base class of type \'Virtual\' is not trivial","clang/test/CXX/class/class.union/p1.cpp:80:15: note: because the function selected to copy base class of type \'VirtualBase\' is not trivial"}
}
},
},
["note_nontrivial_user_provided"]={
["note_nontrivial_user_provided"]={
[f]="because ...type A has a user-provided ...",
[b]="because ...type A has a user-provided ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="because %select{base class of |field of |}0type %1 has a user-provided %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2",
[h]="because %select{base class of |field of |}0type %1 has a user-provided %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2",
[g]=b,
[j]=i,
[e]="because (?:base class of |field of |)type (.*?) has a user\\-provided (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor)",
[k]="because (?:base class of |field of |)type (.*?) has a user\\-provided (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={pb,1354935182,ub},
[m]={Lb,1354935182,Mb},
[n]={{q,9922,"/// Check whether the special member selected for a given type would be trivial.\nstatic bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, Sema::CXXSpecialMember CSM, TrivialSubobjectKind Kind, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  if (Diagnose) {\n    if (!Selected && CSM == Sema::CXXDefaultConstructor) {\n    } else if (!Selected)\n    else if (Selected->isUserProvided()) {\n      if (Kind == TSK_CompleteObject)\n        S.Diag(Selected->getLocation(), diag::note_nontrivial_user_provided) << Kind << SubType.getUnqualifiedType() << CSM;"},{q,9925,"/// Check whether the special member selected for a given type would be trivial.\nstatic bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, Sema::CXXSpecialMember CSM, TrivialSubobjectKind Kind, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  if (Diagnose) {\n    if (!Selected && CSM == Sema::CXXDefaultConstructor) {\n    } else if (!Selected)\n    else if (Selected->isUserProvided()) {\n      if (Kind == TSK_CompleteObject)\n      else {\n        S.Diag(SubobjLoc, diag::note_nontrivial_user_provided) << Kind << SubType.getUnqualifiedType() << CSM;"}}
[n]={{r,9922,"/// Check whether the special member selected for a given type would be trivial.\nstatic bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, Sema::CXXSpecialMember CSM, TrivialSubobjectKind Kind, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  if (Diagnose) {\n    if (!Selected && CSM == Sema::CXXDefaultConstructor) {\n    } else if (!Selected)\n    else if (Selected->isUserProvided()) {\n      if (Kind == TSK_CompleteObject)\n        S.Diag(Selected->getLocation(), diag::note_nontrivial_user_provided) << Kind << SubType.getUnqualifiedType() << CSM;"},{r,9925,"/// Check whether the special member selected for a given type would be trivial.\nstatic bool checkTrivialSubobjectCall(Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, Sema::CXXSpecialMember CSM, TrivialSubobjectKind Kind, Sema::TrivialABIHandling TAH, bool Diagnose) {\n  if (Diagnose) {\n    if (!Selected && CSM == Sema::CXXDefaultConstructor) {\n    } else if (!Selected)\n    else if (Selected->isUserProvided()) {\n      if (Kind == TSK_CompleteObject)\n      else {\n        S.Diag(SubobjLoc, diag::note_nontrivial_user_provided) << Kind << SubType.getUnqualifiedType() << CSM;"}},
[o]={
[kc]={"clang/test/CXX/class/class.union/p1.cpp:17:3: note: because type \'Ctor\' has a user-provided default constructor","clang/test/CXX/class/class.union/p1.cpp:20:3: note: because type \'Ctor2\' has a user-provided default constructor","clang/test/CXX/class/class.union/p1.cpp:35:3: note: because type \'Dtor\' has a user-provided destructor","clang/test/CXX/class/class.union/p1.cpp:58:10: note: because field of type \'Ctor\' has a user-provided default constructor","clang/test/CXX/class/class.union/p1.cpp:61:11: note: because field of type \'Ctor2\' has a user-provided default constructor","clang/test/CXX/class/class.union/p1.cpp:70:10: note: because field of type \'Dtor\' has a user-provided destructor","clang/test/CXX/class/class.union/p1.cpp:82:15: note: because base class of type \'Ctor\' has a user-provided default constructor","clang/test/CXX/class/class.union/p1.cpp:84:16: note: because base class of type \'Ctor2\' has a user-provided default constructor","clang/test/CXX/class/class.union/p1.cpp:90:15: note: because base class of type \'Dtor\' has a user-provided destructor","clang/test/CXX/class/class.union/p1.cpp:17:3: note: because type \'Ctor\' has a user-provided default constructor","clang/test/CXX/class/class.union/p1.cpp:35:3: note: because type \'Dtor\' has a user-provided destructor"}
}
},
},
["note_nontrivial_variadic"]={
["note_nontrivial_variadic"]={
[f]="because it is a variadic function",
[b]="because it is a variadic function",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="because it is a variadic function",
[h]="because it is a variadic function",
[g]=b,
[j]=i,
[e]="because it is a variadic function",
[k]="because it is a variadic function",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={pb,1354935182,ub},
[m]={Lb,1354935182,Mb},
[n]={{q,10085,"/// Determine whether a defaulted or deleted special member function is trivial,\n/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,\n/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.\nbool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, TrivialABIHandling TAH, bool Diagnose) {\n  if (MD->isVariadic()) {\n    if (Diagnose)\n      Diag(MD->getLocation(), diag::note_nontrivial_variadic);"}}
[n]={{r,10085,"/// Determine whether a defaulted or deleted special member function is trivial,\n/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,\n/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.\nbool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, TrivialABIHandling TAH, bool Diagnose) {\n  if (MD->isVariadic()) {\n    if (Diagnose)\n      Diag(MD->getLocation(), diag::note_nontrivial_variadic);"}},
[o]={
[kc]={"clang/test/CXX/class/class.union/p1.cpp:95:5: note: because it is a variadic function"}
}
},
},
["note_nontrivial_virtual_dtor"]={
["note_nontrivial_virtual_dtor"]={
[f]="destructor for A is not trivial because it is virtual",
[b]="destructor for A is not trivial because it is virtual",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="destructor for %0 is not trivial because it is virtual",
[h]="destructor for %0 is not trivial because it is virtual",
[g]=b,
[j]=i,
[e]="destructor for (.*?) is not trivial because it is virtual",
[k]="destructor for (.*?) is not trivial because it is virtual",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={pb,1354935182,ub},
[m]={Lb,1354935182,Mb},
[n]={{q,10123,"/// Determine whether a defaulted or deleted special member function is trivial,\n/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,\n/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.\nbool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, TrivialABIHandling TAH, bool Diagnose) {\n  // C++11 [class.dtor]p5:\n  //  A destructor is trivial if [...]\n  //    -- the destructor is not virtual\n  if (CSM == CXXDestructor && MD->isVirtual()) {\n    if (Diagnose)\n      Diag(MD->getLocation(), diag::note_nontrivial_virtual_dtor) << RD;"}}
[n]={{r,10123,"/// Determine whether a defaulted or deleted special member function is trivial,\n/// as specified in C++11 [class.ctor]p5, C++11 [class.copy]p12,\n/// C++11 [class.copy]p25, and C++11 [class.dtor]p5.\nbool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, TrivialABIHandling TAH, bool Diagnose) {\n  // C++11 [class.dtor]p5:\n  //  A destructor is trivial if [...]\n  //    -- the destructor is not virtual\n  if (CSM == CXXDestructor && MD->isVirtual()) {\n    if (Diagnose)\n      Diag(MD->getLocation(), diag::note_nontrivial_virtual_dtor) << RD;"}},
[o]={
[ic]={"clang/test/CXX/basic/basic.types/p10.cpp:46:11: note: destructor for \'NonTrivDtor\' is not trivial because it is virtual"}
}
},
},
["note_not_found_by_two_phase_lookup"]={
["note_not_found_by_two_phase_lookup"]={
[f]="A should be declared prior to the call site...",
[b]="A should be declared prior to the call site...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 should be declared prior to the call site%select{| or in %2| or in an associated namespace of one of its arguments}1",
[h]="%0 should be declared prior to the call site%select{| or in %2| or in an associated namespace of one of its arguments}1",
[g]=b,
[j]=i,
[e]="(.*?) should be declared prior to the call site(?:| or in (.*?)| or in an associated namespace of one of its arguments)",
[k]="(.*?) should be declared prior to the call site(?:| or in (.*?)| or in an associated namespace of one of its arguments)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"998a591e3261",1307313768,"Fix PR10053: Improve diagnostics and error recovery for code which some compilers incorrectly accept..."},
[m]={"998a591e3261",1307313768,"Fix PR10053: Improve diagnostics and error recovery for code which some compilers incorrectly accept..."},
[n]={{P,13207,"/// Attempt to recover from an ill-formed use of a non-dependent name in a\n/// template, where the non-dependent name was declared after the template\n/// was defined. This is common in code written for a compilers which do not\n/// correctly implement two-stage name lookup.\n///\n/// Returns true if a viable candidate was found and a diagnostic was issued.\nstatic bool DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc, const CXXScopeSpec &SS, LookupResult &R, OverloadCandidateSet::CandidateSetKind CSK, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, CXXRecordDecl **FoundInClass = nullptr) {\n  for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {\n    if (!R.empty()) {\n      if (SuggestedNamespaces.empty()) {\n        SemaRef.Diag(Best->Function->getLocation(), diag::note_not_found_by_two_phase_lookup) << R.getLookupName() << 0;"},{P,13211,"/// Attempt to recover from an ill-formed use of a non-dependent name in a\n/// template, where the non-dependent name was declared after the template\n/// was defined. This is common in code written for a compilers which do not\n/// correctly implement two-stage name lookup.\n///\n/// Returns true if a viable candidate was found and a diagnostic was issued.\nstatic bool DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc, const CXXScopeSpec &SS, LookupResult &R, OverloadCandidateSet::CandidateSetKind CSK, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, CXXRecordDecl **FoundInClass = nullptr) {\n  for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {\n    if (!R.empty()) {\n      if (SuggestedNamespaces.empty()) {\n      } else if (SuggestedNamespaces.size() == 1) {\n        SemaRef.Diag(Best->Function->getLocation(), diag::note_not_found_by_two_phase_lookup) << R.getLookupName() << 1 << *SuggestedNamespaces.begin();"},{P,13218,"/// Attempt to recover from an ill-formed use of a non-dependent name in a\n/// template, where the non-dependent name was declared after the template\n/// was defined. This is common in code written for a compilers which do not\n/// correctly implement two-stage name lookup.\n///\n/// Returns true if a viable candidate was found and a diagnostic was issued.\nstatic bool DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc, const CXXScopeSpec &SS, LookupResult &R, OverloadCandidateSet::CandidateSetKind CSK, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, CXXRecordDecl **FoundInClass = nullptr) {\n  for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {\n    if (!R.empty()) {\n      if (SuggestedNamespaces.empty()) {\n      } else if (SuggestedNamespaces.size() == 1) {\n      } else {\n        SemaRef.Diag(Best->Function->getLocation(), diag::note_not_found_by_two_phase_lookup) << R.getLookupName() << 2;"}}
[n]={{X,13207,"/// Attempt to recover from an ill-formed use of a non-dependent name in a\n/// template, where the non-dependent name was declared after the template\n/// was defined. This is common in code written for a compilers which do not\n/// correctly implement two-stage name lookup.\n///\n/// Returns true if a viable candidate was found and a diagnostic was issued.\nstatic bool DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc, const CXXScopeSpec &SS, LookupResult &R, OverloadCandidateSet::CandidateSetKind CSK, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, CXXRecordDecl **FoundInClass = nullptr) {\n  for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {\n    if (!R.empty()) {\n      if (SuggestedNamespaces.empty()) {\n        SemaRef.Diag(Best->Function->getLocation(), diag::note_not_found_by_two_phase_lookup) << R.getLookupName() << 0;"},{X,13211,"/// Attempt to recover from an ill-formed use of a non-dependent name in a\n/// template, where the non-dependent name was declared after the template\n/// was defined. This is common in code written for a compilers which do not\n/// correctly implement two-stage name lookup.\n///\n/// Returns true if a viable candidate was found and a diagnostic was issued.\nstatic bool DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc, const CXXScopeSpec &SS, LookupResult &R, OverloadCandidateSet::CandidateSetKind CSK, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, CXXRecordDecl **FoundInClass = nullptr) {\n  for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {\n    if (!R.empty()) {\n      if (SuggestedNamespaces.empty()) {\n      } else if (SuggestedNamespaces.size() == 1) {\n        SemaRef.Diag(Best->Function->getLocation(), diag::note_not_found_by_two_phase_lookup) << R.getLookupName() << 1 << *SuggestedNamespaces.begin();"},{X,13218,"/// Attempt to recover from an ill-formed use of a non-dependent name in a\n/// template, where the non-dependent name was declared after the template\n/// was defined. This is common in code written for a compilers which do not\n/// correctly implement two-stage name lookup.\n///\n/// Returns true if a viable candidate was found and a diagnostic was issued.\nstatic bool DiagnoseTwoPhaseLookup(Sema &SemaRef, SourceLocation FnLoc, const CXXScopeSpec &SS, LookupResult &R, OverloadCandidateSet::CandidateSetKind CSK, TemplateArgumentListInfo *ExplicitTemplateArgs, ArrayRef<Expr *> Args, CXXRecordDecl **FoundInClass = nullptr) {\n  for (DeclContext *DC = SemaRef.CurContext; DC; DC = DC->getParent()) {\n    if (!R.empty()) {\n      if (SuggestedNamespaces.empty()) {\n      } else if (SuggestedNamespaces.size() == 1) {\n      } else {\n        SemaRef.Diag(Best->Function->getLocation(), diag::note_not_found_by_two_phase_lookup) << R.getLookupName() << 2;"}},
[o]={
["clang/test/SemaTemplate/dependent-names-no-std.cpp"]={"clang/test/SemaTemplate/dependent-names-no-std.cpp:18:8: note: \'f\' should be declared prior to the call site or in namespace \'PR10053::ns\'"}
}
},
},
["note_not_module_interface_add_export"]={
["note_not_module_interface_add_export"]={
[f]="add \'export\' here if this is intended to be a module interface unit",
[b]="add \'export\' here if this is intended to be a module interface unit",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add \'export\' here if this is intended to be a module interface unit",
[h]="add \'export\' here if this is intended to be a module interface unit",
[g]=b,
[j]=i,
[e]="add \'export\' here if this is intended to be a module interface unit",
[k]="add \'export\' here if this is intended to be a module interface unit",
[d]=a,
[l]=a,
[c]=Sb,
[c]=fc,
[m]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[m]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[n]={{cb,448,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  case Module::ModuleImplementationUnit:\n    Diag(ModuleScopes.back().BeginLoc, diag::note_not_module_interface_add_export) << FixItHint::CreateInsertion(ModuleScopes.back().BeginLoc, \"export \");"},{cb,772,"/// We have parsed the start of an export declaration, including the \'{\'\n/// (if present).\nDecl *Sema::ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc, SourceLocation LBraceLoc) {\n  // C++2a [module.interface]p1:\n  //  An export-declaration shall appear only [...] in the purview of a module\n  //  interface unit. An export-declaration shall not appear directly or\n  //  indirectly within [...] a private-module-fragment.\n  if (!isCurrentModulePurview()) {\n  } else if (!ModuleScopes.back().ModuleInterface) {\n    Diag(ModuleScopes.back().BeginLoc, diag::note_not_module_interface_add_export) << FixItHint::CreateInsertion(ModuleScopes.back().BeginLoc, \"export \");"}}
[n]={{ib,448,"Sema::DeclGroupPtrTy Sema::ActOnPrivateModuleFragmentDecl(SourceLocation ModuleLoc, SourceLocation PrivateLoc) {\n  case Module::ModuleImplementationUnit:\n    Diag(ModuleScopes.back().BeginLoc, diag::note_not_module_interface_add_export) << FixItHint::CreateInsertion(ModuleScopes.back().BeginLoc, \"export \");"},{ib,772,"/// We have parsed the start of an export declaration, including the \'{\'\n/// (if present).\nDecl *Sema::ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc, SourceLocation LBraceLoc) {\n  // C++2a [module.interface]p1:\n  //  An export-declaration shall appear only [...] in the purview of a module\n  //  interface unit. An export-declaration shall not appear directly or\n  //  indirectly within [...] a private-module-fragment.\n  if (!isCurrentModulePurview()) {\n  } else if (!ModuleScopes.back().ModuleInterface) {\n    Diag(ModuleScopes.back().BeginLoc, diag::note_not_module_interface_add_export) << FixItHint::CreateInsertion(ModuleScopes.back().BeginLoc, \"export \");"}},
[o]={
["clang/test/CXX/basic/basic.link/p2.cpp"]={"clang/test/CXX/basic/basic.link/p2.cpp:11:1: note: add \'export\' here if this is intended to be a module interface unit"}
}
},
},
["note_not_structural_mutable_field"]={
["note_not_structural_mutable_field"]={
[f]="A is not a structural type because it has a mutable non-static data member",
[b]="A is not a structural type because it has a mutable non-static data member",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is not a structural type because it has a mutable non-static data member",
[h]="%0 is not a structural type because it has a mutable non-static data member",
[g]=b,
[j]=i,
[e]="(.*?) is not a structural type because it has a mutable non\\-static data member",
[k]="(.*?) is not a structural type because it has a mutable non\\-static data member",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Y,1582847864,W},
[m]={mb,1582847864,jb},
[n]={{u,1370,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Drill down into the reason why the class is non-structural.\n  while (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) {\n    // All members are required to be public and non-mutable, and can\'t be of\n    // rvalue reference type. Check these conditions first to prefer a \"local\"\n    // reason over a more distant one.\n    for (const FieldDecl *FD : RD->fields()) {\n      if (FD->isMutable()) {\n        Diag(FD->getLocation(), diag::note_not_structural_mutable_field) << T;"}}
[n]={{v,1370,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Drill down into the reason why the class is non-structural.\n  while (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) {\n    // All members are required to be public and non-mutable, and can\'t be of\n    // rvalue reference type. Check these conditions first to prefer a \"local\"\n    // reason over a more distant one.\n    for (const FieldDecl *FD : RD->fields()) {\n      if (FD->isMutable()) {\n        Diag(FD->getLocation(), diag::note_not_structural_mutable_field) << T;"}},
[o]={
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:120:15: note: \'MutableField\' is not a structural type because it has a mutable non-static data member"}
}
},
},
["note_not_structural_non_public"]={
["note_not_structural_non_public"]={
[f]="A is not a structural type because it has a ... that is not public",
[b]="A is not a structural type because it has a ... that is not public",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is not a structural type because it has a %select{non-static data member|base class}1 that is not public",
[h]="%0 is not a structural type because it has a %select{non-static data member|base class}1 that is not public",
[g]=b,
[j]=i,
[e]="(.*?) is not a structural type because it has a (?:non\\-static data member|base class) that is not public",
[k]="(.*?) is not a structural type because it has a (?:non\\-static data member|base class) that is not public",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Y,1582847864,W},
[m]={mb,1582847864,jb},
[n]={{u,1366,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Drill down into the reason why the class is non-structural.\n  while (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) {\n    // All members are required to be public and non-mutable, and can\'t be of\n    // rvalue reference type. Check these conditions first to prefer a \"local\"\n    // reason over a more distant one.\n    for (const FieldDecl *FD : RD->fields()) {\n      if (FD->getAccess() != AS_public) {\n        Diag(FD->getLocation(), diag::note_not_structural_non_public) << T << 0;"},{u,1383,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Drill down into the reason why the class is non-structural.\n  while (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) {\n    // All bases are required to be public.\n    for (const auto &BaseSpec : RD->bases()) {\n      if (BaseSpec.getAccessSpecifier() != AS_public) {\n        Diag(BaseSpec.getBaseTypeLoc(), diag::note_not_structural_non_public) << T << 1;"}}
[n]={{v,1366,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Drill down into the reason why the class is non-structural.\n  while (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) {\n    // All members are required to be public and non-mutable, and can\'t be of\n    // rvalue reference type. Check these conditions first to prefer a \"local\"\n    // reason over a more distant one.\n    for (const FieldDecl *FD : RD->fields()) {\n      if (FD->getAccess() != AS_public) {\n        Diag(FD->getLocation(), diag::note_not_structural_non_public) << T << 0;"},{v,1383,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Drill down into the reason why the class is non-structural.\n  while (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) {\n    // All bases are required to be public.\n    for (const auto &BaseSpec : RD->bases()) {\n      if (BaseSpec.getAccessSpecifier() != AS_public) {\n        Diag(BaseSpec.getBaseTypeLoc(), diag::note_not_structural_non_public) << T << 1;"}},
[o]={
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:91:15: note: \'ProtectedBase\' is not a structural type because it has a base class that is not public","clang/test/CXX/temp/temp.param/p7.cpp:95:13: note: \'PrivateBase\' is not a structural type because it has a base class that is not public","clang/test/CXX/temp/temp.param/p7.cpp:99:5: note: \'Private2Base\' is not a structural type because it has a base class that is not public","clang/test/CXX/temp/temp.param/p7.cpp:104:5: note: \'ProtectedField\' is not a structural type because it has a non-static data member that is not public","clang/test/CXX/temp/temp.param/p7.cpp:110:5: note: \'PrivateField\' is not a structural type because it has a non-static data member that is not public","clang/test/CXX/temp/temp.param/p7.cpp:115:5: note: \'Private2Field\' is not a structural type because it has a non-static data member that is not public"}
}
},
},
["note_not_structural_rvalue_ref_field"]={
["note_not_structural_rvalue_ref_field"]={
[f]="A is not a structural type because it has a non-static data member of rvalue reference type",
[b]="A is not a structural type because it has a non-static data member of rvalue reference type",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is not a structural type because it has a non-static data member of rvalue reference type",
[h]="%0 is not a structural type because it has a non-static data member of rvalue reference type",
[g]=b,
[j]=i,
[e]="(.*?) is not a structural type because it has a non\\-static data member of rvalue reference type",
[k]="(.*?) is not a structural type because it has a non\\-static data member of rvalue reference type",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Y,1582847864,W},
[m]={mb,1582847864,jb},
[n]={{u,1374,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Drill down into the reason why the class is non-structural.\n  while (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) {\n    // All members are required to be public and non-mutable, and can\'t be of\n    // rvalue reference type. Check these conditions first to prefer a \"local\"\n    // reason over a more distant one.\n    for (const FieldDecl *FD : RD->fields()) {\n      if (FD->getType()->isRValueReferenceType()) {\n        Diag(FD->getLocation(), diag::note_not_structural_rvalue_ref_field) << T;"}}
[n]={{v,1374,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Drill down into the reason why the class is non-structural.\n  while (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) {\n    // All members are required to be public and non-mutable, and can\'t be of\n    // rvalue reference type. Check these conditions first to prefer a \"local\"\n    // reason over a more distant one.\n    for (const FieldDecl *FD : RD->fields()) {\n      if (FD->getType()->isRValueReferenceType()) {\n        Diag(FD->getLocation(), diag::note_not_structural_rvalue_ref_field) << T;"}},
[o]={
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:48:9: note: \'RRef\' is not a structural type because it has a non-static data member of rvalue reference type","clang/test/CXX/temp/temp.param/p7.cpp:48:9: note: \'RRef\' is not a structural type because it has a non-static data member of rvalue reference type","clang/test/CXX/temp/temp.param/p7.cpp:48:9: note: \'RRef\' is not a structural type because it has a non-static data member of rvalue reference type","clang/test/CXX/temp/temp.param/p7.cpp:48:9: note: \'RRef\' is not a structural type because it has a non-static data member of rvalue reference type"}
}
},
},
["note_not_structural_subobject"]={
["note_not_structural_subobject"]={
[f]="A is not a structural type because it has a ... of non-structural type B",
[b]="A is not a structural type because it has a ... of non-structural type B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is not a structural type because it has a %select{non-static data member|base class}1 of non-structural type %2",
[h]="%0 is not a structural type because it has a %select{non-static data member|base class}1 of non-structural type %2",
[g]=b,
[j]=i,
[e]="(.*?) is not a structural type because it has a (?:non\\-static data member|base class) of non\\-structural type (.*?)",
[k]="(.*?) is not a structural type because it has a (?:non\\-static data member|base class) of non\\-structural type (.*?)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={Y,1582847864,W},
[m]={mb,1582847864,jb},
[n]={{u,1417,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Drill down into the reason why the class is non-structural.\n  while (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) {\n    Diag(SubLoc, diag::note_not_structural_subobject) << T << Kind << SubType;"}}
[n]={{v,1417,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Drill down into the reason why the class is non-structural.\n  while (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) {\n    Diag(SubLoc, diag::note_not_structural_subobject) << T << Kind << SubType;"}},
[o]={
["clang/test/CXX/temp/temp.param/p7.cpp"]={"clang/test/CXX/temp/temp.param/p7.cpp:77:5: note: \'BadBase\' is not a structural type because it has a base class of non-structural type \'RRef\'","clang/test/CXX/temp/temp.param/p7.cpp:81:8: note: \'BadField\' is not a structural type because it has a non-static data member of non-structural type \'RRef\'","clang/test/CXX/temp/temp.param/p7.cpp:86:8: note: \'BadFieldArray\' is not a structural type because it has a non-static data member of non-structural type \'RRef\'","clang/test/CXX/temp/temp.param/p7.cpp:124:44: note: \'BadExtType<_Atomic(float)>\' is not a structural type because it has a non-static data member of non-structural type \'_Atomic(float)\'","clang/test/CXX/temp/temp.param/p7.cpp:124:44: note: \'BadExtType<_Atomic(int)>\' is not a structural type because it has a non-static data member of non-structural type \'_Atomic(int)\'"}
}
},
},
["note_nsdictionary_duplicate_key_here"]={
["note_nsdictionary_duplicate_key_here"]={
[f]="previous equal key is here",
[b]="previous equal key is here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="previous equal key is here",
[h]="previous equal key is here",
[g]=b,
[j]=i,
[e]="previous equal key is here",
[k]="previous equal key is here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={yb,1576908663,Db},
[m]={cc,1576908663,bc},
[n]={{s,923,"/// Check for duplicate keys in an ObjC dictionary literal. For instance:\n///  NSDictionary *nd = @{ @\"foo\" : @\"bar\", @\"foo\" : @\"baz\" };\nstatic void CheckObjCDictionaryLiteralDuplicateKeys(Sema &S, ObjCDictionaryLiteral *Literal) {\n  auto checkOneKey = [&](auto &Map, const auto &Key, SourceLocation Loc) {\n    if (!Pair.second) {\n      S.Diag(Pair.first->second, diag::note_nsdictionary_duplicate_key_here);"}}
[n]={{t,923,"/// Check for duplicate keys in an ObjC dictionary literal. For instance:\n///  NSDictionary *nd = @{ @\"foo\" : @\"bar\", @\"foo\" : @\"baz\" };\nstatic void CheckObjCDictionaryLiteralDuplicateKeys(Sema &S, ObjCDictionaryLiteral *Literal) {\n  auto checkOneKey = [&](auto &Map, const auto &Key, SourceLocation Loc) {\n    if (!Pair.second) {\n      S.Diag(Pair.first->second, diag::note_nsdictionary_duplicate_key_here);"}},
[o]={
["clang/test/SemaObjC/dictionary-literal-duplicates.m"]={"clang/test/SemaObjC/dictionary-literal-duplicates.m:28:5: note: previous equal key is here","clang/test/SemaObjC/dictionary-literal-duplicates.m:28:5: note: previous equal key is here",oc,oc,oc,oc,oc,oc,"clang/test/SemaObjC/dictionary-literal-duplicates.m:44:5: note: previous equal key is here","clang/test/SemaObjC/dictionary-literal-duplicates.m:44:5: note: previous equal key is here","clang/test/SemaObjC/dictionary-literal-duplicates.m:55:5: note: previous equal key is here","clang/test/SemaObjC/dictionary-literal-duplicates.m:55:5: note: previous equal key is here"}
}
},
},
["note_nullability_fix_it"]={
["note_nullability_fix_it"]={
[f]="insert \'...\' if the ... ...",
[b]="insert \'...\' if the ... ...",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="insert \'%select{_Nonnull|_Nullable|_Null_unspecified}0\' if the %select{pointer|block pointer|member pointer|array parameter}1 %select{should never be null|may be null|should not declare nullability}0",
[h]="insert \'%select{_Nonnull|_Nullable|_Null_unspecified}0\' if the %select{pointer|block pointer|member pointer|array parameter}1 %select{should never be null|may be null|should not declare nullability}0",
[g]=b,
[j]=i,
[e]="insert \'(?:_Nonnull|_Nullable|_Null_unspecified)\' if the (?:pointer|block pointer|member pointer|array parameter) (?:should never be null|may be null|should not declare nullability)",
[k]="insert \'(?:_Nonnull|_Nullable|_Null_unspecified)\' if the (?:pointer|block pointer|member pointer|array parameter) (?:should never be null|may be null|should not declare nullability)",
[d]=a,
[l]=a,
[c]="Nullability Issue",
[c]="Nullability Issue",
[m]={"06dd406e27b4",1482181100,"Add fix-it notes to the nullability consistency warning."},
[m]={"06dd406e27b4",1482181100,"Add fix-it notes to the nullability consistency warning."},
[n]={{B,4476,"static void emitNullabilityConsistencyWarning(Sema &S, SimplePointerKind PointerKind, SourceLocation PointerLoc, SourceLocation PointerEndLoc) {\n  auto addFixIt = [&](NullabilityKind Nullability) {\n    auto Diag = S.Diag(FixItLoc, diag::note_nullability_fix_it);"}}
[n]={{I,4476,"static void emitNullabilityConsistencyWarning(Sema &S, SimplePointerKind PointerKind, SourceLocation PointerLoc, SourceLocation PointerEndLoc) {\n  auto addFixIt = [&](NullabilityKind Nullability) {\n    auto Diag = S.Diag(FixItLoc, diag::note_nullability_fix_it);"}},
[o]={
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:11:13: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:11:13: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:43:12: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:43:12: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:43:13: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:43:13: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:46:10: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:46:10: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:51:14: note: insert \'_Nullable\' if the block pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:51:14: note: insert \'_Nonnull\' if the block pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:51:16: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:51:16: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:57:9: note: insert \'_Nullable\' if the block pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:57:9: note: insert \'_Nonnull\' if the block pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:57:19: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:57:19: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:64:14: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:64:14: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:64:15: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:64:15: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:74:18: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:74:18: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:80:19: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:80:19: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:80:20: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:80:20: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:90:13: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:90:13: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:114:12: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:114:12: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:117:10: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:117:10: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:120:10: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:120:10: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:125:10: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:125:10: note: insert \'_Nonnull\' if the pointer should never be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:130:4: note: insert \'_Nullable\' if the pointer may be null","clang/test/SemaObjCXX/Inputs/nullability-pragmas-1.h:130:4: note: insert \'_Nonnull\' if the pointer should never be null"}
}
},
},
["note_nullability_here"]={
["note_nullability_here"]={
[f]="A specified here",
[b]="A specified here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 specified here",
[h]="%0 specified here",
[g]=b,
[j]=i,
[e]="(.*?) specified here",
[k]="(.*?) specified here",
[d]=a,
[l]=a,
[c]="Nullability Issue",
[c]="Nullability Issue",
[m]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++."},
[m]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++."},
[n]={{B,7527,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // If there is already a different nullability specifier, complain.\n  // This (unlike the code above) looks through typedefs that might\n  // have nullability specifiers on them, which means we cannot\n  // provide a useful Fix-It.\n  if (auto existingNullability = desugared->getNullability()) {\n    if (nullability != *existingNullability) {\n      // Try to find the typedef with the existing nullability specifier.\n      if (auto typedefType = desugared->getAs<TypedefType>()) {\n        if (auto typedefNullability = AttributedType::stripOuterNullability(underlyingType)) {\n          if (*typedefNullability == *existingNullability) {\n            S.Diag(typedefDecl->getLocation(), diag::note_nullability_here) << DiagNullabilityKind(*existingNullability, false);"}}
[n]={{I,7527,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // If there is already a different nullability specifier, complain.\n  // This (unlike the code above) looks through typedefs that might\n  // have nullability specifiers on them, which means we cannot\n  // provide a useful Fix-It.\n  if (auto existingNullability = desugared->getNullability()) {\n    if (nullability != *existingNullability) {\n      // Try to find the typedef with the existing nullability specifier.\n      if (auto typedefType = desugared->getAs<TypedefType>()) {\n        if (auto typedefNullability = AttributedType::stripOuterNullability(underlyingType)) {\n          if (*typedefNullability == *existingNullability) {\n            S.Diag(typedefDecl->getLocation(), diag::note_nullability_here) << DiagNullabilityKind(*existingNullability, false);"}},
[o]={
["clang/test/Sema/nullability.c"]={"clang/test/Sema/nullability.c:15:24: note: \'_Nonnull\' specified here"}
}
},
},
["note_nullability_type_specifier"]={
["note_nullability_type_specifier"]={
[f]="use nullability type specifier A to affect the innermost pointer type of B",
[b]="use nullability type specifier A to affect the innermost pointer type of B",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use nullability type specifier %0 to affect the innermost pointer type of %1",
[h]="use nullability type specifier %0 to affect the innermost pointer type of %1",
[g]=b,
[j]=i,
[e]="use nullability type specifier (.*?) to affect the innermost pointer type of (.*?)",
[k]="use nullability type specifier (.*?) to affect the innermost pointer type of (.*?)",
[d]=a,
[l]=a,
[c]="Nullability Issue",
[c]="Nullability Issue",
[m]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."},
[m]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."},
[n]={{B,7561,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // For the context-sensitive keywords/Objective-C property\n  // attributes, require that the type be a single-level pointer.\n  if (isContextSensitive) {\n    if (pointeeType && (pointeeType->isAnyPointerType() || pointeeType->isObjCObjectPointerType() || pointeeType->isMemberPointerType())) {\n      S.Diag(nullabilityLoc, diag::note_nullability_type_specifier) << DiagNullabilityKind(nullability, false) << type << FixItHint::CreateReplacement(nullabilityLoc, getNullabilitySpelling(nullability));"}}
[n]={{I,7561,"/// Applies a nullability type specifier to the given type, if possible.\n///\n/// \\param state The type processing state.\n///\n/// \\param type The type to which the nullability specifier will be\n/// added. On success, this type will be updated appropriately.\n///\n/// \\param attr The attribute as written on the type.\n///\n/// \\param allowOnArrayType Whether to accept nullability specifiers on an\n/// array type (e.g., because it will decay to a pointer).\n///\n/// \\returns true if a problem has been diagnosed, false on success.\nstatic bool checkNullabilityTypeSpecifier(TypeProcessingState &state, QualType &type, ParsedAttr &attr, bool allowOnArrayType) {\n  // For the context-sensitive keywords/Objective-C property\n  // attributes, require that the type be a single-level pointer.\n  if (isContextSensitive) {\n    if (pointeeType && (pointeeType->isAnyPointerType() || pointeeType->isObjCObjectPointerType() || pointeeType->isMemberPointerType())) {\n      S.Diag(nullabilityLoc, diag::note_nullability_type_specifier) << DiagNullabilityKind(nullability, false) << type << FixItHint::CreateReplacement(nullabilityLoc, getNullabilitySpelling(nullability));"}},
[o]={
["clang/test/SemaObjC/nullability.m"]={"clang/test/SemaObjC/nullability.m:37:4: note: use nullability type specifier \'_Nonnull\' to affect the innermost pointer type of \'NSFoo **\'","clang/test/SemaObjC/nullability.m:43:19: note: use nullability type specifier \'_Nullable\' to affect the innermost pointer type of \'NSFoo **\'","clang/test/SemaObjC/nullability.m:54:19: note: use nullability type specifier \'_Nullable\' to affect the innermost pointer type of \'NSFoo **\'","clang/test/SemaObjC/nullability.m:283:22: note: use nullability type specifier \'_Nonnull\' to affect the innermost pointer type of \'void * _Nullable[2]\'"}
}
},
},
["note_objc_circular_container_declared_here"]={
["note_objc_circular_container_declared_here"]={
[f]="A declared here",
[b]="A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 declared here",
[h]="%0 declared here",
[g]=b,
[j]=i,
[e]="(.*?) declared here",
[k]="(.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"e1d882c726b5",1425491752,"New ObjC warning: circular containers."},
[m]={"e1d882c726b5",1425491752,"New ObjC warning: circular containers."},
[n]={{y,17647,"void Sema::CheckObjCCircularContainer(ObjCMessageExpr *Message) {\n  if (Message->getReceiverKind() == ObjCMessageExpr::SuperInstance) {\n  } else {\n    if (DeclRefExpr *ReceiverRE = dyn_cast<DeclRefExpr>(Receiver)) {\n      if (DeclRefExpr *ArgRE = dyn_cast<DeclRefExpr>(Arg)) {\n        if (ReceiverRE->getDecl() == ArgRE->getDecl()) {\n          if (!ArgRE->isObjCSelfExpr()) {\n            Diag(Decl->getLocation(), diag::note_objc_circular_container_declared_here) << Decl;"},{y,17660,"void Sema::CheckObjCCircularContainer(ObjCMessageExpr *Message) {\n  if (Message->getReceiverKind() == ObjCMessageExpr::SuperInstance) {\n  } else {\n    if (DeclRefExpr *ReceiverRE = dyn_cast<DeclRefExpr>(Receiver)) {\n    } else if (ObjCIvarRefExpr *IvarRE = dyn_cast<ObjCIvarRefExpr>(Receiver)) {\n      if (ObjCIvarRefExpr *IvarArgRE = dyn_cast<ObjCIvarRefExpr>(Arg)) {\n        if (IvarRE->getDecl() == IvarArgRE->getDecl()) {\n          Diag(Decl->getLocation(), diag::note_objc_circular_container_declared_here) << Decl;"}}
[n]={{D,17647,"void Sema::CheckObjCCircularContainer(ObjCMessageExpr *Message) {\n  if (Message->getReceiverKind() == ObjCMessageExpr::SuperInstance) {\n  } else {\n    if (DeclRefExpr *ReceiverRE = dyn_cast<DeclRefExpr>(Receiver)) {\n      if (DeclRefExpr *ArgRE = dyn_cast<DeclRefExpr>(Arg)) {\n        if (ReceiverRE->getDecl() == ArgRE->getDecl()) {\n          if (!ArgRE->isObjCSelfExpr()) {\n            Diag(Decl->getLocation(), diag::note_objc_circular_container_declared_here) << Decl;"},{D,17660,"void Sema::CheckObjCCircularContainer(ObjCMessageExpr *Message) {\n  if (Message->getReceiverKind() == ObjCMessageExpr::SuperInstance) {\n  } else {\n    if (DeclRefExpr *ReceiverRE = dyn_cast<DeclRefExpr>(Receiver)) {\n    } else if (ObjCIvarRefExpr *IvarRE = dyn_cast<ObjCIvarRefExpr>(Receiver)) {\n      if (ObjCIvarRefExpr *IvarArgRE = dyn_cast<ObjCIvarRefExpr>(Arg)) {\n        if (IvarRE->getDecl() == IvarArgRE->getDecl()) {\n          Diag(Decl->getLocation(), diag::note_objc_circular_container_declared_here) << Decl;"}}
},
},
["note_objc_container_start"]={
["note_objc_container_start"]={
[f]="... started here",
[b]="... started here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{class|protocol|category|class extension|implementation|category implementation}0 started here",
[h]="%select{class|protocol|category|class extension|implementation|category implementation}0 started here",
[g]=b,
[j]=i,
[e]="(?:class|protocol|category|class extension|implementation|category implementation) started here",
[k]="(?:class|protocol|category|class extension|implementation|category implementation) started here",
[d]=a,
[l]=a,
[c]=Q,
[c]=Z,
[m]={"c6c8d9356dc0",1323163523,"Extend warnings for missing \'@end\'."},
[m]={"c6c8d9356dc0",1323163523,"Extend warnings for missing \'@end\'."},
[n]={{Kb,204,"void Parser::CheckNestedObjCContexts(SourceLocation AtLoc) {\n  if (Decl)\n    Diag(Decl->getBeginLoc(), diag::note_objc_container_start) << (int)ock;"},{Kb,747,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  while (true) {\n    case tok::objc_interface:\n      Diag(CDecl->getBeginLoc(), diag::note_objc_container_start) << (int)Actions.getObjCContainerKind();"},{Kb,831,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // We break out of the big loop in two cases: when we see @end or when we see\n  // EOF.  In the former case, eat the @end.  In the later case, emit an error.\n  if (Tok.is(tok::code_completion)) {\n  } else if (Tok.isObjCAtKeyword(tok::objc_end)) {\n  } else {\n    Diag(CDecl->getBeginLoc(), diag::note_objc_container_start) << (int)Actions.getObjCContainerKind();"},{Kb,2309,"Parser::ObjCImplParsingDataRAII::~ObjCImplParsingDataRAII() {\n  if (!Finished) {\n    if (P.isEofOrEom()) {\n      P.Diag(Dcl->getBeginLoc(), diag::note_objc_container_start) << Sema::OCK_Implementation;"}}
[n]={{Tb,204,"void Parser::CheckNestedObjCContexts(SourceLocation AtLoc) {\n  if (Decl)\n    Diag(Decl->getBeginLoc(), diag::note_objc_container_start) << (int)ock;"},{Tb,747,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  while (true) {\n    case tok::objc_interface:\n      Diag(CDecl->getBeginLoc(), diag::note_objc_container_start) << (int)Actions.getObjCContainerKind();"},{Tb,831,"///  objc-interface-decl-list:\n///    empty\n///    objc-interface-decl-list objc-property-decl [OBJC2]\n///    objc-interface-decl-list objc-method-requirement [OBJC2]\n///    objc-interface-decl-list objc-method-proto \';\'\n///    objc-interface-decl-list declaration\n///    objc-interface-decl-list \';\'\n///\n///  objc-method-requirement: [OBJC2]\n///    @required\n///    @optional\n///\nvoid Parser::ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey, Decl *CDecl) {\n  // We break out of the big loop in two cases: when we see @end or when we see\n  // EOF.  In the former case, eat the @end.  In the later case, emit an error.\n  if (Tok.is(tok::code_completion)) {\n  } else if (Tok.isObjCAtKeyword(tok::objc_end)) {\n  } else {\n    Diag(CDecl->getBeginLoc(), diag::note_objc_container_start) << (int)Actions.getObjCContainerKind();"},{Tb,2309,"Parser::ObjCImplParsingDataRAII::~ObjCImplParsingDataRAII() {\n  if (!Finished) {\n    if (P.isEofOrEom()) {\n      P.Diag(Dcl->getBeginLoc(), diag::note_objc_container_start) << Sema::OCK_Implementation;"}},
[o]={
["clang/test/SemaObjC/missing-atend-metadata.m"]={"clang/test/SemaObjC/missing-atend-metadata.m:6:1: note: implementation started here","clang/test/SemaObjC/missing-atend-metadata.m:12:1: note: implementation started here","clang/test/SemaObjC/missing-atend-metadata.m:19:1: note: implementation started here","clang/test/SemaObjC/missing-atend-metadata.m:22:1: note: implementation started here"}
}
},
},
["note_objc_designated_init_marked_here"]={
["note_objc_designated_init_marked_here"]={
[f]="method marked as designated initializer of the class here",
[b]="method marked as designated initializer of the class here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="method marked as designated initializer of the class here",
[h]="method marked as designated initializer of the class here",
[g]=b,
[j]=i,
[e]="method marked as designated initializer of the class here",
[k]="method marked as designated initializer of the class here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"22bfa2c28bdb",1386105096,"[objc] Emit a warning when the implementation of a designated initializer does not chain to"},
[m]={"22bfa2c28bdb",1386105096,"[objc] Emit a warning when the implementation of a designated initializer does not chain to"},
[n]={{t,15853,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    if (FD) {\n    } else if (ObjCMethodDecl *MD = dyn_cast_or_null<ObjCMethodDecl>(dcl)) {\n      if (FSI->ObjCWarnForNoDesignatedInitChain) {\n        // Don\'t issue this warning for unavailable inits or direct subclasses\n        // of NSObject.\n        if (!MD->isUnavailable() && !superIsNSObject(MD)) {\n          Diag(InitMethod->getLocation(), diag::note_objc_designated_init_marked_here);"},{s,3211,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (DIFunctionScopeInfo && DIFunctionScopeInfo->ObjCIsDesignatedInit && (SuperLoc.isValid() || isSelfExpr(Receiver))) {\n    if (!isDesignatedInitChain) {\n      Diag(InitMethod->getLocation(), diag::note_objc_designated_init_marked_here);"},{N,2352,"void Sema::DiagnoseMissingDesignatedInitOverrides(const ObjCImplementationDecl *ImplD, const ObjCInterfaceDecl *IFD) {\n  for (SmallVector<const ObjCMethodDecl *, 8>::iterator I = DesignatedInits.begin(), E = DesignatedInits.end(); I != E; ++I) {\n    if (!InitSelSet.count(MD->getSelector())) {\n      if (!Ignore) {\n        Diag(MD->getLocation(), diag::note_objc_designated_init_marked_here);"}}
[n]={{u,15853,"Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body, bool IsInstantiation) {\n  {\n    if (FD) {\n    } else if (ObjCMethodDecl *MD = dyn_cast_or_null<ObjCMethodDecl>(dcl)) {\n      if (FSI->ObjCWarnForNoDesignatedInitChain) {\n        // Don\'t issue this warning for unavailable inits or direct subclasses\n        // of NSObject.\n        if (!MD->isUnavailable() && !superIsNSObject(MD)) {\n          Diag(InitMethod->getLocation(), diag::note_objc_designated_init_marked_here);"},{t,3211,"/// Build an Objective-C instance message expression.\n///\n/// This routine takes care of both normal instance messages and\n/// instance messages to the superclass instance.\n///\n/// \\param Receiver The expression that computes the object that will\n/// receive this message. This may be empty, in which case we are\n/// sending to the superclass instance and \\p SuperLoc must be a valid\n/// source location.\n///\n/// \\param ReceiverType The (static) type of the object receiving the\n/// message. When a \\p Receiver expression is provided, this is the\n/// same type as that expression. For a superclass instance send, this\n/// is a pointer to the type of the superclass.\n///\n/// \\param SuperLoc The location of the \"super\" keyword in a\n/// superclass instance message.\n///\n/// \\param Sel The selector to which the message is being sent.\n///\n/// \\param Method The method that this instance message is invoking, if\n/// already known.\n///\n/// \\param LBracLoc The location of the opening square bracket \']\'.\n///\n/// \\param RBracLoc The location of the closing square bracket \']\'.\n///\n/// \\param ArgsIn The message arguments.\nExprResult Sema::BuildInstanceMessage(Expr *Receiver, QualType ReceiverType, SourceLocation SuperLoc, Selector Sel, ObjCMethodDecl *Method, SourceLocation LBracLoc, ArrayRef<SourceLocation> SelectorLocs, SourceLocation RBracLoc, MultiExprArg ArgsIn, bool isImplicit) {\n  if (DIFunctionScopeInfo && DIFunctionScopeInfo->ObjCIsDesignatedInit && (SuperLoc.isValid() || isSelfExpr(Receiver))) {\n    if (!isDesignatedInitChain) {\n      Diag(InitMethod->getLocation(), diag::note_objc_designated_init_marked_here);"},{V,2352,"void Sema::DiagnoseMissingDesignatedInitOverrides(const ObjCImplementationDecl *ImplD, const ObjCInterfaceDecl *IFD) {\n  for (SmallVector<const ObjCMethodDecl *, 8>::iterator I = DesignatedInits.begin(), E = DesignatedInits.end(); I != E; ++I) {\n    if (!InitSelSet.count(MD->getSelector())) {\n      if (!Ignore) {\n        Diag(MD->getLocation(), diag::note_objc_designated_init_marked_here);"}},
[o]={
["clang/test/SemaObjC/attr-designated-init.m"]={"clang/test/SemaObjC/attr-designated-init.m:53:1: note: method marked as designated initializer of the class here","clang/test/SemaObjC/attr-designated-init.m:55:1: note: method marked as designated initializer of the class here","clang/test/SemaObjC/attr-designated-init.m:55:1: note: method marked as designated initializer of the class here","clang/test/SemaObjC/attr-designated-init.m:60:1: note: method marked as designated initializer of the class here","clang/test/SemaObjC/attr-designated-init.m:60:1: note: method marked as designated initializer of the class here",qc,"clang/test/SemaObjC/attr-designated-init.m:43:1: note: method marked as designated initializer of the class here","clang/test/SemaObjC/attr-designated-init.m:104:1: note: method marked as designated initializer of the class here","clang/test/SemaObjC/attr-designated-init.m:104:1: note: method marked as designated initializer of the class here","clang/test/SemaObjC/attr-designated-init.m:100:1: note: method marked as designated initializer of the class here",qc,qc,"clang/test/SemaObjC/attr-designated-init.m:43:1: note: method marked as designated initializer of the class here","clang/test/SemaObjC/attr-designated-init.m:43:1: note: method marked as designated initializer of the class here",qc,"clang/test/SemaObjC/attr-designated-init.m:43:1: note: method marked as designated initializer of the class here",qc,qc,"clang/test/SemaObjC/attr-designated-init.m:270:1: note: method marked as designated initializer of the class here","clang/test/SemaObjC/attr-designated-init.m:270:1: note: method marked as designated initializer of the class here","clang/test/SemaObjC/attr-designated-init.m:270:1: note: method marked as designated initializer of the class here","clang/test/SemaObjC/attr-designated-init.m:270:1: note: method marked as designated initializer of the class here","clang/test/SemaObjC/attr-designated-init.m:358:1: note: method marked as designated initializer of the class here"}
}
},
},
["note_objc_literal_comparison_isequal"]={
["note_objc_literal_comparison_isequal"]={
[f]="use \'isEqual:\' instead",
[b]="use \'isEqual:\' instead",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="use \'isEqual:\' instead",
[h]="use \'isEqual:\' instead",
[g]=b,
[j]=i,
[e]="use \'isEqual\\:\' instead",
[k]="use \'isEqual\\:\' instead",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"7660f78fb95b",1342547200,"Now that -Wobjc-literal-compare is a warning, put the fixit on a note."},
[m]={"7660f78fb95b",1342547200,"Now that -Wobjc-literal-compare is a warning, put the fixit on a note."},
[n]={{r,12537,"static void diagnoseObjCLiteralComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, BinaryOperator::Opcode Opc) {\n  if (BinaryOperator::isEqualityOp(Opc) && hasIsEqualMethod(S, LHS.get(), RHS.get())) {\n    S.Diag(Loc, diag::note_objc_literal_comparison_isequal) << FixItHint::CreateInsertion(Start, Opc == BO_EQ ? \"[\" : \"![\") << FixItHint::CreateReplacement(OpRange, \" isEqual:\") << FixItHint::CreateInsertion(End, \"]\");"}}
[n]={{s,12537,"static void diagnoseObjCLiteralComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, ExprResult &RHS, BinaryOperator::Opcode Opc) {\n  if (BinaryOperator::isEqualityOp(Opc) && hasIsEqualMethod(S, LHS.get(), RHS.get())) {\n    S.Diag(Loc, diag::note_objc_literal_comparison_isequal) << FixItHint::CreateInsertion(Start, Opc == BO_EQ ? \"[\" : \"![\") << FixItHint::CreateReplacement(OpRange, \" isEqual:\") << FixItHint::CreateInsertion(End, \"]\");"}},
[o]={
["clang/test/FixIt/fixit-nsstring-compare.m"]={"clang/test/FixIt/fixit-nsstring-compare.m:16:28: note: use \'isEqual:\' instead"}
}
},
},
["note_objc_literal_method_param"]={
["note_objc_literal_method_param"]={
[f]="... parameter has unexpected type A (should be B)",
[b]="... parameter has unexpected type A (should be B)",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{first|second|third}0 parameter has unexpected type %1 (should be %2)",
[h]="%select{first|second|third}0 parameter has unexpected type %1 (should be %2)",
[g]=b,
[j]=i,
[e]="(?:first|second|third) parameter has unexpected type (.*?) \\(should be (.*?)\\)",
[k]="(?:first|second|third) parameter has unexpected type (.*?) \\(should be (.*?)\\)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"},
[m]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"},
[n]={{s,852,"ExprResult Sema::BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements) {\n  if (!ArrayWithObjectsMethod) {\n    if (!PtrT || !Context.hasSameUnqualifiedType(PtrT->getPointeeType(), IdT)) {\n      Diag(Method->parameters()[0]->getLocation(), diag::note_objc_literal_method_param) << 0 << T << Context.getPointerType(IdT.withConst());"},{s,863,"ExprResult Sema::BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements) {\n  if (!ArrayWithObjectsMethod) {\n    // Check that the \'count\' parameter is integral.\n    if (!Method->parameters()[1]->getType()->isIntegerType()) {\n      Diag(Method->parameters()[1]->getLocation(), diag::note_objc_literal_method_param) << 1 << Method->parameters()[1]->getType() << \"integral\";"},{s,1023,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  if (!DictionaryWithObjectsMethod) {\n    if (!PtrValue || !Context.hasSameUnqualifiedType(PtrValue->getPointeeType(), IdT)) {\n      Diag(Method->parameters()[0]->getLocation(), diag::note_objc_literal_method_param) << 0 << ValueT << Context.getPointerType(IdT.withConst());"},{s,1057,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  if (!DictionaryWithObjectsMethod) {\n    if (!PtrKey || !Context.hasSameUnqualifiedType(PtrKey->getPointeeType(), IdT)) {\n      if (err) {\n        Diag(Method->parameters()[1]->getLocation(), diag::note_objc_literal_method_param) << 1 << KeyT << Context.getPointerType(IdT.withConst());"},{s,1070,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  if (!DictionaryWithObjectsMethod) {\n    if (!CountType->isIntegerType()) {\n      Diag(Method->parameters()[2]->getLocation(), diag::note_objc_literal_method_param) << 2 << CountType << \"integral\";"}}
[n]={{t,852,"ExprResult Sema::BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements) {\n  if (!ArrayWithObjectsMethod) {\n    if (!PtrT || !Context.hasSameUnqualifiedType(PtrT->getPointeeType(), IdT)) {\n      Diag(Method->parameters()[0]->getLocation(), diag::note_objc_literal_method_param) << 0 << T << Context.getPointerType(IdT.withConst());"},{t,863,"ExprResult Sema::BuildObjCArrayLiteral(SourceRange SR, MultiExprArg Elements) {\n  if (!ArrayWithObjectsMethod) {\n    // Check that the \'count\' parameter is integral.\n    if (!Method->parameters()[1]->getType()->isIntegerType()) {\n      Diag(Method->parameters()[1]->getLocation(), diag::note_objc_literal_method_param) << 1 << Method->parameters()[1]->getType() << \"integral\";"},{t,1023,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  if (!DictionaryWithObjectsMethod) {\n    if (!PtrValue || !Context.hasSameUnqualifiedType(PtrValue->getPointeeType(), IdT)) {\n      Diag(Method->parameters()[0]->getLocation(), diag::note_objc_literal_method_param) << 0 << ValueT << Context.getPointerType(IdT.withConst());"},{t,1057,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  if (!DictionaryWithObjectsMethod) {\n    if (!PtrKey || !Context.hasSameUnqualifiedType(PtrKey->getPointeeType(), IdT)) {\n      if (err) {\n        Diag(Method->parameters()[1]->getLocation(), diag::note_objc_literal_method_param) << 1 << KeyT << Context.getPointerType(IdT.withConst());"},{t,1070,"ExprResult Sema::BuildObjCDictionaryLiteral(SourceRange SR, MutableArrayRef<ObjCDictionaryElement> Elements) {\n  if (!DictionaryWithObjectsMethod) {\n    if (!CountType->isIntegerType()) {\n      Diag(Method->parameters()[2]->getLocation(), diag::note_objc_literal_method_param) << 2 << CountType << \"integral\";"}},
[o]={
["clang/test/SemaObjC/objc-literal-sig.m"]={"clang/test/SemaObjC/objc-literal-sig.m:30:38: note: first parameter has unexpected type \'const int *\' (should be \'const id *\')","clang/test/SemaObjC/objc-literal-sig.m:30:38: note: first parameter has unexpected type \'const int *\' (should be \'const id *\')","clang/test/SemaObjC/objc-literal-sig.m:36:43: note: second parameter has unexpected type \'const int *\' (should be \'const id *\')","clang/test/SemaObjC/objc-literal-sig.m:36:43: note: second parameter has unexpected type \'const int *\' (should be \'const id *\')"}
}
},
},
["note_objc_literal_method_return"]={
["note_objc_literal_method_return"]={
[f]="method returns unexpected type A (should be an object type)",
[b]="method returns unexpected type A (should be an object type)",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="method returns unexpected type %0 (should be an object type)",
[h]="method returns unexpected type %0 (should be an object type)",
[g]=b,
[j]=i,
[e]="method returns unexpected type (.*?) \\(should be an object type\\)",
[k]="method returns unexpected type (.*?) \\(should be an object type\\)",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"},
[m]={"e65b086e07a6",1331064356,"Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"},
[n]={{s,163,"/// Emits an error if the given method does not exist, or if the return\n/// type is not an Objective-C object.\nstatic bool validateBoxingMethod(Sema &S, SourceLocation Loc, const ObjCInterfaceDecl *Class, Selector Sel, const ObjCMethodDecl *Method) {\n  if (!ReturnType->isObjCObjectPointerType()) {\n    S.Diag(Method->getLocation(), diag::note_objc_literal_method_return) << ReturnType;"}}
[n]={{t,163,"/// Emits an error if the given method does not exist, or if the return\n/// type is not an Objective-C object.\nstatic bool validateBoxingMethod(Sema &S, SourceLocation Loc, const ObjCInterfaceDecl *Class, Selector Sel, const ObjCMethodDecl *Method) {\n  if (!ReturnType->isObjCObjectPointerType()) {\n    S.Diag(Method->getLocation(), diag::note_objc_literal_method_return) << ReturnType;"}},
[o]={
["clang/test/SemaObjC/objc-literal-sig.m"]={"clang/test/SemaObjC/objc-literal-sig.m:19:1: note: method returns unexpected type \'int\' (should be an object type)","clang/test/SemaObjC/objc-literal-sig.m:19:1: note: method returns unexpected type \'int\' (should be an object type)","clang/test/SemaObjC/objc-literal-sig.m:23:1: note: method returns unexpected type \'char\' (should be an object type)","clang/test/SemaObjC/objc-literal-sig.m:23:1: note: method returns unexpected type \'char\' (should be an object type)"}
}
},
},
["note_objc_needs_superclass"]={
["note_objc_needs_superclass"]={
[f]="add a super class to fix this problem",
[b]="add a super class to fix this problem",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="add a super class to fix this problem",
[h]="add a super class to fix this problem",
[g]=b,
[j]=i,
[e]="add a super class to fix this problem",
[k]="add a super class to fix this problem",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"acfbe9e1f228",1333735942,"Added a new attribute, objc_root_class, which informs the compiler when a root class is intentionall..."},
[m]={"acfbe9e1f228",1333735942,"Added a new attribute, objc_root_class, which informs the compiler when a root class is intentionall..."},
[n]={{E,4147,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      if (IDecl->getSuperClass() == nullptr) {\n        // This class has no superclass, so check that it has been marked with\n        // __attribute((objc_root_class)).\n        if (!HasRootClassAttr) {\n          if (NSObjectDecl && NSObjectDecl->getDefinition()) {\n            Diag(SuperClassLoc, diag::note_objc_needs_superclass) << FixItHint::CreateInsertion(SuperClassLoc, \" : NSObject \");"},{E,4150,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      if (IDecl->getSuperClass() == nullptr) {\n        // This class has no superclass, so check that it has been marked with\n        // __attribute((objc_root_class)).\n        if (!HasRootClassAttr) {\n          if (NSObjectDecl && NSObjectDecl->getDefinition()) {\n          } else {\n            Diag(SuperClassLoc, diag::note_objc_needs_superclass);"}}
[n]={{M,4147,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      if (IDecl->getSuperClass() == nullptr) {\n        // This class has no superclass, so check that it has been marked with\n        // __attribute((objc_root_class)).\n        if (!HasRootClassAttr) {\n          if (NSObjectDecl && NSObjectDecl->getDefinition()) {\n            Diag(SuperClassLoc, diag::note_objc_needs_superclass) << FixItHint::CreateInsertion(SuperClassLoc, \" : NSObject \");"},{M,4150,"// Note: For class/category implementations, allMethods is always null.\nDecl *Sema::ActOnAtEnd(Scope *S, SourceRange AtEnd, ArrayRef<Decl *> allMethods, ArrayRef<DeclGroupPtrTy> allTUVars) {\n  if (ObjCImplementationDecl *IC = dyn_cast<ObjCImplementationDecl>(ClassDecl)) {\n    if (ObjCInterfaceDecl *IDecl = IC->getClassInterface()) {\n      if (IDecl->getSuperClass() == nullptr) {\n        // This class has no superclass, so check that it has been marked with\n        // __attribute((objc_root_class)).\n        if (!HasRootClassAttr) {\n          if (NSObjectDecl && NSObjectDecl->getDefinition()) {\n          } else {\n            Diag(SuperClassLoc, diag::note_objc_needs_superclass);"}},
[o]={
["clang/test/SemaObjC/method-encoding-2.m"]={"clang/test/SemaObjC/method-encoding-2.m:4:16: note: add a super class to fix this problem"}
}
},
},
["note_objc_type_param_here"]={
["note_objc_type_param_here"]={
[f]="type parameter A declared here",
[b]="type parameter A declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="type parameter %0 declared here",
[h]="type parameter %0 declared here",
[g]=b,
[j]=i,
[e]="type parameter (.*?) declared here",
[k]="type parameter (.*?) declared here",
[d]=a,
[l]=a,
[c]="Generics Issue",
[c]="Generics Issue",
[m]={"85f3f9513dbc",1436241435,"Parsing, semantic analysis, and AST for Objective-C type parameters."},
[m]={"85f3f9513dbc",1436241435,"Parsing, semantic analysis, and AST for Objective-C type parameters."},
[n]={{E,907,"/// Check consistency between two Objective-C type parameter lists, e.g.,\n/// between a category/extension and an \\@interface or between an \\@class and an\n/// \\@interface.\nstatic bool checkTypeParamListConsistency(Sema &S, ObjCTypeParamList *prevTypeParams, ObjCTypeParamList *newTypeParams, TypeParamListContext newContext) {\n  // Match up the type parameters.\n  for (unsigned i = 0, n = prevTypeParams->size(); i != n; ++i) {\n    // Check for consistency of the variance.\n    if (newTypeParam->getVariance() != prevTypeParam->getVariance()) {\n      if (newTypeParam->getVariance() == ObjCTypeParamVariance::Invariant && newContext != TypeParamListContext::Definition) {\n      } else if (prevTypeParam->getVariance() == ObjCTypeParamVariance::Invariant && !(isa<ObjCInterfaceDecl>(prevTypeParam->getDeclContext()) && cast<ObjCInterfaceDecl>(prevTypeParam->getDeclContext())->getDefinition() == prevTypeParam->getDeclContext())) {\n      } else {\n        S.Diag(prevTypeParam->getLocation(), diag::note_objc_type_param_here) << prevTypeParam->getDeclName();"},{E,937,"/// Check consistency between two Objective-C type parameter lists, e.g.,\n/// between a category/extension and an \\@interface or between an \\@class and an\n/// \\@interface.\nstatic bool checkTypeParamListConsistency(Sema &S, ObjCTypeParamList *prevTypeParams, ObjCTypeParamList *newTypeParams, TypeParamListContext newContext) {\n  // Match up the type parameters.\n  for (unsigned i = 0, n = prevTypeParams->size(); i != n; ++i) {\n    // If the new type parameter\'s bound was explicit, complain about it being\n    // different from the original.\n    if (newTypeParam->hasExplicitBound()) {\n      S.Diag(prevTypeParam->getLocation(), diag::note_objc_type_param_here) << prevTypeParam->getDeclName();"},{E,964,"/// Check consistency between two Objective-C type parameter lists, e.g.,\n/// between a category/extension and an \\@interface or between an \\@class and an\n/// \\@interface.\nstatic bool checkTypeParamListConsistency(Sema &S, ObjCTypeParamList *prevTypeParams, ObjCTypeParamList *newTypeParams, TypeParamListContext newContext) {\n  // Match up the type parameters.\n  for (unsigned i = 0, n = prevTypeParams->size(); i != n; ++i) {\n    // The new type parameter got the implicit bound of \'id\'. That\'s okay for\n    // categories and extensions (overwrite it later), but not for forward\n    // declarations and @interfaces, because those must be standalone.\n    if (newContext == TypeParamListContext::ForwardDeclaration || newContext == TypeParamListContext::Definition) {\n      S.Diag(prevTypeParam->getLocation(), diag::note_objc_type_param_here) << prevTypeParam->getDeclName();"},{B,971,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    // Objective-C object pointer types must be substitutable for the bounds.\n    if (const auto *typeArgObjC = typeArg->getAs<ObjCObjectPointerType>()) {\n      S.Diag(typeParam->getLocation(), diag::note_objc_type_param_here) << typeParam->getDeclName();"},{B,999,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    // Block pointer types are permitted for unqualified \'id\' bounds.\n    if (typeArg->isBlockPointerType()) {\n      S.Diag(typeParam->getLocation(), diag::note_objc_type_param_here) << typeParam->getDeclName();"}}
[n]={{M,907,"/// Check consistency between two Objective-C type parameter lists, e.g.,\n/// between a category/extension and an \\@interface or between an \\@class and an\n/// \\@interface.\nstatic bool checkTypeParamListConsistency(Sema &S, ObjCTypeParamList *prevTypeParams, ObjCTypeParamList *newTypeParams, TypeParamListContext newContext) {\n  // Match up the type parameters.\n  for (unsigned i = 0, n = prevTypeParams->size(); i != n; ++i) {\n    // Check for consistency of the variance.\n    if (newTypeParam->getVariance() != prevTypeParam->getVariance()) {\n      if (newTypeParam->getVariance() == ObjCTypeParamVariance::Invariant && newContext != TypeParamListContext::Definition) {\n      } else if (prevTypeParam->getVariance() == ObjCTypeParamVariance::Invariant && !(isa<ObjCInterfaceDecl>(prevTypeParam->getDeclContext()) && cast<ObjCInterfaceDecl>(prevTypeParam->getDeclContext())->getDefinition() == prevTypeParam->getDeclContext())) {\n      } else {\n        S.Diag(prevTypeParam->getLocation(), diag::note_objc_type_param_here) << prevTypeParam->getDeclName();"},{M,937,"/// Check consistency between two Objective-C type parameter lists, e.g.,\n/// between a category/extension and an \\@interface or between an \\@class and an\n/// \\@interface.\nstatic bool checkTypeParamListConsistency(Sema &S, ObjCTypeParamList *prevTypeParams, ObjCTypeParamList *newTypeParams, TypeParamListContext newContext) {\n  // Match up the type parameters.\n  for (unsigned i = 0, n = prevTypeParams->size(); i != n; ++i) {\n    // If the new type parameter\'s bound was explicit, complain about it being\n    // different from the original.\n    if (newTypeParam->hasExplicitBound()) {\n      S.Diag(prevTypeParam->getLocation(), diag::note_objc_type_param_here) << prevTypeParam->getDeclName();"},{M,964,"/// Check consistency between two Objective-C type parameter lists, e.g.,\n/// between a category/extension and an \\@interface or between an \\@class and an\n/// \\@interface.\nstatic bool checkTypeParamListConsistency(Sema &S, ObjCTypeParamList *prevTypeParams, ObjCTypeParamList *newTypeParams, TypeParamListContext newContext) {\n  // Match up the type parameters.\n  for (unsigned i = 0, n = prevTypeParams->size(); i != n; ++i) {\n    // The new type parameter got the implicit bound of \'id\'. That\'s okay for\n    // categories and extensions (overwrite it later), but not for forward\n    // declarations and @interfaces, because those must be standalone.\n    if (newContext == TypeParamListContext::ForwardDeclaration || newContext == TypeParamListContext::Definition) {\n      S.Diag(prevTypeParam->getLocation(), diag::note_objc_type_param_here) << prevTypeParam->getDeclName();"},{I,971,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    // Objective-C object pointer types must be substitutable for the bounds.\n    if (const auto *typeArgObjC = typeArg->getAs<ObjCObjectPointerType>()) {\n      S.Diag(typeParam->getLocation(), diag::note_objc_type_param_here) << typeParam->getDeclName();"},{I,999,"/// Apply Objective-C type arguments to the given type.\nstatic QualType applyObjCTypeArgs(Sema &S, SourceLocation loc, QualType type, ArrayRef<TypeSourceInfo *> typeArgs, SourceRange typeArgsRange, bool failOnError, bool rebuilding) {\n  for (unsigned i = 0, n = typeArgs.size(); i != n; ++i) {\n    // Block pointer types are permitted for unqualified \'id\' bounds.\n    if (typeArg->isBlockPointerType()) {\n      S.Diag(typeParam->getLocation(), diag::note_objc_type_param_here) << typeParam->getDeclName();"}},
[o]={
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-generics-1.h:11:22: note: type parameter \'T\' declared here"}
}
},
},
["note_objc_unsafe_perform_selector_method_declared_here"]={
["note_objc_unsafe_perform_selector_method_declared_here"]={
[f]="method A that returns B declared here",
[b]="method A that returns B declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="method %0 that returns %1 declared here",
[h]="method %0 that returns %1 declared here",
[g]=b,
[j]=i,
[e]="method (.*?) that returns (.*?) declared here",
[k]="method (.*?) that returns (.*?) declared here",
[d]=a,
[l]=a,
[c]=o,
[c]=p,
[m]={"0e23c61c8755",1488815914,"[Sema][ObjC] Warn about \'performSelector\' calls with selectors"},
[m]={"0e23c61c8755",1488815914,"[Sema][ObjC] Warn about \'performSelector\' calls with selectors"},
[n]={{s,2536,"static void checkFoundationAPI(Sema &S, SourceLocation Loc, const ObjCMethodDecl *Method, ArrayRef<Expr *> Args, QualType ReceiverType, bool IsClassObjectCall) {\n  if (Ret->isRecordType() || Ret->isVectorType() || Ret->isExtVectorType()) {\n    S.Diag(ImpliedMethod->getBeginLoc(), diag::note_objc_unsafe_perform_selector_method_declared_here) << ImpliedMethod->getSelector() << Ret;"}}
[n]={{t,2536,"static void checkFoundationAPI(Sema &S, SourceLocation Loc, const ObjCMethodDecl *Method, ArrayRef<Expr *> Args, QualType ReceiverType, bool IsClassObjectCall) {\n  if (Ret->isRecordType() || Ret->isVectorType() || Ret->isExtVectorType()) {\n    S.Diag(ImpliedMethod->getBeginLoc(), diag::note_objc_unsafe_perform_selector_method_declared_here) << ImpliedMethod->getSelector() << Ret;"}},
[o]={
["clang/test/SemaObjC/unsafe-perform-selector.m"]={"clang/test/SemaObjC/unsafe-perform-selector.m:45:1: note: method \'returnsStruct\' that returns \'Rectangle\' declared here","clang/test/SemaObjC/unsafe-perform-selector.m:45:1: note: method \'returnsStruct\' that returns \'Rectangle\' declared here","clang/test/SemaObjC/unsafe-perform-selector.m:36:1: note: method \'returnsUnion\' that returns \'Union\' declared here","clang/test/SemaObjC/unsafe-perform-selector.m:29:1: note: method \'returnsStruct2\' that returns \'struct Struct\' declared here","clang/test/SemaObjC/unsafe-perform-selector.m:52:1: note: method \'returnsStructClass\' that returns \'Rectangle\' declared here","clang/test/SemaObjC/unsafe-perform-selector.m:79:1: note: method \'returnsSubStructExt\' that returns \'struct Struct\' declared here","clang/test/SemaObjC/unsafe-perform-selector.m:84:1: note: method \'returnsSubStructImpl\' that returns \'struct Struct\' declared here","clang/test/SemaObjC/unsafe-perform-selector.m:45:1: note: method \'returnsStruct\' that returns \'Rectangle\' declared here","clang/test/SemaObjC/unsafe-perform-selector.m:36:1: note: method \'returnsUnion\' that returns \'Union\' declared here","clang/test/SemaObjC/unsafe-perform-selector.m:100:1: note: method \'returnsSubStructClassImpl\' that returns \'struct Struct\' declared here","clang/test/SemaObjC/unsafe-perform-selector.m:52:1: note: method \'returnsStructClass\' that returns \'Rectangle\' declared here","clang/test/SemaObjC/unsafe-perform-selector.m:45:1: note: method \'returnsStruct\' that returns \'Rectangle\' declared here","clang/test/SemaObjC/unsafe-perform-selector.m:49:1: note: method \'returnsExtVector\' that returns \'float3\' (vector of 3 \'float\' values) declared here","clang/test/SemaObjC/unsafe-perform-selector.m:50:1: note: method \'returnsVector\' that returns \'int4\' (vector of 4 \'int\' values) declared here"}
}
},
},
["note_odr_base"]={
["note_odr_base"]={
[f]="class has base type A",
[b]="class has base type A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="class has base type %0",
[h]="class has base type %0",
[g]=b,
[j]=i,
[e]="class has base type (.*?)",
[k]="class has base type (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={Gb,1265916115,Fb},
[m]={dc,1265916115,Xb},
[n]={{v,1592,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      // Check the base classes.\n      for (CXXRecordDecl::base_class_iterator Base1 = D1CXX->bases_begin(), BaseEnd1 = D1CXX->bases_end(), Base2 = D2CXX->bases_begin(); Base1 != BaseEnd1; ++Base1, ++Base2) {\n        if (!IsStructurallyEquivalent(Context, Base1->getType(), Base2->getType())) {\n          if (Context.Complain) {\n            Context.Diag2(Base2->getBeginLoc(), diag::note_odr_base) << Base2->getType() << Base2->getSourceRange();"},{v,1594,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      // Check the base classes.\n      for (CXXRecordDecl::base_class_iterator Base1 = D1CXX->bases_begin(), BaseEnd1 = D1CXX->bases_end(), Base2 = D2CXX->bases_begin(); Base1 != BaseEnd1; ++Base1, ++Base2) {\n        if (!IsStructurallyEquivalent(Context, Base1->getType(), Base2->getType())) {\n          if (Context.Complain) {\n            Context.Diag1(Base1->getBeginLoc(), diag::note_odr_base) << Base1->getType() << Base1->getSourceRange();"},{v,1609,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      // Check the base classes.\n      for (CXXRecordDecl::base_class_iterator Base1 = D1CXX->bases_begin(), BaseEnd1 = D1CXX->bases_end(), Base2 = D2CXX->bases_begin(); Base1 != BaseEnd1; ++Base1, ++Base2) {\n        // Check virtual vs. non-virtual inheritance mismatch.\n        if (Base1->isVirtual() != Base2->isVirtual()) {\n          if (Context.Complain) {\n            Context.Diag1(Base1->getBeginLoc(), diag::note_odr_base) << Base1->isVirtual() << Base1->getSourceRange();"},{v,1665,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n    } else if (D1CXX->getNumBases() > 0) {\n      if (Context.Complain) {\n        Context.Diag1(Base1->getBeginLoc(), diag::note_odr_base) << Base1->getType() << Base1->getSourceRange();"}}
[n]={{z,1592,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      // Check the base classes.\n      for (CXXRecordDecl::base_class_iterator Base1 = D1CXX->bases_begin(), BaseEnd1 = D1CXX->bases_end(), Base2 = D2CXX->bases_begin(); Base1 != BaseEnd1; ++Base1, ++Base2) {\n        if (!IsStructurallyEquivalent(Context, Base1->getType(), Base2->getType())) {\n          if (Context.Complain) {\n            Context.Diag2(Base2->getBeginLoc(), diag::note_odr_base) << Base2->getType() << Base2->getSourceRange();"},{z,1594,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      // Check the base classes.\n      for (CXXRecordDecl::base_class_iterator Base1 = D1CXX->bases_begin(), BaseEnd1 = D1CXX->bases_end(), Base2 = D2CXX->bases_begin(); Base1 != BaseEnd1; ++Base1, ++Base2) {\n        if (!IsStructurallyEquivalent(Context, Base1->getType(), Base2->getType())) {\n          if (Context.Complain) {\n            Context.Diag1(Base1->getBeginLoc(), diag::note_odr_base) << Base1->getType() << Base1->getSourceRange();"},{z,1609,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      // Check the base classes.\n      for (CXXRecordDecl::base_class_iterator Base1 = D1CXX->bases_begin(), BaseEnd1 = D1CXX->bases_end(), Base2 = D2CXX->bases_begin(); Base1 != BaseEnd1; ++Base1, ++Base2) {\n        // Check virtual vs. non-virtual inheritance mismatch.\n        if (Base1->isVirtual() != Base2->isVirtual()) {\n          if (Context.Complain) {\n            Context.Diag1(Base1->getBeginLoc(), diag::note_odr_base) << Base1->isVirtual() << Base1->getSourceRange();"},{z,1665,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n    } else if (D1CXX->getNumBases() > 0) {\n      if (Context.Complain) {\n        Context.Diag1(Base1->getBeginLoc(), diag::note_odr_base) << Base1->getType() << Base1->getSourceRange();"}}
},
},
["note_odr_enumerator"]={
["note_odr_enumerator"]={
[f]="enumerator A with value B here",
[b]="enumerator A with value B here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="enumerator %0 with value %1 here",
[h]="enumerator %0 with value %1 here",
[g]=b,
[j]=i,
[e]="enumerator (.*?) with value (.*?) here",
[k]="enumerator (.*?) with value (.*?) here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"98c101833744",1266013059,"Implement AST importing and merging for enumeration types and"},
[m]={"98c101833744",1266013059,"Implement AST importing and merging for enumeration types and"},
[n]={{v,1757,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  for (EnumDecl::enumerator_iterator EC1 = D1->enumerator_begin(), EC1End = D1->enumerator_end(); EC1 != EC1End; ++EC1, ++EC2) {\n    if (EC2 == EC2End) {\n      if (Context.Complain) {\n        Context.Diag1(EC1->getLocation(), diag::note_odr_enumerator) << EC1->getDeclName() << toString(EC1->getInitVal(), 10);"},{v,1773,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  for (EnumDecl::enumerator_iterator EC1 = D1->enumerator_begin(), EC1End = D1->enumerator_end(); EC1 != EC1End; ++EC1, ++EC2) {\n    if (!llvm::APSInt::isSameValue(Val1, Val2) || !IsStructurallyEquivalent(EC1->getIdentifier(), EC2->getIdentifier())) {\n      if (Context.Complain) {\n        Context.Diag2(EC2->getLocation(), diag::note_odr_enumerator) << EC2->getDeclName() << toString(EC2->getInitVal(), 10);"},{v,1775,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  for (EnumDecl::enumerator_iterator EC1 = D1->enumerator_begin(), EC1End = D1->enumerator_end(); EC1 != EC1End; ++EC1, ++EC2) {\n    if (!llvm::APSInt::isSameValue(Val1, Val2) || !IsStructurallyEquivalent(EC1->getIdentifier(), EC2->getIdentifier())) {\n      if (Context.Complain) {\n        Context.Diag1(EC1->getLocation(), diag::note_odr_enumerator) << EC1->getDeclName() << toString(EC1->getInitVal(), 10);"},{v,1787,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  if (EC2 != EC2End) {\n    if (Context.Complain) {\n      Context.Diag2(EC2->getLocation(), diag::note_odr_enumerator) << EC2->getDeclName() << toString(EC2->getInitVal(), 10);"}}
[n]={{z,1757,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  for (EnumDecl::enumerator_iterator EC1 = D1->enumerator_begin(), EC1End = D1->enumerator_end(); EC1 != EC1End; ++EC1, ++EC2) {\n    if (EC2 == EC2End) {\n      if (Context.Complain) {\n        Context.Diag1(EC1->getLocation(), diag::note_odr_enumerator) << EC1->getDeclName() << toString(EC1->getInitVal(), 10);"},{z,1773,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  for (EnumDecl::enumerator_iterator EC1 = D1->enumerator_begin(), EC1End = D1->enumerator_end(); EC1 != EC1End; ++EC1, ++EC2) {\n    if (!llvm::APSInt::isSameValue(Val1, Val2) || !IsStructurallyEquivalent(EC1->getIdentifier(), EC2->getIdentifier())) {\n      if (Context.Complain) {\n        Context.Diag2(EC2->getLocation(), diag::note_odr_enumerator) << EC2->getDeclName() << toString(EC2->getInitVal(), 10);"},{z,1775,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  for (EnumDecl::enumerator_iterator EC1 = D1->enumerator_begin(), EC1End = D1->enumerator_end(); EC1 != EC1End; ++EC1, ++EC2) {\n    if (!llvm::APSInt::isSameValue(Val1, Val2) || !IsStructurallyEquivalent(EC1->getIdentifier(), EC2->getIdentifier())) {\n      if (Context.Complain) {\n        Context.Diag1(EC1->getLocation(), diag::note_odr_enumerator) << EC1->getDeclName() << toString(EC1->getInitVal(), 10);"},{z,1787,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  if (EC2 != EC2End) {\n    if (Context.Complain) {\n      Context.Diag2(EC2->getLocation(), diag::note_odr_enumerator) << EC2->getDeclName() << toString(EC2->getInitVal(), 10);"}},
[o]={
["clang/test/Modules/redefinition-c-tagtypes.m"]={"clang/test/Modules/redefinition-c-tagtypes.m:28:3: note: enumerator \'SND\' with value 44 here","clang/test/Modules/Inputs/F.framework/PrivateHeaders/NS.h:8:3: note: enumerator \'SND\' with value 43 here","clang/test/Modules/redefinition-c-tagtypes.m:44:3: note: enumerator \'MinXOther\' with value 55 here","clang/test/Modules/Inputs/F.framework/PrivateHeaders/NS.h:18:3: note: enumerator \'MinXOther\' with value 11 here"}
}
},
},
["note_odr_field"]={
["note_odr_field"]={
[f]="field A has type B here",
[b]="field A has type B here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="field %0 has type %1 here",
[h]="field %0 has type %1 here",
[g]=b,
[j]=i,
[e]="field (.*?) has type (.*?) here",
[k]="field (.*?) has type (.*?) here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={Gb,1265916115,Fb},
[m]={dc,1265916115,Xb},
[n]={{v,1333,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, FieldDecl *Field1, FieldDecl *Field2, QualType Owner2Type) {\n  if (!IsStructurallyEquivalent(Context, Field1->getType(), Field2->getType())) {\n    if (Context.Complain) {\n      Context.Diag2(Field2->getLocation(), diag::note_odr_field) << Field2->getDeclName() << Field2->getType();"},{v,1335,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, FieldDecl *Field1, FieldDecl *Field2, QualType Owner2Type) {\n  if (!IsStructurallyEquivalent(Context, Field1->getType(), Field2->getType())) {\n    if (Context.Complain) {\n      Context.Diag1(Field1->getLocation(), diag::note_odr_field) << Field1->getDeclName() << Field1->getType();"},{v,1686,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  for (RecordDecl::field_iterator Field1 = D1->field_begin(), Field1End = D1->field_end(); Field1 != Field1End; ++Field1, ++Field2) {\n    if (Field2 == Field2End) {\n      if (Context.Complain) {\n        Context.Diag1(Field1->getLocation(), diag::note_odr_field) << Field1->getDeclName() << Field1->getType();"},{v,1702,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (Field2 != Field2End) {\n    if (Context.Complain) {\n      Context.Diag2(Field2->getLocation(), diag::note_odr_field) << Field2->getDeclName() << Field2->getType();"}}
[n]={{z,1333,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, FieldDecl *Field1, FieldDecl *Field2, QualType Owner2Type) {\n  if (!IsStructurallyEquivalent(Context, Field1->getType(), Field2->getType())) {\n    if (Context.Complain) {\n      Context.Diag2(Field2->getLocation(), diag::note_odr_field) << Field2->getDeclName() << Field2->getType();"},{z,1335,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, FieldDecl *Field1, FieldDecl *Field2, QualType Owner2Type) {\n  if (!IsStructurallyEquivalent(Context, Field1->getType(), Field2->getType())) {\n    if (Context.Complain) {\n      Context.Diag1(Field1->getLocation(), diag::note_odr_field) << Field1->getDeclName() << Field1->getType();"},{z,1686,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  for (RecordDecl::field_iterator Field1 = D1->field_begin(), Field1End = D1->field_end(); Field1 != Field1End; ++Field1, ++Field2) {\n    if (Field2 == Field2End) {\n      if (Context.Complain) {\n        Context.Diag1(Field1->getLocation(), diag::note_odr_field) << Field1->getDeclName() << Field1->getType();"},{z,1702,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (Field2 != Field2End) {\n    if (Context.Complain) {\n      Context.Diag2(Field2->getLocation(), diag::note_odr_field) << Field2->getDeclName() << Field2->getType();"}},
[o]={
["clang/test/ASTMerge/struct/test.c"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:15:7: note: field \'field2\' has type \'int\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct2.c:12:9: note: field \'field2\' has type \'float\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:24:36: note: field \'d\' has type \'double\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct2.c:24:26: note: field \'f\' has type \'float\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:56:35: note: field \'f\' has type \'int\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct2.c:53:37: note: field \'f\' has type \'float\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:56:41: note: field \'Deeper\' has type \'struct DeeperError *\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct2.c:53:43: note: field \'Deeper\' has type \'struct DeeperError *\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:75:9: note: field \'i\' has type \'Float\' (aka \'float\') here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct2.c:72:7: note: field \'i\' has type \'int\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:131:14: note: field \'i\' has type \'long\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct2.c:128:15: note: field \'i\' has type \'float\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:132:9: note: field \'S\' has type \'struct (unnamed struct at /var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:130:7)\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct2.c:129:9: note: field \'S\' has type \'struct (unnamed struct at /var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct2.c:127:7)\' here"}
}
},
},
["note_odr_field_name"]={
["note_odr_field_name"]={
[f]="field has name A here",
[b]="field has name A here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="field has name %0 here",
[h]="field has name %0 here",
[g]=b,
[j]=i,
[e]="field has name (.*?) here",
[k]="field has name (.*?) here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"df0ee34bc252",1498867607,"[Modules] Implement ODR-like semantics for tag types in C/ObjC"},
[m]={"df0ee34bc252",1498867607,"[Modules] Implement ODR-like semantics for tag types in C/ObjC"},
[n]={{v,1318,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, FieldDecl *Field1, FieldDecl *Field2, QualType Owner2Type) {\n  if (!::IsStructurallyEquivalent(Name1, Name2)) {\n    if (Context.Complain) {\n      Context.Diag2(Field2->getLocation(), diag::note_odr_field_name) << Field2->getDeclName();"},{v,1320,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, FieldDecl *Field1, FieldDecl *Field2, QualType Owner2Type) {\n  if (!::IsStructurallyEquivalent(Name1, Name2)) {\n    if (Context.Complain) {\n      Context.Diag1(Field1->getLocation(), diag::note_odr_field_name) << Field1->getDeclName();"}}
[n]={{z,1318,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, FieldDecl *Field1, FieldDecl *Field2, QualType Owner2Type) {\n  if (!::IsStructurallyEquivalent(Name1, Name2)) {\n    if (Context.Complain) {\n      Context.Diag2(Field2->getLocation(), diag::note_odr_field_name) << Field2->getDeclName();"},{z,1320,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, FieldDecl *Field1, FieldDecl *Field2, QualType Owner2Type) {\n  if (!::IsStructurallyEquivalent(Name1, Name2)) {\n    if (Context.Complain) {\n      Context.Diag1(Field1->getLocation(), diag::note_odr_field_name) << Field1->getDeclName();"}},
[o]={
["clang/test/Modules/elaborated-type-specifier-from-hidden-module.m"]={"clang/test/Modules/elaborated-type-specifier-from-hidden-module.m:10:19: note: field has name \'y\' here","clang/test/Modules/Inputs/elaborated-type-structs.h:3:17: note: field has name \'x\' here"}
}
},
},
["note_odr_friend"]={
["note_odr_friend"]={
[f]="friend declared here",
[b]="friend declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="friend declared here",
[h]="friend declared here",
[g]=b,
[j]=i,
[e]="friend declared here",
[k]="friend declared here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"b180eebed423",1524677283,"[ASTImporter] FriendDecl importing improvements"},
[m]={"b180eebed423",1524677283,"[ASTImporter] FriendDecl importing improvements"},
[n]={{v,1628,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      for (CXXRecordDecl::friend_iterator Friend1 = D1CXX->friend_begin(), Friend1End = D1CXX->friend_end(); Friend1 != Friend1End; ++Friend1, ++Friend2) {\n        if (Friend2 == Friend2End) {\n          if (Context.Complain) {\n            Context.Diag1((*Friend1)->getFriendLoc(), diag::note_odr_friend);"},{v,1640,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      for (CXXRecordDecl::friend_iterator Friend1 = D1CXX->friend_begin(), Friend1End = D1CXX->friend_end(); Friend1 != Friend1End; ++Friend1, ++Friend2) {\n        if (!IsStructurallyEquivalent(Context, *Friend1, *Friend2)) {\n          if (Context.Complain) {\n            Context.Diag1((*Friend1)->getFriendLoc(), diag::note_odr_friend);"},{v,1641,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      for (CXXRecordDecl::friend_iterator Friend1 = D1CXX->friend_begin(), Friend1End = D1CXX->friend_end(); Friend1 != Friend1End; ++Friend1, ++Friend2) {\n        if (!IsStructurallyEquivalent(Context, *Friend1, *Friend2)) {\n          if (Context.Complain) {\n            Context.Diag2((*Friend2)->getFriendLoc(), diag::note_odr_friend);"},{v,1653,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      if (Friend2 != Friend2End) {\n        if (Context.Complain) {\n          Context.Diag2((*Friend2)->getFriendLoc(), diag::note_odr_friend);"}}
[n]={{z,1628,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      for (CXXRecordDecl::friend_iterator Friend1 = D1CXX->friend_begin(), Friend1End = D1CXX->friend_end(); Friend1 != Friend1End; ++Friend1, ++Friend2) {\n        if (Friend2 == Friend2End) {\n          if (Context.Complain) {\n            Context.Diag1((*Friend1)->getFriendLoc(), diag::note_odr_friend);"},{z,1640,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      for (CXXRecordDecl::friend_iterator Friend1 = D1CXX->friend_begin(), Friend1End = D1CXX->friend_end(); Friend1 != Friend1End; ++Friend1, ++Friend2) {\n        if (!IsStructurallyEquivalent(Context, *Friend1, *Friend2)) {\n          if (Context.Complain) {\n            Context.Diag1((*Friend1)->getFriendLoc(), diag::note_odr_friend);"},{z,1641,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      for (CXXRecordDecl::friend_iterator Friend1 = D1CXX->friend_begin(), Friend1End = D1CXX->friend_end(); Friend1 != Friend1End; ++Friend1, ++Friend2) {\n        if (!IsStructurallyEquivalent(Context, *Friend1, *Friend2)) {\n          if (Context.Complain) {\n            Context.Diag2((*Friend2)->getFriendLoc(), diag::note_odr_friend);"},{z,1653,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      if (Friend2 != Friend2End) {\n        if (Context.Complain) {\n          Context.Diag2((*Friend2)->getFriendLoc(), diag::note_odr_friend);"}},
[o]={
["clang/test/ASTMerge/class/test.cpp"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/class/Inputs/class1.cpp:46:3: note: friend declared here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/class/Inputs/class1.cpp:39:3: note: friend declared here"}
}
},
},
["note_odr_missing_base"]={
["note_odr_missing_base"]={
[f]="no corresponding base class here",
[b]="no corresponding base class here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="no corresponding base class here",
[h]="no corresponding base class here",
[g]=b,
[j]=i,
[e]="no corresponding base class here",
[k]="no corresponding base class here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={Gb,1265916115,Fb},
[m]={dc,1265916115,Xb},
[n]={{v,1667,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n    } else if (D1CXX->getNumBases() > 0) {\n      if (Context.Complain) {\n        Context.Diag2(D2->getLocation(), diag::note_odr_missing_base);"}}
[n]={{z,1667,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n    } else if (D1CXX->getNumBases() > 0) {\n      if (Context.Complain) {\n        Context.Diag2(D2->getLocation(), diag::note_odr_missing_base);"}}
},
},
["note_odr_missing_enumerator"]={
["note_odr_missing_enumerator"]={
[f]="no corresponding enumerator here",
[b]="no corresponding enumerator here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="no corresponding enumerator here",
[h]="no corresponding enumerator here",
[g]=b,
[j]=i,
[e]="no corresponding enumerator here",
[k]="no corresponding enumerator here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"98c101833744",1266013059,"Implement AST importing and merging for enumeration types and"},
[m]={"98c101833744",1266013059,"Implement AST importing and merging for enumeration types and"},
[n]={{v,1759,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  for (EnumDecl::enumerator_iterator EC1 = D1->enumerator_begin(), EC1End = D1->enumerator_end(); EC1 != EC1End; ++EC1, ++EC2) {\n    if (EC2 == EC2End) {\n      if (Context.Complain) {\n        Context.Diag2(D2->getLocation(), diag::note_odr_missing_enumerator);"},{v,1789,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  if (EC2 != EC2End) {\n    if (Context.Complain) {\n      Context.Diag1(D1->getLocation(), diag::note_odr_missing_enumerator);"}}
[n]={{z,1759,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  for (EnumDecl::enumerator_iterator EC1 = D1->enumerator_begin(), EC1End = D1->enumerator_end(); EC1 != EC1End; ++EC1, ++EC2) {\n    if (EC2 == EC2End) {\n      if (Context.Complain) {\n        Context.Diag2(D2->getLocation(), diag::note_odr_missing_enumerator);"},{z,1789,"/// Determine structural equivalence of two enums.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, EnumDecl *D1, EnumDecl *D2) {\n  if (EC2 != EC2End) {\n    if (Context.Complain) {\n      Context.Diag1(D1->getLocation(), diag::note_odr_missing_enumerator);"}},
[o]={
["clang/test/ASTMerge/enum/test.c"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/enum/Inputs/enum2.c:23:6: note: no corresponding enumerator here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/enum/Inputs/enum1.c:30:6: note: no corresponding enumerator here"}
}
},
},
["note_odr_missing_field"]={
["note_odr_missing_field"]={
[f]="no corresponding field here",
[b]="no corresponding field here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="no corresponding field here",
[h]="no corresponding field here",
[g]=b,
[j]=i,
[e]="no corresponding field here",
[k]="no corresponding field here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={Gb,1265916115,Fb},
[m]={dc,1265916115,Xb},
[n]={{v,1688,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  for (RecordDecl::field_iterator Field1 = D1->field_begin(), Field1End = D1->field_end(); Field1 != Field1End; ++Field1, ++Field2) {\n    if (Field2 == Field2End) {\n      if (Context.Complain) {\n        Context.Diag2(D2->getLocation(), diag::note_odr_missing_field);"},{v,1704,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (Field2 != Field2End) {\n    if (Context.Complain) {\n      Context.Diag1(D1->getLocation(), diag::note_odr_missing_field);"}}
[n]={{z,1688,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  for (RecordDecl::field_iterator Field1 = D1->field_begin(), Field1End = D1->field_end(); Field1 != Field1End; ++Field1, ++Field2) {\n    if (Field2 == Field2End) {\n      if (Context.Complain) {\n        Context.Diag2(D2->getLocation(), diag::note_odr_missing_field);"},{z,1704,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (Field2 != Field2End) {\n    if (Context.Complain) {\n      Context.Diag1(D1->getLocation(), diag::note_odr_missing_field);"}},
[o]={
["clang/test/ASTMerge/struct/test.c"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct2.c:21:8: note: no corresponding field here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct1.c:27:8: note: no corresponding field here"}
}
},
},
["note_odr_missing_friend"]={
["note_odr_missing_friend"]={
[f]="no corresponding friend here",
[b]="no corresponding friend here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="no corresponding friend here",
[h]="no corresponding friend here",
[g]=b,
[j]=i,
[e]="no corresponding friend here",
[k]="no corresponding friend here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"b180eebed423",1524677283,"[ASTImporter] FriendDecl importing improvements"},
[m]={"b180eebed423",1524677283,"[ASTImporter] FriendDecl importing improvements"},
[n]={{v,1629,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      for (CXXRecordDecl::friend_iterator Friend1 = D1CXX->friend_begin(), Friend1End = D1CXX->friend_end(); Friend1 != Friend1End; ++Friend1, ++Friend2) {\n        if (Friend2 == Friend2End) {\n          if (Context.Complain) {\n            Context.Diag2(D2->getLocation(), diag::note_odr_missing_friend);"},{v,1654,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      if (Friend2 != Friend2End) {\n        if (Context.Complain) {\n          Context.Diag1(D1->getLocation(), diag::note_odr_missing_friend);"}}
[n]={{z,1629,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      for (CXXRecordDecl::friend_iterator Friend1 = D1CXX->friend_begin(), Friend1End = D1CXX->friend_end(); Friend1 != Friend1End; ++Friend1, ++Friend2) {\n        if (Friend2 == Friend2End) {\n          if (Context.Complain) {\n            Context.Diag2(D2->getLocation(), diag::note_odr_missing_friend);"},{z,1654,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      if (Friend2 != Friend2End) {\n        if (Context.Complain) {\n          Context.Diag1(D1->getLocation(), diag::note_odr_missing_friend);"}},
[o]={
["clang/test/ASTMerge/class/test.cpp"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/class/Inputs/class2.cpp:36:8: note: no corresponding friend here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/class/Inputs/class2.cpp:30:8: note: no corresponding friend here"}
}
},
},
["note_odr_number_of_bases"]={
["note_odr_number_of_bases"]={
[f]="class has A base class",
[b]="class has A base class",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="class has %0 base %plural{1:class|:classes}0",
[h]="class has %0 base %plural{1:class|:classes}0",
[g]=b,
[j]=i,
[e]="class has (.*?) base (?:class|classes)",
[k]="class has (.*?) base (?:class|classes)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={Gb,1265916115,Fb},
[m]={dc,1265916115,Xb},
[n]={{v,1572,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      if (D1CXX->getNumBases() != D2CXX->getNumBases()) {\n        if (Context.Complain) {\n          Context.Diag2(D2->getLocation(), diag::note_odr_number_of_bases) << D2CXX->getNumBases();"},{v,1574,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      if (D1CXX->getNumBases() != D2CXX->getNumBases()) {\n        if (Context.Complain) {\n          Context.Diag1(D1->getLocation(), diag::note_odr_number_of_bases) << D1CXX->getNumBases();"}}
[n]={{z,1572,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      if (D1CXX->getNumBases() != D2CXX->getNumBases()) {\n        if (Context.Complain) {\n          Context.Diag2(D2->getLocation(), diag::note_odr_number_of_bases) << D2CXX->getNumBases();"},{z,1574,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      if (D1CXX->getNumBases() != D2CXX->getNumBases()) {\n        if (Context.Complain) {\n          Context.Diag1(D1->getLocation(), diag::note_odr_number_of_bases) << D1CXX->getNumBases();"}}
},
},
["note_odr_objc_method_here"]={
["note_odr_objc_method_here"]={
[f]="... method A also declared here",
[b]="... method A also declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{class|instance}0 method %1 also declared here",
[h]="%select{class|instance}0 method %1 also declared here",
[g]=b,
[j]=i,
[e]="(?:class|instance) method (.*?) also declared here",
[k]="(?:class|instance) method (.*?) also declared here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"43f54796ab42",1266372767,"Implement AST importing and checking for Objective-C method declarations."},
[m]={"43f54796ab42",1266372767,"Implement AST importing and checking for Objective-C method declarations."},
[n]={{F,4495,"ExpectedDecl ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {\n  for (auto *FoundDecl : FoundDecls) {\n    if (auto *FoundMethod = dyn_cast<ObjCMethodDecl>(FoundDecl)) {\n      // Check return types.\n      if (!Importer.IsStructurallyEquivalent(D->getReturnType(), FoundMethod->getReturnType())) {\n        Importer.ToDiag(FoundMethod->getLocation(), diag::note_odr_objc_method_here) << D->isInstanceMethod() << Name;"},{F,4507,"ExpectedDecl ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {\n  for (auto *FoundDecl : FoundDecls) {\n    if (auto *FoundMethod = dyn_cast<ObjCMethodDecl>(FoundDecl)) {\n      // Check the number of parameters.\n      if (D->param_size() != FoundMethod->param_size()) {\n        Importer.ToDiag(FoundMethod->getLocation(), diag::note_odr_objc_method_here) << D->isInstanceMethod() << Name;"},{F,4536,"ExpectedDecl ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {\n  for (auto *FoundDecl : FoundDecls) {\n    if (auto *FoundMethod = dyn_cast<ObjCMethodDecl>(FoundDecl)) {\n      // Check variadic/non-variadic.\n      // Check the number of parameters.\n      if (D->isVariadic() != FoundMethod->isVariadic()) {\n        Importer.ToDiag(FoundMethod->getLocation(), diag::note_odr_objc_method_here) << D->isInstanceMethod() << Name;"}}
[n]={{O,4495,"ExpectedDecl ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {\n  for (auto *FoundDecl : FoundDecls) {\n    if (auto *FoundMethod = dyn_cast<ObjCMethodDecl>(FoundDecl)) {\n      // Check return types.\n      if (!Importer.IsStructurallyEquivalent(D->getReturnType(), FoundMethod->getReturnType())) {\n        Importer.ToDiag(FoundMethod->getLocation(), diag::note_odr_objc_method_here) << D->isInstanceMethod() << Name;"},{O,4507,"ExpectedDecl ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {\n  for (auto *FoundDecl : FoundDecls) {\n    if (auto *FoundMethod = dyn_cast<ObjCMethodDecl>(FoundDecl)) {\n      // Check the number of parameters.\n      if (D->param_size() != FoundMethod->param_size()) {\n        Importer.ToDiag(FoundMethod->getLocation(), diag::note_odr_objc_method_here) << D->isInstanceMethod() << Name;"},{O,4536,"ExpectedDecl ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {\n  for (auto *FoundDecl : FoundDecls) {\n    if (auto *FoundMethod = dyn_cast<ObjCMethodDecl>(FoundDecl)) {\n      // Check variadic/non-variadic.\n      // Check the number of parameters.\n      if (D->isVariadic() != FoundMethod->isVariadic()) {\n        Importer.ToDiag(FoundMethod->getLocation(), diag::note_odr_objc_method_here) << D->isInstanceMethod() << Name;"}},
[o]={
["clang/test/ASTMerge/property/test.m"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/property/Inputs/property1.m:10:28: note: instance method \'Prop1\' also declared here"}
}
},
},
["note_odr_objc_missing_superclass"]={
["note_odr_objc_missing_superclass"]={
[f]="no corresponding superclass here",
[b]="no corresponding superclass here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="no corresponding superclass here",
[h]="no corresponding superclass here",
[g]=b,
[j]=i,
[e]="no corresponding superclass here",
[k]="no corresponding superclass here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"7244b0bb860b",1266366870,"Implement AST importing of Objective-C instance variables. "},
[m]={"7244b0bb860b",1266366870,"Implement AST importing of Objective-C instance variables. "},
[n]={{F,5189,"Error ASTNodeImporter::ImportDefinition(ObjCInterfaceDecl *From, ObjCInterfaceDecl *To, ImportDefinitionKind Kind) {\n  if (To->getDefinition()) {\n    if ((bool)FromSuper != (bool)ToSuper || (FromSuper && !declaresSameEntity(FromSuper, ToSuper))) {\n      if (ToSuper)\n      else\n        Importer.ToDiag(To->getLocation(), diag::note_odr_objc_missing_superclass);"},{F,5196,"Error ASTNodeImporter::ImportDefinition(ObjCInterfaceDecl *From, ObjCInterfaceDecl *To, ImportDefinitionKind Kind) {\n  if (To->getDefinition()) {\n    if ((bool)FromSuper != (bool)ToSuper || (FromSuper && !declaresSameEntity(FromSuper, ToSuper))) {\n      if (From->getSuperClass())\n      else\n        Importer.FromDiag(From->getLocation(), diag::note_odr_objc_missing_superclass);"},{F,5458,"ExpectedDecl ASTNodeImporter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {\n  if (!Impl) {\n  } else {\n    // Verify that the existing @implementation has the same superclass.\n    if ((Super && !Impl->getSuperClass()) || (!Super && Impl->getSuperClass()) || (Super && Impl->getSuperClass() && !declaresSameEntity(Super->getCanonicalDecl(), Impl->getSuperClass()))) {\n      // FIXME: It would be nice to have the location of the superclass\n      // below.\n      if (Impl->getSuperClass())\n      else\n        Importer.ToDiag(Impl->getLocation(), diag::note_odr_objc_missing_superclass);"},{F,5465,"ExpectedDecl ASTNodeImporter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {\n  if (!Impl) {\n  } else {\n    // Verify that the existing @implementation has the same superclass.\n    if ((Super && !Impl->getSuperClass()) || (!Super && Impl->getSuperClass()) || (Super && Impl->getSuperClass() && !declaresSameEntity(Super->getCanonicalDecl(), Impl->getSuperClass()))) {\n      if (D->getSuperClass())\n      else\n        Importer.FromDiag(D->getLocation(), diag::note_odr_objc_missing_superclass);"}}
[n]={{O,5189,"Error ASTNodeImporter::ImportDefinition(ObjCInterfaceDecl *From, ObjCInterfaceDecl *To, ImportDefinitionKind Kind) {\n  if (To->getDefinition()) {\n    if ((bool)FromSuper != (bool)ToSuper || (FromSuper && !declaresSameEntity(FromSuper, ToSuper))) {\n      if (ToSuper)\n      else\n        Importer.ToDiag(To->getLocation(), diag::note_odr_objc_missing_superclass);"},{O,5196,"Error ASTNodeImporter::ImportDefinition(ObjCInterfaceDecl *From, ObjCInterfaceDecl *To, ImportDefinitionKind Kind) {\n  if (To->getDefinition()) {\n    if ((bool)FromSuper != (bool)ToSuper || (FromSuper && !declaresSameEntity(FromSuper, ToSuper))) {\n      if (From->getSuperClass())\n      else\n        Importer.FromDiag(From->getLocation(), diag::note_odr_objc_missing_superclass);"},{O,5458,"ExpectedDecl ASTNodeImporter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {\n  if (!Impl) {\n  } else {\n    // Verify that the existing @implementation has the same superclass.\n    if ((Super && !Impl->getSuperClass()) || (!Super && Impl->getSuperClass()) || (Super && Impl->getSuperClass() && !declaresSameEntity(Super->getCanonicalDecl(), Impl->getSuperClass()))) {\n      // FIXME: It would be nice to have the location of the superclass\n      // below.\n      if (Impl->getSuperClass())\n      else\n        Importer.ToDiag(Impl->getLocation(), diag::note_odr_objc_missing_superclass);"},{O,5465,"ExpectedDecl ASTNodeImporter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {\n  if (!Impl) {\n  } else {\n    // Verify that the existing @implementation has the same superclass.\n    if ((Super && !Impl->getSuperClass()) || (!Super && Impl->getSuperClass()) || (Super && Impl->getSuperClass() && !declaresSameEntity(Super->getCanonicalDecl(), Impl->getSuperClass()))) {\n      if (D->getSuperClass())\n      else\n        Importer.FromDiag(D->getLocation(), diag::note_odr_objc_missing_superclass);"}}
},
},
["note_odr_objc_property_impl_kind"]={
["note_odr_objc_property_impl_kind"]={
[f]="property A is implemented with ... here",
[b]="property A is implemented with ... here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="property %0 is implemented with %select{@synthesize|@dynamic}1 here",
[h]="property %0 is implemented with %select{@synthesize|@dynamic}1 here",
[g]=b,
[j]=i,
[e]="property (.*?) is implemented with (?:@synthesize|@dynamic) here",
[k]="property (.*?) is implemented with (?:@synthesize|@dynamic) here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"14a49e2fbe1c",1291746723,"Implement AST import for Objective-C property implementations"},
[m]={"14a49e2fbe1c",1291746723,"Implement AST import for Objective-C property implementations"},
[n]={{F,5607,"ExpectedDecl ASTNodeImporter::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D) {\n  if (!ToImpl) {\n  } else {\n    // Check that we have the same kind of property implementation (@synthesize\n    // vs. @dynamic).\n    if (D->getPropertyImplementation() != ToImpl->getPropertyImplementation()) {\n      Importer.FromDiag(D->getLocation(), diag::note_odr_objc_property_impl_kind) << D->getPropertyDecl()->getDeclName() << (D->getPropertyImplementation() == ObjCPropertyImplDecl::Dynamic);"}}
[n]={{O,5607,"ExpectedDecl ASTNodeImporter::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D) {\n  if (!ToImpl) {\n  } else {\n    // Check that we have the same kind of property implementation (@synthesize\n    // vs. @dynamic).\n    if (D->getPropertyImplementation() != ToImpl->getPropertyImplementation()) {\n      Importer.FromDiag(D->getLocation(), diag::note_odr_objc_property_impl_kind) << D->getPropertyDecl()->getDeclName() << (D->getPropertyImplementation() == ObjCPropertyImplDecl::Dynamic);"}},
[o]={
["clang/test/ASTMerge/property/test.m"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/property/Inputs/property2.m:31:13: note: property \'Prop3\' is implemented with @synthesize here"}
}
},
},
["note_odr_objc_superclass"]={
["note_odr_objc_superclass"]={
[f]="inherits from superclass A here",
[b]="inherits from superclass A here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="inherits from superclass %0 here",
[h]="inherits from superclass %0 here",
[g]=b,
[j]=i,
[e]="inherits from superclass (.*?) here",
[k]="inherits from superclass (.*?) here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"7244b0bb860b",1266366870,"Implement AST importing of Objective-C instance variables. "},
[m]={"7244b0bb860b",1266366870,"Implement AST importing of Objective-C instance variables. "},
[n]={{F,5185,"Error ASTNodeImporter::ImportDefinition(ObjCInterfaceDecl *From, ObjCInterfaceDecl *To, ImportDefinitionKind Kind) {\n  if (To->getDefinition()) {\n    if ((bool)FromSuper != (bool)ToSuper || (FromSuper && !declaresSameEntity(FromSuper, ToSuper))) {\n      if (ToSuper)\n        Importer.ToDiag(To->getSuperClassLoc(), diag::note_odr_objc_superclass) << To->getSuperClass()->getDeclName();"},{F,5192,"Error ASTNodeImporter::ImportDefinition(ObjCInterfaceDecl *From, ObjCInterfaceDecl *To, ImportDefinitionKind Kind) {\n  if (To->getDefinition()) {\n    if ((bool)FromSuper != (bool)ToSuper || (FromSuper && !declaresSameEntity(FromSuper, ToSuper))) {\n      if (From->getSuperClass())\n        Importer.FromDiag(From->getSuperClassLoc(), diag::note_odr_objc_superclass) << From->getSuperClass()->getDeclName();"},{F,5454,"ExpectedDecl ASTNodeImporter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {\n  if (!Impl) {\n  } else {\n    // Verify that the existing @implementation has the same superclass.\n    if ((Super && !Impl->getSuperClass()) || (!Super && Impl->getSuperClass()) || (Super && Impl->getSuperClass() && !declaresSameEntity(Super->getCanonicalDecl(), Impl->getSuperClass()))) {\n      // FIXME: It would be nice to have the location of the superclass\n      // below.\n      if (Impl->getSuperClass())\n        Importer.ToDiag(Impl->getLocation(), diag::note_odr_objc_superclass) << Impl->getSuperClass()->getDeclName();"},{F,5461,"ExpectedDecl ASTNodeImporter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {\n  if (!Impl) {\n  } else {\n    // Verify that the existing @implementation has the same superclass.\n    if ((Super && !Impl->getSuperClass()) || (!Super && Impl->getSuperClass()) || (Super && Impl->getSuperClass() && !declaresSameEntity(Super->getCanonicalDecl(), Impl->getSuperClass()))) {\n      if (D->getSuperClass())\n        Importer.FromDiag(D->getLocation(), diag::note_odr_objc_superclass) << D->getSuperClass()->getDeclName();"}}
[n]={{O,5185,"Error ASTNodeImporter::ImportDefinition(ObjCInterfaceDecl *From, ObjCInterfaceDecl *To, ImportDefinitionKind Kind) {\n  if (To->getDefinition()) {\n    if ((bool)FromSuper != (bool)ToSuper || (FromSuper && !declaresSameEntity(FromSuper, ToSuper))) {\n      if (ToSuper)\n        Importer.ToDiag(To->getSuperClassLoc(), diag::note_odr_objc_superclass) << To->getSuperClass()->getDeclName();"},{O,5192,"Error ASTNodeImporter::ImportDefinition(ObjCInterfaceDecl *From, ObjCInterfaceDecl *To, ImportDefinitionKind Kind) {\n  if (To->getDefinition()) {\n    if ((bool)FromSuper != (bool)ToSuper || (FromSuper && !declaresSameEntity(FromSuper, ToSuper))) {\n      if (From->getSuperClass())\n        Importer.FromDiag(From->getSuperClassLoc(), diag::note_odr_objc_superclass) << From->getSuperClass()->getDeclName();"},{O,5454,"ExpectedDecl ASTNodeImporter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {\n  if (!Impl) {\n  } else {\n    // Verify that the existing @implementation has the same superclass.\n    if ((Super && !Impl->getSuperClass()) || (!Super && Impl->getSuperClass()) || (Super && Impl->getSuperClass() && !declaresSameEntity(Super->getCanonicalDecl(), Impl->getSuperClass()))) {\n      // FIXME: It would be nice to have the location of the superclass\n      // below.\n      if (Impl->getSuperClass())\n        Importer.ToDiag(Impl->getLocation(), diag::note_odr_objc_superclass) << Impl->getSuperClass()->getDeclName();"},{O,5461,"ExpectedDecl ASTNodeImporter::VisitObjCImplementationDecl(ObjCImplementationDecl *D) {\n  if (!Impl) {\n  } else {\n    // Verify that the existing @implementation has the same superclass.\n    if ((Super && !Impl->getSuperClass()) || (!Super && Impl->getSuperClass()) || (Super && Impl->getSuperClass() && !declaresSameEntity(Super->getCanonicalDecl(), Impl->getSuperClass()))) {\n      if (D->getSuperClass())\n        Importer.FromDiag(D->getLocation(), diag::note_odr_objc_superclass) << D->getSuperClass()->getDeclName();"}},
[o]={
["clang/test/ASTMerge/interface/test.m"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/interface/Inputs/interface1.m:21:17: note: inherits from superclass \'I2\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/interface/Inputs/interface2.m:21:17: note: inherits from superclass \'I1\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/interface/Inputs/interface1.m:100:23: note: inherits from superclass \'I12\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/interface/Inputs/interface2.m:99:23: note: inherits from superclass \'I11\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/interface/Inputs/interface1.m:100:17: note: inherits from superclass \'I12\' here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/interface/Inputs/interface2.m:99:17: note: inherits from superclass \'I11\' here"}
}
},
},
["note_odr_objc_synthesize_ivar_here"]={
["note_odr_objc_synthesize_ivar_here"]={
[f]="property is synthesized to ivar A here",
[b]="property is synthesized to ivar A here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="property is synthesized to ivar %0 here",
[h]="property is synthesized to ivar %0 here",
[g]=b,
[j]=i,
[e]="property is synthesized to ivar (.*?) here",
[k]="property is synthesized to ivar (.*?) here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"14a49e2fbe1c",1291746723,"Implement AST import for Objective-C property implementations"},
[m]={"14a49e2fbe1c",1291746723,"Implement AST import for Objective-C property implementations"},
[n]={{F,5623,"ExpectedDecl ASTNodeImporter::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D) {\n  if (!ToImpl) {\n  } else {\n    // For @synthesize, check that we have the same\n    if (D->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize && Ivar != ToImpl->getPropertyIvarDecl()) {\n      Importer.FromDiag(D->getPropertyIvarDeclLoc(), diag::note_odr_objc_synthesize_ivar_here) << D->getPropertyIvarDecl()->getDeclName();"}}
[n]={{O,5623,"ExpectedDecl ASTNodeImporter::VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D) {\n  if (!ToImpl) {\n  } else {\n    // For @synthesize, check that we have the same\n    if (D->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize && Ivar != ToImpl->getPropertyIvarDecl()) {\n      Importer.FromDiag(D->getPropertyIvarDeclLoc(), diag::note_odr_objc_synthesize_ivar_here) << D->getPropertyIvarDecl()->getDeclName();"}},
[o]={
["clang/test/ASTMerge/property/test.m"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/property/Inputs/property2.m:29:21: note: property is synthesized to ivar \'ivar2\' here"}
}
},
},
["note_odr_parameter_pack_non_pack"]={
["note_odr_parameter_pack_non_pack"]={
[f]="... declared here",
[b]="... declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{parameter|parameter pack}0 declared here",
[h]="%select{parameter|parameter pack}0 declared here",
[g]=b,
[j]=i,
[e]="(?:parameter|parameter pack) declared here",
[k]="(?:parameter|parameter pack) declared here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"a082a49d9e71",1291144490,"Implement basic AST importing and merging support for class template"},
[m]={"a082a49d9e71",1291144490,"Implement basic AST importing and merging support for class template"},
[n]={{v,1841,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, TemplateTypeParmDecl *D1, TemplateTypeParmDecl *D2) {\n  if (D1->isParameterPack() != D2->isParameterPack()) {\n    if (Context.Complain) {\n      Context.Diag1(D1->getLocation(), diag::note_odr_parameter_pack_non_pack) << D1->isParameterPack();"},{v,1859,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, NonTypeTemplateParmDecl *D1, NonTypeTemplateParmDecl *D2) {\n  if (D1->isParameterPack() != D2->isParameterPack()) {\n    if (Context.Complain) {\n      Context.Diag1(D1->getLocation(), diag::note_odr_parameter_pack_non_pack) << D1->isParameterPack();"},{v,1890,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, TemplateTemplateParmDecl *D1, TemplateTemplateParmDecl *D2) {\n  if (D1->isParameterPack() != D2->isParameterPack()) {\n    if (Context.Complain) {\n      Context.Diag1(D1->getLocation(), diag::note_odr_parameter_pack_non_pack) << D1->isParameterPack();"}}
[n]={{z,1841,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, TemplateTypeParmDecl *D1, TemplateTypeParmDecl *D2) {\n  if (D1->isParameterPack() != D2->isParameterPack()) {\n    if (Context.Complain) {\n      Context.Diag1(D1->getLocation(), diag::note_odr_parameter_pack_non_pack) << D1->isParameterPack();"},{z,1859,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, NonTypeTemplateParmDecl *D1, NonTypeTemplateParmDecl *D2) {\n  if (D1->isParameterPack() != D2->isParameterPack()) {\n    if (Context.Complain) {\n      Context.Diag1(D1->getLocation(), diag::note_odr_parameter_pack_non_pack) << D1->isParameterPack();"},{z,1890,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, TemplateTemplateParmDecl *D1, TemplateTemplateParmDecl *D2) {\n  if (D1->isParameterPack() != D2->isParameterPack()) {\n    if (Context.Complain) {\n      Context.Diag1(D1->getLocation(), diag::note_odr_parameter_pack_non_pack) << D1->isParameterPack();"}},
[o]={
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:117:17: note: parameter declared here"}
}
},
},
["note_odr_tag_kind_here"]={
["note_odr_tag_kind_here"]={
[f]="A is a ... here",
[b]="A is a ... here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%0 is a %select{struct|interface|union|class|enum}1 here",
[h]="%0 is a %select{struct|interface|union|class|enum}1 here",
[g]=b,
[j]=i,
[e]="(.*?) is a (?:struct|interface|union|class|enum) here",
[k]="(.*?) is a (?:struct|interface|union|class|enum) here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={Gb,1265916115,Fb},
[m]={dc,1265916115,Xb},
[n]={{v,1480,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (D1->isUnion() != D2->isUnion()) {\n    if (Context.Complain) {\n      Context.Diag1(D1->getLocation(), diag::note_odr_tag_kind_here) << D1->getDeclName() << (unsigned)D1->getTagKind();"}}
[n]={{z,1480,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (D1->isUnion() != D2->isUnion()) {\n    if (Context.Complain) {\n      Context.Diag1(D1->getLocation(), diag::note_odr_tag_kind_here) << D1->getDeclName() << (unsigned)D1->getTagKind();"}},
[o]={
["clang/test/ASTMerge/struct/test.c"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/struct/Inputs/struct2.c:18:7: note: \'S2\' is a union here"}
}
},
},
["note_odr_template_parameter_here"]={
["note_odr_template_parameter_here"]={
[f]="template parameter declared here",
[b]="template parameter declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="template parameter declared here",
[h]="template parameter declared here",
[g]=b,
[j]=i,
[e]="template parameter declared here",
[k]="template parameter declared here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"a082a49d9e71",1291144490,"Implement basic AST importing and merging support for class template"},
[m]={"a082a49d9e71",1291144490,"Implement basic AST importing and merging support for class template"},
[n]={{v,1819,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, TemplateParameterList *Params1, TemplateParameterList *Params2) {\n  for (unsigned I = 0, N = Params1->size(); I != N; ++I) {\n    if (Params1->getParam(I)->getKind() != Params2->getParam(I)->getKind()) {\n      if (Context.Complain) {\n        Context.Diag1(Params1->getParam(I)->getLocation(), diag::note_odr_template_parameter_here);"}}
[n]={{z,1819,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, TemplateParameterList *Params1, TemplateParameterList *Params2) {\n  for (unsigned I = 0, N = Params1->size(); I != N; ++I) {\n    if (Params1->getParam(I)->getKind() != Params2->getParam(I)->getKind()) {\n      if (Context.Complain) {\n        Context.Diag1(Params1->getParam(I)->getLocation(), diag::note_odr_template_parameter_here);"}},
[o]={
["clang/test/ASTMerge/class-template/test.cpp"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/class-template/Inputs/class-template2.cpp:12:18: note: template parameter declared here","/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/class-template/Inputs/class-template2.cpp:21:31: note: template parameter declared here"}
}
},
},
["note_odr_template_parameter_list"]={
["note_odr_template_parameter_list"]={
[f]="template parameter list also declared here",
[b]="template parameter list also declared here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="template parameter list also declared here",
[h]="template parameter list also declared here",
[g]=b,
[j]=i,
[e]="template parameter list also declared here",
[k]="template parameter list also declared here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"a082a49d9e71",1291144490,"Implement basic AST importing and merging support for class template"},
[m]={"a082a49d9e71",1291144490,"Implement basic AST importing and merging support for class template"},
[n]={{v,1807,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, TemplateParameterList *Params1, TemplateParameterList *Params2) {\n  if (Params1->size() != Params2->size()) {\n    if (Context.Complain) {\n      Context.Diag1(Params1->getTemplateLoc(), diag::note_odr_template_parameter_list);"}}
[n]={{z,1807,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, TemplateParameterList *Params1, TemplateParameterList *Params2) {\n  if (Params1->size() != Params2->size()) {\n    if (Context.Complain) {\n      Context.Diag1(Params1->getTemplateLoc(), diag::note_odr_template_parameter_list);"}}
},
},
["note_odr_value_here"]={
["note_odr_value_here"]={
[f]="declared here with type A",
[b]="declared here with type A",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="declared here with type %0",
[h]="declared here with type %0",
[g]=b,
[j]=i,
[e]="declared here with type (.*?)",
[k]="declared here with type (.*?)",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={"3aed6cdd5e61",1265663379,"Implement basic importing and merging of variable declarations within"},
[m]={"3aed6cdd5e61",1265663379,"Implement basic importing and merging of variable declarations within"},
[n]={{F,3545,"ExpectedDecl ASTNodeImporter::VisitFunctionDecl(FunctionDecl *D) {\n  }\n  // Try to find a function in our own (\"to\") context with the same name, same\n  // type, and in the same context as the function we\'re importing.\n  else if (!LexicalDC->isFunctionOrMethod()) {\n    for (auto *FoundDecl : FoundDecls) {\n      if (auto *FoundFunction = dyn_cast<FunctionDecl>(FoundDecl)) {\n        Importer.ToDiag(FoundFunction->getLocation(), diag::note_odr_value_here) << FoundFunction->getType();"},{F,3917,"ExpectedDecl ASTNodeImporter::VisitFieldDecl(FieldDecl *D) {\n  for (auto *FoundDecl : FoundDecls) {\n    if (FieldDecl *FoundField = dyn_cast<FieldDecl>(FoundDecl)) {\n      Importer.ToDiag(FoundField->getLocation(), diag::note_odr_value_here) << FoundField->getType();"},{F,3996,"ExpectedDecl ASTNodeImporter::VisitIndirectFieldDecl(IndirectFieldDecl *D) {\n  for (unsigned I = 0, N = FoundDecls.size(); I != N; ++I) {\n    if (auto *FoundField = dyn_cast<IndirectFieldDecl>(FoundDecls[I])) {\n      Importer.ToDiag(FoundField->getLocation(), diag::note_odr_value_here) << FoundField->getType();"},{F,4187,"ExpectedDecl ASTNodeImporter::VisitObjCIvarDecl(ObjCIvarDecl *D) {\n  for (auto *FoundDecl : FoundDecls) {\n    if (ObjCIvarDecl *FoundIvar = dyn_cast<ObjCIvarDecl>(FoundDecl)) {\n      Importer.ToDiag(FoundIvar->getLocation(), diag::note_odr_value_here) << FoundIvar->getType();"},{F,4298,"ExpectedDecl ASTNodeImporter::VisitVarDecl(VarDecl *D) {\n  if (D->isFileVarDecl()) {\n    for (auto *FoundDecl : FoundDecls) {\n      if (auto *FoundVar = dyn_cast<VarDecl>(FoundDecl)) {\n        Importer.ToDiag(FoundVar->getLocation(), diag::note_odr_value_here) << FoundVar->getType();"},{F,4523,"ExpectedDecl ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {\n  for (auto *FoundDecl : FoundDecls) {\n    if (auto *FoundMethod = dyn_cast<ObjCMethodDecl>(FoundDecl)) {\n      // Check parameter types.\n      for (ObjCMethodDecl::param_iterator P = D->param_begin(), PEnd = D->param_end(), FoundP = FoundMethod->param_begin(); P != PEnd; ++P, ++FoundP) {\n        if (!Importer.IsStructurallyEquivalent((*P)->getType(), (*FoundP)->getType())) {\n          Importer.ToDiag((*FoundP)->getLocation(), diag::note_odr_value_here) << (*FoundP)->getType();"},{F,5503,"ExpectedDecl ASTNodeImporter::VisitObjCPropertyDecl(ObjCPropertyDecl *D) {\n  for (auto *FoundDecl : FoundDecls) {\n    if (auto *FoundProp = dyn_cast<ObjCPropertyDecl>(FoundDecl)) {\n      // Check property types.\n      if (!Importer.IsStructurallyEquivalent(D->getType(), FoundProp->getType())) {\n        Importer.ToDiag(FoundProp->getLocation(), diag::note_odr_value_here) << FoundProp->getType();"},{v,1872,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, NonTypeTemplateParmDecl *D1, NonTypeTemplateParmDecl *D2) {\n  // Check types.\n  if (!IsStructurallyEquivalent(Context, D1->getType(), D2->getType())) {\n    if (Context.Complain) {\n      Context.Diag1(D1->getLocation(), diag::note_odr_value_here) << D1->getType();"}}
[n]={{O,3545,"ExpectedDecl ASTNodeImporter::VisitFunctionDecl(FunctionDecl *D) {\n  }\n  // Try to find a function in our own (\"to\") context with the same name, same\n  // type, and in the same context as the function we\'re importing.\n  else if (!LexicalDC->isFunctionOrMethod()) {\n    for (auto *FoundDecl : FoundDecls) {\n      if (auto *FoundFunction = dyn_cast<FunctionDecl>(FoundDecl)) {\n        Importer.ToDiag(FoundFunction->getLocation(), diag::note_odr_value_here) << FoundFunction->getType();"},{O,3917,"ExpectedDecl ASTNodeImporter::VisitFieldDecl(FieldDecl *D) {\n  for (auto *FoundDecl : FoundDecls) {\n    if (FieldDecl *FoundField = dyn_cast<FieldDecl>(FoundDecl)) {\n      Importer.ToDiag(FoundField->getLocation(), diag::note_odr_value_here) << FoundField->getType();"},{O,3996,"ExpectedDecl ASTNodeImporter::VisitIndirectFieldDecl(IndirectFieldDecl *D) {\n  for (unsigned I = 0, N = FoundDecls.size(); I != N; ++I) {\n    if (auto *FoundField = dyn_cast<IndirectFieldDecl>(FoundDecls[I])) {\n      Importer.ToDiag(FoundField->getLocation(), diag::note_odr_value_here) << FoundField->getType();"},{O,4187,"ExpectedDecl ASTNodeImporter::VisitObjCIvarDecl(ObjCIvarDecl *D) {\n  for (auto *FoundDecl : FoundDecls) {\n    if (ObjCIvarDecl *FoundIvar = dyn_cast<ObjCIvarDecl>(FoundDecl)) {\n      Importer.ToDiag(FoundIvar->getLocation(), diag::note_odr_value_here) << FoundIvar->getType();"},{O,4298,"ExpectedDecl ASTNodeImporter::VisitVarDecl(VarDecl *D) {\n  if (D->isFileVarDecl()) {\n    for (auto *FoundDecl : FoundDecls) {\n      if (auto *FoundVar = dyn_cast<VarDecl>(FoundDecl)) {\n        Importer.ToDiag(FoundVar->getLocation(), diag::note_odr_value_here) << FoundVar->getType();"},{O,4523,"ExpectedDecl ASTNodeImporter::VisitObjCMethodDecl(ObjCMethodDecl *D) {\n  for (auto *FoundDecl : FoundDecls) {\n    if (auto *FoundMethod = dyn_cast<ObjCMethodDecl>(FoundDecl)) {\n      // Check parameter types.\n      for (ObjCMethodDecl::param_iterator P = D->param_begin(), PEnd = D->param_end(), FoundP = FoundMethod->param_begin(); P != PEnd; ++P, ++FoundP) {\n        if (!Importer.IsStructurallyEquivalent((*P)->getType(), (*FoundP)->getType())) {\n          Importer.ToDiag((*FoundP)->getLocation(), diag::note_odr_value_here) << (*FoundP)->getType();"},{O,5503,"ExpectedDecl ASTNodeImporter::VisitObjCPropertyDecl(ObjCPropertyDecl *D) {\n  for (auto *FoundDecl : FoundDecls) {\n    if (auto *FoundProp = dyn_cast<ObjCPropertyDecl>(FoundDecl)) {\n      // Check property types.\n      if (!Importer.IsStructurallyEquivalent(D->getType(), FoundProp->getType())) {\n        Importer.ToDiag(FoundProp->getLocation(), diag::note_odr_value_here) << FoundProp->getType();"},{z,1872,"static bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, NonTypeTemplateParmDecl *D1, NonTypeTemplateParmDecl *D2) {\n  // Check types.\n  if (!IsStructurallyEquivalent(Context, D1->getType(), D2->getType())) {\n    if (Context.Complain) {\n      Context.Diag1(D1->getLocation(), diag::note_odr_value_here) << D1->getType();"}},
[o]={
["clang/test/ASTMerge/property/test.m"]={"/var/jenkins/workspace/llvm_stripf_diag_2/misc/llvm-warnings/llvmorg-17.0.6/clang/test/ASTMerge/property/Inputs/property1.m:10:28: note: declared here with type \'float\'"}
}
},
},
["note_odr_virtual_base"]={
["note_odr_virtual_base"]={
[f]="... derivation here",
[b]="... derivation here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="%select{non-virtual|virtual}0 derivation here",
[h]="%select{non-virtual|virtual}0 derivation here",
[g]=b,
[j]=i,
[e]="(?:non\\-virtual|virtual) derivation here",
[k]="(?:non\\-virtual|virtual) derivation here",
[d]=a,
[l]=a,
[c]=a,
[c]=a,
[m]={Gb,1265916115,Fb},
[m]={dc,1265916115,Xb},
[n]={{v,1607,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      // Check the base classes.\n      for (CXXRecordDecl::base_class_iterator Base1 = D1CXX->bases_begin(), BaseEnd1 = D1CXX->bases_end(), Base2 = D2CXX->bases_begin(); Base1 != BaseEnd1; ++Base1, ++Base2) {\n        // Check virtual vs. non-virtual inheritance mismatch.\n        if (Base1->isVirtual() != Base2->isVirtual()) {\n          if (Context.Complain) {\n            Context.Diag2(Base2->getBeginLoc(), diag::note_odr_virtual_base) << Base2->isVirtual() << Base2->getSourceRange();"}}
[n]={{z,1607,"/// Determine structural equivalence of two records.\nstatic bool IsStructurallyEquivalent(StructuralEquivalenceContext &Context, RecordDecl *D1, RecordDecl *D2) {\n  if (auto *D1CXX = dyn_cast<CXXRecordDecl>(D1)) {\n    if (auto *D2CXX = dyn_cast<CXXRecordDecl>(D2)) {\n      // Check the base classes.\n      for (CXXRecordDecl::base_class_iterator Base1 = D1CXX->bases_begin(), BaseEnd1 = D1CXX->bases_end(), Base2 = D2CXX->bases_begin(); Base1 != BaseEnd1; ++Base1, ++Base2) {\n        // Check virtual vs. non-virtual inheritance mismatch.\n        if (Base1->isVirtual() != Base2->isVirtual()) {\n          if (Context.Complain) {\n            Context.Diag2(Base2->getBeginLoc(), diag::note_odr_virtual_base) << Base2->isVirtual() << Base2->getSourceRange();"}}
},
},
["note_omp_assumption_clause_continue_here"]={
["note_omp_assumption_clause_continue_here"]={
[f]="the ignored tokens spans until here",
[b]="the ignored tokens spans until here",
[k]=l,
[e]=d,
[i]=j,
[g]=f,
[h]="the ignored tokens spans until here",
[h]="the ignored tokens spans until here",
[g]=b,
[j]=i,
[e]="the ignored tokens spans until here",
[k]="the ignored tokens spans until here",
[d]=a,
[l]=a,
[c]=Q,
[c]=Z,
[m]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"},
[m]={"38d18d93534d",1601621202,"[SVE] Add support to vectorize_width loop pragma for scalable vectors"},
[n]={{"clang/lib/Parse/ParseOpenMP.cpp",1690,"/// `omp assumes` or `omp begin/end assumes` <clause> [[,]<clause>]...\n/// where\n///\n///  clause:\n///    \'ext_IMPL_DEFINED\'\n///    \'absent\' \'(\' directive-name [, directive-name]* \')\'\n///    \'contains\' \'(\' directive-name [, directive-name]* \')\'\n///    \'holds\' \'(\' scalar-expression \')\'\n///    \'no_openmp\'\n///    \'no_openmp_routines\'\n///    \'no_parallelism\'\n///\nvoid Parser::ParseOpenMPAssumesDirective(OpenMPDirectiveKind DKind, SourceLocation Loc) {\n  auto SkipBraces = [&](llvm::StringRef Spelling, bool IssueNote) {\n    if (IssueNote && T.getCloseLocation().isValid())\n      Diag(T.getCloseLocation(), diag::note_omp_assumption_clause_continue_here);"}}
[n]={{"clang/lib/Parse/ParseOpenMP.cpp",1690,"/// `omp assumes` or `omp begin/end assumes` <clause> [[,]<clause>]...\n/// where\n///\n///  clause:\n///    \'ext_IMPL_DEFINED\'\n///    \'absent\' \'(\' directive-name [, directive-name]* \')\'\n///    \'contains\' \'(\' directive-name [, directive-name]* \')\'\n///    \'holds\' \'(\' scalar-expression \')\'\n///    \'no_openmp\'\n///    \'no_openmp_routines\'\n///    \'no_parallelism\'\n///\nvoid Parser::ParseOpenMPAssumesDirective(OpenMPDirectiveKind DKind, SourceLocation Loc) {\n  auto SkipBraces = [&](llvm::StringRef Spelling, bool IssueNote) {\n    if (IssueNote && T.getCloseLocation().isValid())\n      Diag(T.getCloseLocation(), diag::note_omp_assumption_clause_continue_here);"}},
[o]={
["clang/test/OpenMP/assumes_messages_attr.c"]={"clang/test/OpenMP/assumes_messages_attr.c:13:48: note: the ignored tokens spans until here","clang/test/OpenMP/assumes_messages_attr.c:14:42: note: the ignored tokens spans until here","clang/test/OpenMP/assumes_messages_attr.c:17:37: note: the ignored tokens spans until here","clang/test/OpenMP/assumes_messages_attr.c:18:47: note: the ignored tokens spans until here","clang/test/OpenMP/assumes_messages_attr.c:25:48: note: the ignored tokens spans until here","clang/test/OpenMP/assumes_messages_attr.c:25:76: note: the ignored tokens spans until here","clang/test/OpenMP/assumes_messages_attr.c:26:42: note: the ignored tokens spans until here","clang/test/OpenMP/assumes_messages_attr.c:26:70: note: the ignored tokens spans until here","clang/test/OpenMP/assumes_messages_attr.c:49:45: note: the ignored tokens spans until here","clang/test/OpenMP/assumes_messages_attr.c:50:51: note: the ignored tokens spans until here"}
}
}
}
};
};
Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557

edits

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

Navigation menu