Module:ClangDiags/DiagsLongData6: Difference between revisions

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


return {
return {
["note_access_protected_restricted_noobject"]={
["note_access_protected_restricted_noobject"]={
[b]="must name member using the type of the current context A",
[g]="must name member using the type of the current context A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="must name member using the type of the current context (.*?)",
[l]="must name member using the type of the current context (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"5dadb65e0722",1333767860,"Fix several problems with protected access control:"},
[m]={"5dadb65e0722",1333767860,"Fix several problems with protected access control:","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]={
[o]={
Line 166: Line 188:
},
},
["note_access_protected_restricted_object"]={
["note_access_protected_restricted_object"]={
[b]="can only access this member on an object of type A",
[g]="can only access this member on an object of type A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="can only access this member on an object of type (.*?)",
[l]="can only access this member on an object of type (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"5dadb65e0722",1333767860,"Fix several problems with protected access control:"},
[m]={"5dadb65e0722",1333767860,"Fix several problems with protected access control:","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]={
[o]={
Line 181: Line 203:
},
},
["note_add_deprecation_attr"]={
["note_add_deprecation_attr"]={
[b]="add a deprecation attribute to the declaration to silence this warning",
[g]="add a deprecation attribute to the declaration to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="add a deprecation attribute to the declaration to silence this warning",
[l]="add a deprecation attribute to the declaration to silence this warning",
[l]=a,
[b]=a,
[c]=vb,
[k]=Mb,
[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","Comment sema: warn when comment has \\deprecated but declaration does not have a"},
[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);"}},
[n]={{ec,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]={
[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"}
["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"}
Line 196: Line 218:
},
},
["note_add_synthesize_directive"]={
["note_add_synthesize_directive"]={
[b]="add a \'@synthesize\' directive",
[g]="add a \'@synthesize\' directive",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="add a \'@synthesize\' directive",
[h]="add a \'@synthesize\' directive",
[j]=i,
[j]=i,
[k]="add a \'@synthesize\' directive",
[l]="add a \'@synthesize\' directive",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"6c9af50cc815",1499076744,"Add a fixit for -Wobjc-protocol-property-synthesis"},
[m]={"6c9af50cc815",1499076744,"Add a fixit for -Wobjc-protocol-property-synthesis","Add a fixit for -Wobjc-protocol-property-synthesis"},
[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);"}},
[n]={{gb,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]={
[o]={
["clang/test/SemaObjC/default-synthesize.m"]={"clang/test/SemaObjC/default-synthesize.m:140:1: note: add a \'@synthesize\' directive"}
["clang/test/SemaObjC/default-synthesize.m"]={"clang/test/SemaObjC/default-synthesize.m:140:1: note: add a \'@synthesize\' directive"}
Line 211: Line 233:
},
},
["note_additional_parens_for_variable_declaration"]={
["note_additional_parens_for_variable_declaration"]={
[b]="add a pair of parentheses to declare a variable",
[g]="add a pair of parentheses to declare a variable",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="add a pair of parentheses to declare a variable",
[h]="add a pair of parentheses to declare a variable",
[j]=i,
[j]=i,
[k]="add a pair of parentheses to declare a variable",
[l]="add a pair of parentheses to declare a variable",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Improvements to vexing-parse warnings. Make the no-parameters case more"},
[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, \")\");"}},
[n]={{J,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]={
[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"}
["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"}
Line 226: Line 248:
},
},
["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",
[g]="candidate function made ineligible by enable_if",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="candidate function made ineligible by enable_if",
[h]="candidate function made ineligible by enable_if",
[j]=i,
[j]=i,
[k]="candidate function made ineligible by enable_if",
[l]="candidate function made ineligible by enable_if",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang."},
[m]={"3e3bb95b6951",1449093488,"Add the `pass_object_size` attribute to clang.","Add the `pass_object_size` attribute to clang."},
[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);"}},
[n]={{ib,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]={
[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"}
["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"}
Line 241: Line 263:
},
},
["note_alias_mangled_name_alternative"]={
["note_alias_mangled_name_alternative"]={
[b]="function by that name is mangled as \"A\"",
[g]="function by that name is mangled as \"A\"",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="function by that name is mangled as \"%0\"",
[h]="function by that name is mangled as \"%0\"",
[j]=i,
[j]=i,
[k]="function by that name is mangled as \"(.*?)\"",
[l]="function by that name is mangled as \"(.*?)\"",
[l]=a,
[b]=a,
[c]=a,
[k]=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","[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]={
[o]={
Line 256: Line 278:
},
},
["note_alias_requires_mangled_name"]={
["note_alias_requires_mangled_name"]={
[b]="the ... specified in an ... must refer to its mangled name",
[g]="the ... specified in an ... must refer to its mangled name",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="the (?:function or variable|function) specified in an (?:alias|ifunc) must refer to its mangled name",
[l]="the (?:function or variable|function) specified in an (?:alias|ifunc) must refer to its mangled name",
[l]=a,
[b]=a,
[c]=a,
[k]=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","[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]={
[o]={
Line 271: Line 293:
},
},
["note_alignas_on_declaration"]={
["note_alignas_on_declaration"]={
[b]="declared with A attribute here",
[g]="declared with A attribute here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="declared with %0 attribute here",
[h]="declared with %0 attribute here",
[j]=i,
[j]=i,
[k]="declared with (.*?) attribute here",
[l]="declared with (.*?) attribute here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Implement C++11 [dcl.align]p6-p8, and C11 6.7.5/7. This had to be split out of"},
[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;"}},
[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]={
[o]={
Line 286: Line 308:
},
},
["note_allocated_here"]={
["note_allocated_here"]={
[b]="allocated with \'new...\' here",
[g]="allocated with \'new...\' here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="allocated with \'new%select{[]|}0\' here",
[h]="allocated with \'new%select{[]|}0\' here",
[j]=i,
[j]=i,
[k]="allocated with \'new(?:\\[\\]|)\' here",
[l]="allocated with \'new(?:\\[\\]|)\' here",
[l]=a,
[b]=a,
[c]=p,
[k]=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\'","Detect uses of mismatching forms of \'new\' and \'delete\'"},
[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;"}},
[n]={{X,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]={
[o]={
["clang/test/CodeGenCXX/default-arguments.cpp"]={"clang/test/CodeGenCXX/default-arguments.cpp:63:10: note: allocated with \'new[]\' here"}
["clang/test/CodeGenCXX/default-arguments.cpp"]={"clang/test/CodeGenCXX/default-arguments.cpp:63:10: note: allocated with \'new[]\' here"}
Line 301: Line 323:
},
},
["note_also_found"]={
["note_also_found"]={
[b]="also found",
[g]="also found",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="also found",
[h]="also found",
[j]=i,
[j]=i,
[k]="also found",
[l]="also found",
[l]=a,
[b]=a,
[c]=a,
[k]=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","Improve the diagnostic when a new declaration conflicts with a using shadow"},
[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();"}},
[n]={{P,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]={
[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"}
["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"}
Line 316: Line 338:
},
},
["note_ambig_member_ref_object_type"]={
["note_ambig_member_ref_object_type"]={
[b]="lookup in the object type A refers here",
[g]="lookup in the object type A refers here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="lookup in the object type %0 refers here",
[h]="lookup in the object type %0 refers here",
[j]=i,
[j]=i,
[k]="lookup in the object type (.*?) refers here",
[l]="lookup in the object type (.*?) refers here",
[l]=a,
[b]=a,
[c]=p,
[k]=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.,","Rewrite of our handling of name lookup in C++ member access expressions, e.g.,"},
[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;"}},
[n]={{Qc,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]={
[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"}
["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"}
Line 331: Line 353:
},
},
["note_ambig_member_ref_scope"]={
["note_ambig_member_ref_scope"]={
[b]="lookup from the current scope refers here",
[g]="lookup from the current scope refers here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="lookup from the current scope refers here",
[h]="lookup from the current scope refers here",
[j]=i,
[j]=i,
[k]="lookup from the current scope refers here",
[l]="lookup from the current scope refers here",
[l]=a,
[b]=a,
[c]=p,
[k]=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.,","Rewrite of our handling of name lookup in C++ member access expressions, e.g.,"},
[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);"}},
[n]={{Qc,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]={
[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"}
["clang/test/SemaCXX/qual-id-test.cpp"]={"clang/test/SemaCXX/qual-id-test.cpp:94:25: note: lookup from the current scope refers here"}
Line 346: Line 368:
},
},
["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",
[g]="similar constraint expressions not considered equivalent; constraint expressions cannot be considered equivalent unless they originate from the same concept",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="similar constraint expressions not considered equivalent; constraint expressions cannot be considered equivalent unless they originate from the same concept",
[l]="similar constraint expressions not considered equivalent; constraint expressions cannot be considered equivalent unless they originate from the same concept",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[m]={"349636d2bfc3",1575555459,vc,vc},
[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();"}},
[n]={{hb,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]={
[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"}
["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"}
Line 361: Line 383:
},
},
["note_ambiguous_atomic_constraints_similar_expression"]={
["note_ambiguous_atomic_constraints_similar_expression"]={
[b]="similar constraint expression here",
[g]="similar constraint expression here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="similar constraint expression here",
[h]="similar constraint expression here",
[j]=i,
[j]=i,
[k]="similar constraint expression here",
[l]="similar constraint expression here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[m]={"349636d2bfc3",1575555459,vc,vc},
[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();"}},
[n]={{hb,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]={
[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"}
["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"}
Line 376: Line 398:
},
},
["note_ambiguous_candidate"]={
["note_ambiguous_candidate"]={
[b]="candidate found by name lookup is A",
[g]="candidate found by name lookup is A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="candidate found by name lookup is %q0",
[h]="candidate found by name lookup is %q0",
[j]=i,
[j]=i,
[k]="candidate found by name lookup is (.*?)",
[l]="candidate found by name lookup is (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files."},
[m]={"5a8987ca5113",1237025389,Vb,Vb},
[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;"}},
[n]={{mc,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]={
[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\'"}
["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\'"}
Line 391: Line 413:
},
},
["note_ambiguous_inherited_constructor_using"]={
["note_ambiguous_inherited_constructor_using"]={
[b]="inherited from base class A here",
[g]="inherited from base class A here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="inherited from base class %0 here",
[h]="inherited from base class %0 here",
[j]=i,
[j]=i,
[k]="inherited from base class (.*?) here",
[l]="inherited from base class (.*?) here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"5179eb78210a",1467140637,"P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:"},
[m]={"5179eb78210a",1467140637,Oc,Oc},
[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;"}},
[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]={
[o]={
Line 406: Line 428:
},
},
["note_ambiguous_member_found"]={
["note_ambiguous_member_found"]={
[b]="member found by ambiguous name lookup",
[g]="member found by ambiguous name lookup",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="member found by ambiguous name lookup",
[h]="member found by ambiguous name lookup",
[j]=i,
[j]=i,
[k]="member found by ambiguous name lookup",
[l]="member found by ambiguous name lookup",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files."},
[m]={"5a8987ca5113",1237025389,Vb,Vb},
[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);"}},
[n]={{mc,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);"},{mc,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]={
[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"}
["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"}
Line 421: Line 443:
},
},
["note_ambiguous_member_type_found"]={
["note_ambiguous_member_type_found"]={
[b]="member type A found by ambiguous name lookup",
[g]="member type A found by ambiguous name lookup",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="member type %0 found by ambiguous name lookup",
[h]="member type %0 found by ambiguous name lookup",
[j]=i,
[j]=i,
[k]="member type (.*?) found by ambiguous name lookup",
[l]="member type (.*?) found by ambiguous name lookup",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={pb,1590001902,qb},
[m]={Cb,1590001902,R,R},
[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);"}},
[n]={{mc,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();"},{mc,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]={
[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"}
["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"}
Line 436: Line 458:
},
},
["note_ambiguous_type_conversion"]={
["note_ambiguous_type_conversion"]={
[b]="because of ambiguity in conversion of A to B",
[g]="because of ambiguity in conversion of A to B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="because of ambiguity in conversion (?:of (.*?) to (.*?)|between types)",
[l]="because of ambiguity in conversion (?:of (.*?) to (.*?)|between types)",
[l]=a,
[b]=a,
[c]=p,
[k]=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","If built-in operators could not be selected because of ambiguity in"},
[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));"}},
[n]={{ib,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]={
[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 *\'"}
["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 *\'"}
Line 451: Line 473:
},
},
["note_anonymous_namespace"]={
["note_anonymous_namespace"]={
[b]="anonymous namespace begins here",
[g]="anonymous namespace begins here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="anonymous namespace begins here",
[h]="anonymous namespace begins here",
[j]=i,
[j]=i,
[k]="anonymous namespace begins here",
[l]="anonymous namespace begins here",
[l]=a,
[b]=a,
[c]=fc,
[k]=Bc,
[m]={"e181de7f4fe9",1555973411,"[c++2a] Implement semantic restrictions for \'export\' declarations."},
[m]={"e181de7f4fe9",1555973411,"[c++2a] Implement semantic restrictions for \'export\' declarations.","[c++2a] Implement semantic restrictions for \'export\' declarations."},
[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);"}},
[n]={{Ab,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]={
[o]={
["clang/test/CXX/module/module.interface/p3.cpp"]={"clang/test/CXX/module/module.interface/p3.cpp:50:11: note: anonymous namespace begins here"}
["clang/test/CXX/module/module.interface/p3.cpp"]={"clang/test/CXX/module/module.interface/p3.cpp:50:11: note: anonymous namespace begins here"}
Line 466: Line 488:
},
},
["note_arc_bridge"]={
["note_arc_bridge"]={
[b]="use __bridge to convert directly (no change in ownership)",
[g]="use __bridge to convert directly (no change in ownership)",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="use __bridge to convert directly (no change in ownership)",
[h]="use __bridge to convert directly (no change in ownership)",
[j]=i,
[j]=i,
[k]="use __bridge to convert directly \\(no change in ownership\\)",
[l]="use __bridge to convert directly \\(no change in ownership\\)",
[l]=a,
[b]=a,
[c]=gc,
[k]=Mc,
[m]={Sb,1308178962,Rb},
[m]={nc,1308178962,lb,lb},
[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 \");"}},
[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]={
[o]={
Line 481: Line 503:
},
},
["note_arc_bridge_retained"]={
["note_arc_bridge_retained"]={
[b]="use ... to make an ARC object available as a +1 A",
[g]="use ... to make an ARC object available as a +1 A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="use (?:__bridge_retained|CFBridgingRetain call) to make an ARC object available as a \\+1 (.*?)",
[l]="use (?:__bridge_retained|CFBridgingRetain call) to make an ARC object available as a \\+1 (.*?)",
[l]=a,
[b]=a,
[c]=gc,
[k]=Mc,
[m]={Sb,1308178962,Rb},
[m]={nc,1308178962,lb,lb},
[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\");"}},
[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]={
[o]={
Line 496: Line 518:
},
},
["note_arc_bridge_transfer"]={
["note_arc_bridge_transfer"]={
[b]="use ... to transfer ownership of a +1 A into ARC",
[g]="use ... to transfer ownership of a +1 A into ARC",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="use (?:__bridge_transfer|CFBridgingRelease call) to transfer ownership of a \\+1 (.*?) into ARC",
[l]="use (?:__bridge_transfer|CFBridgingRelease call) to transfer ownership of a \\+1 (.*?) into ARC",
[l]=a,
[b]=a,
[c]=gc,
[k]=Mc,
[m]={Sb,1308178962,Rb},
[m]={nc,1308178962,lb,lb},
[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 \");"}},
[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]={
[o]={
Line 511: Line 533:
},
},
["note_arc_cstyle_bridge"]={
["note_arc_cstyle_bridge"]={
[b]="use __bridge with C-style cast to convert directly (no change in ownership)",
[g]="use __bridge with C-style cast to convert directly (no change in ownership)",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="use __bridge with C\\-style cast to convert directly \\(no change in ownership\\)",
[l]="use __bridge with C\\-style cast to convert directly \\(no change in ownership\\)",
[l]=a,
[b]=a,
[c]=gc,
[k]=Mc,
[m]={"ac2d082f58e6",1361496168,"objective-C arc: Diagnostic can not say to use bridge"},
[m]={"ac2d082f58e6",1361496168,Kc,Kc},
[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);"}},
[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]={
[o]={
Line 526: Line 548:
},
},
["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",
[g]="use __bridge_retained with C-style cast to make an ARC object available as a +1 A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="use __bridge_retained with C\\-style cast to make an ARC object available as a \\+1 (.*?)",
[l]="use __bridge_retained with C\\-style cast to make an ARC object available as a \\+1 (.*?)",
[l]=a,
[b]=a,
[c]=gc,
[k]=Mc,
[m]={"ac2d082f58e6",1361496168,"objective-C arc: Diagnostic can not say to use bridge"},
[m]={"ac2d082f58e6",1361496168,Kc,Kc},
[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;"}},
[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]={
[o]={
Line 541: Line 563:
},
},
["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",
[g]="use __bridge_transfer with C-style cast to transfer ownership of a +1 A into ARC",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="use __bridge_transfer with C\\-style cast to transfer ownership of a \\+1 (.*?) into ARC",
[l]="use __bridge_transfer with C\\-style cast to transfer ownership of a \\+1 (.*?) into ARC",
[l]=a,
[b]=a,
[c]=gc,
[k]=Mc,
[m]={"ac2d082f58e6",1361496168,"objective-C arc: Diagnostic can not say to use bridge"},
[m]={"ac2d082f58e6",1361496168,Kc,Kc},
[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;"}},
[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]={
[o]={
Line 556: Line 578:
},
},
["note_arc_field_with_ownership"]={
["note_arc_field_with_ownership"]={
[b]="field has non-trivial ownership qualification",
[g]="field has non-trivial ownership qualification",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="field has non-trivial ownership qualification",
[h]="field has non-trivial ownership qualification",
[j]=i,
[j]=i,
[k]="field has non\\-trivial ownership qualification",
[l]="field has non\\-trivial ownership qualification",
[l]=a,
[b]=a,
[c]=Pc,
[k]=fd,
[m]={Oc,1446008599,Nc},
[m]={hd,1446008599,Fb,Fb},
[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;"}},
[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]={
[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"}
["clang/test/SemaObjCXX/arc-system-header.mm"]={"clang/test/SemaObjCXX/Inputs/arc-system-header.h:10:7: note: field has non-trivial ownership qualification"}
Line 571: Line 593:
},
},
["note_arc_forbidden_type"]={
["note_arc_forbidden_type"]={
[b]="declaration uses type that is ill-formed in ARC",
[g]="declaration uses type that is ill-formed in ARC",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="declaration uses type that is ill-formed in ARC",
[h]="declaration uses type that is ill-formed in ARC",
[j]=i,
[j]=i,
[k]="declaration uses type that is ill\\-formed in ARC",
[l]="declaration uses type that is ill\\-formed in ARC",
[l]=a,
[b]=a,
[c]=Pc,
[k]=fd,
[m]={Oc,1446008599,Nc},
[m]={hd,1446008599,Fb,Fb},
[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;"}},
[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]={
[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"}
["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"}
Line 586: Line 608:
},
},
["note_arc_gained_method_convention"]={
["note_arc_gained_method_convention"]={
[b]="declaration in interface is not in the \'...\' family because ...",
[g]="declaration in interface is not in the \'...\' family because ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]="ARC Semantic Issue",
[k]="ARC Semantic Issue",
[m]={Sb,1308178962,Rb},
[m]={nc,1308178962,lb,lb},
[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;"}},
[n]={{P,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]={
[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"}
["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"}
Line 601: Line 623:
},
},
["note_arc_init_returns_unrelated"]={
["note_arc_init_returns_unrelated"]={
[b]="init method must return a type related to its receiver type",
[g]="init method must return a type related to its receiver type",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="init method must return a type related to its receiver type",
[l]="init method must return a type related to its receiver type",
[l]=a,
[b]=a,
[c]=Pc,
[k]=fd,
[m]={Oc,1446008599,Nc},
[m]={hd,1446008599,Fb,Fb},
[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;"}}
[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",
[g]="declaration in interface",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="declaration in interface",
[h]="declaration in interface",
[j]=i,
[j]=i,
[k]="declaration in interface",
[l]="declaration in interface",
[l]=a,
[b]=a,
[c]="ARC Semantic Issue",
[k]="ARC Semantic Issue",
[m]={Sb,1308178962,Rb},
[m]={nc,1308178962,lb,lb},
[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;"}},
[n]={{P,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]={
[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"}
["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"}
Line 628: Line 650:
},
},
["note_arc_retain_cycle_owner"]={
["note_arc_retain_cycle_owner"]={
[b]="block will be retained by ...",
[g]="block will be retained by ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="block will be retained by (?:the captured object|an object strongly retained by the captured object)",
[l]="block will be retained by (?:the captured object|an object strongly retained by the captured object)",
[l]=a,
[b]=a,
[c]="ARC Retain Cycle",
[k]="ARC Retain Cycle",
[m]={Sb,1308178962,Rb},
[m]={nc,1308178962,lb,lb},
[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;"}},
[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]={
[o]={
Line 643: Line 665:
},
},
["note_arc_weak_also_accessed_here"]={
["note_arc_weak_also_accessed_here"]={
[b]="also accessed here",
[g]="also accessed here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="also accessed here",
[h]="also accessed here",
[j]=i,
[j]=i,
[k]="also accessed here",
[l]="also accessed here",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Add a warning (off by default) for repeated use of the same weak property."},
[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();"}},
[n]={{Db,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]={
[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"}
["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"}
Line 658: Line 680:
},
},
["note_arc_weak_disabled"]={
["note_arc_weak_disabled"]={
[b]="declaration uses __weak, but ARC is disabled",
[g]="declaration uses __weak, but ARC is disabled",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="declaration uses __weak, but ARC is disabled",
[h]="declaration uses __weak, but ARC is disabled",
[j]=i,
[j]=i,
[k]="declaration uses __weak, but ARC is disabled",
[l]="declaration uses __weak, but ARC is disabled",
[l]=a,
[b]=a,
[c]=Pc,
[k]=fd,
[m]={Oc,1446008599,Nc},
[m]={hd,1446008599,Fb,Fb},
[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;"}},
[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]={
[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"}
["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"}
Line 673: Line 695:
},
},
["note_arc_weak_no_runtime"]={
["note_arc_weak_no_runtime"]={
[b]="declaration uses __weak, which the current deployment target does not support",
[g]="declaration uses __weak, which the current deployment target does not support",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="declaration uses __weak, which the current deployment target does not support",
[l]="declaration uses __weak, which the current deployment target does not support",
[l]=a,
[b]=a,
[c]=Pc,
[k]=fd,
[m]={Oc,1446008599,Nc},
[m]={hd,1446008599,Fb,Fb},
[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;"}}
[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",
[g]="array A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="array %0 declared here",
[h]="array %0 declared here",
[j]=i,
[j]=i,
[k]="array (.*?) declared here",
[l]="array (.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Zb,1567434909,Yb},
[m]={qc,1567434909,jb,jb},
[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;"}},
[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]={
[o]={
Line 700: Line 722:
},
},
["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",
[g]="add \'u8\' prefix to form a \'char8_t\' string literal",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="add \'u8\' prefix to form a \'char8_t\' string literal",
[h]="add \'u8\' prefix to form a \'char8_t\' string literal",
[j]=i,
[j]=i,
[k]="add \'u8\' prefix to form a \'char8_t\' string literal",
[l]="add \'u8\' prefix to form a \'char8_t\' string literal",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type."},
[m]={"3a8244df6fb8",1525150965,"Implement P0482R2, support for char8_t type.","Implement P0482R2, support for char8_t type."},
[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\");"}},
[n]={{L,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]={
[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"}
["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"}
Line 715: Line 737:
},
},
["note_array_size_conversion"]={
["note_array_size_conversion"]={
[b]="conversion to ... type A declared here",
[g]="conversion to ... type A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="conversion to %select{integral|enumeration}0 type %1 declared here",
[h]="conversion to %select{integral|enumeration}0 type %1 declared here",
[j]=i,
[j]=i,
[k]="conversion to (?:integral|enumeration) type (.*?) declared here",
[l]="conversion to (?:integral|enumeration) type (.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Implement C++ DR299, which allows an implicit conversion from a class"},
[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; }"}}
[n]={{X,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; }"},{X,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",
[g]="constraint \'A\' is already present here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="constraint \'%0\' is already present here",
[h]="constraint \'%0\' is already present here",
[j]=i,
[j]=i,
[k]="constraint \'(.*?)\' is already present here",
[l]="constraint \'(.*?)\' is already present here",
[l]=a,
[b]=a,
[c]="Inline Assembly Issue",
[k]="Inline Assembly Issue",
[m]={"8e261be91106",1442846460,"Fix assertion in inline assembler IR gen"},
[m]={"8e261be91106",1442846460,"Fix assertion in inline assembler IR gen","Fix assertion in inline assembler IR gen"},
[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;"}},
[n]={{Xc,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]={
[o]={
["clang/test/Sema/asm.c"]={"clang/test/Sema/asm.c:291:17: note: constraint \'1\' is already present here"}
["clang/test/Sema/asm.c"]={"clang/test/Sema/asm.c:291:17: note: constraint \'1\' is already present here"}
Line 742: Line 764:
},
},
["note_asm_missing_constraint_modifier"]={
["note_asm_missing_constraint_modifier"]={
[b]="use constraint modifier \"A\"",
[g]="use constraint modifier \"A\"",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="use constraint modifier \"%0\"",
[h]="use constraint modifier \"%0\"",
[j]=i,
[j]=i,
[k]="use constraint modifier \"(.*?)\"",
[l]="use constraint modifier \"(.*?)\"",
[l]=a,
[b]=a,
[c]="Inline Assembly Issue",
[k]="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","[AArch64, inline-asm] Improve diagnostic that is printed when the size of a"},
[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;"}},
[n]={{Xc,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]={
[o]={
["clang/test/Sema/arm64-inline-asm.c"]={"clang/test/Sema/arm64-inline-asm.c:8:21: note: use constraint modifier \"w\""}
["clang/test/Sema/arm64-inline-asm.c"]={"clang/test/Sema/arm64-inline-asm.c:8:21: note: use constraint modifier \"w\""}
Line 757: Line 779:
},
},
["note_assign_lhs_incomplete"]={
["note_assign_lhs_incomplete"]={
[b]="type A is incomplete",
[g]="type A is incomplete",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="type %0 is incomplete",
[h]="type %0 is incomplete",
[j]=i,
[j]=i,
[k]="type (.*?) is incomplete",
[l]="type (.*?) is incomplete",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"a31efa07ff70",1377722135,"Improve error for assignment to incomplete class."},
[m]={"a31efa07ff70",1377722135,"Improve error for assignment to incomplete class.","Improve error for assignment to incomplete class."},
[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();"}},
[n]={{ib,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]={
[o]={
["clang/test/SemaCXX/overloaded-operator.cpp"]={"clang/test/SemaCXX/overloaded-operator.cpp:452:12: note: type \'PointerUnion<int *, float *>\' is incomplete"}
["clang/test/SemaCXX/overloaded-operator.cpp"]={"clang/test/SemaCXX/overloaded-operator.cpp:452:12: note: type \'PointerUnion<int *, float *>\' is incomplete"}
Line 772: Line 794:
},
},
["note_atomic_constraint_evaluated_to_false"]={
["note_atomic_constraint_evaluated_to_false"]={
[b]="... \'A\' evaluated to false",
[g]="... \'A\' evaluated to false",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{and|because}0 \'%1\' evaluated to false",
[h]="%select{and|because}0 \'%1\' evaluated to false",
[j]=i,
[j]=i,
[k]="(?:and|because) \'(.*?)\' evaluated to false",
[l]="(?:and|because) \'(.*?)\' evaluated to false",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={pc,1569403888,rc},
[m]={bd,1569403888,wb,wb},
[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;"}},
[n]={{hb,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]={
[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"}
["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"}
Line 787: Line 809:
},
},
["note_atomic_constraint_evaluated_to_false_elaborated"]={
["note_atomic_constraint_evaluated_to_false_elaborated"]={
[b]="... \'A\' (B C D) evaluated to false",
[g]="... \'A\' (B C D) evaluated to false",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:and|because) \'(.*?)\' \\((.*?) (.*?) (.*?)\\) evaluated to false",
[l]="(?:and|because) \'(.*?)\' \\((.*?) (.*?) (.*?)\\) evaluated to false",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={pc,1569403888,rc},
[m]={bd,1569403888,wb,wb},
[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);"}},
[n]={{hb,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]={
[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"}
["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"}
Line 802: Line 824:
},
},
["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",
[g]="setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic",
[l]="setter and getter must both be synthesized, or both be user defined, or the property must be nonatomic",
[l]=a,
[b]=a,
[c]=p,
[k]=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","objc: Improve on diagnostic when atomic proeprty is synthesized"},
[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);"}},
[n]={{gb,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);"},{gb,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) \");"},{gb,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]={
[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"}
["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"}
Line 817: Line 839:
},
},
["note_attribute"]={
["note_attribute"]={
[b]="attribute is here",
[g]="attribute is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="attribute is here",
[h]="attribute is here",
[j]=i,
[j]=i,
[k]="attribute is here",
[l]="attribute is here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"078d2f89cd6a",1401382220,"Sema: Check dll attributes on static data members"},
[m]={"078d2f89cd6a",1401382220,"Sema: Check dll attributes on static data members","Sema: Check dll attributes on static data members"},
[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);"}},
[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);"},{Xc,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);"},{Xc,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]={
[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"}
["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"}
Line 832: Line 854:
},
},
["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",
[g]="annotating the \'if ...\' statement here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="annotating the \'if %select{constexpr|consteval}0\' statement here",
[h]="annotating the \'if %select{constexpr|consteval}0\' statement here",
[j]=i,
[j]=i,
[k]="annotating the \'if (?:constexpr|consteval)\' statement here",
[l]="annotating the \'if (?:constexpr|consteval)\' statement here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={lc,1615397021,vc},
[m]={Vc,1615397021,ub,ub},
[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));"}},
[n]={{I,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]={
[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"}
["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"}
Line 847: Line 869:
},
},
["note_attribute_has_no_effect_on_infinite_loop_here"]={
["note_attribute_has_no_effect_on_infinite_loop_here"]={
[b]="annotating the infinite loop here",
[g]="annotating the infinite loop here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="annotating the infinite loop here",
[h]="annotating the infinite loop here",
[j]=i,
[j]=i,
[k]="annotating the infinite loop here",
[l]="annotating the infinite loop here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={pb,1590001902,qb},
[m]={Cb,1590001902,R,R},
[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]={
[o]={
Line 862: Line 884:
},
},
["note_attribute_overloadable_prev_overload"]={
["note_attribute_overloadable_prev_overload"]={
[b]="previous ...overload of function is here",
[g]="previous ...overload of function is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="previous %select{unmarked |}0overload of function is here",
[h]="previous %select{unmarked |}0overload of function is here",
[j]=i,
[j]=i,
[k]="previous (?:unmarked |)overload of function is here",
[l]="previous (?:unmarked |)overload of function is here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Jb,1236199783,Kb},
[m]={hc,1236199783,Zb,cc},
[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;"}},
[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]={
[o]={
Line 877: Line 899:
},
},
["note_auto_readonly_iboutlet_fixup_suggest"]={
["note_auto_readonly_iboutlet_fixup_suggest"]={
[b]="property should be changed to be readwrite",
[g]="property should be changed to be readwrite",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="property should be changed to be readwrite",
[h]="property should be changed to be readwrite",
[j]=i,
[j]=i,
[k]="property should be changed to be readwrite",
[l]="property should be changed to be readwrite",
[l]=a,
[b]=a,
[c]=p,
[k]=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","objective-c: Warn if default synthesizing readonly IBOutlet properties"},
[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\");"}},
[n]={{gb,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]={
[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"}
["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"}
Line 892: Line 914:
},
},
["note_availability_specified_here"]={
["note_availability_specified_here"]={
[b]="A has been explicitly marked ... here",
[g]="A has been explicitly marked ... here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) has been explicitly marked (?:unavailable|deleted|deprecated) here",
[l]="(.*?) has been explicitly marked (?:unavailable|deleted|deprecated) here",
[l]=a,
[b]=a,
[c]=p,
[k]=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\'.","Implemented delayed processing of \'unavailable\' checking, just like with \'deprecated\'."},
[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;"}},
[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]={
[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"}
["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"}
Line 907: Line 929:
},
},
["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\'",
[g]="return type of \'await_ready\' is required to be contextually convertible to \'bool\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="return type of \'await_ready\' is required to be contextually convertible to \'bool\'",
[l]="return type of \'await_ready\' is required to be contextually convertible to \'bool\'",
[l]=a,
[b]=a,
[c]=Bc,
[k]=wc,
[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...","[coroutines] Diagnose invalid result  types for `await_resume` and `await_suspend` and add missing conversions."},
[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);"}},
[n]={{W,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]={
[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\'"}
["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\'"}
Line 922: Line 944:
},
},
["note_bad_memaccess_silence"]={
["note_bad_memaccess_silence"]={
[b]="explicitly cast the pointer to silence this warning",
[g]="explicitly cast the pointer to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="explicitly cast the pointer to silence this warning",
[h]="explicitly cast the pointer to silence this warning",
[j]=i,
[j]=i,
[k]="explicitly cast the pointer to silence this warning",
[l]="explicitly cast the pointer to silence this warning",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Clean up the \"non-POD memaccess\" stuff some. This adds a properly named"},
[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*)\"));"}},
[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]={
[o]={
Line 937: Line 959:
},
},
["note_base_class_specified_here"]={
["note_base_class_specified_here"]={
[b]="base class A specified here",
[g]="base class A specified here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="base class %0 specified here",
[h]="base class %0 specified here",
[j]=i,
[j]=i,
[k]="base class (.*?) specified here",
[l]="base class (.*?) specified here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","When we typo-correct a base class initializer, point to the base class"},
[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();"}},
[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]={
[o]={
Line 952: Line 974:
},
},
["note_bitfield_decl"]={
["note_bitfield_decl"]={
[b]="bit-field is declared here",
[g]="bit-field is declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="bit-field is declared here",
[h]="bit-field is declared here",
[j]=i,
[j]=i,
[k]="bit\\-field is declared here",
[l]="bit\\-field is declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Reimplement reference initialization (C++ [dcl.init.ref]) using the"},
[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);"}},
[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);"},{L,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);"},{Xc,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]={
[o]={
["clang/test/SemaObjCXX/references.mm"]={"clang/test/SemaObjCXX/references.mm:70:12: note: bit-field is declared here"}
["clang/test/SemaObjCXX/references.mm"]={"clang/test/SemaObjCXX/references.mm:70:12: note: bit-field is declared here"}
Line 967: Line 989:
},
},
["note_block_var_fixit_add_initialization"]={
["note_block_var_fixit_add_initialization"]={
[b]="did you mean to use __block A?",
[g]="did you mean to use __block A?",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="did you mean to use __block %0?",
[h]="did you mean to use __block %0?",
[j]=i,
[j]=i,
[k]="did you mean to use __block (.*?)\\?",
[l]="did you mean to use __block (.*?)\\?",
[l]=a,
[b]=a,
[c]=p,
[k]=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","improve on diagnostic and provide a fixit hint when"},
[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 \");"}},
[n]={{Db,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]={
[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\'?"}
["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\'?"}
Line 982: Line 1,004:
},
},
["note_bracket_depth"]={
["note_bracket_depth"]={
[b]="use -fbracket-depth=N to increase maximum nesting level",
[g]="use -fbracket-depth=N to increase maximum nesting level",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="use -fbracket-depth=N to increase maximum nesting level",
[h]="use -fbracket-depth=N to increase maximum nesting level",
[j]=i,
[j]=i,
[k]="use \\-fbracket\\-depth\\=N to increase maximum nesting level",
[l]="use \\-fbracket\\-depth\\=N to increase maximum nesting level",
[l]=a,
[b]=a,
[c]=Z,
[k]=qb,
[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=,","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]={
[o]={
Line 997: Line 1,019:
},
},
["note_building_builtin_dump_struct_call"]={
["note_building_builtin_dump_struct_call"]={
[b]="in call to printing function with arguments \'(A)\' while dumping struct",
[g]="in call to printing function with arguments \'(A)\' while dumping struct",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="in call to printing function with arguments \'\\((.*?)\\)\' while dumping struct",
[l]="in call to printing function with arguments \'\\((.*?)\\)\' while dumping struct",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[m]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs"},
[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));"}},
[n]={{H,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]={
[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"}
["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"}
Line 1,012: Line 1,034:
},
},
["note_called_by"]={
["note_called_by"]={
[b]="called by A",
[g]="called by A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="called by %0",
[h]="called by %0",
[j]=i,
[j]=i,
[k]="called by (.*?)",
[l]="called by (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","[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]={
[o]={
Line 1,027: Line 1,049:
},
},
["note_called_once_gets_called_twice"]={
["note_called_once_gets_called_twice"]={
[b]="previous call is here...",
[g]="previous call is here...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="previous call is here(?:; set to nil to indicate it cannot be called afterwards|)",
[l]="previous call is here(?:; set to nil to indicate it cannot be called afterwards|)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={pb,1590001902,qb},
[m]={Cb,1590001902,R,R},
[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;"}},
[n]={{Db,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]={
[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"}
["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"}
Line 1,042: Line 1,064:
},
},
["note_callee_decl"]={
["note_callee_decl"]={
[b]="A declared here",
[g]="A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%0 declared here",
[h]="%0 declared here",
[j]=i,
[j]=i,
[k]="(.*?) declared here",
[l]="(.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"3bc84ca376a2",1311899082,"Fix an inconsistency in Sema::ConvertArgumentsForCall in that"},
[m]={"3bc84ca376a2",1311899082,"Fix an inconsistency in Sema::ConvertArgumentsForCall in that","Fix an inconsistency in Sema::ConvertArgumentsForCall in that"},
[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;"}}
[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;"},{gb,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",
[g]="callee declares array parameter as static here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="callee declares array parameter as static here",
[h]="callee declares array parameter as static here",
[j]=i,
[j]=i,
[k]="callee declares array parameter as static here",
[l]="callee declares array parameter as static here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Add sema checks for calls to functions taking static array parameters"},
[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();"}},
[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]={
[o]={
Line 1,069: Line 1,091:
},
},
["note_cannot_use_trivial_abi_reason"]={
["note_cannot_use_trivial_abi_reason"]={
[b]="\'trivial_abi\' is disallowed on A because ...",
[g]="\'trivial_abi\' is disallowed on A because ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="\'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,
[b]=a,
[c]=p,
[k]=p,
[m]={mb,1582847864,jb},
[m]={Bb,1582847864,T,T},
[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;"}},
[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]={
[o]={
Line 1,084: Line 1,106:
},
},
["note_carries_dependency_missing_first_decl"]={
["note_carries_dependency_missing_first_decl"]={
[b]="declaration missing \'[[carries_dependency]]\' attribute is here",
[g]="declaration missing \'[[carries_dependency]]\' attribute is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="declaration missing \'[[carries_dependency]]\' attribute is here",
[h]="declaration missing \'[[carries_dependency]]\' attribute is here",
[j]=i,
[j]=i,
[k]="declaration missing \'\\[\\[carries_dependency\\]\\]\' attribute is here",
[l]="declaration missing \'\\[\\[carries_dependency\\]\\]\' attribute is here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute."},
[m]={"e233fbfc16fe",1359412965,"Finish semantic analysis for [[carries_dependency]] attribute.","Finish semantic analysis for [[carries_dependency]] attribute."},
[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*/;"}},
[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]={
[o]={
Line 1,099: Line 1,121:
},
},
["note_cast_operand_to_int"]={
["note_cast_operand_to_int"]={
[b]="cast one or both operands to int to silence this warning",
[g]="cast one or both operands to int to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="cast one or both operands to int to silence this warning",
[l]="cast one or both operands to int to silence this warning",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={lc,1615397021,vc},
[m]={Vc,1615397021,ub,ub},
[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);"}},
[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]={
[o]={
Line 1,114: Line 1,136:
},
},
["note_cast_to_void"]={
["note_cast_to_void"]={
[b]="cast expression to void to silence warning",
[g]="cast expression to void to silence warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="cast expression to void to silence warning",
[h]="cast expression to void to silence warning",
[j]=i,
[j]=i,
[k]="cast expression to void to silence warning",
[l]="cast expression to void to silence warning",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"faca2d83b13e",1455839920,"Add -Wcomma warning to Clang."},
[m]={"faca2d83b13e",1455839920,"Add -Wcomma warning to Clang.","Add -Wcomma warning to Clang."},
[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()), \")\");"}},
[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]={
[o]={
Line 1,129: Line 1,151:
},
},
["note_cat_conform_to_noescape_prot"]={
["note_cat_conform_to_noescape_prot"]={
[b]="... conforms to protocol A which defines method B",
[g]="... conforms to protocol A which defines method B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:category|class extension) conforms to protocol (.*?) which defines method (.*?)",
[l]="(?:category|class extension) conforms to protocol (.*?) which defines method (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=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","[Sema][ObjC] Warn when a method declared in a protocol takes a"},
[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());"}},
[n]={{P,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]={
[o]={
["clang/test/SemaObjCXX/noescape.mm"]={"clang/test/SemaObjCXX/noescape.mm:119:12: note: class extension conforms to protocol \'NoescapeProt\' which defines method \'m0:\'"}
["clang/test/SemaObjCXX/noescape.mm"]={"clang/test/SemaObjCXX/noescape.mm:119:12: note: class extension conforms to protocol \'NoescapeProt\' which defines method \'m0:\'"}
Line 1,144: Line 1,166:
},
},
["note_cc1_round_trip_generated"]={
["note_cc1_round_trip_generated"]={
[b]="generated arguments #A in round-trip: B",
[g]="generated arguments #A in round-trip: B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="generated arguments #%0 in round-trip: %1",
[h]="generated arguments #%0 in round-trip: %1",
[j]=i,
[j]=i,
[k]="generated arguments \\#(.*?) in round\\-trip\\: (.*?)",
[l]="generated arguments \\#(.*?) in round\\-trip\\: (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[m]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[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);"}}
[n]={{xc,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);"},{xc,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);"},{xc,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",
[g]="original arguments in round-trip: A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="original arguments in round-trip: %0",
[h]="original arguments in round-trip: %0",
[j]=i,
[j]=i,
[k]="original arguments in round\\-trip\\: (.*?)",
[l]="original arguments in round\\-trip\\: (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[m]={"0175999805cf",1585492323,"[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee","[AMDGPU] Add options -mamdgpu-ieee -mno-amdgpu-ieee"},
[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);"}}
[n]={{xc,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 ...",
[g]="consider making the bitfield type ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="consider making the bitfield type %select{unsigned|signed}0",
[h]="consider making the bitfield type %select{unsigned|signed}0",
[j]=i,
[j]=i,
[k]="consider making the bitfield type (?:unsigned|signed)",
[l]="consider making the bitfield type (?:unsigned|signed)",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Warn on enum assignment to bitfields that can\'t fit all values"},
[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;"}},
[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]={
[o]={
Line 1,183: Line 1,205:
},
},
["note_change_calling_conv_fixit"]={
["note_change_calling_conv_fixit"]={
[b]="consider defining A with the \'B\' calling convention",
[g]="consider defining A with the \'B\' calling convention",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="consider defining %0 with the \'%1\' calling convention",
[h]="consider defining %0 with the \'%1\' calling convention",
[j]=i,
[j]=i,
[k]="consider defining (.*?) with the \'(.*?)\' calling convention",
[l]="consider defining (.*?) with the \'(.*?)\' calling convention",
[l]=a,
[b]=a,
[c]=p,
[k]=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","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]={
[o]={
Line 1,198: Line 1,220:
},
},
["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",
[g]="while checking constraint satisfaction for class template partial specialization \'A\' required here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="while checking constraint satisfaction for class template partial specialization \'(.*?)\' required here",
[l]="while checking constraint satisfaction for class template partial specialization \'(.*?)\' required here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={pc,1569403888,rc},
[m]={bd,1569403888,wb,wb},
[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;"}},
[n]={{H,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]={
[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"}
["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"}
Line 1,213: Line 1,235:
},
},
["note_checking_constraints_for_function_here"]={
["note_checking_constraints_for_function_here"]={
[b]="while checking constraint satisfaction for function \'A\' required here",
[g]="while checking constraint satisfaction for function \'A\' required here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="while checking constraint satisfaction for function \'%0\' required here",
[h]="while checking constraint satisfaction for function \'%0\' required here",
[j]=i,
[j]=i,
[k]="while checking constraint satisfaction for function \'(.*?)\' required here",
[l]="while checking constraint satisfaction for function \'(.*?)\' required here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling"},
[m]={"1228d42ddab8",1576809732,bc,bc},
[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;"}},
[n]={{H,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]={
[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"}
["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"}
Line 1,228: Line 1,250:
},
},
["note_checking_constraints_for_template_id_here"]={
["note_checking_constraints_for_template_id_here"]={
[b]="while checking constraint satisfaction for template \'A\' required here",
[g]="while checking constraint satisfaction for template \'A\' required here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="while checking constraint satisfaction for template \'%0\' required here",
[h]="while checking constraint satisfaction for template \'%0\' required here",
[j]=i,
[j]=i,
[k]="while checking constraint satisfaction for template \'(.*?)\' required here",
[l]="while checking constraint satisfaction for template \'(.*?)\' required here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={pc,1569403888,rc},
[m]={bd,1569403888,wb,wb},
[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;"}},
[n]={{H,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]={
[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"}
["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"}
Line 1,243: Line 1,265:
},
},
["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",
[g]="while checking constraint satisfaction for variable template partial specialization \'A\' required here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="while checking constraint satisfaction for variable template partial specialization \'(.*?)\' required here",
[l]="while checking constraint satisfaction for variable template partial specialization \'(.*?)\' required here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={pc,1569403888,rc},
[m]={bd,1569403888,wb,wb},
[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;"}},
[n]={{H,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]={
[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"}
["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"}
Line 1,258: Line 1,280:
},
},
["note_class_declared"]={
["note_class_declared"]={
[b]="class is declared here",
[g]="class is declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="class is declared here",
[h]="class is declared here",
[j]=i,
[j]=i,
[k]="class is declared here",
[l]="class is declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","objc-arc: Support objc_arc_weak_unavailable on those"},
[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);"}},
[n]={{P,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);"},{P,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);"},{J,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]={
[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"}
["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"}
Line 1,273: Line 1,295:
},
},
["note_cocoa_naming_declare_family"]={
["note_cocoa_naming_declare_family"]={
[b]="explicitly declare getter A with \'B\' to return an \'unowned\' object",
[g]="explicitly declare getter A with \'B\' to return an \'unowned\' object",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="explicitly declare getter (.*?) with \'(.*?)\' to return an \'unowned\' object",
[l]="explicitly declare getter (.*?) with \'(.*?)\' to return an \'unowned\' object",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Suggest objc_method_family(none) for a property named -newFoo or similar."},
[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;"}},
[n]={{gb,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]={
[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"}
["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"}
Line 1,288: Line 1,310:
},
},
["note_collapse_loop_count"]={
["note_collapse_loop_count"]={
[b]="parameter of the \'collapse\' clause",
[g]="parameter of the \'collapse\' clause",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="parameter of the \'collapse\' clause",
[h]="parameter of the \'collapse\' clause",
[j]=i,
[j]=i,
[k]="parameter of the \'collapse\' clause",
[l]="parameter of the \'collapse\' clause",
[l]=a,
[b]=a,
[c]="OpenMP Issue",
[k]="OpenMP Issue",
[m]={"7b6bc88c5aaf",1448524239,"[OPENMP 4.5] Fixed rules for \'ordered\' clause."},
[m]={"7b6bc88c5aaf",1448524239,"[OPENMP 4.5] Fixed rules for \'ordered\' clause.","[OPENMP 4.5] Fixed rules for \'ordered\' clause."},
[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();"}},
[n]={{K,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]={
[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"}
["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"}
Line 1,303: Line 1,325:
},
},
["note_comparison_synthesized_at"]={
["note_comparison_synthesized_at"]={
[b]="in defaulted ... comparison operator for A first required here",
[g]="in defaulted ... comparison operator for A first required here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="in defaulted (?:equality|three\\-way|equality|relational) comparison operator for (.*?) first required here",
[l]="in defaulted (?:equality|three\\-way|equality|relational) comparison operator for (.*?) first required here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"cafc7416baf7",1575501927,"[c++20] Synthesis of defaulted comparison functions."},
[m]={"cafc7416baf7",1575501927,"[c++20] Synthesis of defaulted comparison functions.","[c++20] Synthesis of defaulted comparison functions."},
[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;"}},
[n]={{H,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]={
[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"}
["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"}
Line 1,318: Line 1,340:
},
},
["note_compat_assoc"]={
["note_compat_assoc"]={
[b]="compatible type A specified here",
[g]="compatible type A specified here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="compatible type %0 specified here",
[h]="compatible type %0 specified here",
[j]=i,
[j]=i,
[k]="compatible type (.*?) specified here",
[l]="compatible type (.*?) specified here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"91147596414d",1302827748,"C1X: implement generic selections"},
[m]={"91147596414d",1302827748,"C1X: implement generic selections","C1X: implement generic selections"},
[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();"}},
[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]={
[o]={
Line 1,333: Line 1,355:
},
},
["note_compound_token_split_second_token_here"]={
["note_compound_token_split_second_token_here"]={
[b]="...A token is here",
[g]="...A token is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{|second }0%1 token is here",
[h]="%select{|second }0%1 token is here",
[j]=i,
[j]=i,
[k]="(?:|second )(.*?) token is here",
[l]="(?:|second )(.*?) token is here",
[l]=a,
[b]=a,
[c]=Z,
[k]=qb,
[m]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)"},
[m]={"5c63ae156e96",1597298751,"[OpenMP] Support nested OpenMP context selectors (declare variant)","[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]={
[o]={
Line 1,348: Line 1,370:
},
},
["note_concatenated_string_literal_silence"]={
["note_concatenated_string_literal_silence"]={
[b]="place parentheses around the string literal to silence warning",
[g]="place parentheses around the string literal to silence warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="place parentheses around the string literal to silence warning",
[h]="place parentheses around the string literal to silence warning",
[j]=i,
[j]=i,
[k]="place parentheses around the string literal to silence warning",
[l]="place parentheses around the string literal to silence warning",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={mb,1582847864,jb},
[m]={Bb,1582847864,T,T},
[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);"}},
[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]={
[o]={
Line 1,363: Line 1,385:
},
},
["note_concept_specialization_constraint_evaluated_to_false"]={
["note_concept_specialization_constraint_evaluated_to_false"]={
[b]="... \'A\' evaluated to false",
[g]="... \'A\' evaluated to false",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{and|because}0 \'%1\' evaluated to false",
[h]="%select{and|because}0 \'%1\' evaluated to false",
[j]=i,
[j]=i,
[k]="(?:and|because) \'(.*?)\' evaluated to false",
[l]="(?:and|because) \'(.*?)\' evaluated to false",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={pc,1569403888,rc},
[m]={bd,1569403888,wb,wb},
[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;"}}
[n]={{hb,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",
[g]="while checking the satisfaction of concept \'A\' requested here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="while checking the satisfaction of concept \'%0\' requested here",
[h]="while checking the satisfaction of concept \'%0\' requested here",
[j]=i,
[j]=i,
[k]="while checking the satisfaction of concept \'(.*?)\' requested here",
[l]="while checking the satisfaction of concept \'(.*?)\' requested here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Zb,1567434909,Yb},
[m]={qc,1567434909,jb,jb},
[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;"}},
[n]={{H,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]={
[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"}
["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"}
Line 1,390: Line 1,412:
},
},
["note_condition_assign_silence"]={
["note_condition_assign_silence"]={
[b]="place parentheses around the assignment to silence this warning",
[g]="place parentheses around the assignment to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="place parentheses around the assignment to silence this warning",
[h]="place parentheses around the assignment to silence this warning",
[j]=i,
[j]=i,
[k]="place parentheses around the assignment to silence this warning",
[l]="place parentheses around the assignment to silence this warning",
[l]=a,
[b]=a,
[c]=p,
[k]=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","When diagnosing suspicious precedence or assignments, move the fix-it"},
[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, \")\");"}},
[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]={
[o]={
Line 1,405: Line 1,427:
},
},
["note_condition_assign_to_comparison"]={
["note_condition_assign_to_comparison"]={
[b]="use \'==\' to turn this assignment into an equality comparison",
[g]="use \'==\' to turn this assignment into an equality comparison",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="use \'==\' to turn this assignment into an equality comparison",
[h]="use \'==\' to turn this assignment into an equality comparison",
[j]=i,
[j]=i,
[k]="use \'\\=\\=\' to turn this assignment into an equality comparison",
[l]="use \'\\=\\=\' to turn this assignment into an equality comparison",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Improve the fix-its for -Wparentheses to ensure that the fix-it"},
[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, \"==\");"}},
[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]={
[o]={
Line 1,420: Line 1,442:
},
},
["note_condition_or_assign_to_comparison"]={
["note_condition_or_assign_to_comparison"]={
[b]="use \'!=\' to turn this compound assignment into an inequality comparison",
[g]="use \'!=\' to turn this compound assignment into an inequality comparison",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="use \'!=\' to turn this compound assignment into an inequality comparison",
[h]="use \'!=\' to turn this compound assignment into an inequality comparison",
[j]=i,
[j]=i,
[k]="use \'\\!\\=\' to turn this compound assignment into an inequality comparison",
[l]="use \'\\!\\=\' to turn this compound assignment into an inequality comparison",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Warn about the use of unparenthesized |= in conditionals (which may be"},
[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, \"!=\");"}},
[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]={
[o]={
Line 1,435: Line 1,457:
},
},
["note_conflicting_attribute"]={
["note_conflicting_attribute"]={
[b]="conflicting attribute is here",
[g]="conflicting attribute is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="conflicting attribute is here",
[h]="conflicting attribute is here",
[j]=i,
[j]=i,
[k]="conflicting attribute is here",
[l]="conflicting attribute is here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Warn when attribute \'optnone\' conflicts with attributes on a"},
[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\";"}},
[n]={{V,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);"},{V,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);"},{V,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);"},{V,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);"},{V,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);"},{V,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);"},{V,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);"},{V,4944,"MinSizeAttr *Sema::mergeMinSizeAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (OptimizeNoneAttr *Optnone = D->getAttr<OptimizeNoneAttr>()) {\n    Diag(Optnone->getLocation(), diag::note_conflicting_attribute);"},{V,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);"},{V,4974,"OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (AlwaysInlineAttr *Inline = D->getAttr<AlwaysInlineAttr>()) {\n    Diag(CI.getLoc(), diag::note_conflicting_attribute);"},{V,4979,"OptimizeNoneAttr *Sema::mergeOptimizeNoneAttr(Decl *D, const AttributeCommonInfo &CI) {\n  if (MinSizeAttr *MinSize = D->getAttr<MinSizeAttr>()) {\n    Diag(CI.getLoc(), diag::note_conflicting_attribute);"},{V,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);"},{V,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);"},{V,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);"},{V,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);"},{V,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);"},{V,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);"},{I,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]={
[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"}
["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"}
Line 1,450: Line 1,472:
},
},
["note_conflicting_prototype"]={
["note_conflicting_prototype"]={
[b]="conflicting prototype is here",
[g]="conflicting prototype is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="conflicting prototype is here",
[h]="conflicting prototype is here",
[j]=i,
[j]=i,
[k]="conflicting prototype is here",
[l]="conflicting prototype is here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs"},
[m]={"cb08f4aa4467",1620530452,"Support warn_unused_result on typedefs","Support warn_unused_result on typedefs"},
[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);"}},
[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]={
[o]={
Line 1,465: Line 1,487:
},
},
["note_conflicting_try_here"]={
["note_conflicting_try_here"]={
[b]="conflicting A here",
[g]="conflicting A here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="conflicting %0 here",
[h]="conflicting %0 here",
[j]=i,
[j]=i,
[k]="conflicting (.*?) here",
[l]="conflicting (.*?) here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","SEH: Diagnose use of C++ EH and SEH in the same function"},
[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\'\");"}},
[n]={{I,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\'\";"},{I,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\'\";"},{I,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]={
[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"}
["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"}
Line 1,480: Line 1,502:
},
},
["note_consteval_address_accessible"]={
["note_consteval_address_accessible"]={
[b]="... to a consteval declaration is not a constant expression",
[g]="... to a consteval declaration is not a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:pointer|reference) to a consteval declaration is not a constant expression",
[l]="(?:pointer|reference) to a consteval declaration is not a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Fc,1579695612,Qc},
[m]={nd,1579695612,Ib,Ib},
[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;"}},
[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]={
[o]={
Line 1,495: Line 1,517:
},
},
["note_constexpr_access_deleted_object"]={
["note_constexpr_access_deleted_object"]={
[b]="... heap allocated object that has been deleted",
[g]="... heap allocated object that has been deleted",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?: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,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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;"}},
[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]={
[o]={
[zb]={"clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:111:5: note: construction of heap allocated object that has been deleted"}
[Nb]={"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",
[g]="... member A of union with ... is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?: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,
[b]=a,
[c]=a,
[k]=a,
[m]={Gb,1366986990,Fb},
[m]={Tb,1366986990,db,db},
[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;"}},
[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;"},{B,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]={
[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"}
["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"}
Line 1,525: Line 1,547:
},
},
["note_constexpr_access_mutable"]={
["note_constexpr_access_mutable"]={
[b]="... mutable member A is not allowed in a constant expression",
[g]="... mutable member A is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?: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,
[b]=a,
[c]=a,
[k]=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","For P0784R7: compute whether a variable has constant destruction if it"},
[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;"}},
[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;"},{B,231,"bool CheckMutable(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  S.FFDiag(Loc, diag::note_constexpr_access_mutable, 1) << AK_Read << Field;"}},
[o]={
[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"}
["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"}
Line 1,540: Line 1,562:
},
},
["note_constexpr_access_null"]={
["note_constexpr_access_null"]={
[b]="... dereferenced null pointer is not allowed in a constant expression",
[g]="... dereferenced null pointer is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?: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,
[b]=a,
[c]=a,
[k]=a,
[m]={Gb,1366986990,Fb},
[m]={Tb,1366986990,db,db},
[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;"}},
[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;"},{B,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]={
[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"}
["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"}
Line 1,555: Line 1,577:
},
},
["note_constexpr_access_past_end"]={
["note_constexpr_access_past_end"]={
[b]="... dereferenced one-past-the-end pointer is not allowed in a constant expression",
[g]="... dereferenced one-past-the-end pointer is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?: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,
[b]=a,
[c]=a,
[k]=a,
[m]={Gb,1366986990,Fb},
[m]={Tb,1366986990,db,db},
[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;"}},
[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;"},{B,191,"bool CheckRange(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  S.FFDiag(Loc, diag::note_constexpr_access_past_end) << AK;"}},
[o]={
[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"}
["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"}
Line 1,570: Line 1,592:
},
},
["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",
[g]="... temporary is not allowed in a constant expression outside the expression that created the temporary",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?: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,
[b]=a,
[c]=a,
[k]=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","Model temporary lifetime-extension explicitly in the AST. Use this model to"},
[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;"}},
[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;"},{B,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]={
[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"}
["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"}
Line 1,585: Line 1,607:
},
},
["note_constexpr_access_uninit"]={
["note_constexpr_access_uninit"]={
[b]="... ... is not allowed in a constant expression",
[g]="... ... is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?: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,
[b]=a,
[c]=a,
[k]=a,
[m]={Gb,1366986990,Fb},
[m]={Tb,1366986990,db,db},
[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;"}},
[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();"},{B,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]={
[o]={
["clang/test/SemaCXX/constexpr-value-init.cpp"]={Gc,Gc,Gc,Gc,Gc}
["clang/test/SemaCXX/constexpr-value-init.cpp"]={dd,dd,dd,dd,dd}
}
}
},
},
["note_constexpr_access_unreadable_object"]={
["note_constexpr_access_unreadable_object"]={
[b]="... object \'A\' whose value is not known",
[g]="... object \'A\' whose value is not known",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?: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,
[b]=a,
[c]=a,
[k]=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","Refactor constant evaluation of typeid(T) to track a symbolic type_info"},
[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));"}},
[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]={
[o]={
Line 1,615: Line 1,637:
},
},
["note_constexpr_access_unsized_array"]={
["note_constexpr_access_unsized_array"]={
[b]="... element of array without known bound is not allowed in a constant expression",
[g]="... element of array without known bound is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?: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,
[b]=a,
[c]=a,
[k]=a,
[m]={"2cd56048239f",1503971533,"Improve constant expression evaluation of arrays of unknown bound."},
[m]={"2cd56048239f",1503971533,Jc,Jc},
[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;"}}
[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",
[g]="... volatile ... is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?:read of|read of|assignment to|increment of|decrement of) volatile (?:temporary|object (.*?)|member (.*?)) is not allowed in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Gb,1366986990,Fb},
[m]={Tb,1366986990,db,db},
[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;"}},
[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]={
[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"}
[cb]={"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",
[g]="... volatile-qualified type A is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:read of|read of|assignment to|increment of|decrement of) volatile\\-qualified type (.*?) is not allowed in a constant expression",
[l]="(?:read of|read of|assignment to|increment of|decrement of) volatile\\-qualified type (.*?) is not allowed in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Gb,1366986990,Fb},
[m]={Tb,1366986990,db,db},
[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;"}},
[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]={
[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"}
[cb]={"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",
[g]="cannot constant evaluate the result of adjusting alignment to A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="cannot constant evaluate the result of adjusting alignment to %0",
[h]="cannot constant evaluate the result of adjusting alignment to %0",
[j]=i,
[j]=i,
[k]="cannot constant evaluate the result of adjusting alignment to (.*?)",
[l]="cannot constant evaluate the result of adjusting alignment to (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"8c387cbea76b",1578602886,"Add builtins for aligning and checking alignment of pointers and integers"},
[m]={"8c387cbea76b",1578602886,Xb,Xb},
[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;"}},
[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]={
[o]={
Line 1,672: Line 1,694:
},
},
["note_constexpr_alignment_compute"]={
["note_constexpr_alignment_compute"]={
[b]="cannot constant evaluate whether run-time alignment is at least A",
[g]="cannot constant evaluate whether run-time alignment is at least A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="cannot constant evaluate whether run\\-time alignment is at least (.*?)",
[l]="cannot constant evaluate whether run\\-time alignment is at least (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"8c387cbea76b",1578602886,"Add builtins for aligning and checking alignment of pointers and integers"},
[m]={"8c387cbea76b",1578602886,Xb,Xb},
[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;"}},
[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]={
[o]={
Line 1,687: Line 1,709:
},
},
["note_constexpr_alignment_too_big"]={
["note_constexpr_alignment_too_big"]={
[b]="requested alignment must be A or less for type B; C is invalid",
[g]="requested alignment must be A or less for type B; C is invalid",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="requested alignment must be (.*?) or less for type (.*?); (.*?) is invalid",
[l]="requested alignment must be (.*?) or less for type (.*?); (.*?) is invalid",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"8c387cbea76b",1578602886,"Add builtins for aligning and checking alignment of pointers and integers"},
[m]={"8c387cbea76b",1578602886,Xb,Xb},
[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;"}},
[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]={
[o]={
Line 1,702: Line 1,724:
},
},
["note_constexpr_array_index"]={
["note_constexpr_array_index"]={
[b]="cannot refer to element A of ... in a constant expression",
[g]="cannot refer to element A of ... in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="cannot refer to element (.*?) of (?:array of (.*?) element(?:|s)|non\\-array object) in a constant expression",
[l]="cannot refer to element (.*?) of (?:array of (.*?) element(?:|s)|non\\-array object) in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"a8105bc9cecb",1325867940,"C++11 generalized constant expressions: implement checking and diagnostics for"},
[m]={"a8105bc9cecb",1325867940,Sb,Sb},
[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;"}},
[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]={
[o]={
Line 1,717: Line 1,739:
},
},
["note_constexpr_baa_insufficient_alignment"]={
["note_constexpr_baa_insufficient_alignment"]={
[b]="... the base pointee object (A byte) is ... the asserted B byte",
[g]="... the base pointee object (A byte) is ... the asserted B byte",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?: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,
[b]=a,
[c]=a,
[k]=a,
[m]={"0dd05d4b5936",1412356717,"constexpr evaluation for __builtin_assume_aligned"},
[m]={"0dd05d4b5936",1412356717,"constexpr evaluation for __builtin_assume_aligned","constexpr evaluation for __builtin_assume_aligned"},
[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();"}},
[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]={
[o]={
Line 1,732: Line 1,754:
},
},
["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",
[g]="value of the aligned pointer (A) is not a multiple of the asserted B byte",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="value of the aligned pointer \\((.*?)\\) is not a multiple of the asserted (.*?) (?:byte|bytes)",
[l]="value of the aligned pointer \\((.*?)\\) is not a multiple of the asserted (.*?) (?:byte|bytes)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"0dd05d4b5936",1412356717,"constexpr evaluation for __builtin_assume_aligned"},
[m]={"0dd05d4b5936",1412356717,"constexpr evaluation for __builtin_assume_aligned","constexpr evaluation for __builtin_assume_aligned"},
[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();"}},
[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]={
[o]={
Line 1,747: Line 1,769:
},
},
["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",
[g]="indeterminate value can only initialize an object of type \'unsigned char\'... or \'std::byte\'; A is invalid",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="indeterminate value can only initialize an object of type \'unsigned char\'(?:, \'char\',|) or \'std\\:\\:byte\'; (.*?) is invalid",
[l]="indeterminate value can only initialize an object of type \'unsigned char\'(?:, \'char\',|) or \'std\\:\\:byte\'; (.*?) is invalid",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Kc,1562092093,Lc},
[m]={od,1562092093,Jb,Jb},
[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;"}},
[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]={
[o]={
Line 1,762: Line 1,784:
},
},
["note_constexpr_bit_cast_invalid_subtype"]={
["note_constexpr_bit_cast_invalid_subtype"]={
[b]="invalid type A is a ... of B",
[g]="invalid type A is a ... of B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="invalid type (.*?) is a (?:member|base) of (.*?)",
[l]="invalid type (.*?) is a (?:member|base) of (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Kc,1562092093,Lc},
[m]={od,1562092093,Jb,Jb},
[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;"}},
[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]={
[o]={
Line 1,777: Line 1,799:
},
},
["note_constexpr_bit_cast_invalid_type"]={
["note_constexpr_bit_cast_invalid_type"]={
[b]="bit_cast ... a ...... ... is not allowed in a constant expression",
[g]="bit_cast ... a ...... ... is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={Kc,1562092093,Lc},
[m]={od,1562092093,Jb,Jb},
[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;"}},
[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]={
[o]={
Line 1,792: Line 1,814:
},
},
["note_constexpr_bit_cast_unrepresentable_value"]={
["note_constexpr_bit_cast_unrepresentable_value"]={
[b]="value A cannot be represented in type B",
[g]="value A cannot be represented in type B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="value %1 cannot be represented in type %0",
[h]="value %1 cannot be represented in type %0",
[j]=i,
[j]=i,
[k]="value (.*?) cannot be represented in type (.*?)",
[l]="value (.*?) cannot be represented in type (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=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","[AST] Fix handling of long double and bool in __builtin_bit_cast"},
[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);"}},
[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]={
[o]={
Line 1,807: Line 1,829:
},
},
["note_constexpr_bit_cast_unsupported_bitfield"]={
["note_constexpr_bit_cast_unsupported_bitfield"]={
[b]="constexpr bit_cast involving bit-field is not yet supported",
[g]="constexpr bit_cast involving bit-field is not yet supported",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="constexpr bit_cast involving bit-field is not yet supported",
[h]="constexpr bit_cast involving bit-field is not yet supported",
[j]=i,
[j]=i,
[k]="constexpr bit_cast involving bit\\-field is not yet supported",
[l]="constexpr bit_cast involving bit\\-field is not yet supported",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Kc,1562092093,Lc},
[m]={od,1562092093,Jb,Jb},
[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);"}},
[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]={
[o]={
Line 1,822: Line 1,844:
},
},
["note_constexpr_bit_cast_unsupported_type"]={
["note_constexpr_bit_cast_unsupported_type"]={
[b]="constexpr bit_cast involving type A is not yet supported",
[g]="constexpr bit_cast involving type A is not yet supported",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="constexpr bit_cast involving type %0 is not yet supported",
[h]="constexpr bit_cast involving type %0 is not yet supported",
[j]=i,
[j]=i,
[k]="constexpr bit_cast involving type (.*?) is not yet supported",
[l]="constexpr bit_cast involving type (.*?) is not yet supported",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Kc,1562092093,Lc},
[m]={od,1562092093,Jb,Jb},
[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;"}}
[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",
[g]="previous return statement is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="previous return statement is here",
[h]="previous return statement is here",
[j]=i,
[j]=i,
[k]="previous return statement is here",
[l]="previous return statement is here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Ab,1317436288,ub},
[m]={Qb,1317436288,bb,bb},
[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);"}},
[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]={
[o]={
Line 1,849: Line 1,871:
},
},
["note_constexpr_call_here"]={
["note_constexpr_call_here"]={
[b]="in call to \'A\'",
[g]="in call to \'A\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="in call to \'%0\'",
[h]="in call to \'%0\'",
[j]=i,
[j]=i,
[k]="in call to \'(.*?)\'",
[l]="in call to \'(.*?)\'",
[l]=a,
[b]=a,
[c]=a,
[k]=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","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]={
[o]={
Line 1,864: Line 1,886:
},
},
["note_constexpr_call_limit_exceeded"]={
["note_constexpr_call_limit_exceeded"]={
[b]="constexpr evaluation hit maximum call limit",
[g]="constexpr evaluation hit maximum call limit",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="constexpr evaluation hit maximum call limit",
[h]="constexpr evaluation hit maximum call limit",
[j]=i,
[j]=i,
[k]="constexpr evaluation hit maximum call limit",
[l]="constexpr evaluation hit maximum call limit",
[l]=a,
[b]=a,
[c]=a,
[k]=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","Implement DR1454. This allows all intermediate results in constant expressions"},
[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);"}}
[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)",
[g]="(skipping A callB in backtrace; use -fconstexpr-backtrace-limit=0 to see all)",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="\\(skipping (.*?) call(.*?) in backtrace; use \\-fconstexpr\\-backtrace\\-limit\\=0 to see all\\)",
[l]="\\(skipping (.*?) call(.*?) in backtrace; use \\-fconstexpr\\-backtrace\\-limit\\=0 to see all\\)",
[l]=a,
[b]=a,
[c]=a,
[k]=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","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]={
[o]={
Line 1,891: Line 1,913:
},
},
["note_constexpr_compare_virtual_mem_ptr"]={
["note_constexpr_compare_virtual_mem_ptr"]={
[b]="comparison of pointer to virtual member function A has unspecified value",
[g]="comparison of pointer to virtual member function A has unspecified value",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="comparison of pointer to virtual member function (.*?) has unspecified value",
[l]="comparison of pointer to virtual member function (.*?) has unspecified value",
[l]=a,
[b]=a,
[c]=a,
[k]=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.","constexpr: add support for comparisons of pointer-to-members."},
[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;"}},
[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]={
[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"}
[oc]={"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",
[g]="both arms of conditional operator are unable to produce a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="both arms of conditional operator are unable to produce a constant expression",
[l]="both arms of conditional operator are unable to produce a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"17100bad0ac1",1329360394,"constexpr tidyups:"},
[m]={"17100bad0ac1",1329360394,"constexpr tidyups:","constexpr tidyups:"},
[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);"}},
[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]={
[o]={
Line 1,921: Line 1,943:
},
},
["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",
[g]="construction of individual component of complex number is not yet supported in constant expressions",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="construction of individual component of complex number is not yet supported in constant expressions",
[l]="construction of individual component of complex number is not yet supported in constant expressions",
[l]=a,
[b]=a,
[c]=a,
[k]=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.","For P0784R7: support placement new-expressions in constant evaluation."},
[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);"}}
[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",
[g]="member not initialized by constructor",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="member not initialized by constructor",
[h]="member not initialized by constructor",
[j]=i,
[j]=i,
[k]="member not initialized by constructor",
[l]="member not initialized by constructor",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Ab,1317436288,ub},
[m]={Qb,1317436288,bb,bb},
[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);"}},
[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]={
[o]={
Line 1,948: Line 1,970:
},
},
["note_constexpr_deallocate_null"]={
["note_constexpr_deallocate_null"]={
[b]="\'std::allocator<...>::deallocate\' used to delete a null pointer",
[g]="\'std::allocator<...>::deallocate\' used to delete a null pointer",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="\'std::allocator<...>::deallocate\' used to delete a null pointer",
[h]="\'std::allocator<...>::deallocate\' used to delete a null pointer",
[j]=i,
[j]=i,
[k]="\'std\\:\\:allocator\\<\\.\\.\\.\\>\\:\\:deallocate\' used to delete a null pointer",
[l]="\'std\\:\\:allocator\\<\\.\\.\\.\\>\\:\\:deallocate\' used to delete a null pointer",
[l]=a,
[b]=a,
[c]=a,
[k]=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).","PR49465: Disallow constant evaluation of a call to operator delete(nullptr)."},
[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);"}},
[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]={
[o]={
[zb]={"clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:20:7: note: \'std::allocator<...>::deallocate\' used to delete a null pointer"}
[Nb]={"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",
[g]="delete of object with dynamic type A through pointer to base class type B with non-virtual destructor",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="delete of object with dynamic type (.*?) through pointer to base class type (.*?) with non\\-virtual destructor",
[l]="delete of object with dynamic type (.*?) through pointer to base class type (.*?) with non\\-virtual destructor",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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;"}},
[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]={
[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"}
[nb]={"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",
[g]="delete of pointer \'A\' that does not point to a heap-allocated object",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="delete of pointer \'(.*?)\' that does not point to a heap\\-allocated object",
[l]="delete of pointer \'(.*?)\' that does not point to a heap\\-allocated object",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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();"}},
[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]={
[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"}
[Nb]={"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\' ...",
[g]="delete of pointer... \'A\' ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="delete of pointer(?: to subobject|) \'(.*?)\' (?:|that does not point to complete object)",
[l]="delete of pointer(?: to subobject|) \'(.*?)\' (?:|that does not point to complete object)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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();"}},
[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]={
[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]\' "}
[nb]={"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",
[g]="constexpr evaluation exceeded maximum depth of A calls",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="constexpr evaluation exceeded maximum depth of %0 calls",
[h]="constexpr evaluation exceeded maximum depth of %0 calls",
[j]=i,
[j]=i,
[k]="constexpr evaluation exceeded maximum depth of (.*?) calls",
[l]="constexpr evaluation exceeded maximum depth of (.*?) calls",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={ac,1323758398,Qb},
[m]={rc,1323758398,kb,kb},
[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;"}},
[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;"},{B,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]={
[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"}
["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"}
Line 2,023: Line 2,045:
},
},
["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",
[g]="destruction of individual component of complex number is not yet supported in constant expressions",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="destruction of individual component of complex number is not yet supported in constant expressions",
[l]="destruction of individual component of complex number is not yet supported in constant expressions",
[l]=a,
[b]=a,
[c]=a,
[k]=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","For P0784R7: add support for explicit destructor calls and"},
[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);"}}
[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",
[g]="destroying object \'A\' whose lifetime has already ended",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="destroying object \'%0\' whose lifetime has already ended",
[h]="destroying object \'%0\' whose lifetime has already ended",
[j]=i,
[j]=i,
[k]="destroying object \'(.*?)\' whose lifetime has already ended",
[l]="destroying object \'(.*?)\' whose lifetime has already ended",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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));"}},
[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]={
[o]={
Line 2,050: Line 2,072:
},
},
["note_constexpr_double_delete"]={
["note_constexpr_double_delete"]={
[b]="delete of pointer that has already been deleted",
[g]="delete of pointer that has already been deleted",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="delete of pointer that has already been deleted",
[h]="delete of pointer that has already been deleted",
[j]=i,
[j]=i,
[k]="delete of pointer that has already been deleted",
[l]="delete of pointer that has already been deleted",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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);"}},
[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]={
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:917:5: note: delete of pointer that has already been deleted"}
[nb]={"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",
[g]="destruction of object that is already being destroyed",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="destruction of object that is already being destroyed",
[h]="destruction of object that is already being destroyed",
[j]=i,
[j]=i,
[k]="destruction of object that is already being destroyed",
[l]="destruction of object that is already being destroyed",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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);"}},
[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]={
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:921:24: note: destruction of object that is already being destroyed"}
[nb]={"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",
[g]="... declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{data member %1|base class %2}0 declared here",
[h]="%select{data member %1|base class %2}0 declared here",
[j]=i,
[j]=i,
[k]="(?:data member (.*?)|base class (.*?)) declared here",
[l]="(?:data member (.*?)|base class (.*?)) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Zb,1567434909,Yb},
[m]={qc,1567434909,jb,jb},
[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;"}},
[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]={
[o]={
Line 2,095: Line 2,117:
},
},
["note_constexpr_dynamic_alloc"]={
["note_constexpr_dynamic_alloc"]={
[b]="... to ...heap-allocated object is not a constant expression",
[g]="... to ...heap-allocated object is not a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:pointer|reference) to (?:|subobject of )heap\\-allocated object is not a constant expression",
[l]="(?:pointer|reference) to (?:|subobject of )heap\\-allocated object is not a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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();"}},
[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]={
[o]={
Line 2,110: Line 2,132:
},
},
["note_constexpr_dynamic_alloc_here"]={
["note_constexpr_dynamic_alloc_here"]={
[b]="heap allocation performed here",
[g]="heap allocation performed here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="heap allocation performed here",
[h]="heap allocation performed here",
[j]=i,
[j]=i,
[k]="heap allocation performed here",
[l]="heap allocation performed here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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);"}},
[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]={
[o]={
Line 2,125: Line 2,147:
},
},
["note_constexpr_dynamic_cast_to_reference_failed"]={
["note_constexpr_dynamic_cast_to_reference_failed"]={
[b]="reference dynamic_cast failed: ...",
[g]="reference dynamic_cast failed: ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=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","[c++20] For P1327R1: support dynamic_cast in constant expression"},
[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();"}},
[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]={
[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\'"}
[nb]={"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",
[g]="cannot evaluate this expression if rounding mode is dynamic",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="cannot evaluate this expression if rounding mode is dynamic",
[h]="cannot evaluate this expression if rounding mode is dynamic",
[j]=i,
[j]=i,
[k]="cannot evaluate this expression if rounding mode is dynamic",
[l]="cannot evaluate this expression if rounding mode is dynamic",
[l]=a,
[b]=a,
[c]=a,
[k]=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","[FPEnv] Evaluate constant expressions under non-default rounding modes"},
[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);"}}
[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);"},{B,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 ...",
[g]="floating point arithmetic produces ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="floating point arithmetic produces %select{an infinity|a NaN}0",
[h]="floating point arithmetic produces %select{an infinity|a NaN}0",
[j]=i,
[j]=i,
[k]="floating point arithmetic produces (?:an infinity|a NaN)",
[l]="floating point arithmetic produces (?:an infinity|a NaN)",
[l]=a,
[b]=a,
[c]=a,
[k]=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.","constexpr: overflow checking for integral and floating-point arithmetic."},
[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();"}},
[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]={
[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"}
[cb]={"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",
[g]="compile time floating point arithmetic suppressed in strict evaluation modes",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="compile time floating point arithmetic suppressed in strict evaluation modes",
[h]="compile time floating point arithmetic suppressed in strict evaluation modes",
[j]=i,
[j]=i,
[k]="compile time floating point arithmetic suppressed in strict evaluation modes",
[l]="compile time floating point arithmetic suppressed in strict evaluation modes",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"2e204e23911b",1601401476,"[clang] Enable support for #pragma STDC FENV_ACCESS"},
[m]={"2e204e23911b",1601401476,"[clang] Enable support for #pragma STDC FENV_ACCESS","[clang] Enable support for #pragma STDC FENV_ACCESS"},
[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);"}}
[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);"},{B,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",
[g]="function parameter A with unknown value cannot be used in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="function parameter (.*?) with unknown value cannot be used in a constant expression",
[l]="function parameter (.*?) with unknown value cannot be used in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"00068c452a59",1594250761,"Improve diagnostics for constant evaluation that fails because a"},
[m]={"00068c452a59",1594250761,Ub,Ub},
[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;"}},
[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]={
[o]={
Line 2,194: Line 2,216:
},
},
["note_constexpr_heap_alloc_limit_exceeded"]={
["note_constexpr_heap_alloc_limit_exceeded"]={
[b]="constexpr evaluation hit maximum heap allocation limit",
[g]="constexpr evaluation hit maximum heap allocation limit",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="constexpr evaluation hit maximum heap allocation limit",
[h]="constexpr evaluation hit maximum heap allocation limit",
[j]=i,
[j]=i,
[k]="constexpr evaluation hit maximum heap allocation limit",
[l]="constexpr evaluation hit maximum heap allocation limit",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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);"}}
[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",
[g]="in implicit initialization for inherited constructor of A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="in implicit initialization for inherited constructor of %0",
[h]="in implicit initialization for inherited constructor of %0",
[j]=i,
[j]=i,
[k]="in implicit initialization for inherited constructor of (.*?)",
[l]="in implicit initialization for inherited constructor of (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"5179eb78210a",1467140637,"P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:"},
[m]={"5179eb78210a",1467140637,Oc,Oc},
[n]={{"clang/lib/AST/Interp/State.cpp",150,"void State::addCallStack(unsigned Limit) {\n  for (const Frame *F = Top; F != Bottom; F = F->getCaller(), ++CallIdx) {\n    // Use a different note for an inheriting constructor, because from the\n    // user\'s perspective it\'s not really a function at all.\n    if (const auto *CD = dyn_cast_if_present<CXXConstructorDecl>(F->getCallee()); CD && CD->isInheritingConstructor()) {\n      addDiag(CallLocation, diag::note_constexpr_inherited_ctor_call_here) << CD->getParent();"}}
[n]={{"clang/lib/AST/Interp/State.cpp",150,"void State::addCallStack(unsigned Limit) {\n  for (const Frame *F = Top; F != Bottom; F = F->getCaller(), ++CallIdx) {\n    // Use a different note for an inheriting constructor, because from the\n    // user\'s perspective it\'s not really a function at all.\n    if (const auto *CD = dyn_cast_if_present<CXXConstructorDecl>(F->getCallee()); CD && CD->isInheritingConstructor()) {\n      addDiag(CallLocation, diag::note_constexpr_inherited_ctor_call_here) << CD->getParent();"}}
},
},
["note_constexpr_invalid_alignment"]={
["note_constexpr_invalid_alignment"]={
[b]="requested alignment A is not a positive power of two",
[g]="requested alignment A is not a positive power of two",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="requested alignment %0 is not a positive power of two",
[h]="requested alignment %0 is not a positive power of two",
[j]=i,
[j]=i,
[k]="requested alignment (.*?) is not a positive power of two",
[l]="requested alignment (.*?) is not a positive power of two",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"8c387cbea76b",1578602886,"Add builtins for aligning and checking alignment of pointers and integers"},
[m]={"8c387cbea76b",1578602886,Xb,Xb},
[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;"}},
[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]={
[o]={
Line 2,233: Line 2,255:
},
},
["note_constexpr_invalid_cast"]={
["note_constexpr_invalid_cast"]={
[b]="... is not allowed in a constant expression...",
[g]="... is not allowed in a constant expression...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?: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,
[b]=a,
[c]=a,
[k]=a,
[m]={"6d6ecc34f841",1323693976,"Implement C++11 constant expression cast restrictions."},
[m]={"6d6ecc34f841",1323693976,"Implement C++11 constant expression cast restrictions.","Implement C++11 constant expression cast restrictions."},
[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;"}},
[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]={
[o]={
Line 2,248: Line 2,270:
},
},
["note_constexpr_invalid_downcast"]={
["note_constexpr_invalid_downcast"]={
[b]="cannot cast object of dynamic type A to type B",
[g]="cannot cast object of dynamic type A to type B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="cannot cast object of dynamic type %0 to type %1",
[h]="cannot cast object of dynamic type %0 to type %1",
[j]=i,
[j]=i,
[k]="cannot cast object of dynamic type (.*?) to type (.*?)",
[l]="cannot cast object of dynamic type (.*?) to type (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"a8105bc9cecb",1325867940,"C++11 generalized constant expressions: implement checking and diagnostics for"},
[m]={"a8105bc9cecb",1325867940,Sb,Sb},
[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;"}},
[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]={
[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>\'"}
[oc]={"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",
[g]="... ... A cannot be used in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:non\\-constexpr|undefined) (?:function|constructor) (.*?) cannot be used in a constant expression",
[l]="(?:non\\-constexpr|undefined) (?:function|constructor) (.*?) cannot be used in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={ac,1323758398,Qb},
[m]={rc,1323758398,kb,kb},
[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;"}},
[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();"},{B,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]={
[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"}
["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"}
Line 2,278: Line 2,300:
},
},
["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",
[g]="constructor inherited from base class A cannot be used in a constant expression; derived class cannot be implicitly initialized",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="constructor inherited from base class (.*?) cannot be used in a constant expression; derived class cannot be implicitly initialized",
[l]="constructor inherited from base class (.*?) cannot be used in a constant expression; derived class cannot be implicitly initialized",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"5179eb78210a",1467140637,"P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991:"},
[m]={"5179eb78210a",1467140637,Oc,Oc},
[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();"}},
[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();"},{B,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]={
[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"}
["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"}
Line 2,293: Line 2,315:
},
},
["note_constexpr_invalid_template_arg"]={
["note_constexpr_invalid_template_arg"]={
[b]="... to ...... is not allowed in a template argument",
[g]="... to ...... is not allowed in a template argument",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?:pointer|reference) to (?:|subobject of )(?:type_info object|string literal|temporary object|predefined \'(.*?)\' variable) is not allowed in a template argument",
[l]=a,
[b]=a,
[c]=a,
[k]=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","For P0732R2, P1907R1: ensure that template parameter objects don\'t refer"},
[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) {"}}
[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;"},{ib,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 ...",
[g]="cast from A is not allowed in a constant expression ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={rb,1662843785,sb},
[m]={Pb,1662843785,ab,ab},
[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();"}},
[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]={
[o]={
Line 2,320: Line 2,342:
},
},
["note_constexpr_large_shift"]={
["note_constexpr_large_shift"]={
[b]="shift count A >= width of type B (C bitD)",
[g]="shift count A >= width of type B (C bitD)",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="shift count %0 >= width of type %1 (%2 bit%s2)",
[h]="shift count %0 >= width of type %1 (%2 bit%s2)",
[j]=i,
[j]=i,
[k]="shift count (.*?) \\>\\= width of type (.*?) \\((.*?) bit(.*?)\\)",
[l]="shift count (.*?) \\>\\= width of type (.*?) \\((.*?) bit(.*?)\\)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"fe800031ec14",1327982900,"constexpr: catch a collection of integral undefined behaviors:"},
[m]={"fe800031ec14",1327982900,Tc,Tc},
[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;"}},
[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]={
[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)"}
[cb]={"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",
[g]="... ... whose storage duration has ended",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?: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,
[b]=a,
[c]=a,
[k]=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","Implement DR1454. This allows all intermediate results in constant expressions"},
[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;"}},
[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 *>();"},{B,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]={
[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"}
[nb]={"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",
[g]="comparison of addresses of literals has unspecified value",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="comparison of addresses of literals has unspecified value",
[h]="comparison of addresses of literals has unspecified value",
[j]=i,
[j]=i,
[k]="comparison of addresses of literals has unspecified value",
[l]="comparison of addresses of literals has unspecified value",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={rb,1662843785,sb},
[m]={Pb,1662843785,ab,ab},
[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);"}},
[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]={
[o]={
Line 2,365: Line 2,387:
},
},
["note_constexpr_lshift_discards"]={
["note_constexpr_lshift_discards"]={
[b]="signed left shift discards bits",
[g]="signed left shift discards bits",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="signed left shift discards bits",
[h]="signed left shift discards bits",
[j]=i,
[j]=i,
[k]="signed left shift discards bits",
[l]="signed left shift discards bits",
[l]=a,
[b]=a,
[c]=a,
[k]=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","Implement the agreed resolution to DR1457: a signed left shift of a 1 bit into"},
[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);"}},
[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]={
[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"}
[cb]={"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",
[g]="left shift of negative value A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="left shift of negative value %0",
[h]="left shift of negative value %0",
[j]=i,
[j]=i,
[k]="left shift of negative value (.*?)",
[l]="left shift of negative value (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"fe800031ec14",1327982900,"constexpr: catch a collection of integral undefined behaviors:"},
[m]={"fe800031ec14",1327982900,Tc,Tc},
[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;"}},
[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]={
[o]={
[U]={"clang/test/CXX/expr/expr.const/p2-0x.cpp:162:44: note: left shift of negative value -3"}
[cb]={"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",
[g]="read of incomplete type A is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="read of incomplete type (.*?) is not allowed in a constant expression",
[l]="read of incomplete type (.*?) is not allowed in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=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","[ExprConstant] Improve memchr/memcmp for type mismatch and multibyte element types"},
[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;"}},
[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]={
[o]={
[xb]={"SemaCXX/constexpr-string.cpp:406:17: note: read of incomplete type \'struct Incomplete\' is not allowed in a constant expression"}
[Rb]={"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",
[g]="read of non-const variable A is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="read of non\\-const variable (.*?) is not allowed in a constant expression",
[l]="read of non\\-const variable (.*?) is not allowed in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=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","constexpr: diagnostic improvements for invalid lvalue-to-rvalue conversions in"},
[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;"}},
[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]={
[o]={
Line 2,425: Line 2,447:
},
},
["note_constexpr_ltor_non_constexpr"]={
["note_constexpr_ltor_non_constexpr"]={
[b]="read of non-constexpr variable A is not allowed in a constant expression",
[g]="read of non-constexpr variable A is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="read of non\\-constexpr variable (.*?) is not allowed in a constant expression",
[l]="read of non\\-constexpr variable (.*?) is not allowed in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=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","constexpr: diagnostic improvements for invalid lvalue-to-rvalue conversions in"},
[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;"}},
[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;"},{B,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]={
[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"}
["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"}
Line 2,440: Line 2,462:
},
},
["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",
[g]="read of variable A of non-integral, non-enumeration type B is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="read of variable (.*?) of non\\-integral, non\\-enumeration type (.*?) is not allowed in a constant expression",
[l]="read of variable (.*?) of non\\-integral, non\\-enumeration type (.*?) is not allowed in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"00068c452a59",1594250761,"Improve diagnostics for constant evaluation that fails because a"},
[m]={"00068c452a59",1594250761,Ub,Ub},
[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();"}},
[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]={
[o]={
Line 2,455: Line 2,477:
},
},
["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",
[g]="comparison against pointer to weak member A can only be performed at runtime",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="comparison against pointer to weak member (.*?) can only be performed at runtime",
[l]="comparison against pointer to weak member (.*?) can only be performed at runtime",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={rb,1662843785,sb},
[m]={Pb,1662843785,ab,ab},
[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();"}},
[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]={
[o]={
Line 2,470: Line 2,492:
},
},
["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",
[g]="constant evaluation of A on array of type B is not supported; only arrays of narrow character types can be searched",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="constant evaluation of (.*?) on array of type (.*?) is not supported; only arrays of narrow character types can be searched",
[l]="constant evaluation of (.*?) on array of type (.*?) is not supported; only arrays of narrow character types can be searched",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Fc,1579695612,Qc},
[m]={nd,1579695612,Ib,Ib},
[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;"}},
[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]={
[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"}
[Rb]={"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",
[g]="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,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="constant evaluation of (.*?) between arrays of types (.*?) and (.*?) is not supported; only arrays of narrow character types can be compared",
[l]="constant evaluation of (.*?) between arrays of types (.*?) and (.*?) is not supported; only arrays of narrow character types can be compared",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Fc,1579695612,Qc},
[m]={nd,1579695612,Ib,Ib},
[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;"}},
[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]={
[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"}
[Rb]={"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",
[g]="cannot constant evaluate \'...\' between objects of incomplete type A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="cannot constant evaluate \'(?:memcpy|memmove)\' between objects of incomplete type (.*?)",
[l]="cannot constant evaluate \'(?:memcpy|memmove)\' between objects of incomplete type (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=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","[constexpr] Fix ICE when memcpy() is given a pointer to an incomplete array"},
[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;"}},
[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]={
[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\'"}
[Rb]={"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",
[g]="cannot constant evaluate \'...\' between objects of non-trivially-copyable type A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="cannot constant evaluate \'(?:memcpy|memmove)\' between objects of non\\-trivially\\-copyable type (.*?)",
[l]="cannot constant evaluate \'(?:memcpy|memmove)\' between objects of non\\-trivially\\-copyable type (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"96beffba15bc",1533080109,"[constexpr] Support for constant evaluation of __builtin_memcpy and"},
[m]={"96beffba15bc",1533080109,fc,fc},
[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;"}},
[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]={
[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\'"}
[Rb]={"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",
[g]="... of \'...\' is A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:source|destination) of \'(?:(?:memcpy|wmemcpy)|(?:memmove|wmemmove))\' is (.*?)",
[l]="(?:source|destination) of \'(?:(?:memcpy|wmemcpy)|(?:memmove|wmemmove))\' is (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=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","Fix crash on call to __builtin_memcpy with a null pointer to an"},
[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());"}},
[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]={
[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"}
[Rb]={"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",
[g]="\'...\' between overlapping memory regions",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="\'%select{memcpy|wmemcpy}0\' between overlapping memory regions",
[h]="\'%select{memcpy|wmemcpy}0\' between overlapping memory regions",
[j]=i,
[j]=i,
[k]="\'(?:memcpy|wmemcpy)\' between overlapping memory regions",
[l]="\'(?:memcpy|wmemcpy)\' between overlapping memory regions",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"96beffba15bc",1533080109,"[constexpr] Support for constant evaluation of __builtin_memcpy and"},
[m]={"96beffba15bc",1533080109,fc,fc},
[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;"}},
[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]={
[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"}
[Rb]={"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",
[g]="cannot constant evaluate \'...\' from object of type A to object of type B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="cannot constant evaluate \'(?:memcpy|memmove)\' from object of type (.*?) to object of type (.*?)",
[l]="cannot constant evaluate \'(?:memcpy|memmove)\' from object of type (.*?) to object of type (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"96beffba15bc",1533080109,"[constexpr] Support for constant evaluation of __builtin_memcpy and"},
[m]={"96beffba15bc",1533080109,fc,fc},
[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;"}},
[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]={
[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\'"}
[Rb]={"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: ...",
[g]="\'...\' not supported: ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="\'(?:(?: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,
[b]=a,
[c]=a,
[k]=a,
[m]={"96beffba15bc",1533080109,"[constexpr] Support for constant evaluation of __builtin_memcpy and"},
[m]={"96beffba15bc",1533080109,fc,fc},
[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);"}},
[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]={
[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\'"}
[Rb]={"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",
[g]="allocation performed here was not deallocated",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="allocation performed here was not deallocated(?:| \\(along with (.*?) other memory leak(.*?)\\))",
[l]="allocation performed here was not deallocated(?:| \\(along with (.*?) other memory leak(.*?)\\))",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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);"}},
[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]={
[o]={
Line 2,605: Line 2,627:
},
},
["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",
[g]="modification of object of const-qualified type A is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="modification of object of const\\-qualified type (.*?) is not allowed in a constant expression",
[l]="modification of object of const\\-qualified type (.*?) is not allowed in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Gb,1366986990,Fb},
[m]={Tb,1366986990,db,db},
[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;"}},
[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;"},{B,219,"bool CheckConst(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  S.FFDiag(Loc, diag::note_constexpr_modify_const_type) << Ty;"}},
[o]={
[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"}
["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"}
Line 2,620: Line 2,642:
},
},
["note_constexpr_modify_global"]={
["note_constexpr_modify_global"]={
[b]="a constant expression cannot modify an object that is visible outside that expression",
[g]="a constant expression cannot modify an object that is visible outside that expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="a constant expression cannot modify an object that is visible outside that expression",
[l]="a constant expression cannot modify an object that is visible outside that expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Gb,1366986990,Fb},
[m]={Tb,1366986990,db,db},
[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);"}},
[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);"},{B,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]={
[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"}
[cb]={"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",
[g]="negative shift count A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="negative shift count %0",
[h]="negative shift count %0",
[j]=i,
[j]=i,
[k]="negative shift count (.*?)",
[l]="negative shift count (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"fe800031ec14",1327982900,"constexpr: catch a collection of integral undefined behaviors:"},
[m]={"fe800031ec14",1327982900,Tc,Tc},
[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;"}},
[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]={
[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"}
[cb]={"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",
[g]="dynamic memory allocation is not permitted in constant expressions until C++20",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="dynamic memory allocation is not permitted in constant expressions until C\\+\\+20",
[l]="dynamic memory allocation is not permitted in constant expressions until C\\+\\+20",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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);"}},
[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]={
[o]={
Line 2,665: Line 2,687:
},
},
["note_constexpr_new_delete_mismatch"]={
["note_constexpr_new_delete_mismatch"]={
[b]="\'delete\' used to delete pointer to object allocated with \'std::allocator<...>::allocate\'",
[g]="\'delete\' used to delete pointer to object allocated with \'std::allocator<...>::allocate\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?:\'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,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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;"}},
[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]={
[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\'"}
[Nb]={"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",
[g]="cannot allocate array; evaluated array bound A is negative",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="cannot allocate array; evaluated array bound %0 is negative",
[h]="cannot allocate array; evaluated array bound %0 is negative",
[j]=i,
[j]=i,
[k]="cannot allocate array; evaluated array bound (.*?) is negative",
[l]="cannot allocate array; evaluated array bound (.*?) is negative",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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();"}},
[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]={
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:888:22: note: cannot allocate array; evaluated array bound -1 is negative"}
[nb]={"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",
[g]="call to ... A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="call to %select{placement|class-specific}0 %1",
[h]="call to %select{placement|class-specific}0 %1",
[j]=i,
[j]=i,
[k]="call to (?:placement|class\\-specific) (.*?)",
[l]="call to (?:placement|class\\-specific) (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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;"}},
[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]={
[o]={
[zb]={"clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:95:3: note: call to placement \'operator new\'"}
[Nb]={"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",
[g]="cannot allocate memory of ... type A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="cannot allocate memory of %select{incomplete|function}0 type %1",
[h]="cannot allocate memory of %select{incomplete|function}0 type %1",
[j]=i,
[j]=i,
[k]="cannot allocate memory of (?:incomplete|function) type (.*?)",
[l]="cannot allocate memory of (?:incomplete|function) type (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"19ad5239713c",1570063173,"For P0784R7: allow direct calls to operator new / operator delete from"},
[m]={"19ad5239713c",1570063173,Fc,Fc},
[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;"}},
[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]={
[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\'"}
[Nb]={"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",
[g]="this placement new expression is not yet supported in constant expressions",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="this placement new expression is not yet supported in constant expressions",
[l]="this placement new expression is not yet supported in constant expressions",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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);"}},
[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]={
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:1015:14: note: this placement new expression is not yet supported in constant expressions"}
[nb]={"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",
[g]="cannot allocate array; evaluated array bound A is too large",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="cannot allocate array; evaluated array bound %0 is too large",
[h]="cannot allocate array; evaluated array bound %0 is too large",
[j]=i,
[j]=i,
[k]="cannot allocate array; evaluated array bound (.*?) is too large",
[l]="cannot allocate array; evaluated array bound (.*?) is too large",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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();"}},
[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]={
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:888:22: note: cannot allocate array; evaluated array bound 4611686018427387904 is too large"}
[nb]={"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",
[g]="cannot allocate array; evaluated array bound A is too small to hold B explicitly initialized elements",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="cannot allocate array; evaluated array bound (.*?) is too small to hold (.*?) explicitly initialized elements",
[l]="cannot allocate array; evaluated array bound (.*?) is too small to hold (.*?) explicitly initialized elements",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Q,1569547607,R},
[m]={Y,1569547607,w,w},
[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();"}},
[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]={
[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"}
[nb]={"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\'",
[g]="cannot allocate untyped memory in a constant expression; use \'std::allocator<T>::allocate\' to allocate memory of type \'T\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="cannot allocate untyped memory in a constant expression; use \'std\\:\\:allocator\\<T\\>\\:\\:allocate\' to allocate memory of type \'T\'",
[l]="cannot allocate untyped memory in a constant expression; use \'std\\:\\:allocator\\<T\\>\\:\\:allocate\' to allocate memory of type \'T\'",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"19ad5239713c",1570063173,"For P0784R7: allow direct calls to operator new / operator delete from"},
[m]={"19ad5239713c",1570063173,Fc,Fc},
[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);"}},
[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]={
[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\'"}
[Nb]={"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",
[g]="control reached end of constexpr function",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="control reached end of constexpr function",
[h]="control reached end of constexpr function",
[j]=i,
[j]=i,
[k]="control reached end of constexpr function",
[l]="control reached end of constexpr function",
[l]=a,
[b]=a,
[c]=a,
[k]=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","C++1y constexpr extensions, round 1: Allow most forms of declaration and"},
[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);"}},
[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]={
[o]={
Line 2,800: Line 2,822:
},
},
["note_constexpr_non_global"]={
["note_constexpr_non_global"]={
[b]="... to ...... is not a constant expression",
[g]="... to ...... is not a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:pointer|reference) to (?:|subobject of )(?:temporary|(.*?)) is not a constant expression",
[l]="(?:pointer|reference) to (?:|subobject of )(?:temporary|(.*?)) is not a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={ac,1323758398,Qb},
[m]={rc,1323758398,kb,kb},
[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;"}},
[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]={
[o]={
Line 2,815: Line 2,837:
},
},
["note_constexpr_nonliteral"]={
["note_constexpr_nonliteral"]={
[b]="non-literal type A cannot be used in a constant expression",
[g]="non-literal type A cannot be used in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="non\\-literal type (.*?) cannot be used in a constant expression",
[l]="non\\-literal type (.*?) cannot be used in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={ac,1323758398,Qb},
[m]={rc,1323758398,kb,kb},
[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();"}},
[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]={
[o]={
Line 2,830: Line 2,852:
},
},
["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",
[g]="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,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=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","Improve diagnostic for an expression that\'s not constant because it uses"},
[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 \");"}},
[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]={
[o]={
Line 2,845: Line 2,867:
},
},
["note_constexpr_null_callee"]={
["note_constexpr_null_callee"]={
[b]="\'A\' evaluates to a null function pointer",
[g]="\'A\' evaluates to a null function pointer",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="\'%0\' evaluates to a null function pointer",
[h]="\'%0\' evaluates to a null function pointer",
[j]=i,
[j]=i,
[k]="\'(.*?)\' evaluates to a null function pointer",
[l]="\'(.*?)\' evaluates to a null function pointer",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={rb,1662843785,sb},
[m]={Pb,1662843785,ab,ab},
[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);"}},
[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]={
[o]={
[Ob]={"clang/test/SemaCXX/constant-expression-cxx11.cpp:282:54: note: \'F\' evaluates to a null function pointer"}
[oc]={"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",
[g]="cannot ... null pointer",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={"a8105bc9cecb",1325867940,"C++11 generalized constant expressions: implement checking and diagnostics for"},
[m]={"a8105bc9cecb",1325867940,Sb,Sb},
[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;"}},
[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; });"},{B,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;"},{B,182,"bool CheckNull(InterpState &S, CodePtr OpPC, const Pointer &Ptr, CheckSubobjectKind CSK) {\n  S.FFDiag(Loc, diag::note_constexpr_null_subobject) << CSK;"}},
[o]={
[o]={
["clang/test/AST/Interp/arrays.cpp"]={"clang/test/AST/Interp/arrays.cpp:73:24: note: cannot perform pointer arithmetic on null pointer"}
["clang/test/AST/Interp/arrays.cpp"]={"clang/test/AST/Interp/arrays.cpp:73:24: note: cannot perform pointer arithmetic on null pointer"}
Line 2,875: Line 2,897:
},
},
["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",
[g]="allocated size A is not a multiple of size B of element type C",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="allocated size (.*?) is not a multiple of size (.*?) of element type (.*?)",
[l]="allocated size (.*?) is not a multiple of size (.*?) of element type (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"19ad5239713c",1570063173,"For P0784R7: allow direct calls to operator new / operator delete from"},
[m]={"19ad5239713c",1570063173,Fc,Fc},
[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;"}},
[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]={
[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\'"}
[Nb]={"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",
[g]="value A is outside the range of representable values of type B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="value (.*?) is outside the range of representable values of type (.*?)",
[l]="value (.*?) is outside the range of representable values of type (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={ac,1323758398,Qb},
[m]={rc,1323758398,kb,kb},
[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;"}},
[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]={
[o]={
Line 2,905: Line 2,927:
},
},
["note_constexpr_past_end"]={
["note_constexpr_past_end"]={
[b]="dereferenced pointer past the end of ...... is not a constant expression",
[g]="dereferenced pointer past the end of ...... is not a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="dereferenced pointer past the end of (?:|subobject of )(?:temporary|(.*?)) is not a constant expression",
[l]="dereferenced pointer past the end of (?:|subobject of )(?:temporary|(.*?)) is not a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={ac,1323758398,Qb},
[m]={rc,1323758398,kb,kb},
[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;"}},
[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]={
[o]={
Line 2,920: Line 2,942:
},
},
["note_constexpr_past_end_subobject"]={
["note_constexpr_past_end_subobject"]={
[b]="cannot ... pointer past the end of object",
[g]="cannot ... pointer past the end of object",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={"a8105bc9cecb",1325867940,"C++11 generalized constant expressions: implement checking and diagnostics for"},
[m]={"a8105bc9cecb",1325867940,Sb,Sb},
[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;"}},
[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;"},{B,200,"bool CheckRange(InterpState &S, CodePtr OpPC, const Pointer &Ptr, CheckSubobjectKind CSK) {\n  S.FFDiag(Loc, diag::note_constexpr_past_end_subobject) << CSK;"}},
[o]={
[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"}
[cb]={"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",
[g]="placement new would change type of storage from A to B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="placement new would change type of storage from (.*?) to (.*?)",
[l]="placement new would change type of storage from (.*?) to (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=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.","For P0784R7: support placement new-expressions in constant evaluation."},
[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;"}},
[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]={
[o]={
[zb]={"clang/test/SemaCXX/cxx2a-constexpr-dynalloc.cpp:111:5: note: placement new would change type of storage from \'int\' to \'float\'"}
[Nb]={"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",
[g]="comparison of addresses of subobjects of different base classes has unspecified value",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="comparison of addresses of subobjects of different base classes has unspecified value",
[l]="comparison of addresses of subobjects of different base classes has unspecified value",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"84f6dcf2b52c",1328145417,"constexpr:"},
[m]={"84f6dcf2b52c",1328145417,ic,ic},
[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);"}},
[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]={
[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"}
[cb]={"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",
[g]="comparison of address of base class subobject A of class B to field C has unspecified value",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="comparison of address of base class subobject (.*?) of class (.*?) to field (.*?) has unspecified value",
[l]="comparison of address of base class subobject (.*?) of class (.*?) to field (.*?) has unspecified value",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"84f6dcf2b52c",1328145417,"constexpr:"},
[m]={"84f6dcf2b52c",1328145417,ic,ic},
[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;"}},
[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]={
[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"}
[cb]={"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",
[g]="comparison of address of fields A and B of C with differing access specifiers (D vs E) has unspecified value",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="comparison of address of fields (.*?) and (.*?) of (.*?) with differing access specifiers \\((.*?) vs (.*?)\\) has unspecified value",
[l]="comparison of address of fields (.*?) and (.*?) of (.*?) with differing access specifiers \\((.*?) vs (.*?)\\) has unspecified value",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"84f6dcf2b52c",1328145417,"constexpr:"},
[m]={"84f6dcf2b52c",1328145417,ic,ic},
[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();"}},
[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]={
[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"}
[cb]={"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",
[g]="comparison against pointer \'A\' that points past the end of a complete object has unspecified value",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="comparison against pointer \'(.*?)\' that points past the end of a complete object has unspecified value",
[l]="comparison against pointer \'(.*?)\' that points past the end of a complete object has unspecified value",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={rb,1662843785,sb},
[m]={Pb,1662843785,ab,ab},
[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);"}},
[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]={
[o]={
Line 3,010: Line 3,032:
},
},
["note_constexpr_pointer_comparison_unspecified"]={
["note_constexpr_pointer_comparison_unspecified"]={
[b]="comparison between \'A\' and \'B\' has unspecified value",
[g]="comparison between \'A\' and \'B\' has unspecified value",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="comparison between \'%0\' and \'%1\' has unspecified value",
[h]="comparison between \'%0\' and \'%1\' has unspecified value",
[j]=i,
[j]=i,
[k]="comparison between \'(.*?)\' and \'(.*?)\' has unspecified value",
[l]="comparison between \'(.*?)\' and \'(.*?)\' has unspecified value",
[l]=a,
[b]=a,
[c]=a,
[k]=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,","If constant evaluation fails due to an unspecified pointer comparison,"},
[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);"}},
[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]={
[o]={
Line 3,025: Line 3,047:
},
},
["note_constexpr_pointer_comparison_zero_sized"]={
["note_constexpr_pointer_comparison_zero_sized"]={
[b]="comparison of pointers \'A\' and \'B\' to unrelated zero-sized objects",
[g]="comparison of pointers \'A\' and \'B\' to unrelated zero-sized objects",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="comparison of pointers \'(.*?)\' and \'(.*?)\' to unrelated zero\\-sized objects",
[l]="comparison of pointers \'(.*?)\' and \'(.*?)\' to unrelated zero\\-sized objects",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={rb,1662843785,sb},
[m]={Pb,1662843785,ab,ab},
[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);"}},
[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]={
[o]={
[Ob]={"clang/test/SemaCXX/constant-expression-cxx11.cpp:2216:24: note: comparison of pointers \'&start\' and \'&end\' to unrelated zero-sized objects"}
[oc]={"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",
[g]="comparison of numeric address \'A\' with pointer \'B\' can only be performed at runtime",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="comparison of numeric address \'(.*?)\' with pointer \'(.*?)\' can only be performed at runtime",
[l]="comparison of numeric address \'(.*?)\' with pointer \'(.*?)\' can only be performed at runtime",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={rb,1662843785,sb},
[m]={Pb,1662843785,ab,ab},
[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);"}}
[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",
[g]="subtracted pointers are not elements of the same array",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="subtracted pointers are not elements of the same array",
[h]="subtracted pointers are not elements of the same array",
[j]=i,
[j]=i,
[k]="subtracted pointers are not elements of the same array",
[l]="subtracted pointers are not elements of the same array",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"84f6dcf2b52c",1328145417,"constexpr:"},
[m]={"84f6dcf2b52c",1328145417,ic,ic},
[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);"}},
[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]={
[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"}
[cb]={"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",
[g]="subtraction of pointers to type A of zero size",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="subtraction of pointers to type %0 of zero size",
[h]="subtraction of pointers to type %0 of zero size",
[j]=i,
[j]=i,
[k]="subtraction of pointers to type (.*?) of zero size",
[l]="subtraction of pointers to type (.*?) of zero size",
[l]=a,
[b]=a,
[c]=a,
[k]=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","PR5683: Issue a warning when subtracting pointers to types of zero size, and"},
[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;"}},
[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]={
[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"}
[oc]={"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",
[g]="comparison against address of weak declaration \'A\' can only be performed at runtime",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="comparison against address of weak declaration \'(.*?)\' can only be performed at runtime",
[l]="comparison against address of weak declaration \'(.*?)\' can only be performed at runtime",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={rb,1662843785,sb},
[m]={Pb,1662843785,ab,ab},
[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));"}},
[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]={
[o]={
Line 3,097: Line 3,119:
},
},
["note_constexpr_polymorphic_unknown_dynamic_type"]={
["note_constexpr_polymorphic_unknown_dynamic_type"]={
[b]="... object \'A\' whose dynamic type is not constant",
[g]="... object \'A\' whose dynamic type is not constant",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?:|||||virtual function called on|dynamic_cast applied to|typeid applied to|construction of|destruction of) object \'(.*?)\' whose dynamic type is not constant",
[l]=a,
[b]=a,
[c]=a,
[k]=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","[c++20] For P1327R1: support dynamic_cast in constant expression"},
[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);"}},
[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]={
[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"}
[nb]={"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",
[g]="pseudo-destructor call is not permitted in constant expressions until C++20",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="pseudo\\-destructor call is not permitted in constant expressions until C\\+\\+20",
[l]="pseudo\\-destructor call is not permitted in constant expressions until C\\+\\+20",
[l]=a,
[b]=a,
[c]=a,
[k]=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","For P0784R7: add support for explicit destructor calls and"},
[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);"}},
[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]={
[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"}
[cb]={"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",
[g]="pure virtual function A called",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="pure virtual function %q0 called",
[h]="pure virtual function %q0 called",
[j]=i,
[j]=i,
[k]="pure virtual function (.*?) called",
[l]="pure virtual function (.*?) called",
[l]=a,
[b]=a,
[c]=a,
[k]=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","[c++20] P1064R0: Allow virtual function calls in constant expression"},
[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;"}},
[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;"},{B,378,"bool CheckPure(InterpState &S, CodePtr OpPC, const CXXMethodDecl *MD) {\n  S.FFDiag(E, diag::note_constexpr_pure_virtual_call, 1) << MD;"}},
[o]={
[o]={
[Y]={"clang/test/SemaCXX/constant-expression-cxx2a.cpp:229:30: note: pure virtual function \'Virtual::Abstract::f\' called"}
[nb]={"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",
[g]="control flows through the definition of a ... variable",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="control flows through the definition of a (?:static|thread_local) variable",
[l]="control flows through the definition of a (?:static|thread_local) variable",
[l]=a,
[b]=a,
[c]=a,
[k]=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","[Clang][C++2b] P2242R3: Non-literal variables [...] in constexpr"},
[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;"}},
[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]={
[o]={
Line 3,157: Line 3,179:
},
},
["note_constexpr_step_limit_exceeded"]={
["note_constexpr_step_limit_exceeded"]={
[b]="constexpr evaluation hit maximum step limit; possible infinite loop?",
[g]="constexpr evaluation hit maximum step limit; possible infinite loop?",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="constexpr evaluation hit maximum step limit; possible infinite loop?",
[h]="constexpr evaluation hit maximum step limit; possible infinite loop?",
[j]=i,
[j]=i,
[k]="constexpr evaluation hit maximum step limit; possible infinite loop\\?",
[l]="constexpr evaluation hit maximum step limit; possible infinite loop\\?",
[l]=a,
[b]=a,
[c]=a,
[k]=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.","C++1y: Add a step limit to constexpr evaluation, to catch runaway loops."},
[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);"}},
[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]={
[o]={
Line 3,172: Line 3,194:
},
},
["note_constexpr_stmt_expr_unsupported"]={
["note_constexpr_stmt_expr_unsupported"]={
[b]="this use of statement expressions is not supported in a constant expression",
[g]="this use of statement expressions is not supported in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="this use of statement expressions is not supported in a constant expression",
[l]="this use of statement expressions is not supported in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=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,","PR16377: Allow evaluation of statement expressions in constant evaluation,"},
[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);"}},
[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]={
[o]={
Line 3,187: Line 3,209:
},
},
["note_constexpr_subobject_declared_here"]={
["note_constexpr_subobject_declared_here"]={
[b]="subobject declared here",
[g]="subobject declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="subobject declared here",
[h]="subobject declared here",
[j]=i,
[j]=i,
[k]="subobject declared here",
[l]="subobject declared here",
[l]=a,
[b]=a,
[c]=a,
[k]=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","[c++20] P1330R0: permit simple-assignments that change the active member"},
[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);"}},
[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);"},{B,389,"static void DiagnoseUninitializedSubobject(InterpState &S, const SourceInfo &SI, const FieldDecl *SubObjDecl) {\n  S.Note(SubObjDecl->getLocation(), diag::note_constexpr_subobject_declared_here);"}},
[o]={
[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"}
["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"}
Line 3,202: Line 3,224:
},
},
["note_constexpr_temporary_here"]={
["note_constexpr_temporary_here"]={
[b]="temporary created here",
[g]="temporary created here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="temporary created here",
[h]="temporary created here",
[j]=i,
[j]=i,
[k]="temporary created here",
[l]="temporary created here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={ac,1323758398,Qb},
[m]={rc,1323758398,kb,kb},
[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);"}},
[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);"},{B,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);"},{B,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]={
[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"}
["clang/test/CXX/expr/expr.const/p6-2a.cpp"]={"clang/test/CXX/expr/expr.const/p6-2a.cpp:43:26: note: temporary created here"}
Line 3,217: Line 3,239:
},
},
["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",
[g]="...use of \'this\' pointer is only allowed within the evaluation of a call to a \'constexpr\' member function",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:|implicit )use of \'this\' pointer is only allowed within the evaluation of a call to a \'constexpr\' member function",
[l]="(?:|implicit )use of \'this\' pointer is only allowed within the evaluation of a call to a \'constexpr\' member function",
[l]=a,
[b]=a,
[c]=a,
[k]=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","Add an explicit diagnostic for the case where an expression is not a constant"},
[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;"}},
[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();"},{B,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]={
[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"}
["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"}
Line 3,232: Line 3,254:
},
},
["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",
[g]="typeid applied to expression of polymorphic type A is not allowed in a constant expression in C++ standards before C++20",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="typeid applied to expression of polymorphic type (.*?) is not allowed in a constant expression in C\\+\\+ standards before C\\+\\+20",
[l]="typeid applied to expression of polymorphic type (.*?) is not allowed in a constant expression in C\\+\\+ standards before C\\+\\+20",
[l]=a,
[b]=a,
[c]=a,
[k]=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.","constexpr: support for evaluation and codegen of typeid constants."},
[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();"}},
[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]={
[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"}
[cb]={"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",
[g]="subobject ...A is not initialized",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="subobject %select{of type |}0%1 is not initialized",
[h]="subobject %select{of type |}0%1 is not initialized",
[j]=i,
[j]=i,
[k]="subobject (?:of type |)(.*?) is not initialized",
[l]="subobject (?:of type |)(.*?) is not initialized",
[l]=a,
[b]=a,
[c]=a,
[k]=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","PR14503: Don\'t assert if a constexpr constructor temploid instantiates to a"},
[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;"}},
[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;"},{B,386,"static void DiagnoseUninitializedSubobject(InterpState &S, const SourceInfo &SI, const FieldDecl *SubObjDecl) {\n  S.FFDiag(SI, diag::note_constexpr_uninitialized) << /*(name)*/ 1 << SubObjDecl;"}},
[o]={
[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"}
["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"}
Line 3,262: Line 3,284:
},
},
["note_constexpr_uninitialized_base"]={
["note_constexpr_uninitialized_base"]={
[b]="constructor of base class A is not called",
[g]="constructor of base class A is not called",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="constructor of base class %0 is not called",
[h]="constructor of base class %0 is not called",
[j]=i,
[j]=i,
[k]="constructor of base class (.*?) is not called",
[l]="constructor of base class (.*?) is not called",
[l]=a,
[b]=a,
[c]=a,
[k]=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","[clang][ExprConstant] Fix crash on uninitialized base class subobject"},
[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());"}},
[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]={
[o]={
Line 3,277: Line 3,299:
},
},
["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",
[g]="assignment would change active union member during the initialization of a different member of the same union",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="assignment would change active union member during the initialization of a different member of the same union",
[l]="assignment would change active union member during the initialization of a different member of the same union",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Fc,1579695612,Qc},
[m]={nd,1579695612,Ib,Ib},
[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);"}},
[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]={
[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"}
[nb]={"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",
[g]="indexing of array without known bound is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="indexing of array without known bound is not allowed in a constant expression",
[l]="indexing of array without known bound is not allowed in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"2cd56048239f",1503971533,"Improve constant expression evaluation of arrays of unknown bound."},
[m]={"2cd56048239f",1503971533,Jc,Jc},
[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);"}},
[n]={{q,1424,"void SubobjectDesignator::diagnoseUnsizedArrayPointerArithmetic(EvalInfo &Info, const Expr *E) {\n  Info.CCEDiag(E, diag::note_constexpr_unsized_array_indexed);"},{B,143,"bool CheckArray(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  S.FFDiag(E, diag::note_constexpr_unsized_array_indexed);"}},
[o]={
[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"}
["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"}
Line 3,307: Line 3,329:
},
},
["note_constexpr_unsupported_destruction"]={
["note_constexpr_unsupported_destruction"]={
[b]="non-trivial destruction of type A in a constant expression is not supported",
[g]="non-trivial destruction of type A in a constant expression is not supported",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="non\\-trivial destruction of type (.*?) in a constant expression is not supported",
[l]="non\\-trivial destruction of type (.*?) in a constant expression is not supported",
[l]=a,
[b]=a,
[c]=a,
[k]=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","For P0784R7: add support for constexpr destructors, and call them as"},
[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;"}}
[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",
[g]="flexible array initialization is not yet supported",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="flexible array initialization is not yet supported",
[h]="flexible array initialization is not yet supported",
[j]=i,
[j]=i,
[k]="flexible array initialization is not yet supported",
[l]="flexible array initialization is not yet supported",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Hb,1643408541,Eb},
[m]={ac,1643408541,fb,fb},
[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);"}},
[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]={
[o]={
[Ob]={"clang/test/SemaCXX/constant-expression-cxx11.cpp:2419:23: note: flexible array initialization is not yet supported"}
[oc]={"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",
[g]="type A has unexpected layout",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="type %0 has unexpected layout",
[h]="type %0 has unexpected layout",
[j]=i,
[j]=i,
[k]="type (.*?) has unexpected layout",
[l]="type (.*?) has unexpected layout",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Fc,1579695612,Qc},
[m]={nd,1579695612,Ib,Ib},
[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();"}},
[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]={
[o]={
Line 3,349: Line 3,371:
},
},
["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",
[g]="non-trivial destruction of lifetime-extended temporary with type A used in the result of a constant expression is not yet supported",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="non\\-trivial destruction of lifetime\\-extended temporary with type (.*?) used in the result of a constant expression is not yet supported",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"2e204e23911b",1601401476,"[clang] Enable support for #pragma STDC FENV_ACCESS"},
[m]={"2e204e23911b",1601401476,"[clang] Enable support for #pragma STDC FENV_ACCESS","[clang] Enable support for #pragma STDC FENV_ACCESS"},
[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;"}},
[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]={
[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"}
[nb]={"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",
[g]="array-to-pointer decay of array member without known bound is not supported",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="array\\-to\\-pointer decay of array member without known bound is not supported",
[l]="array\\-to\\-pointer decay of array member without known bound is not supported",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"2cd56048239f",1503971533,"Improve constant expression evaluation of arrays of unknown bound."},
[m]={"2cd56048239f",1503971533,Jc,Jc},
[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);"}},
[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]={
[o]={
Line 3,379: Line 3,401:
},
},
["note_constexpr_use_uninit_reference"]={
["note_constexpr_use_uninit_reference"]={
[b]="use of reference outside its lifetime is not allowed in a constant expression",
[g]="use of reference outside its lifetime is not allowed in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="use of reference outside its lifetime is not allowed in a constant expression",
[l]="use of reference outside its lifetime is not allowed in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=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","C++1y: track object lifetime during constexpr evaluation, and don\'t allow"},
[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);"}},
[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]={
[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"}
[oc]={"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",
[g]="initializer of A is not a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="initializer of %0 is not a constant expression",
[h]="initializer of %0 is not a constant expression",
[j]=i,
[j]=i,
[k]="initializer of (.*?) is not a constant expression",
[l]="initializer of (.*?) is not a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=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\'","constexpr handling improvements. Produce detailed diagnostics when a \'constexpr\'"},
[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;"}},
[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]={
[o]={
Line 3,409: Line 3,431:
},
},
["note_constexpr_var_init_unknown"]={
["note_constexpr_var_init_unknown"]={
[b]="initializer of A is unknown",
[g]="initializer of A is unknown",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="initializer of %0 is unknown",
[h]="initializer of %0 is unknown",
[j]=i,
[j]=i,
[k]="initializer of (.*?) is unknown",
[l]="initializer of (.*?) is unknown",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"00068c452a59",1594250761,"Improve diagnostics for constant evaluation that fails because a"},
[m]={"00068c452a59",1594250761,Ub,Ub},
[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;"}},
[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]={
[o]={
Line 3,424: Line 3,446:
},
},
["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",
[g]="initializer of weak variable A is not considered constant because it may be different at runtime",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="initializer of weak variable (.*?) is not considered constant because it may be different at runtime",
[l]="initializer of weak variable (.*?) is not considered constant because it may be different at runtime",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"00068c452a59",1594250761,"Improve diagnostics for constant evaluation that fails because a"},
[m]={"00068c452a59",1594250761,Ub,Ub},
[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;"}},
[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]={
[o]={
Line 3,439: Line 3,461:
},
},
["note_constexpr_virtual_base"]={
["note_constexpr_virtual_base"]={
[b]="cannot construct object of type A with virtual base class in a constant expression",
[g]="cannot construct object of type A with virtual base class in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="cannot construct object of type (.*?) with virtual base class in a constant expression",
[l]="cannot construct object of type (.*?) with virtual base class in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=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","Update constexpr implementation to match CWG\'s chosen approach for core issues"},
[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;"}},
[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]={
[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"}
[Sc]={"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",
[g]="virtual base class declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="virtual base class declared here",
[h]="virtual base class declared here",
[j]=i,
[j]=i,
[k]="virtual base class declared here",
[l]="virtual base class declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Ab,1317436288,ub},
[m]={Qb,1317436288,bb,bb},
[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();"}},
[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();"},{J,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]={
[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"}
["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"}
Line 3,469: Line 3,491:
},
},
["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",
[g]="cannot evaluate call to virtual function in a constant expression in C++ standards before C++20",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="cannot evaluate call to virtual function in a constant expression in C\\+\\+ standards before C\\+\\+20",
[l]="cannot evaluate call to virtual function in a constant expression in C\\+\\+ standards before C\\+\\+20",
[l]=a,
[b]=a,
[c]=a,
[k]=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","Update constexpr implementation to match CWG\'s chosen approach for core issues"},
[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);"}},
[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);"},{B,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]={
[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"}
["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"}
Line 3,484: Line 3,506:
},
},
["note_constexpr_void_comparison"]={
["note_constexpr_void_comparison"]={
[b]="comparison between unequal pointers to void has unspecified result",
[g]="comparison between unequal pointers to void has unspecified result",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="comparison between unequal pointers to void has unspecified result",
[h]="comparison between unequal pointers to void has unspecified result",
[j]=i,
[j]=i,
[k]="comparison between unequal pointers to void has unspecified result",
[l]="comparison between unequal pointers to void has unspecified result",
[l]=a,
[b]=a,
[c]=a,
[k]=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","constexpr: the result of a relational operator between pointers to void is"},
[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);"}},
[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]={
[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"}
[cb]={"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",
[g]="volatile ... here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="volatile %select{temporary created|object declared|member declared}0 here",
[h]="volatile %select{temporary created|object declared|member declared}0 here",
[j]=i,
[j]=i,
[k]="volatile (?:temporary created|object declared|member declared) here",
[l]="volatile (?:temporary created|object declared|member declared) here",
[l]=a,
[b]=a,
[c]=a,
[k]=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","Fix handling of objects under construction during constant expression"},
[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;"}},
[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]={
[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"}
[cb]={"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",
[g]="add the ... to the initializing declaration here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="add the (?:\'require_constant_initialization\' attribute|\'constinit\' specifier) to the initializing declaration here",
[l]="add the (?:\'require_constant_initialization\' attribute|\'constinit\' specifier) to the initializing declaration here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Zb,1567434909,Yb},
[m]={qc,1567434909,jb,jb},
[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);"}},
[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]={
[o]={
Line 3,529: Line 3,551:
},
},
["note_constinit_specified_here"]={
["note_constinit_specified_here"]={
[b]="variable declared constinit here",
[g]="variable declared constinit here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="variable declared constinit here",
[h]="variable declared constinit here",
[j]=i,
[j]=i,
[k]="variable declared constinit here",
[l]="variable declared constinit here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Zb,1567434909,Yb},
[m]={qc,1567434909,jb,jb},
[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);"}},
[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]={
[o]={
Line 3,544: Line 3,566:
},
},
["note_constraint_normalization_here"]={
["note_constraint_normalization_here"]={
[b]="while calculating associated constraint of template \'A\' here",
[g]="while calculating associated constraint of template \'A\' here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="while calculating associated constraint of template \'%0\' here",
[h]="while calculating associated constraint of template \'%0\' here",
[j]=i,
[j]=i,
[k]="while calculating associated constraint of template \'(.*?)\' here",
[l]="while calculating associated constraint of template \'(.*?)\' here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"349636d2bfc3",1575555459,"Implement VectorType conditional operator GNU extension."},
[m]={"349636d2bfc3",1575555459,vc,vc},
[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;"}},
[n]={{H,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]={
[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"}
["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"}
Line 3,559: Line 3,581:
},
},
["note_constraint_references_error"]={
["note_constraint_references_error"]={
[b]="constraint depends on a previously diagnosed expression",
[g]="constraint depends on a previously diagnosed expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="constraint depends on a previously diagnosed expression",
[h]="constraint depends on a previously diagnosed expression",
[j]=i,
[j]=i,
[k]="constraint depends on a previously diagnosed expression",
[l]="constraint depends on a previously diagnosed expression",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={fb,1625925174,nb},
[m]={Hb,1625925174,N,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);"}}
[n]={{hb,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",
[g]="while substituting template arguments into constraint expression here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="while substituting template arguments into constraint expression here",
[h]="while substituting template arguments into constraint expression here",
[j]=i,
[j]=i,
[k]="while substituting template arguments into constraint expression here",
[l]="while substituting template arguments into constraint expression here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Zb,1567434909,Yb},
[m]={qc,1567434909,jb,jb},
[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;"}},
[n]={{H,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]={
[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"}
["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"}
Line 3,586: Line 3,608:
},
},
["note_conv_function_declared_at"]={
["note_conv_function_declared_at"]={
[b]="type conversion function declared here",
[g]="type conversion function declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="type conversion function declared here",
[h]="type conversion function declared here",
[j]=i,
[j]=i,
[k]="type conversion function declared here",
[l]="type conversion function declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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_.","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]={
[o]={
Line 3,601: Line 3,623:
},
},
["note_convert_inline_to_static"]={
["note_convert_inline_to_static"]={
[b]="use \'static\' to give inline function A internal linkage",
[g]="use \'static\' to give inline function A internal linkage",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="use \'static\' to give inline function %0 internal linkage",
[h]="use \'static\' to give inline function %0 internal linkage",
[j]=i,
[j]=i,
[k]="use \'static\' to give inline function (.*?) internal linkage",
[l]="use \'static\' to give inline function (.*?) internal linkage",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Warn when a static variable is referenced in a non-static inline function."},
[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 \");"}},
[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]={
[o]={
Line 3,616: Line 3,638:
},
},
["note_coroutine_function_declare_noexcept"]={
["note_coroutine_function_declare_noexcept"]={
[b]="must be declared with \'noexcept\'",
[g]="must be declared with \'noexcept\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="must be declared with \'noexcept\'",
[h]="must be declared with \'noexcept\'",
[j]=i,
[j]=i,
[k]="must be declared with \'noexcept\'",
[l]="must be declared with \'noexcept\'",
[l]=a,
[b]=a,
[c]=Bc,
[k]=wc,
[m]={mb,1582847864,jb},
[m]={Bb,1582847864,T,T},
[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);"}},
[n]={{W,684,"bool Sema::checkFinalSuspendNoThrow(const Stmt *FinalSuspend) {\n  for (const auto *D : SortedDecls) {\n    Diag(D->getEndLoc(), diag::note_coroutine_function_declare_noexcept);"}},
[o]={
[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\'"}
["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\'"}
Line 3,631: Line 3,653:
},
},
["note_coroutine_promise_call_implicitly_required"]={
["note_coroutine_promise_call_implicitly_required"]={
[b]="call to A implicitly required by coroutine function here",
[g]="call to A implicitly required by coroutine function here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="call to %0 implicitly required by coroutine function here",
[h]="call to %0 implicitly required by coroutine function here",
[j]=i,
[j]=i,
[k]="call to (.*?) implicitly required by coroutine function here",
[l]="call to (.*?) implicitly required by coroutine function here",
[l]=a,
[b]=a,
[c]=Bc,
[k]=wc,
[m]={"20f25cb6dfb3",1488843495,"[coroutines] Add DependentCoawaitExpr and fix re-building CoroutineBodyStmt."},
[m]={"20f25cb6dfb3",1488843495,"[coroutines] Add DependentCoawaitExpr and fix re-building CoroutineBodyStmt.","[coroutines] Add DependentCoawaitExpr and fix re-building CoroutineBodyStmt."},
[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;"}},
[n]={{W,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();"},{W,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();"},{W,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]={
[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"}
["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"}
Line 3,646: Line 3,668:
},
},
["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",
[g]="call to \'await_transform\' implicitly required by \'co_await\' here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="call to \'await_transform\' implicitly required by \'co_await\' here",
[h]="call to \'await_transform\' implicitly required by \'co_await\' here",
[j]=i,
[j]=i,
[k]="call to \'await_transform\' implicitly required by \'co_await\' here",
[l]="call to \'await_transform\' implicitly required by \'co_await\' here",
[l]=a,
[b]=a,
[c]=Bc,
[k]=wc,
[m]={"20f25cb6dfb3",1488843495,"[coroutines] Add DependentCoawaitExpr and fix re-building CoroutineBodyStmt."},
[m]={"20f25cb6dfb3",1488843495,"[coroutines] Add DependentCoawaitExpr and fix re-building CoroutineBodyStmt.","[coroutines] Add DependentCoawaitExpr and fix re-building CoroutineBodyStmt."},
[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();"}},
[n]={{W,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]={
[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"}
["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"}
Line 3,661: Line 3,683:
},
},
["note_coroutine_promise_suspend_implicitly_required"]={
["note_coroutine_promise_suspend_implicitly_required"]={
[b]="call to \'...\' implicitly required by the ...",
[g]="call to \'...\' implicitly required by the ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="call to \'(?:initial_suspend|final_suspend)\' implicitly required by the (?:initial suspend point|final suspend point)",
[l]="call to \'(?:initial_suspend|final_suspend)\' implicitly required by the (?:initial suspend point|final suspend point)",
[l]=a,
[b]=a,
[c]=Bc,
[k]=wc,
[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...","[coroutines] Fix building of new/delete expressions when get_return_object_on_allocation_failure() is present."},
[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);"}},
[n]={{W,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]={
[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"}
["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"}
Line 3,676: Line 3,698:
},
},
["note_covariant_thunk"]={
["note_covariant_thunk"]={
[b]="covariant thunk required by A",
[g]="covariant thunk required by A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="covariant thunk required by %0",
[h]="covariant thunk required by %0",
[j]=i,
[j]=i,
[k]="covariant thunk required by (.*?)",
[l]="covariant thunk required by (.*?)",
[l]=a,
[b]=a,
[c]="VTable ABI Issue",
[k]="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","[MS ABI] Detect and diagnose vftables which cannot be created"},
[n]={{"clang/lib/AST/VTableBuilder.cpp",3555,"// We want to select the path which introduces the most covariant overrides.  If\n// two paths introduce overrides which the other path doesn\'t contain, issue a\n// diagnostic.\nstatic const FullPathTy *selectBestPath(ASTContext &Context, const CXXRecordDecl *RD, const VPtrInfo &Info, std::list<FullPathTy> &FullPaths) {\n  for (const FullPathTy &SpecificPath : FullPaths) {\n    if (MissingOverrides.empty()) {\n    } else {\n      Diags.Report(CovariantMD->getLocation(), diag::note_covariant_thunk) << CovariantMD;"},{"clang/lib/AST/VTableBuilder.cpp",3557,"// We want to select the path which introduces the most covariant overrides.  If\n// two paths introduce overrides which the other path doesn\'t contain, issue a\n// diagnostic.\nstatic const FullPathTy *selectBestPath(ASTContext &Context, const CXXRecordDecl *RD, const VPtrInfo &Info, std::list<FullPathTy> &FullPaths) {\n  for (const FullPathTy &SpecificPath : FullPaths) {\n    if (MissingOverrides.empty()) {\n    } else {\n      Diags.Report(ConflictMD->getLocation(), diag::note_covariant_thunk) << ConflictMD;"}}
[n]={{"clang/lib/AST/VTableBuilder.cpp",3555,"// We want to select the path which introduces the most covariant overrides.  If\n// two paths introduce overrides which the other path doesn\'t contain, issue a\n// diagnostic.\nstatic const FullPathTy *selectBestPath(ASTContext &Context, const CXXRecordDecl *RD, const VPtrInfo &Info, std::list<FullPathTy> &FullPaths) {\n  for (const FullPathTy &SpecificPath : FullPaths) {\n    if (MissingOverrides.empty()) {\n    } else {\n      Diags.Report(CovariantMD->getLocation(), diag::note_covariant_thunk) << CovariantMD;"},{"clang/lib/AST/VTableBuilder.cpp",3557,"// We want to select the path which introduces the most covariant overrides.  If\n// two paths introduce overrides which the other path doesn\'t contain, issue a\n// diagnostic.\nstatic const FullPathTy *selectBestPath(ASTContext &Context, const CXXRecordDecl *RD, const VPtrInfo &Info, std::list<FullPathTy> &FullPaths) {\n  for (const FullPathTy &SpecificPath : FullPaths) {\n    if (MissingOverrides.empty()) {\n    } else {\n      Diags.Report(ConflictMD->getLocation(), diag::note_covariant_thunk) << ConflictMD;"}}
},
},
["note_cuda_conflicting_device_function_declared_here"]={
["note_cuda_conflicting_device_function_declared_here"]={
[b]="conflicting __device__ function declared here",
[g]="conflicting __device__ function declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="conflicting __device__ function declared here",
[h]="conflicting __device__ function declared here",
[j]=i,
[j]=i,
[k]="conflicting __device__ function declared here",
[l]="conflicting __device__ function declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"ba122ab42fe5",1459380621,"[CUDA] Make unattributed constexpr functions implicitly host+device."},
[m]={"ba122ab42fe5",1459380621,"[CUDA] Make unattributed constexpr functions implicitly host+device.","[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]={
[o]={
Line 3,703: Line 3,725:
},
},
["note_cuda_const_var_unpromoted"]={
["note_cuda_const_var_unpromoted"]={
[b]="const variable cannot be emitted on device side due to dynamic initialization",
[g]="const variable cannot be emitted on device side due to dynamic initialization",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="const variable cannot be emitted on device side due to dynamic initialization",
[l]="const variable cannot be emitted on device side due to dynamic initialization",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={lc,1615397021,vc},
[m]={Vc,1615397021,ub,ub},
[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);"}},
[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]={
[o]={
Line 3,718: Line 3,740:
},
},
["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 ...",
[g]="the ... template parameter of A needs to be ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="the (?:1st|2nd|3rd) template parameter of (.*?) needs to be (?:a type|an integer or enum value)",
[l]="the (?:1st|2nd|3rd) template parameter of (.*?) needs to be (?:a type|an integer or enum value)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={cc,1576908663,bc},
[m]={pc,1576908663,mb,mb},
[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;"}},
[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]={
[o]={
Line 3,733: Line 3,755:
},
},
["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",
[g]="A needs to have exactly B template parameters",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%0 needs to have exactly %1 template parameters",
[h]="%0 needs to have exactly %1 template parameters",
[j]=i,
[j]=i,
[k]="(.*?) needs to have exactly (.*?) template parameters",
[l]="(.*?) needs to have exactly (.*?) template parameters",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={cc,1576908663,bc},
[m]={pc,1576908663,mb,mb},
[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;"}},
[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]={
[o]={
Line 3,748: Line 3,770:
},
},
["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",
[g]="A needs to be instantiated from a class template with proper template arguments",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) needs to be instantiated from a class template with proper template arguments",
[l]="(.*?) needs to be instantiated from a class template with proper template arguments",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={cc,1576908663,bc},
[m]={pc,1576908663,mb,mb},
[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;"}},
[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]={
[o]={
Line 3,763: Line 3,785:
},
},
["note_cuda_host_var"]={
["note_cuda_host_var"]={
[b]="host variable declared here",
[g]="host variable declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="host variable declared here",
[h]="host variable declared here",
[j]=i,
[j]=i,
[k]="host variable declared here",
[l]="host variable declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={lc,1615397021,vc},
[m]={Vc,1615397021,ub,ub},
[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);"}},
[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]={
[o]={
Line 3,778: Line 3,800:
},
},
["note_cuda_ovl_candidate_target_mismatch"]={
["note_cuda_ovl_candidate_target_mismatch"]={
[b]="candidate template ignored: target attributes do not match",
[g]="candidate template ignored: target attributes do not match",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="candidate template ignored: target attributes do not match",
[h]="candidate template ignored: target attributes do not match",
[j]=i,
[j]=i,
[k]="candidate template ignored\\: target attributes do not match",
[l]="candidate template ignored\\: target attributes do not match",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"13e9b4d76851",1481138836,"[CUDA] Improve target attribute checking for function templates."},
[m]={"13e9b4d76851",1481138836,"[CUDA] Improve target attribute checking for function templates.","[CUDA] Improve target attribute checking for function templates."},
[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);"}},
[n]={{ib,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]={
[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"}
["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"}
Line 3,793: Line 3,815:
},
},
["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",
[g]="remove \'u8\' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF-8",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="remove \'u8\' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF\\-8",
[l]="remove \'u8\' prefix to avoid a change of behavior; Clang encodes unprefixed narrow string literals as UTF\\-8",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={cc,1576908663,bc},
[m]={pc,1576908663,mb,mb},
[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);"}},
[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]={
[o]={
Line 3,808: Line 3,830:
},
},
["note_decl_hiding_tag_type"]={
["note_decl_hiding_tag_type"]={
[b]="A B is hidden by a non-type declaration of C here",
[g]="A B is hidden by a non-type declaration of C here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) (.*?) is hidden by a non\\-type declaration of (.*?) here",
[l]="(.*?) (.*?) is hidden by a non\\-type declaration of (.*?) here",
[l]=a,
[b]=a,
[c]=Z,
[k]=qb,
[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","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;"},{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;"}},
[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]={
[o]={
Line 3,823: Line 3,845:
},
},
["note_decl_unguarded_availability_silence"]={
["note_decl_unguarded_availability_silence"]={
[b]="annotate ... with an availability attribute to silence this warning",
[g]="annotate ... with an availability attribute to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="annotate (?:(.*?)|anonymous (.*?)) with an availability attribute to silence this warning",
[l]="annotate (?:(.*?)|anonymous (.*?)) with an availability attribute to silence this warning",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"8b352c4d9d82",1502740152,"[Sema] Improve some -Wunguarded-availability diagnostics"},
[m]={"8b352c4d9d82",1502740152,"[Sema] Improve some -Wunguarded-availability diagnostics","[Sema] Improve some -Wunguarded-availability diagnostics"},
[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;"}},
[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]={
[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"}
["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"}
Line 3,838: Line 3,860:
},
},
["note_declaration_not_a_prototype"]={
["note_declaration_not_a_prototype"]={
[b]="this declaration is not a prototype; add ... to make it ...",
[g]="this declaration is not a prototype; add ... to make it ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="this declaration is not a prototype; add (?:\'void\'|parameter declarations) to make it (?:a prototype for a zero\\-parameter function|one)",
[l]=a,
[b]=a,
[c]=p,
[k]=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...","When warning about a missing prototype because a function declaration is missing \'void\', insert a fixit to add the void."},
[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{});"}},
[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]={
[o]={
Line 3,853: Line 3,875:
},
},
["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",
[g]="declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools",
[l]="declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools",
[l]=a,
[b]=a,
[c]="ARC Semantic Issue",
[k]="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","[Sema][ObjC] Warn about implicitly autoreleasing out-parameters captured"},
[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);"}},
[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]={
[o]={
Line 3,868: Line 3,890:
},
},
["note_declared_at"]={
["note_declared_at"]={
[b]="declared here",
[g]="declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="declared here",
[h]="declared here",
[j]=i,
[j]=i,
[k]="declared here",
[l]="declared here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Jb,1236199783,Kb},
[m]={hc,1236199783,Zb,cc},
[n]={
[n]={
[1]={q,2123,"static void NoteLValueLocation(EvalInfo &Info, APValue::LValueBase Base) {\n  if (VD)\n    Info.Note(VD->getLocation(), diag::note_declared_at);"},
[1]={q,2123,"static void NoteLValueLocation(EvalInfo &Info, APValue::LValueBase Base) {\n  if (VD)\n    Info.Note(VD->getLocation(), diag::note_declared_at);"},
Line 3,891: Line 3,913:
[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);"},
[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]={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);"},
[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]={A,134,"bool CheckExtern(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  if (!S.checkingPotentialConstantExpression()) {\n    S.Note(VD->getLocation(), diag::note_declared_at);"},
[14]={B,134,"bool CheckExtern(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  if (!S.checkingPotentialConstantExpression()) {\n    S.Note(VD->getLocation(), diag::note_declared_at);"},
[15]={A,169,"bool CheckLive(InterpState &S, CodePtr OpPC, const Pointer &Ptr, AccessKinds AK) {\n  if (!Ptr.isLive()) {\n    if (IsTemp)\n    else\n      S.Note(Ptr.getDeclLoc(), diag::note_declared_at);"},
[15]={B,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]={A,232,"bool CheckMutable(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  S.Note(Field->getLocation(), diag::note_declared_at);"},
[16]={B,232,"bool CheckMutable(InterpState &S, CodePtr OpPC, const Pointer &Ptr) {\n  S.Note(Field->getLocation(), diag::note_declared_at);"},
[17]={A,335,"bool CheckCallable(InterpState &S, CodePtr OpPC, const Function *F) {\n  if (!F->isConstexpr()) {\n    if (S.getLangOpts().CPlusPlus11) {\n      S.Note(DiagDecl->getLocation(), diag::note_declared_at);"},
[17]={B,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]={A,379,"bool CheckPure(InterpState &S, CodePtr OpPC, const CXXMethodDecl *MD) {\n  S.Note(MD->getLocation(), diag::note_declared_at);"},
[18]={B,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.\n///\nbool Sema::RequireCompleteEnumDecl(EnumDecl *EnumD, SourceLocation L, CXXScopeSpec *SS) {\n  if (SS) {\n  } else {\n    Diag(EnumD->getLocation(), diag::note_declared_at);"},
[21]={Qc,300,"/// Require that the EnumDecl is completed with its enumerators defined or\n/// instantiated. SS, if provided, is the ScopeRef parsed.\n///\nbool Sema::RequireCompleteEnumDecl(EnumDecl *EnumD, SourceLocation L, CXXScopeSpec *SS) {\n  if (SS) {\n  } else {\n    Diag(EnumD->getLocation(), diag::note_declared_at);"},
[22]={jc,593,"/// 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      // The identifier is found in ordinary lookup. If correction to colon is\n      // allowed, suggest replacement to \':\'.\n      if (IsCorrectedToColon) {\n        if (NamedDecl *ND = R.getAsSingle<NamedDecl>())\n          Diag(ND->getLocation(), diag::note_declared_at);"},
[22]={Qc,593,"/// 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      // The identifier is found in ordinary lookup. If correction to colon is\n      // allowed, suggest replacement to \':\'.\n      if (IsCorrectedToColon) {\n        if (NamedDecl *ND = R.getAsSingle<NamedDecl>())\n          Diag(ND->getLocation(), diag::note_declared_at);"},
[23]={u,17431,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n        Diag(PrevDecl->getLocation(), diag::note_declared_at);"},
[23]={u,17431,"/// This is invoked when we see \'struct foo\' or \'struct {\'.  In the\n/// former case, Name will be non-null.  In the later case, Name will be null.\n/// TagSpec indicates what kind of tag this is. TUK indicates whether this is a\n/// reference/declaration/definition of a tag.\n///\n/// \\param IsTypeSpecifier \\c true if this is a type-specifier (or\n/// trailing-type-specifier) other than one in an alias-declaration.\n///\n/// \\param SkipBody If non-null, will be set to indicate if the caller should\n/// skip the definition of this tag and treat it as if it were a declaration.\nDeclResult Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, const ParsedAttributesView &Attrs, AccessSpecifier AS, SourceLocation ModulePrivateLoc, MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl, bool &IsDependent, SourceLocation ScopedEnumKWLoc, bool ScopedEnumUsesClassTag, TypeResult UnderlyingType, bool IsTypeSpecifier, bool IsTemplateParamOrArg, OffsetOfKind OOK, SkipBodyInfo *SkipBody) {\n  if (!Previous.empty()) {\n    if (TagDecl *PrevTagDecl = dyn_cast<TagDecl>(PrevDecl)) {\n    } else {\n      // Use a better diagnostic if an elaborated-type-specifier\n      // found the wrong kind of type on the first\n      // (non-redeclaration) lookup.\n      if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) {\n        Diag(PrevDecl->getLocation(), diag::note_declared_at);"},
[24]={r,1066,"static bool lookupStdTypeTraitMember(Sema &S, LookupResult &TraitMemberLookup, SourceLocation Loc, StringRef Trait, TemplateArgumentListInfo &Args, unsigned DiagID) {\n  if (!TraitTD) {\n    S.Diag(Found->getLocation(), diag::note_declared_at);"},
[24]={r,1066,"static bool lookupStdTypeTraitMember(Sema &S, LookupResult &TraitMemberLookup, SourceLocation Loc, StringRef Trait, TemplateArgumentListInfo &Args, unsigned DiagID) {\n  if (!TraitTD) {\n    S.Diag(Found->getLocation(), diag::note_declared_at);"},
Line 3,935: Line 3,957:
[56]={t,4375,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n  if (CfToNs) {\n  } else {\n    // Implicit conversion from ObjC type to CF object is needed.\n    if (InstanceMethod) {\n      if (Diagnose) {\n        Diag(RelatedClass->getBeginLoc(), diag::note_declared_at);"},
[56]={t,4375,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n  if (CfToNs) {\n  } else {\n    // Implicit conversion from ObjC type to CF object is needed.\n    if (InstanceMethod) {\n      if (Diagnose) {\n        Diag(RelatedClass->getBeginLoc(), diag::note_declared_at);"},
[57]={t,4376,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n  if (CfToNs) {\n  } else {\n    // Implicit conversion from ObjC type to CF object is needed.\n    if (InstanceMethod) {\n      if (Diagnose) {\n        Diag(TDNDecl->getBeginLoc(), diag::note_declared_at);"},
[57]={t,4376,"bool Sema::CheckObjCBridgeRelatedConversions(SourceLocation Loc, QualType DestType, QualType SrcType, Expr *&SrcExpr, bool Diagnose) {\n  if (CfToNs) {\n  } else {\n    // Implicit conversion from ObjC type to CF object is needed.\n    if (InstanceMethod) {\n      if (Diagnose) {\n        Diag(TDNDecl->getBeginLoc(), diag::note_declared_at);"},
[58]={V,1730,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n  if (!compat) {\n    if ((propertyObjCPtr = PropertyRValueType->getAs<ObjCObjectPointerType>()) && (getterObjCPtr = GetterType->getAs<ObjCObjectPointerType>()))\n    else if (CheckAssignmentConstraints(Loc, GetterType, PropertyRValueType) != Compatible) {\n      Diag(GetterMethod->getLocation(), diag::note_declared_at);"},
[58]={gb,1730,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n  if (!compat) {\n    if ((propertyObjCPtr = PropertyRValueType->getAs<ObjCObjectPointerType>()) && (getterObjCPtr = GetterType->getAs<ObjCObjectPointerType>()))\n    else if (CheckAssignmentConstraints(Loc, GetterType, PropertyRValueType) != Compatible) {\n      Diag(GetterMethod->getLocation(), diag::note_declared_at);"},
[59]={V,1745,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n  if (!compat) {\n    Diag(GetterMethod->getLocation(), diag::note_declared_at);"},
[59]={gb,1745,"bool Sema::DiagnosePropertyAccessorMismatch(ObjCPropertyDecl *property, ObjCMethodDecl *GetterMethod, SourceLocation Loc) {\n  if (!compat) {\n    Diag(GetterMethod->getLocation(), diag::note_declared_at);"},
[60]={V,2455,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  if (!property->isReadOnly() && SetterMethod) {\n    if (SetterMethod->param_size() != 1 || !Context.hasSameUnqualifiedType((*SetterMethod->param_begin())->getType().getNonReferenceType(), property->getType().getNonReferenceType())) {\n      Diag(SetterMethod->getLocation(), diag::note_declared_at);"},
[60]={gb,2455,"/// ProcessPropertyDecl - Make sure that any user-defined setter/getter methods\n/// have the property type and issue diagnostics if they don\'t.\n/// Also synthesize a getter/setter method if none exist (and update the\n/// appropriate lookup tables.\nvoid Sema::ProcessPropertyDecl(ObjCPropertyDecl *property) {\n  if (!property->isReadOnly() && SetterMethod) {\n    if (SetterMethod->param_size() != 1 || !Context.hasSameUnqualifiedType((*SetterMethod->param_begin())->getType().getNonReferenceType(), property->getType().getNonReferenceType())) {\n      Diag(SetterMethod->getLocation(), diag::note_declared_at);"},
[61]={J,3060,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  if (!Lookup.isSingleResult()) {\n  } else if (!(VD = Lookup.getAsSingle<VarDecl>())) {\n    Diag(Lookup.getFoundDecl()->getLocation(), diag::note_declared_at);"},
[61]={K,3060,"ExprResult Sema::ActOnOpenMPIdExpression(Scope *CurScope, CXXScopeSpec &ScopeSpec, const DeclarationNameInfo &Id, OpenMPDirectiveKind Kind) {\n  if (!Lookup.isSingleResult()) {\n  } else if (!(VD = Lookup.getAsSingle<VarDecl>())) {\n    Diag(Lookup.getFoundDecl()->getLocation(), diag::note_declared_at);"},
[62]={X,14014,"/// 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_Success: {\n    if (FnDecl) {\n      // C++2a [over.match.oper]p9:\n      //  If a rewritten operator== candidate is selected by overload\n      //  resolution for an operator@, its return type shall be cv bool\n      if (Best->RewriteKind && ChosenOp == OO_EqualEqual && !FnDecl->getReturnType()->isBooleanType()) {\n        Diag(FnDecl->getLocation(), diag::note_declared_at);"},
[62]={ib,14014,"/// 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_Success: {\n    if (FnDecl) {\n      // C++2a [over.match.oper]p9:\n      //  If a rewritten operator== candidate is selected by overload\n      //  resolution for an operator@, its return type shall be cv bool\n      if (Best->RewriteKind && ChosenOp == OO_EqualEqual && !FnDecl->getReturnType()->isBooleanType()) {\n        Diag(FnDecl->getLocation(), diag::note_declared_at);"},
[63]={H,2928,"/// 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 (const ArrayType *UnqAT = RangeType->getAsArrayTypeUnsafe()) {\n    } else {\n      if (Kind == BFRK_Build && RangeStatus == FRS_NoViableFunction && BEFFailure == BEF_begin) {\n        // If the range is being built from an array parameter, emit a\n        // a diagnostic that it is being treated as a pointer.\n        if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Range)) {\n          if (ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n            if (PointerTy->isPointerType() && ArrayTy->isArrayType()) {\n              Diag(PVD->getLocation(), diag::note_declared_at);"},
[63]={I,2928,"/// 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 (const ArrayType *UnqAT = RangeType->getAsArrayTypeUnsafe()) {\n    } else {\n      if (Kind == BFRK_Build && RangeStatus == FRS_NoViableFunction && BEFFailure == BEF_begin) {\n        // If the range is being built from an array parameter, emit a\n        // a diagnostic that it is being treated as a pointer.\n        if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Range)) {\n          if (ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(DRE->getDecl())) {\n            if (PointerTy->isPointerType() && ArrayTy->isArrayType()) {\n              Diag(PVD->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);"},
[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]={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);"}
[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);"}
Line 3,949: Line 3,971:
},
},
["note_declared_coroutine_here"]={
["note_declared_coroutine_here"]={
[b]="function is a coroutine due to use of \'A\' here",
[g]="function is a coroutine due to use of \'A\' here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="function is a coroutine due to use of \'%0\' here",
[h]="function is a coroutine due to use of \'%0\' here",
[j]=i,
[j]=i,
[k]="function is a coroutine due to use of \'(.*?)\' here",
[l]="function is a coroutine due to use of \'(.*?)\' here",
[l]=a,
[b]=a,
[c]=Bc,
[k]=wc,
[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.","[coroutines] Initial stub Sema functionality for handling coroutine await / yield / return."},
[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();"}},
[n]={{W,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;"},{W,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();"},{W,1229,"static bool diagReturnOnAllocFailure(Sema &S, Expr *E, CXXRecordDecl *PromiseRecordDecl, FunctionScopeInfo &Fn) {\n  S.Diag(Fn.FirstCoroutineStmtLoc, diag::note_declared_coroutine_here) << Fn.getFirstCoroutineStmtKeyword();"},{W,1272,"bool CoroutineStmtBuilder::makeReturnOnAllocFailure() {\n  if (ReturnStmt.isInvalid()) {\n    S.Diag(Fn.FirstCoroutineStmtLoc, diag::note_declared_coroutine_here) << Fn.getFirstCoroutineStmtKeyword();"},{W,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();"},{W,1928,"static void noteMemberDeclaredHere(Sema &S, Expr *E, FunctionScopeInfo &Fn) {\n  S.Diag(Fn.FirstCoroutineStmtLoc, diag::note_declared_coroutine_here) << Fn.getFirstCoroutineStmtKeyword();"}},
[o]={
[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"}
["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"}
Line 3,964: Line 3,986:
},
},
["note_declared_nonnull"]={
["note_declared_nonnull"]={
[b]="declared ... here",
[g]="declared ... here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="declared %select{\'returns_nonnull\'|\'nonnull\'}0 here",
[h]="declared %select{\'returns_nonnull\'|\'nonnull\'}0 here",
[j]=i,
[j]=i,
[k]="declared (?:\'returns_nonnull\'|\'nonnull\') here",
[l]="declared (?:\'returns_nonnull\'|\'nonnull\') here",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Add a \"declared \'nonnull\' here\" note to warnings where an expression is checked against null."},
[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;"}},
[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]={
[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}
["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",Ec,Ec,Ec,Ec,Ec,Ec}
}
}
},
},
["note_declared_required_constant_init_here"]={
["note_declared_required_constant_init_here"]={
[b]="required by ... here",
[g]="required by ... here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="required by (?:\'require_constant_initialization\' attribute|\'constinit\' specifier) here",
[l]="required by (?:\'require_constant_initialization\' attribute|\'constinit\' specifier) here",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Implement __attribute__((require_constant_initialization)) for safe static initialization."},
[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();"}},
[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]={
[o]={
Line 3,994: Line 4,016:
},
},
["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)",
[g]="deduced non-type template argument does not have the same type as the corresponding template parameter (A vs B)",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="deduced non\\-type template argument does not have the same type as the corresponding template parameter(?: \\((.*?) vs (.*?)\\)|)",
[l]="deduced non\\-type template argument does not have the same type as the corresponding template parameter(?: \\((.*?) vs (.*?)\\)|)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[o]={
[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 &\')"}
["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 &\')"}
Line 4,007: Line 4,029:
},
},
["note_deduced_template_arg_substitution_here"]={
["note_deduced_template_arg_substitution_here"]={
[b]="during template argument deduction for ... template ...A B",
[g]="during template argument deduction for ... template ...A B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="during template argument deduction for (?:class|variable) template (?:partial specialization |)(.*?) (.*?)",
[l]="during template argument deduction for (?:class|variable) template (?:partial specialization |)(.*?) (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=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...","Fix crash if substitution fails during deduction of variable template partial specialization arguments."},
[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;"}},
[n]={{H,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]={
[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]"}
["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]"}
Line 4,022: Line 4,044:
},
},
["note_deduction_guide_access"]={
["note_deduction_guide_access"]={
[b]="deduction guide declared A by intervening access specifier",
[g]="deduction guide declared A by intervening access specifier",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="deduction guide declared %0 by intervening access specifier",
[h]="deduction guide declared %0 by intervening access specifier",
[j]=i,
[j]=i,
[k]="deduction guide declared (.*?) by intervening access specifier",
[l]="deduction guide declared (.*?) by intervening access specifier",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","PR37631: verify that a member deduction guide has the same access as its template."},
[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;"}},
[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]={
[o]={
Line 4,037: Line 4,059:
},
},
["note_deduction_guide_template_access"]={
["note_deduction_guide_template_access"]={
[b]="member template declared A here",
[g]="member template declared A here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="member template declared %0 here",
[h]="member template declared %0 here",
[j]=i,
[j]=i,
[k]="member template declared (.*?) here",
[l]="member template declared (.*?) here",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","PR37631: verify that a member deduction guide has the same access as its template."},
[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();"}},
[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]={
[o]={
Line 4,052: Line 4,074:
},
},
["note_default_arg_instantiation_here"]={
["note_default_arg_instantiation_here"]={
[b]="in instantiation of default argument for \'A\' required here",
[g]="in instantiation of default argument for \'A\' required here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="in instantiation of default argument for \'%0\' required here",
[h]="in instantiation of default argument for \'%0\' required here",
[j]=i,
[j]=i,
[k]="in instantiation of default argument for \'(.*?)\' required here",
[l]="in instantiation of default argument for \'(.*?)\' required here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files."},
[m]={"5a8987ca5113",1237025389,Vb,Vb},
[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;"}},
[n]={{H,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]={
[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"}
["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"}
Line 4,067: Line 4,089:
},
},
["note_default_argument_declared_here"]={
["note_default_argument_declared_here"]={
[b]="default argument declared here",
[g]="default argument declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="default argument declared here",
[h]="default argument declared here",
[j]=i,
[j]=i,
[k]="default argument declared here",
[l]="default argument declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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...","It\'s an error to use a function declared in a class definition as a default argument before the function has been declared."},
[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);"}},
[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]={
[o]={
Line 4,082: Line 4,104:
},
},
["note_default_function_arg_instantiation_here"]={
["note_default_function_arg_instantiation_here"]={
[b]="in instantiation of default function argument expression for \'A\' required here",
[g]="in instantiation of default function argument expression for \'A\' required here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="in instantiation of default function argument expression for \'(.*?)\' required here",
[l]="in instantiation of default function argument expression for \'(.*?)\' required here",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Use a separate diagnostic for default function argument expressions."},
[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;"}},
[n]={{H,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]={
[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"}
["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"}
Line 4,097: Line 4,119:
},
},
["note_default_member_initializer_not_yet_parsed"]={
["note_default_member_initializer_not_yet_parsed"]={
[b]="default member initializer declared here",
[g]="default member initializer declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="default member initializer declared here",
[h]="default member initializer declared here",
[j]=i,
[j]=i,
[k]="default member initializer declared here",
[l]="default member initializer declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={mb,1582847864,jb},
[m]={Bb,1582847864,T,T},
[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);"}},
[n]={{s,6457,"ExprResult Sema::BuildCXXDefaultInitExpr(SourceLocation Loc, FieldDecl *Field) {\n  Diag(Field->getEndLoc(), diag::note_default_member_initializer_not_yet_parsed);"},{H,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]={
[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"}
["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"}
Line 4,112: Line 4,134:
},
},
["note_defaulted_comparison_ambiguous"]={
["note_defaulted_comparison_ambiguous"]={
[b]="defaulted A is implicitly deleted because implied ...comparison ...is ambiguous",
[g]="defaulted A is implicitly deleted because implied ...comparison ...is ambiguous",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="defaulted (.*?) is implicitly deleted because implied (?:|\'\\=\\=\' |\'\\<\' )comparison (?:|for member (.*?) |for base class (.*?) )is ambiguous",
[l]="defaulted (.*?) is implicitly deleted because implied (?:|\'\\=\\=\' |\'\\<\' )comparison (?:|for member (.*?) |for base class (.*?) )is ambiguous",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={tb,1573070592,Bb},
[m]={Ob,1573070592,Z,Z},
[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);"}},
[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]={
[o]={
Line 4,127: Line 4,149:
},
},
["note_defaulted_comparison_calls_deleted"]={
["note_defaulted_comparison_calls_deleted"]={
[b]="defaulted A is implicitly deleted because it would invoke a deleted comparison function...",
[g]="defaulted A is implicitly deleted because it would invoke a deleted comparison function...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="defaulted (.*?) is implicitly deleted because it would invoke a deleted comparison function(?:| for member (.*?)| for base class (.*?))",
[l]="defaulted (.*?) is implicitly deleted because it would invoke a deleted comparison function(?:| for member (.*?)| for base class (.*?))",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={tb,1573070592,Bb},
[m]={Ob,1573070592,Z,Z},
[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;"}},
[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]={
[o]={
Line 4,142: Line 4,164:
},
},
["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",
[g]="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,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=p,
[k]=p,
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[m]={"fe17b30a7957",1575504770,Wb,Wb},
[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();"}},
[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]={
[o]={
Line 4,157: Line 4,179:
},
},
["note_defaulted_comparison_cannot_deduce_callee"]={
["note_defaulted_comparison_cannot_deduce_callee"]={
[b]="selected \'operator<=>\' for ... A declared here",
[g]="selected \'operator<=>\' for ... A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="selected \'operator\\<\\=\\>\' for (?:|member|base class) (.*?) declared here",
[l]="selected \'operator\\<\\=\\>\' for (?:|member|base class) (.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[m]={"fe17b30a7957",1575504770,Wb,Wb},
[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;"}},
[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]={
[o]={
Line 4,172: Line 4,194:
},
},
["note_defaulted_comparison_cannot_deduce_undeduced_auto"]={
["note_defaulted_comparison_cannot_deduce_undeduced_auto"]={
[b]="... A declared here",
[g]="... A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{|member|base class}0 %1 declared here",
[h]="%select{|member|base class}0 %1 declared here",
[j]=i,
[j]=i,
[k]="(?:|member|base class) (.*?) declared here",
[l]="(?:|member|base class) (.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling"},
[m]={"1228d42ddab8",1576809732,bc,bc},
[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;"}}
[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...",
[g]="defaulted A is implicitly deleted because it would invoke a ... B...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="defaulted (.*?) is implicitly deleted because it would invoke a (?:private|protected) (.*?)(?: member of (.*?)| member of (.*?) to compare member (.*?)| to compare base class (.*?))",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[m]={"fe17b30a7957",1575504770,Wb,Wb},
[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()))"}},
[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]={
[o]={
Line 4,199: Line 4,221:
},
},
["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",
[g]="defaulted A is implicitly deleted because there is no viable ... for ...B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="defaulted (.*?) is implicitly deleted because there is no viable (?:three\\-way comparison function|\'operator\\=\\=\') for (?:|member |base class )(.*?)",
[l]="defaulted (.*?) is implicitly deleted because there is no viable (?:three\\-way comparison function|\'operator\\=\\=\') for (?:|member |base class )(.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={tb,1573070592,Bb},
[m]={Ob,1573070592,Z,Z},
[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;"}},
[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]={
[o]={
Line 4,214: Line 4,236:
},
},
["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",
[g]="three-way comparison cannot be synthesized because there is no viable function for ... comparison",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="three\\-way comparison cannot be synthesized because there is no viable function for (?:\'\\=\\=\'|\'\\<\') comparison",
[l]="three\\-way comparison cannot be synthesized because there is no viable function for (?:\'\\=\\=\'|\'\\<\') comparison",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={tb,1573070592,Bb},
[m]={Ob,1573070592,Z,Z},
[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);"}},
[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]={
[o]={
Line 4,229: Line 4,251:
},
},
["note_defaulted_comparison_not_constexpr"]={
["note_defaulted_comparison_not_constexpr"]={
[b]="non-constexpr comparison function would be used to compare ...",
[g]="non-constexpr comparison function would be used to compare ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="non\\-constexpr comparison function would be used to compare (?:|member (.*?)|base class (.*?))",
[l]="non\\-constexpr comparison function would be used to compare (?:|member (.*?)|base class (.*?))",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={tb,1573070592,Bb},
[m]={Ob,1573070592,Z,Z},
[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;"}},
[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]={
[o]={
Line 4,244: Line 4,266:
},
},
["note_defaulted_comparison_not_constexpr_here"]={
["note_defaulted_comparison_not_constexpr_here"]={
[b]="non-constexpr comparison function declared here",
[g]="non-constexpr comparison function declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="non-constexpr comparison function declared here",
[h]="non-constexpr comparison function declared here",
[j]=i,
[j]=i,
[k]="non\\-constexpr comparison function declared here",
[l]="non\\-constexpr comparison function declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={tb,1573070592,Bb},
[m]={Ob,1573070592,Z,Z},
[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);"}},
[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]={
[o]={
Line 4,259: Line 4,281:
},
},
["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",
[g]="defaulted A is implicitly deleted because this non-rewritten comparison function would be the best match for the comparison",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="defaulted (.*?) is implicitly deleted because this non\\-rewritten comparison function would be the best match for the comparison",
[l]="defaulted (.*?) is implicitly deleted because this non\\-rewritten comparison function would be the best match for the comparison",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={tb,1573070592,Bb},
[m]={Ob,1573070592,Z,Z},
[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;"}},
[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]={
[o]={
Line 4,274: Line 4,296:
},
},
["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",
[g]="defaulted A is implicitly deleted because a builtin comparison function using this conversion would be the best match for the comparison",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="defaulted (.*?) is implicitly deleted because a builtin comparison function using this conversion would be the best match for the comparison",
[l]="defaulted (.*?) is implicitly deleted because a builtin comparison function using this conversion would be the best match for the comparison",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={lc,1615397021,vc},
[m]={Vc,1615397021,ub,ub},
[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;"}},
[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]={
[o]={
Line 4,289: Line 4,311:
},
},
["note_defaulted_comparison_reference_member"]={
["note_defaulted_comparison_reference_member"]={
[b]="defaulted A is implicitly deleted because class B has a reference member",
[g]="defaulted A is implicitly deleted because class B has a reference member",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="defaulted (.*?) is implicitly deleted because class (.*?) has a reference member",
[l]="defaulted (.*?) is implicitly deleted because class (.*?) has a reference member",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={tb,1573070592,Bb},
[m]={Ob,1573070592,Z,Z},
[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;"}},
[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]={
[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"}
["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",Rc,"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",Rc,Rc,Rc,Rc,Rc,"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",
[g]="defaulted A is implicitly deleted because B is a ... with variant members",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="defaulted (.*?) is implicitly deleted because (.*?) is a (?:union\\-like class|union) with variant members",
[l]="defaulted (.*?) is implicitly deleted because (.*?) is a (?:union\\-like class|union) with variant members",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={tb,1573070592,Bb},
[m]={Ob,1573070592,Z,Z},
[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;"}},
[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]={
[o]={
Line 4,319: Line 4,341:
},
},
["note_defined_here"]={
["note_defined_here"]={
[b]="A defined here",
[g]="A defined here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%0 defined here",
[h]="%0 defined here",
[j]=i,
[j]=i,
[k]="(.*?) defined here",
[l]="(.*?) defined here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","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;"},{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;"}},
[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;"},{W,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();"},{V,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;"},{P,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;"},{K,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;"},{K,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;"},{K,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;"},{K,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;"},{K,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;"},{K,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;"},{K,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();"},{K,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;"},{K,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;"},{K,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;"},{K,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;"},{K,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;"},{K,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;"},{K,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;"},{K,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;"},{K,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;"},{K,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;"},{K,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;"},{K,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;"},{K,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;"},{K,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]={
[o]={
["clang/test/SemaObjC/parameterized_classes.m"]={"clang/test/SemaObjC/parameterized_classes.m:18:12: note: \'NSObject\' defined here"}
["clang/test/SemaObjC/parameterized_classes.m"]={"clang/test/SemaObjC/parameterized_classes.m:18:12: note: \'NSObject\' defined here"}
Line 4,334: Line 4,356:
},
},
["note_delete_conversion"]={
["note_delete_conversion"]={
[b]="conversion to pointer type A",
[g]="conversion to pointer type A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="conversion to pointer type %0",
[h]="conversion to pointer type %0",
[j]=i,
[j]=i,
[k]="conversion to pointer type (.*?)",
[l]="conversion to pointer type (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Refactor places which perform contextual implicit conversions to go through a"},
[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; }"}},
[n]={{X,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; }"},{X,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]={
[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 *\'"}
["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 *\'"}
Line 4,349: Line 4,371:
},
},
["note_delete_non_virtual"]={
["note_delete_non_virtual"]={
[b]="qualify call to silence this warning",
[g]="qualify call to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="qualify call to silence this warning",
[h]="qualify call to silence this warning",
[j]=i,
[j]=i,
[k]="qualify call to silence this warning",
[l]="qualify call to silence this warning",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Make -Wdelete-non-virtual-dtor warn on explicit `a->~A()` dtor calls too."},
[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 + \"::\");"}}
[n]={{X,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",
[g]="... assignment operator of A is implicitly deleted because field B is of ... type C",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:copy|move) assignment operator of (.*?) is implicitly deleted because field (.*?) is of (?:reference|const\\-qualified) type (.*?)",
[l]="(?:copy|move) assignment operator of (.*?) is implicitly deleted because field (.*?) is of (?:reference|const\\-qualified) type (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Ub,1333140808,Vb},
[m]={lc,1333140808,pb,pb},
[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;"}},
[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]={
[o]={
Line 4,376: Line 4,398:
},
},
["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",
[g]="copy constructor of A is implicitly deleted because field B is of rvalue reference type C",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="copy constructor of (.*?) is implicitly deleted because field (.*?) is of rvalue reference type (.*?)",
[l]="copy constructor of (.*?) is implicitly deleted because field (.*?) is of rvalue reference type (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Ub,1333140808,Vb},
[m]={lc,1333140808,pb,pb},
[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;"}},
[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]={
[o]={
Line 4,391: Line 4,413:
},
},
["note_deleted_copy_user_declared_move"]={
["note_deleted_copy_user_declared_move"]={
[b]="copy ... is implicitly deleted because A has a user-declared move ...",
[g]="copy ... is implicitly deleted because A has a user-declared move ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="copy (?:constructor|assignment operator) is implicitly deleted because (.*?) has a user\\-declared move (?:constructor|assignment operator)",
[l]="copy (?:constructor|assignment operator) is implicitly deleted because (.*?) has a user\\-declared move (?:constructor|assignment operator)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Ub,1333140808,Vb},
[m]={lc,1333140808,pb,pb},
[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();"}},
[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]={
[o]={
Line 4,406: Line 4,428:
},
},
["note_deleted_default_ctor_all_const"]={
["note_deleted_default_ctor_all_const"]={
[b]="... A is implicitly deleted because all ... are const-qualified",
[g]="... A is implicitly deleted because all ... are const-qualified",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?: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,
[b]=a,
[c]=p,
[k]=p,
[m]={Ub,1333140808,Vb},
[m]={lc,1333140808,pb,pb},
[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;"}},
[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]={
[o]={
Line 4,421: Line 4,443:
},
},
["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",
[g]="... A is implicitly deleted because field B of ... type C would not be initialized",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:default constructor of|constructor inherited by) (.*?) is implicitly deleted because field (.*?) of (?:reference|const\\-qualified) type (.*?) would not be initialized",
[l]="(?:default constructor of|constructor inherited by) (.*?) is implicitly deleted because field (.*?) of (?:reference|const\\-qualified) type (.*?) would not be initialized",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Ub,1333140808,Vb},
[m]={lc,1333140808,pb,pb},
[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;"}},
[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]={
[o]={
Line 4,436: Line 4,458:
},
},
["note_deleted_dtor_no_operator_delete"]={
["note_deleted_dtor_no_operator_delete"]={
[b]="virtual destructor requires an unambiguous, accessible \'operator delete\'",
[g]="virtual destructor requires an unambiguous, accessible \'operator delete\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="virtual destructor requires an unambiguous, accessible \'operator delete\'",
[h]="virtual destructor requires an unambiguous, accessible \'operator delete\'",
[j]=i,
[j]=i,
[k]="virtual destructor requires an unambiguous, accessible \'operator delete\'",
[l]="virtual destructor requires an unambiguous, accessible \'operator delete\'",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Ub,1333140808,Vb},
[m]={lc,1333140808,pb,pb},
[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);"}},
[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]={
[o]={
Line 4,451: Line 4,473:
},
},
["note_deleted_special_member_class_subobject"]={
["note_deleted_special_member_class_subobject"]={
[b]="... A is implicitly deleted because ... ...",
[g]="... A is implicitly deleted because ... ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(?: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,
[b]=a,
[c]=p,
[k]=p,
[m]={Ub,1333140808,Vb},
[m]={lc,1333140808,pb,pb},
[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;"}},
[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]={
[o]={
Line 4,466: Line 4,488:
},
},
["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 ...",
[g]="function is implicitly deleted because its declared type does not match the type of an implicit ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=p,
[k]=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","[cxx2a] P0641R2: (Some) type mismatches on defaulted functions only"},
[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;"}},
[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]={
[o]={
Line 4,481: Line 4,503:
},
},
["note_dependent_function_template_spec_discard_reason"]={
["note_dependent_function_template_spec_discard_reason"]={
[b]="candidate ignored: ...",
[g]="candidate ignored: ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="candidate ignored\\: (?:not a function template|not a member of the enclosing namespace; did you mean to explicitly qualify the specialization\\?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"0b75dc5fa2e0",1532032820,"[Sema] Diagnose an invalid dependent function template specialization"},
[m]={"0b75dc5fa2e0",1532032820,"[Sema] Diagnose an invalid dependent function template specialization","[Sema] Diagnose an invalid dependent function template specialization"},
[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;"}},
[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]={
[o]={
Line 4,496: Line 4,518:
},
},
["note_dependent_member_use"]={
["note_dependent_member_use"]={
[b]="must qualify identifier to find this declaration in dependent base class",
[g]="must qualify identifier to find this declaration in dependent base class",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="must qualify identifier to find this declaration in dependent base class",
[l]="must qualify identifier to find this declaration in dependent base class",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={pb,1590001902,qb},
[m]={Cb,1590001902,R,R},
[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;"}},
[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]={
[o]={
Line 4,511: Line 4,533:
},
},
["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",
[g]="template parameter is used in default argument declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="template parameter is used in default argument declared here",
[h]="template parameter is used in default argument declared here",
[j]=i,
[j]=i,
[k]="template parameter is used in default argument declared here",
[l]="template parameter is used in default argument declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","PR16519, PR18009: When checking a partial specialization for uses of its own"},
[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;"}}
[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",
[g]="add an explicit capture of \'this\' to capture \'*this\' by reference",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="add an explicit capture of \'this\' to capture \'\\*this\' by reference",
[l]="add an explicit capture of \'this\' to capture \'\\*this\' by reference",
[l]=a,
[b]=a,
[c]=Cc,
[k]=Yc,
[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","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]={
[o]={
Line 4,538: Line 4,560:
},
},
["note_designated_init_mixed"]={
["note_designated_init_mixed"]={
[b]="first non-designated initializer is here",
[g]="first non-designated initializer is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="first non-designated initializer is here",
[h]="first non-designated initializer is here",
[j]=i,
[j]=i,
[k]="first non\\-designated initializer is here",
[l]="first non\\-designated initializer is here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","[c++20] Implement semantic restrictions for C++20 designated"},
[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();"}},
[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]={
[o]={
Line 4,553: Line 4,575:
},
},
["note_destructor_nontype_here"]={
["note_destructor_nontype_here"]={
[b]="non-type declaration found by destructor name lookup",
[g]="non-type declaration found by destructor name lookup",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="non-type declaration found by destructor name lookup",
[h]="non-type declaration found by destructor name lookup",
[j]=i,
[j]=i,
[k]="non\\-type declaration found by destructor name lookup",
[l]="non\\-type declaration found by destructor name lookup",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling"},
[m]={"1228d42ddab8",1576809732,bc,bc},
[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;"}},
[n]={{X,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);"},{X,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]={
[o]={
["clang/test/SemaCXX/GH59446.cpp"]={"clang/test/SemaCXX/GH59446.cpp:5:34: note: non-type declaration found by destructor name lookup"}
["clang/test/SemaCXX/GH59446.cpp"]={"clang/test/SemaCXX/GH59446.cpp:5:34: note: non-type declaration found by destructor name lookup"}
Line 4,568: Line 4,590:
},
},
["note_destructor_type_here"]={
["note_destructor_type_here"]={
[b]="type A found by destructor name lookup",
[g]="type A found by destructor name lookup",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="type %0 found by destructor name lookup",
[h]="type %0 found by destructor name lookup",
[j]=i,
[j]=i,
[k]="type (.*?) found by destructor name lookup",
[l]="type (.*?) found by destructor name lookup",
[l]=a,
[b]=a,
[c]=p,
[k]=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,","When clearing a LookupResult structure, clear out the naming class,"},
[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);"}},
[n]={{X,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);"},{X,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);"},{X,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]={
[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"}
["clang/test/SemaCXX/pseudo-destructors.cpp"]={"clang/test/SemaCXX/pseudo-destructors.cpp:5:13: note: type \'Bar\' (aka \'Foo\') found by destructor name lookup"}
Line 4,583: Line 4,605:
},
},
["note_direct_member_here"]={
["note_direct_member_here"]={
[b]="direct member declared here",
[g]="direct member declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="direct member declared here",
[h]="direct member declared here",
[j]=i,
[j]=i,
[k]="direct member declared here",
[l]="direct member declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={pb,1590001902,qb},
[m]={Cb,1590001902,R,R},
[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);"}},
[n]={{P,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]={
[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"}
["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"}
Line 4,598: Line 4,620:
},
},
["note_direct_method_declared_at"]={
["note_direct_method_declared_at"]={
[b]="direct method A declared here",
[g]="direct method A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="direct method %0 declared here",
[h]="direct method %0 declared here",
[j]=i,
[j]=i,
[k]="direct method (.*?) declared here",
[l]="direct method (.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","[SYCL] Add sycl_kernel attribute for accelerated code outlining"},
[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();"}},
[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]={
[o]={
Line 4,613: Line 4,635:
},
},
["note_doc_block_command_previous"]={
["note_doc_block_command_previous"]={
[b]="previous command \'...A\' here",
[g]="previous command \'...A\' here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="previous command \'%select{\\|@}0%1\' here",
[h]="previous command \'%select{\\|@}0%1\' here",
[j]=i,
[j]=i,
[k]="previous command \'(?:\\\\|@)(.*?)\' here",
[l]="previous command \'(?:\\\\|@)(.*?)\' here",
[l]=a,
[b]=a,
[c]=vb,
[k]=Mb,
[m]={"5ec0c7536a98",1344272907,"Comment diagnostics: warn on duplicate \\brief and \\return commands."},
[m]={"5ec0c7536a98",1344272907,"Comment diagnostics: warn on duplicate \\brief and \\return commands.","Comment diagnostics: warn on duplicate \\brief and \\return commands."},
[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();"}},
[n]={{ec,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]={
[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"}
["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"}
Line 4,628: Line 4,650:
},
},
["note_doc_block_command_previous_alias"]={
["note_doc_block_command_previous_alias"]={
[b]="previous command \'...A\' (an alias of \'\\B\') here",
[g]="previous command \'...A\' (an alias of \'\\B\') here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="previous command \'%select{\\|@}0%1\' (an alias of \'\\%2\') here",
[h]="previous command \'%select{\\|@}0%1\' (an alias of \'\\%2\') here",
[j]=i,
[j]=i,
[k]="previous command \'(?:\\\\|@)(.*?)\' \\(an alias of \'\\\\(.*?)\'\\) here",
[l]="previous command \'(?:\\\\|@)(.*?)\' \\(an alias of \'\\\\(.*?)\'\\) here",
[l]=a,
[b]=a,
[c]=vb,
[k]=Mb,
[m]={"5ec0c7536a98",1344272907,"Comment diagnostics: warn on duplicate \\brief and \\return commands."},
[m]={"5ec0c7536a98",1344272907,"Comment diagnostics: warn on duplicate \\brief and \\return commands.","Comment diagnostics: warn on duplicate \\brief and \\return commands."},
[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;"}},
[n]={{ec,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]={
[o]={
["clang/test/Sema/warn-documentation.cpp"]={"clang/test/Sema/warn-documentation.cpp:170:6: note: previous command \'\\short\' (an alias of \'\\brief\') here"}
["clang/test/Sema/warn-documentation.cpp"]={"clang/test/Sema/warn-documentation.cpp:170:6: note: previous command \'\\short\' (an alias of \'\\brief\') here"}
Line 4,643: Line 4,665:
},
},
["note_doc_html_end_tag"]={
["note_doc_html_end_tag"]={
[b]="end tag",
[g]="end tag",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="end tag",
[h]="end tag",
[j]=i,
[j]=i,
[k]="end tag",
[l]="end tag",
[l]=a,
[b]=a,
[c]=vb,
[k]=Mb,
[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...","Comment parsing: repaint the bikesched: rename \'HTML open tags\' to \'HTML start tags\' and \'HTML close tags\' to \'HTML end tags\' according to HTML spec."},
[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();"}}
[n]={{ec,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",
[g]="HTML tag started here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="HTML tag started here",
[h]="HTML tag started here",
[j]=i,
[j]=i,
[k]="HTML tag started here",
[l]="HTML tag started here",
[l]=a,
[b]=a,
[c]=vb,
[k]=Mb,
[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","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]={
[o]={
Line 4,670: Line 4,692:
},
},
["note_doc_param_name_suggestion"]={
["note_doc_param_name_suggestion"]={
[b]="did you mean \'A\'?",
[g]="did you mean \'A\'?",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="did you mean \'%0\'?",
[h]="did you mean \'%0\'?",
[j]=i,
[j]=i,
[k]="did you mean \'(.*?)\'\\?",
[l]="did you mean \'(.*?)\'\\?",
[l]=a,
[b]=a,
[c]=vb,
[k]=Mb,
[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","Enable comment parsing and semantic analysis to emit diagnostics.  A few"},
[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());"}},
[n]={{ec,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]={
[o]={
["clang/test/Sema/warn-documentation-crlf.c"]={"clang/test/Sema/warn-documentation-crlf.c:10:11: note: did you mean \'qwerty\'?"}
["clang/test/Sema/warn-documentation-crlf.c"]={"clang/test/Sema/warn-documentation-crlf.c:10:11: note: did you mean \'qwerty\'?"}
Line 4,685: Line 4,707:
},
},
["note_doc_param_previous"]={
["note_doc_param_previous"]={
[b]=xc,
[g]=Wc,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]=xc,
[h]=Wc,
[j]=i,
[j]=i,
[k]=xc,
[l]=Wc,
[l]=a,
[b]=a,
[c]=vb,
[k]=Mb,
[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","Comment diagnostics: add warning for multiple \\param commands with duplicate"},
[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();"}},
[n]={{ec,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]={
[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"}
["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"}
Line 4,700: Line 4,722:
},
},
["note_doc_tparam_name_suggestion"]={
["note_doc_tparam_name_suggestion"]={
[b]="did you mean \'A\'?",
[g]="did you mean \'A\'?",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="did you mean \'%0\'?",
[h]="did you mean \'%0\'?",
[j]=i,
[j]=i,
[k]="did you mean \'(.*?)\'\\?",
[l]="did you mean \'(.*?)\'\\?",
[l]=a,
[b]=a,
[c]=vb,
[k]=Mb,
[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.","Comment parsing: add support for \\tparam command on all levels."},
[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);"}}
[n]={{ec,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,
[g]=Wc,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]=xc,
[h]=Wc,
[j]=i,
[j]=i,
[k]=xc,
[l]=Wc,
[l]=a,
[b]=a,
[c]=vb,
[k]=Mb,
[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.","Comment parsing: add support for \\tparam command on all levels."},
[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();"}}
[n]={{ec,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",
[g]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet",
[h]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet",
[j]=i,
[j]=i,
[k]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet",
[l]="AddressSanitizer doesn\'t support linking with debug runtime libraries yet",
[l]=a,
[b]=a,
[c]=a,
[k]=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","clang-cl: Diagnose the usage of ASAN with a debug runtime library"},
[n]={{"clang/lib/Driver/SanitizerArgs.cpp",942,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  if (AllAddedKinds & SanitizerKind::Address) {\n    if (Arg *WindowsDebugRTArg = Args.getLastArg(options::OPT__SLASH_MTd, options::OPT__SLASH_MT, options::OPT__SLASH_MDd, options::OPT__SLASH_MD, options::OPT__SLASH_LDd, options::OPT__SLASH_LD)) {\n      case options::OPT__SLASH_LDd:\n        if (DiagnoseErrors) {\n          D.Diag(clang::diag::note_drv_address_sanitizer_debug_runtime);"}}
[n]={{"clang/lib/Driver/SanitizerArgs.cpp",942,"SanitizerArgs::SanitizerArgs(const ToolChain &TC, const llvm::opt::ArgList &Args, bool DiagnoseErrors) {\n  if (AllAddedKinds & SanitizerKind::Address) {\n    if (Arg *WindowsDebugRTArg = Args.getLastArg(options::OPT__SLASH_MTd, options::OPT__SLASH_MT, options::OPT__SLASH_MDd, options::OPT__SLASH_MD, options::OPT__SLASH_LDd, options::OPT__SLASH_LD)) {\n      case options::OPT__SLASH_LDd:\n        if (DiagnoseErrors) {\n          D.Diag(clang::diag::note_drv_address_sanitizer_debug_runtime);"}}
},
},
["note_drv_available_multilibs"]={
["note_drv_available_multilibs"]={
[b]="available multilibs are:A",
[g]="available multilibs are:A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="available multilibs are:%0",
[h]="available multilibs are:%0",
[j]=i,
[j]=i,
[k]="available multilibs are\\:(.*?)",
[l]="available multilibs are\\:(.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"028c1033b1ed",1687186972,"[Driver][BareMetal] Error if no matching multilib"},
[m]={"028c1033b1ed",1687186972,"[Driver][BareMetal] Error if no matching multilib","[Driver][BareMetal] Error if no matching multilib"},
[n]={{"clang/lib/Driver/ToolChains/BareMetal.cpp",194,"static void findMultilibsFromYAML(const ToolChain &TC, const Driver &D, StringRef MultilibPath, const ArgList &Args, DetectedMultilibs &Result) {\n  D.Diag(clang::diag::note_drv_available_multilibs) << ss.str();"}}
[n]={{"clang/lib/Driver/ToolChains/BareMetal.cpp",194,"static void findMultilibsFromYAML(const ToolChain &TC, const Driver &D, StringRef MultilibPath, const ArgList &Args, DetectedMultilibs &Result) {\n  D.Diag(clang::diag::note_drv_available_multilibs) << ss.str();"}}
},
},
["note_drv_command_failed_diag_msg"]={
["note_drv_command_failed_diag_msg"]={
[b]="diagnostic msg: A",
[g]="diagnostic msg: A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="diagnostic msg: %0",
[h]="diagnostic msg: %0",
[j]=i,
[j]=i,
[k]="diagnostic msg\\: (.*?)",
[l]="diagnostic msg\\: (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=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 ","When the compiler crashes, the compiler driver now produces diagnostic information "},
[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********************\";"}}
[n]={{M,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;"},{M,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;"},{M,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********************\";"},{M,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) - \""},{M,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) - \""},{M,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 \""},{M,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).\";"},{M,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).\";"},{M,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).\";"},{M,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;"},{M,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;"},{M,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();"},{M,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;"},{M,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();"},{M,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\";"},{M,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();"},{M,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)\";"},{M,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",
[g]="was searched for in the directory: A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="was searched for in the directory: %0",
[h]="was searched for in the directory: %0",
[j]=i,
[j]=i,
[k]="was searched for in the directory\\: (.*?)",
[l]="was searched for in the directory\\: (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"c92ca91472b9",1514656766,"Enable configuration files in clang"},
[m]={"c92ca91472b9",1514656766,"Enable configuration files in clang","Enable configuration files in clang"},
[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;"}}
[n]={{M,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",
[g]="the last \'/TC\' or \'/TP\' option takes precedence over earlier instances",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="the last \'\\/TC\' or \'\\/TP\' option takes precedence over earlier instances",
[l]="the last \'\\/TC\' or \'\\/TP\' option takes precedence over earlier instances",
[l]=a,
[b]=a,
[c]=a,
[k]=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","clang-cl: Expand warning about /TC and /TP override, and expand test"},
[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);"}}
[n]={{M,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",
[g]="use \'A\'... for \'B\' standard",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="use \'(.*?)\'(?:| or \'(.*?)\'|, \'(.*?)\', or \'(.*?)\'|, \'(.*?)\', \'(.*?)\', or \'(.*?)\') for \'(.*?)\' standard",
[l]="use \'(.*?)\'(?:| or \'(.*?)\'|, \'(.*?)\', or \'(.*?)\'|, \'(.*?)\', \'(.*?)\', or \'(.*?)\') for \'(.*?)\' standard",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"c91daf1cf9a4",1487112260,"[Driver] Report available language standards on user error"},
[m]={"c91daf1cf9a4",1487112260,"[Driver] Report available language standards on user error","[Driver] Report available language standards on user error"},
[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);"}}
[n]={{xc,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",
[g]="-verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="\\-verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores",
[l]="\\-verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"05e46484825f",1513391002,"[VerifyDiagnosticConsumer] support -verify=<prefixes>"},
[m]={"05e46484825f",1513391002,"[VerifyDiagnosticConsumer] support -verify=<prefixes>","[VerifyDiagnosticConsumer] support -verify=<prefixes>"},
[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);"}}
[n]={{xc,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...",
[g]="due to A being dllexported...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="due to (.*?) being dllexported(?:|; try compiling in C\\+\\+11 mode)",
[l]="due to (.*?) being dllexported(?:|; try compiling in C\\+\\+11 mode)",
[l]=a,
[b]=a,
[c]=p,
[k]=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)","Improve diagnostic when failing to synthesize implicit member due to dllexport (PR22591)"},
[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;"}},
[n]={{H,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]={
[o]={
["clang/test/SemaCXX/default-arg-closures.cpp"]={"clang/test/SemaCXX/default-arg-closures.cpp:13:12: note: due to \'ExportDefaultCtorClosure\' being dllexported"}
["clang/test/SemaCXX/default-arg-closures.cpp"]={"clang/test/SemaCXX/default-arg-closures.cpp:13:12: note: due to \'ExportDefaultCtorClosure\' being dllexported"}
Line 4,823: Line 4,845:
},
},
["note_duplicate_asm_operand_name"]={
["note_duplicate_asm_operand_name"]={
[b]="asm operand name \"A\" first referenced here",
[g]="asm operand name \"A\" first referenced here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="asm operand name \"%0\" first referenced here",
[h]="asm operand name \"%0\" first referenced here",
[j]=i,
[j]=i,
[k]="asm operand name \"(.*?)\" first referenced here",
[l]="asm operand name \"(.*?)\" first referenced here",
[l]=a,
[b]=a,
[c]="Inline Assembly Issue",
[k]="Inline Assembly Issue",
[m]={"954ec09aed4f",1559178346,"clang support gnu asm goto."},
[m]={"954ec09aed4f",1559178346,"clang support gnu asm goto.","clang support gnu asm goto."},
[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;"}},
[n]={{Xc,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]={
[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"}
["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"}
Line 4,838: Line 4,860:
},
},
["note_duplicate_case_prev"]={
["note_duplicate_case_prev"]={
[b]="previous case defined here",
[g]="previous case defined here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="previous case defined here",
[h]="previous case defined here",
[j]=i,
[j]=i,
[k]="previous case defined here",
[l]="previous case defined here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Jb,1236199783,Kb},
[m]={hc,1236199783,Zb,cc},
[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);"}},
[n]={{I,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);"},{I,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);"},{I,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]={
[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"}
["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"}
Line 4,853: Line 4,875:
},
},
["note_duplicate_element"]={
["note_duplicate_element"]={
[b]="element A also has value B",
[g]="element A also has value B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="element %0 also has value %1",
[h]="element %0 also has value %1",
[j]=i,
[j]=i,
[k]="element (.*?) also has value (.*?)",
[l]="element (.*?) also has value (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Add -Wduplicate-enum warning.  Clang will emit this warning when an implicitly"},
[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();"}},
[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]={
[o]={
Line 4,868: Line 4,890:
},
},
["note_empty_body_on_separate_line"]={
["note_empty_body_on_separate_line"]={
[b]="put the semicolon on a separate line to silence this warning",
[g]="put the semicolon on a separate line to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="put the semicolon on a separate line to silence this warning",
[l]="put the semicolon on a separate line to silence this warning",
[l]=a,
[b]=a,
[c]=p,
[k]=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)","Generalize -Wempty-body: warn when statement body is empty (closes: PR11329)"},
[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);"}},
[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]={
[o]={
Line 4,883: Line 4,905:
},
},
["note_empty_parens_default_ctor"]={
["note_empty_parens_default_ctor"]={
[b]="remove parentheses to declare a variable",
[g]="remove parentheses to declare a variable",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="remove parentheses to declare a variable",
[h]="remove parentheses to declare a variable",
[j]=i,
[j]=i,
[k]="remove parentheses to declare a variable",
[l]="remove parentheses to declare a variable",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"8d06f424480e",1326412409,"Improve 0-argument -Wvexing-parse diagnostic by adding notes with fix-its:"},
[m]={"8d06f424480e",1326412409,Nc,Nc},
[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);"}},
[n]={{J,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]={
[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"}
["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"}
Line 4,898: Line 4,920:
},
},
["note_empty_parens_function_call"]={
["note_empty_parens_function_call"]={
[b]="change this \',\' to a \';\' to call A",
[g]="change this \',\' to a \';\' to call A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="change this \',\' to a \';\' to call %0",
[h]="change this \',\' to a \';\' to call %0",
[j]=i,
[j]=i,
[k]="change this \',\' to a \';\' to call (.*?)",
[l]="change this \',\' to a \';\' to call (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"8d06f424480e",1326412409,"Improve 0-argument -Wvexing-parse diagnostic by adding notes with fix-its:"},
[m]={"8d06f424480e",1326412409,Nc,Nc},
[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();"}},
[n]={{J,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]={
[o]={
["clang/test/Parser/cxx-stmt.cpp"]={"clang/test/Parser/cxx-stmt.cpp:63:8: note: change this \',\' to a \';\' to call \'f6\'"}
["clang/test/Parser/cxx-stmt.cpp"]={"clang/test/Parser/cxx-stmt.cpp:63:8: note: change this \',\' to a \';\' to call \'f6\'"}
Line 4,913: Line 4,935:
},
},
["note_empty_parens_zero_initialize"]={
["note_empty_parens_zero_initialize"]={
[b]="replace parentheses with an initializer to declare a variable",
[g]="replace parentheses with an initializer to declare a variable",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="replace parentheses with an initializer to declare a variable",
[h]="replace parentheses with an initializer to declare a variable",
[j]=i,
[j]=i,
[k]="replace parentheses with an initializer to declare a variable",
[l]="replace parentheses with an initializer to declare a variable",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"8d06f424480e",1326412409,"Improve 0-argument -Wvexing-parse diagnostic by adding notes with fix-its:"},
[m]={"8d06f424480e",1326412409,Nc,Nc},
[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);"}},
[n]={{J,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]={
[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"}
["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"}
Line 4,928: Line 4,950:
},
},
["note_empty_using_if_exists_here"]={
["note_empty_using_if_exists_here"]={
[b]="using declaration annotated with \'using_if_exists\' here",
[g]="using declaration annotated with \'using_if_exists\' here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="using declaration annotated with \'using_if_exists\' here",
[h]="using declaration annotated with \'using_if_exists\' here",
[j]=i,
[j]=i,
[k]="using declaration annotated with \'using_if_exists\' here",
[l]="using declaration annotated with \'using_if_exists\' here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={lc,1615397021,vc},
[m]={Vc,1615397021,ub,ub},
[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);"}},
[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]={
[o]={
Line 4,943: Line 4,965:
},
},
["note_enforce_read_only_placement"]={
["note_enforce_read_only_placement"]={
[b]="type was declared read-only here",
[g]="type was declared read-only here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="type was declared read-only here",
[h]="type was declared read-only here",
[j]=i,
[j]=i,
[k]="type was declared read\\-only here",
[l]="type was declared read\\-only here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={fb,1625925174,nb},
[m]={Hb,1625925174,N,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);"}},
[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]={
[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"}
["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",ld,ld,ld,ld,ld,"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",
[g]="jump enters lifetime of block which captures a destructible C++ object",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="jump enters lifetime of block which captures a destructible C\\+\\+ object",
[l]="jump enters lifetime of block which captures a destructible C\\+\\+ object",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={wc,1310407494,yc},
[m]={Uc,1310407494,sb,sb},
[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);"}},
[n]={{C,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]={
[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"}
["clang/test/SemaCXX/goto.cpp"]={"clang/test/SemaCXX/goto.cpp:121:15: note: jump enters lifetime of block which captures a destructible C++ object"}
Line 4,973: Line 4,995:
},
},
["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",
[g]="jump enters lifetime of block which captures a C struct that is non-trivial to destroy",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="jump enters lifetime of block which captures a C struct that is non\\-trivial to destroy",
[l]="jump enters lifetime of block which captures a C struct that is non\\-trivial to destroy",
[l]=a,
[b]=a,
[c]=p,
[k]=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","[ObjC] Allow declaring __strong pointer fields in structs in Objective-C"},
[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);"}},
[n]={{C,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]={
[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"}
[ad]={"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",
[g]="jump enters lifetime of block which strongly captures a variable",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump enters lifetime of block which strongly captures a variable",
[h]="jump enters lifetime of block which strongly captures a variable",
[j]=i,
[j]=i,
[k]="jump enters lifetime of block which strongly captures a variable",
[l]="jump enters lifetime of block which strongly captures a variable",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={wc,1310407494,yc},
[m]={Uc,1310407494,sb,sb},
[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);"}},
[n]={{C,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]={
[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"}
["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"}
Line 5,003: Line 5,025:
},
},
["note_enters_block_captures_weak"]={
["note_enters_block_captures_weak"]={
[b]="jump enters lifetime of block which weakly captures a variable",
[g]="jump enters lifetime of block which weakly captures a variable",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump enters lifetime of block which weakly captures a variable",
[h]="jump enters lifetime of block which weakly captures a variable",
[j]=i,
[j]=i,
[k]="jump enters lifetime of block which weakly captures a variable",
[l]="jump enters lifetime of block which weakly captures a variable",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={wc,1310407494,yc},
[m]={Uc,1310407494,sb,sb},
[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);"}}
[n]={{C,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",
[g]="jump enters lifetime of a compound literal that is non-trivial to destruct",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="jump enters lifetime of a compound literal that is non\\-trivial to destruct",
[l]="jump enters lifetime of a compound literal that is non\\-trivial to destruct",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={cc,1576908663,bc},
[m]={pc,1576908663,mb,mb},
[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;"}},
[n]={{C,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]={
[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"}
[ad]={"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",
[g]="jump enters a statement expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump enters a statement expression",
[h]="jump enters a statement expression",
[j]=i,
[j]=i,
[k]="jump enters a statement expression",
[l]="jump enters a statement expression",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"202191060602",1688720293,"[Clang] Diagnose jumps into statement expressions"},
[m]={"202191060602",1688720293,"[Clang] Diagnose jumps into statement expressions","[Clang] Diagnose jumps into statement expressions"},
[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,"}},
[n]={{C,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]={
[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"}
["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"}
Line 5,045: Line 5,067:
},
},
["note_entity_declared_at"]={
["note_entity_declared_at"]={
[b]="A declared here",
[g]="A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%0 declared here",
[h]="%0 declared here",
[j]=i,
[j]=i,
[k]="(.*?) declared here",
[l]="(.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"2afa8780d62a",1401279614,"Consolidate some note diagnostics"},
[m]={"2afa8780d62a",1401279614,"Consolidate some note diagnostics","Consolidate some note diagnostics"},
[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;"}}
[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();"},{Qc,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;"},{Qc,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;"},{V,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();"},{P,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",
[g]="enum A was explicitly specialized here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="enum %0 was explicitly specialized here",
[h]="enum %0 was explicitly specialized here",
[j]=i,
[j]=i,
[k]="enum (.*?) was explicitly specialized here",
[l]="enum (.*?) was explicitly specialized here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Add a special-case diagnostic for one of the more obnoxious special cases of"},
[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);"}},
[n]={{Ic,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]={
[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"}
["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"}
Line 5,072: Line 5,094:
},
},
["note_equality_comparison_silence"]={
["note_equality_comparison_silence"]={
[b]="remove extraneous parentheses around the comparison to silence this warning",
[g]="remove extraneous parentheses around the comparison to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="remove extraneous parentheses around the comparison to silence this warning",
[h]="remove extraneous parentheses around the comparison to silence this warning",
[j]=i,
[j]=i,
[k]="remove extraneous parentheses around the comparison to silence this warning",
[l]="remove extraneous parentheses around the comparison to silence this warning",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Warn for \"if ((a == b))\" where the equality expression is needlessly wrapped inside parentheses."},
[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());"}},
[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]={
[o]={
Line 5,087: Line 5,109:
},
},
["note_equality_comparison_to_assign"]={
["note_equality_comparison_to_assign"]={
[b]="use \'=\' to turn this equality comparison into an assignment",
[g]="use \'=\' to turn this equality comparison into an assignment",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="use \'=\' to turn this equality comparison into an assignment",
[h]="use \'=\' to turn this equality comparison into an assignment",
[j]=i,
[j]=i,
[k]="use \'\\=\' to turn this equality comparison into an assignment",
[l]="use \'\\=\' to turn this equality comparison into an assignment",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Warn for \"if ((a == b))\" where the equality expression is needlessly wrapped inside parentheses."},
[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, \"=\");"}},
[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, \"=\");"},{I,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]={
[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"}
["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"}
Line 5,102: Line 5,124:
},
},
["note_equivalent_internal_linkage_decl"]={
["note_equivalent_internal_linkage_decl"]={
[b]="declared here...",
[g]="declared here...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="declared here%select{ in module \'%1\'|}0",
[h]="declared here%select{ in module \'%1\'|}0",
[j]=i,
[j]=i,
[k]="declared here(?: in module \'(.*?)\'|)",
[l]="declared here(?: in module \'(.*?)\'|)",
[l]=a,
[b]=a,
[c]=fc,
[k]=Bc,
[m]={"2dbe4043e8f5",1446665192,"[modules] Generalize the workaround for multiple ambiguous definitions of"},
[m]={"2dbe4043e8f5",1446665192,"[modules] Generalize the workaround for multiple ambiguous definitions of","[modules] Generalize the workaround for multiple ambiguous definitions of"},
[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() : \"\");"}},
[n]={{ib,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() : \"\");"},{ib,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]={
[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\'"}
["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\'"}
Line 5,117: Line 5,139:
},
},
["note_evaluate_comparison_first"]={
["note_evaluate_comparison_first"]={
[b]="place parentheses around comparison expression to evaluate it first",
[g]="place parentheses around comparison expression to evaluate it first",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="place parentheses around comparison expression to evaluate it first",
[h]="place parentheses around comparison expression to evaluate it first",
[j]=i,
[j]=i,
[k]="place parentheses around comparison expression to evaluate it first",
[l]="place parentheses around comparison expression to evaluate it first",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Add warning group -Woverloaded-shift-op-parentheses to -Wparentheses.  This"},
[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()));"}},
[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]={
[o]={
Line 5,132: Line 5,154:
},
},
["note_evaluating_exception_spec_here"]={
["note_evaluating_exception_spec_here"]={
[b]="in evaluation of exception specification for A needed here",
[g]="in evaluation of exception specification for A needed here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="in evaluation of exception specification for %q0 needed here",
[h]="in evaluation of exception specification for %q0 needed here",
[j]=i,
[j]=i,
[k]="in evaluation of exception specification for (.*?) needed here",
[l]="in evaluation of exception specification for (.*?) needed here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"5159bbad8b2b",1536186637,"PR38627: Fix handling of exception specification adjustment for"},
[m]={"5159bbad8b2b",1536186637,"PR38627: Fix handling of exception specification adjustment for","PR38627: Fix handling of exception specification adjustment for"},
[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);"}},
[n]={{H,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]={
[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"}
["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"}
Line 5,147: Line 5,169:
},
},
["note_exception_spec_deprecated"]={
["note_exception_spec_deprecated"]={
[b]="use \'A\' instead",
[g]="use \'A\' instead",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="use \'%0\' instead",
[h]="use \'%0\' instead",
[j]=i,
[j]=i,
[k]="use \'(.*?)\' instead",
[l]="use \'(.*?)\' instead",
[l]=a,
[b]=a,
[c]=Z,
[k]=qb,
[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:","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]={
[o]={
Line 5,162: Line 5,184:
},
},
["note_exits___block"]={
["note_exits___block"]={
[b]="jump exits scope of __block variable",
[g]="jump exits scope of __block variable",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits scope of __block variable",
[h]="jump exits scope of __block variable",
[j]=i,
[j]=i,
[k]="jump exits scope of __block variable",
[l]="jump exits scope of __block variable",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={kb,1273625893,hb},
[m]={zb,1273625893,U,U},
[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);"}},
[n]={{C,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]={
[o]={
["clang/test/Sema/attr-musttail.m"]={"clang/test/Sema/attr-musttail.m:12:15: note: jump exits scope of __block variable"}
["clang/test/Sema/attr-musttail.m"]={"clang/test/Sema/attr-musttail.m:12:15: note: jump exits scope of __block variable"}
Line 5,177: Line 5,199:
},
},
["note_exits_block_captures_cxx_obj"]={
["note_exits_block_captures_cxx_obj"]={
[b]="jump exits lifetime of block which captures a destructible C++ object",
[g]="jump exits lifetime of block which captures a destructible C++ object",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="jump exits lifetime of block which captures a destructible C\\+\\+ object",
[l]="jump exits lifetime of block which captures a destructible C\\+\\+ object",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={wc,1310407494,yc},
[m]={Uc,1310407494,sb,sb},
[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);"}}
[n]={{C,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",
[g]="jump exits lifetime of block which captures a C struct that is non-trivial to destroy",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="jump exits lifetime of block which captures a C struct that is non\\-trivial to destroy",
[l]="jump exits lifetime of block which captures a C struct that is non\\-trivial to destroy",
[l]=a,
[b]=a,
[c]=p,
[k]=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","[ObjC] Allow declaring __strong pointer fields in structs in Objective-C"},
[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);"}},
[n]={{C,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]={
[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"}
[ad]={"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",
[g]="jump exits lifetime of block which strongly captures a variable",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits lifetime of block which strongly captures a variable",
[h]="jump exits lifetime of block which strongly captures a variable",
[j]=i,
[j]=i,
[k]="jump exits lifetime of block which strongly captures a variable",
[l]="jump exits lifetime of block which strongly captures a variable",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={wc,1310407494,yc},
[m]={Uc,1310407494,sb,sb},
[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);"}}
[n]={{C,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",
[g]="jump exits lifetime of block which weakly captures a variable",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits lifetime of block which weakly captures a variable",
[h]="jump exits lifetime of block which weakly captures a variable",
[j]=i,
[j]=i,
[k]="jump exits lifetime of block which weakly captures a variable",
[l]="jump exits lifetime of block which weakly captures a variable",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={wc,1310407494,yc},
[m]={Uc,1310407494,sb,sb},
[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);"}}
[n]={{C,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))",
[g]="jump exits scope of variable with __attribute__((cleanup))",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits scope of variable with __attribute__((cleanup))",
[h]="jump exits scope of variable with __attribute__((cleanup))",
[j]=i,
[j]=i,
[k]="jump exits scope of variable with __attribute__\\(\\(cleanup\\)\\)",
[l]="jump exits scope of variable with __attribute__\\(\\(cleanup\\)\\)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={kb,1273625893,hb},
[m]={zb,1273625893,U,U},
[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);"}}
[n]={{C,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",
[g]="jump exits lifetime of a compound literal that is non-trivial to destruct",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="jump exits lifetime of a compound literal that is non\\-trivial to destruct",
[l]="jump exits lifetime of a compound literal that is non\\-trivial to destruct",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={cc,1576908663,bc},
[m]={pc,1576908663,mb,mb},
[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;"}},
[n]={{C,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]={
[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"}
[ad]={"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",
[g]="jump exits catch block",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits catch block",
[h]="jump exits catch block",
[j]=i,
[j]=i,
[k]="jump exits catch block",
[l]="jump exits catch block",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={kb,1273625893,hb},
[m]={zb,1273625893,U,U},
[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()));"}}
[n]={{C,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",
[g]="jump exits try block",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits try block",
[h]="jump exits try block",
[j]=i,
[j]=i,
[k]="jump exits try block",
[l]="jump exits try block",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={kb,1273625893,hb},
[m]={zb,1273625893,U,U},
[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()));"}},
[n]={{C,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]={
[o]={
["clang/test/SemaCXX/attr-musttail.cpp"]={"clang/test/SemaCXX/attr-musttail.cpp:224:3: note: jump exits try block"}
["clang/test/SemaCXX/attr-musttail.cpp"]={"clang/test/SemaCXX/attr-musttail.cpp:224:3: note: jump exits try block"}
Line 5,282: Line 5,304:
},
},
["note_exits_dtor"]={
["note_exits_dtor"]={
[b]="jump exits scope of variable with non-trivial destructor",
[g]="jump exits scope of variable with non-trivial destructor",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits scope of variable with non-trivial destructor",
[h]="jump exits scope of variable with non-trivial destructor",
[j]=i,
[j]=i,
[k]="jump exits scope of variable with non\\-trivial destructor",
[l]="jump exits scope of variable with non\\-trivial destructor",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={kb,1273625893,hb},
[m]={zb,1273625893,U,U},
[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;"}},
[n]={{C,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);"},{C,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]={
[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"}
[ad]={"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",
[g]="jump exits autoreleasepool block",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits autoreleasepool block",
[h]="jump exits autoreleasepool block",
[j]=i,
[j]=i,
[k]="jump exits autoreleasepool block",
[l]="jump exits autoreleasepool block",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Sb,1308178962,Rb},
[m]={nc,1308178962,lb,lb},
[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()));"}}
[n]={{C,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",
[g]="jump exits @catch block",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits @catch block",
[h]="jump exits @catch block",
[j]=i,
[j]=i,
[k]="jump exits @catch block",
[l]="jump exits @catch block",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={kb,1273625893,hb},
[m]={zb,1273625893,U,U},
[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()));"}}
[n]={{C,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",
[g]="jump exits @finally block",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits @finally block",
[h]="jump exits @finally block",
[j]=i,
[j]=i,
[k]="jump exits @finally block",
[l]="jump exits @finally block",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={kb,1273625893,hb},
[m]={zb,1273625893,U,U},
[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()));"}}
[n]={{C,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",
[g]="jump exits scope of __strong variable",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits scope of __strong variable",
[h]="jump exits scope of __strong variable",
[j]=i,
[j]=i,
[k]="jump exits scope of __strong variable",
[l]="jump exits scope of __strong variable",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."},
[m]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements.","Some minor ARC diagnostic improvements."},
[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);"}}
[n]={{C,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",
[g]="jump exits @synchronized block",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits @synchronized block",
[h]="jump exits @synchronized block",
[j]=i,
[j]=i,
[k]="jump exits @synchronized block",
[l]="jump exits @synchronized block",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={kb,1273625893,hb},
[m]={zb,1273625893,U,U},
[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()));"}}
[n]={{C,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",
[g]="jump exits @try block",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits @try block",
[h]="jump exits @try block",
[j]=i,
[j]=i,
[k]="jump exits @try block",
[l]="jump exits @try block",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={kb,1273625893,hb},
[m]={zb,1273625893,U,U},
[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()));"}}
[n]={{C,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",
[g]="jump exits scope of __weak variable",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits scope of __weak variable",
[h]="jump exits scope of __weak variable",
[j]=i,
[j]=i,
[k]="jump exits scope of __weak variable",
[l]="jump exits scope of __weak variable",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements."},
[m]={"039f2bbd02ce",1445450798,"Some minor ARC diagnostic improvements.","Some minor ARC diagnostic improvements."},
[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);"}}
[n]={{C,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",
[g]="jump exits __except block",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits __except block",
[h]="jump exits __except block",
[j]=i,
[j]=i,
[k]="jump exits __except block",
[l]="jump exits __except block",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[m]={"b14f87226902",1422983168,Lc,Lc},
[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()));"}},
[n]={{C,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]={
[o]={
["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:613:5: note: jump exits __except block"}
["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:613:5: note: jump exits __except block"}
Line 5,396: Line 5,418:
},
},
["note_exits_seh_finally"]={
["note_exits_seh_finally"]={
[b]="jump exits __finally block",
[g]="jump exits __finally block",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits __finally block",
[h]="jump exits __finally block",
[j]=i,
[j]=i,
[k]="jump exits __finally block",
[l]="jump exits __finally block",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[m]={"b14f87226902",1422983168,Lc,Lc},
[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()));"}},
[n]={{C,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]={
[o]={
["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:624:5: note: jump exits __finally block"}
["clang/test/SemaCXX/scope-check.cpp"]={"clang/test/SemaCXX/scope-check.cpp:624:5: note: jump exits __finally block"}
Line 5,411: Line 5,433:
},
},
["note_exits_seh_try"]={
["note_exits_seh_try"]={
[b]="jump exits __try block",
[g]="jump exits __try block",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="jump exits __try block",
[h]="jump exits __try block",
[j]=i,
[j]=i,
[k]="jump exits __try block",
[l]="jump exits __try block",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"b14f87226902",1422983168,"Implement jump scope SEHmantic analysis."},
[m]={"b14f87226902",1422983168,Lc,Lc},
[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()));"}},
[n]={{C,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]={
[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"}
["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"}
Line 5,426: Line 5,448:
},
},
["note_exits_temporary_dtor"]={
["note_exits_temporary_dtor"]={
[b]="jump exits scope of lifetime-extended temporary with non-trivial destructor",
[g]="jump exits scope of lifetime-extended temporary with non-trivial destructor",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="jump exits scope of lifetime\\-extended temporary with non\\-trivial destructor",
[l]="jump exits scope of lifetime\\-extended temporary with non\\-trivial destructor",
[l]=a,
[b]=a,
[c]=p,
[k]=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","PR18217: Rewrite JumpDiagnostics\' handling of temporaries, to correctly handle"},
[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()));"}},
[n]={{C,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]={
[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"}
["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"}
Line 5,441: Line 5,463:
},
},
["note_explicit_ctor_deduction_guide_here"]={
["note_explicit_ctor_deduction_guide_here"]={
[b]="explicit ... declared here",
[g]="explicit ... declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="explicit %select{constructor|deduction guide}0 declared here",
[h]="explicit %select{constructor|deduction guide}0 declared here",
[j]=i,
[j]=i,
[k]="explicit (?:constructor|deduction guide) declared here",
[l]="explicit (?:constructor|deduction guide) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","[c++1z] P0091R3: Basic support for deducing class template arguments via deduction-guides."},
[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;"}},
[n]={{L,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;"},{L,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]={
[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"}
["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"}
Line 5,456: Line 5,478:
},
},
["note_explicit_instantiation_candidate"]={
["note_explicit_instantiation_candidate"]={
[b]="explicit instantiation candidate function A template here B",
[g]="explicit instantiation candidate function A template here B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="explicit instantiation candidate function %q0 template here %1",
[h]="explicit instantiation candidate function %q0 template here %1",
[j]=i,
[j]=i,
[k]="explicit instantiation candidate function (.*?) template here (.*?)",
[l]="explicit instantiation candidate function (.*?) template here (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"450f0084a27b",1253904180,"WIP implementation of explicit instantiation of function templates,"},
[m]={"450f0084a27b",1253904180,"WIP implementation of explicit instantiation of function templates,","WIP implementation of explicit instantiation of function templates,"},
[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));"}},
[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]={
[o]={
Line 5,471: Line 5,493:
},
},
["note_explicit_instantiation_definition_here"]={
["note_explicit_instantiation_definition_here"]={
[b]="explicit instantiation definition is here",
[g]="explicit instantiation definition is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="explicit instantiation definition is here",
[h]="explicit instantiation definition is here",
[j]=i,
[j]=i,
[k]="explicit instantiation definition is here",
[l]="explicit instantiation definition is here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"d6ba93dc6eb6",1255622045,"Check the interactions between explicit instantiations and template"},
[m]={"d6ba93dc6eb6",1255622045,"Check the interactions between explicit instantiations and template","Check the interactions between explicit instantiations and template"},
[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);"}},
[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]={
[o]={
Line 5,486: Line 5,508:
},
},
["note_explicit_instantiation_here"]={
["note_explicit_instantiation_here"]={
[b]="explicit instantiation refers here",
[g]="explicit instantiation refers here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="explicit instantiation refers here",
[h]="explicit instantiation refers here",
[j]=i,
[j]=i,
[k]="explicit instantiation refers here",
[l]="explicit instantiation refers here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"450f0084a27b",1253904180,"WIP implementation of explicit instantiation of function templates,"},
[m]={"450f0084a27b",1253904180,"WIP implementation of explicit instantiation of function templates,","WIP implementation of explicit instantiation of function templates,"},
[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);"}},
[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]={
[o]={
Line 5,501: Line 5,523:
},
},
["note_explicit_template_arg_substitution_here"]={
["note_explicit_template_arg_substitution_here"]={
[b]="while substituting explicitly-specified template arguments into function template A B",
[g]="while substituting explicitly-specified template arguments into function template A B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="while substituting explicitly\\-specified template arguments into function template (.*?) (.*?)",
[l]="while substituting explicitly\\-specified template arguments into function template (.*?) (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=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.,","Keep track of more information within the template instantiation stack, e.g.,"},
[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;"}},
[n]={{H,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]={
[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\' "}
["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\' "}
Line 5,516: Line 5,538:
},
},
["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",
[g]="\'template<>\' header not required for explicitly-specialized class A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="\'template\\<\\>\' header not required for explicitly\\-specialized class (.*?) declared here",
[l]="\'template\\<\\>\' header not required for explicitly\\-specialized class (.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"65911498eff3",1258978305,"Tolerate extraneous \"template<>\" headers better, downgrading the"},
[m]={"65911498eff3",1258978305,"Tolerate extraneous \"template<>\" headers better, downgrading the","Tolerate extraneous \"template<>\" headers better, downgrading the"},
[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();"}},
[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]={
[o]={
Line 5,531: Line 5,553:
},
},
["note_export"]={
["note_export"]={
[b]="export block begins here",
[g]="export block begins here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="export block begins here",
[h]="export block begins here",
[j]=i,
[j]=i,
[k]="export block begins here",
[l]="export block begins here",
[l]=a,
[b]=a,
[c]=fc,
[k]=Bc,
[m]={"e181de7f4fe9",1555973411,"[c++2a] Implement semantic restrictions for \'export\' declarations."},
[m]={"e181de7f4fe9",1555973411,"[c++2a] Implement semantic restrictions for \'export\' declarations.","[c++2a] Implement semantic restrictions for \'export\' declarations."},
[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);"}},
[n]={{Ab,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);"},{Ab,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);"},{Ab,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);"},{Ab,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]={
[o]={
["clang/test/Modules/export-in-another-export.cppm"]={"clang/test/Modules/export-in-another-export.cppm:3:1: note: export block begins here"}
["clang/test/Modules/export-in-another-export.cppm"]={"clang/test/Modules/export-in-another-export.cppm:3:1: note: export block begins here"}
Line 5,546: Line 5,568:
},
},
["note_expr_divide_by_zero"]={
["note_expr_divide_by_zero"]={
[b]="division by zero",
[g]="division by zero",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="division by zero",
[h]="division by zero",
[j]=i,
[j]=i,
[k]="division by zero",
[l]="division by zero",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Jb,1236199783,Kb},
[m]={hc,1236199783,Zb,cc},
[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);"}},
[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]={
[o]={
Line 5,561: Line 5,583:
},
},
["note_expr_evaluates_to"]={
["note_expr_evaluates_to"]={
[b]="expression evaluates to \'A B C\'",
[g]="expression evaluates to \'A B C\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="expression evaluates to \'%0 %1 %2\'",
[h]="expression evaluates to \'%0 %1 %2\'",
[j]=i,
[j]=i,
[k]="expression evaluates to \'(.*?) (.*?) (.*?)\'",
[l]="expression evaluates to \'(.*?) (.*?) (.*?)\'",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={fb,1625925174,nb},
[m]={Hb,1625925174,N,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();"}},
[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]={
[o]={
Line 5,576: Line 5,598:
},
},
["note_expr_requirement_constraints_not_satisfied"]={
["note_expr_requirement_constraints_not_satisfied"]={
[b]="... type constraint \'A\' was not satisfied:",
[g]="... type constraint \'A\' was not satisfied:",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{and|because}0 type constraint \'%1\' was not satisfied:",
[h]="%select{and|because}0 type constraint \'%1\' was not satisfied:",
[j]=i,
[j]=i,
[k]="(?:and|because) type constraint \'(.*?)\' was not satisfied\\:",
[l]="(?:and|because) type constraint \'(.*?)\' was not satisfied\\:",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={ob,1576172311,lb},
[m]={yb,1576172311,S,S},
[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;"}},
[n]={{hb,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]={
[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:"}
["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:"}
Line 5,591: Line 5,613:
},
},
["note_expr_requirement_constraints_not_satisfied_simple"]={
["note_expr_requirement_constraints_not_satisfied_simple"]={
[b]="... A does not satisfy B:",
[g]="... A does not satisfy B:",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{and|because}0 %1 does not satisfy %2:",
[h]="%select{and|because}0 %1 does not satisfy %2:",
[j]=i,
[j]=i,
[k]="(?:and|because) (.*?) does not satisfy (.*?)\\:",
[l]="(?:and|because) (.*?) does not satisfy (.*?)\\:",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={ob,1576172311,lb},
[m]={yb,1576172311,S,S},
[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();"}}
[n]={{hb,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",
[g]="... \'A\' would be invalid: B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{and|because}0 \'%1\' would be invalid: %2",
[h]="%select{and|because}0 \'%1\' would be invalid: %2",
[j]=i,
[j]=i,
[k]="(?:and|because) \'(.*?)\' would be invalid\\: (.*?)",
[l]="(?:and|because) \'(.*?)\' would be invalid\\: (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={ob,1576172311,lb},
[m]={yb,1576172311,S,S},
[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;"}},
[n]={{hb,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]={
[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"}
["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"}
Line 5,618: Line 5,640:
},
},
["note_expr_requirement_expr_unknown_substitution_error"]={
["note_expr_requirement_expr_unknown_substitution_error"]={
[b]="... \'A\' would be invalid",
[g]="... \'A\' would be invalid",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{and|because}0 \'%1\' would be invalid",
[h]="%select{and|because}0 \'%1\' would be invalid",
[j]=i,
[j]=i,
[k]="(?:and|because) \'(.*?)\' would be invalid",
[l]="(?:and|because) \'(.*?)\' would be invalid",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={ob,1576172311,lb},
[m]={yb,1576172311,S,S},
[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;"}},
[n]={{hb,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]={
[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"}
["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"}
Line 5,633: Line 5,655:
},
},
["note_expr_requirement_noexcept_not_met"]={
["note_expr_requirement_noexcept_not_met"]={
[b]="... \'A\' may throw an exception",
[g]="... \'A\' may throw an exception",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{and|because}0 \'%1\' may throw an exception",
[h]="%select{and|because}0 \'%1\' may throw an exception",
[j]=i,
[j]=i,
[k]="(?:and|because) \'(.*?)\' may throw an exception",
[l]="(?:and|because) \'(.*?)\' may throw an exception",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={ob,1576172311,lb},
[m]={yb,1576172311,S,S},
[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();"}},
[n]={{hb,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]={
[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"}
["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"}
Line 5,648: Line 5,670:
},
},
["note_expr_requirement_type_requirement_substitution_error"]={
["note_expr_requirement_type_requirement_substitution_error"]={
[b]="... \'A\' would be invalid: B",
[g]="... \'A\' would be invalid: B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{and|because}0 \'%1\' would be invalid: %2",
[h]="%select{and|because}0 \'%1\' would be invalid: %2",
[j]=i,
[j]=i,
[k]="(?:and|because) \'(.*?)\' would be invalid\\: (.*?)",
[l]="(?:and|because) \'(.*?)\' would be invalid\\: (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={ob,1576172311,lb},
[m]={yb,1576172311,S,S},
[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;"}}
[n]={{hb,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",
[g]="... \'A\' would be invalid",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{and|because}0 \'%1\' would be invalid",
[h]="%select{and|because}0 \'%1\' would be invalid",
[j]=i,
[j]=i,
[k]="(?:and|because) \'(.*?)\' would be invalid",
[l]="(?:and|because) \'(.*?)\' would be invalid",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={ob,1576172311,lb},
[m]={yb,1576172311,S,S},
[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;"}}
[n]={{hb,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",
[g]="extern \"C\" language linkage specification begins here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="extern \"C\" language linkage specification begins here",
[h]="extern \"C\" language linkage specification begins here",
[j]=i,
[j]=i,
[k]="extern \"C\" language linkage specification begins here",
[l]="extern \"C\" language linkage specification begins here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Add a note that points to the linkage specifier for the C++ linkage errors"},
[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);"}},
[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);"},{Ab,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]={
[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"}
["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"}
Line 5,687: Line 5,709:
},
},
["note_extern_c_global_conflict"]={
["note_extern_c_global_conflict"]={
[b]="declared ... here",
[g]="declared ... here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="declared (?:in global scope|with C language linkage) here",
[l]="declared (?:in global scope|with C language linkage) here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","PR7927, PR16247: Reimplement handling of matching extern \"C\" declarations"},
[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;"}},
[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]={
[o]={
Line 5,702: Line 5,724:
},
},
["note_extra_comma_message_arg"]={
["note_extra_comma_message_arg"]={
[b]="comma separating Objective-C messaging arguments",
[g]="comma separating Objective-C messaging arguments",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="comma separating Objective-C messaging arguments",
[h]="comma separating Objective-C messaging arguments",
[j]=i,
[j]=i,
[k]="comma separating Objective\\-C messaging arguments",
[l]="comma separating Objective\\-C messaging arguments",
[l]=a,
[b]=a,
[c]=Z,
[k]=qb,
[m]={"945b2f46b154",1337640224,"objective-c: provide a useful \'fixit\' suggestion when"},
[m]={"945b2f46b154",1337640224,"objective-c: provide a useful \'fixit\' suggestion when","objective-c: provide a useful \'fixit\' suggestion when"},
[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);"}}
[n]={{uc,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 \';\'?",
[g]="did you forget \';\'?",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="did you forget \';\'?",
[h]="did you forget \';\'?",
[j]=i,
[j]=i,
[k]="did you forget \';\'\\?",
[l]="did you forget \';\'\\?",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"84837d5b5aa0",1336069659,"Add -Wimplicit-fallthrough warning flag, which warns on fallthrough between"},
[m]={"84837d5b5aa0",1336069659,zc,zc},
[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]={
[o]={
Line 5,729: Line 5,751:
},
},
["note_fe_backend_invalid_loc"]={
["note_fe_backend_invalid_loc"]={
[b]="could not determine the original source location for A:B:C",
[g]="could not determine the original source location for A:B:C",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="could not determine the original source location for (.*?)\\:(.*?)\\:(.*?)",
[l]="could not determine the original source location for (.*?)\\:(.*?)\\:(.*?)",
[l]=a,
[b]=a,
[c]="Backend Issue",
[k]="Backend Issue",
[m]={"5e03a4b8370d",1453915828,"Add backend dignostic printer for unsupported features"},
[m]={"5e03a4b8370d",1453915828,"Add backend dignostic printer for unsupported features","Add backend dignostic printer for unsupported features"},
[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;"}}
[n]={{ed,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;"},{ed,743,"void BackendConsumer::UnsupportedDiagHandler(const llvm::DiagnosticInfoUnsupported &D) {\n  if (BadDebugInfo)\n    Diags.Report(Loc, diag::note_fe_backend_invalid_loc) << Filename << Line << Column;"},{ed,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;"},{ed,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\'",
[g]="A (B) exceeds limit (C) in \'D\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%0 (%1) exceeds limit (%2) in \'%3\'",
[h]="%0 (%1) exceeds limit (%2) in \'%3\'",
[j]=i,
[j]=i,
[k]="(.*?) \\((.*?)\\) exceeds limit \\((.*?)\\) in \'(.*?)\'",
[l]="(.*?) \\((.*?)\\) exceeds limit \\((.*?)\\) in \'(.*?)\'",
[l]=a,
[b]=a,
[c]="Backend Issue",
[k]="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","[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",
[g]="instantiated into assembly here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="instantiated into assembly here",
[h]="instantiated into assembly here",
[j]=i,
[j]=i,
[k]="instantiated into assembly here",
[l]="instantiated into assembly here",
[l]=a,
[b]=a,
[c]=a,
[k]=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,","teach clang to install the inline asm diagnostic handler,"},
[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);"}},
[n]={{ed,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]={
[o]={
["clang/test/CodeGen/X86/x86-64-inline-asm.c"]={"<inline asm>:1:23: note: instantiated into assembly here"}
["clang/test/CodeGen/X86/x86-64-inline-asm.c"]={"<inline asm>:1:23: note: instantiated into assembly here"}
Line 5,767: Line 5,789:
},
},
["note_fe_linking_module"]={
["note_fe_linking_module"]={
[b]="linking module \'A\': B",
[g]="linking module \'A\': B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="linking module \'%0\': %1",
[h]="linking module \'%0\': %1",
[j]=i,
[j]=i,
[k]="linking module \'(.*?)\'\\: (.*?)",
[l]="linking module \'(.*?)\'\\: (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"1c829ce1e362",1629504872,"[clang][codegen] Set CurLinkModule in CodeGenAction::ExecuteAction"}
[m]={"1c829ce1e362",1629504872,"[clang][codegen] Set CurLinkModule in CodeGenAction::ExecuteAction","[clang][codegen] Set CurLinkModule in CodeGenAction::ExecuteAction"}
},
},
["note_field_designator_found"]={
["note_field_designator_found"]={
[b]="field designator refers here",
[g]="field designator refers here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="field designator refers here",
[h]="field designator refers here",
[j]=i,
[j]=i,
[k]="field designator refers here",
[l]="field designator refers here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Jb,1236199783,Kb},
[m]={hc,1236199783,Zb,cc},
[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);"}}
[n]={{L,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",
[g]="A additional files entered using a total of BB of space",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) additional files entered using a total of (.*?)B of space",
[l]="(.*?) additional files entered using a total of (.*?)B of space",
[l]=a,
[b]=a,
[c]=a,
[k]=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","When we run out of source locations, try to produce useful information"},
[n]={{"clang/lib/Basic/SourceManager.cpp",2320,"void SourceManager::noteSLocAddressSpaceUsage(DiagnosticsEngine &Diag, std::optional<unsigned> MaxNotes) const {\n  // Describe any remaining usage not reported in the per-file usage.\n  if (ReportedSize != CountedSize) {\n    Diag.Report(SourceLocation(), diag::note_file_misc_sloc_usage) << (SortedUsage.end() - SortedEnd) << CountedSize - ReportedSize;"}}
[n]={{"clang/lib/Basic/SourceManager.cpp",2320,"void SourceManager::noteSLocAddressSpaceUsage(DiagnosticsEngine &Diag, std::optional<unsigned> MaxNotes) const {\n  // Describe any remaining usage not reported in the per-file usage.\n  if (ReportedSize != CountedSize) {\n    Diag.Report(SourceLocation(), diag::note_file_misc_sloc_usage) << (SortedUsage.end() - SortedEnd) << CountedSize - ReportedSize;"}}
},
},
["note_file_sloc_usage"]={
["note_file_sloc_usage"]={
[b]="file entered A timeB using CB of space",
[g]="file entered A timeB using CB of space",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="file entered (.*?) time(.*?) using (.*?)B of space(?:| plus (.*?)B for macro expansions)",
[l]="file entered (.*?) time(.*?) using (.*?)B of space(?:| plus (.*?)B for macro expansions)",
[l]=a,
[b]=a,
[c]=a,
[k]=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","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]={
[o]={
Line 5,817: Line 5,839:
},
},
["note_final_dtor_non_final_class_silence"]={
["note_final_dtor_non_final_class_silence"]={
[b]="mark A as \'...\' to silence this warning",
[g]="mark A as \'...\' to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="mark (.*?) as \'(?:final|sealed)\' to silence this warning",
[l]="mark (.*?) as \'(?:final|sealed)\' to silence this warning",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"94f3f3e7f46a",1567276544,"[NFC] Fix for rL370594"},
[m]={"94f3f3e7f46a",1567276544,"[NFC] Fix for rL370594","[NFC] Fix for rL370594"},
[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();"}},
[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]={
[o]={
Line 5,832: Line 5,854:
},
},
["note_final_overrider"]={
["note_final_overrider"]={
[b]="final overrider of A in B",
[g]="final overrider of A in B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="final overrider of %q0 in %1",
[h]="final overrider of %q0 in %1",
[j]=i,
[j]=i,
[k]="final overrider of (.*?) in (.*?)",
[l]="final overrider of (.*?) in (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Implement computation of the final overriders for each virtual"},
[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();"}},
[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]={
[o]={
Line 5,847: Line 5,869:
},
},
["note_first_module_difference"]={
["note_first_module_difference"]={
[b]="in first definition, possible difference is here",
[g]="in first definition, possible difference is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="in first definition, possible difference is here",
[h]="in first definition, possible difference is here",
[j]=i,
[j]=i,
[k]="in first definition, possible difference is here",
[l]="in first definition, possible difference is here",
[l]=a,
[b]=a,
[c]=a,
[k]=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.","[ODRHash] Supply more information when generic error message is emitted."},
[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();"}}
[n]={{O,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",
[g]="FIX-IT applied suggested code changes",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="FIX-IT applied suggested code changes",
[h]="FIX-IT applied suggested code changes",
[j]=i,
[j]=i,
[k]="FIX\\-IT applied suggested code changes",
[l]="FIX\\-IT applied suggested code changes",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the"},
[m]={"a42bd8433d56",1238692380,dc,dc},
[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]={
[o]={
Line 5,874: Line 5,896:
},
},
["note_fixit_failed"]={
["note_fixit_failed"]={
[b]="FIX-IT unable to apply suggested code changes",
[g]="FIX-IT unable to apply suggested code changes",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="FIX-IT unable to apply suggested code changes",
[h]="FIX-IT unable to apply suggested code changes",
[j]=i,
[j]=i,
[k]="FIX\\-IT unable to apply suggested code changes",
[l]="FIX\\-IT unable to apply suggested code changes",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the"},
[m]={"a42bd8433d56",1238692380,dc,dc},
[n]={{"clang/lib/Frontend/Rewrite/FixItRewriter.cpp",192,"void FixItRewriter::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) {\n  if (!Editor.commit(commit)) {\n    Diag(Info.getLocation(), diag::note_fixit_failed);"}}
[n]={{"clang/lib/Frontend/Rewrite/FixItRewriter.cpp",192,"void FixItRewriter::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) {\n  if (!Editor.commit(commit)) {\n    Diag(Info.getLocation(), diag::note_fixit_failed);"}}
},
},
["note_fixit_in_macro"]={
["note_fixit_in_macro"]={
[b]="FIX-IT unable to apply suggested code changes in a macro",
[g]="FIX-IT unable to apply suggested code changes in a macro",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="FIX\\-IT unable to apply suggested code changes in a macro",
[l]="FIX\\-IT unable to apply suggested code changes in a macro",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the"},
[m]={"a42bd8433d56",1238692380,dc,dc},
[n]={{"clang/lib/Frontend/Rewrite/FixItRewriter.cpp",180,"void FixItRewriter::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) {\n  if (!CanRewrite) {\n    if (Info.getNumFixItHints() > 0)\n      Diag(Info.getLocation(), diag::note_fixit_in_macro);"}}
[n]={{"clang/lib/Frontend/Rewrite/FixItRewriter.cpp",180,"void FixItRewriter::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) {\n  if (!CanRewrite) {\n    if (Info.getNumFixItHints() > 0)\n      Diag(Info.getLocation(), diag::note_fixit_in_macro);"}}
},
},
["note_fixit_unfixed_error"]={
["note_fixit_unfixed_error"]={
[b]="FIX-IT detected an error it cannot fix",
[g]="FIX-IT detected an error it cannot fix",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="FIX-IT detected an error it cannot fix",
[h]="FIX-IT detected an error it cannot fix",
[j]=i,
[j]=i,
[k]="FIX\\-IT detected an error it cannot fix",
[l]="FIX\\-IT detected an error it cannot fix",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"a42bd8433d56",1238692380,"Provide FIX-IT notes to describe what fix-it is doing behind the"},
[m]={"a42bd8433d56",1238692380,dc,dc},
[n]={{"clang/lib/Frontend/Rewrite/FixItRewriter.cpp",185,"void FixItRewriter::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) {\n  if (!CanRewrite) {\n    // If this was an error, refuse to perform any rewriting.\n    if (DiagLevel >= DiagnosticsEngine::Error) {\n      if (++NumFailures == 1)\n        Diag(Info.getLocation(), diag::note_fixit_unfixed_error);"}}
[n]={{"clang/lib/Frontend/Rewrite/FixItRewriter.cpp",185,"void FixItRewriter::HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, const Diagnostic &Info) {\n  if (!CanRewrite) {\n    // If this was an error, refuse to perform any rewriting.\n    if (DiagLevel >= DiagnosticsEngine::Error) {\n      if (++NumFailures == 1)\n        Diag(Info.getLocation(), diag::note_fixit_unfixed_error);"}}
},
},
["note_flexible_array_member"]={
["note_flexible_array_member"]={
[b]="initialized flexible array member A is here",
[g]="initialized flexible array member A is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="initialized flexible array member %0 is here",
[h]="initialized flexible array member %0 is here",
[j]=i,
[j]=i,
[k]="initialized flexible array member (.*?) is here",
[l]="initialized flexible array member (.*?) is here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Jb,1236199783,Kb},
[m]={hc,1236199783,Zb,cc},
[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;"}},
[n]={{L,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;"},{L,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;"},{L,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;"},{L,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]={
[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"}
["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",gc,gc,gc,gc,gc,gc,gc,gc,"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",
[g]="selected \'...\' ...A with iterator type B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="selected \'(?:begin|end)\' (?:function|template )(.*?) with iterator type (.*?)",
[l]="selected \'(?:begin|end)\' (?:function|template )(.*?) with iterator type (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=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).","Add support for C++0x\'s range-based for loops, as specified by the C++11 draft standard (N3291)."},
[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\""}},
[n]={{I,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]={
[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 *\'"}
["clang/test/SemaCXX/for-range-dereference.cpp"]={"clang/test/SemaCXX/for-range-dereference.cpp:4:9: note: selected \'begin\' function with iterator type \'Data *\'"}
Line 5,940: Line 5,962:
},
},
["note_for_range_invalid_iterator"]={
["note_for_range_invalid_iterator"]={
[b]="in implicit call to \'operator...\' for iterator of type A",
[g]="in implicit call to \'operator...\' for iterator of type A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="in implicit call to \'operator(?:\\!\\=|\\*|\\+\\+)\' for iterator of type (.*?)",
[l]="in implicit call to \'operator(?:\\!\\=|\\*|\\+\\+)\' for iterator of type (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Clarified diagnostics for range-based for loops with invalid ranges"},
[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();"}},
[n]={{I,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();"},{I,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();"},{I,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]={
[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>\'"}
["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>\'"}
Line 5,955: Line 5,977:
},
},
["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",
[g]="member is not a candidate because range type A has no \'...\' member",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="member is not a candidate because range type (.*?) has no \'(?:end|begin)\' member",
[l]="member is not a candidate because range type (.*?) has no \'(?:end|begin)\' member",
[l]=a,
[b]=a,
[c]=p,
[k]=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","P0962R1: only use the member form of \'begin\' and \'end\' in a range-based"},
[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;"}},
[n]={{I,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]={
[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"}
["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"}
Line 5,970: Line 5,992:
},
},
["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",
[g]="or insert whitespace before \':\' to use A as parameter name and have an empty entry in the selector",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="or insert whitespace before \'\\:\' to use (.*?) as parameter name and have an empty entry in the selector",
[l]="or insert whitespace before \'\\:\' to use (.*?) as parameter name and have an empty entry in the selector",
[l]=a,
[b]=a,
[c]=Z,
[k]=qb,
[m]={"84f498433116",1347923399,"objective-C: improve on warnings about misplacement of method"},
[m]={"84f498433116",1347923399,"objective-C: improve on warnings about misplacement of method","objective-C: improve on warnings about misplacement of method"},
[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;"}},
[n]={{uc,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]={
[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"}
["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"}
Line 5,985: Line 6,007:
},
},
["note_format_fix_specifier"]={
["note_format_fix_specifier"]={
[b]="did you mean to use \'A\'?",
[g]="did you mean to use \'A\'?",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="did you mean to use \'%0\'?",
[h]="did you mean to use \'%0\'?",
[j]=i,
[j]=i,
[k]="did you mean to use \'(.*?)\'\\?",
[l]="did you mean to use \'(.*?)\'\\?",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Format strings: %Ld isn\'t available on Darwin or Windows."},
[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());"}},
[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]={
[o]={
Line 6,000: Line 6,022:
},
},
["note_format_security_fixit"]={
["note_format_security_fixit"]={
[b]="treat the string as an argument to avoid this",
[g]="treat the string as an argument to avoid this",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="treat the string as an argument to avoid this",
[h]="treat the string as an argument to avoid this",
[j]=i,
[j]=i,
[k]="treat the string as an argument to avoid this",
[l]="treat the string as an argument to avoid this",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Move the fixit for -Wformat-security to a note."},
[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, \"@\\\"%@\\\", \");"}},
[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]={
[o]={
Line 6,015: Line 6,037:
},
},
["note_format_string_defined"]={
["note_format_string_defined"]={
[b]="format string is defined here",
[g]="format string is defined here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="format string is defined here",
[h]="format string is defined here",
[j]=i,
[j]=i,
[k]="format string is defined here",
[l]="format string is defined here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Fix for PR9751 to change the behavior of -Wformat warnings.  If the format"},
[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);"}},
[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]={
[o]={
Line 6,030: Line 6,052:
},
},
["note_forward_class"]={
["note_forward_class"]={
[b]="forward declaration of class here",
[g]="forward declaration of class here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="forward declaration of class here",
[h]="forward declaration of class here",
[j]=i,
[j]=i,
[k]="forward declaration of class here",
[l]="forward declaration of class here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up"},
[m]={"7cabbe04ebdd",1292460988,"Improve diagnostics when property being looked up","Improve diagnostics when property being looked up"},
[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);"}},
[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);"},{J,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]={
[o]={
["clang/test/SemaObjC/exprs.m"]={"clang/test/SemaObjC/exprs.m:36:8: note: forward declaration of class here"}
["clang/test/SemaObjC/exprs.m"]={"clang/test/SemaObjC/exprs.m:36:8: note: forward declaration of class here"}
Line 6,045: Line 6,067:
},
},
["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",
[g]="A is not defined, but forward declared here; conversion would be valid if it was derived from B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) is not defined, but forward declared here; conversion would be valid if it was derived from (.*?)",
[l]="(.*?) is not defined, but forward declared here; conversion would be valid if it was derived from (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={mb,1582847864,jb},
[m]={Bb,1582847864,T,T},
[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);"}},
[n]={{L,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]={
[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\'"}
["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\'"}
Line 6,060: Line 6,082:
},
},
["note_forward_declaration"]={
["note_forward_declaration"]={
[b]="forward declaration of A",
[g]="forward declaration of A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="forward declaration of %0",
[h]="forward declaration of %0",
[j]=i,
[j]=i,
[k]="forward declaration of (.*?)",
[l]="forward declaration of (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Jb,1236199783,Kb},
[m]={hc,1236199783,Zb,cc},
[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;"}},
[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;"},{J,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);"},{J,9531,"QualType Sema::BuiltinEnumUnderlyingType(QualType BaseType, SourceLocation Loc) {\n  if (BaseType->isIncompleteType(&FwdDecl)) {\n    Diag(FwdDecl->getLocation(), diag::note_forward_declaration) << FwdDecl;"}},
[o]={
[o]={
["clang/test/SemaCXX/PR6618.cpp"]={"clang/test/SemaCXX/PR6618.cpp:2:7: note: forward declaration of \'bar\'"}
["clang/test/SemaCXX/PR6618.cpp"]={"clang/test/SemaCXX/PR6618.cpp:2:7: note: forward declaration of \'bar\'"}
Line 6,075: Line 6,097:
},
},
["note_forward_template_decl"]={
["note_forward_template_decl"]={
[b]="forward declaration of template entity is here",
[g]="forward declaration of template entity is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="forward declaration of template entity is here",
[h]="forward declaration of template entity is here",
[j]=i,
[j]=i,
[k]="forward declaration of template entity is here",
[l]="forward declaration of template entity is here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Warn if function or variable cannot be implicitly instantiated"},
[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);"}},
[n]={{Ic,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);"},{Ic,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]={
[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"}
["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"}
Line 6,090: Line 6,112:
},
},
["note_found_mutex_near_match"]={
["note_found_mutex_near_match"]={
[b]="found near match \'A\'",
[g]="found near match \'A\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="found near match \'%0\'",
[h]="found near match \'%0\'",
[j]=i,
[j]=i,
[k]="found near match \'(.*?)\'",
[l]="found near match \'(.*?)\'",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Thread-safety analysis: differentiate between two forms of analysis; a precise"},
[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);"}},
[n]={{Db,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]={
[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\'"}
["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\'"}
Line 6,105: Line 6,127:
},
},
["note_from_diagnose_if"]={
["note_from_diagnose_if"]={
[b]="from \'diagnose_if\' attribute on A:",
[g]="from \'diagnose_if\' attribute on A:",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="from \'diagnose_if\' attribute on %0:",
[h]="from \'diagnose_if\' attribute on %0:",
[j]=i,
[j]=i,
[k]="from \'diagnose_if\' attribute on (.*?)\\:",
[l]="from \'diagnose_if\' attribute on (.*?)\\:",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang."},
[m]={"177399e2277c",1483935134,"Add the diagnose_if attribute to clang.","Add the diagnose_if attribute to clang."},
[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();"}},
[n]={{ib,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();"},{ib,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]={
[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[]\':"}
["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[]\':"}
Line 6,120: Line 6,142:
},
},
["note_function_style_cast_add_parentheses"]={
["note_function_style_cast_add_parentheses"]={
[b]="add enclosing parentheses to perform a function-style cast",
[g]="add enclosing parentheses to perform a function-style cast",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="add enclosing parentheses to perform a function-style cast",
[h]="add enclosing parentheses to perform a function-style cast",
[j]=i,
[j]=i,
[k]="add enclosing parentheses to perform a function\\-style cast",
[l]="add enclosing parentheses to perform a function\\-style cast",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Add a \"vexing parse\" warning for ambiguity between a variable declaration and a"},
[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()), \")\");"}},
[n]={{J,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]={
[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"}
["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"}
Line 6,135: Line 6,157:
},
},
["note_function_suggestion"]={
["note_function_suggestion"]={
[b]="did you mean A?",
[g]="did you mean A?",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="did you mean %0?",
[h]="did you mean %0?",
[j]=i,
[j]=i,
[k]="did you mean (.*?)\\?",
[l]="did you mean (.*?)\\?",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"2fb8b91f6f96",1323164772,"Suggest typo corrections for implicit function declarations."},
[m]={"2fb8b91f6f96",1323164772,"Suggest typo corrections for implicit function declarations.","Suggest typo corrections for implicit function declarations."},
[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),"}}
[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",
[g]="while substituting deduced template arguments into function template A B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="while substituting deduced template arguments into function template %0 %1",
[h]="while substituting deduced template arguments into function template %0 %1",
[j]=i,
[j]=i,
[k]="while substituting deduced template arguments into function template (.*?) (.*?)",
[l]="while substituting deduced template arguments into function template (.*?) (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=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.,","Keep track of more information within the template instantiation stack, e.g.,"},
[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;"}},
[n]={{H,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]={
[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]"}
["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]"}
Line 6,162: Line 6,184:
},
},
["note_function_template_spec_here"]={
["note_function_template_spec_here"]={
[b]="in instantiation of function template specialization A requested here",
[g]="in instantiation of function template specialization A requested here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="in instantiation of function template specialization %q0 requested here",
[h]="in instantiation of function template specialization %q0 requested here",
[j]=i,
[j]=i,
[k]="in instantiation of function template specialization (.*?) requested here",
[l]="in instantiation of function template specialization (.*?) requested here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"4adbc6d947b0",1245975003,"Implicit instantiation for function template specializations."},
[m]={"4adbc6d947b0",1245975003,"Implicit instantiation for function template specializations.","Implicit instantiation for function template specializations."},
[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;"}},
[n]={{H,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]={
[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"}
["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"}
Line 6,177: Line 6,199:
},
},
["note_function_template_spec_matched"]={
["note_function_template_spec_matched"]={
[b]="function template A matches specialization B",
[g]="function template A matches specialization B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="function template %q0 matches specialization %1",
[h]="function template %q0 matches specialization %1",
[j]=i,
[j]=i,
[k]="function template (.*?) matches specialization (.*?)",
[l]="function template (.*?) matches specialization (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"3a923c2d3799",1253834087,"WIP implementation of explicit function template specialization. This"},
[m]={"3a923c2d3799",1253834087,"WIP implementation of explicit function template specialization. This","WIP implementation of explicit function template specialization. This"},
[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));"}},
[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]={
[o]={
Line 6,192: Line 6,214:
},
},
["note_function_to_function_call"]={
["note_function_to_function_call"]={
[b]="suffix with parentheses to turn this into a function call",
[g]="suffix with parentheses to turn this into a function call",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="suffix with parentheses to turn this into a function call",
[h]="suffix with parentheses to turn this into a function call",
[j]=i,
[j]=i,
[k]="suffix with parentheses to turn this into a function call",
[l]="suffix with parentheses to turn this into a function call",
[l]=a,
[b]=a,
[c]=p,
[k]=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","PR16074, implement warnings to catch pointer to boolean true and pointer to"},
[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()), \"()\");"}},
[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]={
[o]={
Line 6,207: Line 6,229:
},
},
["note_function_warning_silence"]={
["note_function_warning_silence"]={
[b]="prefix with the address-of operator to silence this warning",
[g]="prefix with the address-of operator to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="prefix with the address-of operator to silence this warning",
[h]="prefix with the address-of operator to silence this warning",
[j]=i,
[j]=i,
[k]="prefix with the address\\-of operator to silence this warning",
[l]="prefix with the address\\-of operator to silence this warning",
[l]=a,
[b]=a,
[c]=p,
[k]=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","PR16074, implement warnings to catch pointer to boolean true and pointer to"},
[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(), \"&\");"}},
[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]={
[o]={
Line 6,222: Line 6,244:
},
},
["note_getter_unavailable"]={
["note_getter_unavailable"]={
[b]="or because setter is declared here, but no getter method A is found",
[g]="or because setter is declared here, but no getter method A is found",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="or because setter is declared here, but no getter method (.*?) is found",
[l]="or because setter is declared here, but no getter method (.*?) is found",
[l]=a,
[b]=a,
[c]=p,
[k]=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 ","Issue extended diagnostic when property dot-syntax is used and "},
[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();"}}
[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",
[g]="add \'module;\' to the start of the file to introduce a global module fragment",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="add \'module;\' to the start of the file to introduce a global module fragment",
[l]="add \'module;\' to the start of the file to introduce a global module fragment",
[l]=a,
[b]=a,
[c]=fc,
[k]=Bc,
[m]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,"},
[m]={"d652bdd05f1c",1555229219,"[c++20] Parsing support for module-declarations, import-declarations,","[c++20] Parsing support for module-declarations, import-declarations,"},
[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\");"}},
[n]={{Ab,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]={
[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"}
["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"}
Line 6,249: Line 6,271:
},
},
["note_goto_ms_asm_label"]={
["note_goto_ms_asm_label"]={
[b]="inline assembly label A declared here",
[g]="inline assembly label A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="inline assembly label %0 declared here",
[h]="inline assembly label %0 declared here",
[j]=i,
[j]=i,
[k]="inline assembly label (.*?) declared here",
[l]="inline assembly label (.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","ms-inline-asm: Scope inline asm labels to functions"},
[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();"}},
[n]={{C,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]={
[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"}
["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"}
Line 6,264: Line 6,286:
},
},
["note_guarded_by_declared_here"]={
["note_guarded_by_declared_here"]={
[b]="guarded_by declared here",
[g]="guarded_by declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="guarded_by declared here",
[h]="guarded_by declared here",
[j]=i,
[j]=i,
[k]="guarded_by declared here",
[l]="guarded_by declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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...","Thread safety analysis: add -Wthread-safety-verbose flag, which adds additional notes that are helpful when compiling statistics on thread safety warnings."},
[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));"}},
[n]={{Db,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());"},{Db,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]={
[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"}
["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"}
Line 6,279: Line 6,301:
},
},
["note_header_guard"]={
["note_header_guard"]={
[b]="A is defined here; did you mean B?",
[g]="A is defined here; did you mean B?",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%0 is defined here; did you mean %1?",
[h]="%0 is defined here; did you mean %1?",
[j]=i,
[j]=i,
[k]="(.*?) is defined here; did you mean (.*?)\\?",
[l]="(.*?) is defined here; did you mean (.*?)\\?",
[l]=a,
[b]=a,
[c]=bb,
[k]=xb,
[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","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]={
[o]={
Line 6,294: Line 6,316:
},
},
["note_hidden_overloaded_virtual_declared_here"]={
["note_hidden_overloaded_virtual_declared_here"]={
[b]="hidden overloaded virtual function A declared here...",
[g]="hidden overloaded virtual function A declared here...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=p,
[k]=p,
[m]={"7272d9cf36cd",1296756075,"Implement -Woverloaded-virtual."},
[m]={"7272d9cf36cd",1296756075,"Implement -Woverloaded-virtual.","Implement -Woverloaded-virtual."},
[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;"}},
[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]={
[o]={
Line 6,309: Line 6,331:
},
},
["note_hidden_tag"]={
["note_hidden_tag"]={
[b]="type declaration hidden",
[g]="type declaration hidden",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="type declaration hidden",
[h]="type declaration hidden",
[j]=i,
[j]=i,
[k]="type declaration hidden",
[l]="type declaration hidden",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Qualified lookup through using declarations.  Diagnose a new type of ambiguity."},
[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);"}},
[n]={{mc,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]={
[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"}
["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"}
Line 6,324: Line 6,346:
},
},
["note_hiding_object"]={
["note_hiding_object"]={
[b]="declaration hides type",
[g]="declaration hides type",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="declaration hides type",
[h]="declaration hides type",
[j]=i,
[j]=i,
[k]="declaration hides type",
[l]="declaration hides type",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Qualified lookup through using declarations.  Diagnose a new type of ambiguity."},
[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);"}},
[n]={{mc,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]={
[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"}
["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"}
Line 6,339: Line 6,361:
},
},
["note_ice_conversion_here"]={
["note_ice_conversion_here"]={
[b]="conversion to ... type A declared here",
[g]="conversion to ... type A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="conversion to %select{integral|enumeration}0 type %1 declared here",
[h]="conversion to %select{integral|enumeration}0 type %1 declared here",
[j]=i,
[j]=i,
[k]="conversion to (?:integral|enumeration) type (.*?) declared here",
[l]="conversion to (?:integral|enumeration) type (.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","In C++11 mode, when an integral constant expression is desired and we have a"},
[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; }"}},
[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]={
[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}
["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",md,kd,id,md,kd,id,md,kd,id,md,kd,id,md,kd,id}
}
}
},
},
["note_illegal_field_declared_here"]={
["note_illegal_field_declared_here"]={
[b]="field of illegal ... A declared here",
[g]="field of illegal ... A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="field of illegal (?:type|pointer type) (.*?) declared here",
[l]="field of illegal (?:type|pointer type) (.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Error on more illegal kernel argument types for OpenCL"},
[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();"}},
[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]={
[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}
["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",jd,jd,jc,jc,jc,jc,"clang/test/SemaSYCL/zero-length-arrays.cpp:36:7: note: field of illegal type \'int[0]\' declared here",jd,"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",jd,jc,jc,jc,jc,"clang/test/SemaSYCL/zero-length-arrays.cpp:16:7: note: field of illegal type \'int[0]\' declared here",jd}
}
}
},
},
["note_immediate_function_reason"]={
["note_immediate_function_reason"]={
[b]="A is an immediate ... because ... ...",
[g]="A is an immediate ... because ... ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="(.*?) 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,
[b]=a,
[c]=p,
[k]=p,
[m]={fb,1625925174,nb},
[m]={Hb,1625925174,N,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;"}},
[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]={
[o]={
Line 6,384: Line 6,406:
},
},
["note_implementation_declared"]={
["note_implementation_declared"]={
[b]="class implementation is declared here",
[g]="class implementation is declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="class implementation is declared here",
[h]="class implementation is declared here",
[j]=i,
[j]=i,
[k]="class implementation is declared here",
[l]="class implementation is declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"e16cdb407a3f",1270241585,"diagnose declaring class extension after its implementation"},
[m]={"e16cdb407a3f",1270241585,"diagnose declaring class extension after its implementation","diagnose declaring class extension after its implementation"},
[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);"}},
[n]={{P,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]={
[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"}
["clang/test/SemaObjC/class-extension-after-implementation.m"]={"clang/test/SemaObjC/class-extension-after-implementation.m:6:17: note: class implementation is declared here"}
Line 6,399: Line 6,421:
},
},
["note_implemented_by_class"]={
["note_implemented_by_class"]={
[b]="when implemented by class A",
[g]="when implemented by class A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="when implemented by class %0",
[h]="when implemented by class %0",
[j]=i,
[j]=i,
[k]="when implemented by class (.*?)",
[l]="when implemented by class (.*?)",
[l]=a,
[b]=a,
[c]="ARC Weak References",
[k]="ARC Weak References",
[m]={"6a41337132b6",1366830785,"Objective-C arc: Improve disgnostics when \'weak\'"},
[m]={"6a41337132b6",1366830785,"Objective-C arc: Improve disgnostics when \'weak\'","Objective-C arc: Improve disgnostics when \'weak\'"},
[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();"}},
[n]={{gb,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]={
[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"}
["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"}
Line 6,414: Line 6,436:
},
},
["note_implicit_delete_this_in_destructor_here"]={
["note_implicit_delete_this_in_destructor_here"]={
[b]="while checking implicit \'delete this\' for virtual destructor",
[g]="while checking implicit \'delete this\' for virtual destructor",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="while checking implicit \'delete this\' for virtual destructor",
[h]="while checking implicit \'delete this\' for virtual destructor",
[j]=i,
[j]=i,
[k]="while checking implicit \'delete this\' for virtual destructor",
[l]="while checking implicit \'delete this\' for virtual destructor",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Support for destroying operator delete, per C++2a proposal P0722."},
[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);"}},
[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]={
[o]={
Line 6,429: Line 6,451:
},
},
["note_implicit_member_target_infer_collision"]={
["note_implicit_member_target_infer_collision"]={
[b]="implicit ... inferred target collision: call to both ... and ... members",
[g]="implicit ... inferred target collision: call to both ... and ... members",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=p,
[k]=p,
[m]={"9a220fca4a6f",1412023109,"CUDA: Fix incorrect target inference for implicit members."},
[m]={"9a220fca4a6f",1412023109,"CUDA: Fix incorrect target inference for implicit members.","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]={
[o]={
Line 6,444: Line 6,466:
},
},
["note_implicit_param_decl"]={
["note_implicit_param_decl"]={
[b]="A is an implicit parameter",
[g]="A is an implicit parameter",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%0 is an implicit parameter",
[h]="%0 is an implicit parameter",
[j]=i,
[j]=i,
[k]="(.*?) is an implicit parameter",
[l]="(.*?) is an implicit parameter",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"c6ebda167f52",1361482844,"Teach serialized diagnostics about notes without locations."},
[m]={"c6ebda167f52",1361482844,"Teach serialized diagnostics about notes without locations.","Teach serialized diagnostics about notes without locations."},
[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;"}}
[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",
[g]="submodule of top-level module \'A\' implicitly imported here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="submodule of top-level module \'%0\' implicitly imported here",
[h]="submodule of top-level module \'%0\' implicitly imported here",
[j]=i,
[j]=i,
[k]="submodule of top\\-level module \'(.*?)\' implicitly imported here",
[l]="submodule of top\\-level module \'(.*?)\' implicitly imported here",
[l]=a,
[b]=a,
[c]=bb,
[k]=xb,
[m]={"8b7c0398b6a3",1439829570,"[modules] PR20507: Avoid silent textual inclusion."},
[m]={"8b7c0398b6a3",1439829570,"[modules] PR20507: Avoid silent textual inclusion.","[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]={
[o]={
Line 6,471: Line 6,493:
},
},
["note_implicitly_deleted"]={
["note_implicitly_deleted"]={
[b]="explicitly defaulted function was implicitly deleted here",
[g]="explicitly defaulted function was implicitly deleted here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="explicitly defaulted function was implicitly deleted here",
[h]="explicitly defaulted function was implicitly deleted here",
[j]=i,
[j]=i,
[k]="explicitly defaulted function was implicitly deleted here",
[l]="explicitly defaulted function was implicitly deleted here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Finish PR10217: Ensure we say that a special member was implicitly, not"},
[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);"}},
[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]={
[o]={
Line 6,486: Line 6,508:
},
},
["note_imported_by_pch_module_not_found"]={
["note_imported_by_pch_module_not_found"]={
[b]="consider adding \'A\' to the header search path",
[g]="consider adding \'A\' to the header search path",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="consider adding \'%0\' to the header search path",
[h]="consider adding \'%0\' to the header search path",
[j]=i,
[j]=i,
[k]="consider adding \'(.*?)\' to the header search path",
[l]="consider adding \'(.*?)\' to the header search path",
[l]=a,
[b]=a,
[c]=hc,
[k]=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","[PCH+Modules] Improve diagnosticts to help out users pass an extra header search path"},
[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);"}}
[n]={{Gc,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",
[g]="in implicit initialization of binding declaration A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="in implicit initialization of binding declaration %0",
[h]="in implicit initialization of binding declaration %0",
[j]=i,
[j]=i,
[k]="in implicit initialization of binding declaration (.*?)",
[l]="in implicit initialization of binding declaration (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=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","P0217R3: Perform semantic checks and initialization for the bindings in a"},
[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);"}},
[n]={{H,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]={
[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\'"}
["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\'"}
Line 6,513: Line 6,535:
},
},
["note_in_class_initializer_float_type_cxx11"]={
["note_in_class_initializer_float_type_cxx11"]={
[b]="add \'constexpr\'",
[g]="add \'constexpr\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="add \'constexpr\'",
[h]="add \'constexpr\'",
[j]=i,
[j]=i,
[k]="add \'constexpr\'",
[l]="add \'constexpr\'",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Move -Wstatic-float-init fixit into a note & don\'t recover as if constexpr"},
[n]={{u,13518,"/// AddInitializerToDecl - Adds the initializer Init to the\n/// declaration dcl. If DirectInit is true, this is C++ direct\n/// initialization rather than copy initialization.\nvoid Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init, bool DirectInit) {\n  if (VDecl->isLocalVarDecl()) {\n  } else if (VDecl->isStaticDataMember() && !VDecl->isInline() && VDecl->getLexicalDeclContext()->isRecord()) {\n    // Do nothing on dependent types.\n    if (DclT->isDependentType()) {\n    } else if (VDecl->isConstexpr()) {\n    } else if (!DclT.isConstQualified()) {\n    } else if (DclT->isIntegralOrEnumerationType()) {\n    } else if (DclT->isFloatingType()) { // also permits complex, which is ok\n      // In C++98, this is a GNU extension. In C++11, it is not, but we support\n      // it anyway and provide a fixit to add the \'constexpr\'.\n      if (getLangOpts().CPlusPlus11) {\n        Diag(VDecl->getBeginLoc(), diag::note_in_class_initializer_float_type_cxx11) << FixItHint::CreateInsertion(VDecl->getBeginLoc(), \"constexpr \");"}},
[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]={
[o]={
Line 6,528: Line 6,550:
},
},
["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<=>\'",
[g]="while declaring the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="while declaring the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'",
[h]="while declaring the corresponding implicit \'operator==\' for this defaulted \'operator<=>\'",
[j]=i,
[j]=i,
[k]="while declaring the corresponding implicit \'operator\\=\\=\' for this defaulted \'operator\\<\\=\\>\'",
[l]="while declaring the corresponding implicit \'operator\\=\\=\' for this defaulted \'operator\\<\\=\\>\'",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"fe17b30a7957",1575504770,"[attributes][analyzer] Add annotations for handles."},
[m]={"fe17b30a7957",1575504770,Wb,Wb},
[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);"}},
[n]={{H,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]={
[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<=>\'"}
["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<=>\'"}
Line 6,543: Line 6,565:
},
},
["note_in_declaration_of_implicit_special_member"]={
["note_in_declaration_of_implicit_special_member"]={
[b]="while declaring the implicit ... for A",
[g]="while declaring the implicit ... for A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="while declaring the implicit (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) for (.*?)",
[l]="while declaring the implicit (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) for (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Add context note to diagnostics that occur while declaring an implicit special member function."},
[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;"}},
[n]={{H,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]={
[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\'"}
["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\'"}
Line 6,558: Line 6,580:
},
},
["note_in_for_range"]={
["note_in_for_range"]={
[b]="when looking up \'...\' function for range expression of type A",
[g]="when looking up \'...\' function for range expression of type A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="when looking up \'(?:begin|end)\' function for range expression of type (.*?)",
[l]="when looking up \'(?:begin|end)\' function for range expression of type (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Better diagnostics for range-based for loops with bad range types."},
[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();"}},
[n]={{I,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();"},{I,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]={
[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\'"}
["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\'"}
Line 6,573: Line 6,595:
},
},
["note_in_omitted_aggregate_initializer"]={
["note_in_omitted_aggregate_initializer"]={
[b]="in implicit initialization of ...",
[g]="in implicit initialization of ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="in implicit initialization of (?:array element (.*?) with omitted initializer|field (.*?) with omitted initializer|trailing array elements in runtime\\-sized array new)",
[l]=a,
[b]=a,
[c]=p,
[k]=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","PR11410: Extend diagnostic to cover all cases of aggregate initialization, not"},
[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();"}},
[n]={{L,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();"},{L,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]={
[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"}
["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"}
Line 6,588: Line 6,610:
},
},
["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",
[g]="in initialization of temporary of type A created to list-initialize this reference",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="in initialization of temporary of type (.*?) created to list\\-initialize this reference",
[l]="in initialization of temporary of type (.*?) created to list\\-initialize this reference",
[l]=a,
[b]=a,
[c]=p,
[k]=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","PR20844: If we fail to list-initialize a reference, map to the referenced type"},
[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;"}},
[n]={{L,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]={
[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"}
["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"}
Line 6,603: Line 6,625:
},
},
["note_include_header_or_declare"]={
["note_include_header_or_declare"]={
[b]="include the header <A> or explicitly provide a declaration for \'B\'",
[g]="include the header <A> or explicitly provide a declaration for \'B\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="include the header \\<(.*?)\\> or explicitly provide a declaration for \'(.*?)\'",
[l]="include the header \\<(.*?)\\> or explicitly provide a declaration for \'(.*?)\'",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"5d96e0a3a795",1405112031,"Consolidate header inclusion diagnostics"},
[m]={"5d96e0a3a795",1405112031,"Consolidate header inclusion diagnostics","Consolidate header inclusion diagnostics"},
[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);"}},
[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]={
[o]={
Line 6,618: Line 6,640:
},
},
["note_incompatible_analyzer_plugin_api"]={
["note_incompatible_analyzer_plugin_api"]={
[b]="current API version is \'A\', but plugin was compiled with version \'B\'",
[g]="current API version is \'A\', but plugin was compiled with version \'B\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="current API version is \'(.*?)\', but plugin was compiled with version \'(.*?)\'",
[l]="current API version is \'(.*?)\', but plugin was compiled with version \'(.*?)\'",
[l]=a,
[b]=a,
[c]=a,
[k]=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.","[analyzer] Add a warning for an incompatible plugin version."},
[n]={{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",90,"#include \"clang/StaticAnalyzer/Checkers/Checkers.inc\"\n  // Register checkers from plugins.\n  for (const std::string &Plugin : Plugins) {\n    if (!isCompatibleAPIVersion(PluginAPIVersion)) {\n      Diags.Report(diag::note_incompatible_analyzer_plugin_api) << CLANG_ANALYZER_API_VERSION_STRING << PluginAPIVersion;"}}
[n]={{"clang/lib/StaticAnalyzer/Frontend/CheckerRegistry.cpp",90,"#include \"clang/StaticAnalyzer/Checkers/Checkers.inc\"\n  // Register checkers from plugins.\n  for (const std::string &Plugin : Plugins) {\n    if (!isCompatibleAPIVersion(PluginAPIVersion)) {\n      Diags.Report(diag::note_incompatible_analyzer_plugin_api) << CLANG_ANALYZER_API_VERSION_STRING << PluginAPIVersion;"}}
},
},
["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",
[g]="conformance of forward class A to protocol B can not be confirmed",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="conformance of forward class (.*?) to protocol (.*?) can not be confirmed",
[l]="conformance of forward class (.*?) to protocol (.*?) can not be confirmed",
[l]=a,
[b]=a,
[c]=p,
[k]=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_.","More diagnostic name fixups: w_ -> warn_, warning_ -> warn_, not_ -> note_."},
[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;"}},
[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]={
[o]={
Line 6,645: Line 6,667:
},
},
["note_indirect_goto_target"]={
["note_indirect_goto_target"]={
[b]="possible target of ... goto statement",
[g]="possible target of ... goto statement",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="possible target of %select{indirect|asm}0 goto statement",
[h]="possible target of %select{indirect|asm}0 goto statement",
[j]=i,
[j]=i,
[k]="possible target of (?:indirect|asm) goto statement",
[l]="possible target of (?:indirect|asm) goto statement",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={kb,1273625893,hb},
[m]={zb,1273625893,U,U},
[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;"}},
[n]={{C,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;"},{C,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]={
[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"}
[ad]={"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\'",
[g]="consider using __builtin_trap() or qualifying pointer with \'volatile\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="consider using __builtin_trap() or qualifying pointer with \'volatile\'",
[h]="consider using __builtin_trap() or qualifying pointer with \'volatile\'",
[j]=i,
[j]=i,
[k]="consider using __builtin_trap\\(\\) or qualifying pointer with \'volatile\'",
[l]="consider using __builtin_trap\\(\\) or qualifying pointer with \'volatile\'",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"395610654363",1278483263,"implement PR7569, warning about assignment to null, which "},
[m]={"395610654363",1278483263,"implement PR7569, warning about assignment to null, which ","implement PR7569, warning about assignment to null, which "},
[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));"}},
[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]={
[o]={
Line 6,675: Line 6,697:
},
},
["note_inequality_comparison_to_or_assign"]={
["note_inequality_comparison_to_or_assign"]={
[b]="use \'|=\' to turn this inequality comparison into an or-assignment",
[g]="use \'|=\' to turn this inequality comparison into an or-assignment",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="use \'|=\' to turn this inequality comparison into an or-assignment",
[h]="use \'|=\' to turn this inequality comparison into an or-assignment",
[j]=i,
[j]=i,
[k]="use \'\\|\\=\' to turn this inequality comparison into an or\\-assignment",
[l]="use \'\\|\\=\' to turn this inequality comparison into an or\\-assignment",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Introduce a new warning, -Wtop-level-comparison. This warning is"},
[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, \"|=\");"}},
[n]={{I,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]={
[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"}
["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"}
Line 6,690: Line 6,712:
},
},
["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",
[g]="cannot use initializer list at the beginning of a macro argument",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="cannot use initializer list at the beginning of a macro argument",
[l]="cannot use initializer list at the beginning of a macro argument",
[l]=a,
[b]=a,
[c]=bb,
[k]=xb,
[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","Add new diagnostic messages when too many arguments are presented to a"},
[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);"}},
[n]={{Lb,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]={
[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"}
["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"}
Line 6,705: Line 6,727:
},
},
["note_init_list_narrowing_silence"]={
["note_init_list_narrowing_silence"]={
[b]="insert an explicit cast to silence this issue",
[g]="insert an explicit cast to silence this issue",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="insert an explicit cast to silence this issue",
[h]="insert an explicit cast to silence this issue",
[j]=i,
[j]=i,
[k]="insert an explicit cast to silence this issue",
[l]="insert an explicit cast to silence this issue",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"},
[m]={"b0869036c114",1400289198,Cc,Cc},
[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()), \")\");"}},
[n]={{L,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]={
[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"}
["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"}
Line 6,720: Line 6,742:
},
},
["note_init_with_default_member_initializer"]={
["note_init_with_default_member_initializer"]={
[b]="initializing field A with default member initializer",
[g]="initializing field A with default member initializer",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="initializing field %0 with default member initializer",
[h]="initializing field %0 with default member initializer",
[j]=i,
[j]=i,
[k]="initializing field (.*?) with default member initializer",
[l]="initializing field (.*?) with default member initializer",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages"},
[m]={"47ccfd7a89e2",1667306232,"[Clang] Implement P2741R3 - user-generated static_assert messages","[Clang] Implement P2741R3 - user-generated static_assert messages"},
[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);"}},
[n]={{L,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]={
[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"}
["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"}
Line 6,735: Line 6,757:
},
},
["note_initializer_out_of_order"]={
["note_initializer_out_of_order"]={
[b]="... A will be initialized after ... B",
[g]="... A will be initialized after ... B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:field|base class) (.*?) will be initialized after (?:field|base) (.*?)",
[l]="(?:field|base class) (.*?) will be initialized after (?:field|base) (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={pb,1590001902,qb},
[m]={Cb,1590001902,R,R},
[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);"}},
[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]={
[o]={
Line 6,750: Line 6,772:
},
},
["note_insert_break_fixit"]={
["note_insert_break_fixit"]={
[b]="insert \'break;\' to avoid fall-through",
[g]="insert \'break;\' to avoid fall-through",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="insert \'break;\' to avoid fall-through",
[h]="insert \'break;\' to avoid fall-through",
[j]=i,
[j]=i,
[k]="insert \'break;\' to avoid fall\\-through",
[l]="insert \'break;\' to avoid fall\\-through",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"84837d5b5aa0",1336069659,"Add -Wimplicit-fallthrough warning flag, which warns on fallthrough between"},
[m]={"84837d5b5aa0",1336069659,zc,zc},
[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; \");"}},
[n]={{Db,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]={
[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"}
["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"}
Line 6,765: Line 6,787:
},
},
["note_insert_fallthrough_fixit"]={
["note_insert_fallthrough_fixit"]={
[b]="insert \'A;\' to silence this warning",
[g]="insert \'A;\' to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="insert \'%0;\' to silence this warning",
[h]="insert \'%0;\' to silence this warning",
[j]=i,
[j]=i,
[k]="insert \'(.*?);\' to silence this warning",
[l]="insert \'(.*?);\' to silence this warning",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"84837d5b5aa0",1336069659,"Add -Wimplicit-fallthrough warning flag, which warns on fallthrough between"},
[m]={"84837d5b5aa0",1336069659,zc,zc},
[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);"}},
[n]={{Db,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]={
[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"}
["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"}
Line 6,780: Line 6,802:
},
},
["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",
[g]="add an explicit instantiation declaration to suppress this warning if A is explicitly instantiated in another translation unit",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="add an explicit instantiation declaration to suppress this warning if (.*?) is explicitly instantiated in another translation unit",
[l]="add an explicit instantiation declaration to suppress this warning if (.*?) is explicitly instantiated in another translation unit",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Warn if function or variable cannot be implicitly instantiated"},
[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;"}},
[n]={{Ic,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;"},{Ic,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]={
[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"}
["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"}
Line 6,795: Line 6,817:
},
},
["note_instantiation_contexts_suppressed"]={
["note_instantiation_contexts_suppressed"]={
[b]="(skipping A contextB in backtrace; use -ftemplate-backtrace-limit=0 to see all)",
[g]="(skipping A contextB in backtrace; use -ftemplate-backtrace-limit=0 to see all)",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="\\(skipping (.*?) context(.*?) in backtrace; use \\-ftemplate\\-backtrace\\-limit\\=0 to see all\\)",
[l]="\\(skipping (.*?) context(.*?) in backtrace; use \\-ftemplate\\-backtrace\\-limit\\=0 to see all\\)",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Introduce a limit on the depth of the template instantiation backtrace"},
[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);"}},
[n]={{H,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]={
[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)"}
["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)"}
Line 6,810: Line 6,832:
},
},
["note_instantiation_required_here"]={
["note_instantiation_required_here"]={
[b]="... instantiation first required here",
[g]="... instantiation first required here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{implicit|explicit}0 instantiation first required here",
[h]="%select{implicit|explicit}0 instantiation first required here",
[j]=i,
[j]=i,
[k]="(?:implicit|explicit) instantiation first required here",
[l]="(?:implicit|explicit) instantiation first required here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Diagnose the declaration of explicit specializations after an implicit"},
[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);"}},
[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]={
[o]={
Line 6,825: Line 6,847:
},
},
["note_invalid_consteval_initializer"]={
["note_invalid_consteval_initializer"]={
[b]="in the default initializer of A",
[g]="in the default initializer of A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="in the default initializer of %0",
[h]="in the default initializer of %0",
[j]=i,
[j]=i,
[k]="in the default initializer of (.*?)",
[l]="in the default initializer of (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={fb,1625925174,nb},
[m]={Hb,1625925174,N,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;"}},
[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]={
[o]={
Line 6,840: Line 6,862:
},
},
["note_invalid_consteval_initializer_here"]={
["note_invalid_consteval_initializer_here"]={
[b]="initialized here A",
[g]="initialized here A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="initialized here %0",
[h]="initialized here %0",
[j]=i,
[j]=i,
[k]="initialized here (.*?)",
[l]="initialized here (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={fb,1625925174,nb}
[m]={Hb,1625925174,N,N}
},
},
["note_invalid_subexpr_in_const_expr"]={
["note_invalid_subexpr_in_const_expr"]={
[b]="subexpression not valid in a constant expression",
[g]="subexpression not valid in a constant expression",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="subexpression not valid in a constant expression",
[h]="subexpression not valid in a constant expression",
[j]=i,
[j]=i,
[k]="subexpression not valid in a constant expression",
[l]="subexpression not valid in a constant expression",
[l]=a,
[b]=a,
[c]=a,
[k]=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","C++11 constant expressions: Don\'t use CheckICE in C++11; instead, determine"},
[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) {"}},
[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);"},{B,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) {"},{ib,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]={
[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"}
["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"}
Line 6,866: Line 6,888:
},
},
["note_invalid_ucn_name_candidate"]={
["note_invalid_ucn_name_candidate"]={
[b]="did you mean A (\'B\' U+C)?",
[g]="did you mean A (\'B\' U+C)?",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="did you mean %0 (\'%2\' U+%1)?",
[h]="did you mean %0 (\'%2\' U+%1)?",
[j]=i,
[j]=i,
[k]="did you mean (.*?) \\(\'(.*?)\' U\\+(.*?)\\)\\?",
[l]="did you mean (.*?) \\(\'(.*?)\' U\\+(.*?)\\)\\?",
[l]=a,
[b]=a,
[c]=bb,
[k]=xb,
[m]={fb,1625925174,nb},
[m]={Hb,1625925174,N,N},
[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]={
[o]={
Line 6,881: Line 6,903:
},
},
["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",
[g]="characters names in Unicode escape sequences are sensitive to case and whitespaces",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="characters names in Unicode escape sequences are sensitive to case and whitespaces",
[l]="characters names in Unicode escape sequences are sensitive to case and whitespaces",
[l]=a,
[b]=a,
[c]=bb,
[k]=xb,
[m]={fb,1625925174,nb},
[m]={Hb,1625925174,N,N},
[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]={
[o]={
Line 6,896: Line 6,918:
},
},
["note_it_delegates_to"]={
["note_it_delegates_to"]={
[b]="it delegates to",
[g]="it delegates to",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="it delegates to",
[h]="it delegates to",
[j]=i,
[j]=i,
[k]="it delegates to",
[l]="it delegates to",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Implement a better version of delegating constructor cycle detection."},
[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);"}},
[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]={
[o]={
Line 6,911: Line 6,933:
},
},
["note_ivar_decl"]={
["note_ivar_decl"]={
[b]="instance variable is declared here",
[g]="instance variable is declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="instance variable is declared here",
[h]="instance variable is declared here",
[j]=i,
[j]=i,
[k]="instance variable is declared here",
[l]="instance variable is declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Improve diagnostic for @property/ivar type mismatch by including the types of the"},
[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);"}},
[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);"},{gb,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);"},{gb,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);"},{gb,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);"},{gb,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]={
[o]={
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:5:6: note: instance variable is declared here"}
["clang/test/SemaObjC/property.m"]={"clang/test/SemaObjC/property.m:5:6: note: instance variable is declared here"}
Line 6,926: Line 6,948:
},
},
["note_lambda_capture_initializer"]={
["note_lambda_capture_initializer"]={
[b]="...captured......",
[g]="...captured......",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:implicitly |)captured(?:| by reference)(?:(?: due to use|) here| via initialization of lambda capture (.*?))",
[l]="(?:implicitly |)captured(?:| by reference)(?:(?: due to use|) here| via initialization of lambda capture (.*?))",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={pb,1590001902,qb},
[m]={Cb,1590001902,R,R},
[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);"}},
[n]={{L,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]={
[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\'"}
["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\'"}
Line 6,941: Line 6,963:
},
},
["note_lambda_decl"]={
["note_lambda_decl"]={
[b]="lambda expression begins here",
[g]="lambda expression begins here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="lambda expression begins here",
[h]="lambda expression begins here",
[j]=i,
[j]=i,
[k]="lambda expression begins here",
[l]="lambda expression begins here",
[l]=a,
[b]=a,
[c]=Cc,
[k]=Yc,
[m]={"24af85047046",1328309257,"Implement implicit capture for lambda expressions."},
[m]={"24af85047046",1328309257,"Implement implicit capture for lambda expressions.","Implement implicit capture for lambda expressions."},
[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);"}},
[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]={
[o]={
Line 6,956: Line 6,978:
},
},
["note_lambda_default_capture_fixit"]={
["note_lambda_default_capture_fixit"]={
[b]="default capture by ...",
[g]="default capture by ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="default capture by %select{value|reference}0",
[h]="default capture by %select{value|reference}0",
[j]=i,
[j]=i,
[k]="default capture by (?:value|reference)",
[l]="default capture by (?:value|reference)",
[l]=a,
[b]=a,
[c]=Cc,
[k]=Yc,
[m]={pb,1590001902,qb},
[m]={Cb,1590001902,R,R},
[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);"}},
[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]={
[o]={
Line 6,971: Line 6,993:
},
},
["note_lambda_substitution_here"]={
["note_lambda_substitution_here"]={
[b]="while substituting into a lambda expression here",
[g]="while substituting into a lambda expression here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="while substituting into a lambda expression here",
[h]="while substituting into a lambda expression here",
[j]=i,
[j]=i,
[k]="while substituting into a lambda expression here",
[l]="while substituting into a lambda expression here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={fb,1625925174,nb},
[m]={Hb,1625925174,N,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);"}},
[n]={{H,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]={
[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"}
["clang/test/SemaCXX/lambda-pack-expansion.cpp"]={"clang/test/SemaCXX/lambda-pack-expansion.cpp:10:3: note: while substituting into a lambda expression here"}
Line 6,986: Line 7,008:
},
},
["note_lambda_this_capture_fixit"]={
["note_lambda_this_capture_fixit"]={
[b]="explicitly capture \'this\'",
[g]="explicitly capture \'this\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="explicitly capture \'this\'",
[h]="explicitly capture \'this\'",
[j]=i,
[j]=i,
[k]="explicitly capture \'this\'",
[l]="explicitly capture \'this\'",
[l]=a,
[b]=a,
[c]=Cc,
[k]=Yc,
[m]={pb,1590001902,qb},
[m]={Cb,1590001902,R,R},
[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\");"}},
[n]={{X,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]={
[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\'"}
["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\'"}
Line 7,001: Line 7,023:
},
},
["note_lambda_to_block_conv"]={
["note_lambda_to_block_conv"]={
[b]="implicit capture of lambda object due to conversion to block pointer here",
[g]="implicit capture of lambda object due to conversion to block pointer here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="implicit capture of lambda object due to conversion to block pointer here",
[l]="implicit capture of lambda object due to conversion to block pointer here",
[l]=a,
[b]=a,
[c]=Cc,
[k]=Yc,
[m]={"d3b672c38545",1329354376,"Implicitly define a lambda\'s conversion functions (to function"},
[m]={"d3b672c38545",1329354376,"Implicitly define a lambda\'s conversion functions (to function","Implicitly define a lambda\'s conversion functions (to function"},
[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);"}}
[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);"},{X,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 ...",
[g]="capture A by ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="capture %0 by %select{value|reference}1",
[h]="capture %0 by %select{value|reference}1",
[j]=i,
[j]=i,
[k]="capture (.*?) by (?:value|reference)",
[l]="capture (.*?) by (?:value|reference)",
[l]=a,
[b]=a,
[c]=Cc,
[k]=Yc,
[m]={pb,1590001902,qb},
[m]={Cb,1590001902,R,R},
[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);"}},
[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]={
[o]={
Line 7,028: Line 7,050:
},
},
["note_lifetime_extending_member_declared_here"]={
["note_lifetime_extending_member_declared_here"]={
[b]="... declared here",
[g]="... declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:(?:reference|\'std\\:\\:initializer_list\') member|member with (?:reference|\'std\\:\\:initializer_list\') subobject) declared here",
[l]="(?:(?:reference|\'std\\:\\:initializer_list\') member|member with (?:reference|\'std\\:\\:initializer_list\') subobject) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"0a9969b36b16",1531786301,"Restructure checking for, and warning on, lifetime extension."},
[m]={"0a9969b36b16",1531786301,"Restructure checking for, and warning on, lifetime extension.","Restructure checking for, and warning on, lifetime extension."},
[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;"}},
[n]={{L,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]={
[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"}
["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"}
Line 7,043: Line 7,065:
},
},
["note_local_decl_close_match"]={
["note_local_decl_close_match"]={
[b]="local declaration nearly matches",
[g]="local declaration nearly matches",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="local declaration nearly matches",
[h]="local declaration nearly matches",
[j]=i,
[j]=i,
[k]="local declaration nearly matches",
[l]="local declaration nearly matches",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Implement [class.friend]p11\'s special name lookup rules for friend declarations"},
[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);"}},
[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]={
[o]={
Line 7,058: Line 7,080:
},
},
["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)",
[g]="type of A parameter of local declaration does not match definition (B vs C)",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="type of (.*?) parameter of local declaration does not match definition(?: \\((.*?) vs (.*?)\\)|)",
[l]="type of (.*?) parameter of local declaration does not match definition(?: \\((.*?) vs (.*?)\\)|)",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Implement [class.friend]p11\'s special name lookup rules for friend declarations"},
[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();"}}
[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",
[g]="... variable ...here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:via initialization of|binding reference) variable (?:(.*?) |)here",
[l]="(?:via initialization of|binding reference) variable (?:(.*?) |)here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"afe48f9d68e4",1532380882,"Fold -Wreturn-stack-address into general initialization lifetime"},
[m]={"afe48f9d68e4",1532380882,"Fold -Wreturn-stack-address into general initialization lifetime","Fold -Wreturn-stack-address into general initialization lifetime"},
[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);"}},
[n]={{L,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]={
[o]={
["clang/test/Analysis/stack-block-returned.cpp"]={"clang/test/Analysis/stack-block-returned.cpp:7:15: note: binding reference variable \'qq\' here"}
["clang/test/Analysis/stack-block-returned.cpp"]={"clang/test/Analysis/stack-block-returned.cpp:7:15: note: binding reference variable \'qq\' here"}
Line 7,085: Line 7,107:
},
},
["note_lock_exclusive_and_shared"]={
["note_lock_exclusive_and_shared"]={
[b]="the other acquisition of A \'B\' is here",
[g]="the other acquisition of A \'B\' is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="the other acquisition of %0 \'%1\' is here",
[h]="the other acquisition of %0 \'%1\' is here",
[j]=i,
[j]=i,
[k]="the other acquisition of (.*?) \'(.*?)\' is here",
[l]="the other acquisition of (.*?) \'(.*?)\' is here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"46b057681a7f",1315505978,"Thread safety: shared vs. exclusive locks"},
[m]={"46b057681a7f",1315505978,"Thread safety: shared vs. exclusive locks","Thread safety: shared vs. exclusive locks"},
[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);"}},
[n]={{Db,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]={
[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"}
["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"}
Line 7,100: Line 7,122:
},
},
["note_locked_here"]={
["note_locked_here"]={
[b]="A acquired here",
[g]="A acquired here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%0 acquired here",
[h]="%0 acquired here",
[j]=i,
[j]=i,
[k]="(.*?) acquired here",
[l]="(.*?) acquired here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"922866783b07",1328244326,"Thread safety analysis:"},
[m]={"922866783b07",1328244326,"Thread safety analysis:","Thread safety analysis:"},
[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(); }"}},
[n]={{Db,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]={
[o]={
["clang/test/SemaObjCXX/warn-thread-safety-analysis.mm"]={"clang/test/SemaObjCXX/warn-thread-safety-analysis.mm:24:9: note: mutex acquired here"}
["clang/test/SemaObjCXX/warn-thread-safety-analysis.mm"]={"clang/test/SemaObjCXX/warn-thread-safety-analysis.mm:24:9: note: mutex acquired here"}
Line 7,115: Line 7,137:
},
},
["note_logical_instead_of_bitwise_change_operator"]={
["note_logical_instead_of_bitwise_change_operator"]={
[b]="use \'A\' for a bitwise operation",
[g]="use \'A\' for a bitwise operation",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="use \'%0\' for a bitwise operation",
[h]="use \'%0\' for a bitwise operation",
[j]=i,
[j]=i,
[k]="use \'(.*?)\' for a bitwise operation",
[l]="use \'(.*?)\' for a bitwise operation",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"0a0ba9d883f5",1313430606,"Add fixit notes for -Wconstant-logical-operand."},
[m]={"0a0ba9d883f5",1313430606,"Add fixit notes for -Wconstant-logical-operand.","Add fixit notes for -Wconstant-logical-operand."},
[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 ? \"&\" : \"|\");"}},
[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]={
[o]={
Line 7,130: Line 7,152:
},
},
["note_logical_instead_of_bitwise_remove_constant"]={
["note_logical_instead_of_bitwise_remove_constant"]={
[b]="remove constant to silence this warning",
[g]="remove constant to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="remove constant to silence this warning",
[h]="remove constant to silence this warning",
[j]=i,
[j]=i,
[k]="remove constant to silence this warning",
[l]="remove constant to silence this warning",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"0a0ba9d883f5",1313430606,"Add fixit notes for -Wconstant-logical-operand."},
[m]={"0a0ba9d883f5",1313430606,"Add fixit notes for -Wconstant-logical-operand.","Add fixit notes for -Wconstant-logical-operand."},
[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()));"}},
[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]={
[o]={
Line 7,145: Line 7,167:
},
},
["note_logical_not_fix"]={
["note_logical_not_fix"]={
[b]="add parentheses after the \'!\' to evaluate the ... first",
[g]="add parentheses after the \'!\' to evaluate the ... first",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="add parentheses after the \'\\!\' to evaluate the (?:comparison|bitwise operator) first",
[l]="add parentheses after the \'\\!\' to evaluate the (?:comparison|bitwise operator) first",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Add a new warning, -Wlogical-not-parentheses, to -Wparentheses."},
[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, \")\");"}},
[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]={
[o]={
Line 7,160: Line 7,182:
},
},
["note_logical_not_silence_with_parens"]={
["note_logical_not_silence_with_parens"]={
[b]="add parentheses around left hand side expression to silence this warning",
[g]="add parentheses around left hand side expression to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="add parentheses around left hand side expression to silence this warning",
[l]="add parentheses around left hand side expression to silence this warning",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Add a new warning, -Wlogical-not-parentheses, to -Wparentheses."},
[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, \")\");"}},
[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]={
[o]={
Line 7,175: Line 7,197:
},
},
["note_loop_iteration_here"]={
["note_loop_iteration_here"]={
[b]="... here",
[g]="... here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{decremented|incremented}0 here",
[h]="%select{decremented|incremented}0 here",
[j]=i,
[j]=i,
[k]="(?:decremented|incremented) here",
[l]="(?:decremented|incremented) here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Add a new warning to -Wloop-analysis to detect suspicious increments or"},
[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;"}},
[n]={{I,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]={
[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"}
["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"}
Line 7,190: Line 7,212:
},
},
["note_macro_expansion_here"]={
["note_macro_expansion_here"]={
[b]="expansion of macro A requested here",
[g]="expansion of macro A requested here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="expansion of macro %0 requested here",
[h]="expansion of macro %0 requested here",
[j]=i,
[j]=i,
[k]="expansion of macro (.*?) requested here",
[l]="expansion of macro (.*?) requested here",
[l]=a,
[b]=a,
[c]=bb,
[k]=xb,
[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","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]={
[o]={
Line 7,205: Line 7,227:
},
},
["note_macro_here"]={
["note_macro_here"]={
[b]="macro A defined here",
[g]="macro A defined here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="macro %0 defined here",
[h]="macro %0 defined here",
[j]=i,
[j]=i,
[k]="macro (.*?) defined here",
[l]="macro (.*?) defined here",
[l]=a,
[b]=a,
[c]=bb,
[k]=xb,
[m]={"19b02cd7fc91",1340409548,"Minor improvements to some C99 variadic-macro-related diagnostics."},
[m]={"19b02cd7fc91",1340409548,"Minor improvements to some C99 variadic-macro-related diagnostics.","Minor improvements to some C99 variadic-macro-related diagnostics."},
[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();"}},
[n]={{Lb,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();"},{Lb,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();"},{Lb,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();"},{Lb,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();"},{Lb,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]={
[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"}
["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"}
Line 7,220: Line 7,242:
},
},
["note_main_change_return_type"]={
["note_main_change_return_type"]={
[b]="change return type to \'int\'",
[g]="change return type to \'int\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="change return type to \'int\'",
[h]="change return type to \'int\'",
[j]=i,
[j]=i,
[k]="change return type to \'int\'",
[l]="change return type to \'int\'",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"ae73417b6955",1358382373,"Implement a fixit for -Wmain-return-type"},
[m]={"ae73417b6955",1358382373,"Implement a fixit for -Wmain-return-type","Implement a fixit for -Wmain-return-type"},
[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\");"}},
[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]={
[o]={
Line 7,235: Line 7,257:
},
},
["note_main_remove_noreturn"]={
["note_main_remove_noreturn"]={
[b]="remove \'_Noreturn\'",
[g]="remove \'_Noreturn\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="remove \'_Noreturn\'",
[h]="remove \'_Noreturn\'",
[j]=i,
[j]=i,
[k]="remove \'_Noreturn\'",
[l]="remove \'_Noreturn\'",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"7ec6f3ddeb4c",1358767503,"Add a fixit for _Noreturn main,"},
[m]={"7ec6f3ddeb4c",1358767503,"Add a fixit for _Noreturn main,","Add a fixit for _Noreturn main,"},
[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);"}},
[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]={
[o]={
Line 7,250: Line 7,272:
},
},
["note_matching"]={
["note_matching"]={
[b]="to match this A",
[g]="to match this A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="to match this %0",
[h]="to match this %0",
[j]=i,
[j]=i,
[k]="to match this (.*?)",
[l]="to match this (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Jb,1236199783,Kb},
[m]={hc,1236199783,Zb,cc},
[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;"}},
[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;"},{Lb,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;"},{Lb,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;"},{Lb,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]={
[o]={
["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:58:1: note: to match this \'[\'"}
["clang/test/Parser/MicrosoftExtensions.c"]={"clang/test/Parser/MicrosoftExtensions.c:58:1: note: to match this \'[\'"}
Line 7,265: Line 7,287:
},
},
["note_max_tokens_total_override"]={
["note_max_tokens_total_override"]={
[b]="total token limit set here",
[g]="total token limit set here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="total token limit set here",
[h]="total token limit set here",
[j]=i,
[j]=i,
[k]="total token limit set here",
[l]="total token limit set here",
[l]=a,
[b]=a,
[c]=a,
[k]=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","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]={
[o]={
Line 7,280: Line 7,302:
},
},
["note_meant_to_use_typename"]={
["note_meant_to_use_typename"]={
[b]="did you mean to use \'typename\'?",
[g]="did you mean to use \'typename\'?",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="did you mean to use \'typename\'?",
[h]="did you mean to use \'typename\'?",
[j]=i,
[j]=i,
[k]="did you mean to use \'typename\'\\?",
[l]="did you mean to use \'typename\'\\?",
[l]=a,
[b]=a,
[c]="Generics Issue",
[k]="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","[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]={
[o]={
Line 7,295: Line 7,317:
},
},
["note_member_declared_at"]={
["note_member_declared_at"]={
[b]="member is declared here",
[g]="member is declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="member is declared here",
[h]="member is declared here",
[j]=i,
[j]=i,
[k]="member is declared here",
[l]="member is declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"2afa8780d62a",1401279614,"Consolidate some note diagnostics"},
[m]={"2afa8780d62a",1401279614,"Consolidate some note diagnostics","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);"},{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;"}},
[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;"},{L,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]={
[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"}
["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"}
Line 7,310: Line 7,332:
},
},
["note_member_declared_here"]={
["note_member_declared_here"]={
[b]="member A declared here",
[g]="member A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="member %0 declared here",
[h]="member %0 declared here",
[j]=i,
[j]=i,
[k]="member (.*?) declared here",
[l]="member (.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Improve the diagnostic when we find something we did not expect in a"},
[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;"}},
[n]={{W,1270,"bool CoroutineStmtBuilder::makeReturnOnAllocFailure() {\n  if (ReturnStmt.isInvalid()) {\n    S.Diag(Found.getFoundDecl()->getLocation(), diag::note_member_declared_here) << DN;"},{W,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;"},{X,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;"},{X,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;"},{X,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]={
[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"}
["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"}
Line 7,325: Line 7,347:
},
},
["note_member_def_close_const_match"]={
["note_member_def_close_const_match"]={
[b]="member declaration does not match because it ... const qualified",
[g]="member declaration does not match because it ... const qualified",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="member declaration does not match because it (?:is|is not) const qualified",
[l]="member declaration does not match because it (?:is|is not) const qualified",
[l]=a,
[b]=a,
[c]=p,
[k]=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\'","Give nicer note when a member redeclaration has or lacks \'const\'"},
[n]={{u,9080,"/// Generate diagnostics for an invalid function redeclaration.\n///\n/// This routine handles generating the diagnostic messages for an invalid\n/// function redeclaration, including finding possible similar declarations\n/// or performing typo correction if there are no previous declarations with\n/// the same name.\n///\n/// Returns a NamedDecl iff typo correction was performed and substituting in\n/// the new declaration name does not cause new errors.\nstatic NamedDecl *DiagnoseInvalidRedeclaration(Sema &SemaRef, LookupResult &Previous, FunctionDecl *NewFD, ActOnFDArgs &ExtraArgs, bool IsLocalFriend, Scope *S) {\n  for (SmallVectorImpl<std::pair<FunctionDecl *, unsigned>>::iterator NearMatch = NearMatches.begin(), NearMatchEnd = NearMatches.end(); NearMatch != NearMatchEnd; ++NearMatch) {\n    // FIXME: These notes are poorly worded for the local friend case.\n    if (unsigned Idx = NearMatch->second) {\n    } else if (FDisConst != NewFDisConst) {\n      SemaRef.Diag(FD->getLocation(), diag::note_member_def_close_const_match) << NewFDisConst << FD->getSourceRange().getEnd() << (NewFDisConst ? FixItHint::CreateRemoval(ExtraArgs.D.getFunctionTypeInfo().getConstQualifierLoc()) : FixItHint::CreateInsertion(ExtraArgs.D.getFunctionTypeInfo().getRParenLoc().getLocWithOffset(1), \" const\"));"}},
[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]={
[o]={
Line 7,340: Line 7,362:
},
},
["note_member_def_close_match"]={
["note_member_def_close_match"]={
[b]="member declaration nearly matches",
[g]="member declaration nearly matches",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="member declaration nearly matches",
[h]="member declaration nearly matches",
[j]=i,
[j]=i,
[k]="member declaration nearly matches",
[l]="member declaration nearly matches",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"5a8987ca5113",1237025389,"Update tablegen diagnostic files to be in sync with the def files."},
[m]={"5a8987ca5113",1237025389,Vb,Vb},
[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);"}},
[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]={
[o]={
Line 7,355: Line 7,377:
},
},
["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)",
[g]="type of A parameter of member declaration does not match definition (B vs C)",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="type of (.*?) parameter of member declaration does not match definition(?: \\((.*?) vs (.*?)\\)|)",
[l]="type of (.*?) parameter of member declaration does not match definition(?: \\((.*?) vs (.*?)\\)|)",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Match type names and give more info for out-of-line function definition errors."},
[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();"}},
[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]={
[o]={
Line 7,370: Line 7,392:
},
},
["note_member_first_declared_here"]={
["note_member_first_declared_here"]={
[b]="member A first declared here",
[g]="member A first declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="member %0 first declared here",
[h]="member %0 first declared here",
[j]=i,
[j]=i,
[k]="member (.*?) first declared here",
[l]="member (.*?) first declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","[coroutines] Diagnose when promise types fail to declare either return_void or return_value."},
[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();"}},
[n]={{W,1635,"bool CoroutineStmtBuilder::makeOnFallthrough() {\n  if (HasRVoid && HasRValue) {\n    S.Diag(LRVoid.getRepresentativeDecl()->getLocation(), diag::note_member_first_declared_here) << LRVoid.getLookupName();"},{W,1638,"bool CoroutineStmtBuilder::makeOnFallthrough() {\n  if (HasRVoid && HasRValue) {\n    S.Diag(LRValue.getRepresentativeDecl()->getLocation(), diag::note_member_first_declared_here) << LRValue.getLookupName();"}},
[o]={
[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"}
["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"}
Line 7,385: Line 7,407:
},
},
["note_member_reference_arrow_from_operator_arrow"]={
["note_member_reference_arrow_from_operator_arrow"]={
[b]="\'->\' applied to return value of the operator->() declared here",
[g]="\'->\' applied to return value of the operator->() declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="\'->\' applied to return value of the operator->() declared here",
[h]="\'->\' applied to return value of the operator->() declared here",
[j]=i,
[j]=i,
[k]="\'\\-\\>\' applied to return value of the operator\\-\\>\\(\\) declared here",
[l]="\'\\-\\>\' applied to return value of the operator\\-\\>\\(\\) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"0c51de4ab1ae",1375292304,"Improve the diagnostic experience, including adding recovery, for"},
[m]={"0c51de4ab1ae",1375292304,"Improve the diagnostic experience, including adding recovery, for","Improve the diagnostic experience, including adding recovery, for"},
[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);"}},
[n]={{X,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]={
[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"}
["clang/test/SemaHLSL/prohibit_pointer.hlsl"]={"clang/test/SemaHLSL/prohibit_pointer.hlsl:70:3: note: \'->\' applied to return value of the operator->() declared here"}
Line 7,400: Line 7,422:
},
},
["note_member_synthesized_at"]={
["note_member_synthesized_at"]={
[b]="in ... ... for A first required here",
[g]="in ... ... for A first required here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="in (?:implicit|defaulted) (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) for (.*?) first required here",
[l]="in (?:implicit|defaulted) (?:default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor) for (.*?) first required here",
[l]=a,
[b]=a,
[c]=p,
[k]=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...","When we\'re trying to define an implicit virtual destructor, make sure that we have a valid delete operator."},
[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());"}},
[n]={{H,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]={
[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"}
["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"}
Line 7,415: Line 7,437:
},
},
["note_memsize_comparison_cast_silence"]={
["note_memsize_comparison_cast_silence"]={
[b]="explicitly cast the argument to size_t to silence this warning",
[g]="explicitly cast the argument to size_t to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="explicitly cast the argument to size_t to silence this warning",
[l]="explicitly cast the argument to size_t to silence this warning",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"},
[m]={"b0869036c114",1400289198,Cc,Cc},
[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()), \")\");"}},
[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]={
[o]={
Line 7,430: Line 7,452:
},
},
["note_memsize_comparison_paren"]={
["note_memsize_comparison_paren"]={
[b]="did you mean to compare the result of A instead?",
[g]="did you mean to compare the result of A instead?",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="did you mean to compare the result of %0 instead?",
[h]="did you mean to compare the result of %0 instead?",
[j]=i,
[j]=i,
[k]="did you mean to compare the result of (.*?) instead\\?",
[l]="did you mean to compare the result of (.*?) instead\\?",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"b0869036c114",1400289198,"Tweak diagnostic wording for init list narrowing"},
[m]={"b0869036c114",1400289198,Cc,Cc},
[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);"}},
[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]={
[o]={
Line 7,445: Line 7,467:
},
},
["note_method_declared_at"]={
["note_method_declared_at"]={
[b]="method A declared here",
[g]="method A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="method %0 declared here",
[h]="method %0 declared here",
[j]=i,
[j]=i,
[k]="method (.*?) declared here",
[l]="method (.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"e5c1bda4d177",1288394405,"Improve diagnostics reporting of un-implemented"},
[m]={"e5c1bda4d177",1288394405,"Improve diagnostics reporting of un-implemented","Improve diagnostics reporting of un-implemented"},
[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();"}},
[n]={{P,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();"},{P,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();"},{P,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;"},{P,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]={
[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"}
["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"}
Line 7,460: Line 7,482:
},
},
["note_method_return_type_change"]={
["note_method_return_type_change"]={
[b]="compiler has implicitly changed method A return type",
[g]="compiler has implicitly changed method A return type",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="compiler has implicitly changed method %0 return type",
[h]="compiler has implicitly changed method %0 return type",
[j]=i,
[j]=i,
[k]="compiler has implicitly changed method (.*?) return type",
[l]="compiler has implicitly changed method (.*?) return type",
[l]=a,
[b]=a,
[c]=p,
[k]=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\'","ObjectiveC arc[qoi]: When due to change of certain methods\'"},
[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();"}},
[n]={{L,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]={
[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"}
["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"}
Line 7,475: Line 7,497:
},
},
["note_method_sent_forward_class"]={
["note_method_sent_forward_class"]={
[b]="method A is used for the forward class",
[g]="method A is used for the forward class",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="method %0 is used for the forward class",
[h]="method %0 is used for the forward class",
[j]=i,
[j]=i,
[k]="method (.*?) is used for the forward class",
[l]="method (.*?) is used for the forward class",
[l]=a,
[b]=a,
[c]=p,
[k]=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","We want to diagnose sending message to a forward class"},
[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();"}},
[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]={
[o]={
Line 7,490: Line 7,512:
},
},
["note_misaligned_member_used_here"]={
["note_misaligned_member_used_here"]={
[b]="passing byval argument A with potentially incompatible alignment here",
[g]="passing byval argument A with potentially incompatible alignment here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="passing byval argument %0 with potentially incompatible alignment here",
[h]="passing byval argument %0 with potentially incompatible alignment here",
[j]=i,
[j]=i,
[k]="passing byval argument (.*?) with potentially incompatible alignment here",
[l]="passing byval argument (.*?) with potentially incompatible alignment here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={fb,1625925174,nb},
[m]={Hb,1625925174,N,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;"}},
[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]={
[o]={
Line 7,505: Line 7,527:
},
},
["note_misplaced_ellipsis_vararg_add_comma"]={
["note_misplaced_ellipsis_vararg_add_comma"]={
[b]="insert \',\' before \'...\' to silence this warning",
[g]="insert \',\' before \'...\' to silence this warning",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="insert \',\' before \'...\' to silence this warning",
[h]="insert \',\' before \'...\' to silence this warning",
[j]=i,
[j]=i,
[k]="insert \',\' before \'\\.\\.\\.\' to silence this warning",
[l]="insert \',\' before \'\\.\\.\\.\' to silence this warning",
[l]=a,
[b]=a,
[c]=Z,
[k]=qb,
[m]={"36ee9fb21957",1407799823,"Reject varargs \'...\' in function prototype if there are more parameters after"},
[m]={"36ee9fb21957",1407799823,Pc,Pc},
[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]={
[o]={
Line 7,520: Line 7,542:
},
},
["note_misplaced_ellipsis_vararg_add_ellipsis"]={
["note_misplaced_ellipsis_vararg_add_ellipsis"]={
[b]="place \'...\' ... to declare a function parameter pack",
[g]="place \'...\' ... to declare a function parameter pack",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="place \'\\.\\.\\.\' (?:immediately before declared identifier|here) to declare a function parameter pack",
[l]="place \'\\.\\.\\.\' (?:immediately before declared identifier|here) to declare a function parameter pack",
[l]=a,
[b]=a,
[c]=Z,
[k]=qb,
[m]={"36ee9fb21957",1407799823,"Reject varargs \'...\' in function prototype if there are more parameters after"},
[m]={"36ee9fb21957",1407799823,Pc,Pc},
[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]={
[o]={
Line 7,535: Line 7,557:
},
},
["note_misplaced_ellipsis_vararg_existing_ellipsis"]={
["note_misplaced_ellipsis_vararg_existing_ellipsis"]={
[b]="preceding \'...\' declares a function parameter pack",
[g]="preceding \'...\' declares a function parameter pack",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="preceding \'...\' declares a function parameter pack",
[h]="preceding \'...\' declares a function parameter pack",
[j]=i,
[j]=i,
[k]="preceding \'\\.\\.\\.\' declares a function parameter pack",
[l]="preceding \'\\.\\.\\.\' declares a function parameter pack",
[l]=a,
[b]=a,
[c]=Z,
[k]=qb,
[m]={"36ee9fb21957",1407799823,"Reject varargs \'...\' in function prototype if there are more parameters after"},
[m]={"36ee9fb21957",1407799823,Pc,Pc},
[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]={
[o]={
Line 7,550: Line 7,572:
},
},
["note_missing_end_of_definition_before"]={
["note_missing_end_of_definition_before"]={
[b]="still within definition of A here",
[g]="still within definition of A here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="still within definition of %q0 here",
[h]="still within definition of %q0 here",
[j]=i,
[j]=i,
[k]="still within definition of (.*?) here",
[l]="still within definition of (.*?) here",
[l]=a,
[b]=a,
[c]=Z,
[k]=qb,
[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","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]={
[o]={
Line 7,565: Line 7,587:
},
},
["note_missing_selector_name"]={
["note_missing_selector_name"]={
[b]="introduce a parameter name to make A part of the selector",
[g]="introduce a parameter name to make A part of the selector",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="introduce a parameter name to make (.*?) part of the selector",
[l]="introduce a parameter name to make (.*?) part of the selector",
[l]=a,
[b]=a,
[c]=Z,
[k]=qb,
[m]={"84f498433116",1347923399,"objective-C: improve on warnings about misplacement of method"},
[m]={"84f498433116",1347923399,"objective-C: improve on warnings about misplacement of method","objective-C: improve on warnings about misplacement of method"},
[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;"}},
[n]={{uc,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]={
[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"}
["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"}
Line 7,580: Line 7,602:
},
},
["note_mmap_add_framework_keyword"]={
["note_mmap_add_framework_keyword"]={
[b]="use \'framework module\' to declare module \'A\'",
[g]="use \'framework module\' to declare module \'A\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="use \'framework module\' to declare module \'%0\'",
[h]="use \'framework module\' to declare module \'%0\'",
[j]=i,
[j]=i,
[k]="use \'framework module\' to declare module \'(.*?)\'",
[l]="use \'framework module\' to declare module \'(.*?)\'",
[l]=a,
[b]=a,
[c]=bb,
[k]=xb,
[m]={"9f6020bcc522",1527816378,"[Modules] Warning for module declarations lacking \'framework\' qualifier"},
[m]={"9f6020bcc522",1527816378,"[Modules] Warning for module declarations lacking \'framework\' qualifier","[Modules] Warning for module declarations lacking \'framework\' qualifier"},
[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\");"}},
[n]={{Kb,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]={
[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\'"}
["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\'"}
Line 7,595: Line 7,617:
},
},
["note_mmap_lbrace_match"]={
["note_mmap_lbrace_match"]={
[b]="to match this \'{\'",
[g]="to match this \'{\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="to match this \'{\'",
[h]="to match this \'{\'",
[j]=i,
[j]=i,
[k]="to match this \'\\{\'",
[l]="to match this \'\\{\'",
[l]=a,
[b]=a,
[c]=bb,
[k]=xb,
[m]={"718292f260bf",1321038628,"Introduce basic support for parsing module map files."},
[m]={"718292f260bf",1321038628,"Introduce basic support for parsing module map files.","Introduce basic support for parsing module map files."},
[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);"}},
[n]={{Kb,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);"},{Kb,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);"},{Kb,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);"},{Kb,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]={
[o]={
["clang/test/Parser/objcxx-at.mm"]={"clang/test/Parser/objcxx-at.mm:12:10: note: to match this \'{\'"}
["clang/test/Parser/objcxx-at.mm"]={"clang/test/Parser/objcxx-at.mm:12:10: note: to match this \'{\'"}
Line 7,610: Line 7,632:
},
},
["note_mmap_lsquare_match"]={
["note_mmap_lsquare_match"]={
[b]="to match this \']\'",
[g]="to match this \']\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="to match this \']\'",
[h]="to match this \']\'",
[j]=i,
[j]=i,
[k]="to match this \'\\]\'",
[l]="to match this \'\\]\'",
[l]=a,
[b]=a,
[c]=bb,
[k]=xb,
[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","Introduce module attributes into the module map grammar, along with a"},
[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);"}}
[n]={{Kb,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",
[g]="previously defined here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="previously defined here",
[h]="previously defined here",
[j]=i,
[j]=i,
[k]="previously defined here",
[l]="previously defined here",
[l]=a,
[b]=a,
[c]=bb,
[k]=xb,
[m]={"718292f260bf",1321038628,"Introduce basic support for parsing module map files."},
[m]={"718292f260bf",1321038628,"Introduce basic support for parsing module map files.","Introduce basic support for parsing module map files."},
[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);"}}
[n]={{Kb,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);"},{Kb,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",
[g]="rename \'A\' to ensure it can be found by name",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="rename \'%0\' to ensure it can be found by name",
[h]="rename \'%0\' to ensure it can be found by name",
[j]=i,
[j]=i,
[k]="rename \'(.*?)\' to ensure it can be found by name",
[l]="rename \'(.*?)\' to ensure it can be found by name",
[l]=a,
[b]=a,
[c]=bb,
[k]=xb,
[m]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings"},
[m]={"2972991969b6",1513911210,"[Modules] Change private modules rules and warnings","[Modules] Change private modules rules and warnings"},
[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);"}},
[n]={{Kb,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]={
[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"}
["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"}
Line 7,649: Line 7,671:
},
},
["note_module_cache_path"]={
["note_module_cache_path"]={
[b]="after modifying system headers, please delete the module cache at \'A\'",
[g]="after modifying system headers, please delete the module cache at \'A\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="after modifying system headers, please delete the module cache at \'(.*?)\'",
[l]="after modifying system headers, please delete the module cache at \'(.*?)\'",
[l]=a,
[b]=a,
[c]=hc,
[k]=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.","[Modules] When things go horribly wrong when reading a module, point at the module cache."},
[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();"}}
[n]={{Gc,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",
[g]="macro was ... here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="macro was %select{defined|#undef\'d}0 here",
[h]="macro was %select{defined|#undef\'d}0 here",
[j]=i,
[j]=i,
[k]="macro was (?:defined|\\#undef\'d) here",
[l]="macro was (?:defined|\\#undef\'d) here",
[l]=a,
[b]=a,
[c]=a,
[k]=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.","<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]={
[o]={
Line 7,676: Line 7,698:
},
},
["note_module_file_conflict"]={
["note_module_file_conflict"]={
[b]="this is generally caused by modules with the same name found in multiple paths",
[g]="this is generally caused by modules with the same name found in multiple paths",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="this is generally caused by modules with the same name found in multiple paths",
[l]="this is generally caused by modules with the same name found in multiple paths",
[l]=a,
[b]=a,
[c]=hc,
[k]=Hc,
[m]={"766a08df12c1",1626398649,"[Frontend] Only compile modules if not already finalized"},
[m]={"766a08df12c1",1626398649,"[Frontend] Only compile modules if not already finalized","[Frontend] Only compile modules if not already finalized"},
[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);"}}
[n]={{Gc,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\'",
[g]="imported by ...\'A\'",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="imported by %select{|module \'%2\' in }1\'%0\'",
[h]="imported by %select{|module \'%2\' in }1\'%0\'",
[j]=i,
[j]=i,
[k]="imported by (?:|module \'(.*?)\' in )\'(.*?)\'",
[l]="imported by (?:|module \'(.*?)\' in )\'(.*?)\'",
[l]=a,
[b]=a,
[c]=hc,
[k]=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","Give better diagnostics when -fmodule-file= finds a bad file: if the file is"},
[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;"}},
[n]={{Gc,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]={
[o]={
["clang/test/PCH/cxx-chain-function-template.cpp"]={"note: imported by \'clang/test/PCH/cxx-chain-function-template.cpp.pch-final\'"}
["clang/test/PCH/cxx-chain-function-template.cpp"]={"note: imported by \'clang/test/PCH/cxx-chain-function-template.cpp.pch-final\'"}
Line 7,703: Line 7,725:
},
},
["note_module_import_here"]={
["note_module_import_here"]={
[b]="module imported here",
[g]="module imported here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="module imported here",
[h]="module imported here",
[j]=i,
[j]=i,
[k]="module imported here",
[l]="module imported here",
[l]=a,
[b]=a,
[c]=a,
[k]=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.","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]={
[o]={
Line 7,718: Line 7,740:
},
},
["note_module_import_not_at_top_level"]={
["note_module_import_not_at_top_level"]={
[b]="A begins here",
[g]="A begins here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%0 begins here",
[h]="%0 begins here",
[j]=i,
[j]=i,
[k]="(.*?) begins here",
[l]="(.*?) begins here",
[l]=a,
[b]=a,
[c]=fc,
[k]=Bc,
[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 ...","Add [extern_c] attribute for modules, allowing a C module to be imported within an extern \"C\" block in C++ code."},
[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;"}},
[n]={{Ab,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]={
[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"}
["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"}
Line 7,733: Line 7,755:
},
},
["note_module_odr_violation_definition_data"]={
["note_module_odr_violation_definition_data"]={
[b]=Pb,
[g]=tc,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={"e13eabe7d339",1506737957,"[ODRHash] Add base classes to hashing CXXRecordDecl."},
[m]={"e13eabe7d339",1506737957,"[ODRHash] Add base classes to hashing CXXRecordDecl.","[ODRHash] Add base classes to hashing CXXRecordDecl."},
[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; };"}},
[n]={{O,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]={
[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"}
[Ac]={"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",
[g]="definition in module \'A\' is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="definition in module \'%0\' is here",
[h]="definition in module \'%0\' is here",
[j]=i,
[j]=i,
[k]="definition in module \'(.*?)\' is here",
[l]="definition in module \'(.*?)\' is here",
[l]=a,
[b]=a,
[c]=a,
[k]=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...","When a module completes the definition of a class template specialization imported from another module, emit an update record, rather than using the broken decl rewriting mechanism. If multiple modules do this, merge the definitions together, much as we would if they were separate declarations."},
[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;"}}
[n]={{O,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,
[g]=tc,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={"ab4d730f14d1",1532559125,"[ODRHash] Support hashing enums."},
[m]={"ab4d730f14d1",1532559125,"[ODRHash] Support hashing enums.","[ODRHash] Support hashing enums."},
[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; };"}},
[n]={{O,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]={
[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"}
[Ac]={"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,
[g]=Yb,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={Hb,1643408541,Eb},
[m]={ac,1643408541,fb,fb},
[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; };"}},
[n]={{O,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]={
[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\')"}
["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\')"}
Line 7,790: Line 7,812:
},
},
["note_module_odr_violation_function"]={
["note_module_odr_violation_function"]={
[b]=Pb,
[g]=tc,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={"e81caeb3147f",1512782980,"[ODRHash] Support ODR violation detection in functions."},
[m]={"e81caeb3147f",1512782980,"[ODRHash] Support ODR violation detection in functions.","[ODRHash] Support ODR violation detection in functions."},
[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; };"}},
[n]={{O,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]={
[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"}
["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"}
Line 7,805: Line 7,827:
},
},
["note_module_odr_violation_method_params"]={
["note_module_odr_violation_method_params"]={
[b]=Db,
[g]=Yb,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={Hb,1643408541,Eb},
[m]={ac,1643408541,fb,fb},
[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;"}},
[n]={{O,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]={
[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...\'"}
[Ac]={"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,
[g]=Yb,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={"fa3d93a148d4",1485827055,"Add better ODR checking for modules."},
[m]={"fa3d93a148d4",1485827055,"Add better ODR checking for modules.","Add better ODR checking for modules."},
[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;"}},
[n]={{O,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]={
[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"}
["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"}
Line 7,835: Line 7,857:
},
},
["note_module_odr_violation_mismatch_decl_unknown"]={
["note_module_odr_violation_mismatch_decl_unknown"]={
[b]=Db,
[g]=Yb,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={"708859a71326",1496883381,"[ODRHash] Change the fall-back diagnostic error."},
[m]={"708859a71326",1496883381,"[ODRHash] Change the fall-back diagnostic error.","[ODRHash] Change the fall-back diagnostic error."},
[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();"}}
[n]={{O,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();"},{O,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();"},{O,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();"},{O,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",
[g]="definition has no member A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="definition has no member %0",
[h]="definition has no member %0",
[j]=i,
[j]=i,
[k]="definition has no member (.*?)",
[l]="definition has no member (.*?)",
[l]=a,
[b]=a,
[c]=hc,
[k]=Hc,
[m]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:"},
[m]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:","Basic ODR checking for C++ modules:"},
[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;"}},
[n]={{Gc,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]={
[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\'"}
["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\'"}
Line 7,862: Line 7,884:
},
},
["note_module_odr_violation_objc_interface"]={
["note_module_odr_violation_objc_interface"]={
[b]=Db,
[g]=Yb,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="but in (?:\'(.*?)\'|definition here) found (?:(?:no super class|super class with type (.*?))|instance variable \'(.*?)\' access control is (?:|@private|@protected|@public|@package))",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={rb,1662843785,sb},
[m]={Pb,1662843785,ab,ab},
[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; };"}},
[n]={{O,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]={
[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\'"}
["clang/test/Modules/method_pool.m"]={"clang/test/Modules/Inputs/MethodPoolA.h:10:12: note: but in \'MethodPoolA\' found super class with type \'A\'"}
Line 7,877: Line 7,899:
},
},
["note_module_odr_violation_objc_method"]={
["note_module_odr_violation_objc_method"]={
[b]=Db,
[g]=Yb,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={Hb,1643408541,Eb},
[m]={ac,1643408541,fb,fb},
[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; };"}}
[n]={{O,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,
[g]=Yb,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={"dcb71b5e1d13",1657144706,"[ODRHash] Hash `ObjCPropertyDecl` and diagnose discovered mismatches."},
[m]={"dcb71b5e1d13",1657144706,"[ODRHash] Hash `ObjCPropertyDecl` and diagnose discovered mismatches.","[ODRHash] Hash `ObjCPropertyDecl` and diagnose discovered mismatches."},
[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; };"}}
[n]={{O,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",
[g]="declaration of A does not match",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="declaration of %0 does not match",
[h]="declaration of %0 does not match",
[j]=i,
[j]=i,
[k]="declaration of (.*?) does not match",
[l]="declaration of (.*?) does not match",
[l]=a,
[b]=a,
[c]=hc,
[k]=Hc,
[m]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:"},
[m]={"2b9e3e396a6f",1382076318,"Basic ODR checking for C++ modules:","Basic ODR checking for C++ modules:"},
[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];"}},
[n]={{Gc,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]={
[o]={
["clang/test/Modules/odr.cpp"]={"clang/test/Modules/Inputs/odr/a.h:3:9: note: declaration of \'f\' does not match"}
["clang/test/Modules/odr.cpp"]={"clang/test/Modules/Inputs/odr/a.h:3:9: note: declaration of \'f\' does not match"}
Line 7,916: Line 7,938:
},
},
["note_module_odr_violation_record"]={
["note_module_odr_violation_record"]={
[b]=Pb,
[g]=tc,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={Hb,1643408541,Eb},
[m]={ac,1643408541,fb,fb},
[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; };"}},
[n]={{O,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]={
[o]={
[tc]={
[Ac]={
[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",
[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",
[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",
Line 7,987: Line 8,009:
},
},
["note_module_odr_violation_referenced_protocols"]={
["note_module_odr_violation_referenced_protocols"]={
[b]=Db,
[g]=Yb,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="but in (?:\'(.*?)\'|definition here) found (?:(.*?) referenced (?:protocol|protocols)|(.*?) referenced protocol with different name (.*?))",
[l]="but in (?:\'(.*?)\'|definition here) found (?:(.*?) referenced (?:protocol|protocols)|(.*?) referenced protocol with different name (.*?))",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Hb,1643408541,Eb},
[m]={ac,1643408541,fb,fb},
[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; };"}}
[n]={{O,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,
[g]=tc,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="but in \'(.*?)\' found (?:unnamed template parameter (.*?)|template parameter (.*?)|template parameter with (?:no |)default argument|template parameter with different default argument)",
[l]="but in \'(.*?)\' found (?:unnamed template parameter (.*?)|template parameter (.*?)|template parameter with (?:no |)default argument|template parameter with different default argument)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"498117bf11d8",1503456239,"[ODRHash] Diagnose differing template parameters."},
[m]={"498117bf11d8",1503456239,"[ODRHash] Diagnose differing template parameters.","[ODRHash] Diagnose differing template parameters."},
[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;"}},
[n]={{O,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]={
[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"}
[Ac]={"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,
[g]=tc,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="but in \'(.*?)\' found (?:(?:typedef|type alias) name (.*?)|(?:typedef|type alias) (.*?) with different underlying type (.*?))",
[l]="but in \'(.*?)\' found (?:(?:typedef|type alias) name (.*?)|(?:typedef|type alias) (.*?) with different underlying type (.*?))",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={Hb,1643408541,Eb},
[m]={ac,1643408541,fb,fb},
[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; };"}},
[n]={{O,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]={
[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>\'"}
["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>\'"}
Line 8,029: Line 8,051:
},
},
["note_module_odr_violation_variable"]={
["note_module_odr_violation_variable"]={
[b]=Pb,
[g]=tc,
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=a,
[k]=a,
[m]={Hb,1643408541,Eb},
[m]={ac,1643408541,fb,fb},
[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; };"}},
[n]={{O,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]={
[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"}
[Ac]={"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",
[g]="[rewriter] A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="[rewriter] %0",
[h]="[rewriter] %0",
[j]=i,
[j]=i,
[k]="\\[rewriter\\] (.*?)",
[l]="\\[rewriter\\] (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions"},
[m]={"42aa21222d37",1390712852,"ARCMigrate: Introduce proper diagnostics for TransformActions","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]={
[o]={
Line 8,059: Line 8,081:
},
},
["note_multiversioning_caused_here"]={
["note_multiversioning_caused_here"]={
[b]="function multiversioning caused by this declaration",
[g]="function multiversioning caused by this declaration",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="function multiversioning caused by this declaration",
[h]="function multiversioning caused by this declaration",
[j]=i,
[j]=i,
[k]="function multiversioning caused by this declaration",
[l]="function multiversioning caused by this declaration",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"281d20b601c8",1515447257,"Implement Attribute Target MultiVersioning"},
[m]={"281d20b601c8",1515447257,"Implement Attribute Target MultiVersioning","Implement Attribute Target MultiVersioning"},
[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);"}},
[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]={
[o]={
Line 8,074: Line 8,096:
},
},
["note_musttail_callconv_mismatch"]={
["note_musttail_callconv_mismatch"]={
[b]="target function has calling convention A (expected B)",
[g]="target function has calling convention A (expected B)",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="target function has calling convention %1 (expected %0)",
[h]="target function has calling convention %1 (expected %0)",
[j]=i,
[j]=i,
[k]="target function has calling convention (.*?) \\(expected (.*?)\\)",
[l]="target function has calling convention (.*?) \\(expected (.*?)\\)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Dc,1607502387,Ec},
[m]={gd,1607502387,Eb,Eb},
[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());"}},
[n]={{I,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]={
[o]={
["clang/test/SemaCXX/attr-musttail.cpp"]={"clang/test/SemaCXX/attr-musttail.cpp:154:1: note: target function has calling convention regcall (expected cdecl)"}
["clang/test/SemaCXX/attr-musttail.cpp"]={"clang/test/SemaCXX/attr-musttail.cpp:154:1: note: target function has calling convention regcall (expected cdecl)"}
Line 8,089: Line 8,111:
},
},
["note_musttail_callee_defined_here"]={
["note_musttail_callee_defined_here"]={
[b]="A declared here",
[g]="A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%0 declared here",
[h]="%0 declared here",
[j]=i,
[j]=i,
[k]="(.*?) declared here",
[l]="(.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Dc,1607502387,Ec},
[m]={gd,1607502387,Eb,Eb},
[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();"}}
[n]={{I,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",
[g]="add \'void\' to the parameter list to turn an old-style K&R function declaration into a prototype",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="add \'void\' to the parameter list to turn an old\\-style K&R function declaration into a prototype",
[l]="add \'void\' to the parameter list to turn an old\\-style K&R function declaration into a prototype",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Dc,1607502387,Ec},
[m]={gd,1607502387,Eb,Eb},
[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);"}},
[n]={{I,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);"},{I,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]={
[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"}
["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"}
Line 8,116: Line 8,138:
},
},
["note_musttail_mismatch"]={
["note_musttail_mismatch"]={
[b]="target function ...",
[g]="target function ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=p,
[k]=p,
[m]={Dc,1607502387,Ec},
[m]={gd,1607502387,Eb,Eb},
[n]={{H,851,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  PartialDiagnostic PD = PDiag(diag::note_musttail_mismatch);"}},
[n]={{I,851,"bool Sema::checkMustTailAttr(const Stmt *St, const Attr &MTA) {\n  PartialDiagnostic PD = PDiag(diag::note_musttail_mismatch);"}},
[o]={
[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\')"}
["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\')"}
Line 8,131: Line 8,153:
},
},
["note_musttail_structors_forbidden"]={
["note_musttail_structors_forbidden"]={
[b]="target ... is declared here",
[g]="target ... is declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="target %select{constructor|destructor}0 is declared here",
[h]="target %select{constructor|destructor}0 is declared here",
[j]=i,
[j]=i,
[k]="target (?:constructor|destructor) is declared here",
[l]="target (?:constructor|destructor) is declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Dc,1607502387,Ec},
[m]={gd,1607502387,Eb,Eb},
[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);"}},
[n]={{I,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]={
[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"}
["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"}
Line 8,146: Line 8,168:
},
},
["note_namespace_defined_here"]={
["note_namespace_defined_here"]={
[b]="namespace A defined here",
[g]="namespace A defined here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="namespace %0 defined here",
[h]="namespace %0 defined here",
[j]=i,
[j]=i,
[k]="namespace (.*?) defined here",
[l]="namespace (.*?) defined here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","Allow a using directive to refer to the implicitly-defined namespace"},
[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));"}},
[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]={
[o]={
Line 8,161: Line 8,183:
},
},
["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",
[g]="consider using vld1_AB() to initialize a vector from memory, or vcreate_CD() to initialize from an integer constant",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="consider using vld1_(.*?)(.*?)\\(\\) to initialize a vector from memory, or vcreate_(.*?)(.*?)\\(\\) to initialize from an integer constant",
[l]="consider using vld1_(.*?)(.*?)\\(\\) to initialize a vector from memory, or vcreate_(.*?)(.*?)\\(\\) to initialize from an integer constant",
[l]=a,
[b]=a,
[c]=p,
[k]=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","The ability to use vector initializer lists is a GNU vector extension"},
[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;"}},
[n]={{L,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]={
[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"}
["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"}
Line 8,176: Line 8,198:
},
},
["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",
[g]="consider using vld1q_AB() to initialize a vector from memory, or vcombine_CD(vcreate_EF(), vcreate_GH()) to initialize from integer constants",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="consider using vld1q_(.*?)(.*?)\\(\\) to initialize a vector from memory, or vcombine_(.*?)(.*?)\\(vcreate_(.*?)(.*?)\\(\\), vcreate_(.*?)(.*?)\\(\\)\\) to initialize from integer constants",
[l]="consider using vld1q_(.*?)(.*?)\\(\\) to initialize a vector from memory, or vcombine_(.*?)(.*?)\\(vcreate_(.*?)(.*?)\\(\\), vcreate_(.*?)(.*?)\\(\\)\\) to initialize from integer constants",
[l]=a,
[b]=a,
[c]=p,
[k]=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","The ability to use vector initializer lists is a GNU vector extension"},
[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;"}},
[n]={{L,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]={
[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"}
["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"}
Line 8,191: Line 8,213:
},
},
["note_nested_requirement_here"]={
["note_nested_requirement_here"]={
[b]="while checking the satisfaction of nested requirement requested here",
[g]="while checking the satisfaction of nested requirement requested here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="while checking the satisfaction of nested requirement requested here",
[h]="while checking the satisfaction of nested requirement requested here",
[j]=i,
[j]=i,
[k]="while checking the satisfaction of nested requirement requested here",
[l]="while checking the satisfaction of nested requirement requested here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={ob,1576172311,lb},
[m]={yb,1576172311,S,S},
[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;"}},
[n]={{H,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;"},{H,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]={
[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"}
["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"}
Line 8,206: Line 8,228:
},
},
["note_nested_requirement_substitution_error"]={
["note_nested_requirement_substitution_error"]={
[b]="... \'A\' would be invalidB",
[g]="... \'A\' would be invalidB",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{and|because}0 \'%1\' would be invalid%2",
[h]="%select{and|because}0 \'%1\' would be invalid%2",
[j]=i,
[j]=i,
[k]="(?:and|because) \'(.*?)\' would be invalid(.*?)",
[l]="(?:and|because) \'(.*?)\' would be invalid(.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={ob,1576172311,lb},
[m]={yb,1576172311,S,S},
[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;"}}
[n]={{hb,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",
[g]="... \'A\' would be invalid",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{and|because}0 \'%1\' would be invalid",
[h]="%select{and|because}0 \'%1\' would be invalid",
[j]=i,
[j]=i,
[k]="(?:and|because) \'(.*?)\' would be invalid",
[l]="(?:and|because) \'(.*?)\' would be invalid",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={ob,1576172311,lb}
[m]={yb,1576172311,S,S}
},
},
["note_next_field_declaration"]={
["note_next_field_declaration"]={
[b]="next field declaration is here",
[g]="next field declaration is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="next field declaration is here",
[h]="next field declaration is here",
[j]=i,
[j]=i,
[k]="next field declaration is here",
[l]="next field declaration is here",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","[Sema] Add support for flexible array members in Obj-C."},
[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);"}},
[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]={
[o]={
Line 8,244: Line 8,266:
},
},
["note_next_ivar_declaration"]={
["note_next_ivar_declaration"]={
[b]="next ... is here",
[g]="next ... is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="next (?:instance variable declaration|synthesized instance variable) is here",
[l]="next (?:instance variable declaration|synthesized instance variable) is here",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","[Sema] Add support for flexible array members in Obj-C."},
[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();"}},
[n]={{P,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]={
[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"}
["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"}
Line 8,259: Line 8,281:
},
},
["note_non_c_like_anon_struct"]={
["note_non_c_like_anon_struct"]={
[b]="type is not C-compatible due to this ...",
[g]="type is not C-compatible due to this ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="type is not C\\-compatible due to this (?:base class|default member initializer|lambda expression|friend declaration|member declaration)",
[l]="type is not C\\-compatible due to this (?:base class|default member initializer|lambda expression|friend declaration|member declaration)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"1228d42ddab8",1576809732,"[OpenMP][Part 2] Use reusable OpenMP context/traits handling"},
[m]={"1228d42ddab8",1576809732,bc,bc},
[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;"}},
[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]={
[o]={
Line 8,274: Line 8,296:
},
},
["note_non_deducible_parameter"]={
["note_non_deducible_parameter"]={
[b]="non-deducible template parameter A",
[g]="non-deducible template parameter A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="non-deducible template parameter %0",
[h]="non-deducible template parameter %0",
[j]=i,
[j]=i,
[k]="non\\-deducible template parameter (.*?)",
[l]="non\\-deducible template parameter (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=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...","[c++1z] Diagnose non-deducible template parameters in deduction guide templates, per [temp.param]p11."},
[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)\";"}},
[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]={
[o]={
Line 8,289: Line 8,311:
},
},
["note_non_instantiated_member_here"]={
["note_non_instantiated_member_here"]={
[b]="not-yet-instantiated member is declared here",
[g]="not-yet-instantiated member is declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="not-yet-instantiated member is declared here",
[h]="not-yet-instantiated member is declared here",
[j]=i,
[j]=i,
[k]="not\\-yet\\-instantiated member is declared here",
[l]="not\\-yet\\-instantiated member is declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","We may fail to map a declaration in a template to its instantiated"},
[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);"}},
[n]={{Ic,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]={
[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"}
["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"}
Line 8,304: Line 8,326:
},
},
["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",
[g]="A is not literal because it has base class B of non-literal type",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) is not literal because it has base class (.*?) of non\\-literal type",
[l]="(.*?) is not literal because it has base class (.*?) of non\\-literal type",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Ab,1317436288,ub},
[m]={Qb,1317436288,bb,bb},
[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();"}},
[n]={{J,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]={
[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"}
["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"}
Line 8,319: Line 8,341:
},
},
["note_non_literal_field"]={
["note_non_literal_field"]={
[b]="A is not literal because it has data member B of ... type C",
[g]="A is not literal because it has data member B of ... type C",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) is not literal because it has data member (.*?) of (?:non\\-literal|volatile) type (.*?)",
[l]="(.*?) is not literal because it has data member (.*?) of (?:non\\-literal|volatile) type (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Ab,1317436288,ub},
[m]={Qb,1317436288,bb,bb},
[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();"}},
[n]={{J,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]={
[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]\'"}
[Sc]={"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",
[g]="incomplete type A is not a literal type",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="incomplete type %0 is not a literal type",
[h]="incomplete type %0 is not a literal type",
[j]=i,
[j]=i,
[k]="incomplete type (.*?) is not a literal type",
[l]="incomplete type (.*?) is not a literal type",
[l]=a,
[b]=a,
[c]=p,
[k]=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","If a type is non-literal by virtue of being incomplete produce notes"},
[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))"}},
[n]={{J,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]={
[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"}
[Sc]={"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",
[g]="lambda closure types are non-literal types before C++17",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="lambda closure types are non-literal types before C++17",
[h]="lambda closure types are non-literal types before C++17",
[j]=i,
[j]=i,
[k]="lambda closure types are non\\-literal types before C\\+\\+17",
[l]="lambda closure types are non\\-literal types before C\\+\\+17",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","PR37450: Fix bug that disabled some type checks for variables with deduced types."},
[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);"}},
[n]={{J,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]={
[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"}
["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"}
Line 8,364: Line 8,386:
},
},
["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",
[g]="A is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors",
[l]="(.*?) is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Ab,1317436288,ub},
[m]={Qb,1317436288,bb,bb},
[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;"}},
[n]={{J,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]={
[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"}
["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"}
Line 8,379: Line 8,401:
},
},
["note_non_literal_non_constexpr_dtor"]={
["note_non_literal_non_constexpr_dtor"]={
[b]="A is not literal because its destructor is not constexpr",
[g]="A is not literal because its destructor is not constexpr",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%0 is not literal because its destructor is not constexpr",
[h]="%0 is not literal because its destructor is not constexpr",
[j]=i,
[j]=i,
[k]="(.*?) is not literal because its destructor is not constexpr",
[l]="(.*?) is not literal because its destructor is not constexpr",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Zb,1567434909,Yb},
[m]={qc,1567434909,jb,jb},
[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;"}},
[n]={{J,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]={
[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"}
["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"}
Line 8,394: Line 8,416:
},
},
["note_non_literal_nontrivial_dtor"]={
["note_non_literal_nontrivial_dtor"]={
[b]="A is not literal because it has a non-trivial destructor",
[g]="A is not literal because it has a non-trivial destructor",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) is not literal because it has a non\\-trivial destructor",
[l]="(.*?) is not literal because it has a non\\-trivial destructor",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Ab,1317436288,ub},
[m]={Qb,1317436288,bb,bb},
[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;"}},
[n]={{J,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]={
[o]={
[ic]={"clang/test/CXX/basic/basic.types/p10.cpp:46:11: note: \'NonTrivDtor\' is not literal because it has a non-trivial destructor"}
[Sc]={"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",
[g]="A is not literal because it has a user-provided destructor",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) is not literal because it has a user\\-provided destructor",
[l]="(.*?) is not literal because it has a user\\-provided destructor",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Ab,1317436288,ub},
[m]={Qb,1317436288,bb,bb},
[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;"}},
[n]={{J,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]={
[o]={
[ic]={"clang/test/CXX/basic/basic.types/p10.cpp:41:3: note: \'UserProvDtor\' is not literal because it has a user-provided destructor"}
[Sc]={"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",
[g]="... with virtual base class is not a literal type",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:struct|interface|class) with virtual base (?:class|classes) is not a literal type",
[l]="(?:struct|interface|class) with virtual base (?:class|classes) is not a literal type",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Ab,1317436288,ub},
[m]={Qb,1317436288,bb,bb},
[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();"}},
[n]={{J,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]={
[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"}
["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"}
Line 8,439: Line 8,461:
},
},
["note_non_null_attribute_failed"]={
["note_non_null_attribute_failed"]={
[b]="null passed to a callee that requires a non-null argument",
[g]="null passed to a callee that requires a non-null argument",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="null passed to a callee that requires a non\\-null argument",
[l]="null passed to a callee that requires a non\\-null argument",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"0bb4d46b2be5",1560587576,"[clang] perform semantic checking in constant context"},
[m]={"0bb4d46b2be5",1560587576,"[clang] perform semantic checking in constant context","[clang] perform semantic checking in constant context"},
[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);"}},
[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]={
[o]={
Line 8,454: Line 8,476:
},
},
["note_non_template_in_template_id_found"]={
["note_non_template_in_template_id_found"]={
[b]="non-template declaration found by name lookup",
[g]="non-template declaration found by name lookup",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="non-template declaration found by name lookup",
[h]="non-template declaration found by name lookup",
[j]=i,
[j]=i,
[k]="non\\-template declaration found by name lookup",
[l]="non\\-template declaration found by name lookup",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","When we see a \'<\' operator, check whether it\'s a probable typo for a template-id."},
[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);"}},
[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]={
[o]={
Line 8,469: Line 8,491:
},
},
["note_non_trivial_c_union"]={
["note_non_trivial_c_union"]={
[b]="... non-trivial to ...",
[g]="... non-trivial to ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:(.*?) has subobjects that are|(.*?) has type (.*?) that is) non\\-trivial to (?:default\\-initialize|destruct|copy)",
[l]="(?:(.*?) has subobjects that are|(.*?) has type (.*?) that is) non\\-trivial to (?:default\\-initialize|destruct|copy)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"81b03d4a08b1",1562982435,"[Sema] Diagnose default-initialization, destruction, and copying of"},
[m]={"81b03d4a08b1",1562982435,"[Sema] Diagnose default-initialization, destruction, and copying of","[Sema] Diagnose default-initialization, destruction, and copying of"},
[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() << \"\";"}},
[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]={
[o]={
["clang/test/SemaObjC/non-trivial-c-union.m"]={
["clang/test/SemaObjC/non-trivial-c-union.m"]={
[1]=db,
[1]=vb,
[2]=ab,
[2]=tb,
[3]=cb,
[3]=rb,
[4]=db,
[4]=vb,
[5]=ab,
[5]=tb,
[6]=cb,
[6]=rb,
[7]=db,
[7]=vb,
[8]=ab,
[8]=tb,
[9]=cb,
[9]=rb,
[10]=y,
[10]=z,
[11]=x,
[11]=x,
[12]=w,
[12]=y,
[13]=F,
[13]=G,
[14]=E,
[14]=F,
[15]=C,
[15]=E,
[16]=y,
[16]=z,
[17]=x,
[17]=x,
[18]=w,
[18]=y,
[19]=F,
[19]=G,
[20]=E,
[20]=F,
[21]=C,
[21]=E,
[22]=y,
[22]=z,
[23]=x,
[23]=x,
[24]=w,
[24]=y,
[25]=F,
[25]=G,
[26]=E,
[26]=F,
[27]=C,
[27]=E,
[28]=y,
[28]=z,
[29]=x,
[29]=x,
[30]=w,
[30]=y,
[31]=F,
[31]=G,
[32]=E,
[32]=F,
[33]=C,
[33]=E,
[34]=y,
[34]=z,
[35]=x,
[35]=x,
[36]=w,
[36]=y,
[37]=F,
[37]=G,
[38]=E,
[38]=F,
[39]=C,
[39]=E,
[40]=y,
[40]=z,
[41]=x,
[41]=x,
[42]=w,
[42]=y,
[43]=F,
[43]=G,
[44]=E,
[44]=F,
[45]=C,
[45]=E,
[46]=y,
[46]=z,
[47]=x,
[47]=x,
[48]=w,
[48]=y,
[49]=F,
[49]=G,
[50]=E,
[50]=F,
[51]=C,
[51]=E,
[52]=y,
[52]=z,
[53]=x,
[53]=x,
[54]=w,
[54]=y,
[55]=F,
[55]=G,
[56]=E,
[56]=F,
[57]=C,
[57]=E,
[58]=y,
[58]=z,
[59]=x,
[59]=x,
[60]=w,
[60]=y,
[61]=F,
[61]=G,
[62]=E,
[62]=F,
[63]=C,
[63]=E,
[64]=y,
[64]=z,
[65]=x,
[65]=x,
[66]=w,
[66]=y,
[67]=F,
[67]=G,
[68]=E,
[68]=F,
[69]=C,
[69]=E,
[70]=y,
[70]=z,
[71]=x,
[71]=x,
[72]=w,
[72]=y,
[73]=F,
[73]=G,
[74]=E,
[74]=F,
[75]=C,
[75]=E,
[76]=y,
[76]=z,
[77]=x,
[77]=x,
[78]=w,
[78]=y,
[79]=F,
[79]=G,
[80]=E,
[80]=F,
[81]=C,
[81]=E,
[82]=y,
[82]=z,
[83]=x,
[83]=x,
[84]=w,
[84]=y,
[85]=db,
[85]=vb,
[86]=ab,
[86]=tb,
[87]=cb,
[87]=rb,
[88]=y,
[88]=z,
[89]=x,
[89]=x,
[90]=w,
[90]=y,
[91]=F,
[91]=G,
[92]=E,
[92]=F,
[93]=C,
[93]=E,
[94]=y,
[94]=z,
[95]=x,
[95]=x,
[96]=w,
[96]=y,
[97]=y,
[97]=z,
[98]=x,
[98]=x,
[99]=w,
[99]=y,
[100]=y,
[100]=z,
[101]=x,
[101]=x,
[102]=w,
[102]=y,
[103]=db,
[103]=vb,
[104]=ab,
[104]=tb,
[105]=cb,
[105]=rb,
[106]=y,
[106]=z,
[107]=x,
[107]=x,
[108]=w,
[108]=y,
[109]=F,
[109]=G,
[110]=E,
[110]=F,
[111]=C,
[111]=E,
[112]=y,
[112]=z,
[113]=x,
[113]=x,
[114]=w,
[114]=y,
[115]=F,
[115]=G,
[116]=E,
[116]=F,
[117]=C,
[117]=E,
[118]=y,
[118]=z,
[119]=x,
[119]=x,
[120]=w,
[120]=y,
[121]=F,
[121]=G,
[122]=E,
[122]=F,
[123]=C,
[123]=E,
[124]=y,
[124]=z,
[125]=x,
[125]=x,
[126]=w,
[126]=y,
[127]=db,
[127]=vb,
[128]=ab,
[128]=tb,
[129]=cb,
[129]=rb,
[130]=F,
[130]=G,
[131]=E,
[131]=F,
[132]=C,
[132]=E,
[133]=F,
[133]=G,
[134]=E,
[134]=F,
[135]=C,
[135]=E,
[136]=F,
[136]=G,
[137]=E,
[137]=F,
[138]=C,
[138]=E,
[139]=F,
[139]=G,
[140]=E,
[140]=F,
[141]=C,
[141]=E,
[142]=db,
[142]=vb,
[143]=ab,
[143]=tb,
[144]=cb,
[144]=rb,
[145]=y,
[145]=z,
[146]=x,
[146]=x,
[147]=w,
[147]=y,
[148]=y,
[148]=z,
[149]=x,
[149]=x,
[150]=w,
[150]=y,
[151]=y,
[151]=z,
[152]=x,
[152]=x,
[153]=w,
[153]=y,
[154]=F,
[154]=G,
[155]=E,
[155]=F,
[156]=C,
[156]=E,
[157]=y,
[157]=z,
[158]=x,
[158]=x,
[159]=w,
[159]=y,
[160]=db,
[160]=vb,
[161]=ab,
[161]=tb,
[162]=cb,
[162]=rb,
[163]=y,
[163]=z,
[164]=x,
[164]=x,
[165]=w,
[165]=y,
[166]=db,
[166]=vb,
[167]=ab,
[167]=tb,
[168]=cb,
[168]=rb,
[169]=y,
[169]=z,
[170]=x,
[170]=x,
[171]=w,
[171]=y,
[172]=db,
[172]=vb,
[173]=ab,
[173]=tb,
[174]=cb,
[174]=rb,
[175]=y,
[175]=z,
[176]=x,
[176]=x,
[177]=w,
[177]=y,
[178]=db,
[178]=vb,
[179]=ab,
[179]=tb,
[180]=cb,
[180]=rb,
[181]=y,
[181]=z,
[182]=x,
[182]=x,
[183]=w,
[183]=y,
[184]=db,
[184]=vb,
[185]=ab,
[185]=tb,
[186]=cb,
[186]=rb,
[187]=y,
[187]=z,
[188]=x,
[188]=x,
[189]=w,
[189]=y,
[190]=F,
[190]=G,
[191]=E,
[191]=F,
[192]=C,
[192]=E,
[193]=y,
[193]=z,
[194]=x,
[194]=x,
[195]=w,
[195]=y,
[196]=F,
[196]=G,
[197]=E,
[197]=F,
[198]=C,
[198]=E,
[199]=y,
[199]=z,
[200]=x,
[200]=x,
[201]=w,
[201]=y,
[202]=F,
[202]=G,
[203]=E,
[203]=F,
[204]=C,
[204]=E,
[205]=y,
[205]=z,
[206]=x,
[206]=x,
[207]=w,
[207]=y,
[208]=F,
[208]=G,
[209]=E,
[209]=F,
[210]=C,
[210]=E,
[211]=y,
[211]=z,
[212]=x,
[212]=x,
[213]=w,
[213]=y,
[214]=F,
[214]=G,
[215]=E,
[215]=F,
[216]=C,
[216]=E,
[217]=y,
[217]=z,
[218]=x,
[218]=x,
[219]=w,
[219]=y,
[220]=F,
[220]=G,
[221]=E,
[221]=F,
[222]=C,
[222]=E,
[223]=y,
[223]=z,
[224]=x,
[224]=x,
[225]=w,
[225]=y,
[226]=F,
[226]=G,
[227]=E,
[227]=F,
[228]=C,
[228]=E,
[229]="clang/test/SemaObjC/Inputs/non-trivial-c-union.h:16:9: note: \'U1_SystemHeader\' has subobjects that are non-trivial to destruct",
[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",
[230]="clang/test/SemaObjC/Inputs/non-trivial-c-union.h:17:15: note: f0 has type \'__strong id\' that is non-trivial to destruct",
Line 8,717: Line 8,739:
},
},
["note_non_usual_function_declared_here"]={
["note_non_usual_function_declared_here"]={
[b]="non-usual A declared here",
[g]="non-usual A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="non-usual %0 declared here",
[h]="non-usual %0 declared here",
[j]=i,
[j]=i,
[k]="non\\-usual (.*?) declared here",
[l]="non\\-usual (.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=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...","[Builtins] Overload __builtin_operator_new/delete to allow forwarding to usual allocation/deallocation functions."},
[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();"}},
[n]={{X,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]={
[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"}
["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"}
Line 8,732: Line 8,754:
},
},
["note_nontemplate_decl_here"]={
["note_nontemplate_decl_here"]={
[b]="non-templated declaration is here",
[g]="non-templated declaration is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="non-templated declaration is here",
[h]="non-templated declaration is here",
[j]=i,
[j]=i,
[k]="non\\-templated declaration is here",
[l]="non\\-templated declaration is here",
[l]=a,
[b]=a,
[c]=p,
[k]=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.,","Implement explicit instantiations of member classes of class templates, e.g.,"},
[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);"}},
[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]={
[o]={
Line 8,747: Line 8,769:
},
},
["note_nontrivial_default_arg"]={
["note_nontrivial_default_arg"]={
[b]="because it has a default argument",
[g]="because it has a default argument",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="because it has a default argument",
[h]="because it has a default argument",
[j]=i,
[j]=i,
[k]="because it has a default argument",
[l]="because it has a default argument",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Lb,1354935182,Mb},
[m]={kc,1354935182,eb,eb},
[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();"}}
[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",
[g]="because field A has an initializer",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="because field %0 has an initializer",
[h]="because field %0 has an initializer",
[j]=i,
[j]=i,
[k]="because field (.*?) has an initializer",
[l]="because field (.*?) has an initializer",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={mb,1582847864,jb},
[m]={Bb,1582847864,T,T},
[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;"}}
[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 ...",
[g]="field is non-trivial to ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="field is non-trivial to %select{copy|default-initialize}0",
[h]="field is non-trivial to %select{copy|default-initialize}0",
[j]=i,
[j]=i,
[k]="field is non\\-trivial to (?:copy|default\\-initialize)",
[l]="field is non\\-trivial to (?:copy|default\\-initialize)",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","[Sema] Warn about memcpy\'ing non-trivial C structs."},
[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); }"}},
[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]={
[o]={
Line 8,786: Line 8,808:
},
},
["note_nontrivial_has_virtual"]={
["note_nontrivial_has_virtual"]={
[b]="because type A has a virtual ...",
[g]="because type A has a virtual ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="because type (.*?) has a virtual (?:member function|base class)",
[l]="because type (.*?) has a virtual (?:member function|base class)",
[l]=a,
[b]=a,
[c]=p,
[k]=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","\"This patch implements the restrictions on union members detailed in"},
[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;"}},
[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]={
[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"}
[Dc]={"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",
[g]="because no ... can be used to ... ... of type A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=p,
[k]=p,
[m]={Lb,1354935182,Mb},
[m]={kc,1354935182,eb,eb},
[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;"}},
[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]={
[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\'"}
[Dc]={"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",
[g]="because ...type A has no default constructor",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="because (?:base class of |field of |)type (.*?) has no default constructor",
[l]="because (?:base class of |field of |)type (.*?) has no default constructor",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Lb,1354935182,Mb},
[m]={kc,1354935182,eb,eb},
[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();"}},
[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]={
[o]={
[kc]={"clang/test/CXX/class/class.union/p1.cpp:22:7: note: because type \'CtorTmpl\' has no default constructor"}
[Dc]={"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",
[g]="because type A has a member with ... ownership",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="because type (.*?) has a member with (?:no|no|__strong|__weak|__autoreleasing) ownership",
[l]="because type (.*?) has a member with (?:no|no|__strong|__weak|__autoreleasing) ownership",
[l]=a,
[b]=a,
[c]=p,
[k]=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...","Rename objc_lifetime -> objc_ownership, and modify diagnostics to talk about \'ownership\', not \'lifetime\'."},
[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();"}},
[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]={
[o]={
Line 8,846: Line 8,868:
},
},
["note_nontrivial_param_type"]={
["note_nontrivial_param_type"]={
[b]="because its parameter is of type A, not B",
[g]="because its parameter is of type A, not B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="because its parameter is (?:of type (.*?), not (.*?)|of the wrong type)",
[l]="because its parameter is (?:of type (.*?), not (.*?)|of the wrong type)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Lb,1354935182,Mb},
[m]={kc,1354935182,eb,eb},
[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));"}}
[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",
[g]="because the function selected to ... ... of type A is not trivial",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="because the function selected to (?:construct|copy|move|copy|move|destroy) (?:base class|field) of type (.*?) is not trivial",
[l]="because the function selected to (?:construct|copy|move|copy|move|destroy) (?:base class|field) of type (.*?) is not trivial",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Lb,1354935182,Mb},
[m]={kc,1354935182,eb,eb},
[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;"}},
[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]={
[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"}
[Dc]={"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 ...",
[g]="because ...type A has a user-provided ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]=p,
[k]=p,
[m]={Lb,1354935182,Mb},
[m]={kc,1354935182,eb,eb},
[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;"}},
[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]={
[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"}
[Dc]={"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",
[g]="because it is a variadic function",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="because it is a variadic function",
[h]="because it is a variadic function",
[j]=i,
[j]=i,
[k]="because it is a variadic function",
[l]="because it is a variadic function",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Lb,1354935182,Mb},
[m]={kc,1354935182,eb,eb},
[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);"}},
[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]={
[o]={
[kc]={"clang/test/CXX/class/class.union/p1.cpp:95:5: note: because it is a variadic function"}
[Dc]={"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",
[g]="destructor for A is not trivial because it is virtual",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="destructor for %0 is not trivial because it is virtual",
[h]="destructor for %0 is not trivial because it is virtual",
[j]=i,
[j]=i,
[k]="destructor for (.*?) is not trivial because it is virtual",
[l]="destructor for (.*?) is not trivial because it is virtual",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={Lb,1354935182,Mb},
[m]={kc,1354935182,eb,eb},
[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;"}},
[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]={
[o]={
[ic]={"clang/test/CXX/basic/basic.types/p10.cpp:46:11: note: destructor for \'NonTrivDtor\' is not trivial because it is virtual"}
[Sc]={"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...",
[g]="A should be declared prior to the call site...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) should be declared prior to the call site(?:| or in (.*?)| or in an associated namespace of one of its arguments)",
[l]="(.*?) should be declared prior to the call site(?:| or in (.*?)| or in an associated namespace of one of its arguments)",
[l]=a,
[b]=a,
[c]=p,
[k]=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...","Fix PR10053: Improve diagnostics and error recovery for code which some compilers incorrectly accept due to a lack of proper support for two-phase name lookup."},
[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;"}},
[n]={{ib,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;"},{ib,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();"},{ib,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]={
[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\'"}
["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\'"}
Line 8,933: Line 8,955:
},
},
["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",
[g]="add \'export\' here if this is intended to be a module interface unit",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="add \'export\' here if this is intended to be a module interface unit",
[l]="add \'export\' here if this is intended to be a module interface unit",
[l]=a,
[b]=a,
[c]=fc,
[k]=Bc,
[m]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments."},
[m]={"a5bbbfef156c",1555621974,"[c++2a] Add semantic support for private module fragments.","[c++2a] Add semantic support for private module fragments."},
[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 \");"}},
[n]={{Ab,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 \");"},{Ab,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]={
[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"}
["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"}
Line 8,948: Line 8,970:
},
},
["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",
[g]="A is not a structural type because it has a mutable non-static data member",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) is not a structural type because it has a mutable non\\-static data member",
[l]="(.*?) is not a structural type because it has a mutable non\\-static data member",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={mb,1582847864,jb},
[m]={Bb,1582847864,T,T},
[n]={{v,1370,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Drill down into the reason why the class is non-structural.\n  while (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) {\n    // All members are required to be public and non-mutable, and can\'t be of\n    // rvalue reference type. Check these conditions first to prefer a \"local\"\n    // reason over a more distant one.\n    for (const FieldDecl *FD : RD->fields()) {\n      if (FD->isMutable()) {\n        Diag(FD->getLocation(), diag::note_not_structural_mutable_field) << T;"}},
[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]={
[o]={
Line 8,963: Line 8,985:
},
},
["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",
[g]="A is not a structural type because it has a ... that is not public",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) is not a structural type because it has a (?:non\\-static data member|base class) that is not public",
[l]="(.*?) is not a structural type because it has a (?:non\\-static data member|base class) that is not public",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={mb,1582847864,jb},
[m]={Bb,1582847864,T,T},
[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;"}},
[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]={
[o]={
Line 8,978: Line 9,000:
},
},
["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",
[g]="A is not a structural type because it has a non-static data member of rvalue reference type",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) is not a structural type because it has a non\\-static data member of rvalue reference type",
[l]="(.*?) is not a structural type because it has a non\\-static data member of rvalue reference type",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={mb,1582847864,jb},
[m]={Bb,1582847864,T,T},
[n]={{v,1374,"/// Require the given type to be a structural type, and diagnose if it is not.\n///\n/// \\return \\c true if an error was produced.\nbool Sema::RequireStructuralType(QualType T, SourceLocation Loc) {\n  // Drill down into the reason why the class is non-structural.\n  while (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) {\n    // All members are required to be public and non-mutable, and can\'t be of\n    // rvalue reference type. Check these conditions first to prefer a \"local\"\n    // reason over a more distant one.\n    for (const FieldDecl *FD : RD->fields()) {\n      if (FD->getType()->isRValueReferenceType()) {\n        Diag(FD->getLocation(), diag::note_not_structural_rvalue_ref_field) << T;"}},
[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]={
[o]={
Line 8,993: Line 9,015:
},
},
["note_not_structural_subobject"]={
["note_not_structural_subobject"]={
[b]="A is not a structural type because it has a ... of non-structural type B",
[g]="A is not a structural type because it has a ... of non-structural type B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) is not a structural type because it has a (?:non\\-static data member|base class) of non\\-structural type (.*?)",
[l]="(.*?) is not a structural type because it has a (?:non\\-static data member|base class) of non\\-structural type (.*?)",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={mb,1582847864,jb},
[m]={Bb,1582847864,T,T},
[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;"}},
[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]={
[o]={
Line 9,008: Line 9,030:
},
},
["note_nsdictionary_duplicate_key_here"]={
["note_nsdictionary_duplicate_key_here"]={
[b]="previous equal key is here",
[g]="previous equal key is here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="previous equal key is here",
[h]="previous equal key is here",
[j]=i,
[j]=i,
[k]="previous equal key is here",
[l]="previous equal key is here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={cc,1576908663,bc},
[m]={pc,1576908663,mb,mb},
[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);"}},
[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]={
[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"}
["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",cd,cd,cd,cd,cd,cd,"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 ... ...",
[g]="insert \'...\' if the ... ...",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[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]="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,
[b]=a,
[c]="Nullability Issue",
[k]="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.","Add fix-it notes to the nullability consistency warning."},
[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);"}},
[n]={{J,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]={
[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"}
["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"}
Line 9,038: Line 9,060:
},
},
["note_nullability_here"]={
["note_nullability_here"]={
[b]="A specified here",
[g]="A specified here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%0 specified here",
[h]="%0 specified here",
[j]=i,
[j]=i,
[k]="(.*?) specified here",
[l]="(.*?) specified here",
[l]=a,
[b]=a,
[c]="Nullability Issue",
[k]="Nullability Issue",
[m]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++."},
[m]={"261a89b0f70b",1434736265,"Introduce type nullability specifiers for C/C++.","Introduce type nullability specifiers for C/C++."},
[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);"}},
[n]={{J,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]={
[o]={
["clang/test/Sema/nullability.c"]={"clang/test/Sema/nullability.c:15:24: note: \'_Nonnull\' specified here"}
["clang/test/Sema/nullability.c"]={"clang/test/Sema/nullability.c:15:24: note: \'_Nonnull\' specified here"}
Line 9,053: Line 9,075:
},
},
["note_nullability_type_specifier"]={
["note_nullability_type_specifier"]={
[b]="use nullability type specifier A to affect the innermost pointer type of B",
[g]="use nullability type specifier A to affect the innermost pointer type of B",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="use nullability type specifier (.*?) to affect the innermost pointer type of (.*?)",
[l]="use nullability type specifier (.*?) to affect the innermost pointer type of (.*?)",
[l]=a,
[b]=a,
[c]="Nullability Issue",
[k]="Nullability Issue",
[m]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C."},
[m]={"813a066f16df",1434737678,"Extend type nullability qualifiers for Objective-C.","Extend type nullability qualifiers for Objective-C."},
[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));"}},
[n]={{J,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]={
[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]\'"}
["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]\'"}
Line 9,068: Line 9,090:
},
},
["note_objc_circular_container_declared_here"]={
["note_objc_circular_container_declared_here"]={
[b]="A declared here",
[g]="A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%0 declared here",
[h]="%0 declared here",
[j]=i,
[j]=i,
[k]="(.*?) declared here",
[l]="(.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"e1d882c726b5",1425491752,"New ObjC warning: circular containers."},
[m]={"e1d882c726b5",1425491752,"New ObjC warning: circular containers.","New ObjC warning: circular containers."},
[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;"}}
[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",
[g]="... started here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:class|protocol|category|class extension|implementation|category implementation) started here",
[l]="(?:class|protocol|category|class extension|implementation|category implementation) started here",
[l]=a,
[b]=a,
[c]=Z,
[k]=qb,
[m]={"c6c8d9356dc0",1323163523,"Extend warnings for missing \'@end\'."},
[m]={"c6c8d9356dc0",1323163523,"Extend warnings for missing \'@end\'.","Extend warnings for missing \'@end\'."},
[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;"}},
[n]={{uc,204,"void Parser::CheckNestedObjCContexts(SourceLocation AtLoc) {\n  if (Decl)\n    Diag(Decl->getBeginLoc(), diag::note_objc_container_start) << (int)ock;"},{uc,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();"},{uc,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();"},{uc,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]={
[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"}
["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"}
Line 9,095: Line 9,117:
},
},
["note_objc_designated_init_marked_here"]={
["note_objc_designated_init_marked_here"]={
[b]="method marked as designated initializer of the class here",
[g]="method marked as designated initializer of the class here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="method marked as designated initializer of the class here",
[h]="method marked as designated initializer of the class here",
[j]=i,
[j]=i,
[k]="method marked as designated initializer of the class here",
[l]="method marked as designated initializer of the class here",
[l]=a,
[b]=a,
[c]=p,
[k]=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","[objc] Emit a warning when the implementation of a designated initializer does not chain to"},
[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);"}},
[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);"},{gb,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]={
[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"}
["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",yc,"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",yc,yc,"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",yc,"clang/test/SemaObjC/attr-designated-init.m:43:1: note: method marked as designated initializer of the class here",yc,yc,"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",
[g]="use \'isEqual:\' instead",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="use \'isEqual:\' instead",
[h]="use \'isEqual:\' instead",
[j]=i,
[j]=i,
[k]="use \'isEqual\\:\' instead",
[l]="use \'isEqual\\:\' instead",
[l]=a,
[b]=a,
[c]=p,
[k]=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.","Now that -Wobjc-literal-compare is a warning, put the fixit on a note."},
[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, \"]\");"}},
[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]={
[o]={
Line 9,125: Line 9,147:
},
},
["note_objc_literal_method_param"]={
["note_objc_literal_method_param"]={
[b]="... parameter has unexpected type A (should be B)",
[g]="... parameter has unexpected type A (should be B)",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(?:first|second|third) parameter has unexpected type (.*?) \\(should be (.*?)\\)",
[l]="(?:first|second|third) parameter has unexpected type (.*?) \\(should be (.*?)\\)",
[l]=a,
[b]=a,
[c]=p,
[k]=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,","Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"},
[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\";"}},
[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]={
[o]={
Line 9,140: Line 9,162:
},
},
["note_objc_literal_method_return"]={
["note_objc_literal_method_return"]={
[b]="method returns unexpected type A (should be an object type)",
[g]="method returns unexpected type A (should be an object type)",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="method returns unexpected type %0 (should be an object type)",
[h]="method returns unexpected type %0 (should be an object type)",
[j]=i,
[j]=i,
[k]="method returns unexpected type (.*?) \\(should be an object type\\)",
[l]="method returns unexpected type (.*?) \\(should be an object type\\)",
[l]=a,
[b]=a,
[c]=p,
[k]=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,","Add clang support for new Objective-C literal syntax for NSDictionary, NSArray,"},
[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;"}},
[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]={
[o]={
Line 9,155: Line 9,177:
},
},
["note_objc_needs_superclass"]={
["note_objc_needs_superclass"]={
[b]="add a super class to fix this problem",
[g]="add a super class to fix this problem",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="add a super class to fix this problem",
[h]="add a super class to fix this problem",
[j]=i,
[j]=i,
[k]="add a super class to fix this problem",
[l]="add a super class to fix this problem",
[l]=a,
[b]=a,
[c]=p,
[k]=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...","Added a new attribute, objc_root_class, which informs the compiler when a root class is intentionally declared."},
[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);"}},
[n]={{P,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 \");"},{P,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]={
[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"}
["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"}
Line 9,170: Line 9,192:
},
},
["note_objc_type_param_here"]={
["note_objc_type_param_here"]={
[b]="type parameter A declared here",
[g]="type parameter A declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="type parameter %0 declared here",
[h]="type parameter %0 declared here",
[j]=i,
[j]=i,
[k]="type parameter (.*?) declared here",
[l]="type parameter (.*?) declared here",
[l]=a,
[b]=a,
[c]="Generics Issue",
[k]="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.","Parsing, semantic analysis, and AST for Objective-C type parameters."},
[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();"}},
[n]={{P,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();"},{P,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();"},{P,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();"},{J,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();"},{J,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]={
[o]={
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-generics-1.h:11:22: note: type parameter \'T\' declared here"}
["clang/test/SemaObjCXX/nullability-pragmas.mm"]={"clang/test/SemaObjCXX/Inputs/nullability-pragmas-generics-1.h:11:22: note: type parameter \'T\' declared here"}
Line 9,185: Line 9,207:
},
},
["note_objc_unsafe_perform_selector_method_declared_here"]={
["note_objc_unsafe_perform_selector_method_declared_here"]={
[b]="method A that returns B declared here",
[g]="method A that returns B declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="method %0 that returns %1 declared here",
[h]="method %0 that returns %1 declared here",
[j]=i,
[j]=i,
[k]="method (.*?) that returns (.*?) declared here",
[l]="method (.*?) that returns (.*?) declared here",
[l]=a,
[b]=a,
[c]=p,
[k]=p,
[m]={"0e23c61c8755",1488815914,"[Sema][ObjC] Warn about \'performSelector\' calls with selectors"},
[m]={"0e23c61c8755",1488815914,"[Sema][ObjC] Warn about \'performSelector\' calls with selectors","[Sema][ObjC] Warn about \'performSelector\' calls with selectors"},
[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;"}},
[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]={
[o]={
Line 9,200: Line 9,222:
},
},
["note_odr_base"]={
["note_odr_base"]={
[b]="class has base type A",
[g]="class has base type A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="class has base type %0",
[h]="class has base type %0",
[j]=i,
[j]=i,
[k]="class has base type (.*?)",
[l]="class has base type (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={dc,1265916115,Xb},
[m]={sc,1265916115,ob,ob},
[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();"}}
[n]={{A,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();"},{A,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();"},{A,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();"},{A,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",
[g]="enumerator A with value B here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="enumerator %0 with value %1 here",
[h]="enumerator %0 with value %1 here",
[j]=i,
[j]=i,
[k]="enumerator (.*?) with value (.*?) here",
[l]="enumerator (.*?) with value (.*?) here",
[l]=a,
[b]=a,
[c]=a,
[k]=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","Implement AST importing and merging for enumeration types and"},
[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);"}},
[n]={{A,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);"},{A,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);"},{A,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);"},{A,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]={
[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"}
["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"}
Line 9,227: Line 9,249:
},
},
["note_odr_field"]={
["note_odr_field"]={
[b]="field A has type B here",
[g]="field A has type B here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="field %0 has type %1 here",
[h]="field %0 has type %1 here",
[j]=i,
[j]=i,
[k]="field (.*?) has type (.*?) here",
[l]="field (.*?) has type (.*?) here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={dc,1265916115,Xb},
[m]={sc,1265916115,ob,ob},
[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();"}},
[n]={{A,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();"},{A,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();"},{A,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();"},{A,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]={
[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"}
["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"}
Line 9,242: Line 9,264:
},
},
["note_odr_field_name"]={
["note_odr_field_name"]={
[b]="field has name A here",
[g]="field has name A here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="field has name %0 here",
[h]="field has name %0 here",
[j]=i,
[j]=i,
[k]="field has name (.*?) here",
[l]="field has name (.*?) here",
[l]=a,
[b]=a,
[c]=a,
[k]=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","[Modules] Implement ODR-like semantics for tag types in C/ObjC"},
[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();"}},
[n]={{A,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();"},{A,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]={
[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"}
["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"}
Line 9,257: Line 9,279:
},
},
["note_odr_friend"]={
["note_odr_friend"]={
[b]="friend declared here",
[g]="friend declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="friend declared here",
[h]="friend declared here",
[j]=i,
[j]=i,
[k]="friend declared here",
[l]="friend declared here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"b180eebed423",1524677283,"[ASTImporter] FriendDecl importing improvements"},
[m]={"b180eebed423",1524677283,"[ASTImporter] FriendDecl importing improvements","[ASTImporter] FriendDecl importing improvements"},
[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);"}},
[n]={{A,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);"},{A,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);"},{A,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);"},{A,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]={
[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"}
["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"}
Line 9,272: Line 9,294:
},
},
["note_odr_missing_base"]={
["note_odr_missing_base"]={
[b]="no corresponding base class here",
[g]="no corresponding base class here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="no corresponding base class here",
[h]="no corresponding base class here",
[j]=i,
[j]=i,
[k]="no corresponding base class here",
[l]="no corresponding base class here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={dc,1265916115,Xb},
[m]={sc,1265916115,ob,ob},
[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);"}}
[n]={{A,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",
[g]="no corresponding enumerator here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="no corresponding enumerator here",
[h]="no corresponding enumerator here",
[j]=i,
[j]=i,
[k]="no corresponding enumerator here",
[l]="no corresponding enumerator here",
[l]=a,
[b]=a,
[c]=a,
[k]=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","Implement AST importing and merging for enumeration types and"},
[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);"}},
[n]={{A,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);"},{A,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]={
[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"}
["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"}
Line 9,299: Line 9,321:
},
},
["note_odr_missing_field"]={
["note_odr_missing_field"]={
[b]="no corresponding field here",
[g]="no corresponding field here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="no corresponding field here",
[h]="no corresponding field here",
[j]=i,
[j]=i,
[k]="no corresponding field here",
[l]="no corresponding field here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={dc,1265916115,Xb},
[m]={sc,1265916115,ob,ob},
[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);"}},
[n]={{A,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);"},{A,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]={
[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"}
["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"}
Line 9,314: Line 9,336:
},
},
["note_odr_missing_friend"]={
["note_odr_missing_friend"]={
[b]="no corresponding friend here",
[g]="no corresponding friend here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="no corresponding friend here",
[h]="no corresponding friend here",
[j]=i,
[j]=i,
[k]="no corresponding friend here",
[l]="no corresponding friend here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"b180eebed423",1524677283,"[ASTImporter] FriendDecl importing improvements"},
[m]={"b180eebed423",1524677283,"[ASTImporter] FriendDecl importing improvements","[ASTImporter] FriendDecl importing improvements"},
[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);"}},
[n]={{A,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);"},{A,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]={
[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"}
["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"}
Line 9,329: Line 9,351:
},
},
["note_odr_number_of_bases"]={
["note_odr_number_of_bases"]={
[b]="class has A base class",
[g]="class has A base class",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="class has %0 base %plural{1:class|:classes}0",
[h]="class has %0 base %plural{1:class|:classes}0",
[j]=i,
[j]=i,
[k]="class has (.*?) base (?:class|classes)",
[l]="class has (.*?) base (?:class|classes)",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={dc,1265916115,Xb},
[m]={sc,1265916115,ob,ob},
[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();"}}
[n]={{A,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();"},{A,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",
[g]="... method A also declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{class|instance}0 method %1 also declared here",
[h]="%select{class|instance}0 method %1 also declared here",
[j]=i,
[j]=i,
[k]="(?:class|instance) method (.*?) also declared here",
[l]="(?:class|instance) method (.*?) also declared here",
[l]=a,
[b]=a,
[c]=a,
[k]=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.","Implement AST importing and checking for Objective-C method declarations."},
[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;"}},
[n]={{Q,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;"},{Q,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;"},{Q,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]={
[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"}
["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"}
Line 9,356: Line 9,378:
},
},
["note_odr_objc_missing_superclass"]={
["note_odr_objc_missing_superclass"]={
[b]="no corresponding superclass here",
[g]="no corresponding superclass here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="no corresponding superclass here",
[h]="no corresponding superclass here",
[j]=i,
[j]=i,
[k]="no corresponding superclass here",
[l]="no corresponding superclass here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"7244b0bb860b",1266366870,"Implement AST importing of Objective-C instance variables. "},
[m]={"7244b0bb860b",1266366870,"Implement AST importing of Objective-C instance variables. ","Implement AST importing of Objective-C instance variables. "},
[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);"}}
[n]={{Q,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);"},{Q,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);"},{Q,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);"},{Q,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",
[g]="property A is implemented with ... here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="property %0 is implemented with %select{@synthesize|@dynamic}1 here",
[h]="property %0 is implemented with %select{@synthesize|@dynamic}1 here",
[j]=i,
[j]=i,
[k]="property (.*?) is implemented with (?:@synthesize|@dynamic) here",
[l]="property (.*?) is implemented with (?:@synthesize|@dynamic) here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"14a49e2fbe1c",1291746723,"Implement AST import for Objective-C property implementations"},
[m]={"14a49e2fbe1c",1291746723,"Implement AST import for Objective-C property implementations","Implement AST import for Objective-C property implementations"},
[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);"}},
[n]={{Q,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]={
[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"}
["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"}
Line 9,383: Line 9,405:
},
},
["note_odr_objc_superclass"]={
["note_odr_objc_superclass"]={
[b]="inherits from superclass A here",
[g]="inherits from superclass A here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="inherits from superclass %0 here",
[h]="inherits from superclass %0 here",
[j]=i,
[j]=i,
[k]="inherits from superclass (.*?) here",
[l]="inherits from superclass (.*?) here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"7244b0bb860b",1266366870,"Implement AST importing of Objective-C instance variables. "},
[m]={"7244b0bb860b",1266366870,"Implement AST importing of Objective-C instance variables. ","Implement AST importing of Objective-C instance variables. "},
[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();"}},
[n]={{Q,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();"},{Q,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();"},{Q,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();"},{Q,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]={
[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"}
["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"}
Line 9,398: Line 9,420:
},
},
["note_odr_objc_synthesize_ivar_here"]={
["note_odr_objc_synthesize_ivar_here"]={
[b]="property is synthesized to ivar A here",
[g]="property is synthesized to ivar A here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="property is synthesized to ivar %0 here",
[h]="property is synthesized to ivar %0 here",
[j]=i,
[j]=i,
[k]="property is synthesized to ivar (.*?) here",
[l]="property is synthesized to ivar (.*?) here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"14a49e2fbe1c",1291746723,"Implement AST import for Objective-C property implementations"},
[m]={"14a49e2fbe1c",1291746723,"Implement AST import for Objective-C property implementations","Implement AST import for Objective-C property implementations"},
[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();"}},
[n]={{Q,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]={
[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"}
["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"}
Line 9,413: Line 9,435:
},
},
["note_odr_parameter_pack_non_pack"]={
["note_odr_parameter_pack_non_pack"]={
[b]="... declared here",
[g]="... declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{parameter|parameter pack}0 declared here",
[h]="%select{parameter|parameter pack}0 declared here",
[j]=i,
[j]=i,
[k]="(?:parameter|parameter pack) declared here",
[l]="(?:parameter|parameter pack) declared here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"a082a49d9e71",1291144490,"Implement basic AST importing and merging support for class template"},
[m]={"a082a49d9e71",1291144490,Zc,Zc},
[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();"}},
[n]={{A,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();"},{A,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();"},{A,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]={
[o]={
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:117:17: note: parameter declared here"}
["clang/test/SemaObjC/arc-decls.m"]={"clang/test/SemaObjC/arc-decls.m:117:17: note: parameter declared here"}
Line 9,428: Line 9,450:
},
},
["note_odr_tag_kind_here"]={
["note_odr_tag_kind_here"]={
[b]="A is a ... here",
[g]="A is a ... here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[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,
[j]=i,
[k]="(.*?) is a (?:struct|interface|union|class|enum) here",
[l]="(.*?) is a (?:struct|interface|union|class|enum) here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={dc,1265916115,Xb},
[m]={sc,1265916115,ob,ob},
[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();"}},
[n]={{A,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]={
[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"}
["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"}
Line 9,443: Line 9,465:
},
},
["note_odr_template_parameter_here"]={
["note_odr_template_parameter_here"]={
[b]="template parameter declared here",
[g]="template parameter declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="template parameter declared here",
[h]="template parameter declared here",
[j]=i,
[j]=i,
[k]="template parameter declared here",
[l]="template parameter declared here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"a082a49d9e71",1291144490,"Implement basic AST importing and merging support for class template"},
[m]={"a082a49d9e71",1291144490,Zc,Zc},
[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);"}},
[n]={{A,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]={
[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"}
["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"}
Line 9,458: Line 9,480:
},
},
["note_odr_template_parameter_list"]={
["note_odr_template_parameter_list"]={
[b]="template parameter list also declared here",
[g]="template parameter list also declared here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="template parameter list also declared here",
[h]="template parameter list also declared here",
[j]=i,
[j]=i,
[k]="template parameter list also declared here",
[l]="template parameter list also declared here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={"a082a49d9e71",1291144490,"Implement basic AST importing and merging support for class template"},
[m]={"a082a49d9e71",1291144490,Zc,Zc},
[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);"}}
[n]={{A,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",
[g]="declared here with type A",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="declared here with type %0",
[h]="declared here with type %0",
[j]=i,
[j]=i,
[k]="declared here with type (.*?)",
[l]="declared here with type (.*?)",
[l]=a,
[b]=a,
[c]=a,
[k]=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","Implement basic importing and merging of variable declarations within"},
[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();"}},
[n]={{Q,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();"},{Q,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();"},{Q,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();"},{Q,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();"},{Q,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();"},{Q,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();"},{Q,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();"},{A,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]={
[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\'"}
["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\'"}
Line 9,485: Line 9,507:
},
},
["note_odr_virtual_base"]={
["note_odr_virtual_base"]={
[b]="... derivation here",
[g]="... derivation here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="%select{non-virtual|virtual}0 derivation here",
[h]="%select{non-virtual|virtual}0 derivation here",
[j]=i,
[j]=i,
[k]="(?:non\\-virtual|virtual) derivation here",
[l]="(?:non\\-virtual|virtual) derivation here",
[l]=a,
[b]=a,
[c]=a,
[k]=a,
[m]={dc,1265916115,Xb},
[m]={sc,1265916115,ob,ob},
[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();"}}
[n]={{A,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",
[g]="the ignored tokens spans until here",
[e]=d,
[d]=c,
[g]=f,
[f]=e,
[h]="the ignored tokens spans until here",
[h]="the ignored tokens spans until here",
[j]=i,
[j]=i,
[k]="the ignored tokens spans until here",
[l]="the ignored tokens spans until here",
[l]=a,
[b]=a,
[c]=Z,
[k]=qb,
[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","[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]={
[o]={
Bots, Bureaucrats, Interface administrators, smwadministrator, smwcurator, smweditor, Administrators
2,557

edits

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

Navigation menu