Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557
edits
Timo.stripf (talk | contribs) No edit summary |
Timo.stripf (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
local a=""; | local a=""; | ||
local b=" | local b="title"; | ||
local c="category"; | local c="category"; | ||
local d=" | local d="note: "; | ||
local e=" | local e="prefix"; | ||
local f=" | local f="Note"; | ||
local g=" | local g="type"; | ||
local h="message"; | local h="message"; | ||
local i=" | local i="note\\: "; | ||
local j=" | local j="regex1"; | ||
local k=" | local k="regex2"; | ||
local l=" | local l="regex3"; | ||
local m="commit"; | local m="commit"; | ||
local n="source"; | local n="source"; | ||
local o=" | local o="tests2"; | ||
local p=" | local p="Semantic Issue"; | ||
local q="clang/lib/ | local q="clang/lib/AST/ExprConstant.cpp"; | ||
local r="clang/lib/Sema/ | local r="clang/lib/Sema/SemaDeclCXX.cpp"; | ||
local s="clang/lib/Sema/ | local s="clang/lib/Sema/SemaExpr.cpp"; | ||
local t="clang/lib/Sema/ | local t="clang/lib/Sema/SemaExprObjC.cpp"; | ||
local u="clang/lib/Sema/ | local u="clang/lib/Sema/SemaDecl.cpp"; | ||
local v="clang/lib/ | local v="clang/lib/Sema/SemaTemplate.cpp"; | ||
local w="clang/ | 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/ | 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/ | 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/ | local z="clang/lib/AST/ASTStructuralEquivalence.cpp"; | ||
local A="clang/lib/ | local A="clang/lib/AST/Interp/Interp.cpp"; | ||
local B="clang/lib/Sema/ | local B="clang/lib/Sema/JumpDiagnostics.cpp"; | ||
local C="clang/ | 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/ | local D="clang/lib/Sema/SemaChecking.cpp"; | ||
local E="clang/ | 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/ | 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/Sema/SemaTemplateInstantiate.cpp"; | |||
local H="clang/lib/ | local H="clang/lib/Sema/SemaStmt.cpp"; | ||
local I="clang/lib/Sema/ | local I="clang/lib/Sema/SemaType.cpp"; | ||
local J=" | local J="clang/lib/Sema/SemaOpenMP.cpp"; | ||
local K="clang/lib/Sema/ | local K="clang/lib/Sema/SemaInit.cpp"; | ||
local L="clang/lib/ | local L="clang/lib/Driver/Driver.cpp"; | ||
local M | local M="clang/lib/Sema/SemaDeclObjC.cpp"; | ||
local N="clang/lib/AST/ODRDiagsEmitter.cpp"; | |||
local | local O="clang/lib/AST/ASTImporter.cpp"; | ||
local P="clang/lib/Sema/ | local P="clang/lib/Sema/SemaDeclAttr.cpp"; | ||
local Q=" | local Q="da1b4347e41a"; | ||
local R=" | local R="For P0784R7: Add support for dynamic allocation with new / delete during"; | ||
local S=" | local S="clang/lib/Sema/SemaExprCXX.cpp"; | ||
local T=" | local T="clang/lib/Sema/SemaCoroutine.cpp"; | ||
local U=" | local U="clang/test/CXX/expr/expr.const/p2-0x.cpp"; | ||
local V="clang/lib/Sema/ | local V="clang/lib/Sema/SemaObjCProperty.cpp"; | ||
local W=" | local W="clang/lib/Sema/SemaConcept.cpp"; | ||
local X=" | local X="clang/lib/Sema/SemaOverload.cpp"; | ||
local Y | local Y="clang/test/SemaCXX/constant-expression-cxx2a.cpp"; | ||
local Z="Parse Issue"; | |||
local | 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 | local bb="Lexical or Preprocessor Issue"; | ||
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="clang/test/SemaObjC/non-trivial-c-union.m:5:9: note: \'U0\' has subobjects that are non-trivial to default-initialize"; | |||
local | local eb="clang/lib/Sema/AnalysisBasedWarnings.cpp"; | ||
local | local fb="95f50964fbf5"; | ||
local | local gb="clang/lib/Sema/SemaAvailability.cpp"; | ||
local hb="When checking scopes for indirect goto, be more permissive (but still safe)"; | |||
local | local ib="clang/lib/Sema/SemaModule.cpp"; | ||
local | local jb="[clang] Implement objc_non_runtime_protocol to remove protocol metadata"; | ||
local | local kb="cf819ab38311"; | ||
local | local lb="Improve static checks for sprintf and __builtin___sprintf_chk"; | ||
local mb="14f6bfcb52e7"; | |||
local | local nb="Implement P2361 Unevaluated string literals"; | ||
local ob="6d485ff455ea"; | |||
local | local pb="61d065e21ff3"; | ||
local | local qb="Let clang atomic builtins fetch add/sub support floating point types"; | ||
local | local rb="f27afedc6c86"; | ||
local | local sb="[Clang] Implement P2738R1 - constexpr cast from void*"; | ||
local | local tb="5253d9138eb3"; | ||
local | local ub="constexpr: semantic checking for constexpr functions and constructors. Based in"; | ||
local | local vb="Documentation Issue"; | ||
local | local wb="clang/lib/Lex/PPMacroExpansion.cpp"; | ||
local | local xb="clang/test/SemaCXX/constexpr-string.cpp"; | ||
local | local yb="clang/lib/Lex/ModuleMap.cpp"; | ||
local | local zb="clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp"; | ||
local | local Ab="eb3c10c248ac"; | ||
local | local Bb="[c++20] Determine whether a defaulted comparison should be deleted or"; | ||
local | local Cb="clang/test/SemaSYCL/zero-length-arrays.cpp:25:10: note: field of illegal type \'double[0]\' declared here"; | ||
local | local Db="but in ... found ..."; | ||
local | local Eb="Add a warning for not packing non-POD members in packed structs"; | ||
local | local Fb="C++1y: support simple variable assignments in constexpr functions."; | ||
local | local Gb="3da88fac5416"; | ||
local | local Hb="ec273d3e3a8c"; | ||
local Ib="clang/test/Sema/flexible-array-init.c:20:7: note: initialized flexible array member \'y\' is here"; | |||
local | local Jb="b1c4d5507fad"; | ||
local | local Kb="The basic representation of diagnostics information in tablegen format, plus (uncommented and incomp..."; | ||
local | local Lb="92f241f18812"; | ||
local | local Mb="Properly compute triviality for explicitly-defaulted or deleted special members."; | ||
local | local Nb="clang/lib/AST/CommentSema.cpp"; | ||
local | local Ob="clang/test/SemaCXX/constant-expression-cxx11.cpp"; | ||
local | local Pb="but in \'A\' found ..."; | ||
local Qb="Add checks and diagnostics for many of the cases which C++11 considers to not"; | |||
local | local Rb="Automatic Reference Counting."; | ||
local | local Sb="31168b077c36"; | ||
local | local Tb="clang/lib/Parse/ParseObjc.cpp"; | ||
local | local Ub="852265ff1c19"; | ||
local | local Vb="PR10217: Provide diagnostics explaining why an implicitly-deleted special"; | ||
local | local Wb="clang/lib/Sema/SemaLookup.cpp"; | ||
local Xb="When AST merging for record declarations fails, warn about the"; | |||
local | local Yb="[clang] New __attribute__((__clang_arm_mve_alias))."; | ||
local | local Zb="7c11da0cfd33"; | ||
local | local ac="357362d00b04"; | ||
local bc="[WebAssembly] Improve clang diagnostics for wasm attributes"; | |||
local | local cc="931fcd3ba011"; | ||
local | local dc="7eeb59752a60"; | ||
local | local ec="clang/lib/Serialization/ASTReader.cpp"; | ||
local | local fc="Modules Issue"; | ||
local | local gc="ARC Casting Rules"; | ||
local | local hc="AST Deserialization Issue"; | ||
local | local ic="clang/test/CXX/basic/basic.types/p10.cpp"; | ||
local | local jc="clang/lib/Sema/SemaCXXScopeSpec.cpp"; | ||
local | local kc="clang/test/CXX/class/class.union/p1.cpp"; | ||
local | local lc="3dbcea8b957a"; | ||
local | local mc="clang/lib/Sema/SemaStmtAsm.cpp"; | ||
local | 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"]={ | ||
[ | [b]="must name member using the type of the current context A", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="must name member using the type of the current context (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="can only access this member on an object of type A", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="can only access this member on an object of type (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="add a deprecation attribute to the declaration to silence this warning", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="add a deprecation attribute to the declaration to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="add a \'@synthesize\' directive", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="add a \'@synthesize\' directive", | [h]="add a \'@synthesize\' directive", | ||
[ | [j]=i, | ||
[ | [k]="add a \'@synthesize\' directive", | ||
[ | [l]=a, | ||
[c]= | [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]={{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"]={ | ||
[ | [b]="add a pair of parentheses to declare a variable", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="add a pair of parentheses to declare a variable", | [h]="add a pair of parentheses to declare a variable", | ||
[ | [j]=i, | ||
[ | [k]="add a pair of parentheses to declare a variable", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="candidate function made ineligible by enable_if", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="candidate function made ineligible by enable_if", | [h]="candidate function made ineligible by enable_if", | ||
[ | [j]=i, | ||
[ | [k]="candidate function made ineligible by enable_if", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="function by that name is mangled as \"A\"", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="function by that name is mangled as \"%0\"", | [h]="function by that name is mangled as \"%0\"", | ||
[ | [j]=i, | ||
[ | [k]="function by that name is mangled as \"(.*?)\"", | ||
[ | [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"]={ | ||
[ | [b]="the ... specified in an ... must refer to its mangled name", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="the (?:function or variable|function) specified in an (?:alias|ifunc) must refer to its mangled name", | ||
[ | [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"]={ | ||
[ | [b]="declared with A attribute here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="declared with %0 attribute here", | [h]="declared with %0 attribute here", | ||
[ | [j]=i, | ||
[ | [k]="declared with (.*?) attribute here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="allocated with \'new...\' here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="allocated with \'new%select{[]|}0\' here", | [h]="allocated with \'new%select{[]|}0\' here", | ||
[ | [j]=i, | ||
[ | [k]="allocated with \'new(?:\\[\\]|)\' here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="also found", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="also found", | [h]="also found", | ||
[ | [j]=i, | ||
[ | [k]="also found", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="lookup in the object type A refers here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="lookup in the object type %0 refers here", | [h]="lookup in the object type %0 refers here", | ||
[ | [j]=i, | ||
[ | [k]="lookup in the object type (.*?) refers here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="lookup from the current scope refers here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="lookup from the current scope refers here", | [h]="lookup from the current scope refers here", | ||
[ | [j]=i, | ||
[ | [k]="lookup from the current scope refers here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="similar constraint expressions not considered equivalent; constraint expressions cannot be considered equivalent unless they originate from the same concept", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="similar constraint expressions not considered equivalent; constraint expressions cannot be considered equivalent unless they originate from the same concept", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | [m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="similar constraint expression here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="similar constraint expression here", | [h]="similar constraint expression here", | ||
[ | [j]=i, | ||
[ | [k]="similar constraint expression here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | [m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="candidate found by name lookup is A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="candidate found by name lookup is %q0", | [h]="candidate found by name lookup is %q0", | ||
[ | [j]=i, | ||
[ | [k]="candidate found by name lookup is (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="inherited from base class A here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="inherited from base class %0 here", | [h]="inherited from base class %0 here", | ||
[ | [j]=i, | ||
[ | [k]="inherited from base class (.*?) here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="member found by ambiguous name lookup", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="member found by ambiguous name lookup", | [h]="member found by ambiguous name lookup", | ||
[ | [j]=i, | ||
[ | [k]="member found by ambiguous name lookup", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="member type A found by ambiguous name lookup", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="member type %0 found by ambiguous name lookup", | [h]="member type %0 found by ambiguous name lookup", | ||
[ | [j]=i, | ||
[ | [k]="member type (.*?) found by ambiguous name lookup", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={pb,1590001902,qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="because of ambiguity in conversion of A to B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="because of ambiguity in conversion (?:of (.*?) to (.*?)|between types)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="anonymous namespace begins here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="anonymous namespace begins here", | [h]="anonymous namespace begins here", | ||
[ | [j]=i, | ||
[ | [k]="anonymous namespace begins here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="use __bridge to convert directly (no change in ownership)", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="use __bridge to convert directly (no change in ownership)", | [h]="use __bridge to convert directly (no change in ownership)", | ||
[ | [j]=i, | ||
[ | [k]="use __bridge to convert directly \\(no change in ownership\\)", | ||
[ | [l]=a, | ||
[c]= | [c]=gc, | ||
[m]={ | [m]={Sb,1308178962,Rb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="use ... to make an ARC object available as a +1 A", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="use (?:__bridge_retained|CFBridgingRetain call) to make an ARC object available as a \\+1 (.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=gc, | ||
[m]={ | [m]={Sb,1308178962,Rb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="use ... to transfer ownership of a +1 A into ARC", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="use (?:__bridge_transfer|CFBridgingRelease call) to transfer ownership of a \\+1 (.*?) into ARC", | ||
[ | [l]=a, | ||
[c]= | [c]=gc, | ||
[m]={ | [m]={Sb,1308178962,Rb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="use __bridge with C-style cast to convert directly (no change in ownership)", | ||
[ | [e]=d, | ||
[ | [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)", | ||
[ | [j]=i, | ||
[ | [k]="use __bridge with C\\-style cast to convert directly \\(no change in ownership\\)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="use __bridge_retained with C-style cast to make an ARC object available as a +1 A", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="use __bridge_retained with C\\-style cast to make an ARC object available as a \\+1 (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="use __bridge_transfer with C-style cast to transfer ownership of a +1 A into ARC", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="use __bridge_transfer with C\\-style cast to transfer ownership of a \\+1 (.*?) into ARC", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="field has non-trivial ownership qualification", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="field has non-trivial ownership qualification", | [h]="field has non-trivial ownership qualification", | ||
[ | [j]=i, | ||
[ | [k]="field has non\\-trivial ownership qualification", | ||
[ | [l]=a, | ||
[c]= | [c]=Pc, | ||
[m]={ | [m]={Oc,1446008599,Nc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="declaration uses type that is ill-formed in ARC", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="declaration uses type that is ill-formed in ARC", | [h]="declaration uses type that is ill-formed in ARC", | ||
[ | [j]=i, | ||
[ | [k]="declaration uses type that is ill\\-formed in ARC", | ||
[ | [l]=a, | ||
[c]= | [c]=Pc, | ||
[m]={ | [m]={Oc,1446008599,Nc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="declaration in interface is not in the \'...\' family because ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [l]=a, | ||
[c]="ARC Semantic Issue", | [c]="ARC Semantic Issue", | ||
[m]={ | [m]={Sb,1308178962,Rb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="init method must return a type related to its receiver type", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="init method must return a type related to its receiver type", | ||
[ | [l]=a, | ||
[c]= | [c]=Pc, | ||
[m]={ | [m]={Oc,1446008599,Nc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="declaration in interface", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="declaration in interface", | [h]="declaration in interface", | ||
[ | [j]=i, | ||
[ | [k]="declaration in interface", | ||
[ | [l]=a, | ||
[c]="ARC Semantic Issue", | [c]="ARC Semantic Issue", | ||
[m]={ | [m]={Sb,1308178962,Rb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="block will be retained by ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="block will be retained by (?:the captured object|an object strongly retained by the captured object)", | ||
[ | [l]=a, | ||
[c]="ARC Retain Cycle", | [c]="ARC Retain Cycle", | ||
[m]={ | [m]={Sb,1308178962,Rb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="also accessed here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="also accessed here", | [h]="also accessed here", | ||
[ | [j]=i, | ||
[ | [k]="also accessed here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="declaration uses __weak, but ARC is disabled", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="declaration uses __weak, but ARC is disabled", | [h]="declaration uses __weak, but ARC is disabled", | ||
[ | [j]=i, | ||
[ | [k]="declaration uses __weak, but ARC is disabled", | ||
[ | [l]=a, | ||
[c]= | [c]=Pc, | ||
[m]={ | [m]={Oc,1446008599,Nc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="declaration uses __weak, which the current deployment target does not support", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="declaration uses __weak, which the current deployment target does not support", | ||
[ | [l]=a, | ||
[c]= | [c]=Pc, | ||
[m]={ | [m]={Oc,1446008599,Nc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="array A declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="array %0 declared here", | [h]="array %0 declared here", | ||
[ | [j]=i, | ||
[ | [k]="array (.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Zb,1567434909,Yb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="add \'u8\' prefix to form a \'char8_t\' string literal", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="add \'u8\' prefix to form a \'char8_t\' string literal", | [h]="add \'u8\' prefix to form a \'char8_t\' string literal", | ||
[ | [j]=i, | ||
[ | [k]="add \'u8\' prefix to form a \'char8_t\' string literal", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type."}, | [m]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="conversion to ... type A declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="conversion to %select{integral|enumeration}0 type %1 declared here", | [h]="conversion to %select{integral|enumeration}0 type %1 declared here", | ||
[ | [j]=i, | ||
[ | [k]="conversion to (?:integral|enumeration) type (.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="constraint \'A\' is already present here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="constraint \'%0\' is already present here", | [h]="constraint \'%0\' is already present here", | ||
[ | [j]=i, | ||
[ | [k]="constraint \'(.*?)\' is already present here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="use constraint modifier \"A\"", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="use constraint modifier \"%0\"", | [h]="use constraint modifier \"%0\"", | ||
[ | [j]=i, | ||
[ | [k]="use constraint modifier \"(.*?)\"", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="type A is incomplete", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="type %0 is incomplete", | [h]="type %0 is incomplete", | ||
[ | [j]=i, | ||
[ | [k]="type (.*?) is incomplete", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"a31efa07ff70",1377722135,"Improve error for assignment to incomplete class."}, | [m]={"a31efa07ff70",1377722135,"Improve error for assignment to incomplete class."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... \'A\' evaluated to false", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{and|because}0 \'%1\' evaluated to false", | [h]="%select{and|because}0 \'%1\' evaluated to false", | ||
[ | [j]=i, | ||
[ | [k]="(?:and|because) \'(.*?)\' evaluated to false", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={pc,1569403888,rc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... \'A\' (B C D) evaluated to false", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:and|because) \'(.*?)\' \\((.*?) (.*?) (.*?)\\) evaluated to false", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={pc,1569403888,rc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic", | ||
[ | [l]=a, | ||
[c]= | [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]={{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"]={ | ||
[ | [b]="attribute is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="attribute is here", | [h]="attribute is here", | ||
[ | [j]=i, | ||
[ | [k]="attribute is here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="annotating the \'if ...\' statement here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="annotating the \'if %select{constexpr|consteval}0\' statement here", | [h]="annotating the \'if %select{constexpr|consteval}0\' statement here", | ||
[ | [j]=i, | ||
[ | [k]="annotating the \'if (?:constexpr|consteval)\' statement here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={lc,1615397021,vc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="annotating the infinite loop here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="annotating the infinite loop here", | [h]="annotating the infinite loop here", | ||
[ | [j]=i, | ||
[ | [k]="annotating the infinite loop here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [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"]={ | ||
[ | [b]="previous ...overload of function is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="previous %select{unmarked |}0overload of function is here", | [h]="previous %select{unmarked |}0overload of function is here", | ||
[ | [j]=i, | ||
[ | [k]="previous (?:unmarked |)overload of function is here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Jb,1236199783,Kb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="property should be changed to be readwrite", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="property should be changed to be readwrite", | [h]="property should be changed to be readwrite", | ||
[ | [j]=i, | ||
[ | [k]="property should be changed to be readwrite", | ||
[ | [l]=a, | ||
[c]= | [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]={{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"]={ | ||
[ | [b]="A has been explicitly marked ... here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) has been explicitly marked (?:unavailable|deleted|deprecated) here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="return type of \'await_ready\' is required to be contextually convertible to \'bool\'", | ||
[ | [e]=d, | ||
[ | [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\'", | ||
[ | [j]=i, | ||
[ | [k]="return type of \'await_ready\' is required to be contextually convertible to \'bool\'", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="explicitly cast the pointer to silence this warning", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="explicitly cast the pointer to silence this warning", | [h]="explicitly cast the pointer to silence this warning", | ||
[ | [j]=i, | ||
[ | [k]="explicitly cast the pointer to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="base class A specified here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="base class %0 specified here", | [h]="base class %0 specified here", | ||
[ | [j]=i, | ||
[ | [k]="base class (.*?) specified here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="bit-field is declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="bit-field is declared here", | [h]="bit-field is declared here", | ||
[ | [j]=i, | ||
[ | [k]="bit\\-field is declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="did you mean to use __block A?", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="did you mean to use __block %0?", | [h]="did you mean to use __block %0?", | ||
[ | [j]=i, | ||
[ | [k]="did you mean to use __block (.*?)\\?", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="use -fbracket-depth=N to increase maximum nesting level", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="use -fbracket-depth=N to increase maximum nesting level", | [h]="use -fbracket-depth=N to increase maximum nesting level", | ||
[ | [j]=i, | ||
[ | [k]="use \\-fbracket\\-depth\\=N to increase maximum nesting level", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="in call to printing function with arguments \'(A)\' while dumping struct", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="in call to printing function with arguments \'\\((.*?)\\)\' while dumping struct", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | [m]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="called by A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="called by %0", | [h]="called by %0", | ||
[ | [j]=i, | ||
[ | [k]="called by (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="previous call is here...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="previous call is here(?:; set to nil to indicate it cannot be called afterwards|)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={pb,1590001902,qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%0 declared here", | [h]="%0 declared here", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="callee declares array parameter as static here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="callee declares array parameter as static here", | [h]="callee declares array parameter as static here", | ||
[ | [j]=i, | ||
[ | [k]="callee declares array parameter as static here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="\'trivial_abi\' is disallowed on A because ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={mb,1582847864,jb}, | ||
[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"]={ | ||
[ | [b]="declaration missing \'[[carries_dependency]]\' attribute is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="declaration missing \'[[carries_dependency]]\' attribute is here", | [h]="declaration missing \'[[carries_dependency]]\' attribute is here", | ||
[ | [j]=i, | ||
[ | [k]="declaration missing \'\\[\\[carries_dependency\\]\\]\' attribute is here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute."}, | [m]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="cast one or both operands to int to silence this warning", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="cast one or both operands to int to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={lc,1615397021,vc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="cast expression to void to silence warning", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="cast expression to void to silence warning", | [h]="cast expression to void to silence warning", | ||
[ | [j]=i, | ||
[ | [k]="cast expression to void to silence warning", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"faca2d83b13e",1455839920,"Add -Wcomma warning to Clang."}, | [m]={"faca2d83b13e",1455839920,"Add -Wcomma warning to Clang."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... conforms to protocol A which defines method B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:category|class extension) conforms to protocol (.*?) which defines method (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="generated arguments #A in round-trip: B", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="generated arguments #%0 in round-trip: %1", | [h]="generated arguments #%0 in round-trip: %1", | ||
[ | [j]=i, | ||
[ | [k]="generated arguments \\#(.*?) in round\\-trip\\: (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="original arguments in round-trip: A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="original arguments in round-trip: %0", | [h]="original arguments in round-trip: %0", | ||
[ | [j]=i, | ||
[ | [k]="original arguments in round\\-trip\\: (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="consider making the bitfield type ...", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="consider making the bitfield type %select{unsigned|signed}0", | [h]="consider making the bitfield type %select{unsigned|signed}0", | ||
[ | [j]=i, | ||
[ | [k]="consider making the bitfield type (?:unsigned|signed)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="consider defining A with the \'B\' calling convention", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="consider defining %0 with the \'%1\' calling convention", | [h]="consider defining %0 with the \'%1\' calling convention", | ||
[ | [j]=i, | ||
[ | [k]="consider defining (.*?) with the \'(.*?)\' calling convention", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="while checking constraint satisfaction for class template partial specialization \'A\' required here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="while checking constraint satisfaction for class template partial specialization \'(.*?)\' required here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={pc,1569403888,rc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="while checking constraint satisfaction for function \'A\' required here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="while checking constraint satisfaction for function \'%0\' required here", | [h]="while checking constraint satisfaction for function \'%0\' required here", | ||
[ | [j]=i, | ||
[ | [k]="while checking constraint satisfaction for function \'(.*?)\' required here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="while checking constraint satisfaction for template \'A\' required here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="while checking constraint satisfaction for template \'%0\' required here", | [h]="while checking constraint satisfaction for template \'%0\' required here", | ||
[ | [j]=i, | ||
[ | [k]="while checking constraint satisfaction for template \'(.*?)\' required here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={pc,1569403888,rc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="while checking constraint satisfaction for variable template partial specialization \'A\' required here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="while checking constraint satisfaction for variable template partial specialization \'(.*?)\' required here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={pc,1569403888,rc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="class is declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="class is declared here", | [h]="class is declared here", | ||
[ | [j]=i, | ||
[ | [k]="class is declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="explicitly declare getter A with \'B\' to return an \'unowned\' object", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="explicitly declare getter (.*?) with \'(.*?)\' to return an \'unowned\' object", | ||
[ | [l]=a, | ||
[c]= | [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]={{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"]={ | ||
[ | [b]="parameter of the \'collapse\' clause", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="parameter of the \'collapse\' clause", | [h]="parameter of the \'collapse\' clause", | ||
[ | [j]=i, | ||
[ | [k]="parameter of the \'collapse\' clause", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="in defaulted ... comparison operator for A first required here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="in defaulted (?:equality|three\\-way|equality|relational) comparison operator for (.*?) first required here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"cafc7416baf7",1575501927,"[c++20] Synthesis of defaulted comparison functions."}, | [m]={"cafc7416baf7",1575501927,"[c++20] Synthesis of defaulted comparison functions."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="compatible type A specified here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="compatible type %0 specified here", | [h]="compatible type %0 specified here", | ||
[ | [j]=i, | ||
[ | [k]="compatible type (.*?) specified here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"91147596414d",1302827748,"C1X: implement generic selections"}, | [m]={"91147596414d",1302827748,"C1X: implement generic selections"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="...A token is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{|second }0%1 token is here", | [h]="%select{|second }0%1 token is here", | ||
[ | [j]=i, | ||
[ | [k]="(?:|second )(.*?) token is here", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="place parentheses around the string literal to silence warning", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="place parentheses around the string literal to silence warning", | [h]="place parentheses around the string literal to silence warning", | ||
[ | [j]=i, | ||
[ | [k]="place parentheses around the string literal to silence warning", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={mb,1582847864,jb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... \'A\' evaluated to false", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{and|because}0 \'%1\' evaluated to false", | [h]="%select{and|because}0 \'%1\' evaluated to false", | ||
[ | [j]=i, | ||
[ | [k]="(?:and|because) \'(.*?)\' evaluated to false", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={pc,1569403888,rc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="while checking the satisfaction of concept \'A\' requested here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="while checking the satisfaction of concept \'%0\' requested here", | [h]="while checking the satisfaction of concept \'%0\' requested here", | ||
[ | [j]=i, | ||
[ | [k]="while checking the satisfaction of concept \'(.*?)\' requested here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Zb,1567434909,Yb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="place parentheses around the assignment to silence this warning", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="place parentheses around the assignment to silence this warning", | [h]="place parentheses around the assignment to silence this warning", | ||
[ | [j]=i, | ||
[ | [k]="place parentheses around the assignment to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="use \'==\' to turn this assignment into an equality comparison", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="use \'==\' to turn this assignment into an equality comparison", | [h]="use \'==\' to turn this assignment into an equality comparison", | ||
[ | [j]=i, | ||
[ | [k]="use \'\\=\\=\' to turn this assignment into an equality comparison", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="use \'!=\' to turn this compound assignment into an inequality comparison", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="use \'!=\' to turn this compound assignment into an inequality comparison", | [h]="use \'!=\' to turn this compound assignment into an inequality comparison", | ||
[ | [j]=i, | ||
[ | [k]="use \'\\!\\=\' to turn this compound assignment into an inequality comparison", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="conflicting attribute is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="conflicting attribute is here", | [h]="conflicting attribute is here", | ||
[ | [j]=i, | ||
[ | [k]="conflicting attribute is here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="conflicting prototype is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="conflicting prototype is here", | [h]="conflicting prototype is here", | ||
[ | [j]=i, | ||
[ | [k]="conflicting prototype is here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | [m]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="conflicting A here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="conflicting %0 here", | [h]="conflicting %0 here", | ||
[ | [j]=i, | ||
[ | [k]="conflicting (.*?) here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="... to a consteval declaration is not a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:pointer|reference) to a consteval declaration is not a constant expression", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Fc,1579695612,Qc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... heap allocated object that has been deleted", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... member A of union with ... is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Gb,1366986990,Fb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... mutable member A is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="... dereferenced null pointer is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Gb,1366986990,Fb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... dereferenced one-past-the-end pointer is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Gb,1366986990,Fb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... temporary is not allowed in a constant expression outside the expression that created the temporary", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="... ... is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Gb,1366986990,Fb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... object \'A\' whose value is not known", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="... element of array without known bound is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="... volatile ... is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:read of|read of|assignment to|increment of|decrement of) volatile (?:temporary|object (.*?)|member (.*?)) is not allowed in a constant expression", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Gb,1366986990,Fb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... volatile-qualified type A is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:read of|read of|assignment to|increment of|decrement of) volatile\\-qualified type (.*?) is not allowed in a constant expression", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Gb,1366986990,Fb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="cannot constant evaluate the result of adjusting alignment to A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="cannot constant evaluate the result of adjusting alignment to %0", | [h]="cannot constant evaluate the result of adjusting alignment to %0", | ||
[ | [j]=i, | ||
[ | [k]="cannot constant evaluate the result of adjusting alignment to (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="cannot constant evaluate whether run-time alignment is at least A", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="cannot constant evaluate whether run\\-time alignment is at least (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="requested alignment must be A or less for type B; C is invalid", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="requested alignment must be (.*?) or less for type (.*?); (.*?) is invalid", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="cannot refer to element A of ... in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="cannot refer to element (.*?) of (?:array of (.*?) element(?:|s)|non\\-array object) in a constant expression", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="... the base pointee object (A byte) is ... the asserted B byte", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="value of the aligned pointer (A) is not a multiple of the asserted B byte", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="value of the aligned pointer \\((.*?)\\) is not a multiple of the asserted (.*?) (?:byte|bytes)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="indeterminate value can only initialize an object of type \'unsigned char\'... or \'std::byte\'; A is invalid", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="indeterminate value can only initialize an object of type \'unsigned char\'(?:, \'char\',|) or \'std\\:\\:byte\'; (.*?) is invalid", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Kc,1562092093,Lc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="invalid type A is a ... of B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="invalid type (.*?) is a (?:member|base) of (.*?)", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Kc,1562092093,Lc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="bit_cast ... a ...... ... is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="bit_cast (?:from|to) a (?:|type with a )(?:union|pointer|member pointer|volatile|reference) (?:type|member) is not allowed in a constant expression", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Kc,1562092093,Lc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="value A cannot be represented in type B", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="value %1 cannot be represented in type %0", | [h]="value %1 cannot be represented in type %0", | ||
[ | [j]=i, | ||
[ | [k]="value (.*?) cannot be represented in type (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="constexpr bit_cast involving bit-field is not yet supported", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="constexpr bit_cast involving bit-field is not yet supported", | [h]="constexpr bit_cast involving bit-field is not yet supported", | ||
[ | [j]=i, | ||
[ | [k]="constexpr bit_cast involving bit\\-field is not yet supported", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Kc,1562092093,Lc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="constexpr bit_cast involving type A is not yet supported", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="constexpr bit_cast involving type %0 is not yet supported", | [h]="constexpr bit_cast involving type %0 is not yet supported", | ||
[ | [j]=i, | ||
[ | [k]="constexpr bit_cast involving type (.*?) is not yet supported", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Kc,1562092093,Lc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="previous return statement is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="previous return statement is here", | [h]="previous return statement is here", | ||
[ | [j]=i, | ||
[ | [k]="previous return statement is here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ab,1317436288,ub}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="in call to \'A\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="in call to \'%0\'", | [h]="in call to \'%0\'", | ||
[ | [j]=i, | ||
[ | [k]="in call to \'(.*?)\'", | ||
[ | [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"]={ | ||
[ | [b]="constexpr evaluation hit maximum call limit", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="constexpr evaluation hit maximum call limit", | [h]="constexpr evaluation hit maximum call limit", | ||
[ | [j]=i, | ||
[ | [k]="constexpr evaluation hit maximum call limit", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="(skipping A callB in backtrace; use -fconstexpr-backtrace-limit=0 to see all)", | ||
[ | [e]=d, | ||
[ | [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)", | ||
[ | [j]=i, | ||
[ | [k]="\\(skipping (.*?) call(.*?) in backtrace; use \\-fconstexpr\\-backtrace\\-limit\\=0 to see all\\)", | ||
[ | [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"]={ | ||
[ | [b]="comparison of pointer to virtual member function A has unspecified value", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="comparison of pointer to virtual member function (.*?) has unspecified value", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="both arms of conditional operator are unable to produce a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="both arms of conditional operator are unable to produce a constant expression", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={"17100bad0ac1",1329360394,"constexpr tidyups:"}, | [m]={"17100bad0ac1",1329360394,"constexpr tidyups:"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="construction of individual component of complex number is not yet supported in constant expressions", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="construction of individual component of complex number is not yet supported in constant expressions", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="member not initialized by constructor", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="member not initialized by constructor", | [h]="member not initialized by constructor", | ||
[ | [j]=i, | ||
[ | [k]="member not initialized by constructor", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ab,1317436288,ub}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="\'std::allocator<...>::deallocate\' used to delete a null pointer", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="\'std::allocator<...>::deallocate\' used to delete a null pointer", | [h]="\'std::allocator<...>::deallocate\' used to delete a null pointer", | ||
[ | [j]=i, | ||
[ | [k]="\'std\\:\\:allocator\\<\\.\\.\\.\\>\\:\\:deallocate\' used to delete a null pointer", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="delete of object with dynamic type A through pointer to base class type B with non-virtual destructor", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="delete of object with dynamic type (.*?) through pointer to base class type (.*?) with non\\-virtual destructor", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="delete of pointer \'A\' that does not point to a heap-allocated object", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="delete of pointer \'(.*?)\' that does not point to a heap\\-allocated object", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="delete of pointer... \'A\' ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="delete of pointer(?: to subobject|) \'(.*?)\' (?:|that does not point to complete object)", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="constexpr evaluation exceeded maximum depth of A calls", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="constexpr evaluation exceeded maximum depth of %0 calls", | [h]="constexpr evaluation exceeded maximum depth of %0 calls", | ||
[ | [j]=i, | ||
[ | [k]="constexpr evaluation exceeded maximum depth of (.*?) calls", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={ac,1323758398,Qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="destruction of individual component of complex number is not yet supported in constant expressions", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="destruction of individual component of complex number is not yet supported in constant expressions", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="destroying object \'A\' whose lifetime has already ended", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="destroying object \'%0\' whose lifetime has already ended", | [h]="destroying object \'%0\' whose lifetime has already ended", | ||
[ | [j]=i, | ||
[ | [k]="destroying object \'(.*?)\' whose lifetime has already ended", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="delete of pointer that has already been deleted", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="delete of pointer that has already been deleted", | [h]="delete of pointer that has already been deleted", | ||
[ | [j]=i, | ||
[ | [k]="delete of pointer that has already been deleted", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="destruction of object that is already being destroyed", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="destruction of object that is already being destroyed", | [h]="destruction of object that is already being destroyed", | ||
[ | [j]=i, | ||
[ | [k]="destruction of object that is already being destroyed", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{data member %1|base class %2}0 declared here", | [h]="%select{data member %1|base class %2}0 declared here", | ||
[ | [j]=i, | ||
[ | [k]="(?:data member (.*?)|base class (.*?)) declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Zb,1567434909,Yb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... to ...heap-allocated object is not a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:pointer|reference) to (?:|subobject of )heap\\-allocated object is not a constant expression", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="heap allocation performed here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="heap allocation performed here", | [h]="heap allocation performed here", | ||
[ | [j]=i, | ||
[ | [k]="heap allocation performed here", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="reference dynamic_cast failed: ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="cannot evaluate this expression if rounding mode is dynamic", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="cannot evaluate this expression if rounding mode is dynamic", | [h]="cannot evaluate this expression if rounding mode is dynamic", | ||
[ | [j]=i, | ||
[ | [k]="cannot evaluate this expression if rounding mode is dynamic", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="floating point arithmetic produces ...", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="floating point arithmetic produces %select{an infinity|a NaN}0", | [h]="floating point arithmetic produces %select{an infinity|a NaN}0", | ||
[ | [j]=i, | ||
[ | [k]="floating point arithmetic produces (?:an infinity|a NaN)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="compile time floating point arithmetic suppressed in strict evaluation modes", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="compile time floating point arithmetic suppressed in strict evaluation modes", | [h]="compile time floating point arithmetic suppressed in strict evaluation modes", | ||
[ | [j]=i, | ||
[ | [k]="compile time floating point arithmetic suppressed in strict evaluation modes", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="function parameter A with unknown value cannot be used in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="function parameter (.*?) with unknown value cannot be used in a constant expression", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="constexpr evaluation hit maximum heap allocation limit", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="constexpr evaluation hit maximum heap allocation limit", | [h]="constexpr evaluation hit maximum heap allocation limit", | ||
[ | [j]=i, | ||
[ | [k]="constexpr evaluation hit maximum heap allocation limit", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="in implicit initialization for inherited constructor of A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="in implicit initialization for inherited constructor of %0", | [h]="in implicit initialization for inherited constructor of %0", | ||
[ | [j]=i, | ||
[ | [k]="in implicit initialization for inherited constructor of (.*?)", | ||
[ | [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"]={ | ||
[ | [b]="requested alignment A is not a positive power of two", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="requested alignment %0 is not a positive power of two", | [h]="requested alignment %0 is not a positive power of two", | ||
[ | [j]=i, | ||
[ | [k]="requested alignment (.*?) is not a positive power of two", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="... is not allowed in a constant expression...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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||)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="cannot cast object of dynamic type A to type B", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="cannot cast object of dynamic type %0 to type %1", | [h]="cannot cast object of dynamic type %0 to type %1", | ||
[ | [j]=i, | ||
[ | [k]="cannot cast object of dynamic type (.*?) to type (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="... ... A cannot be used in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:non\\-constexpr|undefined) (?:function|constructor) (.*?) cannot be used in a constant expression", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={ac,1323758398,Qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="constructor inherited from base class A cannot be used in a constant expression; derived class cannot be implicitly initialized", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="constructor inherited from base class (.*?) cannot be used in a constant expression; derived class cannot be implicitly initialized", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="... to ...... is not allowed in a template argument", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:pointer|reference) to (?:|subobject of )(?:type_info object|string literal|temporary object|predefined \'(.*?)\' variable) is not allowed in a template argument", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="cast from A is not allowed in a constant expression ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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 (.*?))", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={rb,1662843785,sb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="shift count A >= width of type B (C bitD)", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="shift count %0 >= width of type %1 (%2 bit%s2)", | [h]="shift count %0 >= width of type %1 (%2 bit%s2)", | ||
[ | [j]=i, | ||
[ | [k]="shift count (.*?) \\>\\= width of type (.*?) \\((.*?) bit(.*?)\\)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="... ... whose storage duration has ended", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="comparison of addresses of literals has unspecified value", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="comparison of addresses of literals has unspecified value", | [h]="comparison of addresses of literals has unspecified value", | ||
[ | [j]=i, | ||
[ | [k]="comparison of addresses of literals has unspecified value", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={rb,1662843785,sb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="signed left shift discards bits", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="signed left shift discards bits", | [h]="signed left shift discards bits", | ||
[ | [j]=i, | ||
[ | [k]="signed left shift discards bits", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="left shift of negative value A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="left shift of negative value %0", | [h]="left shift of negative value %0", | ||
[ | [j]=i, | ||
[ | [k]="left shift of negative value (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="read of incomplete type A is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="read of incomplete type (.*?) is not allowed in a constant expression", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="read of non-const variable A is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="read of non\\-const variable (.*?) is not allowed in a constant expression", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="read of non-constexpr variable A is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="read of non\\-constexpr variable (.*?) is not allowed in a constant expression", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="read of variable A of non-integral, non-enumeration type B is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="read of variable (.*?) of non\\-integral, non\\-enumeration type (.*?) is not allowed in a constant expression", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="comparison against pointer to weak member A can only be performed at runtime", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="comparison against pointer to weak member (.*?) can only be performed at runtime", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={rb,1662843785,sb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="constant evaluation of A on array of type B is not supported; only arrays of narrow character types can be searched", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="constant evaluation of (.*?) on array of type (.*?) is not supported; only arrays of narrow character types can be searched", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Fc,1579695612,Qc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="constant evaluation of A between arrays of types B and C is not supported; only arrays of narrow character types can be compared", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="constant evaluation of (.*?) between arrays of types (.*?) and (.*?) is not supported; only arrays of narrow character types can be compared", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Fc,1579695612,Qc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="cannot constant evaluate \'...\' between objects of incomplete type A", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="cannot constant evaluate \'(?:memcpy|memmove)\' between objects of incomplete type (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="cannot constant evaluate \'...\' between objects of non-trivially-copyable type A", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="cannot constant evaluate \'(?:memcpy|memmove)\' between objects of non\\-trivially\\-copyable type (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="... of \'...\' is A", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:source|destination) of \'(?:(?:memcpy|wmemcpy)|(?:memmove|wmemmove))\' is (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="\'...\' between overlapping memory regions", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="\'%select{memcpy|wmemcpy}0\' between overlapping memory regions", | [h]="\'%select{memcpy|wmemcpy}0\' between overlapping memory regions", | ||
[ | [j]=i, | ||
[ | [k]="\'(?:memcpy|wmemcpy)\' between overlapping memory regions", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="cannot constant evaluate \'...\' from object of type A to object of type B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="cannot constant evaluate \'(?:memcpy|memmove)\' from object of type (.*?) to object of type (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="\'...\' not supported: ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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 (.*?))", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="allocation performed here was not deallocated", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="allocation performed here was not deallocated(?:| \\(along with (.*?) other memory leak(.*?)\\))", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="modification of object of const-qualified type A is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="modification of object of const\\-qualified type (.*?) is not allowed in a constant expression", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Gb,1366986990,Fb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="a constant expression cannot modify an object that is visible outside that expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="a constant expression cannot modify an object that is visible outside that expression", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Gb,1366986990,Fb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="negative shift count A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="negative shift count %0", | [h]="negative shift count %0", | ||
[ | [j]=i, | ||
[ | [k]="negative shift count (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="dynamic memory allocation is not permitted in constant expressions until C++20", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="dynamic memory allocation is not permitted in constant expressions until C\\+\\+20", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="\'delete\' used to delete pointer to object allocated with \'std::allocator<...>::allocate\'", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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\'))", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="cannot allocate array; evaluated array bound A is negative", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="cannot allocate array; evaluated array bound %0 is negative", | [h]="cannot allocate array; evaluated array bound %0 is negative", | ||
[ | [j]=i, | ||
[ | [k]="cannot allocate array; evaluated array bound (.*?) is negative", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="call to ... A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="call to %select{placement|class-specific}0 %1", | [h]="call to %select{placement|class-specific}0 %1", | ||
[ | [j]=i, | ||
[ | [k]="call to (?:placement|class\\-specific) (.*?)", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="cannot allocate memory of ... type A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="cannot allocate memory of %select{incomplete|function}0 type %1", | [h]="cannot allocate memory of %select{incomplete|function}0 type %1", | ||
[ | [j]=i, | ||
[ | [k]="cannot allocate memory of (?:incomplete|function) type (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="this placement new expression is not yet supported in constant expressions", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="this placement new expression is not yet supported in constant expressions", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="cannot allocate array; evaluated array bound A is too large", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="cannot allocate array; evaluated array bound %0 is too large", | [h]="cannot allocate array; evaluated array bound %0 is too large", | ||
[ | [j]=i, | ||
[ | [k]="cannot allocate array; evaluated array bound (.*?) is too large", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="cannot allocate array; evaluated array bound A is too small to hold B explicitly initialized elements", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="cannot allocate array; evaluated array bound (.*?) is too small to hold (.*?) explicitly initialized elements", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Q,1569547607,R}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="cannot allocate untyped memory in a constant expression; use \'std::allocator<T>::allocate\' to allocate memory of type \'T\'", | ||
[ | [e]=d, | ||
[ | [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\'", | ||
[ | [j]=i, | ||
[ | [k]="cannot allocate untyped memory in a constant expression; use \'std\\:\\:allocator\\<T\\>\\:\\:allocate\' to allocate memory of type \'T\'", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="control reached end of constexpr function", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="control reached end of constexpr function", | [h]="control reached end of constexpr function", | ||
[ | [j]=i, | ||
[ | [k]="control reached end of constexpr function", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="... to ...... is not a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:pointer|reference) to (?:|subobject of )(?:temporary|(.*?)) is not a constant expression", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={ac,1323758398,Qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="non-literal type A cannot be used in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="non\\-literal type (.*?) cannot be used in a constant expression", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={ac,1323758398,Qb}, | ||
[n]={{ | [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"]={ | ||
[ | [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", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="address of non\\-static constexpr variable (.*?) may differ on each invocation of the enclosing function; add \'static\' to give it a constant address", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="\'A\' evaluates to a null function pointer", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="\'%0\' evaluates to a null function pointer", | [h]="\'%0\' evaluates to a null function pointer", | ||
[ | [j]=i, | ||
[ | [k]="\'(.*?)\' evaluates to a null function pointer", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={rb,1662843785,sb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="cannot ... null pointer", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="allocated size A is not a multiple of size B of element type C", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="allocated size (.*?) is not a multiple of size (.*?) of element type (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="value A is outside the range of representable values of type B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="value (.*?) is outside the range of representable values of type (.*?)", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={ac,1323758398,Qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="dereferenced pointer past the end of ...... is not a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="dereferenced pointer past the end of (?:|subobject of )(?:temporary|(.*?)) is not a constant expression", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={ac,1323758398,Qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="cannot ... pointer past the end of object", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="placement new would change type of storage from A to B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="placement new would change type of storage from (.*?) to (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="comparison of addresses of subobjects of different base classes has unspecified value", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="comparison of addresses of subobjects of different base classes has unspecified value", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={"84f6dcf2b52c",1328145417,"constexpr:"}, | [m]={"84f6dcf2b52c",1328145417,"constexpr:"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="comparison of address of base class subobject A of class B to field C has unspecified value", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="comparison of address of base class subobject (.*?) of class (.*?) to field (.*?) has unspecified value", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={"84f6dcf2b52c",1328145417,"constexpr:"}, | [m]={"84f6dcf2b52c",1328145417,"constexpr:"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="comparison of address of fields A and B of C with differing access specifiers (D vs E) has unspecified value", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="comparison of address of fields (.*?) and (.*?) of (.*?) with differing access specifiers \\((.*?) vs (.*?)\\) has unspecified value", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={"84f6dcf2b52c",1328145417,"constexpr:"}, | [m]={"84f6dcf2b52c",1328145417,"constexpr:"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="comparison against pointer \'A\' that points past the end of a complete object has unspecified value", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="comparison against pointer \'(.*?)\' that points past the end of a complete object has unspecified value", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={rb,1662843785,sb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="comparison between \'A\' and \'B\' has unspecified value", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="comparison between \'%0\' and \'%1\' has unspecified value", | [h]="comparison between \'%0\' and \'%1\' has unspecified value", | ||
[ | [j]=i, | ||
[ | [k]="comparison between \'(.*?)\' and \'(.*?)\' has unspecified value", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="comparison of pointers \'A\' and \'B\' to unrelated zero-sized objects", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="comparison of pointers \'(.*?)\' and \'(.*?)\' to unrelated zero\\-sized objects", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={rb,1662843785,sb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="comparison of numeric address \'A\' with pointer \'B\' can only be performed at runtime", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="comparison of numeric address \'(.*?)\' with pointer \'(.*?)\' can only be performed at runtime", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={rb,1662843785,sb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="subtracted pointers are not elements of the same array", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="subtracted pointers are not elements of the same array", | [h]="subtracted pointers are not elements of the same array", | ||
[ | [j]=i, | ||
[ | [k]="subtracted pointers are not elements of the same array", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={"84f6dcf2b52c",1328145417,"constexpr:"}, | [m]={"84f6dcf2b52c",1328145417,"constexpr:"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="subtraction of pointers to type A of zero size", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="subtraction of pointers to type %0 of zero size", | [h]="subtraction of pointers to type %0 of zero size", | ||
[ | [j]=i, | ||
[ | [k]="subtraction of pointers to type (.*?) of zero size", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="comparison against address of weak declaration \'A\' can only be performed at runtime", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="comparison against address of weak declaration \'(.*?)\' can only be performed at runtime", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={rb,1662843785,sb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... object \'A\' whose dynamic type is not constant", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:|||||virtual function called on|dynamic_cast applied to|typeid applied to|construction of|destruction of) object \'(.*?)\' whose dynamic type is not constant", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="pseudo-destructor call is not permitted in constant expressions until C++20", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="pseudo\\-destructor call is not permitted in constant expressions until C\\+\\+20", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="pure virtual function A called", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="pure virtual function %q0 called", | [h]="pure virtual function %q0 called", | ||
[ | [j]=i, | ||
[ | [k]="pure virtual function (.*?) called", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="control flows through the definition of a ... variable", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="control flows through the definition of a (?:static|thread_local) variable", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="constexpr evaluation hit maximum step limit; possible infinite loop?", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="constexpr evaluation hit maximum step limit; possible infinite loop?", | [h]="constexpr evaluation hit maximum step limit; possible infinite loop?", | ||
[ | [j]=i, | ||
[ | [k]="constexpr evaluation hit maximum step limit; possible infinite loop\\?", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="this use of statement expressions is not supported in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="this use of statement expressions is not supported in a constant expression", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="subobject declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="subobject declared here", | [h]="subobject declared here", | ||
[ | [j]=i, | ||
[ | [k]="subobject declared here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="temporary created here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="temporary created here", | [h]="temporary created here", | ||
[ | [j]=i, | ||
[ | [k]="temporary created here", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={ac,1323758398,Qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="...use of \'this\' pointer is only allowed within the evaluation of a call to a \'constexpr\' member function", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:|implicit )use of \'this\' pointer is only allowed within the evaluation of a call to a \'constexpr\' member function", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="typeid applied to expression of polymorphic type A is not allowed in a constant expression in C++ standards before C++20", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="typeid applied to expression of polymorphic type (.*?) is not allowed in a constant expression in C\\+\\+ standards before C\\+\\+20", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="subobject ...A is not initialized", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="subobject %select{of type |}0%1 is not initialized", | [h]="subobject %select{of type |}0%1 is not initialized", | ||
[ | [j]=i, | ||
[ | [k]="subobject (?:of type |)(.*?) is not initialized", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="constructor of base class A is not called", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="constructor of base class %0 is not called", | [h]="constructor of base class %0 is not called", | ||
[ | [j]=i, | ||
[ | [k]="constructor of base class (.*?) is not called", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="assignment would change active union member during the initialization of a different member of the same union", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="assignment would change active union member during the initialization of a different member of the same union", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Fc,1579695612,Qc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="indexing of array without known bound is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="indexing of array without known bound is not allowed in a constant expression", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="non-trivial destruction of type A in a constant expression is not supported", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="non\\-trivial destruction of type (.*?) in a constant expression is not supported", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="flexible array initialization is not yet supported", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="flexible array initialization is not yet supported", | [h]="flexible array initialization is not yet supported", | ||
[ | [j]=i, | ||
[ | [k]="flexible array initialization is not yet supported", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Hb,1643408541,Eb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="type A has unexpected layout", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="type %0 has unexpected layout", | [h]="type %0 has unexpected layout", | ||
[ | [j]=i, | ||
[ | [k]="type (.*?) has unexpected layout", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Fc,1579695612,Qc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="non-trivial destruction of lifetime-extended temporary with type A used in the result of a constant expression is not yet supported", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="non\\-trivial destruction of lifetime\\-extended temporary with type (.*?) used in the result of a constant expression is not yet supported", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="array-to-pointer decay of array member without known bound is not supported", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="array\\-to\\-pointer decay of array member without known bound is not supported", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="use of reference outside its lifetime is not allowed in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="use of reference outside its lifetime is not allowed in a constant expression", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="initializer of A is not a constant expression", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="initializer of %0 is not a constant expression", | [h]="initializer of %0 is not a constant expression", | ||
[ | [j]=i, | ||
[ | [k]="initializer of (.*?) is not a constant expression", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="initializer of A is unknown", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="initializer of %0 is unknown", | [h]="initializer of %0 is unknown", | ||
[ | [j]=i, | ||
[ | [k]="initializer of (.*?) is unknown", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="initializer of weak variable A is not considered constant because it may be different at runtime", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="initializer of weak variable (.*?) is not considered constant because it may be different at runtime", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="cannot construct object of type A with virtual base class in a constant expression", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="cannot construct object of type (.*?) with virtual base class in a constant expression", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="virtual base class declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="virtual base class declared here", | [h]="virtual base class declared here", | ||
[ | [j]=i, | ||
[ | [k]="virtual base class declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ab,1317436288,ub}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="cannot evaluate call to virtual function in a constant expression in C++ standards before C++20", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="cannot evaluate call to virtual function in a constant expression in C\\+\\+ standards before C\\+\\+20", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="comparison between unequal pointers to void has unspecified result", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="comparison between unequal pointers to void has unspecified result", | [h]="comparison between unequal pointers to void has unspecified result", | ||
[ | [j]=i, | ||
[ | [k]="comparison between unequal pointers to void has unspecified result", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="volatile ... here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="volatile %select{temporary created|object declared|member declared}0 here", | [h]="volatile %select{temporary created|object declared|member declared}0 here", | ||
[ | [j]=i, | ||
[ | [k]="volatile (?:temporary created|object declared|member declared) here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="add the ... to the initializing declaration here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="add the (?:\'require_constant_initialization\' attribute|\'constinit\' specifier) to the initializing declaration here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Zb,1567434909,Yb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="variable declared constinit here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="variable declared constinit here", | [h]="variable declared constinit here", | ||
[ | [j]=i, | ||
[ | [k]="variable declared constinit here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Zb,1567434909,Yb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="while calculating associated constraint of template \'A\' here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="while calculating associated constraint of template \'%0\' here", | [h]="while calculating associated constraint of template \'%0\' here", | ||
[ | [j]=i, | ||
[ | [k]="while calculating associated constraint of template \'(.*?)\' here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | [m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="constraint depends on a previously diagnosed expression", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="constraint depends on a previously diagnosed expression", | [h]="constraint depends on a previously diagnosed expression", | ||
[ | [j]=i, | ||
[ | [k]="constraint depends on a previously diagnosed expression", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={fb,1625925174,nb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="while substituting template arguments into constraint expression here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="while substituting template arguments into constraint expression here", | [h]="while substituting template arguments into constraint expression here", | ||
[ | [j]=i, | ||
[ | [k]="while substituting template arguments into constraint expression here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Zb,1567434909,Yb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="type conversion function declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="type conversion function declared here", | [h]="type conversion function declared here", | ||
[ | [j]=i, | ||
[ | [k]="type conversion function declared here", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="use \'static\' to give inline function A internal linkage", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="use \'static\' to give inline function %0 internal linkage", | [h]="use \'static\' to give inline function %0 internal linkage", | ||
[ | [j]=i, | ||
[ | [k]="use \'static\' to give inline function (.*?) internal linkage", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="must be declared with \'noexcept\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="must be declared with \'noexcept\'", | [h]="must be declared with \'noexcept\'", | ||
[ | [j]=i, | ||
[ | [k]="must be declared with \'noexcept\'", | ||
[ | [l]=a, | ||
[c]= | [c]=Bc, | ||
[m]={ | [m]={mb,1582847864,jb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="call to A implicitly required by coroutine function here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="call to %0 implicitly required by coroutine function here", | [h]="call to %0 implicitly required by coroutine function here", | ||
[ | [j]=i, | ||
[ | [k]="call to (.*?) implicitly required by coroutine function here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="call to \'await_transform\' implicitly required by \'co_await\' here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="call to \'await_transform\' implicitly required by \'co_await\' here", | [h]="call to \'await_transform\' implicitly required by \'co_await\' here", | ||
[ | [j]=i, | ||
[ | [k]="call to \'await_transform\' implicitly required by \'co_await\' here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="call to \'...\' implicitly required by the ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="call to \'(?:initial_suspend|final_suspend)\' implicitly required by the (?:initial suspend point|final suspend point)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="covariant thunk required by A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="covariant thunk required by %0", | [h]="covariant thunk required by %0", | ||
[ | [j]=i, | ||
[ | [k]="covariant thunk required by (.*?)", | ||
[ | [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"]={ | ||
[ | [b]="conflicting __device__ function declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="conflicting __device__ function declared here", | [h]="conflicting __device__ function declared here", | ||
[ | [j]=i, | ||
[ | [k]="conflicting __device__ function declared here", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="const variable cannot be emitted on device side due to dynamic initialization", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="const variable cannot be emitted on device side due to dynamic initialization", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={lc,1615397021,vc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="the ... template parameter of A needs to be ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="the (?:1st|2nd|3rd) template parameter of (.*?) needs to be (?:a type|an integer or enum value)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={cc,1576908663,bc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A needs to have exactly B template parameters", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%0 needs to have exactly %1 template parameters", | [h]="%0 needs to have exactly %1 template parameters", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) needs to have exactly (.*?) template parameters", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={cc,1576908663,bc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A needs to be instantiated from a class template with proper template arguments", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) needs to be instantiated from a class template with proper template arguments", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={cc,1576908663,bc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="host variable declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="host variable declared here", | [h]="host variable declared here", | ||
[ | [j]=i, | ||
[ | [k]="host variable declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={lc,1615397021,vc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="candidate template ignored: target attributes do not match", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="candidate template ignored: target attributes do not match", | [h]="candidate template ignored: target attributes do not match", | ||
[ | [j]=i, | ||
[ | [k]="candidate template ignored\\: target attributes do not match", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="remove \'u8\' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF-8", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="remove \'u8\' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF\\-8", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={cc,1576908663,bc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A B is hidden by a non-type declaration of C here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) (.*?) is hidden by a non\\-type declaration of (.*?) here", | ||
[ | [l]=a, | ||
[c]= | [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;"},{ | [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"]={ | ||
[ | [b]="annotate ... with an availability attribute to silence this warning", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="annotate (?:(.*?)|anonymous (.*?)) with an availability attribute to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"8b352c4d9d82",1502740152,"[Sema] Improve some -Wunguarded-availability diagnostics"}, | [m]={"8b352c4d9d82",1502740152,"[Sema] Improve some -Wunguarded-availability diagnostics"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="this declaration is not a prototype; add ... to make it ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="this declaration is not a prototype; add (?:\'void\'|parameter declarations) to make it (?:a prototype for a zero\\-parameter function|one)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="declared here", | [h]="declared here", | ||
[ | [j]=i, | ||
[ | [k]="declared here", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Jb,1236199783,Kb}, | ||
[n]={ | [n]={ | ||
[1]={ | [1]={q,2123,"static void NoteLValueLocation(EvalInfo &Info, APValue::LValueBase Base) {\n if (VD)\n Info.Note(VD->getLocation(), diag::note_declared_at);"}, | ||
[2]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [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]={ | [16]={A,232,"bool CheckMutable(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n S.Note(Field->getLocation(), diag::note_declared_at);"}, | ||
[17]={ | [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]={ | [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]={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]={ | [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"]={ | ||
[ | [b]="function is a coroutine due to use of \'A\' here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="function is a coroutine due to use of \'%0\' here", | [h]="function is a coroutine due to use of \'%0\' here", | ||
[ | [j]=i, | ||
[ | [k]="function is a coroutine due to use of \'(.*?)\' here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="declared ... here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="declared %select{\'returns_nonnull\'|\'nonnull\'}0 here", | [h]="declared %select{\'returns_nonnull\'|\'nonnull\'}0 here", | ||
[ | [j]=i, | ||
[ | [k]="declared (?:\'returns_nonnull\'|\'nonnull\') here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="required by ... here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="required by (?:\'require_constant_initialization\' attribute|\'constinit\' specifier) here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="deduced non-type template argument does not have the same type as the corresponding template parameter (A vs B)", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="deduced non\\-type template argument does not have the same type as the corresponding template parameter(?: \\((.*?) vs (.*?)\\)|)", | ||
[ | [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"]={ | ||
[ | [b]="during template argument deduction for ... template ...A B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="during template argument deduction for (?:class|variable) template (?:partial specialization |)(.*?) (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="deduction guide declared A by intervening access specifier", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="deduction guide declared %0 by intervening access specifier", | [h]="deduction guide declared %0 by intervening access specifier", | ||
[ | [j]=i, | ||
[ | [k]="deduction guide declared (.*?) by intervening access specifier", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="member template declared A here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="member template declared %0 here", | [h]="member template declared %0 here", | ||
[ | [j]=i, | ||
[ | [k]="member template declared (.*?) here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="in instantiation of default argument for \'A\' required here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="in instantiation of default argument for \'%0\' required here", | [h]="in instantiation of default argument for \'%0\' required here", | ||
[ | [j]=i, | ||
[ | [k]="in instantiation of default argument for \'(.*?)\' required here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="default argument declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="default argument declared here", | [h]="default argument declared here", | ||
[ | [j]=i, | ||
[ | [k]="default argument declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="in instantiation of default function argument expression for \'A\' required here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="in instantiation of default function argument expression for \'(.*?)\' required here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="default member initializer declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="default member initializer declared here", | [h]="default member initializer declared here", | ||
[ | [j]=i, | ||
[ | [k]="default member initializer declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={mb,1582847864,jb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="defaulted A is implicitly deleted because implied ...comparison ...is ambiguous", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="defaulted (.*?) is implicitly deleted because implied (?:|\'\\=\\=\' |\'\\<\' )comparison (?:|for member (.*?) |for base class (.*?) )is ambiguous", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={tb,1573070592,Bb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="defaulted A is implicitly deleted because it would invoke a deleted comparison function...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="defaulted (.*?) is implicitly deleted because it would invoke a deleted comparison function(?:| for member (.*?)| for base class (.*?))", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={tb,1573070592,Bb}, | ||
[n]={{ | [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"]={ | ||
[ | [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", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."}, | [m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="selected \'operator<=>\' for ... A declared here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="selected \'operator\\<\\=\\>\' for (?:|member|base class) (.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."}, | [m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... A declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{|member|base class}0 %1 declared here", | [h]="%select{|member|base class}0 %1 declared here", | ||
[ | [j]=i, | ||
[ | [k]="(?:|member|base class) (.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="defaulted A is implicitly deleted because it would invoke a ... B...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="defaulted (.*?) is implicitly deleted because it would invoke a (?:private|protected) (.*?)(?: member of (.*?)| member of (.*?) to compare member (.*?)| to compare base class (.*?))", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."}, | [m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="defaulted A is implicitly deleted because there is no viable ... for ...B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="defaulted (.*?) is implicitly deleted because there is no viable (?:three\\-way comparison function|\'operator\\=\\=\') for (?:|member |base class )(.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={tb,1573070592,Bb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="three-way comparison cannot be synthesized because there is no viable function for ... comparison", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="three\\-way comparison cannot be synthesized because there is no viable function for (?:\'\\=\\=\'|\'\\<\') comparison", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={tb,1573070592,Bb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="non-constexpr comparison function would be used to compare ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="non\\-constexpr comparison function would be used to compare (?:|member (.*?)|base class (.*?))", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={tb,1573070592,Bb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="non-constexpr comparison function declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="non-constexpr comparison function declared here", | [h]="non-constexpr comparison function declared here", | ||
[ | [j]=i, | ||
[ | [k]="non\\-constexpr comparison function declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={tb,1573070592,Bb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="defaulted A is implicitly deleted because this non-rewritten comparison function would be the best match for the comparison", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="defaulted (.*?) is implicitly deleted because this non\\-rewritten comparison function would be the best match for the comparison", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={tb,1573070592,Bb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="defaulted A is implicitly deleted because a builtin comparison function using this conversion would be the best match for the comparison", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="defaulted (.*?) is implicitly deleted because a builtin comparison function using this conversion would be the best match for the comparison", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={lc,1615397021,vc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="defaulted A is implicitly deleted because class B has a reference member", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="defaulted (.*?) is implicitly deleted because class (.*?) has a reference member", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={tb,1573070592,Bb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="defaulted A is implicitly deleted because B is a ... with variant members", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="defaulted (.*?) is implicitly deleted because (.*?) is a (?:union\\-like class|union) with variant members", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={tb,1573070592,Bb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A defined here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%0 defined here", | [h]="%0 defined here", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) defined here", | ||
[ | [l]=a, | ||
[c]= | [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;"},{ | [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"]={ | ||
[ | [b]="conversion to pointer type A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="conversion to pointer type %0", | [h]="conversion to pointer type %0", | ||
[ | [j]=i, | ||
[ | [k]="conversion to pointer type (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="qualify call to silence this warning", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="qualify call to silence this warning", | [h]="qualify call to silence this warning", | ||
[ | [j]=i, | ||
[ | [k]="qualify call to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="... assignment operator of A is implicitly deleted because field B is of ... type C", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:copy|move) assignment operator of (.*?) is implicitly deleted because field (.*?) is of (?:reference|const\\-qualified) type (.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ub,1333140808,Vb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="copy constructor of A is implicitly deleted because field B is of rvalue reference type C", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="copy constructor of (.*?) is implicitly deleted because field (.*?) is of rvalue reference type (.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ub,1333140808,Vb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="copy ... is implicitly deleted because A has a user-declared move ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="copy (?:constructor|assignment operator) is implicitly deleted because (.*?) has a user\\-declared move (?:constructor|assignment operator)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ub,1333140808,Vb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... A is implicitly deleted because all ... are const-qualified", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:default constructor of|constructor inherited by) (.*?) is implicitly deleted because all (?:data members|data members of an anonymous union member) are const\\-qualified", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ub,1333140808,Vb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... A is implicitly deleted because field B of ... type C would not be initialized", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:default constructor of|constructor inherited by) (.*?) is implicitly deleted because field (.*?) of (?:reference|const\\-qualified) type (.*?) would not be initialized", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ub,1333140808,Vb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="virtual destructor requires an unambiguous, accessible \'operator delete\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="virtual destructor requires an unambiguous, accessible \'operator delete\'", | [h]="virtual destructor requires an unambiguous, accessible \'operator delete\'", | ||
[ | [j]=i, | ||
[ | [k]="virtual destructor requires an unambiguous, accessible \'operator delete\'", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ub,1333140808,Vb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... A is implicitly deleted because ... ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ub,1333140808,Vb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="function is implicitly deleted because its declared type does not match the type of an implicit ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="candidate ignored: ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="candidate ignored\\: (?:not a function template|not a member of the enclosing namespace; did you mean to explicitly qualify the specialization\\?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="must qualify identifier to find this declaration in dependent base class", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="must qualify identifier to find this declaration in dependent base class", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={pb,1590001902,qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="template parameter is used in default argument declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="template parameter is used in default argument declared here", | [h]="template parameter is used in default argument declared here", | ||
[ | [j]=i, | ||
[ | [k]="template parameter is used in default argument declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="add an explicit capture of \'this\' to capture \'*this\' by reference", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="add an explicit capture of \'this\' to capture \'\\*this\' by reference", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="first non-designated initializer is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="first non-designated initializer is here", | [h]="first non-designated initializer is here", | ||
[ | [j]=i, | ||
[ | [k]="first non\\-designated initializer is here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="non-type declaration found by destructor name lookup", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="non-type declaration found by destructor name lookup", | [h]="non-type declaration found by destructor name lookup", | ||
[ | [j]=i, | ||
[ | [k]="non\\-type declaration found by destructor name lookup", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="type A found by destructor name lookup", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="type %0 found by destructor name lookup", | [h]="type %0 found by destructor name lookup", | ||
[ | [j]=i, | ||
[ | [k]="type (.*?) found by destructor name lookup", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="direct member declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="direct member declared here", | [h]="direct member declared here", | ||
[ | [j]=i, | ||
[ | [k]="direct member declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={pb,1590001902,qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="direct method A declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="direct method %0 declared here", | [h]="direct method %0 declared here", | ||
[ | [j]=i, | ||
[ | [k]="direct method (.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="previous command \'...A\' here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="previous command \'%select{\\|@}0%1\' here", | [h]="previous command \'%select{\\|@}0%1\' here", | ||
[ | [j]=i, | ||
[ | [k]="previous command \'(?:\\\\|@)(.*?)\' here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="previous command \'...A\' (an alias of \'\\B\') here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="previous command \'%select{\\|@}0%1\' (an alias of \'\\%2\') here", | [h]="previous command \'%select{\\|@}0%1\' (an alias of \'\\%2\') here", | ||
[ | [j]=i, | ||
[ | [k]="previous command \'(?:\\\\|@)(.*?)\' \\(an alias of \'\\\\(.*?)\'\\) here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="end tag", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="end tag", | [h]="end tag", | ||
[ | [j]=i, | ||
[ | [k]="end tag", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="HTML tag started here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="HTML tag started here", | [h]="HTML tag started here", | ||
[ | [j]=i, | ||
[ | [k]="HTML tag started here", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="did you mean \'A\'?", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="did you mean \'%0\'?", | [h]="did you mean \'%0\'?", | ||
[ | [j]=i, | ||
[ | [k]="did you mean \'(.*?)\'\\?", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]=xc, | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]= | [h]=xc, | ||
[ | [j]=i, | ||
[ | [k]=xc, | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="did you mean \'A\'?", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="did you mean \'%0\'?", | [h]="did you mean \'%0\'?", | ||
[ | [j]=i, | ||
[ | [k]="did you mean \'(.*?)\'\\?", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]=xc, | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]= | [h]=xc, | ||
[ | [j]=i, | ||
[ | [k]=xc, | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet", | [h]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet", | ||
[ | [j]=i, | ||
[ | [k]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet", | ||
[ | [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"]={ | ||
[ | [b]="available multilibs are:A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="available multilibs are:%0", | [h]="available multilibs are:%0", | ||
[ | [j]=i, | ||
[ | [k]="available multilibs are\\:(.*?)", | ||
[ | [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"]={ | ||
[ | [b]="diagnostic msg: A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="diagnostic msg: %0", | [h]="diagnostic msg: %0", | ||
[ | [j]=i, | ||
[ | [k]="diagnostic msg\\: (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="was searched for in the directory: A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="was searched for in the directory: %0", | [h]="was searched for in the directory: %0", | ||
[ | [j]=i, | ||
[ | [k]="was searched for in the directory\\: (.*?)", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={"c92ca91472b9",1514656766,"Enable configuration files in clang"}, | [m]={"c92ca91472b9",1514656766,"Enable configuration files in clang"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="the last \'/TC\' or \'/TP\' option takes precedence over earlier instances", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="the last \'\\/TC\' or \'\\/TP\' option takes precedence over earlier instances", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="use \'A\'... for \'B\' standard", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="use \'(.*?)\'(?:| or \'(.*?)\'|, \'(.*?)\', or \'(.*?)\'|, \'(.*?)\', \'(.*?)\', or \'(.*?)\') for \'(.*?)\' standard", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="-verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="\\-verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={"05e46484825f",1513391002,"[VerifyDiagnosticConsumer] support -verify=<prefixes>"}, | [m]={"05e46484825f",1513391002,"[VerifyDiagnosticConsumer] support -verify=<prefixes>"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="due to A being dllexported...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="due to (.*?) being dllexported(?:|; try compiling in C\\+\\+11 mode)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="asm operand name \"A\" first referenced here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="asm operand name \"%0\" first referenced here", | [h]="asm operand name \"%0\" first referenced here", | ||
[ | [j]=i, | ||
[ | [k]="asm operand name \"(.*?)\" first referenced here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="previous case defined here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="previous case defined here", | [h]="previous case defined here", | ||
[ | [j]=i, | ||
[ | [k]="previous case defined here", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Jb,1236199783,Kb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="element A also has value B", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="element %0 also has value %1", | [h]="element %0 also has value %1", | ||
[ | [j]=i, | ||
[ | [k]="element (.*?) also has value (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="put the semicolon on a separate line to silence this warning", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="put the semicolon on a separate line to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="remove parentheses to declare a variable", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="remove parentheses to declare a variable", | [h]="remove parentheses to declare a variable", | ||
[ | [j]=i, | ||
[ | [k]="remove parentheses to declare a variable", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="change this \',\' to a \';\' to call A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="change this \',\' to a \';\' to call %0", | [h]="change this \',\' to a \';\' to call %0", | ||
[ | [j]=i, | ||
[ | [k]="change this \',\' to a \';\' to call (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="replace parentheses with an initializer to declare a variable", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="replace parentheses with an initializer to declare a variable", | [h]="replace parentheses with an initializer to declare a variable", | ||
[ | [j]=i, | ||
[ | [k]="replace parentheses with an initializer to declare a variable", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="using declaration annotated with \'using_if_exists\' here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="using declaration annotated with \'using_if_exists\' here", | [h]="using declaration annotated with \'using_if_exists\' here", | ||
[ | [j]=i, | ||
[ | [k]="using declaration annotated with \'using_if_exists\' here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={lc,1615397021,vc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="type was declared read-only here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="type was declared read-only here", | [h]="type was declared read-only here", | ||
[ | [j]=i, | ||
[ | [k]="type was declared read\\-only here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={fb,1625925174,nb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump enters lifetime of block which captures a destructible C++ object", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="jump enters lifetime of block which captures a destructible C\\+\\+ object", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={wc,1310407494,yc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump enters lifetime of block which captures a C struct that is non-trivial to destroy", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="jump enters lifetime of block which captures a C struct that is non\\-trivial to destroy", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="jump enters lifetime of block which strongly captures a variable", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump enters lifetime of block which strongly captures a variable", | [h]="jump enters lifetime of block which strongly captures a variable", | ||
[ | [j]=i, | ||
[ | [k]="jump enters lifetime of block which strongly captures a variable", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={wc,1310407494,yc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump enters lifetime of block which weakly captures a variable", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump enters lifetime of block which weakly captures a variable", | [h]="jump enters lifetime of block which weakly captures a variable", | ||
[ | [j]=i, | ||
[ | [k]="jump enters lifetime of block which weakly captures a variable", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={wc,1310407494,yc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump enters lifetime of a compound literal that is non-trivial to destruct", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="jump enters lifetime of a compound literal that is non\\-trivial to destruct", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={cc,1576908663,bc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump enters a statement expression", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump enters a statement expression", | [h]="jump enters a statement expression", | ||
[ | [j]=i, | ||
[ | [k]="jump enters a statement expression", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"202191060602",1688720293,"[Clang] Diagnose jumps into statement expressions"}, | [m]={"202191060602",1688720293,"[Clang] Diagnose jumps into statement expressions"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%0 declared here", | [h]="%0 declared here", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"2afa8780d62a",1401279614,"Consolidate some note diagnostics"}, | [m]={"2afa8780d62a",1401279614,"Consolidate some note diagnostics"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="enum A was explicitly specialized here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="enum %0 was explicitly specialized here", | [h]="enum %0 was explicitly specialized here", | ||
[ | [j]=i, | ||
[ | [k]="enum (.*?) was explicitly specialized here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="remove extraneous parentheses around the comparison to silence this warning", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="remove extraneous parentheses around the comparison to silence this warning", | [h]="remove extraneous parentheses around the comparison to silence this warning", | ||
[ | [j]=i, | ||
[ | [k]="remove extraneous parentheses around the comparison to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="use \'=\' to turn this equality comparison into an assignment", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="use \'=\' to turn this equality comparison into an assignment", | [h]="use \'=\' to turn this equality comparison into an assignment", | ||
[ | [j]=i, | ||
[ | [k]="use \'\\=\' to turn this equality comparison into an assignment", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="declared here...", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="declared here%select{ in module \'%1\'|}0", | [h]="declared here%select{ in module \'%1\'|}0", | ||
[ | [j]=i, | ||
[ | [k]="declared here(?: in module \'(.*?)\'|)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="place parentheses around comparison expression to evaluate it first", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="place parentheses around comparison expression to evaluate it first", | [h]="place parentheses around comparison expression to evaluate it first", | ||
[ | [j]=i, | ||
[ | [k]="place parentheses around comparison expression to evaluate it first", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="in evaluation of exception specification for A needed here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="in evaluation of exception specification for %q0 needed here", | [h]="in evaluation of exception specification for %q0 needed here", | ||
[ | [j]=i, | ||
[ | [k]="in evaluation of exception specification for (.*?) needed here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="use \'A\' instead", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="use \'%0\' instead", | [h]="use \'%0\' instead", | ||
[ | [j]=i, | ||
[ | [k]="use \'(.*?)\' instead", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="jump exits scope of __block variable", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits scope of __block variable", | [h]="jump exits scope of __block variable", | ||
[ | [j]=i, | ||
[ | [k]="jump exits scope of __block variable", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={kb,1273625893,hb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits lifetime of block which captures a destructible C++ object", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="jump exits lifetime of block which captures a destructible C\\+\\+ object", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={wc,1310407494,yc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits lifetime of block which captures a C struct that is non-trivial to destroy", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="jump exits lifetime of block which captures a C struct that is non\\-trivial to destroy", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="jump exits lifetime of block which strongly captures a variable", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits lifetime of block which strongly captures a variable", | [h]="jump exits lifetime of block which strongly captures a variable", | ||
[ | [j]=i, | ||
[ | [k]="jump exits lifetime of block which strongly captures a variable", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={wc,1310407494,yc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits lifetime of block which weakly captures a variable", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits lifetime of block which weakly captures a variable", | [h]="jump exits lifetime of block which weakly captures a variable", | ||
[ | [j]=i, | ||
[ | [k]="jump exits lifetime of block which weakly captures a variable", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={wc,1310407494,yc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits scope of variable with __attribute__((cleanup))", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits scope of variable with __attribute__((cleanup))", | [h]="jump exits scope of variable with __attribute__((cleanup))", | ||
[ | [j]=i, | ||
[ | [k]="jump exits scope of variable with __attribute__\\(\\(cleanup\\)\\)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={kb,1273625893,hb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits lifetime of a compound literal that is non-trivial to destruct", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="jump exits lifetime of a compound literal that is non\\-trivial to destruct", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={cc,1576908663,bc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits catch block", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits catch block", | [h]="jump exits catch block", | ||
[ | [j]=i, | ||
[ | [k]="jump exits catch block", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={kb,1273625893,hb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits try block", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits try block", | [h]="jump exits try block", | ||
[ | [j]=i, | ||
[ | [k]="jump exits try block", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={kb,1273625893,hb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits scope of variable with non-trivial destructor", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits scope of variable with non-trivial destructor", | [h]="jump exits scope of variable with non-trivial destructor", | ||
[ | [j]=i, | ||
[ | [k]="jump exits scope of variable with non\\-trivial destructor", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={kb,1273625893,hb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits autoreleasepool block", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits autoreleasepool block", | [h]="jump exits autoreleasepool block", | ||
[ | [j]=i, | ||
[ | [k]="jump exits autoreleasepool block", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Sb,1308178962,Rb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits @catch block", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits @catch block", | [h]="jump exits @catch block", | ||
[ | [j]=i, | ||
[ | [k]="jump exits @catch block", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={kb,1273625893,hb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits @finally block", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits @finally block", | [h]="jump exits @finally block", | ||
[ | [j]=i, | ||
[ | [k]="jump exits @finally block", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={kb,1273625893,hb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits scope of __strong variable", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits scope of __strong variable", | [h]="jump exits scope of __strong variable", | ||
[ | [j]=i, | ||
[ | [k]="jump exits scope of __strong variable", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."}, | [m]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits @synchronized block", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits @synchronized block", | [h]="jump exits @synchronized block", | ||
[ | [j]=i, | ||
[ | [k]="jump exits @synchronized block", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={kb,1273625893,hb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits @try block", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits @try block", | [h]="jump exits @try block", | ||
[ | [j]=i, | ||
[ | [k]="jump exits @try block", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={kb,1273625893,hb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits scope of __weak variable", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits scope of __weak variable", | [h]="jump exits scope of __weak variable", | ||
[ | [j]=i, | ||
[ | [k]="jump exits scope of __weak variable", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."}, | [m]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits __except block", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits __except block", | [h]="jump exits __except block", | ||
[ | [j]=i, | ||
[ | [k]="jump exits __except block", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."}, | [m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits __finally block", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits __finally block", | [h]="jump exits __finally block", | ||
[ | [j]=i, | ||
[ | [k]="jump exits __finally block", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."}, | [m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits __try block", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="jump exits __try block", | [h]="jump exits __try block", | ||
[ | [j]=i, | ||
[ | [k]="jump exits __try block", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."}, | [m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="jump exits scope of lifetime-extended temporary with non-trivial destructor", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="jump exits scope of lifetime\\-extended temporary with non\\-trivial destructor", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="explicit ... declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="explicit %select{constructor|deduction guide}0 declared here", | [h]="explicit %select{constructor|deduction guide}0 declared here", | ||
[ | [j]=i, | ||
[ | [k]="explicit (?:constructor|deduction guide) declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="explicit instantiation candidate function A template here B", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="explicit instantiation candidate function %q0 template here %1", | [h]="explicit instantiation candidate function %q0 template here %1", | ||
[ | [j]=i, | ||
[ | [k]="explicit instantiation candidate function (.*?) template here (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="explicit instantiation definition is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="explicit instantiation definition is here", | [h]="explicit instantiation definition is here", | ||
[ | [j]=i, | ||
[ | [k]="explicit instantiation definition is here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="explicit instantiation refers here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="explicit instantiation refers here", | [h]="explicit instantiation refers here", | ||
[ | [j]=i, | ||
[ | [k]="explicit instantiation refers here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="while substituting explicitly-specified template arguments into function template A B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="while substituting explicitly\\-specified template arguments into function template (.*?) (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="\'template<>\' header not required for explicitly-specialized class A declared here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="\'template\\<\\>\' header not required for explicitly\\-specialized class (.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"65911498eff3",1258978305,"Tolerate extraneous \"template<>\" headers better, downgrading the"}, | [m]={"65911498eff3",1258978305,"Tolerate extraneous \"template<>\" headers better, downgrading the"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="export block begins here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="export block begins here", | [h]="export block begins here", | ||
[ | [j]=i, | ||
[ | [k]="export block begins here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="division by zero", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="division by zero", | [h]="division by zero", | ||
[ | [j]=i, | ||
[ | [k]="division by zero", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Jb,1236199783,Kb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="expression evaluates to \'A B C\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="expression evaluates to \'%0 %1 %2\'", | [h]="expression evaluates to \'%0 %1 %2\'", | ||
[ | [j]=i, | ||
[ | [k]="expression evaluates to \'(.*?) (.*?) (.*?)\'", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={fb,1625925174,nb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... type constraint \'A\' was not satisfied:", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{and|because}0 type constraint \'%1\' was not satisfied:", | [h]="%select{and|because}0 type constraint \'%1\' was not satisfied:", | ||
[ | [j]=i, | ||
[ | [k]="(?:and|because) type constraint \'(.*?)\' was not satisfied\\:", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={ob,1576172311,lb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... A does not satisfy B:", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{and|because}0 %1 does not satisfy %2:", | [h]="%select{and|because}0 %1 does not satisfy %2:", | ||
[ | [j]=i, | ||
[ | [k]="(?:and|because) (.*?) does not satisfy (.*?)\\:", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={ob,1576172311,lb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... \'A\' would be invalid: B", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{and|because}0 \'%1\' would be invalid: %2", | [h]="%select{and|because}0 \'%1\' would be invalid: %2", | ||
[ | [j]=i, | ||
[ | [k]="(?:and|because) \'(.*?)\' would be invalid\\: (.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={ob,1576172311,lb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... \'A\' would be invalid", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{and|because}0 \'%1\' would be invalid", | [h]="%select{and|because}0 \'%1\' would be invalid", | ||
[ | [j]=i, | ||
[ | [k]="(?:and|because) \'(.*?)\' would be invalid", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={ob,1576172311,lb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... \'A\' may throw an exception", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{and|because}0 \'%1\' may throw an exception", | [h]="%select{and|because}0 \'%1\' may throw an exception", | ||
[ | [j]=i, | ||
[ | [k]="(?:and|because) \'(.*?)\' may throw an exception", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={ob,1576172311,lb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... \'A\' would be invalid: B", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{and|because}0 \'%1\' would be invalid: %2", | [h]="%select{and|because}0 \'%1\' would be invalid: %2", | ||
[ | [j]=i, | ||
[ | [k]="(?:and|because) \'(.*?)\' would be invalid\\: (.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={ob,1576172311,lb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... \'A\' would be invalid", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{and|because}0 \'%1\' would be invalid", | [h]="%select{and|because}0 \'%1\' would be invalid", | ||
[ | [j]=i, | ||
[ | [k]="(?:and|because) \'(.*?)\' would be invalid", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={ob,1576172311,lb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="extern \"C\" language linkage specification begins here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="extern \"C\" language linkage specification begins here", | [h]="extern \"C\" language linkage specification begins here", | ||
[ | [j]=i, | ||
[ | [k]="extern \"C\" language linkage specification begins here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="declared ... here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="declared (?:in global scope|with C language linkage) here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="comma separating Objective-C messaging arguments", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="comma separating Objective-C messaging arguments", | [h]="comma separating Objective-C messaging arguments", | ||
[ | [j]=i, | ||
[ | [k]="comma separating Objective\\-C messaging arguments", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="did you forget \';\'?", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="did you forget \';\'?", | [h]="did you forget \';\'?", | ||
[ | [j]=i, | ||
[ | [k]="did you forget \';\'\\?", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="could not determine the original source location for A:B:C", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="could not determine the original source location for (.*?)\\:(.*?)\\:(.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="A (B) exceeds limit (C) in \'D\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%0 (%1) exceeds limit (%2) in \'%3\'", | [h]="%0 (%1) exceeds limit (%2) in \'%3\'", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) \\((.*?)\\) exceeds limit \\((.*?)\\) in \'(.*?)\'", | ||
[ | [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"]={ | ||
[ | [b]="instantiated into assembly here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="instantiated into assembly here", | [h]="instantiated into assembly here", | ||
[ | [j]=i, | ||
[ | [k]="instantiated into assembly here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="linking module \'A\': B", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="linking module \'%0\': %1", | [h]="linking module \'%0\': %1", | ||
[ | [j]=i, | ||
[ | [k]="linking module \'(.*?)\'\\: (.*?)", | ||
[ | [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"]={ | ||
[ | [b]="field designator refers here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="field designator refers here", | [h]="field designator refers here", | ||
[ | [j]=i, | ||
[ | [k]="field designator refers here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Jb,1236199783,Kb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A additional files entered using a total of BB of space", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) additional files entered using a total of (.*?)B of space", | ||
[ | [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"]={ | ||
[ | [b]="file entered A timeB using CB of space", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="file entered (.*?) time(.*?) using (.*?)B of space(?:| plus (.*?)B for macro expansions)", | ||
[ | [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"]={ | ||
[ | [b]="mark A as \'...\' to silence this warning", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="mark (.*?) as \'(?:final|sealed)\' to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"94f3f3e7f46a",1567276544,"[NFC] Fix for rL370594"}, | [m]={"94f3f3e7f46a",1567276544,"[NFC] Fix for rL370594"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="final overrider of A in B", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="final overrider of %q0 in %1", | [h]="final overrider of %q0 in %1", | ||
[ | [j]=i, | ||
[ | [k]="final overrider of (.*?) in (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="in first definition, possible difference is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="in first definition, possible difference is here", | [h]="in first definition, possible difference is here", | ||
[ | [j]=i, | ||
[ | [k]="in first definition, possible difference is here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="FIX-IT applied suggested code changes", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="FIX-IT applied suggested code changes", | [h]="FIX-IT applied suggested code changes", | ||
[ | [j]=i, | ||
[ | [k]="FIX\\-IT applied suggested code changes", | ||
[ | [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"]={ | ||
[ | [b]="FIX-IT unable to apply suggested code changes", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="FIX-IT unable to apply suggested code changes", | [h]="FIX-IT unable to apply suggested code changes", | ||
[ | [j]=i, | ||
[ | [k]="FIX\\-IT unable to apply suggested code changes", | ||
[ | [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"]={ | ||
[ | [b]="FIX-IT unable to apply suggested code changes in a macro", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="FIX\\-IT unable to apply suggested code changes in a macro", | ||
[ | [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"]={ | ||
[ | [b]="FIX-IT detected an error it cannot fix", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="FIX-IT detected an error it cannot fix", | [h]="FIX-IT detected an error it cannot fix", | ||
[ | [j]=i, | ||
[ | [k]="FIX\\-IT detected an error it cannot fix", | ||
[ | [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"]={ | ||
[ | [b]="initialized flexible array member A is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="initialized flexible array member %0 is here", | [h]="initialized flexible array member %0 is here", | ||
[ | [j]=i, | ||
[ | [k]="initialized flexible array member (.*?) is here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Jb,1236199783,Kb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="selected \'...\' ...A with iterator type B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="selected \'(?:begin|end)\' (?:function|template )(.*?) with iterator type (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="in implicit call to \'operator...\' for iterator of type A", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="in implicit call to \'operator(?:\\!\\=|\\*|\\+\\+)\' for iterator of type (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="member is not a candidate because range type A has no \'...\' member", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="member is not a candidate because range type (.*?) has no \'(?:end|begin)\' member", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="or insert whitespace before \':\' to use A as parameter name and have an empty entry in the selector", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="or insert whitespace before \'\\:\' to use (.*?) as parameter name and have an empty entry in the selector", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="did you mean to use \'A\'?", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="did you mean to use \'%0\'?", | [h]="did you mean to use \'%0\'?", | ||
[ | [j]=i, | ||
[ | [k]="did you mean to use \'(.*?)\'\\?", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="treat the string as an argument to avoid this", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="treat the string as an argument to avoid this", | [h]="treat the string as an argument to avoid this", | ||
[ | [j]=i, | ||
[ | [k]="treat the string as an argument to avoid this", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="format string is defined here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="format string is defined here", | [h]="format string is defined here", | ||
[ | [j]=i, | ||
[ | [k]="format string is defined here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="forward declaration of class here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="forward declaration of class here", | [h]="forward declaration of class here", | ||
[ | [j]=i, | ||
[ | [k]="forward declaration of class here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up"}, | [m]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A is not defined, but forward declared here; conversion would be valid if it was derived from B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) is not defined, but forward declared here; conversion would be valid if it was derived from (.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={mb,1582847864,jb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="forward declaration of A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="forward declaration of %0", | [h]="forward declaration of %0", | ||
[ | [j]=i, | ||
[ | [k]="forward declaration of (.*?)", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Jb,1236199783,Kb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="forward declaration of template entity is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="forward declaration of template entity is here", | [h]="forward declaration of template entity is here", | ||
[ | [j]=i, | ||
[ | [k]="forward declaration of template entity is here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="found near match \'A\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="found near match \'%0\'", | [h]="found near match \'%0\'", | ||
[ | [j]=i, | ||
[ | [k]="found near match \'(.*?)\'", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="from \'diagnose_if\' attribute on A:", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="from \'diagnose_if\' attribute on %0:", | [h]="from \'diagnose_if\' attribute on %0:", | ||
[ | [j]=i, | ||
[ | [k]="from \'diagnose_if\' attribute on (.*?)\\:", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."}, | [m]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="add enclosing parentheses to perform a function-style cast", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="add enclosing parentheses to perform a function-style cast", | [h]="add enclosing parentheses to perform a function-style cast", | ||
[ | [j]=i, | ||
[ | [k]="add enclosing parentheses to perform a function\\-style cast", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="did you mean A?", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="did you mean %0?", | [h]="did you mean %0?", | ||
[ | [j]=i, | ||
[ | [k]="did you mean (.*?)\\?", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"2fb8b91f6f96",1323164772,"Suggest typo corrections for implicit function declarations."}, | [m]={"2fb8b91f6f96",1323164772,"Suggest typo corrections for implicit function declarations."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="while substituting deduced template arguments into function template A B", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="while substituting deduced template arguments into function template %0 %1", | [h]="while substituting deduced template arguments into function template %0 %1", | ||
[ | [j]=i, | ||
[ | [k]="while substituting deduced template arguments into function template (.*?) (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="in instantiation of function template specialization A requested here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="in instantiation of function template specialization %q0 requested here", | [h]="in instantiation of function template specialization %q0 requested here", | ||
[ | [j]=i, | ||
[ | [k]="in instantiation of function template specialization (.*?) requested here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"4adbc6d947b0",1245975003,"Implicit instantiation for function template specializations."}, | [m]={"4adbc6d947b0",1245975003,"Implicit instantiation for function template specializations."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="function template A matches specialization B", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="function template %q0 matches specialization %1", | [h]="function template %q0 matches specialization %1", | ||
[ | [j]=i, | ||
[ | [k]="function template (.*?) matches specialization (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="suffix with parentheses to turn this into a function call", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="suffix with parentheses to turn this into a function call", | [h]="suffix with parentheses to turn this into a function call", | ||
[ | [j]=i, | ||
[ | [k]="suffix with parentheses to turn this into a function call", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="prefix with the address-of operator to silence this warning", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="prefix with the address-of operator to silence this warning", | [h]="prefix with the address-of operator to silence this warning", | ||
[ | [j]=i, | ||
[ | [k]="prefix with the address\\-of operator to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="or because setter is declared here, but no getter method A is found", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="or because setter is declared here, but no getter method (.*?) is found", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="add \'module;\' to the start of the file to introduce a global module fragment", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="add \'module;\' to the start of the file to introduce a global module fragment", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="inline assembly label A declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="inline assembly label %0 declared here", | [h]="inline assembly label %0 declared here", | ||
[ | [j]=i, | ||
[ | [k]="inline assembly label (.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="guarded_by declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="guarded_by declared here", | [h]="guarded_by declared here", | ||
[ | [j]=i, | ||
[ | [k]="guarded_by declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="A is defined here; did you mean B?", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%0 is defined here; did you mean %1?", | [h]="%0 is defined here; did you mean %1?", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) is defined here; did you mean (.*?)\\?", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="hidden overloaded virtual function A declared here...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"7272d9cf36cd",1296756075,"Implement -Woverloaded-virtual."}, | [m]={"7272d9cf36cd",1296756075,"Implement -Woverloaded-virtual."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="type declaration hidden", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="type declaration hidden", | [h]="type declaration hidden", | ||
[ | [j]=i, | ||
[ | [k]="type declaration hidden", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="declaration hides type", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="declaration hides type", | [h]="declaration hides type", | ||
[ | [j]=i, | ||
[ | [k]="declaration hides type", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="conversion to ... type A declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="conversion to %select{integral|enumeration}0 type %1 declared here", | [h]="conversion to %select{integral|enumeration}0 type %1 declared here", | ||
[ | [j]=i, | ||
[ | [k]="conversion to (?:integral|enumeration) type (.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="field of illegal ... A declared here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="field of illegal (?:type|pointer type) (.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="A is an immediate ... because ... ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={fb,1625925174,nb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="class implementation is declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="class implementation is declared here", | [h]="class implementation is declared here", | ||
[ | [j]=i, | ||
[ | [k]="class implementation is declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"e16cdb407a3f",1270241585,"diagnose declaring class extension after its implementation"}, | [m]={"e16cdb407a3f",1270241585,"diagnose declaring class extension after its implementation"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="when implemented by class A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="when implemented by class %0", | [h]="when implemented by class %0", | ||
[ | [j]=i, | ||
[ | [k]="when implemented by class (.*?)", | ||
[ | [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]={{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"]={ | ||
[ | [b]="while checking implicit \'delete this\' for virtual destructor", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="while checking implicit \'delete this\' for virtual destructor", | [h]="while checking implicit \'delete this\' for virtual destructor", | ||
[ | [j]=i, | ||
[ | [k]="while checking implicit \'delete this\' for virtual destructor", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="implicit ... inferred target collision: call to both ... and ... members", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="A is an implicit parameter", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%0 is an implicit parameter", | [h]="%0 is an implicit parameter", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) is an implicit parameter", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"c6ebda167f52",1361482844,"Teach serialized diagnostics about notes without locations."}, | [m]={"c6ebda167f52",1361482844,"Teach serialized diagnostics about notes without locations."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="submodule of top-level module \'A\' implicitly imported here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="submodule of top-level module \'%0\' implicitly imported here", | [h]="submodule of top-level module \'%0\' implicitly imported here", | ||
[ | [j]=i, | ||
[ | [k]="submodule of top\\-level module \'(.*?)\' implicitly imported here", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="explicitly defaulted function was implicitly deleted here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="explicitly defaulted function was implicitly deleted here", | [h]="explicitly defaulted function was implicitly deleted here", | ||
[ | [j]=i, | ||
[ | [k]="explicitly defaulted function was implicitly deleted here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="consider adding \'A\' to the header search path", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="consider adding \'%0\' to the header search path", | [h]="consider adding \'%0\' to the header search path", | ||
[ | [j]=i, | ||
[ | [k]="consider adding \'(.*?)\' to the header search path", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="in implicit initialization of binding declaration A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="in implicit initialization of binding declaration %0", | [h]="in implicit initialization of binding declaration %0", | ||
[ | [j]=i, | ||
[ | [k]="in implicit initialization of binding declaration (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="add \'constexpr\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="add \'constexpr\'", | [h]="add \'constexpr\'", | ||
[ | [j]=i, | ||
[ | [k]="add \'constexpr\'", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="while declaring the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="while declaring the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'", | [h]="while declaring the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'", | ||
[ | [j]=i, | ||
[ | [k]="while declaring the corresponding implicit \'operator\\=\\=\' for this defaulted \'operator\\<\\=\\>\'", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."}, | [m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="while declaring the implicit ... for A", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="while declaring the implicit (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) for (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="when looking up \'...\' function for range expression of type A", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="when looking up \'(?:begin|end)\' function for range expression of type (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="in implicit initialization of ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="in implicit initialization of (?:array element (.*?) with omitted initializer|field (.*?) with omitted initializer|trailing array elements in runtime\\-sized array new)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="in initialization of temporary of type A created to list-initialize this reference", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="in initialization of temporary of type (.*?) created to list\\-initialize this reference", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="include the header <A> or explicitly provide a declaration for \'B\'", | ||
[ | [e]=d, | ||
[ | [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\'", | ||
[ | [j]=i, | ||
[ | [k]="include the header \\<(.*?)\\> or explicitly provide a declaration for \'(.*?)\'", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"5d96e0a3a795",1405112031,"Consolidate header inclusion diagnostics"}, | [m]={"5d96e0a3a795",1405112031,"Consolidate header inclusion diagnostics"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="current API version is \'A\', but plugin was compiled with version \'B\'", | ||
[ | [e]=d, | ||
[ | [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\'", | ||
[ | [j]=i, | ||
[ | [k]="current API version is \'(.*?)\', but plugin was compiled with version \'(.*?)\'", | ||
[ | [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"]={ | ||
[ | [b]="conformance of forward class A to protocol B can not be confirmed", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="conformance of forward class (.*?) to protocol (.*?) can not be confirmed", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="possible target of ... goto statement", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="possible target of %select{indirect|asm}0 goto statement", | [h]="possible target of %select{indirect|asm}0 goto statement", | ||
[ | [j]=i, | ||
[ | [k]="possible target of (?:indirect|asm) goto statement", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={kb,1273625893,hb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="consider using __builtin_trap() or qualifying pointer with \'volatile\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="consider using __builtin_trap() or qualifying pointer with \'volatile\'", | [h]="consider using __builtin_trap() or qualifying pointer with \'volatile\'", | ||
[ | [j]=i, | ||
[ | [k]="consider using __builtin_trap\\(\\) or qualifying pointer with \'volatile\'", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="use \'|=\' to turn this inequality comparison into an or-assignment", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="use \'|=\' to turn this inequality comparison into an or-assignment", | [h]="use \'|=\' to turn this inequality comparison into an or-assignment", | ||
[ | [j]=i, | ||
[ | [k]="use \'\\|\\=\' to turn this inequality comparison into an or\\-assignment", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="cannot use initializer list at the beginning of a macro argument", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="cannot use initializer list at the beginning of a macro argument", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="insert an explicit cast to silence this issue", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="insert an explicit cast to silence this issue", | [h]="insert an explicit cast to silence this issue", | ||
[ | [j]=i, | ||
[ | [k]="insert an explicit cast to silence this issue", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"}, | [m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="initializing field A with default member initializer", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="initializing field %0 with default member initializer", | [h]="initializing field %0 with default member initializer", | ||
[ | [j]=i, | ||
[ | [k]="initializing field (.*?) with default member initializer", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="... A will be initialized after ... B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:field|base class) (.*?) will be initialized after (?:field|base) (.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={pb,1590001902,qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="insert \'break;\' to avoid fall-through", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="insert \'break;\' to avoid fall-through", | [h]="insert \'break;\' to avoid fall-through", | ||
[ | [j]=i, | ||
[ | [k]="insert \'break;\' to avoid fall\\-through", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="insert \'A;\' to silence this warning", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="insert \'%0;\' to silence this warning", | [h]="insert \'%0;\' to silence this warning", | ||
[ | [j]=i, | ||
[ | [k]="insert \'(.*?);\' to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="add an explicit instantiation declaration to suppress this warning if A is explicitly instantiated in another translation unit", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="add an explicit instantiation declaration to suppress this warning if (.*?) is explicitly instantiated in another translation unit", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="(skipping A contextB in backtrace; use -ftemplate-backtrace-limit=0 to see all)", | ||
[ | [e]=d, | ||
[ | [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)", | ||
[ | [j]=i, | ||
[ | [k]="\\(skipping (.*?) context(.*?) in backtrace; use \\-ftemplate\\-backtrace\\-limit\\=0 to see all\\)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="... instantiation first required here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{implicit|explicit}0 instantiation first required here", | [h]="%select{implicit|explicit}0 instantiation first required here", | ||
[ | [j]=i, | ||
[ | [k]="(?:implicit|explicit) instantiation first required here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="in the default initializer of A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="in the default initializer of %0", | [h]="in the default initializer of %0", | ||
[ | [j]=i, | ||
[ | [k]="in the default initializer of (.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={fb,1625925174,nb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="initialized here A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="initialized here %0", | [h]="initialized here %0", | ||
[ | [j]=i, | ||
[ | [k]="initialized here (.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={fb,1625925174,nb} | ||
}, | }, | ||
["note_invalid_subexpr_in_const_expr"]={ | ["note_invalid_subexpr_in_const_expr"]={ | ||
[ | [b]="subexpression not valid in a constant expression", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="subexpression not valid in a constant expression", | [h]="subexpression not valid in a constant expression", | ||
[ | [j]=i, | ||
[ | [k]="subexpression not valid in a constant expression", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="did you mean A (\'B\' U+C)?", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="did you mean %0 (\'%2\' U+%1)?", | [h]="did you mean %0 (\'%2\' U+%1)?", | ||
[ | [j]=i, | ||
[ | [k]="did you mean (.*?) \\(\'(.*?)\' U\\+(.*?)\\)\\?", | ||
[ | [l]=a, | ||
[c]= | [c]=bb, | ||
[m]={ | [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"]={ | ||
[ | [b]="characters names in Unicode escape sequences are sensitive to case and whitespaces", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="characters names in Unicode escape sequences are sensitive to case and whitespaces", | ||
[ | [l]=a, | ||
[c]= | [c]=bb, | ||
[m]={ | [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"]={ | ||
[ | [b]="it delegates to", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="it delegates to", | [h]="it delegates to", | ||
[ | [j]=i, | ||
[ | [k]="it delegates to", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="instance variable is declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="instance variable is declared here", | [h]="instance variable is declared here", | ||
[ | [j]=i, | ||
[ | [k]="instance variable is declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="...captured......", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:implicitly |)captured(?:| by reference)(?:(?: due to use|) here| via initialization of lambda capture (.*?))", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={pb,1590001902,qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="lambda expression begins here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="lambda expression begins here", | [h]="lambda expression begins here", | ||
[ | [j]=i, | ||
[ | [k]="lambda expression begins here", | ||
[ | [l]=a, | ||
[c]= | [c]=Cc, | ||
[m]={"24af85047046",1328309257,"Implement implicit capture for lambda expressions."}, | [m]={"24af85047046",1328309257,"Implement implicit capture for lambda expressions."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="default capture by ...", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="default capture by %select{value|reference}0", | [h]="default capture by %select{value|reference}0", | ||
[ | [j]=i, | ||
[ | [k]="default capture by (?:value|reference)", | ||
[ | [l]=a, | ||
[c]= | [c]=Cc, | ||
[m]={ | [m]={pb,1590001902,qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="while substituting into a lambda expression here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="while substituting into a lambda expression here", | [h]="while substituting into a lambda expression here", | ||
[ | [j]=i, | ||
[ | [k]="while substituting into a lambda expression here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={fb,1625925174,nb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="explicitly capture \'this\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="explicitly capture \'this\'", | [h]="explicitly capture \'this\'", | ||
[ | [j]=i, | ||
[ | [k]="explicitly capture \'this\'", | ||
[ | [l]=a, | ||
[c]= | [c]=Cc, | ||
[m]={ | [m]={pb,1590001902,qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="implicit capture of lambda object due to conversion to block pointer here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="implicit capture of lambda object due to conversion to block pointer here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="capture A by ...", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="capture %0 by %select{value|reference}1", | [h]="capture %0 by %select{value|reference}1", | ||
[ | [j]=i, | ||
[ | [k]="capture (.*?) by (?:value|reference)", | ||
[ | [l]=a, | ||
[c]= | [c]=Cc, | ||
[m]={ | [m]={pb,1590001902,qb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... declared here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:(?:reference|\'std\\:\\:initializer_list\') member|member with (?:reference|\'std\\:\\:initializer_list\') subobject) declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="local declaration nearly matches", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="local declaration nearly matches", | [h]="local declaration nearly matches", | ||
[ | [j]=i, | ||
[ | [k]="local declaration nearly matches", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="type of A parameter of local declaration does not match definition (B vs C)", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="type of (.*?) parameter of local declaration does not match definition(?: \\((.*?) vs (.*?)\\)|)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="... variable ...here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:via initialization of|binding reference) variable (?:(.*?) |)here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="the other acquisition of A \'B\' is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="the other acquisition of %0 \'%1\' is here", | [h]="the other acquisition of %0 \'%1\' is here", | ||
[ | [j]=i, | ||
[ | [k]="the other acquisition of (.*?) \'(.*?)\' is here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"46b057681a7f",1315505978,"Thread safety: shared vs. exclusive locks"}, | [m]={"46b057681a7f",1315505978,"Thread safety: shared vs. exclusive locks"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A acquired here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%0 acquired here", | [h]="%0 acquired here", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) acquired here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"922866783b07",1328244326,"Thread safety analysis:"}, | [m]={"922866783b07",1328244326,"Thread safety analysis:"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="use \'A\' for a bitwise operation", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="use \'%0\' for a bitwise operation", | [h]="use \'%0\' for a bitwise operation", | ||
[ | [j]=i, | ||
[ | [k]="use \'(.*?)\' for a bitwise operation", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"0a0ba9d883f5",1313430606,"Add fixit notes for -Wconstant-logical-operand."}, | [m]={"0a0ba9d883f5",1313430606,"Add fixit notes for -Wconstant-logical-operand."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="remove constant to silence this warning", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="remove constant to silence this warning", | [h]="remove constant to silence this warning", | ||
[ | [j]=i, | ||
[ | [k]="remove constant to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"0a0ba9d883f5",1313430606,"Add fixit notes for -Wconstant-logical-operand."}, | [m]={"0a0ba9d883f5",1313430606,"Add fixit notes for -Wconstant-logical-operand."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="add parentheses after the \'!\' to evaluate the ... first", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="add parentheses after the \'\\!\' to evaluate the (?:comparison|bitwise operator) first", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="add parentheses around left hand side expression to silence this warning", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="add parentheses around left hand side expression to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="... here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{decremented|incremented}0 here", | [h]="%select{decremented|incremented}0 here", | ||
[ | [j]=i, | ||
[ | [k]="(?:decremented|incremented) here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="expansion of macro A requested here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="expansion of macro %0 requested here", | [h]="expansion of macro %0 requested here", | ||
[ | [j]=i, | ||
[ | [k]="expansion of macro (.*?) requested here", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="macro A defined here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="macro %0 defined here", | [h]="macro %0 defined here", | ||
[ | [j]=i, | ||
[ | [k]="macro (.*?) defined here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="change return type to \'int\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="change return type to \'int\'", | [h]="change return type to \'int\'", | ||
[ | [j]=i, | ||
[ | [k]="change return type to \'int\'", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"ae73417b6955",1358382373,"Implement a fixit for -Wmain-return-type"}, | [m]={"ae73417b6955",1358382373,"Implement a fixit for -Wmain-return-type"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="remove \'_Noreturn\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="remove \'_Noreturn\'", | [h]="remove \'_Noreturn\'", | ||
[ | [j]=i, | ||
[ | [k]="remove \'_Noreturn\'", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"7ec6f3ddeb4c",1358767503,"Add a fixit for _Noreturn main,"}, | [m]={"7ec6f3ddeb4c",1358767503,"Add a fixit for _Noreturn main,"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="to match this A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="to match this %0", | [h]="to match this %0", | ||
[ | [j]=i, | ||
[ | [k]="to match this (.*?)", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [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;"},{ | [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"]={ | ||
[ | [b]="total token limit set here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="total token limit set here", | [h]="total token limit set here", | ||
[ | [j]=i, | ||
[ | [k]="total token limit set here", | ||
[ | [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"]={ | ||
[ | [b]="did you mean to use \'typename\'?", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="did you mean to use \'typename\'?", | [h]="did you mean to use \'typename\'?", | ||
[ | [j]=i, | ||
[ | [k]="did you mean to use \'typename\'\\?", | ||
[ | [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"]={ | ||
[ | [b]="member is declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="member is declared here", | [h]="member is declared here", | ||
[ | [j]=i, | ||
[ | [k]="member is declared here", | ||
[ | [l]=a, | ||
[c]= | [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);"},{ | [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"]={ | ||
[ | [b]="member A declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="member %0 declared here", | [h]="member %0 declared here", | ||
[ | [j]=i, | ||
[ | [k]="member (.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="member declaration does not match because it ... const qualified", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="member declaration does not match because it (?:is|is not) const qualified", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="member declaration nearly matches", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="member declaration nearly matches", | [h]="member declaration nearly matches", | ||
[ | [j]=i, | ||
[ | [k]="member declaration nearly matches", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="type of A parameter of member declaration does not match definition (B vs C)", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="type of (.*?) parameter of member declaration does not match definition(?: \\((.*?) vs (.*?)\\)|)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="member A first declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="member %0 first declared here", | [h]="member %0 first declared here", | ||
[ | [j]=i, | ||
[ | [k]="member (.*?) first declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="\'->\' applied to return value of the operator->() declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="\'->\' applied to return value of the operator->() declared here", | [h]="\'->\' applied to return value of the operator->() declared here", | ||
[ | [j]=i, | ||
[ | [k]="\'\\-\\>\' applied to return value of the operator\\-\\>\\(\\) declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="in ... ... for A first required here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="in (?:implicit|defaulted) (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) for (.*?) first required here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="explicitly cast the argument to size_t to silence this warning", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="explicitly cast the argument to size_t to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"}, | [m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="did you mean to compare the result of A instead?", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="did you mean to compare the result of %0 instead?", | [h]="did you mean to compare the result of %0 instead?", | ||
[ | [j]=i, | ||
[ | [k]="did you mean to compare the result of (.*?) instead\\?", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"}, | [m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="method A declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="method %0 declared here", | [h]="method %0 declared here", | ||
[ | [j]=i, | ||
[ | [k]="method (.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"e5c1bda4d177",1288394405,"Improve diagnostics reporting of un-implemented"}, | [m]={"e5c1bda4d177",1288394405,"Improve diagnostics reporting of un-implemented"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="compiler has implicitly changed method A return type", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="compiler has implicitly changed method %0 return type", | [h]="compiler has implicitly changed method %0 return type", | ||
[ | [j]=i, | ||
[ | [k]="compiler has implicitly changed method (.*?) return type", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="method A is used for the forward class", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="method %0 is used for the forward class", | [h]="method %0 is used for the forward class", | ||
[ | [j]=i, | ||
[ | [k]="method (.*?) is used for the forward class", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="passing byval argument A with potentially incompatible alignment here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="passing byval argument %0 with potentially incompatible alignment here", | [h]="passing byval argument %0 with potentially incompatible alignment here", | ||
[ | [j]=i, | ||
[ | [k]="passing byval argument (.*?) with potentially incompatible alignment here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={fb,1625925174,nb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="insert \',\' before \'...\' to silence this warning", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="insert \',\' before \'...\' to silence this warning", | [h]="insert \',\' before \'...\' to silence this warning", | ||
[ | [j]=i, | ||
[ | [k]="insert \',\' before \'\\.\\.\\.\' to silence this warning", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="place \'...\' ... to declare a function parameter pack", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="place \'\\.\\.\\.\' (?:immediately before declared identifier|here) to declare a function parameter pack", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="preceding \'...\' declares a function parameter pack", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="preceding \'...\' declares a function parameter pack", | [h]="preceding \'...\' declares a function parameter pack", | ||
[ | [j]=i, | ||
[ | [k]="preceding \'\\.\\.\\.\' declares a function parameter pack", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="still within definition of A here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="still within definition of %q0 here", | [h]="still within definition of %q0 here", | ||
[ | [j]=i, | ||
[ | [k]="still within definition of (.*?) here", | ||
[ | [l]=a, | ||
[c]= | [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"]={ | ||
[ | [b]="introduce a parameter name to make A part of the selector", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="introduce a parameter name to make (.*?) part of the selector", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="use \'framework module\' to declare module \'A\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="use \'framework module\' to declare module \'%0\'", | [h]="use \'framework module\' to declare module \'%0\'", | ||
[ | [j]=i, | ||
[ | [k]="use \'framework module\' to declare module \'(.*?)\'", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="to match this \'{\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="to match this \'{\'", | [h]="to match this \'{\'", | ||
[ | [j]=i, | ||
[ | [k]="to match this \'\\{\'", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="to match this \']\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="to match this \']\'", | [h]="to match this \']\'", | ||
[ | [j]=i, | ||
[ | [k]="to match this \'\\]\'", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="previously defined here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="previously defined here", | [h]="previously defined here", | ||
[ | [j]=i, | ||
[ | [k]="previously defined here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="rename \'A\' to ensure it can be found by name", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="rename \'%0\' to ensure it can be found by name", | [h]="rename \'%0\' to ensure it can be found by name", | ||
[ | [j]=i, | ||
[ | [k]="rename \'(.*?)\' to ensure it can be found by name", | ||
[ | [l]=a, | ||
[c]= | [c]=bb, | ||
[m]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings"}, | [m]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="after modifying system headers, please delete the module cache at \'A\'", | ||
[ | [e]=d, | ||
[ | [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\'", | ||
[ | [j]=i, | ||
[ | [k]="after modifying system headers, please delete the module cache at \'(.*?)\'", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="macro was ... here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="macro was %select{defined|#undef\'d}0 here", | [h]="macro was %select{defined|#undef\'d}0 here", | ||
[ | [j]=i, | ||
[ | [k]="macro was (?:defined|\\#undef\'d) here", | ||
[ | [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"]={ | ||
[ | [b]="this is generally caused by modules with the same name found in multiple paths", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="this is generally caused by modules with the same name found in multiple paths", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="imported by ...\'A\'", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="imported by %select{|module \'%2\' in }1\'%0\'", | [h]="imported by %select{|module \'%2\' in }1\'%0\'", | ||
[ | [j]=i, | ||
[ | [k]="imported by (?:|module \'(.*?)\' in )\'(.*?)\'", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="module imported here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="module imported here", | [h]="module imported here", | ||
[ | [j]=i, | ||
[ | [k]="module imported here", | ||
[ | [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"]={ | ||
[ | [b]="A begins here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%0 begins here", | [h]="%0 begins here", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) begins here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]=Pb, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="definition in module \'A\' is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="definition in module \'%0\' is here", | [h]="definition in module \'%0\' is here", | ||
[ | [j]=i, | ||
[ | [k]="definition in module \'(.*?)\' is here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]=Pb, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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|)", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={"ab4d730f14d1",1532559125,"[ODRHash] Support hashing enums."}, | [m]={"ab4d730f14d1",1532559125,"[ODRHash] Support hashing enums."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]=Db, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Hb,1643408541,Eb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]=Pb, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]=Db, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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 (.*?))", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Hb,1643408541,Eb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]=Db, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]=Db, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="definition has no member A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="definition has no member %0", | [h]="definition has no member %0", | ||
[ | [j]=i, | ||
[ | [k]="definition has no member (.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=hc, | ||
[m]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:"}, | [m]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]=Db, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="but in (?:\'(.*?)\'|definition here) found (?:(?:no super class|super class with type (.*?))|instance variable \'(.*?)\' access control is (?:|@private|@protected|@public|@package))", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={rb,1662843785,sb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]=Db, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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 (.*?))", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Hb,1643408541,Eb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]=Db, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="declaration of A does not match", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="declaration of %0 does not match", | [h]="declaration of %0 does not match", | ||
[ | [j]=i, | ||
[ | [k]="declaration of (.*?) does not match", | ||
[ | [l]=a, | ||
[c]= | [c]=hc, | ||
[m]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:"}, | [m]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]=Pb, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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|)", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Hb,1643408541,Eb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]=Db, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="but in (?:\'(.*?)\'|definition here) found (?:(.*?) referenced (?:protocol|protocols)|(.*?) referenced protocol with different name (.*?))", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Hb,1643408541,Eb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]=Pb, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="but in \'(.*?)\' found (?:unnamed template parameter (.*?)|template parameter (.*?)|template parameter with (?:no |)default argument|template parameter with different default argument)", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={"498117bf11d8",1503456239,"[ODRHash] Diagnose differing template parameters."}, | [m]={"498117bf11d8",1503456239,"[ODRHash] Diagnose differing template parameters."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]=Pb, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="but in \'(.*?)\' found (?:(?:typedef|type alias) name (.*?)|(?:typedef|type alias) (.*?) with different underlying type (.*?))", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Hb,1643408541,Eb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]=Pb, | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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))", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={Hb,1643408541,Eb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="[rewriter] A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="[rewriter] %0", | [h]="[rewriter] %0", | ||
[ | [j]=i, | ||
[ | [k]="\\[rewriter\\] (.*?)", | ||
[ | [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"]={ | ||
[ | [b]="function multiversioning caused by this declaration", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="function multiversioning caused by this declaration", | [h]="function multiversioning caused by this declaration", | ||
[ | [j]=i, | ||
[ | [k]="function multiversioning caused by this declaration", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={"281d20b601c8",1515447257,"Implement Attribute Target MultiVersioning"}, | [m]={"281d20b601c8",1515447257,"Implement Attribute Target MultiVersioning"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="target function has calling convention A (expected B)", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="target function has calling convention %1 (expected %0)", | [h]="target function has calling convention %1 (expected %0)", | ||
[ | [j]=i, | ||
[ | [k]="target function has calling convention (.*?) \\(expected (.*?)\\)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Dc,1607502387,Ec}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%0 declared here", | [h]="%0 declared here", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Dc,1607502387,Ec}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="add \'void\' to the parameter list to turn an old-style K&R function declaration into a prototype", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="add \'void\' to the parameter list to turn an old\\-style K&R function declaration into a prototype", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Dc,1607502387,Ec}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="target function ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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 (.*?)\\)|))", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Dc,1607502387,Ec}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="target ... is declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="target %select{constructor|destructor}0 is declared here", | [h]="target %select{constructor|destructor}0 is declared here", | ||
[ | [j]=i, | ||
[ | [k]="target (?:constructor|destructor) is declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Dc,1607502387,Ec}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="namespace A defined here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="namespace %0 defined here", | [h]="namespace %0 defined here", | ||
[ | [j]=i, | ||
[ | [k]="namespace (.*?) defined here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="consider using vld1_AB() to initialize a vector from memory, or vcreate_CD() to initialize from an integer constant", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="consider using vld1_(.*?)(.*?)\\(\\) to initialize a vector from memory, or vcreate_(.*?)(.*?)\\(\\) to initialize from an integer constant", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="consider using vld1q_AB() to initialize a vector from memory, or vcombine_CD(vcreate_EF(), vcreate_GH()) to initialize from integer constants", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="consider using vld1q_(.*?)(.*?)\\(\\) to initialize a vector from memory, or vcombine_(.*?)(.*?)\\(vcreate_(.*?)(.*?)\\(\\), vcreate_(.*?)(.*?)\\(\\)\\) to initialize from integer constants", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="while checking the satisfaction of nested requirement requested here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="while checking the satisfaction of nested requirement requested here", | [h]="while checking the satisfaction of nested requirement requested here", | ||
[ | [j]=i, | ||
[ | [k]="while checking the satisfaction of nested requirement requested here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={ob,1576172311,lb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... \'A\' would be invalidB", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{and|because}0 \'%1\' would be invalid%2", | [h]="%select{and|because}0 \'%1\' would be invalid%2", | ||
[ | [j]=i, | ||
[ | [k]="(?:and|because) \'(.*?)\' would be invalid(.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={ob,1576172311,lb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... \'A\' would be invalid", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{and|because}0 \'%1\' would be invalid", | [h]="%select{and|because}0 \'%1\' would be invalid", | ||
[ | [j]=i, | ||
[ | [k]="(?:and|because) \'(.*?)\' would be invalid", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={ob,1576172311,lb} | ||
}, | }, | ||
["note_next_field_declaration"]={ | ["note_next_field_declaration"]={ | ||
[ | [b]="next field declaration is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="next field declaration is here", | [h]="next field declaration is here", | ||
[ | [j]=i, | ||
[ | [k]="next field declaration is here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="next ... is here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="next (?:instance variable declaration|synthesized instance variable) is here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="type is not C-compatible due to this ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="type is not C\\-compatible due to this (?:base class|default member initializer|lambda expression|friend declaration|member declaration)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="non-deducible template parameter A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="non-deducible template parameter %0", | [h]="non-deducible template parameter %0", | ||
[ | [j]=i, | ||
[ | [k]="non\\-deducible template parameter (.*?)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="not-yet-instantiated member is declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="not-yet-instantiated member is declared here", | [h]="not-yet-instantiated member is declared here", | ||
[ | [j]=i, | ||
[ | [k]="not\\-yet\\-instantiated member is declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="A is not literal because it has base class B of non-literal type", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) is not literal because it has base class (.*?) of non\\-literal type", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ab,1317436288,ub}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A is not literal because it has data member B of ... type C", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) is not literal because it has data member (.*?) of (?:non\\-literal|volatile) type (.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ab,1317436288,ub}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="incomplete type A is not a literal type", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="incomplete type %0 is not a literal type", | [h]="incomplete type %0 is not a literal type", | ||
[ | [j]=i, | ||
[ | [k]="incomplete type (.*?) is not a literal type", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="lambda closure types are non-literal types before C++17", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="lambda closure types are non-literal types before C++17", | [h]="lambda closure types are non-literal types before C++17", | ||
[ | [j]=i, | ||
[ | [k]="lambda closure types are non\\-literal types before C\\+\\+17", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="A is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ab,1317436288,ub}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A is not literal because its destructor is not constexpr", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%0 is not literal because its destructor is not constexpr", | [h]="%0 is not literal because its destructor is not constexpr", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) is not literal because its destructor is not constexpr", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Zb,1567434909,Yb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A is not literal because it has a non-trivial destructor", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) is not literal because it has a non\\-trivial destructor", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ab,1317436288,ub}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A is not literal because it has a user-provided destructor", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) is not literal because it has a user\\-provided destructor", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ab,1317436288,ub}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... with virtual base class is not a literal type", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:struct|interface|class) with virtual base (?:class|classes) is not a literal type", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Ab,1317436288,ub}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="null passed to a callee that requires a non-null argument", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="null passed to a callee that requires a non\\-null argument", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="non-template declaration found by name lookup", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="non-template declaration found by name lookup", | [h]="non-template declaration found by name lookup", | ||
[ | [j]=i, | ||
[ | [k]="non\\-template declaration found by name lookup", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="... non-trivial to ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:(.*?) has subobjects that are|(.*?) has type (.*?) that is) non\\-trivial to (?:default\\-initialize|destruct|copy)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="non-usual A declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="non-usual %0 declared here", | [h]="non-usual %0 declared here", | ||
[ | [j]=i, | ||
[ | [k]="non\\-usual (.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="non-templated declaration is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="non-templated declaration is here", | [h]="non-templated declaration is here", | ||
[ | [j]=i, | ||
[ | [k]="non\\-templated declaration is here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="because it has a default argument", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="because it has a default argument", | [h]="because it has a default argument", | ||
[ | [j]=i, | ||
[ | [k]="because it has a default argument", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Lb,1354935182,Mb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="because field A has an initializer", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="because field %0 has an initializer", | [h]="because field %0 has an initializer", | ||
[ | [j]=i, | ||
[ | [k]="because field (.*?) has an initializer", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={mb,1582847864,jb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="field is non-trivial to ...", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="field is non-trivial to %select{copy|default-initialize}0", | [h]="field is non-trivial to %select{copy|default-initialize}0", | ||
[ | [j]=i, | ||
[ | [k]="field is non\\-trivial to (?:copy|default\\-initialize)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="because type A has a virtual ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="because type (.*?) has a virtual (?:member function|base class)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="because no ... can be used to ... ... of type A", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="because no (?:constructor|constructor|assignment operator|assignment operator) can be used to (?:copy|move|copy|move) (?:base class|field|an object) of type (.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Lb,1354935182,Mb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="because ...type A has no default constructor", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="because (?:base class of |field of |)type (.*?) has no default constructor", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Lb,1354935182,Mb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="because type A has a member with ... ownership", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="because type (.*?) has a member with (?:no|no|__strong|__weak|__autoreleasing) ownership", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="because its parameter is of type A, not B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="because its parameter is (?:of type (.*?), not (.*?)|of the wrong type)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Lb,1354935182,Mb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="because the function selected to ... ... of type A is not trivial", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="because the function selected to (?:construct|copy|move|copy|move|destroy) (?:base class|field) of type (.*?) is not trivial", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Lb,1354935182,Mb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="because ...type A has a user-provided ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Lb,1354935182,Mb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="because it is a variadic function", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="because it is a variadic function", | [h]="because it is a variadic function", | ||
[ | [j]=i, | ||
[ | [k]="because it is a variadic function", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Lb,1354935182,Mb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="destructor for A is not trivial because it is virtual", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="destructor for %0 is not trivial because it is virtual", | [h]="destructor for %0 is not trivial because it is virtual", | ||
[ | [j]=i, | ||
[ | [k]="destructor for (.*?) is not trivial because it is virtual", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={Lb,1354935182,Mb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A should be declared prior to the call site...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) should be declared prior to the call site(?:| or in (.*?)| or in an associated namespace of one of its arguments)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="add \'export\' here if this is intended to be a module interface unit", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="add \'export\' here if this is intended to be a module interface unit", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="A is not a structural type because it has a mutable non-static data member", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) is not a structural type because it has a mutable non\\-static data member", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={mb,1582847864,jb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A is not a structural type because it has a ... that is not public", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) is not a structural type because it has a (?:non\\-static data member|base class) that is not public", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={mb,1582847864,jb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A is not a structural type because it has a non-static data member of rvalue reference type", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) is not a structural type because it has a non\\-static data member of rvalue reference type", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={mb,1582847864,jb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="A is not a structural type because it has a ... of non-structural type B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) is not a structural type because it has a (?:non\\-static data member|base class) of non\\-structural type (.*?)", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={mb,1582847864,jb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="previous equal key is here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="previous equal key is here", | [h]="previous equal key is here", | ||
[ | [j]=i, | ||
[ | [k]="previous equal key is here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={ | [m]={cc,1576908663,bc}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="insert \'...\' if the ... ...", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [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)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="A specified here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%0 specified here", | [h]="%0 specified here", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) specified here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="use nullability type specifier A to affect the innermost pointer type of B", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="use nullability type specifier (.*?) to affect the innermost pointer type of (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="A declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%0 declared here", | [h]="%0 declared here", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [c]=p, | ||
[m]={"e1d882c726b5",1425491752,"New ObjC warning: circular containers."}, | [m]={"e1d882c726b5",1425491752,"New ObjC warning: circular containers."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... started here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(?:class|protocol|category|class extension|implementation|category implementation) started here", | ||
[ | [l]=a, | ||
[c]= | [c]=Z, | ||
[m]={"c6c8d9356dc0",1323163523,"Extend warnings for missing \'@end\'."}, | [m]={"c6c8d9356dc0",1323163523,"Extend warnings for missing \'@end\'."}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="method marked as designated initializer of the class here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="method marked as designated initializer of the class here", | [h]="method marked as designated initializer of the class here", | ||
[ | [j]=i, | ||
[ | [k]="method marked as designated initializer of the class here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="use \'isEqual:\' instead", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="use \'isEqual:\' instead", | [h]="use \'isEqual:\' instead", | ||
[ | [j]=i, | ||
[ | [k]="use \'isEqual\\:\' instead", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="... parameter has unexpected type A (should be B)", | ||
[ | [e]=d, | ||
[ | [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)", | ||
[ | [j]=i, | ||
[ | [k]="(?:first|second|third) parameter has unexpected type (.*?) \\(should be (.*?)\\)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="method returns unexpected type A (should be an object type)", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="method returns unexpected type %0 (should be an object type)", | [h]="method returns unexpected type %0 (should be an object type)", | ||
[ | [j]=i, | ||
[ | [k]="method returns unexpected type (.*?) \\(should be an object type\\)", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="add a super class to fix this problem", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="add a super class to fix this problem", | [h]="add a super class to fix this problem", | ||
[ | [j]=i, | ||
[ | [k]="add a super class to fix this problem", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="type parameter A declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="type parameter %0 declared here", | [h]="type parameter %0 declared here", | ||
[ | [j]=i, | ||
[ | [k]="type parameter (.*?) declared here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="method A that returns B declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="method %0 that returns %1 declared here", | [h]="method %0 that returns %1 declared here", | ||
[ | [j]=i, | ||
[ | [k]="method (.*?) that returns (.*?) declared here", | ||
[ | [l]=a, | ||
[c]= | [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]={{ | [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"]={ | ||
[ | [b]="class has base type A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="class has base type %0", | [h]="class has base type %0", | ||
[ | [j]=i, | ||
[ | [k]="class has base type (.*?)", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={dc,1265916115,Xb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="enumerator A with value B here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="enumerator %0 with value %1 here", | [h]="enumerator %0 with value %1 here", | ||
[ | [j]=i, | ||
[ | [k]="enumerator (.*?) with value (.*?) here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="field A has type B here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="field %0 has type %1 here", | [h]="field %0 has type %1 here", | ||
[ | [j]=i, | ||
[ | [k]="field (.*?) has type (.*?) here", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={dc,1265916115,Xb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="field has name A here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="field has name %0 here", | [h]="field has name %0 here", | ||
[ | [j]=i, | ||
[ | [k]="field has name (.*?) here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="friend declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="friend declared here", | [h]="friend declared here", | ||
[ | [j]=i, | ||
[ | [k]="friend declared here", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={"b180eebed423",1524677283,"[ASTImporter] FriendDecl importing improvements"}, | [m]={"b180eebed423",1524677283,"[ASTImporter] FriendDecl importing improvements"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="no corresponding base class here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="no corresponding base class here", | [h]="no corresponding base class here", | ||
[ | [j]=i, | ||
[ | [k]="no corresponding base class here", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={dc,1265916115,Xb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="no corresponding enumerator here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="no corresponding enumerator here", | [h]="no corresponding enumerator here", | ||
[ | [j]=i, | ||
[ | [k]="no corresponding enumerator here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="no corresponding field here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="no corresponding field here", | [h]="no corresponding field here", | ||
[ | [j]=i, | ||
[ | [k]="no corresponding field here", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={dc,1265916115,Xb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="no corresponding friend here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="no corresponding friend here", | [h]="no corresponding friend here", | ||
[ | [j]=i, | ||
[ | [k]="no corresponding friend here", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={"b180eebed423",1524677283,"[ASTImporter] FriendDecl importing improvements"}, | [m]={"b180eebed423",1524677283,"[ASTImporter] FriendDecl importing improvements"}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="class has A base class", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="class has %0 base %plural{1:class|:classes}0", | [h]="class has %0 base %plural{1:class|:classes}0", | ||
[ | [j]=i, | ||
[ | [k]="class has (.*?) base (?:class|classes)", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={dc,1265916115,Xb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="... method A also declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{class|instance}0 method %1 also declared here", | [h]="%select{class|instance}0 method %1 also declared here", | ||
[ | [j]=i, | ||
[ | [k]="(?:class|instance) method (.*?) also declared here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="no corresponding superclass here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="no corresponding superclass here", | [h]="no corresponding superclass here", | ||
[ | [j]=i, | ||
[ | [k]="no corresponding superclass here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="property A is implemented with ... here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="property %0 is implemented with %select{@synthesize|@dynamic}1 here", | [h]="property %0 is implemented with %select{@synthesize|@dynamic}1 here", | ||
[ | [j]=i, | ||
[ | [k]="property (.*?) is implemented with (?:@synthesize|@dynamic) here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="inherits from superclass A here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="inherits from superclass %0 here", | [h]="inherits from superclass %0 here", | ||
[ | [j]=i, | ||
[ | [k]="inherits from superclass (.*?) here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="property is synthesized to ivar A here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="property is synthesized to ivar %0 here", | [h]="property is synthesized to ivar %0 here", | ||
[ | [j]=i, | ||
[ | [k]="property is synthesized to ivar (.*?) here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="... declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{parameter|parameter pack}0 declared here", | [h]="%select{parameter|parameter pack}0 declared here", | ||
[ | [j]=i, | ||
[ | [k]="(?:parameter|parameter pack) declared here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="A is a ... here", | ||
[ | [e]=d, | ||
[ | [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", | ||
[ | [j]=i, | ||
[ | [k]="(.*?) is a (?:struct|interface|union|class|enum) here", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={dc,1265916115,Xb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="template parameter declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="template parameter declared here", | [h]="template parameter declared here", | ||
[ | [j]=i, | ||
[ | [k]="template parameter declared here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="template parameter list also declared here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="template parameter list also declared here", | [h]="template parameter list also declared here", | ||
[ | [j]=i, | ||
[ | [k]="template parameter list also declared here", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="declared here with type A", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="declared here with type %0", | [h]="declared here with type %0", | ||
[ | [j]=i, | ||
[ | [k]="declared here with type (.*?)", | ||
[ | [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]={{ | [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"]={ | ||
[ | [b]="... derivation here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="%select{non-virtual|virtual}0 derivation here", | [h]="%select{non-virtual|virtual}0 derivation here", | ||
[ | [j]=i, | ||
[ | [k]="(?:non\\-virtual|virtual) derivation here", | ||
[ | [l]=a, | ||
[c]=a, | [c]=a, | ||
[m]={ | [m]={dc,1265916115,Xb}, | ||
[n]={{ | [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"]={ | ||
[ | [b]="the ignored tokens spans until here", | ||
[ | [e]=d, | ||
[ | [g]=f, | ||
[h]="the ignored tokens spans until here", | [h]="the ignored tokens spans until here", | ||
[ | [j]=i, | ||
[ | [k]="the ignored tokens spans until here", | ||
[ | [l]=a, | ||
[c]= | [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"} | |||
} | |||
} | } | ||
}; | }; |
edits